[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT/APPWAMR_RASPI_DEMO PATCH v2 1/1] apps/wamr-raspi-demo: Unikraft WAMR baremetal demo running on a Raspberry Pi3 B+



Unikraft WAMR baremetal demo running on a Raspberry Pi3 B+.

Signed-off-by: Santiago Pagani <santiagopagani@xxxxxxxxx>
---
 Config.uk                                     |   11 +
 Makefile                                      |   10 +
 Makefile.uk                                   |    5 +
 README.md                                     |   28 +-
 main.c                                        |  197 +
 scriptsrcs/lvgl/.clang-format                 |   97 +
 scriptsrcs/lvgl/.editorconfig                 |    7 +
 scriptsrcs/lvgl/.gitignore                    |    5 +
 scriptsrcs/lvgl/.gitmodules                   |    0
 scriptsrcs/lvgl/LICENCE.txt                   |    8 +
 scriptsrcs/lvgl/README.md                     |  398 ++
 scriptsrcs/lvgl/docs/CODE_OF_CONDUCT.md       |   46 +
 scriptsrcs/lvgl/docs/CODING_STYLE.md          |   94 +
 scriptsrcs/lvgl/docs/CONTRIBUTING.md          |  111 +
 scriptsrcs/lvgl/library.json                  |   14 +
 scriptsrcs/lvgl/lv_conf_template.h            |  591 +++
 scriptsrcs/lvgl/lvgl.h                        |   97 +
 scriptsrcs/lvgl/lvgl.mk                       |    8 +
 .../lvgl/porting/lv_port_disp_template.c      |  195 +
 .../lvgl/porting/lv_port_disp_template.h      |   44 +
 scriptsrcs/lvgl/porting/lv_port_fs_template.c |  379 ++
 scriptsrcs/lvgl/porting/lv_port_fs_template.h |   44 +
 .../lvgl/porting/lv_port_indev_template.c     |  428 ++
 .../lvgl/porting/lv_port_indev_template.h     |   45 +
 scriptsrcs/lvgl/scripts/Doxyfile              | 2455 +++++++++
 .../FontAwesome5-Solid+Brands+Regular.woff    |  Bin 0 -> 353228 bytes
 .../scripts/built_in_font/Roboto-Regular.woff |  Bin 0 -> 61736 bytes
 .../built_in_font/built_in_font_gen.py        |   47 +
 scriptsrcs/lvgl/scripts/clang-formatter.sh    |   13 +
 scriptsrcs/lvgl/scripts/cppcheck_run.sh       |    2 +
 scriptsrcs/lvgl/scripts/lv_conf_checker.py    |   60 +
 scriptsrcs/lvgl/src/lv_conf_checker.h         |  851 +++
 scriptsrcs/lvgl/src/lv_core/lv_core.mk        |   12 +
 scriptsrcs/lvgl/src/lv_core/lv_debug.c        |  193 +
 scriptsrcs/lvgl/src/lv_core/lv_debug.h        |  154 +
 scriptsrcs/lvgl/src/lv_core/lv_disp.c         |  178 +
 scriptsrcs/lvgl/src/lv_core/lv_disp.h         |  152 +
 scriptsrcs/lvgl/src/lv_core/lv_group.c        |  708 +++
 scriptsrcs/lvgl/src/lv_core/lv_group.h        |  293 ++
 scriptsrcs/lvgl/src/lv_core/lv_indev.c        | 1240 +++++
 scriptsrcs/lvgl/src/lv_core/lv_indev.h        |  159 +
 scriptsrcs/lvgl/src/lv_core/lv_obj.c          | 2606 ++++++++++
 scriptsrcs/lvgl/src/lv_core/lv_obj.h          | 1007 ++++
 scriptsrcs/lvgl/src/lv_core/lv_refr.c         |  583 +++
 scriptsrcs/lvgl/src/lv_core/lv_refr.h         |   93 +
 scriptsrcs/lvgl/src/lv_core/lv_style.c        |  353 ++
 scriptsrcs/lvgl/src/lv_core/lv_style.h        |  301 ++
 scriptsrcs/lvgl/src/lv_draw/lv_draw.c         |  191 +
 scriptsrcs/lvgl/src/lv_draw/lv_draw.h         |  109 +
 scriptsrcs/lvgl/src/lv_draw/lv_draw.mk        |   15 +
 scriptsrcs/lvgl/src/lv_draw/lv_draw_arc.c     |  251 +
 scriptsrcs/lvgl/src/lv_draw/lv_draw_arc.h     |   52 +
 scriptsrcs/lvgl/src/lv_draw/lv_draw_basic.c   |  783 +++
 scriptsrcs/lvgl/src/lv_draw/lv_draw_basic.h   |   82 +
 scriptsrcs/lvgl/src/lv_draw/lv_draw_img.c     |  601 +++
 scriptsrcs/lvgl/src/lv_draw/lv_draw_img.h     |  172 +
 scriptsrcs/lvgl/src/lv_draw/lv_draw_label.c   |  318 ++
 scriptsrcs/lvgl/src/lv_draw/lv_draw_label.h   |   80 +
 scriptsrcs/lvgl/src/lv_draw/lv_draw_line.c    |  637 +++
 scriptsrcs/lvgl/src/lv_draw/lv_draw_line.h    |   48 +
 scriptsrcs/lvgl/src/lv_draw/lv_draw_rect.c    | 1521 ++++++
 scriptsrcs/lvgl/src/lv_draw/lv_draw_rect.h    |   47 +
 .../lvgl/src/lv_draw/lv_draw_triangle.c       |  343 ++
 .../lvgl/src/lv_draw/lv_draw_triangle.h       |   58 +
 scriptsrcs/lvgl/src/lv_draw/lv_img_cache.c    |  206 +
 scriptsrcs/lvgl/src/lv_draw/lv_img_cache.h    |   78 +
 scriptsrcs/lvgl/src/lv_draw/lv_img_decoder.c  |  755 +++
 scriptsrcs/lvgl/src/lv_draw/lv_img_decoder.h  |  357 ++
 scriptsrcs/lvgl/src/lv_font/lv_font.c         |   84 +
 scriptsrcs/lvgl/src/lv_font/lv_font.h         |  164 +
 scriptsrcs/lvgl/src/lv_font/lv_font.mk        |   12 +
 scriptsrcs/lvgl/src/lv_font/lv_font_fmt_txt.c |  479 ++
 scriptsrcs/lvgl/src/lv_font/lv_font_fmt_txt.h |  235 +
 .../lvgl/src/lv_font/lv_font_roboto_12.c      | 1628 ++++++
 .../src/lv_font/lv_font_roboto_12_subpx.c     | 3419 ++++++++++++
 .../lvgl/src/lv_font/lv_font_roboto_16.c      | 2116 ++++++++
 .../lvgl/src/lv_font/lv_font_roboto_22.c      | 3224 ++++++++++++
 .../lvgl/src/lv_font/lv_font_roboto_28.c      | 4609 +++++++++++++++++
 .../lv_font/lv_font_roboto_28_compressed.c    | 2451 +++++++++
 .../lvgl/src/lv_font/lv_font_unscii_8.c       |  462 ++
 scriptsrcs/lvgl/src/lv_font/lv_symbol_def.h   |  152 +
 scriptsrcs/lvgl/src/lv_hal/lv_hal.h           |   40 +
 scriptsrcs/lvgl/src/lv_hal/lv_hal.mk          |    8 +
 scriptsrcs/lvgl/src/lv_hal/lv_hal_disp.c      |  358 ++
 scriptsrcs/lvgl/src/lv_hal/lv_hal_disp.h      |  292 ++
 scriptsrcs/lvgl/src/lv_hal/lv_hal_indev.c     |  158 +
 scriptsrcs/lvgl/src/lv_hal/lv_hal_indev.h     |  213 +
 scriptsrcs/lvgl/src/lv_hal/lv_hal_tick.c      |  100 +
 scriptsrcs/lvgl/src/lv_hal/lv_hal_tick.h      |   70 +
 scriptsrcs/lvgl/src/lv_misc/lv_anim.c         |  474 ++
 scriptsrcs/lvgl/src/lv_misc/lv_anim.h         |  331 ++
 scriptsrcs/lvgl/src/lv_misc/lv_area.c         |  210 +
 scriptsrcs/lvgl/src/lv_misc/lv_area.h         |  186 +
 scriptsrcs/lvgl/src/lv_misc/lv_async.c        |   75 +
 scriptsrcs/lvgl/src/lv_misc/lv_async.h        |   62 +
 scriptsrcs/lvgl/src/lv_misc/lv_bidi.c         |  540 ++
 scriptsrcs/lvgl/src/lv_misc/lv_bidi.h         |   76 +
 scriptsrcs/lvgl/src/lv_misc/lv_circ.c         |   79 +
 scriptsrcs/lvgl/src/lv_misc/lv_circ.h         |   77 +
 scriptsrcs/lvgl/src/lv_misc/lv_color.c        |  171 +
 scriptsrcs/lvgl/src/lv_misc/lv_color.h        |  529 ++
 scriptsrcs/lvgl/src/lv_misc/lv_fs.c           |  642 +++
 scriptsrcs/lvgl/src/lv_misc/lv_fs.h           |  299 ++
 scriptsrcs/lvgl/src/lv_misc/lv_gc.c           |   40 +
 scriptsrcs/lvgl/src/lv_misc/lv_gc.h           |   74 +
 scriptsrcs/lvgl/src/lv_misc/lv_ll.c           |  422 ++
 scriptsrcs/lvgl/src/lv_misc/lv_ll.h           |  160 +
 scriptsrcs/lvgl/src/lv_misc/lv_log.c          |   78 +
 scriptsrcs/lvgl/src/lv_misc/lv_log.h          |  144 +
 scriptsrcs/lvgl/src/lv_misc/lv_math.c         |  203 +
 scriptsrcs/lvgl/src/lv_misc/lv_math.h         |   80 +
 scriptsrcs/lvgl/src/lv_misc/lv_mem.c          |  466 ++
 scriptsrcs/lvgl/src/lv_misc/lv_mem.h          |  107 +
 scriptsrcs/lvgl/src/lv_misc/lv_misc.mk        |   22 +
 scriptsrcs/lvgl/src/lv_misc/lv_printf.c       |  852 +++
 scriptsrcs/lvgl/src/lv_misc/lv_printf.h       |   75 +
 scriptsrcs/lvgl/src/lv_misc/lv_task.c         |  382 ++
 scriptsrcs/lvgl/src/lv_misc/lv_task.h         |  177 +
 scriptsrcs/lvgl/src/lv_misc/lv_templ.c        |   40 +
 scriptsrcs/lvgl/src/lv_misc/lv_templ.h        |   37 +
 scriptsrcs/lvgl/src/lv_misc/lv_txt.c          |  838 +++
 scriptsrcs/lvgl/src/lv_misc/lv_txt.h          |  211 +
 scriptsrcs/lvgl/src/lv_misc/lv_types.h        |   64 +
 scriptsrcs/lvgl/src/lv_misc/lv_utils.c        |  115 +
 scriptsrcs/lvgl/src/lv_misc/lv_utils.h        |   66 +
 scriptsrcs/lvgl/src/lv_objx/lv_arc.c          |  305 ++
 scriptsrcs/lvgl/src/lv_objx/lv_arc.h          |  123 +
 scriptsrcs/lvgl/src/lv_objx/lv_bar.c          |  548 ++
 scriptsrcs/lvgl/src/lv_objx/lv_bar.h          |  193 +
 scriptsrcs/lvgl/src/lv_objx/lv_btn.c          |  723 +++
 scriptsrcs/lvgl/src/lv_objx/lv_btn.h          |  329 ++
 scriptsrcs/lvgl/src/lv_objx/lv_btnm.c         | 1123 ++++
 scriptsrcs/lvgl/src/lv_objx/lv_btnm.h         |  276 +
 scriptsrcs/lvgl/src/lv_objx/lv_calendar.c     |  983 ++++
 scriptsrcs/lvgl/src/lv_objx/lv_calendar.h     |  229 +
 scriptsrcs/lvgl/src/lv_objx/lv_canvas.c       |  870 ++++
 scriptsrcs/lvgl/src/lv_objx/lv_canvas.h       |  265 +
 scriptsrcs/lvgl/src/lv_objx/lv_cb.c           |  338 ++
 scriptsrcs/lvgl/src/lv_objx/lv_cb.h           |  173 +
 scriptsrcs/lvgl/src/lv_objx/lv_chart.c        | 1557 ++++++
 scriptsrcs/lvgl/src/lv_objx/lv_chart.h        |  395 ++
 scriptsrcs/lvgl/src/lv_objx/lv_cont.c         |  710 +++
 scriptsrcs/lvgl/src/lv_objx/lv_cont.h         |  210 +
 scriptsrcs/lvgl/src/lv_objx/lv_cpicker.c      | 1068 ++++
 scriptsrcs/lvgl/src/lv_objx/lv_cpicker.h      |  263 +
 scriptsrcs/lvgl/src/lv_objx/lv_ddlist.c       | 1028 ++++
 scriptsrcs/lvgl/src/lv_objx/lv_ddlist.h       |  269 +
 scriptsrcs/lvgl/src/lv_objx/lv_gauge.c        |  473 ++
 scriptsrcs/lvgl/src/lv_objx/lv_gauge.h        |  233 +
 scriptsrcs/lvgl/src/lv_objx/lv_img.c          |  432 ++
 scriptsrcs/lvgl/src/lv_objx/lv_img.h          |  179 +
 scriptsrcs/lvgl/src/lv_objx/lv_imgbtn.c       |  437 ++
 scriptsrcs/lvgl/src/lv_objx/lv_imgbtn.h       |  230 +
 scriptsrcs/lvgl/src/lv_objx/lv_kb.c           |  471 ++
 scriptsrcs/lvgl/src/lv_objx/lv_kb.h           |  207 +
 scriptsrcs/lvgl/src/lv_objx/lv_label.c        | 1434 +++++
 scriptsrcs/lvgl/src/lv_objx/lv_label.h        |  351 ++
 scriptsrcs/lvgl/src/lv_objx/lv_led.c          |  258 +
 scriptsrcs/lvgl/src/lv_objx/lv_led.h          |  126 +
 scriptsrcs/lvgl/src/lv_objx/lv_line.c         |  308 ++
 scriptsrcs/lvgl/src/lv_objx/lv_line.h         |  147 +
 scriptsrcs/lvgl/src/lv_objx/lv_list.c         | 1036 ++++
 scriptsrcs/lvgl/src/lv_objx/lv_list.h         |  359 ++
 scriptsrcs/lvgl/src/lv_objx/lv_lmeter.c       |  422 ++
 scriptsrcs/lvgl/src/lv_objx/lv_lmeter.h       |  179 +
 scriptsrcs/lvgl/src/lv_objx/lv_mbox.c         |  573 ++
 scriptsrcs/lvgl/src/lv_objx/lv_mbox.h         |  212 +
 scriptsrcs/lvgl/src/lv_objx/lv_objx.mk        |   37 +
 scriptsrcs/lvgl/src/lv_objx/lv_objx_templ.c   |  229 +
 scriptsrcs/lvgl/src/lv_objx/lv_objx_templ.h   |  108 +
 scriptsrcs/lvgl/src/lv_objx/lv_page.c         | 1262 +++++
 scriptsrcs/lvgl/src/lv_objx/lv_page.h         |  416 ++
 scriptsrcs/lvgl/src/lv_objx/lv_preload.c      |  444 ++
 scriptsrcs/lvgl/src/lv_objx/lv_preload.h      |  197 +
 scriptsrcs/lvgl/src/lv_objx/lv_roller.c       |  732 +++
 scriptsrcs/lvgl/src/lv_objx/lv_roller.h       |  212 +
 scriptsrcs/lvgl/src/lv_objx/lv_slider.c       |  620 +++
 scriptsrcs/lvgl/src/lv_objx/lv_slider.h       |  216 +
 scriptsrcs/lvgl/src/lv_objx/lv_spinbox.c      |  479 ++
 scriptsrcs/lvgl/src/lv_objx/lv_spinbox.h      |  188 +
 scriptsrcs/lvgl/src/lv_objx/lv_sw.c           |  403 ++
 scriptsrcs/lvgl/src/lv_objx/lv_sw.h           |  159 +
 scriptsrcs/lvgl/src/lv_objx/lv_ta.c           | 1945 +++++++
 scriptsrcs/lvgl/src/lv_objx/lv_ta.h           |  478 ++
 scriptsrcs/lvgl/src/lv_objx/lv_table.c        |  894 ++++
 scriptsrcs/lvgl/src/lv_objx/lv_table.h        |  268 +
 scriptsrcs/lvgl/src/lv_objx/lv_tabview.c      | 1164 +++++
 scriptsrcs/lvgl/src/lv_objx/lv_tabview.h      |  231 +
 scriptsrcs/lvgl/src/lv_objx/lv_tileview.c     |  574 ++
 scriptsrcs/lvgl/src/lv_objx/lv_tileview.h     |  178 +
 scriptsrcs/lvgl/src/lv_objx/lv_win.c          |  610 +++
 scriptsrcs/lvgl/src/lv_objx/lv_win.h          |  302 ++
 scriptsrcs/lvgl/src/lv_themes/lv_theme.c      |  124 +
 scriptsrcs/lvgl/src/lv_themes/lv_theme.h      |  382 ++
 .../lvgl/src/lv_themes/lv_theme_alien.c       |  958 ++++
 .../lvgl/src/lv_themes/lv_theme_alien.h       |   59 +
 .../lvgl/src/lv_themes/lv_theme_default.c     |  477 ++
 .../lvgl/src/lv_themes/lv_theme_default.h     |   60 +
 .../lvgl/src/lv_themes/lv_theme_material.c    |  936 ++++
 .../lvgl/src/lv_themes/lv_theme_material.h    |   60 +
 scriptsrcs/lvgl/src/lv_themes/lv_theme_mono.c |  525 ++
 scriptsrcs/lvgl/src/lv_themes/lv_theme_mono.h |   60 +
 scriptsrcs/lvgl/src/lv_themes/lv_theme_nemo.c |  929 ++++
 scriptsrcs/lvgl/src/lv_themes/lv_theme_nemo.h |   60 +
 .../lvgl/src/lv_themes/lv_theme_night.c       |  847 +++
 .../lvgl/src/lv_themes/lv_theme_night.h       |   60 +
 .../lvgl/src/lv_themes/lv_theme_templ.c       |  473 ++
 .../lvgl/src/lv_themes/lv_theme_templ.h       |   60 +
 scriptsrcs/lvgl/src/lv_themes/lv_theme_zen.c  |  902 ++++
 scriptsrcs/lvgl/src/lv_themes/lv_theme_zen.h  |   60 +
 scriptsrcs/lvgl/src/lv_themes/lv_themes.mk    |   14 +
 scriptsrcs/lvgl/src/lv_version.h              |   66 +
 scriptsrcs/wamr/.gitignore                    |    2 +
 scriptsrcs/wamr/CONTRIBUTING.md               |   32 +
 scriptsrcs/wamr/Dockerfile                    |   21 +
 scriptsrcs/wamr/LICENSE                       |  202 +
 scriptsrcs/wamr/README.md                     |  128 +
 .../core/app-mgr/app-manager/CMakeLists.txt   |   28 +
 .../core/app-mgr/app-manager/app_manager.c    |  406 ++
 .../core/app-mgr/app-manager/app_manager.h    |  107 +
 .../app-mgr/app-manager/app_manager_host.c    |  303 ++
 .../app-mgr/app-manager/app_manager_host.h    |   35 +
 .../core/app-mgr/app-manager/app_mgr.cmake    |   23 +
 .../wamr/core/app-mgr/app-manager/ble_msg.c   |  126 +
 .../core/app-mgr/app-manager/coding_rule.txt  |   15 +
 .../wamr/core/app-mgr/app-manager/event.c     |  203 +
 .../wamr/core/app-mgr/app-manager/event.h     |   52 +
 .../wamr/core/app-mgr/app-manager/message.c   |   98 +
 .../core/app-mgr/app-manager/module_config.h  |   34 +
 .../core/app-mgr/app-manager/module_jeff.c    | 1744 +++++++
 .../core/app-mgr/app-manager/module_jeff.h    |   40 +
 .../core/app-mgr/app-manager/module_utils.c   |  226 +
 .../app-mgr/app-manager/module_wasm_app.c     |  992 ++++
 .../app-mgr/app-manager/module_wasm_app.h     |   98 +
 .../app-mgr/app-manager/module_wasm_lib.c     |   59 +
 .../app-mgr/app-manager/module_wasm_lib.h     |   32 +
 .../platform/linux/app_mgr_linux.c            |   54 +
 .../platform/zephyr/app_mgr_zephyr.c          |   72 +
 .../core/app-mgr/app-manager/resource_reg.c   |  214 +
 .../wamr/core/app-mgr/app-manager/watchdog.c  |  140 +
 .../wamr/core/app-mgr/app-manager/watchdog.h  |   49 +
 .../app-mgr-shared/app_manager_export.h       |  300 ++
 .../app-mgr-shared/app_mgr_shared.cmake       |   23 +
 .../core/app-mgr/app-mgr-shared/host_link.h   |   42 +
 scriptsrcs/wamr/core/app-mgr/module.json      |   53 +
 .../iwasm/app-samples/hello-world/build.sh    |   17 +
 .../core/iwasm/app-samples/hello-world/main.c |   39 +
 .../iwasm/app-samples/smart-light/build.sh    |   17 +
 .../core/iwasm/app-samples/smart-light/main.c |   67 +
 .../wamr/core/iwasm/lib/3rdparty/LICENCE.txt  |    8 +
 .../wamr/core/iwasm/lib/3rdparty/lv_conf.h    |  495 ++
 .../iwasm/lib/app-libs/base/bh_platform.c     |  112 +
 .../iwasm/lib/app-libs/base/bh_platform.h     |   59 +
 .../core/iwasm/lib/app-libs/base/request.c    |  357 ++
 .../core/iwasm/lib/app-libs/base/request.h    |  135 +
 .../wamr/core/iwasm/lib/app-libs/base/timer.c |  106 +
 .../iwasm/lib/app-libs/base/timer_wasm_app.h  |   79 +
 .../core/iwasm/lib/app-libs/base/wasm_app.h   |   94 +
 .../extension/connection/connection.c         |  130 +
 .../extension/connection/connection.h         |  106 +
 .../app-libs/extension/gui/inc/LICENCE.txt    |    8 +
 .../lib/app-libs/extension/gui/inc/wgl_btn.h  |  173 +
 .../lib/app-libs/extension/gui/inc/wgl_cb.h   |   90 +
 .../app-libs/extension/gui/inc/wgl_label.h    |   77 +
 .../lib/app-libs/extension/gui/inc/wgl_list.h |   65 +
 .../lib/app-libs/extension/gui/inc/wgl_obj.h  |  101 +
 .../app-libs/extension/gui/inc/wgl_types.h    |   40 +
 .../extension/gui/lvgl-compatible/LICENCE.txt |    8 +
 .../extension/gui/lvgl-compatible/lv_btn.h    |   86 +
 .../extension/gui/lvgl-compatible/lv_cb.h     |   47 +
 .../extension/gui/lvgl-compatible/lv_label.h  |   61 +
 .../extension/gui/lvgl-compatible/lv_list.h   |   48 +
 .../extension/gui/lvgl-compatible/lv_obj.h    |  100 +
 .../extension/gui/lvgl-compatible/lv_types.h  |   39 +
 .../iwasm/lib/app-libs/extension/gui/lvgl.h   |   37 +
 .../lib/app-libs/extension/gui/src/wgl_btn.c  |  131 +
 .../lib/app-libs/extension/gui/src/wgl_cb.c   |   83 +
 .../app-libs/extension/gui/src/wgl_label.c    |  262 +
 .../lib/app-libs/extension/gui/src/wgl_list.c |  162 +
 .../lib/app-libs/extension/gui/src/wgl_obj.c  |  128 +
 .../iwasm/lib/app-libs/extension/gui/wgl.h    |   37 +
 .../lib/app-libs/extension/sensor/sensor.c    |  125 +
 .../lib/app-libs/extension/sensor/sensor.h    |  103 +
 .../core/iwasm/lib/app-libs/libc/lib_base.h   |   46 +
 .../lib/native-interface/attr_container.c     |  841 +++
 .../lib/native-interface/attr_container.h     |  436 ++
 .../lib/native-interface/connection_api.h     |   38 +
 .../core/iwasm/lib/native-interface/gui_api.h |   37 +
 .../native-interface/native_interface.cmake   |   23 +
 .../lib/native-interface/native_interface.h   |   90 +
 .../iwasm/lib/native-interface/readme.txt     |   12 +
 .../lib/native-interface/restful_utils.c      |  428 ++
 .../iwasm/lib/native-interface/sensor_api.h   |   41 +
 .../iwasm/lib/native-interface/shared_utils.h |  143 +
 .../iwasm/lib/native-interface/wasm_export.h  |  102 +
 .../lib/native-interface/wgl_shared_utils.h   |  342 ++
 .../iwasm/lib/native/base/base_lib_export.c   |  158 +
 .../iwasm/lib/native/base/base_lib_export.h   |   24 +
 .../iwasm/lib/native/base/request_response.c  |  111 +
 .../core/iwasm/lib/native/base/runtime_lib.h  |   29 +
 .../iwasm/lib/native/base/timer_wrapper.c     |  179 +
 .../iwasm/lib/native/base/wasm_lib_base.cmake |   23 +
 .../extension/connection/connection.inl       |   20 +
 .../extension/connection/connection_lib.h     |   86 +
 .../extension/connection/connection_wrapper.c |   84 +
 .../extension/connection/linux/conn_tcp.c     |   62 +
 .../extension/connection/linux/conn_tcp.h     |   37 +
 .../extension/connection/linux/conn_uart.c    |  110 +
 .../extension/connection/linux/conn_uart.h    |   37 +
 .../extension/connection/linux/conn_udp.c     |   68 +
 .../extension/connection/linux/conn_udp.h     |   37 +
 .../connection/linux/connection_mgr.c         |  572 ++
 .../connection/linux/connection_mgr.cmake     |   24 +
 .../extension/connection/wasm_lib_conn.cmake  |   23 +
 .../connection/zephyr/connection_lib_impl.c   |   34 +
 .../lib/native/extension/gui/wamr_gui.inl     |   39 +
 .../native/extension/gui/wasm_lib_gui.cmake   |   25 +
 .../native/extension/gui/wgl_btn_wrapper.c    |   57 +
 .../lib/native/extension/gui/wgl_cb_wrapper.c |   73 +
 .../native/extension/gui/wgl_cont_wrapper.c   |   18 +
 .../native/extension/gui/wgl_label_wrapper.c  |   72 +
 .../native/extension/gui/wgl_list_wrapper.c   |   63 +
 .../native/extension/gui/wgl_native_utils.c   |  201 +
 .../native/extension/gui/wgl_native_utils.h   |   73 +
 .../native/extension/gui/wgl_obj_wrapper.c    |  374 ++
 .../native/extension/sensor/runtime_sensor.c  |  424 ++
 .../native/extension/sensor/runtime_sensor.h  |   75 +
 .../extension/sensor/runtime_sensor.inl       |   20 +
 .../native/extension/sensor/sensor_mgr_ref.c  |  144 +
 .../extension/sensor/wasm_lib_sensor.cmake    |   23 +
 .../extension/template/lib_export_template.c  |   28 +
 .../core/iwasm/lib/native/libc/libc_wrapper.c | 1082 ++++
 .../iwasm/lib/native/libc/wasm_libc.cmake     |   23 +
 .../core/iwasm/products/alios-things/iwasm.mk |   49 +
 .../alios-things/src/ext_lib_export.c         |   21 +
 .../iwasm/products/alios-things/src/main.c    |  129 +
 .../products/alios-things/src/test_wasm.h     |   65 +
 .../core/iwasm/products/darwin/CMakeLists.txt |  107 +
 .../iwasm/products/darwin/ext_lib_export.c    |   21 +
 .../wamr/core/iwasm/products/darwin/main.c    |  251 +
 .../iwasm/products/linux-sgx/CMakeLists.txt   |   90 +
 .../iwasm/products/linux-sgx/ext_lib_export.c |   21 +
 .../core/iwasm/products/linux/CMakeLists.txt  |  104 +
 .../iwasm/products/linux/ext_lib_export.c     |   21 +
 .../wamr/core/iwasm/products/linux/main.c     |  275 +
 .../iwasm/products/vxworks/CMakeLists.txt     |  107 +
 .../iwasm/products/vxworks/ext_lib_export.c   |   21 +
 .../wamr/core/iwasm/products/vxworks/main.c   |  267 +
 .../products/zephyr/simple/CMakeLists.txt     |   56 +
 .../iwasm/products/zephyr/simple/prj.conf     |    0
 .../zephyr/simple/src/ext_lib_export.c        |   21 +
 .../iwasm/products/zephyr/simple/src/main.c   |  149 +
 .../products/zephyr/simple/src/test_wasm.h    |   65 +
 .../core/iwasm/runtime/include/bh_memory.h    |  110 +
 .../iwasm/runtime/include/ext_lib_export.h    |   38 +
 .../core/iwasm/runtime/include/lib_export.h   |   63 +
 .../iwasm/runtime/include/wasm_application.h  |   65 +
 .../core/iwasm/runtime/include/wasm_dlfcn.h   |   32 +
 .../core/iwasm/runtime/include/wasm_export.h  |  430 ++
 .../core/iwasm/runtime/include/wasm_hashmap.h |  144 +
 .../core/iwasm/runtime/include/wasm_log.h     |   94 +
 .../core/iwasm/runtime/include/wasm_vector.h  |  137 +
 .../runtime/platform/alios/wasm_native.c      |   26 +
 .../runtime/platform/darwin/platform.cmake    |   25 +
 .../runtime/platform/darwin/wasm_native.c     |   25 +
 .../runtime/platform/include/wa_thread.h      |   63 +
 .../runtime/platform/include/wasm_assert.h    |   34 +
 .../runtime/platform/include/wasm_config.h    |   23 +
 .../runtime/platform/include/wasm_memory.h    |   34 +
 .../platform/include/wasm_platform_log.h      |   26 +
 .../runtime/platform/linux-sgx/platform.cmake |   25 +
 .../runtime/platform/linux-sgx/wasm_native.c  |  332 ++
 .../runtime/platform/linux/platform.cmake     |   25 +
 .../runtime/platform/linux/wasm_native.c      |  346 ++
 .../runtime/platform/vxworks/platform.cmake   |   25 +
 .../runtime/platform/vxworks/wasm_native.c    |   26 +
 .../runtime/platform/zephyr/wasm_native.c     |   26 +
 .../wamr/core/iwasm/runtime/utils/utils.cmake |   22 +
 .../core/iwasm/runtime/utils/wasm_dlfcn.c     |  107 +
 .../core/iwasm/runtime/utils/wasm_hashmap.c   |  301 ++
 .../wamr/core/iwasm/runtime/utils/wasm_log.c  |  105 +
 .../core/iwasm/runtime/utils/wasm_vector.c    |  217 +
 .../vmcore-wasm/invokeNative_general.c        |   92 +
 .../runtime/vmcore-wasm/invokeNative_ia32.s   |   56 +
 .../iwasm/runtime/vmcore-wasm/vmcore.cmake    |   28 +
 .../core/iwasm/runtime/vmcore-wasm/wasm.h     |  405 ++
 .../runtime/vmcore-wasm/wasm_application.c    |  403 ++
 .../iwasm/runtime/vmcore-wasm/wasm_interp.c   | 2261 ++++++++
 .../iwasm/runtime/vmcore-wasm/wasm_interp.h   |   79 +
 .../iwasm/runtime/vmcore-wasm/wasm_loader.c   | 3075 +++++++++++
 .../iwasm/runtime/vmcore-wasm/wasm_loader.h   |   89 +
 .../iwasm/runtime/vmcore-wasm/wasm_native.h   |   66 +
 .../iwasm/runtime/vmcore-wasm/wasm_opcode.h   |  472 ++
 .../iwasm/runtime/vmcore-wasm/wasm_runtime.c  | 1421 +++++
 .../iwasm/runtime/vmcore-wasm/wasm_runtime.h  |  323 ++
 .../iwasm/runtime/vmcore-wasm/wasm_thread.h   |  146 +
 scriptsrcs/wamr/core/shared-lib/coap/LICENSE  |   38 +
 scriptsrcs/wamr/core/shared-lib/coap/Makefile |   19 +
 .../core/shared-lib/coap/er-coap/Makefile     |   15 +
 .../shared-lib/coap/er-coap/er-coap-conf.h    |   75 +
 .../coap/er-coap/er-coap-constants.h          |  161 +
 .../core/shared-lib/coap/er-coap/er-coap.c    | 1131 ++++
 .../core/shared-lib/coap/er-coap/er-coap.h    |  370 ++
 .../core/shared-lib/coap/extension/Makefile   |   15 +
 .../coap/extension/coap_conversion.c          |  105 +
 .../core/shared-lib/coap/extension/coap_ext.h |   57 +
 .../shared-lib/coap/extension/coap_over_tcp.c |  481 ++
 .../coap/extension/coap_platforms.h           |   89 +
 .../wamr/core/shared-lib/coap/lib_coap.cmake  |   23 +
 .../wamr/core/shared-lib/include/bh_common.h  |   47 +
 .../wamr/core/shared-lib/include/bh_list.h    |  120 +
 .../wamr/core/shared-lib/include/bh_log.h     |  155 +
 .../wamr/core/shared-lib/include/bh_memory.h  |  110 +
 .../wamr/core/shared-lib/include/bh_queue.h   |   99 +
 scriptsrcs/wamr/core/shared-lib/include/bni.h |  236 +
 .../wamr/core/shared-lib/include/config.h     |  133 +
 .../wamr/core/shared-lib/include/errcode.h    |   89 +
 .../core/shared-lib/include/jeff_export.h     |  615 +++
 .../wamr/core/shared-lib/include/korp_types.h |  160 +
 .../wamr/core/shared-lib/include/mem_alloc.h  |   45 +
 .../core/shared-lib/mem-alloc/bh_memory.c     |  330 ++
 .../core/shared-lib/mem-alloc/ems/ems_alloc.c |  590 +++
 .../core/shared-lib/mem-alloc/ems/ems_gc.h    |  341 ++
 .../mem-alloc/ems/ems_gc_internal.h           |  282 +
 .../core/shared-lib/mem-alloc/ems/ems_hmu.c   |   98 +
 .../core/shared-lib/mem-alloc/ems/ems_kfc.c   |  196 +
 .../core/shared-lib/mem-alloc/mem_alloc.c     |  136 +
 .../core/shared-lib/mem-alloc/mem_alloc.cmake |   27 +
 .../core/shared-lib/platform/CMakeLists.txt   |   31 +
 .../wamr/core/shared-lib/platform/Makefile    |   15 +
 .../core/shared-lib/platform/alios/COPYRIGHT  |  126 +
 .../shared-lib/platform/alios/bh_assert.c     |   63 +
 .../shared-lib/platform/alios/bh_definition.c |   70 +
 .../core/shared-lib/platform/alios/bh_math.c  |  585 +++
 .../shared-lib/platform/alios/bh_platform.c   |   33 +
 .../shared-lib/platform/alios/bh_platform.h   |  114 +
 .../platform/alios/bh_platform_log.c          |   44 +
 .../shared-lib/platform/alios/bh_thread.c     |  447 ++
 .../core/shared-lib/platform/alios/bh_time.c  |   48 +
 .../platform/alios/shared_platform.cmake      |   24 +
 .../shared-lib/platform/android/bh_assert.c   |   69 +
 .../platform/android/bh_definition.c          |   81 +
 .../shared-lib/platform/android/bh_platform.h |  117 +
 .../platform/android/bh_platform_log.c        |   41 +
 .../shared-lib/platform/android/bh_thread.c   |  150 +
 .../shared-lib/platform/android/bh_time.c     |   71 +
 .../shared-lib/platform/darwin/bh_assert.c    |   69 +
 .../platform/darwin/bh_definition.c           |   81 +
 .../shared-lib/platform/darwin/bh_platform.c  |   82 +
 .../shared-lib/platform/darwin/bh_platform.h  |  122 +
 .../platform/darwin/bh_platform_log.c         |   41 +
 .../shared-lib/platform/darwin/bh_thread.c    |  405 ++
 .../core/shared-lib/platform/darwin/bh_time.c |   80 +
 .../platform/darwin/shared_platform.cmake     |   24 +
 .../shared-lib/platform/include/bh_assert.h   |   84 +
 .../shared-lib/platform/include/bh_config.h   |   31 +
 .../platform/include/bh_definition.h          |   41 +
 .../platform/include/bh_platform_log.h        |   36 +
 .../shared-lib/platform/include/bh_thread.h   |  409 ++
 .../shared-lib/platform/include/bh_time.h     |   98 +
 .../shared-lib/platform/include/bh_types.h    |   53 +
 .../shared-lib/platform/linux-sgx/bh_assert.c |   69 +
 .../platform/linux-sgx/bh_definition.c        |   81 +
 .../platform/linux-sgx/bh_platform.c          |   67 +
 .../platform/linux-sgx/bh_platform.h          |  115 +
 .../platform/linux-sgx/bh_platform_log.c      |   41 +
 .../shared-lib/platform/linux-sgx/bh_thread.c |  190 +
 .../shared-lib/platform/linux-sgx/bh_time.c   |   80 +
 .../platform/linux-sgx/shared_platform.cmake  |   24 +
 .../shared-lib/platform/linux/bh_assert.c     |   69 +
 .../shared-lib/platform/linux/bh_definition.c |   81 +
 .../shared-lib/platform/linux/bh_platform.c   |   82 +
 .../shared-lib/platform/linux/bh_platform.h   |  122 +
 .../platform/linux/bh_platform_log.c          |   41 +
 .../shared-lib/platform/linux/bh_thread.c     |  408 ++
 .../core/shared-lib/platform/linux/bh_time.c  |   80 +
 .../platform/linux/shared_platform.cmake      |   24 +
 .../shared-lib/platform/vxworks/bh_assert.c   |   69 +
 .../platform/vxworks/bh_definition.c          |   66 +
 .../shared-lib/platform/vxworks/bh_platform.c |   86 +
 .../shared-lib/platform/vxworks/bh_platform.h |  118 +
 .../platform/vxworks/bh_platform_log.c        |   41 +
 .../shared-lib/platform/vxworks/bh_thread.c   |  404 ++
 .../shared-lib/platform/vxworks/bh_time.c     |   77 +
 .../platform/vxworks/shared_platform.cmake    |   24 +
 .../shared-lib/platform/win32/bh_assert.c     |   67 +
 .../shared-lib/platform/win32/bh_definition.c |   22 +
 .../shared-lib/platform/win32/bh_platform.h   |   93 +
 .../platform/win32/bh_platform_log.c          |   39 +
 .../shared-lib/platform/win32/bh_thread.c     |  342 ++
 .../core/shared-lib/platform/win32/bh_time.c  |  101 +
 .../core/shared-lib/platform/zephyr/COPYRIGHT |  126 +
 .../core/shared-lib/platform/zephyr/Makefile  |   15 +
 .../shared-lib/platform/zephyr/bh_assert.c    |   69 +
 .../platform/zephyr/bh_definition.c           |   68 +
 .../core/shared-lib/platform/zephyr/bh_math.c |  585 +++
 .../shared-lib/platform/zephyr/bh_platform.c  |   49 +
 .../shared-lib/platform/zephyr/bh_platform.h  |  129 +
 .../platform/zephyr/bh_platform_log.c         |   68 +
 .../shared-lib/platform/zephyr/bh_thread.c    |  537 ++
 .../core/shared-lib/platform/zephyr/bh_time.c |   57 +
 .../platform/zephyr/shared_platform.cmake     |   24 +
 .../wamr/core/shared-lib/shared_lib.cmake     |   17 +
 .../wamr/core/shared-lib/utils/CMakeLists.txt |   21 +
 .../wamr/core/shared-lib/utils/Makefile       |   16 +
 .../wamr/core/shared-lib/utils/bh_list.c      |  114 +
 .../wamr/core/shared-lib/utils/bh_log.c       |  213 +
 .../wamr/core/shared-lib/utils/bh_queue.c     |  258 +
 .../core/shared-lib/utils/runtime_timer.c     |  475 ++
 .../core/shared-lib/utils/runtime_timer.h     |   55 +
 .../core/shared-lib/utils/shared_utils.cmake  |   24 +
 scriptsrcs/wamr/doc/building.md               |  268 +
 scriptsrcs/wamr/doc/embed_wamr.md             |   40 +
 scriptsrcs/wamr/doc/memory_usage.txt          |   13 +
 scriptsrcs/wamr/doc/pics/embed.PNG            |  Bin 0 -> 26261 bytes
 scriptsrcs/wamr/doc/pics/extend_library.PNG   |  Bin 0 -> 30398 bytes
 scriptsrcs/wamr/doc/pics/native_call_wasm.PNG |  Bin 0 -> 49074 bytes
 scriptsrcs/wamr/doc/pics/request.PNG          |  Bin 0 -> 19974 bytes
 scriptsrcs/wamr/doc/pics/safe.PNG             |  Bin 0 -> 67786 bytes
 scriptsrcs/wamr/doc/pics/sensor_callflow.PNG  |  Bin 0 -> 76558 bytes
 scriptsrcs/wamr/doc/pics/sub.PNG              |  Bin 0 -> 18622 bytes
 scriptsrcs/wamr/doc/pics/vgl_demo.png         |  Bin 0 -> 133339 bytes
 scriptsrcs/wamr/doc/pics/vgl_demo2.png        |  Bin 0 -> 149435 bytes
 scriptsrcs/wamr/doc/pics/vgl_demo_linux.png   |  Bin 0 -> 5792 bytes
 scriptsrcs/wamr/doc/pics/vgl_linux.PNG        |  Bin 0 -> 25976 bytes
 scriptsrcs/wamr/doc/pics/wamr-arch.JPG        |  Bin 0 -> 131955 bytes
 scriptsrcs/wamr/doc/pics/workflow.PNG         |  Bin 0 -> 68967 bytes
 scriptsrcs/wamr/doc/release_ack.md            |   60 +
 scriptsrcs/wamr/doc/roadmap.md                |   16 +
 scriptsrcs/wamr/doc/wamr_api.md               |  310 ++
 scriptsrcs/wamr/samples/gui/README.md         |  121 +
 scriptsrcs/wamr/samples/gui/build.sh          |   75 +
 .../gui/lvgl-native-ui-app/CMakeLists.txt     |   52 +
 .../gui/lvgl-native-ui-app/LICENCE.txt        |    8 +
 .../samples/gui/lvgl-native-ui-app/get_time.c |   11 +
 .../samples/gui/lvgl-native-ui-app/lv_conf.h  |  495 ++
 .../gui/lvgl-native-ui-app/lv_drv_conf.h      |  310 ++
 .../samples/gui/lvgl-native-ui-app/main.c     |  163 +
 .../gui/lvgl-native-ui-app/system_header.h    |   19 +
 .../gui/wasm-apps/lvgl-compatible/Makefile    |   57 +
 .../gui/wasm-apps/lvgl-compatible/src/main.c  |  116 +
 .../wamr/samples/gui/wasm-apps/wgl/Makefile   |   57 +
 .../wamr/samples/gui/wasm-apps/wgl/src/main.c |  115 +
 .../gui/wasm-runtime-wgl/src/ext_lib_export.c |   12 +
 .../src/platform/linux/iwasm_main.c           |  512 ++
 .../src/platform/linux/lv_drv_conf.h          |  310 ++
 .../src/platform/linux/main.c                 |   20 +
 .../src/platform/zephyr/LICENSE               |  202 +
 .../src/platform/zephyr/XPT2046.c             |  337 ++
 .../src/platform/zephyr/XPT2046.h             |   71 +
 .../src/platform/zephyr/board_config.h        |   20 +
 .../src/platform/zephyr/display.h             |  405 ++
 .../src/platform/zephyr/display_ili9340.c     |  264 +
 .../src/platform/zephyr/display_ili9340.h     |   68 +
 .../zephyr/display_ili9340_adafruit_1480.c    |   79 +
 .../src/platform/zephyr/iwasm_main.c          |  184 +
 .../src/platform/zephyr/main.c                |   37 +
 .../src/platform/zephyr/pin_config_jlf.h      |   37 +
 .../src/platform/zephyr/pin_config_stm32.h    |   41 +
 scriptsrcs/wamr/samples/littlevgl/LICENCE.txt |    8 +
 scriptsrcs/wamr/samples/littlevgl/README.md   |  144 +
 scriptsrcs/wamr/samples/littlevgl/build.sh    |   75 +
 .../vgl-native-ui-app/CMakeLists.txt          |  158 +
 .../vgl-native-ui-app/CMakeLists.txt.in       |   29 +
 .../vgl-native-ui-app/lv-drivers/.gitignore   |    1 +
 .../lv-drivers/display_indev.h                |   33 +
 .../lv-drivers/indev/mouse.c                  |   95 +
 .../lv-drivers/indev/mouse.h                  |   72 +
 .../lv-drivers/linux_display_indev.c          |  314 ++
 .../vgl-native-ui-app/lv-drivers/lv_conf.h    |  389 ++
 .../lv-drivers/system_header.h                |   19 +
 .../littlevgl/vgl-native-ui-app/main.c        |  165 +
 .../littlevgl/vgl-wasm-runtime/CMakeLists.txt |   97 +
 .../vgl-wasm-runtime/src/display_indev.h      |   74 +
 .../vgl-wasm-runtime/src/ext_lib_export.c     |   17 +
 .../src/platform/linux/display_indev.c        |  358 ++
 .../src/platform/linux/iwasm_main.c           |  478 ++
 .../src/platform/linux/main.c                 |   20 +
 .../src/platform/linux/mouse.c                |   96 +
 .../src/platform/zephyr/LICENSE               |  202 +
 .../src/platform/zephyr/XPT2046.c             |  337 ++
 .../src/platform/zephyr/XPT2046.h             |   93 +
 .../src/platform/zephyr/board_config.h        |   20 +
 .../src/platform/zephyr/display.h             |  405 ++
 .../src/platform/zephyr/display_ili9340.c     |  264 +
 .../src/platform/zephyr/display_ili9340.h     |   68 +
 .../zephyr/display_ili9340_adafruit_1480.c    |   79 +
 .../src/platform/zephyr/display_indev.c       |  119 +
 .../src/platform/zephyr/iwasm_main.c          |  119 +
 .../src/platform/zephyr/main.c                |   37 +
 .../src/platform/zephyr/pin_config_jlf.h      |   37 +
 .../src/platform/zephyr/pin_config_stm32.h    |   41 +
 .../littlevgl/wasm-apps/Makefile_wasm_app     |   67 +
 .../littlevgl/wasm-apps/build_wasm_app.sh     |   20 +
 .../littlevgl/wasm-apps/src/display_indev.h   |   33 +
 .../samples/littlevgl/wasm-apps/src/lv_conf.h |  389 ++
 .../samples/littlevgl/wasm-apps/src/main.c    |  165 +
 .../littlevgl/wasm-apps/src/system_header.h   |   19 +
 scriptsrcs/wamr/samples/simple/CMakeLists.txt |  107 +
 scriptsrcs/wamr/samples/simple/README.md      |  357 ++
 scriptsrcs/wamr/samples/simple/build.sh       |   80 +
 .../wamr/samples/simple/src/ext_lib_export.c  |   12 +
 .../wamr/samples/simple/src/iwasm_main.c      |  509 ++
 .../wamr/samples/simple/src/lv_drv_conf.h     |  310 ++
 scriptsrcs/wamr/samples/simple/src/main.c     |    5 +
 .../samples/simple/wasm-apps/connection.c     |   93 +
 .../simple/wasm-apps/event_publisher.c        |   57 +
 .../simple/wasm-apps/event_subscriber.c       |   36 +
 .../wamr/samples/simple/wasm-apps/gui.c       |   80 +
 .../simple/wasm-apps/gui_lvgl_compatible.c    |   84 +
 .../simple/wasm-apps/request_handler.c        |   67 +
 .../samples/simple/wasm-apps/request_sender.c |   58 +
 .../wamr/samples/simple/wasm-apps/sensor.c    |   59 +
 .../wamr/samples/simple/wasm-apps/timer.c     |   41 +
 .../test-tools/IoT-APP-Store-Demo/README.md   |   36 +
 .../IoT-APP-Store-Demo/wasm_django/db.sqlite3 |  Bin 0 -> 45056 bytes
 .../wasm_django/devices/__init__.py           |    0
 .../wasm_django/devices/admin.py              |    3 +
 .../wasm_django/devices/apps.py               |    5 +
 .../devices/migrations/__init__.py            |    0
 .../wasm_django/devices/models.py             |    3 +
 .../devices/templates/application.html        |  152 +
 .../devices/templates/appstore.html           |  106 +
 .../wasm_django/devices/templates/empty.html  |  119 +
 .../wasm_django/devices/templates/help.html   |  110 +
 .../wasm_django/devices/templates/mysite.html |   99 +
 .../wasm_django/devices/tests.py              |    3 +
 .../wasm_django/devices/views.py              |  284 +
 .../IoT-APP-Store-Demo/wasm_django/manage.py  |   21 +
 .../wasm_django/mysite/__init__.py            |    0
 .../wasm_django/mysite/settings.py            |  136 +
 .../wasm_django/mysite/urls.py                |   41 +
 .../wasm_django/mysite/wsgi.py                |   16 +
 .../wasm_django/server/wasm_server.py         |  616 +++
 .../wasm_django/static/css/application.css    |  411 ++
 .../wasm_django/static/css/appstore.css       |  227 +
 .../wasm_django/static/css/index.css          |  208 +
 .../wasm_django/static/js/application.js      |  228 +
 .../wasm_django/static/js/appstore.js         |  136 +
 .../wasm_django/static/js/index.js            |   62 +
 .../wasm_django/static/photo/app(1).png       |  Bin 0 -> 5421 bytes
 .../wasm_django/static/photo/application.png  |  Bin 0 -> 7875 bytes
 .../wasm_django/static/photo/delete.png       |  Bin 0 -> 4107 bytes
 .../wasm_django/static/photo/download(1).png  |  Bin 0 -> 1502 bytes
 .../wasm_django/static/photo/menu.png         |  Bin 0 -> 1839 bytes
 .../static/photo/milky-way-2695569_1280.jpg   |  Bin 0 -> 535384 bytes
 .../wasm_django/static/photo/net_device.png   |  Bin 0 -> 6867 bytes
 .../static/photo/software-icon-32081.png      |  Bin 0 -> 39956 bytes
 .../wasm_django/static/photo/totalblack.png   |  Bin 0 -> 2301 bytes
 .../wasm_django/static/upload/connection.wasm |  Bin 0 -> 7894 bytes
 .../static/upload/event_publisher.wasm        |  Bin 0 -> 6817 bytes
 .../static/upload/event_subscriber.wasm       |  Bin 0 -> 5273 bytes
 .../static/upload/request_handler.wasm        |  Bin 0 -> 7995 bytes
 .../static/upload/request_sender.wasm         |  Bin 0 -> 6019 bytes
 .../wasm_django/static/upload/sensor.wasm     |  Bin 0 -> 5356 bytes
 .../wasm_django/static/upload/simple          |  Bin 0 -> 1066464 bytes
 .../static/upload/sys/connection.wasm         |  Bin 0 -> 7894 bytes
 .../static/upload/sys/event_publisher.wasm    |  Bin 0 -> 6817 bytes
 .../static/upload/sys/event_subscriber.wasm   |  Bin 0 -> 5273 bytes
 .../static/upload/sys/request_handler.wasm    |  Bin 0 -> 7995 bytes
 .../static/upload/sys/request_sender.wasm     |  Bin 0 -> 6019 bytes
 .../wasm_django/static/upload/sys/timer.wasm  |  Bin 0 -> 4150 bytes
 .../wasm_django/static/upload/timer.wasm      |  Bin 0 -> 4150 bytes
 .../wasm_django/static/upload/ui_app.wasm     |  Bin 0 -> 1953 bytes
 .../static/upload/vgl_wasm_runtime            |  Bin 0 -> 512936 bytes
 .../static/upload/wasm_runtime_wgl            |  Bin 0 -> 1066908 bytes
 .../wamr/test-tools/host-tool/CMakeLists.txt  |   70 +
 .../host-tool/external/cJSON/LICENSE          |   20 +
 .../host-tool/external/cJSON/cJSON.c          | 2750 ++++++++++
 .../host-tool/external/cJSON/cJSON.h          |  281 +
 .../host-tool/external/cJSON/cjson.cmake      |   10 +
 .../host-tool/src/host_tool_utils.c           |  311 ++
 .../host-tool/src/host_tool_utils.h           |   83 +
 .../wamr/test-tools/host-tool/src/main.c      |  930 ++++
 .../wamr/test-tools/host-tool/src/transport.c |  261 +
 .../wamr/test-tools/host-tool/src/transport.h |  122 +
 676 files changed, 155875 insertions(+), 2 deletions(-)
 create mode 100644 Config.uk
 create mode 100644 Makefile
 create mode 100644 Makefile.uk
 create mode 100644 main.c
 create mode 100755 scriptsrcs/lvgl/.clang-format
 create mode 100755 scriptsrcs/lvgl/.editorconfig
 create mode 100755 scriptsrcs/lvgl/.gitignore
 create mode 100755 scriptsrcs/lvgl/.gitmodules
 create mode 100755 scriptsrcs/lvgl/LICENCE.txt
 create mode 100755 scriptsrcs/lvgl/README.md
 create mode 100755 scriptsrcs/lvgl/docs/CODE_OF_CONDUCT.md
 create mode 100755 scriptsrcs/lvgl/docs/CODING_STYLE.md
 create mode 100755 scriptsrcs/lvgl/docs/CONTRIBUTING.md
 create mode 100755 scriptsrcs/lvgl/library.json
 create mode 100755 scriptsrcs/lvgl/lv_conf_template.h
 create mode 100755 scriptsrcs/lvgl/lvgl.h
 create mode 100755 scriptsrcs/lvgl/lvgl.mk
 create mode 100755 scriptsrcs/lvgl/porting/lv_port_disp_template.c
 create mode 100755 scriptsrcs/lvgl/porting/lv_port_disp_template.h
 create mode 100755 scriptsrcs/lvgl/porting/lv_port_fs_template.c
 create mode 100755 scriptsrcs/lvgl/porting/lv_port_fs_template.h
 create mode 100755 scriptsrcs/lvgl/porting/lv_port_indev_template.c
 create mode 100755 scriptsrcs/lvgl/porting/lv_port_indev_template.h
 create mode 100755 scriptsrcs/lvgl/scripts/Doxyfile
 create mode 100755 
scriptsrcs/lvgl/scripts/built_in_font/FontAwesome5-Solid+Brands+Regular.woff
 create mode 100755 scriptsrcs/lvgl/scripts/built_in_font/Roboto-Regular.woff
 create mode 100755 scriptsrcs/lvgl/scripts/built_in_font/built_in_font_gen.py
 create mode 100755 scriptsrcs/lvgl/scripts/clang-formatter.sh
 create mode 100755 scriptsrcs/lvgl/scripts/cppcheck_run.sh
 create mode 100755 scriptsrcs/lvgl/scripts/lv_conf_checker.py
 create mode 100755 scriptsrcs/lvgl/src/lv_conf_checker.h
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_core.mk
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_debug.c
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_debug.h
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_disp.c
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_disp.h
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_group.c
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_group.h
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_indev.c
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_indev.h
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_obj.c
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_obj.h
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_refr.c
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_refr.h
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_style.c
 create mode 100755 scriptsrcs/lvgl/src/lv_core/lv_style.h
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw.c
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw.h
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw.mk
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_arc.c
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_arc.h
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_basic.c
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_basic.h
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_img.c
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_img.h
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_label.c
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_label.h
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_line.c
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_line.h
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_rect.c
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_rect.h
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_triangle.c
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_draw_triangle.h
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_img_cache.c
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_img_cache.h
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_img_decoder.c
 create mode 100755 scriptsrcs/lvgl/src/lv_draw/lv_img_decoder.h
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_font.c
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_font.h
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_font.mk
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_font_fmt_txt.c
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_font_fmt_txt.h
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_font_roboto_12.c
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_font_roboto_12_subpx.c
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_font_roboto_16.c
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_font_roboto_22.c
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_font_roboto_28.c
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_font_roboto_28_compressed.c
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_font_unscii_8.c
 create mode 100755 scriptsrcs/lvgl/src/lv_font/lv_symbol_def.h
 create mode 100755 scriptsrcs/lvgl/src/lv_hal/lv_hal.h
 create mode 100755 scriptsrcs/lvgl/src/lv_hal/lv_hal.mk
 create mode 100755 scriptsrcs/lvgl/src/lv_hal/lv_hal_disp.c
 create mode 100755 scriptsrcs/lvgl/src/lv_hal/lv_hal_disp.h
 create mode 100755 scriptsrcs/lvgl/src/lv_hal/lv_hal_indev.c
 create mode 100755 scriptsrcs/lvgl/src/lv_hal/lv_hal_indev.h
 create mode 100755 scriptsrcs/lvgl/src/lv_hal/lv_hal_tick.c
 create mode 100755 scriptsrcs/lvgl/src/lv_hal/lv_hal_tick.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_anim.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_anim.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_area.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_area.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_async.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_async.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_bidi.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_bidi.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_circ.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_circ.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_color.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_color.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_fs.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_fs.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_gc.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_gc.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_ll.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_ll.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_log.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_log.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_math.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_math.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_mem.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_mem.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_misc.mk
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_printf.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_printf.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_task.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_task.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_templ.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_templ.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_txt.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_txt.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_types.h
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_utils.c
 create mode 100755 scriptsrcs/lvgl/src/lv_misc/lv_utils.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_arc.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_arc.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_bar.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_bar.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_btn.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_btn.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_btnm.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_btnm.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_calendar.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_calendar.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_canvas.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_canvas.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_cb.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_cb.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_chart.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_chart.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_cont.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_cont.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_cpicker.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_cpicker.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_ddlist.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_ddlist.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_gauge.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_gauge.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_img.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_img.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_imgbtn.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_imgbtn.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_kb.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_kb.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_label.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_label.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_led.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_led.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_line.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_line.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_list.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_list.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_lmeter.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_lmeter.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_mbox.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_mbox.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_objx.mk
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_objx_templ.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_objx_templ.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_page.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_page.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_preload.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_preload.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_roller.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_roller.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_slider.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_slider.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_spinbox.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_spinbox.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_sw.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_sw.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_ta.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_ta.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_table.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_table.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_tabview.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_tabview.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_tileview.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_tileview.h
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_win.c
 create mode 100755 scriptsrcs/lvgl/src/lv_objx/lv_win.h
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme.c
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme.h
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_alien.c
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_alien.h
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_default.c
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_default.h
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_material.c
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_material.h
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_mono.c
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_mono.h
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_nemo.c
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_nemo.h
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_night.c
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_night.h
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_templ.c
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_templ.h
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_zen.c
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_theme_zen.h
 create mode 100755 scriptsrcs/lvgl/src/lv_themes/lv_themes.mk
 create mode 100755 scriptsrcs/lvgl/src/lv_version.h
 create mode 100755 scriptsrcs/wamr/.gitignore
 create mode 100755 scriptsrcs/wamr/CONTRIBUTING.md
 create mode 100755 scriptsrcs/wamr/Dockerfile
 create mode 100755 scriptsrcs/wamr/LICENSE
 create mode 100755 scriptsrcs/wamr/README.md
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/CMakeLists.txt
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/app_manager.c
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/app_manager.h
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/app_manager_host.c
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/app_manager_host.h
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/app_mgr.cmake
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/ble_msg.c
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/coding_rule.txt
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/event.c
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/event.h
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/message.c
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/module_config.h
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/module_jeff.c
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/module_jeff.h
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/module_utils.c
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_app.c
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_app.h
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_lib.c
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_lib.h
 create mode 100755 
scriptsrcs/wamr/core/app-mgr/app-manager/platform/linux/app_mgr_linux.c
 create mode 100755 
scriptsrcs/wamr/core/app-mgr/app-manager/platform/zephyr/app_mgr_zephyr.c
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/resource_reg.c
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/watchdog.c
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-manager/watchdog.h
 create mode 100755 
scriptsrcs/wamr/core/app-mgr/app-mgr-shared/app_manager_export.h
 create mode 100755 
scriptsrcs/wamr/core/app-mgr/app-mgr-shared/app_mgr_shared.cmake
 create mode 100755 scriptsrcs/wamr/core/app-mgr/app-mgr-shared/host_link.h
 create mode 100755 scriptsrcs/wamr/core/app-mgr/module.json
 create mode 100755 scriptsrcs/wamr/core/iwasm/app-samples/hello-world/build.sh
 create mode 100755 scriptsrcs/wamr/core/iwasm/app-samples/hello-world/main.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/app-samples/smart-light/build.sh
 create mode 100755 scriptsrcs/wamr/core/iwasm/app-samples/smart-light/main.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/3rdparty/LICENCE.txt
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/3rdparty/lv_conf.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/app-libs/base/bh_platform.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/app-libs/base/bh_platform.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/app-libs/base/request.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/app-libs/base/request.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/app-libs/base/timer.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/base/timer_wasm_app.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/app-libs/base/wasm_app.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/connection/connection.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/connection/connection.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/LICENCE.txt
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_btn.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_cb.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_label.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_list.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_obj.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_types.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/LICENCE.txt
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_btn.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_cb.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_label.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_list.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_obj.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_types.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_btn.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_cb.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_label.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_list.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_obj.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/wgl.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/sensor/sensor.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/sensor/sensor.h
 create mode 100644 scriptsrcs/wamr/core/iwasm/lib/app-libs/libc/lib_base.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native-interface/attr_container.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native-interface/attr_container.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native-interface/connection_api.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/native-interface/gui_api.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native-interface/native_interface.cmake
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native-interface/native_interface.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/native-interface/readme.txt
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native-interface/restful_utils.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/native-interface/sensor_api.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native-interface/shared_utils.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native-interface/wasm_export.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native-interface/wgl_shared_utils.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/native/base/base_lib_export.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/native/base/base_lib_export.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/base/request_response.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/native/base/runtime_lib.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/native/base/timer_wrapper.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/base/wasm_lib_base.cmake
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/connection.inl
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/connection_lib.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/connection_wrapper.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_tcp.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_tcp.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_uart.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_uart.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_udp.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_udp.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/connection_mgr.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/connection_mgr.cmake
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/wasm_lib_conn.cmake
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/zephyr/connection_lib_impl.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wamr_gui.inl
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wasm_lib_gui.cmake
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_btn_wrapper.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_cb_wrapper.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_cont_wrapper.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_label_wrapper.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_list_wrapper.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_native_utils.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_native_utils.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_obj_wrapper.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/runtime_sensor.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/runtime_sensor.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/runtime_sensor.inl
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/sensor_mgr_ref.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/wasm_lib_sensor.cmake
 create mode 100755 
scriptsrcs/wamr/core/iwasm/lib/native/extension/template/lib_export_template.c
 create mode 100644 scriptsrcs/wamr/core/iwasm/lib/native/libc/libc_wrapper.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/lib/native/libc/wasm_libc.cmake
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/alios-things/iwasm.mk
 create mode 100755 
scriptsrcs/wamr/core/iwasm/products/alios-things/src/ext_lib_export.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/alios-things/src/main.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/products/alios-things/src/test_wasm.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/darwin/CMakeLists.txt
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/darwin/ext_lib_export.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/darwin/main.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/linux-sgx/CMakeLists.txt
 create mode 100755 
scriptsrcs/wamr/core/iwasm/products/linux-sgx/ext_lib_export.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/linux/CMakeLists.txt
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/linux/ext_lib_export.c
 create mode 100644 scriptsrcs/wamr/core/iwasm/products/linux/main.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/vxworks/CMakeLists.txt
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/vxworks/ext_lib_export.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/vxworks/main.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/products/zephyr/simple/CMakeLists.txt
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/zephyr/simple/prj.conf
 create mode 100755 
scriptsrcs/wamr/core/iwasm/products/zephyr/simple/src/ext_lib_export.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/products/zephyr/simple/src/main.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/products/zephyr/simple/src/test_wasm.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/include/bh_memory.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/include/ext_lib_export.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/include/lib_export.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/include/wasm_application.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/include/wasm_dlfcn.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/include/wasm_export.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/include/wasm_hashmap.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/include/wasm_log.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/include/wasm_vector.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/alios/wasm_native.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/darwin/platform.cmake
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/darwin/wasm_native.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/include/wa_thread.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_assert.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_config.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_memory.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_platform_log.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/linux-sgx/platform.cmake
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/linux-sgx/wasm_native.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/linux/platform.cmake
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/linux/wasm_native.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/vxworks/platform.cmake
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/vxworks/wasm_native.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/platform/zephyr/wasm_native.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/utils/utils.cmake
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_dlfcn.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_hashmap.c
 create mode 100644 scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_log.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_vector.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/invokeNative_general.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/invokeNative_ia32.s
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/vmcore.cmake
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_application.c
 create mode 100644 scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_interp.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_interp.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_loader.c
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_loader.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_native.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_opcode.h
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c
 create mode 100755 
scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_runtime.h
 create mode 100755 scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_thread.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/coap/LICENSE
 create mode 100755 scriptsrcs/wamr/core/shared-lib/coap/Makefile
 create mode 100755 scriptsrcs/wamr/core/shared-lib/coap/er-coap/Makefile
 create mode 100755 scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap-conf.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap-constants.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/coap/extension/Makefile
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/coap/extension/coap_conversion.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/coap/extension/coap_ext.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/coap/extension/coap_over_tcp.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/coap/extension/coap_platforms.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/coap/lib_coap.cmake
 create mode 100755 scriptsrcs/wamr/core/shared-lib/include/bh_common.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/include/bh_list.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/include/bh_log.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/include/bh_memory.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/include/bh_queue.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/include/bni.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/include/config.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/include/errcode.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/include/jeff_export.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/include/korp_types.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/include/mem_alloc.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/mem-alloc/bh_memory.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_alloc.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_gc.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_gc_internal.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_hmu.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_kfc.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/mem-alloc/mem_alloc.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/mem-alloc/mem_alloc.cmake
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/CMakeLists.txt
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/Makefile
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/alios/COPYRIGHT
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/alios/bh_assert.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/alios/bh_definition.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/alios/bh_math.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/alios/bh_platform.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/alios/bh_platform.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/alios/bh_platform_log.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/alios/bh_thread.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/alios/bh_time.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/alios/shared_platform.cmake
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/android/bh_assert.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/android/bh_definition.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/android/bh_platform.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/android/bh_platform_log.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/android/bh_thread.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/android/bh_time.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_assert.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_definition.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_platform.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_platform.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_platform_log.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_thread.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_time.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/darwin/shared_platform.cmake
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/include/bh_assert.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/include/bh_config.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/include/bh_definition.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/include/bh_platform_log.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/include/bh_thread.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/include/bh_time.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/include/bh_types.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_assert.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_definition.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_platform.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_platform.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_platform_log.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_thread.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_time.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/shared_platform.cmake
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/linux/bh_assert.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/linux/bh_definition.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/linux/bh_platform.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/linux/bh_platform.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/linux/bh_platform_log.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/linux/bh_thread.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/linux/bh_time.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/linux/shared_platform.cmake
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_assert.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_definition.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_platform.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_platform.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_platform_log.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_thread.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_time.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/vxworks/shared_platform.cmake
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/win32/bh_assert.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/win32/bh_definition.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/win32/bh_platform.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/win32/bh_platform_log.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/win32/bh_thread.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/win32/bh_time.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/zephyr/COPYRIGHT
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/zephyr/Makefile
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_assert.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_definition.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_math.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_platform.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_platform.h
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_platform_log.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_thread.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_time.c
 create mode 100755 
scriptsrcs/wamr/core/shared-lib/platform/zephyr/shared_platform.cmake
 create mode 100755 scriptsrcs/wamr/core/shared-lib/shared_lib.cmake
 create mode 100755 scriptsrcs/wamr/core/shared-lib/utils/CMakeLists.txt
 create mode 100755 scriptsrcs/wamr/core/shared-lib/utils/Makefile
 create mode 100755 scriptsrcs/wamr/core/shared-lib/utils/bh_list.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/utils/bh_log.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/utils/bh_queue.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/utils/runtime_timer.c
 create mode 100755 scriptsrcs/wamr/core/shared-lib/utils/runtime_timer.h
 create mode 100755 scriptsrcs/wamr/core/shared-lib/utils/shared_utils.cmake
 create mode 100755 scriptsrcs/wamr/doc/building.md
 create mode 100755 scriptsrcs/wamr/doc/embed_wamr.md
 create mode 100755 scriptsrcs/wamr/doc/memory_usage.txt
 create mode 100755 scriptsrcs/wamr/doc/pics/embed.PNG
 create mode 100755 scriptsrcs/wamr/doc/pics/extend_library.PNG
 create mode 100755 scriptsrcs/wamr/doc/pics/native_call_wasm.PNG
 create mode 100755 scriptsrcs/wamr/doc/pics/request.PNG
 create mode 100755 scriptsrcs/wamr/doc/pics/safe.PNG
 create mode 100755 scriptsrcs/wamr/doc/pics/sensor_callflow.PNG
 create mode 100755 scriptsrcs/wamr/doc/pics/sub.PNG
 create mode 100755 scriptsrcs/wamr/doc/pics/vgl_demo.png
 create mode 100755 scriptsrcs/wamr/doc/pics/vgl_demo2.png
 create mode 100755 scriptsrcs/wamr/doc/pics/vgl_demo_linux.png
 create mode 100755 scriptsrcs/wamr/doc/pics/vgl_linux.PNG
 create mode 100755 scriptsrcs/wamr/doc/pics/wamr-arch.JPG
 create mode 100755 scriptsrcs/wamr/doc/pics/workflow.PNG
 create mode 100755 scriptsrcs/wamr/doc/release_ack.md
 create mode 100755 scriptsrcs/wamr/doc/roadmap.md
 create mode 100755 scriptsrcs/wamr/doc/wamr_api.md
 create mode 100755 scriptsrcs/wamr/samples/gui/README.md
 create mode 100755 scriptsrcs/wamr/samples/gui/build.sh
 create mode 100755 
scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/CMakeLists.txt
 create mode 100755 scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/LICENCE.txt
 create mode 100755 scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/get_time.c
 create mode 100755 scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/lv_conf.h
 create mode 100755 scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/lv_drv_conf.h
 create mode 100755 scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/main.c
 create mode 100755 
scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/system_header.h
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-apps/lvgl-compatible/Makefile
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-apps/lvgl-compatible/src/main.c
 create mode 100755 scriptsrcs/wamr/samples/gui/wasm-apps/wgl/Makefile
 create mode 100755 scriptsrcs/wamr/samples/gui/wasm-apps/wgl/src/main.c
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/ext_lib_export.c
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/linux/lv_drv_conf.h
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/linux/main.c
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/LICENSE
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.c
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.h
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/board_config.h
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display.h
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.c
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.h
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340_adafruit_1480.c
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/main.c
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_jlf.h
 create mode 100755 
scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_stm32.h
 create mode 100755 scriptsrcs/wamr/samples/littlevgl/LICENCE.txt
 create mode 100755 scriptsrcs/wamr/samples/littlevgl/README.md
 create mode 100755 scriptsrcs/wamr/samples/littlevgl/build.sh
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt.in
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/.gitignore
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/display_indev.h
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.h
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/linux_display_indev.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/lv_conf.h
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/system_header.h
 create mode 100755 scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/main.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/CMakeLists.txt
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/ext_lib_export.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/main.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/mouse.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/LICENSE
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.h
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/board_config.h
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display.h
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.h
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340_adafruit_1480.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/main.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_jlf.h
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_stm32.h
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/wasm-apps/Makefile_wasm_app
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/wasm-apps/build_wasm_app.sh
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/display_indev.h
 create mode 100755 scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/lv_conf.h
 create mode 100755 scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/main.c
 create mode 100755 
scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/system_header.h
 create mode 100755 scriptsrcs/wamr/samples/simple/CMakeLists.txt
 create mode 100755 scriptsrcs/wamr/samples/simple/README.md
 create mode 100755 scriptsrcs/wamr/samples/simple/build.sh
 create mode 100755 scriptsrcs/wamr/samples/simple/src/ext_lib_export.c
 create mode 100755 scriptsrcs/wamr/samples/simple/src/iwasm_main.c
 create mode 100755 scriptsrcs/wamr/samples/simple/src/lv_drv_conf.h
 create mode 100755 scriptsrcs/wamr/samples/simple/src/main.c
 create mode 100755 scriptsrcs/wamr/samples/simple/wasm-apps/connection.c
 create mode 100755 scriptsrcs/wamr/samples/simple/wasm-apps/event_publisher.c
 create mode 100755 scriptsrcs/wamr/samples/simple/wasm-apps/event_subscriber.c
 create mode 100755 scriptsrcs/wamr/samples/simple/wasm-apps/gui.c
 create mode 100755 
scriptsrcs/wamr/samples/simple/wasm-apps/gui_lvgl_compatible.c
 create mode 100755 scriptsrcs/wamr/samples/simple/wasm-apps/request_handler.c
 create mode 100755 scriptsrcs/wamr/samples/simple/wasm-apps/request_sender.c
 create mode 100755 scriptsrcs/wamr/samples/simple/wasm-apps/sensor.c
 create mode 100755 scriptsrcs/wamr/samples/simple/wasm-apps/timer.c
 create mode 100755 scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/README.md
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/db.sqlite3
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/__init__.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/admin.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/apps.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/migrations/__init__.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/models.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/application.html
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/manage.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/__init__.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/appstore.css
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/index.css
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/index.js
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/app(1).png
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/application.png
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/delete.png
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/download(1).png
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/menu.png
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/milky-way-2695569_1280.jpg
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/net_device.png
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/software-icon-32081.png
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/totalblack.png
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/connection.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_publisher.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_subscriber.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_handler.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_sender.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sensor.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/simple
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/connection.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_publisher.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_subscriber.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_handler.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_sender.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/timer.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/timer.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/ui_app.wasm
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/vgl_wasm_runtime
 create mode 100755 
scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/wasm_runtime_wgl
 create mode 100755 scriptsrcs/wamr/test-tools/host-tool/CMakeLists.txt
 create mode 100755 scriptsrcs/wamr/test-tools/host-tool/external/cJSON/LICENSE
 create mode 100755 scriptsrcs/wamr/test-tools/host-tool/external/cJSON/cJSON.c
 create mode 100755 scriptsrcs/wamr/test-tools/host-tool/external/cJSON/cJSON.h
 create mode 100755 
scriptsrcs/wamr/test-tools/host-tool/external/cJSON/cjson.cmake
 create mode 100755 scriptsrcs/wamr/test-tools/host-tool/src/host_tool_utils.c
 create mode 100755 scriptsrcs/wamr/test-tools/host-tool/src/host_tool_utils.h
 create mode 100755 scriptsrcs/wamr/test-tools/host-tool/src/main.c
 create mode 100755 scriptsrcs/wamr/test-tools/host-tool/src/transport.c
 create mode 100755 scriptsrcs/wamr/test-tools/host-tool/src/transport.h

diff --git a/Config.uk b/Config.uk
new file mode 100644
index 0000000..c98b01b
--- /dev/null
+++ b/Config.uk
@@ -0,0 +1,11 @@
+### Invisible option for dependencies
+config APPWAMR_RASPI_DEMO_DEPENDENCIES
+       bool
+       default y
+
+### App configuration
+config APPWAMR_RASPI_DEMO_PRINTARGS
+       bool "Print arguments"
+       default y
+       help
+         Prints argument list (argv) to stdout
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..776bfb2
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,10 @@
+UK_ROOT ?= $(PWD)/../../unikraft
+UK_LIBS ?= $(PWD)/../../libs
+UK_PLAT ?= $(PWD)/../../plats/raspi
+LIBS := 
$(UK_LIBS)/wamr:$(UK_LIBS)/pthread-embedded:$(UK_LIBS)/lwip:$(UK_LIBS)/lvgl:$(UK_LIBS)/newlib
+
+all:
+       @$(MAKE) -C $(UK_ROOT) A=$(PWD) P=$(UK_PLAT) L=$(LIBS)
+
+$(MAKECMDGOALS):
+       @$(MAKE) -C $(UK_ROOT) A=$(PWD) P=$(UK_PLAT) L=$(LIBS) $(MAKECMDGOALS)
diff --git a/Makefile.uk b/Makefile.uk
new file mode 100644
index 0000000..472657a
--- /dev/null
+++ b/Makefile.uk
@@ -0,0 +1,5 @@
+$(eval $(call addlib,appwamr_raspi_demo))
+
+APPWAMR_RASPI_DEMO_CINCLUDES-y += -I$(LIBRASPIPLAT_BASE)/include
+
+APPWAMR_RASPI_DEMO_SRCS-y += $(APPWAMR_RASPI_DEMO_BASE)/main.c
diff --git a/README.md b/README.md
index 416e4d1..b7e6b92 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,27 @@
-# WAMR Raspi Demo
+# wamr-raspi-demo
 
-Unikraft WAMR baremetal demo running on a Raspberry Pi 3B+
\ No newline at end of file
+Unikraft baremetal WAMR demo running on a Raspberry Pi3 B+
+
+This demo
+
+Please select/deselect the following options in the make menuconfig:
+- Architecture Selection --> Architecture --> select: Arrmv8 compatible (64 
bits)
+- Architecture Selection --> Processor Optimization --> select: Generic Armv8 
Cortex A53
+- Architecture Selection --> deselect: Workaround for Cortex-A73 erratum
+- Platform Configuration --> select: Raspberry Pi 3B+
+- Platform Configuration --> Raspberry Pi 3B+ --> Devices --> select: DSI LCD 
screen
+- Library Configuration --> ukboot --> deselect: Show Unikraft banner (this is 
to minimize boot time)
+- Library Configuration --> select: lvgl
+...
+...
+...
+- Build Options --> select: Drop unused functions and data
+
+Once built, in a blank SD card formated to FAT32, copy the generated 
kernel8.img Unikraft image (without changing
+the name of the image file, as otherwise the Raspberry Pi's bootloader will 
not recongize it), plus the four files
+that are inside the plats/raspi/bootfiles folder (i.e., bootcode.bin, 
config.txt, fixup.dat, and start.elf).
+
+#TODO: We still need to find an elegant way to have an lv_conf.h file in the 
application folder that overrides the
+lv_conf.h file in the lvgl ported library. Until then, to change the font 
size, we can set to 1 the LV_FONT_ROBOTO_xx
+of the size that we want to use (and the rest to 0) and then set 
LV_FONT_DEFAULT to &lv_font_roboto_xx that same size.
+For example, for this particular demo, font size 16 is what looks best in the 
7" LCD screen.
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..615468b
--- /dev/null
+++ b/main.c
@@ -0,0 +1,197 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Authors: Santiago Pagani <santiagopagani@xxxxxxxxx>
+ *
+ * Copyright (c) 2020, NEC Laboratories Europe GmbH, NEC Corporation.
+ *                     All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY.
+ */
+#include <uk/config.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <uk/print.h>
+#include <uk/essentials.h>
+#include <raspi/setup.h>
+#include <raspi/time.h>
+#include <raspi/raspi_info.h>
+
+
+#include <stdlib.h>
+#include <string.h>
+#include <bh_platform.h>
+#include <bh_queue.h>
+#include <wasm_assert.h>
+#include <wasm_log.h>
+#include <wasm_platform_log.h>
+#include <wasm_thread.h>
+#include <wasm_export.h>
+#include <wasm_memory.h>
+#include <bh_memory.h>
+//#include <module_wasm_app.h>
+//#include <attr_container.h>
+//#include <runtime_sensor.h>
+
+#include "helloworld_wasm.h"
+
+static int app_argc;
+static char *app_argv[4];
+static char app_argv_boot_time_int[20] = { 0 };
+static char app_argv_boot_time_float[20] = { 0 };
+static char app_argv_code_size[20] = { 0 };
+static char app_argv_memory_use[20] = { 0 };
+struct uk_thread *lvgl_refresh = NULL;
+  
+#define WAMR_HEAP_SIZE (1 * 1024 * 1024)
+
+#ifndef LV_CONF_INCLUDE_SIMPLE
+       #define LV_CONF_INCLUDE_SIMPLE
+#endif
+#include <lvgl.h>
+#define LVGL_REFRESH_SLEEP_TIME                5000
+
+extern void wgl_init();
+bool module_data_list_init(void);
+bool wasm_application_execute_main(wasm_module_inst_t module_inst, int argc, 
char *argv[]);
+
+wasm_module_inst_t wasm_module_inst_unikraft = NULL;
+
+
+int main(int argc __unused, char *argv[] __unused)
+{
+       uint64_t main_entry = get_system_timer();
+
+       char *global_heap_buf;
+       wasm_module_t wasm_module = NULL;
+       char error_buf[128];
+       int log_verbose_level = 1;
+       const char *wasm_exception;
+
+       global_heap_buf = malloc(WAMR_HEAP_SIZE);
+       if (bh_memory_init_with_pool(global_heap_buf, WAMR_HEAP_SIZE) != 0) {
+               uk_pr_err("WASM: Init memory with global heap buffer 
failed.\n");
+               return -1;
+       }
+
+       // Initialize runtime environment
+       if (!wasm_runtime_init())
+               goto fail1;
+
+       //init_raspi_sensor_framework();
+
+       wasm_log_set_verbose_level(log_verbose_level);
+
+       if (vm_thread_sys_init() != 0) {
+               uk_pr_err("WASM: vm_thread_sys_init failed.\n");
+        goto fail1;
+    }
+
+       // Initialize WAMR graphic library (WGL)
+       // LVGL is already initialized by the raspi platform code
+       wgl_init();
+
+       module_data_list_init();
+       
+       // Initialize timer manager
+       //init_wasm_timer();
+       
+       // Load WASM module
+       if (!(wasm_module = wasm_runtime_load(helloworld_wasm, 
helloworld_wasm_len, error_buf, sizeof(error_buf)))) {
+               uk_pr_err("WASM: %s\n", error_buf);
+               goto fail3;
+       }
+
+       // Instantiate the module
+       if (!(wasm_module_inst_unikraft = wasm_runtime_instantiate(wasm_module,
+                                                                               
                                64 * 1024, // Stack size
+                                                                               
                                64 * 1024, // Heap size
+                                                                               
                                error_buf,
+                                                                               
                                sizeof(error_buf)))) {
+               uk_pr_err("WASM: %s\n", error_buf);
+               goto fail4;
+       }
+       
+       // Execute the WASM application
+       app_argc = 4;
+       sprintf(app_argv_boot_time_int, "%lu", _libraspiplat_get_reset_time());
+       sprintf(app_argv_boot_time_float, "%.2f", 
((float)_libraspiplat_get_reset_time())/1000000.0f);
+       sprintf(app_argv_code_size, "%u", 
(uint32_t)(get_unikraft_text_size()/1024));
+       sprintf(app_argv_memory_use, "%u", (uint32_t)((get_unikraft_data_size() 
+ get_unikraft_bss_size() + computeUsedStack())/1024));
+       app_argv[0] = app_argv_boot_time_int;
+       app_argv[1] = app_argv_boot_time_float;
+       app_argv[2] = app_argv_code_size;
+       app_argv[3] = app_argv_memory_use;
+       wasm_application_execute_main(wasm_module_inst_unikraft, app_argc, 
app_argv);
+       if ((wasm_exception = 
wasm_runtime_get_exception(wasm_module_inst_unikraft))) {
+               uk_pr_err("WASM - app_instance_main: %s\n", wasm_exception);
+               goto fail4;
+       }
+
+
+       #if CONFIG_RASPI_PRINTF_SERIAL_CONSOLE
+               printf("WAMR Helloworld on Raspberry Pi3\n");
+               printf("Boot Time (absolute, CPU reset after power on):    %lu 
us\n", _libraspiplat_get_reset_time());
+               printf("Main entry (absolute, main entry after power on):    
%lu us\n", main_entry);
+               printf("Boot Time (Unikraft difference from CPU reset):    %lu 
us\n", main_entry - _libraspiplat_get_reset_time());
+               printf("Text Size:    %lu\n", get_unikraft_text_size());
+               printf("Data Size:    %lu\n", get_unikraft_data_size());
+               printf("BSS Size:    %lu\n", get_unikraft_bss_size());
+               printf("Stack Use:    %lu\n", computeUsedStack());
+       #endif
+       
+       
+       uint64_t old_time, current_time;
+       old_time = get_system_timer();
+       
+       while(1) {
+               uint64_t elapsed_time = get_system_timer() - old_time;
+               if (elapsed_time < LVGL_REFRESH_SLEEP_TIME)
+                       usleep(LVGL_REFRESH_SLEEP_TIME - elapsed_time);
+               current_time = get_system_timer();
+               lv_tick_inc((current_time - old_time)/1000);
+               old_time = current_time;
+               lv_task_handler();
+       }
+
+       // Destroy the module instance
+       wasm_runtime_deinstantiate(wasm_module_inst_unikraft);
+
+fail4:
+       // Unload the module
+       wasm_runtime_unload(wasm_module);
+
+fail3:
+       // destroy runtime environment
+       wasm_runtime_destroy();
+
+fail1:
+       bh_memory_destroy();
+
+       return 0;
+}
diff --git a/scriptsrcs/lvgl/.clang-format b/scriptsrcs/lvgl/.clang-format
new file mode 100755
index 0000000..a8674b3
--- /dev/null
+++ b/scriptsrcs/lvgl/.clang-format
@@ -0,0 +1,97 @@
+---
+Language:        Cpp
+# BasedOnStyle:  LLVM
+AccessModifierOffset: -2
+AlignAfterOpenBracket: Align
+AlignConsecutiveAssignments: true
+AlignConsecutiveDeclarations: false
+AlignEscapedNewlinesLeft: false
+AlignOperands:   true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: true
+AllowShortFunctionsOnASingleLine: None
+AllowShortIfStatementsOnASingleLine: true
+AllowShortLoopsOnASingleLine: true
+AlwaysBreakAfterDefinitionReturnType: None
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: false
+AlwaysBreakTemplateDeclarations: false
+BinPackArguments: true
+BinPackParameters: true
+BreakBeforeBraces: Custom
+BraceWrapping:   
+  AfterClass:      false
+  AfterControlStatement: false
+  AfterEnum:       false
+  AfterFunction:   true
+  AfterNamespace:  false
+  AfterObjCDeclaration: false
+  AfterStruct:     true
+  AfterUnion:      true
+  BeforeCatch:     false
+  BeforeElse:      false
+  IndentBraces:    false
+  SplitEmptyFunction: false
+BreakBeforeBinaryOperators: None
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializersBeforeComma: false
+BreakAfterJavaFieldAnnotations: false
+BreakStringLiterals: true
+ColumnLimit:     120
+CommentPragmas:  '^ IWYU pragma:'
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+ConstructorInitializerIndentWidth: 4
+ContinuationIndentWidth: 4
+Cpp11BracedListStyle: true
+DerivePointerAlignment: false
+DisableFormat:   false
+ExperimentalAutoDetectBinPacking: false
+ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
+IncludeCategories: 
+  - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
+    Priority:        2
+  - Regex:           '^(<|"(gtest|isl|json)/)'
+    Priority:        3
+  - Regex:           '.*'
+    Priority:        1
+IncludeIsMainRegex: '$'
+IndentCaseLabels: true
+IndentWidth:     4
+IndentWrappedFunctionNames: false
+JavaScriptQuotes: Leave
+JavaScriptWrapImports: true
+KeepEmptyLinesAtTheStartOfBlocks: true
+MacroBlockBegin: ''
+MacroBlockEnd:   ''
+MaxEmptyLinesToKeep: 1
+NamespaceIndentation: None
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakBeforeFirstCallParameter: 19
+PenaltyBreakComment: 300
+PenaltyBreakFirstLessLess: 120
+PenaltyBreakString: 1000
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 60
+PointerAlignment: Middle
+ReflowComments:  true
+SortIncludes:    false
+SpaceAfterCStyleCast: false
+SpaceAfterTemplateKeyword: true
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeParens: Never
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 1
+SpacesInAngles:  false
+SpacesInContainerLiterals: false
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+Standard:        Cpp11
+TabWidth:        4
+UseTab:          Never
+...
+
diff --git a/scriptsrcs/lvgl/.editorconfig b/scriptsrcs/lvgl/.editorconfig
new file mode 100755
index 0000000..28a8b01
--- /dev/null
+++ b/scriptsrcs/lvgl/.editorconfig
@@ -0,0 +1,7 @@
+[*.{c,h}]
+indent_style = space
+indent_size = 4
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
diff --git a/scriptsrcs/lvgl/.gitignore b/scriptsrcs/lvgl/.gitignore
new file mode 100755
index 0000000..0d4f282
--- /dev/null
+++ b/scriptsrcs/lvgl/.gitignore
@@ -0,0 +1,5 @@
+**/*.o
+**/*.swp
+**/*.swo
+tags
+docs/api_doc
diff --git a/scriptsrcs/lvgl/.gitmodules b/scriptsrcs/lvgl/.gitmodules
new file mode 100755
index 0000000..e69de29
diff --git a/scriptsrcs/lvgl/LICENCE.txt b/scriptsrcs/lvgl/LICENCE.txt
new file mode 100755
index 0000000..beaef1d
--- /dev/null
+++ b/scriptsrcs/lvgl/LICENCE.txt
@@ -0,0 +1,8 @@
+MIT licence
+Copyright (c) 2016 Gábor Kiss-Vámosi
+
+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.
diff --git a/scriptsrcs/lvgl/README.md b/scriptsrcs/lvgl/README.md
new file mode 100755
index 0000000..9d17088
--- /dev/null
+++ b/scriptsrcs/lvgl/README.md
@@ -0,0 +1,398 @@
+<h1 align="center"> LittlevGL - Open-source Embedded GUI Library</h1>
+<p align="center">
+<a href="https://github.com/littlevgl/lvgl/blob/master/LICENCE.txt";><img 
src="https://img.shields.io/badge/licence-MIT-blue.svg";></a>
+<a href="https://github.com/littlevgl/lvgl/releases/tag/v6.0";><img 
src="https://img.shields.io/badge/version-6.0-blue.svg";></a>
+</p>
+
+<p align="center">
+<img src="https://littlevgl.com/github/cover_ori_reduced_2.gif";>
+</p>
+
+<p align="center">
+LittlevGL provides everything you need to create a Graphical User Interface 
(GUI) on embedded systems with easy-to-use graphical elements, beautiful visual 
effects and low memory footprint. 
+</p>
+
+<h4 align="center">
+<a href="https://littlevgl.com";>Website </a> &middot; 
+<a href="https://littlevgl.com/live-demo";>Live demo</a> &middot; 
+<a 
href="https://docs.littlevgl.com/en/html/get-started/pc-simulator.html";>Simulator</a>
 &middot; 
+<a href="https://forum.littlevgl.com";>Forum</a> &middot; 
+<a href="https://docs.littlevgl.com/";>Docs</a> &middot;
+<a href="https://blog.littlevgl.com/";>Blog</a>
+</h4>
+
+---
+
+- [Features](#features)
+- [Supported devices](#supported-devices)
+- [Quick start in a simulator](#quick-start-in-a-simulator)
+- [Add LittlevGL to your project](#add-littlevgl-to-your-project)
+- [Learn the basics](#learn-the-basics)
+- [Examples](#examples)
+- [Contributing](#contributing)
+- [Donate](#donate)
+
+
+## Features
+* **Powerful building blocks** buttons, charts, lists, sliders, images, etc.
+* **Advanced graphics** with animations, anti-aliasing, opacity, smooth 
scrolling
+* **Simultaneously use various input devices** touchscreen, mouse, keyboard, 
encoder, buttons, etc.
+* **Simultaneously use multiple displays** i.e. monochrome and color display
+* **Multi-language support** with UTF-8 encoding
+* **Fully customizable** graphical elements
+* **Hardware independent** to use with any microcontroller or display
+* **Scalable** to operate with little memory (64 kB Flash, 10 kB RAM)
+* **OS, External memory and GPU** supported but not required
+* **Single frame buffer** operation even with advances graphical effects
+* **Written in C** for maximal compatibility
+* **Micropython Binding** exposes [LittlevGL API in 
Micropython](https://blog.littlevgl.com/2019-02-20/micropython-bindings)
+* **Simulator** to develop on PC without embedded hardware
+* **Tutorials, examples, themes** for rapid development
+* **Documentation** and API references
+
+## Supported devices
+Basically, every modern controller - which is able to drive a display - is 
suitable to run LittlevGL. The minimal requirements:
+- 16, 32 or 64 bit microcontroller or processor
+- &gt; 16 MHz clock speed is recommended
+- Flash/ROM: &gt; 64 kB for the very essential components (&gt; 180 kB is 
recommended)
+- RAM: 
+  - Static RAM usage: ~8..16 kB depending on the used features and objects 
types
+  - Stack: &gt; 2kB (&gt; 4 kB is recommended)
+  - Dynamic data (heap): &gt; 4 KB (&gt; 16 kB is recommended if using several 
objects).
+    Set by `LV_MEM_SIZE` in *lv_conf.h*. 
+  - Display buffer:  &gt; *"Horizontal resolution"* pixels (&gt; 10 &times; 
*"Horizontal resolution"* is recommended) 
+-  C99 or newer compiler
+
+*Note that the memory usage might vary depending on the architecture, compiler 
and build options.*
+
+Just to mention some **platforms**:
+- STM32F1, STM32F3, 
[STM32F4](https://blog.littlevgl.com/2017-07-15/stm32f429_disco_port), 
[STM32F7](https://github.com/littlevgl/stm32f746_disco_no_os_sw4stm32)
+- Microchip dsPIC33, PIC24, PIC32MX, PIC32MZ
+- NXP Kinetis, LPC, iMX
+- [Linux frame buffer](https://blog.littlevgl.com/2018-01-03/linux_fb) 
(/dev/fb)
+- [Raspberry 
PI](http://www.vk3erw.com/index.php/16-software/63-raspberry-pi-official-7-touchscreen-and-littlevgl)
+- [Espressif ESP32](https://github.com/littlevgl/esp32_ili9431)
+- Nordic nrf52
+- Quectell M66
+
+## Quick start in a simulator
+The easiest way to get started with LittlevGL is to run it in a simulator on 
your PC without any embedded hardware. 
+
+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<br>with SDL<br>(Recommended on<br>Linux and Mac) | Native 
Windows | Windows<br>with SDL | Cross-platform<br>with SDL | 
Cross-platform<br>with SDL |
+
+
+## Add LittlevGL to your project
+
+The steps below show how to setup LittlevGL on an embedded system with a 
display and a touchpad. 
+You can use the 
[Simulators](https://docs.littlevgl.com/en/html/get-started/pc-simulator) to 
get ready to use projects which can be run on your PC. 
+
+1. [Download](https://littlevgl.com/download) or 
[Clone](https://github.com/littlevgl/lvgl) the library
+2. Copy the `lvgl` folder into your project
+3. Copy `lvgl/lv_conf_template.h` as `lv_conf.h` next to the `lvgl` folder and 
set at least `LV_HOR_RES_MAX`, `LV_VER_RES_MAX` and `LV_COLOR_DEPTH`.
+4. Include `lvgl/lvgl.h` where you need to use LittlevGL related functions.
+5. Call `lv_tick_inc(x)` every `x` milliseconds **in a Timer or Task** (`x` 
should be between 1 and 10). It is required for the internal timing of 
LittlevGL.
+6. Call `lv_init()`
+7. Create a display buffer for LittlevGL
+```c
+static lv_disp_buf_t disp_buf;
+static lv_color_t buf[LV_HOR_RES_MAX * 10];                     /*Declare a 
buffer for 10 lines*/
+lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * 10);    /*Initialize 
the display buffer*/
+```
+8. Implement and register a function which can **copy a pixel array** to an 
area of your display:
+```c
+lv_disp_drv_t disp_drv;               /*Descriptor of a display driver*/
+lv_disp_drv_init(&disp_drv);          /*Basic initialization*/
+disp_drv.flush_cb = my_disp_flush;    /*Set your driver function*/
+disp_drv.buffer = &disp_buf;          /*Assign the buffer to the display*/
+lv_disp_drv_register(&disp_drv);      /*Finally register the driver*/
+    
+void my_disp_flush(lv_disp_t * disp, const lv_area_t * area, lv_color_t * 
color_p)
+{
+    int32_t x, y;
+    for(y = area->y1; y <= area->y2; y++) {
+        for(x = area->x1; x <= area->x2; x++) {
+            set_pixel(x, y, *color_p);  /* Put a pixel to the display.*/
+            color_p++;
+        }
+    }
+
+    lv_disp_flush_ready(disp);         /* Indicate you are ready with the 
flushing*/
+}
+    
+```
+9. Implement and register a function which can **read an input device**. E.g. 
for a touch pad:
+```c
+lv_indev_drv_init(&indev_drv);             /*Descriptor of a input device 
driver*/
+indev_drv.type = LV_INDEV_TYPE_POINTER;    /*Touch pad is a pointer-like 
device*/
+indev_drv.read_cb = my_touchpad_read;      /*Set your driver function*/
+lv_indev_drv_register(&indev_drv);         /*Finally register the driver*/
+
+bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data)
+{
+    static lv_coord_t last_x = 0;
+    static lv_coord_t last_y = 0;
+
+    /*Save the state and save the pressed coordinate*/
+    data->state = touchpad_is_pressed() ? LV_INDEV_STATE_PR : 
LV_INDEV_STATE_REL; 
+    if(data->state == LV_INDEV_STATE_PR) touchpad_get_xy(&last_x, &last_y);
+   
+    /*Set the coordinates (if released use the last pressed coordinates)*/
+    data->point.x = last_x;
+    data->point.y = last_y;
+
+    return false; /*Return `false` because we are not buffering and no more 
data to read*/
+}
+```
+10. Call `lv_task_handler()` periodically every few milliseconds in the main 
`while(1)` loop, in Timer interrupt or in an Operation system task. 
+It will redraw the screen if required, handle input devices etc. 
+
+
+## Learn the basics
+
+### Objects (Widgets)
+
+The graphical elements like Buttons, Labels, Sliders, Charts etc are called 
objects in LittelvGL. Go to [Object 
types](https://docs.littlevgl.com/en/html/object-types/index) to see the full 
list of available types.
+
+Every object has a parent object. The child object moves with the parent and 
if you delete the parent the children will be deleted too. Children can be 
visible only on their parent.
+
+The *screen* are the "root" parents. To get the current screen call 
`lv_scr_act()`.
+
+You can create a new object with `lv_<type>_create(parent, obj_to_copy)`. It 
will return an `lv_obj_t *` variable which should be used as a reference to the 
object to set its parameters. 
+The first parameter is the desired *parent*, te second parameters can be an 
object to copy (`NULL` is unused). 
+For example:
+```c
+lv_obj_t * slider1 = lv_slider_create(lv_scr_act(), NULL);
+```
+
+To set some basic attribute `lv_obj_set_<paramters_name>(obj, <value>)` 
function can be used. For example:
+```c
+lv_obj_set_x(btn1, 30);
+lv_obj_set_y(btn1, 10);
+lv_obj_set_size(btn1, 200, 50);
+```
+
+The objects has type specific parameters too which can be set by 
`lv_<type>_set_<paramters_name>(obj, <value>)` functions. For example:
+```c
+lv_slider_set_value(slider1, 70, LV_ANIM_ON);
+```
+
+To see the full API visit the documentation of the object types or the related 
header file (e.g. `lvgl/src/lv_objx/lv_slider.h`).
+
+### Styles
+Styles can be assigned to the objects to changed their appearance. A style 
describes the appearance of rectangle-like objects (like a button or slider), 
texts, images and lines at once. 
+
+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 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;
+style1.text.color = lv_color_hex3(0x0F0)        /*Label color (green)*/
+style1.text.font = &lv_font_dejavu_22;          /*Change font*/
+...
+```
+
+To set a new style for an object use the `lv_<type>set_style(obj, 
LV_<TYPE>_STYLE_<NAME>, &my_style)` functions. For example:
+```c
+lv_slider_set_style(slider1, LV_SLIDER_STYLE_BG, &slider_bg_style);
+lv_slider_set_style(slider1, LV_SLIDER_STYLE_INDIC, &slider_indic_style);
+lv_slider_set_style(slider1, LV_SLIDER_STYLE_KNOB, &slider_knob_style);
+```
+
+If an object's style is `NULL` then it will inherit its parent's style. For 
example, the labels' style are `NULL` by default. If you place them on a button 
then they will use the `style.text` properties from the button's style.
+
+Learn more in [Style 
overview](https://docs.littlevgl.com/en/html/overview/style) section.
+
+### Events
+Events are used to inform the user if something has happened with an object. 
You can assign a callback to an object which will be called if the object is 
clicked, released, dragged, being deleted etc. It should look like this: 
+
+```c
+lv_obj_set_event_cb(btn, btn_event_cb);                 /*Assign a callback to 
the button*/
+
+...
+
+void btn_event_cb(lv_obj_t * btn, lv_event_t event)
+{
+    if(event == LV_EVENT_CLICKED) {
+        printf("Clicked\n");
+    }
+}
+```
+
+Learn more about the events in the [Event 
overview](https://docs.littlevgl.com/en/html/overview/event) section. 
+
+
+## Examples 
+
+### Button with label
+```c
+lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL);     /*Add a button the 
current screen*/
+lv_obj_set_pos(btn, 10, 10);                            /*Set its position*/
+lv_obj_set_size(btn, 100, 50);                          /*Set its size*/
+lv_obj_set_event_cb(btn, btn_event_cb);                 /*Assign a callback to 
the button*/
+
+lv_obj_t * label = lv_label_create(btn, NULL);          /*Add a label to the 
button*/
+lv_label_set_text(label, "Button");                     /*Set the labels text*/
+
+...
+
+void btn_event_cb(lv_obj_t * btn, lv_event_t event)
+{
+    if(event == LV_EVENT_CLICKED) {
+        printf("Clicked\n");
+    }
+}
+```
+![LittlevGL button with label 
example](https://docs.littlevgl.com/en/misc/simple_button_example.gif)
+
+### Button with styles
+Add styles to the previously button from the previous example
+```c
+static lv_style_t style_btn_rel;                        /*A variable to store 
the released style*/
+lv_style_copy(&style_btn_rel, &lv_style_plain);         /*Initialize from a 
built-in style*/
+style_btn_rel.body.border.color = lv_color_hex3(0x269);
+style_btn_rel.body.border.width = 1;
+style_btn_rel.body.main_color = lv_color_hex3(0xADF);
+style_btn_rel.body.grad_color = lv_color_hex3(0x46B);
+style_btn_rel.body.shadow.width = 4;
+style_btn_rel.body.shadow.type = LV_SHADOW_BOTTOM;
+style_btn_rel.body.radius = LV_RADIUS_CIRCLE;
+style_btn_rel.text.color = lv_color_hex3(0xDEF);
+
+static lv_style_t style_btn_pr;                         /*A variable to store 
the pressed style*/
+lv_style_copy(&style_btn_pr, &style_btn_rel);           /*Initialize from the 
released style*/
+style_btn_pr.body.border.color = lv_color_hex3(0x46B);
+style_btn_pr.body.main_color = lv_color_hex3(0x8BD);
+style_btn_pr.body.grad_color = lv_color_hex3(0x24A);
+style_btn_pr.body.shadow.width = 2;
+style_btn_pr.text.color = lv_color_hex3(0xBCD);
+
+lv_btn_set_style(btn, LV_BTN_STYLE_REL, &style_btn_rel);    /*Set the button's 
released style*/
+lv_btn_set_style(btn, LV_BTN_STYLE_PR, &style_btn_pr);      /*Set the button's 
pressed style*/
+```
+
+![Stylsd button is 
LittelvGL](https://docs.littlevgl.com/en/misc/button_style_example.gif)
+
+### Slider and object alignment
+```c
+lv_obj_t * label;
+
+...
+
+/* Create a slider in the center of the display */
+lv_obj_t * slider = lv_slider_create(lv_scr_act(), NULL);
+lv_obj_set_width(slider, 200);                        /*Set the width*/
+lv_obj_align(slider, NULL, LV_ALIGN_CENTER, 0, 0);    /*Align to the center of 
the parent (screen)*/
+lv_obj_set_event_cb(slider, slider_event_cb);         /*Assign an event 
function*/
+
+/* Create a label below the slider */
+label = lv_label_create(lv_scr_act(), NULL);
+lv_label_set_text(label, "0");
+lv_obj_set_auto_realign(slider, true);
+lv_obj_align(label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+
+...
+
+void slider_event_cb(lv_obj_t * slider, lv_event_t event)
+{
+    if(event == LV_EVENT_VALUE_CHANGED) {
+        static char buf[4];                                 /* max 3 bytes  
for number plus 1 null terminating byte */
+        snprintf(buf, 4, "%u", lv_slider_get_value(slider));
+        lv_label_set_text(slider_label, buf);               /*Refresh the 
text*/
+    }
+}
+```
+
+![Slider example with 
LittlevGL](https://docs.littlevgl.com/en/misc/slider_example.gif)
+
+### List and themes
+```c
+/*Texts of the list elements*/
+const char * txts[] = {"First", "Second", "Third", "Forth", "Fifth", "Sixth", 
NULL};
+
+/* Initialize and set a theme. `LV_THEME_NIGHT` needs to enabled in lv_conf.h. 
*/
+lv_theme_t * th = lv_theme_night_init(20, NULL);
+lv_theme_set_current(th);
+
+/*Create a list*/
+lv_obj_t* list = lv_list_create(lv_scr_act(), NULL);
+lv_obj_set_size(list, 120, 180);
+lv_obj_set_pos(list, 10, 10);
+
+/*Add buttons*/
+uint8_t i;
+for(i = 0; txts[i]; i++) {
+    lv_obj_t * btn = lv_list_add_btn(list, LV_SYMBOL_FILE, txts[i]);
+    lv_obj_set_event_cb(btn, list_event);       /*Assign event function*/
+    lv_btn_set_toggle(btn, true);               /*Enable on/off states*/
+}
+
+/* Initialize and set an other theme. `LV_THEME_MATERIAL` needs to enabled in 
lv_conf.h.
+ * If `LV_TEHE_LIVE_UPDATE  1` then the previous list's style will be updated 
too.*/
+th = lv_theme_material_init(210, NULL);
+lv_theme_set_current(th);
+
+/*Create an other list*/
+list = lv_list_create(lv_scr_act(), NULL);
+lv_obj_set_size(list, 120, 180);
+lv_obj_set_pos(list, 150, 10);
+
+/*Add buttons with the same texts*/
+for(i = 0; txts[i]; i++) {
+    lv_obj_t * btn = lv_list_add_btn(list, LV_SYMBOL_FILE, txts[i]);
+    lv_obj_set_event_cb(btn, list_event);
+    lv_btn_set_toggle(btn, true);
+}
+
+...
+
+static void list_event(lv_obj_t * btn, lv_event_t e)
+{
+    if(e == LV_EVENT_CLICKED) {
+        printf("%s\n", lv_list_get_btn_text(btn));
+    }
+
+}
+```
+![List and theme example with 
LittlevGL](https://docs.littlevgl.com/en/misc/list_theme_example.gif)
+
+### Use LittlevGL from Micropython
+Learn more about 
[Micropython](https://docs.littlevgl.com/en/html/get-started/micropython).
+```python
+# Create a Button and a Label
+scr = lv.obj()
+btn = lv.btn(scr)
+btn.align(lv.scr_act(), lv.ALIGN.CENTER, 0, 0)
+label = lv.label(btn)
+label.set_text("Button")
+
+# Load the screen
+lv.scr_load(scr)
+```
+
+## Contributing
+To ask questions please use the [Forum](https://forum.littlevgl.com).
+For development-related things (bug reports, feature suggestions) use 
[GitHub's Issue tracker](https://github.com/littlevgl/lvgl/issues). 
+
+If you are interested in contributing to LittlevGL you can
+- **Help others** in the [Forum](https://forum.littlevgl.com).
+- **Inspire people** by speaking about your project in [My 
project](https://forum.littlevgl.com/c/my-projects) category in the Forum or 
add it to the [References](https://blog.littlevgl.com/2018-12-26/references) 
post
+- **Improve and/or translate the documentation.** Go to the 
[Documentation](https://github.com/littlevgl/docs) repository to learn more
+- **Write a blog post** about your experiences. See how to do it in the 
[Blog](https://github.com/littlevgl/blog) repository
+- **Report and/or fix bugs** in [GitHub's issue 
tracker](https://github.com/littlevgl/lvgl/issues)
+- **Help in the developement**. Check the [Open 
issues](https://github.com/littlevgl/lvgl/issues) especially the ones with 
[Help 
wanted](https://github.com/littlevgl/lvgl/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)
 label and tell your ideas about a topic or implement a feature.
+
+It should be useful to read the
+- [Contributing guide](https://blog.littlevgl.com/2018-12-06/contributing)
+- [Coding style 
guide](https://github.com/littlevgl/lvgl/blob/master/docs/CODING_STYLE.md)
+
+## Donate
+If you are pleased with the library, found it useful, or you are happy with 
the support you got, please help its further development:
+
+[![Donate](https://littlevgl.com/donate_dir/donate_btn.png)](https://littlevgl.com/donate)
diff --git a/scriptsrcs/lvgl/docs/CODE_OF_CONDUCT.md 
b/scriptsrcs/lvgl/docs/CODE_OF_CONDUCT.md
new file mode 100755
index 0000000..c7d7eeb
--- /dev/null
+++ b/scriptsrcs/lvgl/docs/CODE_OF_CONDUCT.md
@@ -0,0 +1,46 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as 
contributors and maintainers pledge to making participation in our project and 
our community a harassment-free experience for everyone, regardless of age, 
body size, disability, ethnicity, gender identity and expression, level of 
experience, nationality, personal appearance, race, religion, or sexual 
identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment 
include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or 
advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic 
address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a 
professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable 
behavior and are expected to take appropriate and fair corrective action in 
response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or 
reject comments, commits, code, wiki edits, issues, and other contributions 
that are not aligned to this Code of Conduct, or to ban temporarily or 
permanently any contributor for other behaviors that they deem inappropriate, 
threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces 
when an individual is representing the project or its community. Examples of 
representing a project or community include using an official project e-mail 
address, posting via an official social media account, or acting as an 
appointed representative at an online or offline event. Representation of a 
project may be further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be 
reported by contacting the project team at 
[atom@xxxxxxxxxx](mailto:atom@xxxxxxxxxx). All complaints will be reviewed and 
investigated and will result in a response that is deemed necessary and 
appropriate to the circumstances. The project team is obligated to maintain 
confidentiality with regard to the reporter of an incident. Further details of 
specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good 
faith may face temporary or permanent repercussions as determined by other 
members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], 
version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
+
+[homepage]: http://contributor-covenant.org
+[version]: http://contributor-covenant.org/version/1/4/
diff --git a/scriptsrcs/lvgl/docs/CODING_STYLE.md 
b/scriptsrcs/lvgl/docs/CODING_STYLE.md
new file mode 100755
index 0000000..31071e9
--- /dev/null
+++ b/scriptsrcs/lvgl/docs/CODING_STYLE.md
@@ -0,0 +1,94 @@
+
+## File format
+Use 
[lv_misc/lv_templ.c](https://github.com/littlevgl/lvgl/blob/master/src/lv_misc/lv_templ.c)
 and 
[lv_misc/lv_templ.h](https://github.com/littlevgl/lvgl/blob/master/src/lv_misc/lv_templ.h)
+
+## Naming conventions
+* Words are separated by '_'
+* In variable and function names use only lower case letters (e.g. 
*height_tmp*)
+* In enums and defines use only upper case letters (e.g. *e.g. MAX_LINE_NUM*)
+* Global names (API):
+  * starts with *lv*
+  * followed by module name: *btn*, *label*, *style* etc.
+  * followed by the action (for functions): *set*, *get*, *refr* etc.
+  * closed with the subject: *name*, *size*, *state* etc. 
+* Typedefs
+  * prefer `typedef struct` and `typedef enum` instead of  `struct name` and 
`enum name`
+  * always end `typedef struct` and `typedef enum` type names with `_t`
+* Abbreviations:
+  * Use abbreviations on public names only if they become longer than 32 
characters 
+  * Use only very straightforward (e.g. pos: position) or well-established 
(e.g. pr: press) abbreviations 
+
+## Coding guide
+* Functions:
+  * Try to write function shorter than is 50 lines 
+  * Always shorter than 100 lines (except very straightforwards) 
+* Variables:
+  * One line, one declaration (BAD: char x, y;)
+  * Use `<stdint.h>` (*uint8_t*, *int32_t* etc)
+  * Declare variables when needed (not all at function start)
+  * Use the smallest required scope
+  * Variables in a file (outside functions) are always *static*
+  * Do not use global variables (use functions to set/get static variables)
+
+## Comments
+Before every function have a comment like this:
+
+```c
+/**
+ * Return with the screen of an object
+ * @param obj pointer to an object
+ * @return pointer to a screen
+ */
+lv_obj_t * lv_obj_get_scr(lv_obj_t * obj); 
+```
+
+Always use `/* Something */` format and NOT `//Something`
+
+Write readable code to avoid descriptive comments like: 
+`x++; /* Add 1 to x */`. 
+The code should show clearly what you are doing.
+
+You should write **why** have you done this: 
+`x++; /*Because of closing '\0' of the string */`
+
+Short "code summaries" of a few lines are accepted. E.g. `/*Calculate the new 
coordinates*/`
+
+In comments use \` \` when referring to a variable. E.g. ``/*Update the value 
of `x_act`*/``
+
+### Formatting
+Here is example to show bracket placing and using of white spaces:
+```c
+/**
+ * Set a new text for a label. Memory will be allocated to store the text by 
the label.
+ * @param label pointer to a label object
+ * @param text '\0' terminated character string. NULL to refresh with the 
current text.
+ */
+void lv_label_set_text(lv_obj_t * label, const char * text)
+{   /* Main brackets of functions in new line*/
+    
+    if(label == NULL) return; /*No bracket only if the command is inline with 
the if statement*/
+    
+    lv_obj_inv(label);
+    
+    lv_label_ext_t * ext = lv_obj_get_ext(label);
+
+    /*Comment before a section */
+    if(text == ext->txt || text == NULL) {  /*Bracket of statements start 
inline*/
+        lv_label_refr_text(label);
+        return;   
+    }
+    
+    ...
+}
+```
+
+Use 4 spaces indentation instead of tab.
+
+You can use **astyle** to format the code. The required config flies are: 
`docs/astyle_c` and `docs/astyle_h`.
+To format the source files: 
+ `$ find . -type f -name "*.c" | xargs astyle --options=docs/astyle_c`
+ 
+To format the header files:
+ `$ find . -type f -name "*.h" | xargs astyle --options=docs/astyle_h`
+ 
+Append `-n` to the end to skip creation of backup file OR use `$ find . -type 
f -name "*.bak"  -delete` (for source file's backups) and `find . -type f -name 
"*.orig" -delete` (for header file's backups)
diff --git a/scriptsrcs/lvgl/docs/CONTRIBUTING.md 
b/scriptsrcs/lvgl/docs/CONTRIBUTING.md
new file mode 100755
index 0000000..aa31870
--- /dev/null
+++ b/scriptsrcs/lvgl/docs/CONTRIBUTING.md
@@ -0,0 +1,111 @@
+# Contributing to Littlev Graphics Library
+
+**Do you have some free time to spend with programming?
+Are you working on an Embedded GUI project with LittlevGL?
+See how can you help to improve the graphics library!**
+
+There are many ways to join the community. If you have some time to work with 
us I'm sure you will find something that fits you! You can:
+- help others in the [Forum](https://forum.littlevgl.com/)
+- improve and/or translate the documentation
+- write a blog post about your experiences
+- report and/or fix bugs
+- suggest and/or implement new features
+
+But first, start with the most Frequently Asked Questions.
+
+# FAQ about contributing
+
+## Where can I write my question and remarks?
+
+We use the [Forum](https://forum.littlevgl.com/) to ask and answer questions 
and [GitHub's issue tracker](https://github.com/littlevgl/lvgl/issues) for 
development-related discussion.
+
+But there are some simple rules:
+- Be kind and friendly.
+- Speak about one thing in one issue/topic.
+- Give feedback and close the issue or mark the topic as solved if your 
question is answered. 
+- Tell what you experience or expect. _"The button is not working"_ is not 
enough info to get help.
+- If possible send an absolute minimal code example in order to reproduce the 
issue
+- Use 
[Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) to 
format your post.
+
+## How can I send fixes and improvements?
+
+Merging new code happens via Pull Requests. If you are still not familiar with 
the Pull Requests (PR for short) here is a quick guide:
+1. **Fork** the [lvgl repository](https://github.com/littlevgl/lvgl). To do 
this click the "Fork" button in the top right corner. It will "copy" the `lvgl` 
repository to your GitHub account 
(`https://github.com/your_name?tab=repositories`)
+2. **Clone**  the forked repository and add your changes
+3. **Create a PR** on GitHub from the page of your `lvgl` repository 
(`https://github.com/your_name/lvgl`) by hitting the "New pull request" button 
+4. **Set the base branch**. It means where you want to merge your update. 
Fixes go to `master`, new features to the actual `dev-x.y` branch. 
+5. **Describe** what is in the update. An example code is welcome if 
applicable.
+
+Some advice:
+- If you are not sure about your fix or feature it's better to open an issue 
first and discuss the details there.
+- Maybe your fix or update won't be perfect at first. Don't be afraid, just 
improve it and push the new commits. The PR will be updated accordingly. 
+- If your update needs some extra work it's okay to say: _"I'm busy now and I 
will improve it soon"_ or _"Sorry, I don't have time to improve it, I hope it 
helps in this form too"_. 
+So it's better to say don't have time to continue than saying nothing.
+- Please read and follow this [guide about the coding 
style](https://github.com/littlevgl/lvgl/blob/master/docs/CODING_STYLE.md)
+
+
+## Where is the documentation?
+
+You can read the documentation here: <https://docs.littlevgl.com/>  
+You can edit the documentation here: <https://github.com/littlevgl/doc>  
+
+## Where is the blog?
+
+You can read the blog here: <https://blog.littlevgl.com/>  
+You can edit the blog here: <https://github.com/littlevgl/blog>  
+
+# So how and where can you contribute?
+
+## Help others in the Forum
+
+It's a great way to contribute to the library if you already use it. 
+Just go to [https://forum.littlevgl.com/](https://forum.littlevgl.com/) a 
register (Google and GitHub login also works).
+Log in, read the titles and if you are already familiar with a topic, don't be 
shy, and write your suggestion.
+
+## Improving and/or translating the documentation
+
+If you would like to contribute to LittlevGL the documentation is the best 
place to start.
+
+### Fix typos, add missing parts
+
+If you find a typo, an obscure sentence or something which is not explained 
well enough in the [English 
documentation](https://docs.littlevgl.com/en/html/index.html) 
+click the *"Edit on GitHub"* button in the top right corner and fix the issue 
by sending a Pull Request.
+
+### Translate the documentation
+
+If you have time and interest you can translate the documentation to your 
native language or any language you speak. 
+You can join others to work on an already existing language or you can start a 
new one.  
+
+To translate the documentation we use [Zanata](https://zanata.org) which is an 
online translation platform. 
+You will find the LittlevGL project here: [LittlevGL on 
Zanata](https://translate.zanata.org/iteration/view/littlevgl-docs/v6.0-doc1?dswid=3430)
 
+
+To get started you need to:
+- register at [Zanata](https://zanata.org) which is an online translation 
platform.  
+- comment to [this 
post](https://forum.littlevgl.com/t/translate-the-documentation/238?u=kisvegabor)
+- tell your username at *Zanata* and your selected language(s) to get 
permission the edit the translations
+
+Note that a translation will be added to the documentation only if at least 
the [Porting section](https://docs.littlevgl.com/en/html/porting/index.html) is 
translated.
+
+
+## Writing a blog post about your experiences
+
+Have you ported LittlevGL to a new platform? Have you created a fancy GUI? Do 
you know a great trick? 
+You can share your knowledge on LittlevGL's blog! It's super easy to add your 
own post:
+- Fork and clone the [blog repository](https://github.com/littlevgl/blog)
+- Add your post in Markdown to the `_posts` folder. 
+- Store the images and other resources in a dedicated folder in `assets`
+- Create a Pull Request
+
+The blog uses [Jekyll](https://jekyllrb.com/) to convert the `.md` files to a 
webpage. You can easily [run Jekyll offline](https://jekyllrb.com/docs/) to 
check your post before creating the Pull request
+
+## Reporting and/or fixing bugs
+For simple bugfixes (typos, missing error handling, fixing a warning) is fine 
to send a Pull request directly. However, for more complex bugs it's better to 
open an issue first. In the issue, you should describe how to reproduce the bug 
and even add the minimal code snippet.
+
+## Suggesting and/or implementing new features
+If you have a good idea don't hesitate to share with us. It's even better if 
you have time to deal with its implementation. Don't be afraid if you still 
don't know LittlevGL well enough. We will help you to get started. 
+
+During the implementation don't forget the [Code style 
guide](https://github.com/littlevgl/lvgl/blob/master/docs/CODING_STYLE.md).
+
+# Summary
+
+I hope you have taken a liking to contribute to LittlevGL. A helpful and 
friendly community is waiting for you! :) 
diff --git a/scriptsrcs/lvgl/library.json b/scriptsrcs/lvgl/library.json
new file mode 100755
index 0000000..23ecc3f
--- /dev/null
+++ b/scriptsrcs/lvgl/library.json
@@ -0,0 +1,14 @@
+{
+    "name": "lvgl",
+    "version": "6.1.1",
+    "keywords": "graphics, gui, embedded, littlevgl",
+    "description": "Graphics library to create embedded GUI with easy-to-use 
graphical elements, beautiful visual effects and low memory footprint. It 
offers anti-aliasing, opacity, and animations using only one frame buffer.",
+    "repository":
+    {
+        "type": "git",
+        "url": "https://github.com/littlevgl/lvgl.git";
+    },
+    "build": {
+        "includeDir": "."
+    }
+}
diff --git a/scriptsrcs/lvgl/lv_conf_template.h 
b/scriptsrcs/lvgl/lv_conf_template.h
new file mode 100755
index 0000000..77b97b1
--- /dev/null
+++ b/scriptsrcs/lvgl/lv_conf_template.h
@@ -0,0 +1,591 @@
+/**
+ * @file lv_conf.h
+ *
+ */
+
+/*
+ * COPY THIS FILE AS `lv_conf.h` NEXT TO the `lvgl` FOLDER
+ */
+
+#if 0 /*Set it to "1" to enable content*/
+
+#ifndef LV_CONF_H
+#define LV_CONF_H
+/* clang-format off */
+
+#include <stdint.h>
+
+/*====================
+   Graphical settings
+ *====================*/
+
+/* Maximal horizontal and vertical resolution to support by the library.*/
+#define LV_HOR_RES_MAX          (480)
+#define LV_VER_RES_MAX          (320)
+
+/* Color depth:
+ * - 1:  1 byte per pixel
+ * - 8:  RGB233
+ * - 16: RGB565
+ * - 32: ARGB8888
+ */
+#define LV_COLOR_DEPTH     16
+
+/* Swap the 2 bytes of RGB565 color.
+ * Useful if the display has a 8 bit interface (e.g. SPI)*/
+#define LV_COLOR_16_SWAP   0
+
+/* 1: Enable screen transparency.
+ * Useful for OSD or other overlapping GUIs.
+ * Requires `LV_COLOR_DEPTH = 32` colors and the screen's style should be 
modified: `style.body.opa = ...`*/
+#define LV_COLOR_SCREEN_TRANSP    0
+
+/*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
+
+/* Default display refresh period.
+ * Can be changed in the display driver (`lv_disp_drv_t`).*/
+#define LV_DISP_DEF_REFR_PERIOD      30      /*[ms]*/
+
+/* Dot Per Inch: used to initialize default sizes.
+ * E.g. a button with width = LV_DPI / 2 -> half inch wide
+ * (Not so important, you can adjust it to modify default sizes and spaces)*/
+#define LV_DPI              100     /*[px]*/
+
+/* Type of coordinates. Should be `int16_t` (or `int32_t` for extreme cases) */
+typedef int16_t lv_coord_t;
+
+/*=========================
+   Memory manager settings
+ *=========================*/
+
+/* LittelvGL's internal memory manager's settings.
+ * The graphical objects and other related data are stored here. */
+
+/* 1: use custom malloc/free, 0: use the built-in `lv_mem_alloc` and 
`lv_mem_free` */
+#define LV_MEM_CUSTOM      0
+#if LV_MEM_CUSTOM == 0
+/* Size of the memory used by `lv_mem_alloc` in bytes (>= 2kB)*/
+#  define LV_MEM_SIZE    (32U * 1024U)
+
+/* Complier prefix for a big array declaration */
+#  define LV_MEM_ATTR
+
+/* Set an address for the memory pool instead of allocating it as an array.
+ * Can be in external SRAM too. */
+#  define LV_MEM_ADR          0
+
+/* Automatically defrag. on free. Defrag. means joining the adjacent free 
cells. */
+#  define LV_MEM_AUTO_DEFRAG  1
+#else       /*LV_MEM_CUSTOM*/
+#  define LV_MEM_CUSTOM_INCLUDE <stdlib.h>   /*Header for the dynamic memory 
function*/
+#  define LV_MEM_CUSTOM_ALLOC   malloc       /*Wrapper to malloc*/
+#  define LV_MEM_CUSTOM_FREE    free         /*Wrapper to free*/
+#endif     /*LV_MEM_CUSTOM*/
+
+/* Garbage Collector settings
+ * Used if lvgl is binded to higher level language and the memory is managed 
by that language */
+#define LV_ENABLE_GC 0
+#if LV_ENABLE_GC != 0
+#  define LV_GC_INCLUDE "gc.h"                           /*Include Garbage 
Collector related things*/
+#  define LV_MEM_CUSTOM_REALLOC   your_realloc           /*Wrapper to realloc*/
+#  define LV_MEM_CUSTOM_GET_SIZE  your_mem_get_size      /*Wrapper to 
lv_mem_get_size*/
+#endif /* LV_ENABLE_GC */
+
+/*=======================
+   Input device settings
+ *=======================*/
+
+/* Input device default settings.
+ * Can be changed in the Input device driver (`lv_indev_drv_t`)*/
+
+/* Input device read period in milliseconds */
+#define LV_INDEV_DEF_READ_PERIOD          30
+
+/* Drag threshold in pixels */
+#define LV_INDEV_DEF_DRAG_LIMIT           10
+
+/* Drag throw slow-down in [%]. Greater value -> faster slow-down */
+#define LV_INDEV_DEF_DRAG_THROW           20
+
+/* Long press time in milliseconds.
+ * Time to send `LV_EVENT_LONG_PRESSSED`) */
+#define LV_INDEV_DEF_LONG_PRESS_TIME      400
+
+/* Repeated trigger period in long press [ms]
+ * Time between `LV_EVENT_LONG_PRESSED_REPEAT */
+#define LV_INDEV_DEF_LONG_PRESS_REP_TIME  100
+
+/*==================
+ * Feature usage
+ *==================*/
+
+/*1: Enable the Animations */
+#define LV_USE_ANIMATION        1
+#if LV_USE_ANIMATION
+
+/*Declare the type of the user data of animations (can be e.g. `void *`, 
`int`, `struct`)*/
+typedef void * lv_anim_user_data_t;
+
+#endif
+
+/* 1: Enable shadow drawing*/
+#define LV_USE_SHADOW           1
+
+/* 1: Enable object groups (for keyboard/encoder navigation) */
+#define LV_USE_GROUP            1
+#if LV_USE_GROUP
+typedef void * lv_group_user_data_t;
+#endif  /*LV_USE_GROUP*/
+
+/* 1: Enable GPU interface*/
+#define LV_USE_GPU              1
+
+/* 1: Enable file system (might be required for images */
+#define LV_USE_FILESYSTEM       1
+#if LV_USE_FILESYSTEM
+/*Declare the type of the user data of file system drivers (can be e.g. `void 
*`, `int`, `struct`)*/
+typedef void * lv_fs_drv_user_data_t;
+#endif
+
+/*1: Add a `user_data` to drivers and objects*/
+#define LV_USE_USER_DATA        0
+
+/*========================
+ * Image decoder and cache
+ *========================*/
+
+/* 1: Enable indexed (palette) images */
+#define LV_IMG_CF_INDEXED       1
+
+/* 1: Enable alpha indexed images */
+#define LV_IMG_CF_ALPHA         1
+
+/* Default image cache size. Image caching keeps the images opened.
+ * If only the built-in image formats are used there is no real advantage of 
caching.
+ * (I.e. no new image decoder is added)
+ * With complex image decoders (e.g. PNG or JPG) caching can save the 
continuous open/decode of images.
+ * However the opened images might consume additional RAM.
+ * LV_IMG_CACHE_DEF_SIZE must be >= 1 */
+#define LV_IMG_CACHE_DEF_SIZE       1
+
+/*Declare the type of the user data of image decoder (can be e.g. `void *`, 
`int`, `struct`)*/
+typedef void * lv_img_decoder_user_data_t;
+
+/*=====================
+ *  Compiler settings
+ *====================*/
+/* Define a custom attribute to `lv_tick_inc` function */
+#define LV_ATTRIBUTE_TICK_INC
+
+/* Define a custom attribute to `lv_task_handler` function */
+#define LV_ATTRIBUTE_TASK_HANDLER
+
+/* With size optimization (-Os) the compiler might not align data to
+ * 4 or 8 byte boundary. This alignment will be explicitly applied where 
needed.
+ * E.g. __attribute__((aligned(4))) */
+#define LV_ATTRIBUTE_MEM_ALIGN
+
+/* Attribute to mark large constant arrays for example
+ * font's bitmaps */
+#define LV_ATTRIBUTE_LARGE_CONST
+
+/* Export integer constant to binding.
+ * This macro is used with constants in the form of LV_<CONST> 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
+ *==================*/
+
+/* 1: use a custom tick source.
+ * It removes the need to manually update the tick with `lv_tick_inc`) */
+#define LV_TICK_CUSTOM     0
+#if LV_TICK_CUSTOM == 1
+#define LV_TICK_CUSTOM_INCLUDE  "something.h"       /*Header for the sys time 
function*/
+#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis())     /*Expression evaluating to 
current systime in ms*/
+#endif   /*LV_TICK_CUSTOM*/
+
+typedef void * lv_disp_drv_user_data_t;             /*Type of user data in the 
display driver*/
+typedef void * lv_indev_drv_user_data_t;            /*Type of user data in the 
input device driver*/
+
+/*================
+ * Log settings
+ *===============*/
+
+/*1: Enable the log module*/
+#define LV_USE_LOG      0
+#if LV_USE_LOG
+/* How important log should be added:
+ * LV_LOG_LEVEL_TRACE       A lot of logs to give detailed information
+ * LV_LOG_LEVEL_INFO        Log important events
+ * LV_LOG_LEVEL_WARN        Log if something unwanted happened but didn't 
cause a problem
+ * LV_LOG_LEVEL_ERROR       Only critical issue, when the system may fail
+ * LV_LOG_LEVEL_NONE        Do not log anything
+ */
+#  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_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)  <my_assert_code>
+ */
+#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
+ *================*/
+#define LV_THEME_LIVE_UPDATE    0   /*1: Allow theme switching at run time. 
Uses 8..10 kB of RAM*/
+
+#define LV_USE_THEME_TEMPL      0   /*Just for test*/
+#define LV_USE_THEME_DEFAULT    0   /*Built mainly from the built-in styles. 
Consumes very few RAM*/
+#define LV_USE_THEME_ALIEN      0   /*Dark futuristic theme*/
+#define LV_USE_THEME_NIGHT      0   /*Dark elegant theme*/
+#define LV_USE_THEME_MONO       0   /*Mono color theme for monochrome 
displays*/
+#define LV_USE_THEME_MATERIAL   0   /*Flat theme with bold colors and light 
shadows*/
+#define LV_USE_THEME_ZEN        0   /*Peaceful, mainly light theme */
+#define LV_USE_THEME_NEMO       0   /*Water-like theme based on the movie 
"Finding Nemo"*/
+
+/*==================
+ *    FONT USAGE
+ *===================*/
+
+/* The built-in fonts contains the ASCII range and some Symbols with  4 
bit-per-pixel.
+ * The symbols are available via `LV_SYMBOL_...` defines
+ * More info about fonts: https://docs.littlevgl.com/#Fonts
+ * To create a new font go to: https://littlevgl.com/ttf-font-to-c-array
+ */
+
+/* Robot fonts with bpp = 4
+ * https://fonts.google.com/specimen/Roboto  */
+#define LV_FONT_ROBOTO_12    0
+#define LV_FONT_ROBOTO_16    1
+#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
+
+/* Optionally declare your custom fonts here.
+ * You can use these fonts as default font too
+ * and they will be available globally. E.g.
+ * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \
+ *                                LV_FONT_DECLARE(my_font_2)
+ */
+#define LV_FONT_CUSTOM_DECLARE
+
+/*Always set a default font from the built-in fonts*/
+#define LV_FONT_DEFAULT        &lv_font_roboto_16
+
+/* Enable it if you have fonts with a lot of characters.
+ * The limit depends on the font size, font face and bpp
+ * 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;
+
+/*=================
+ *  Text settings
+ *=================*/
+
+/* Select a character encoding for strings.
+ * Your IDE or editor should have the same character encoding
+ * - LV_TXT_ENC_UTF8
+ * - LV_TXT_ENC_ASCII
+ * */
+#define LV_TXT_ENC LV_TXT_ENC_UTF8
+
+ /*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 <stdio.h>
+#  define lv_snprintf     snprintf
+#  define lv_vsnprintf    vsnprintf
+#endif  /*LV_SPRINTF_CUSTOM*/
+
+/*===================
+ *  LV_OBJ SETTINGS
+ *==================*/
+
+/*Declare the type of the user data of object (can be e.g. `void *`, `int`, 
`struct`)*/
+typedef void * lv_obj_user_data_t;
+
+/*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/
+#define LV_USE_OBJ_REALIGN          1
+
+/* Enable to make the object clickable on a larger area.
+ * LV_EXT_CLICK_AREA_OFF or 0: Disable this feature
+ * LV_EXT_CLICK_AREA_TINY: The extra area can be adjusted horizontally and 
vertically (0..255 px)
+ * LV_EXT_CLICK_AREA_FULL: The extra area can be adjusted in all 4 directions 
(-32k..+32k px)
+ */
+#define LV_USE_EXT_CLICK_AREA  LV_EXT_CLICK_AREA_OFF
+
+/*==================
+ *  LV OBJ X USAGE
+ *================*/
+/*
+ * Documentation of the object types: https://docs.littlevgl.com/#Object-types
+ */
+
+/*Arc (dependencies: -)*/
+#define LV_USE_ARC      1
+
+/*Bar (dependencies: -)*/
+#define LV_USE_BAR      1
+
+/*Button (dependencies: lv_cont*/
+#define LV_USE_BTN      1
+#if LV_USE_BTN != 0
+/*Enable button-state animations - draw a circle on click (dependencies: 
LV_USE_ANIMATION)*/
+#  define LV_BTN_INK_EFFECT   0
+#endif
+
+/*Button matrix (dependencies: -)*/
+#define LV_USE_BTNM     1
+
+/*Calendar (dependencies: -)*/
+#define LV_USE_CALENDAR 1
+
+/*Canvas (dependencies: lv_img)*/
+#define LV_USE_CANVAS   1
+
+/*Check box (dependencies: lv_btn, lv_label)*/
+#define LV_USE_CB       1
+
+/*Chart (dependencies: -)*/
+#define LV_USE_CHART    1
+#if LV_USE_CHART
+#  define LV_CHART_AXIS_TICK_LABEL_MAX_LEN    20
+#endif
+
+/*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
+/*Open and close default animation time [ms] (0: no animation)*/
+#  define LV_DDLIST_DEF_ANIM_TIME     200
+#endif
+
+/*Gauge (dependencies:lv_bar, lv_lmeter)*/
+#define LV_USE_GAUGE    1
+
+/*Image (dependencies: lv_label*/
+#define LV_USE_IMG      1
+
+/*Image Button (dependencies: lv_btn*/
+#define LV_USE_IMGBTN   1
+#if LV_USE_IMGBTN
+/*1: The imgbtn requires left, mid and right parts and the width can be set 
freely*/
+#  define LV_IMGBTN_TILED 0
+#endif
+
+/*Keyboard (dependencies: lv_btnm)*/
+#define LV_USE_KB       1
+
+/*Label (dependencies: -*/
+#define LV_USE_LABEL    1
+#if LV_USE_LABEL != 0
+/*Hor, or ver. scroll speed [px/sec] in 'LV_LABEL_LONG_ROLL/ROLL_CIRC' mode*/
+#  define LV_LABEL_DEF_SCROLL_SPEED       25
+
+/* Waiting period at beginning/end of animation cycle */
+#  define LV_LABEL_WAIT_CHAR_COUNT        3
+
+/*Enable selecting text of the label */
+#  define LV_LABEL_TEXT_SEL               0
+
+/*Store extra some info in labels (12 bytes) to speed up drawing of very long 
texts*/
+#  define LV_LABEL_LONG_TXT_HINT          0
+#endif
+
+/*LED (dependencies: -)*/
+#define LV_USE_LED      1
+
+/*Line (dependencies: -*/
+#define LV_USE_LINE     1
+
+/*List (dependencies: lv_page, lv_btn, lv_label, (lv_img optionally for icons 
))*/
+#define LV_USE_LIST     1
+#if LV_USE_LIST != 0
+/*Default animation time of focusing to a list element [ms] (0: no animation)  
*/
+#  define LV_LIST_DEF_ANIM_TIME  100
+#endif
+
+/*Line meter (dependencies: *;)*/
+#define LV_USE_LMETER   1
+
+/*Message box (dependencies: lv_rect, lv_btnm, lv_label)*/
+#define LV_USE_MBOX     1
+
+/*Page (dependencies: lv_cont)*/
+#define LV_USE_PAGE     1
+#if LV_USE_PAGE != 0
+/*Focus default animation time [ms] (0: no animation)*/
+#  define LV_PAGE_DEF_ANIM_TIME     400
+#endif
+
+/*Preload (dependencies: lv_arc, lv_anim)*/
+#define LV_USE_PRELOAD      1
+#if LV_USE_PRELOAD != 0
+#  define LV_PRELOAD_DEF_ARC_LENGTH   60      /*[deg]*/
+#  define LV_PRELOAD_DEF_SPIN_TIME    1000    /*[ms]*/
+#  define LV_PRELOAD_DEF_ANIM         LV_PRELOAD_TYPE_SPINNING_ARC
+#endif
+
+/*Roller (dependencies: lv_ddlist)*/
+#define LV_USE_ROLLER    1
+#if LV_USE_ROLLER != 0
+/*Focus animation time [ms] (0: no animation)*/
+#  define LV_ROLLER_DEF_ANIM_TIME     200
+
+/*Number of extra "pages" when the roller is infinite*/
+#  define LV_ROLLER_INF_PAGES         7
+#endif
+
+/*Slider (dependencies: lv_bar)*/
+#define LV_USE_SLIDER    1
+
+/*Spinbox (dependencies: lv_ta)*/
+#define LV_USE_SPINBOX       1
+
+/*Switch (dependencies: lv_slider)*/
+#define LV_USE_SW       1
+
+/*Text area (dependencies: lv_label, lv_page)*/
+#define LV_USE_TA       1
+#if LV_USE_TA != 0
+#  define LV_TA_DEF_CURSOR_BLINK_TIME 400     /*ms*/
+#  define LV_TA_DEF_PWD_SHOW_TIME     1500    /*ms*/
+#endif
+
+/*Table (dependencies: lv_label)*/
+#define LV_USE_TABLE    1
+#if LV_USE_TABLE
+#  define LV_TABLE_COL_MAX    12
+#endif
+
+/*Tab (dependencies: lv_page, lv_btnm)*/
+#define LV_USE_TABVIEW      1
+#  if LV_USE_TABVIEW != 0
+/*Time of slide animation [ms] (0: no animation)*/
+#  define LV_TABVIEW_DEF_ANIM_TIME    300
+#endif
+
+/*Tileview (dependencies: lv_page) */
+#define LV_USE_TILEVIEW     1
+#if LV_USE_TILEVIEW
+/*Time of slide animation [ms] (0: no animation)*/
+#  define LV_TILEVIEW_DEF_ANIM_TIME   300
+#endif
+
+/*Window (dependencies: lv_cont, lv_btn, lv_label, lv_img, lv_page)*/
+#define LV_USE_WIN      1
+
+/*==================
+ * Non-user section
+ *==================*/
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)    /* Disable 
warnings for Visual Studio*/
+#  define _CRT_SECURE_NO_WARNINGS
+#endif
+
+/*--END OF LV_CONF_H--*/
+
+/*Be sure every define has a default value*/
+#include "lvgl/src/lv_conf_checker.h"
+
+#endif /*LV_CONF_H*/
+
+#endif /*End of "Content enable"*/
diff --git a/scriptsrcs/lvgl/lvgl.h b/scriptsrcs/lvgl/lvgl.h
new file mode 100755
index 0000000..418ffd2
--- /dev/null
+++ b/scriptsrcs/lvgl/lvgl.h
@@ -0,0 +1,97 @@
+/**
+ * @file lvgl.h
+ * Include all LittleV GL related headers
+ */
+
+#ifndef LVGL_H
+#define LVGL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      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"
+#include "src/lv_misc/lv_async.h"
+
+#include "src/lv_hal/lv_hal.h"
+
+#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"
+#include "src/lv_objx/lv_img.h"
+#include "src/lv_objx/lv_label.h"
+#include "src/lv_objx/lv_line.h"
+#include "src/lv_objx/lv_page.h"
+#include "src/lv_objx/lv_cont.h"
+#include "src/lv_objx/lv_list.h"
+#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"
+#include "src/lv_objx/lv_btnm.h"
+#include "src/lv_objx/lv_kb.h"
+#include "src/lv_objx/lv_ddlist.h"
+#include "src/lv_objx/lv_roller.h"
+#include "src/lv_objx/lv_ta.h"
+#include "src/lv_objx/lv_canvas.h"
+#include "src/lv_objx/lv_win.h"
+#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_gauge.h"
+#include "src/lv_objx/lv_lmeter.h"
+#include "src/lv_objx/lv_sw.h"
+#include "src/lv_objx/lv_kb.h"
+#include "src/lv_objx/lv_arc.h"
+#include "src/lv_objx/lv_preload.h"
+#include "src/lv_objx/lv_calendar.h"
+#include "src/lv_objx/lv_spinbox.h"
+
+#include "src/lv_draw/lv_img_cache.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*LVGL_H*/
diff --git a/scriptsrcs/lvgl/lvgl.mk b/scriptsrcs/lvgl/lvgl.mk
new file mode 100755
index 0000000..830fe11
--- /dev/null
+++ b/scriptsrcs/lvgl/lvgl.mk
@@ -0,0 +1,8 @@
+include $(LVGL_DIR)/lvgl/src/lv_core/lv_core.mk
+include $(LVGL_DIR)/lvgl/src/lv_hal/lv_hal.mk
+include $(LVGL_DIR)/lvgl/src/lv_objx/lv_objx.mk
+include $(LVGL_DIR)/lvgl/src/lv_font/lv_font.mk
+include $(LVGL_DIR)/lvgl/src/lv_misc/lv_misc.mk
+include $(LVGL_DIR)/lvgl/src/lv_themes/lv_themes.mk
+include $(LVGL_DIR)/lvgl/src/lv_draw/lv_draw.mk
+
diff --git a/scriptsrcs/lvgl/porting/lv_port_disp_template.c 
b/scriptsrcs/lvgl/porting/lv_port_disp_template.c
new file mode 100755
index 0000000..295dbe1
--- /dev/null
+++ b/scriptsrcs/lvgl/porting/lv_port_disp_template.c
@@ -0,0 +1,195 @@
+/**
+ * @file lv_port_disp_templ.c
+ *
+ */
+
+ /*Copy this file as "lv_port_disp.c" and set this value to "1" to enable 
content*/
+#if 0
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_port_disp_templ.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static void disp_init(void);
+
+static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, 
lv_color_t * color_p);
+#if LV_USE_GPU
+static void gpu_blend(lv_color_t * dest, const lv_color_t * src, uint32_t 
length, lv_opa_t opa);
+static void gpu_fill(lv_color_t * dest, uint32_t length, lv_color_t color);
+#endif
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+void lv_port_disp_init(void)
+{
+    /*-------------------------
+     * Initialize your display
+     * -----------------------*/
+    disp_init();
+
+    /*-----------------------------
+     * Create a buffer for drawing
+     *----------------------------*/
+
+    /* LittlevGL requires a buffer where it draws the objects. The buffer's 
has to be greater than 1 display row
+     *
+     * There are three buffering configurations:
+     * 1. Create ONE buffer with some rows: 
+     *      LittlevGL will draw the display's content here and writes it to 
your display
+     * 
+     * 2. Create TWO buffer with some rows: 
+     *      LittlevGL will draw the display's content to a buffer and writes 
it your display.
+     *      You should use DMA to write the buffer's content to the display.
+     *      It will enable LittlevGL to draw the next part of the screen to 
the other buffer while
+     *      the data is being sent form the first buffer. It makes rendering 
and flushing parallel.
+     * 
+     * 3. Create TWO screen-sized buffer: 
+     *      Similar to 2) but the buffer have to be screen sized. When 
LittlevGL is ready it will give the
+     *      whole frame to display. This way you only need to change the frame 
buffer's address instead of
+     *      copying the pixels.
+     * */
+
+    /* Example for 1) */
+    static lv_disp_buf_t disp_buf_1;
+    static lv_color_t buf1_1[LV_HOR_RES_MAX * 10];                      /*A 
buffer for 10 rows*/
+    lv_disp_buf_init(&disp_buf_1, buf1_1, NULL, LV_HOR_RES_MAX * 10);   
/*Initialize the display buffer*/
+
+    /* Example for 2) */
+    static lv_disp_buf_t disp_buf_2;
+    static lv_color_t buf2_1[LV_HOR_RES_MAX * 10];                        /*A 
buffer for 10 rows*/
+    static lv_color_t buf2_2[LV_HOR_RES_MAX * 10];                        /*An 
other buffer for 10 rows*/
+    lv_disp_buf_init(&disp_buf_2, buf2_1, buf2_2, LV_HOR_RES_MAX * 10);   
/*Initialize the display buffer*/
+
+    /* Example for 3) */
+    static lv_disp_buf_t disp_buf_3;
+    static lv_color_t buf3_1[LV_HOR_RES_MAX * LV_VER_RES_MAX];            /*A 
screen sized buffer*/
+    static lv_color_t buf3_2[LV_HOR_RES_MAX * LV_VER_RES_MAX];            /*An 
other screen sized buffer*/
+    lv_disp_buf_init(&disp_buf_3, buf3_1, buf3_2, LV_HOR_RES_MAX * 
LV_VER_RES_MAX);   /*Initialize the display buffer*/
+
+
+    /*-----------------------------------
+     * Register the display in LittlevGL
+     *----------------------------------*/
+
+    lv_disp_drv_t disp_drv;                         /*Descriptor of a display 
driver*/
+    lv_disp_drv_init(&disp_drv);                    /*Basic initialization*/
+
+    /*Set up the functions to access to your display*/
+
+    /*Set the resolution of the display*/
+    disp_drv.hor_res = 480;
+    disp_drv.ver_res = 320;
+
+    /*Used to copy the buffer's content to the display*/
+    disp_drv.flush_cb = disp_flush;
+
+    /*Set a display buffer*/
+    disp_drv.buffer = &disp_buf_2;
+
+#if LV_USE_GPU
+    /*Optionally add functions to access the GPU. (Only in buffered mode, 
LV_VDB_SIZE != 0)*/
+
+    /*Blend two color array using opacity*/
+    disp_drv.gpu_blend = gpu_blend;
+
+    /*Fill a memory array with a color*/
+    disp_drv.gpu_fill = gpu_fill;
+#endif
+
+    /*Finally register the driver*/
+    lv_disp_drv_register(&disp_drv);
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/* Initialize your display and the required peripherals. */
+static void disp_init(void)
+{
+    /*You code here*/
+}
+
+/* Flush the content of the internal buffer the specific area on the display
+ * You can use DMA or any hardware acceleration to do this operation in the 
background but
+ * 'lv_disp_flush_ready()' has to be called when finished. */
+static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, 
lv_color_t * color_p)
+{
+    /*The most simple case (but also the slowest) to put all pixels to the 
screen one-by-one*/
+
+    int32_t x;
+    int32_t y;
+    for(y = area->y1; y <= area->y2; y++) {
+        for(x = area->x1; x <= area->x2; x++) {
+            /* Put a pixel to the display. For example: */
+            /* put_px(x, y, *color_p)*/
+            color_p++;
+        }
+    }
+
+    /* IMPORTANT!!!
+     * Inform the graphics library that you are ready with the flushing*/
+    lv_disp_flush_ready(disp);
+}
+
+
+/*OPTIONAL: GPU INTERFACE*/
+#if LV_USE_GPU
+
+/* If your MCU has hardware accelerator (GPU) then you can use it to blend to 
memories using opacity
+ * It can be used only in buffered mode (LV_VDB_SIZE != 0 in lv_conf.h)*/
+static void gpu_blend(lv_disp_drv_t * disp_drv, lv_color_t * dest, const 
lv_color_t * src, uint32_t length, lv_opa_t opa)
+{
+    /*It's an example code which should be done by your GPU*/
+    uint32_t i;
+    for(i = 0; i < length; i++) {
+        dest[i] = lv_color_mix(dest[i], src[i], opa);
+    }
+}
+
+/* If your MCU has hardware accelerator (GPU) then you can use it to fill a 
memory with a color
+ * It can be used only in buffered mode (LV_VDB_SIZE != 0 in lv_conf.h)*/
+static void gpu_fill_cb(lv_disp_drv_t * disp_drv, lv_color_t * dest_buf, 
lv_coord_t dest_width,
+                    const lv_area_t * fill_area, lv_color_t color);
+{
+    /*It's an example code which should be done by your GPU*/
+    uint32_t x, y;
+    dest_buf += dest_width * fill_area->y1; /*Go to the first line*/
+
+    for(y = fill_area->y1; y < fill_area->y2; y++) {
+        for(x = fill_area->x1; x < fill_area->x2; x++) {
+            dest_buf[x] = color;
+        }
+        dest_buf+=dest_width;    /*Go to the next line*/
+    }
+}
+
+#endif  /*LV_USE_GPU*/
+
+#else /* Enable this file at the top */
+
+/* This dummy typedef exists purely to silence -Wpedantic. */
+typedef int keep_pedantic_happy;
+#endif
diff --git a/scriptsrcs/lvgl/porting/lv_port_disp_template.h 
b/scriptsrcs/lvgl/porting/lv_port_disp_template.h
new file mode 100755
index 0000000..eeca802
--- /dev/null
+++ b/scriptsrcs/lvgl/porting/lv_port_disp_template.h
@@ -0,0 +1,44 @@
+/**
+ * @file lv_port_disp_templ.h
+ *
+ */
+
+ /*Copy this file as "lv_port_disp.h" and set this value to "1" to enable 
content*/
+#if 0
+
+#ifndef LV_PORT_DISP_TEMPL_H
+#define LV_PORT_DISP_TEMPL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lvgl/lvgl.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_PORT_DISP_TEMPL_H*/
+
+#endif /*Disable/Enable content*/
diff --git a/scriptsrcs/lvgl/porting/lv_port_fs_template.c 
b/scriptsrcs/lvgl/porting/lv_port_fs_template.c
new file mode 100755
index 0000000..dab9460
--- /dev/null
+++ b/scriptsrcs/lvgl/porting/lv_port_fs_template.c
@@ -0,0 +1,379 @@
+/**
+ * @file lv_port_fs_templ.c
+ *
+ */
+
+ /*Copy this file as "lv_port_fs.c" and set this value to "1" to enable 
content*/
+#if 0
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_port_fs_templ.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/* Create a type to store the required data about your file.
+ * If you are using a File System library
+ * it already should have a File type.
+ * For example FatFS has `FIL`. In this case use `typedef FIL file_t`*/
+typedef struct {
+    /*Add the data you need to store about a file*/
+    uint32_t dummy1;
+    uint32_t dummy2;
+}file_t;
+
+/*Similarly to `file_t` create a type for directory reading too */
+typedef struct {
+    /*Add the data you need to store about directory reading*/
+    uint32_t dummy1;
+    uint32_t dummy2;
+}dir_t;
+
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static void fs_init(void);
+
+static lv_fs_res_t fs_open (lv_fs_drv_t * drv, void * file_p, const char * 
path, lv_fs_mode_t mode);
+static lv_fs_res_t fs_close (lv_fs_drv_t * drv, void * file_p);
+static lv_fs_res_t fs_read (lv_fs_drv_t * drv, void * file_p, void * buf, 
uint32_t btr, uint32_t * br);
+static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * 
buf, uint32_t btw, uint32_t * bw);
+static lv_fs_res_t fs_seek (lv_fs_drv_t * drv, void * file_p, uint32_t pos);
+static lv_fs_res_t fs_size (lv_fs_drv_t * drv, void * file_p, uint32_t * 
size_p);
+static lv_fs_res_t fs_tell (lv_fs_drv_t * drv, void * file_p, uint32_t * 
pos_p);
+static lv_fs_res_t fs_remove (lv_fs_drv_t * drv, const char *path);
+static lv_fs_res_t fs_trunc (lv_fs_drv_t * drv, void * file_p);
+static lv_fs_res_t fs_rename (lv_fs_drv_t * drv, const char * oldname, const 
char * newname);
+static lv_fs_res_t fs_free (lv_fs_drv_t * drv, uint32_t * total_p, uint32_t * 
free_p);
+static lv_fs_res_t fs_dir_open (lv_fs_drv_t * drv, void * rddir_p, const char 
*path);
+static lv_fs_res_t fs_dir_read (lv_fs_drv_t * drv, void * rddir_p, char *fn);
+static lv_fs_res_t fs_dir_close (lv_fs_drv_t * drv, void * rddir_p);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+void lv_port_fs_init(void)
+{
+    /*----------------------------------------------------
+     * Initialize your storage device and File System
+     * -------------------------------------------------*/
+    fs_init();
+
+    /*---------------------------------------------------
+     * Register the file system interface  in LittlevGL
+     *--------------------------------------------------*/
+
+    /* Add a simple drive to open images */
+    lv_fs_drv_t fs_drv;                         /*A driver descriptor*/
+    memset(&fs_drv, 0, sizeof(lv_fs_drv_t));    /*Initialization*/
+
+    /*Set up fields...*/
+    fs_drv.file_size = sizeof(file_t);
+    fs_drv.letter = 'P';
+    fs_drv.open = fs_open;
+    fs_drv.close = fs_close;
+    fs_drv.read = fs_read;
+    fs_drv.write = fs_write;
+    fs_drv.seek = fs_seek;
+    fs_drv.tell = fs_tell;
+    fs_drv.free = fs_free;
+    fs_drv.size = fs_size;
+    fs_drv.remove = fs_remove;
+    fs_drv.rename = fs_rename;
+    fs_drv.trunc = fs_trunc;
+
+    fs_drv.rddir_size = sizeof(dir_t);
+    fs_drv.dir_close = fs_dir_close;
+    fs_drv.dir_open = fs_dir_open;
+    fs_drv.dir_read = fs_dir_read;
+
+    lv_fs_add_drv(&fs_drv);
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/* Initialize your Storage device and File system. */
+static void fs_init(void)
+{
+    /*E.g. for FatFS initalize the SD card and FatFS itself*/
+
+    /*You code here*/
+}
+
+/**
+ * Open a file
+ * @param drv pointer to a driver where this function belongs
+ * @param file_p pointer to a file_t variable
+ * @param path path to the file beginning with the driver letter (e.g. 
S:/folder/file.txt)
+ * @param mode read: FS_MODE_RD, write: FS_MODE_WR, both: FS_MODE_RD | 
FS_MODE_WR
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_open (lv_fs_drv_t * drv, void * file_p, const char * 
path, lv_fs_mode_t mode)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    if(mode == LV_FS_MODE_WR)
+    {
+        /*Open a file for write*/
+
+        /* Add your code here*/
+    }
+    else if(mode == LV_FS_MODE_RD)
+    {
+        /*Open a file for read*/
+
+        /* Add your code here*/
+    }
+    else if(mode == (LV_FS_MODE_WR | LV_FS_MODE_RD))
+    {
+        /*Open a file for read and write*/
+
+        /* Add your code here*/
+    }
+
+    return res;
+}
+
+
+/**
+ * Close an opened file
+ * @param drv pointer to a driver where this function belongs
+ * @param file_p pointer to a file_t variable. (opened with lv_ufs_open)
+ * @return LV_FS_RES_OK: no error, the file is read
+ *         any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_close (lv_fs_drv_t * drv, void * file_p)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+
+/**
+ * Read data from an opened file
+ * @param drv pointer to a driver where this function belongs
+ * @param file_p pointer to a file_t variable.
+ * @param buf pointer to a memory block where to store the read data
+ * @param btr number of Bytes To Read
+ * @param br the real number of read bytes (Byte Read)
+ * @return LV_FS_RES_OK: no error, the file is read
+ *         any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_read (lv_fs_drv_t * drv, void * file_p, void * buf, 
uint32_t btr, uint32_t * br)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+
+/**
+ * Write into a file
+ * @param drv pointer to a driver where this function belongs
+ * @param file_p pointer to a file_t variable
+ * @param buf pointer to a buffer with the bytes to write
+ * @param btr Bytes To Write
+ * @param br the number of real written bytes (Bytes Written). NULL if unused.
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * 
buf, uint32_t btw, uint32_t * bw)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+
+/**
+ * Set the read write pointer. Also expand the file size if necessary.
+ * @param drv pointer to a driver where this function belongs
+ * @param file_p pointer to a file_t variable. (opened with lv_ufs_open )
+ * @param pos the new position of read write pointer
+ * @return LV_FS_RES_OK: no error, the file is read
+ *         any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_seek (lv_fs_drv_t * drv, void * file_p, uint32_t pos)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+
+/**
+ * Give the size of a file bytes
+ * @param drv pointer to a driver where this function belongs
+ * @param file_p pointer to a file_t variable
+ * @param size pointer to a variable to store the size
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_size (lv_fs_drv_t * drv, void * file_p, uint32_t * 
size_p)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+/**
+ * Give the position of the read write pointer
+ * @param drv pointer to a driver where this function belongs
+ * @param file_p pointer to a file_t variable.
+ * @param pos_p pointer to to store the result
+ * @return LV_FS_RES_OK: no error, the file is read
+ *         any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_tell (lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+
+/**
+ * Delete a file
+ * @param drv pointer to a driver where this function belongs
+ * @param path path of the file to delete
+ * @return  LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_remove (lv_fs_drv_t * drv, const char *path)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+
+/**
+ * Truncate the file size to the current position of the read write pointer
+ * @param drv pointer to a driver where this function belongs
+ * @param file_p pointer to an 'ufs_file_t' variable. (opened with lv_fs_open )
+ * @return LV_FS_RES_OK: no error, the file is read
+ *         any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_trunc (lv_fs_drv_t * drv, void * file_p)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+
+/**
+ * Rename a file
+ * @param drv pointer to a driver where this function belongs
+ * @param oldname path to the file
+ * @param newname path with the new name
+ * @return LV_FS_RES_OK or any error from 'fs_res_t'
+ */
+static lv_fs_res_t fs_rename (lv_fs_drv_t * drv, const char * oldname, const 
char * newname)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+
+/**
+ * Get the free and total size of a driver in kB
+ * @param drv pointer to a driver where this function belongs
+ * @param letter the driver letter
+ * @param total_p pointer to store the total size [kB]
+ * @param free_p pointer to store the free size [kB]
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_free (uint32_t * total_p, uint32_t * free_p)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+
+/**
+ * Initialize a 'fs_read_dir_t' variable for directory reading
+ * @param drv pointer to a driver where this function belongs
+ * @param rddir_p pointer to a 'fs_read_dir_t' variable
+ * @param path path to a directory
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_dir_open (lv_fs_drv_t * drv, void * rddir_p, const char 
*path)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+
+/**
+ * Read the next filename form a directory.
+ * The name of the directories will begin with '/'
+ * @param drv pointer to a driver where this function belongs
+ * @param rddir_p pointer to an initialized 'fs_read_dir_t' variable
+ * @param fn pointer to a buffer to store the filename
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_dir_read (lv_fs_drv_t * drv, void * rddir_p, char *fn)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+
+/**
+ * Close the directory reading
+ * @param drv pointer to a driver where this function belongs
+ * @param rddir_p pointer to an initialized 'fs_read_dir_t' variable
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+static lv_fs_res_t fs_dir_close (lv_fs_drv_t * drv, void * rddir_p)
+{
+    lv_fs_res_t res = LV_FS_RES_NOT_IMP;
+
+    /* Add your code here*/
+
+    return res;
+}
+
+#else /* Enable this file at the top */
+
+/* This dummy typedef exists purely to silence -Wpedantic. */
+typedef int keep_pedantic_happy;
+#endif
diff --git a/scriptsrcs/lvgl/porting/lv_port_fs_template.h 
b/scriptsrcs/lvgl/porting/lv_port_fs_template.h
new file mode 100755
index 0000000..7db06f6
--- /dev/null
+++ b/scriptsrcs/lvgl/porting/lv_port_fs_template.h
@@ -0,0 +1,44 @@
+/**
+ * @file lv_port_fs_templ.h
+ *
+ */
+
+ /*Copy this file as "lv_port_fs.h" and set this value to "1" to enable 
content*/
+#if 0
+
+#ifndef LV_PORT_FS_TEMPL_H
+#define LV_PORT_FS_TEMPL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lvgl/lvgl.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_PORT_FS_TEMPL_H*/
+
+#endif /*Disable/Enable content*/
diff --git a/scriptsrcs/lvgl/porting/lv_port_indev_template.c 
b/scriptsrcs/lvgl/porting/lv_port_indev_template.c
new file mode 100755
index 0000000..7666023
--- /dev/null
+++ b/scriptsrcs/lvgl/porting/lv_port_indev_template.c
@@ -0,0 +1,428 @@
+/**
+ * @file lv_port_indev_templ.c
+ *
+ */
+
+ /*Copy this file as "lv_port_indev.c" and set this value to "1" to enable 
content*/
+#if 0
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_port_indev_templ.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+static void touchpad_init(void);
+static bool touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data);
+static bool touchpad_is_pressed(void);
+static void touchpad_get_xy(lv_coord_t * x, lv_coord_t * y);
+
+static void mouse_init(void);
+static bool mouse_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data);
+static bool mouse_is_pressed(void);
+static void mouse_get_xy(lv_coord_t * x, lv_coord_t * y);
+
+static void keypad_init(void);
+static bool keypad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data);
+static uint32_t keypad_get_key(void);
+
+static void encoder_init(void);
+static bool encoder_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data);
+static void encoder_handler(void);
+
+static void button_init(void);
+static bool button_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data);
+static int8_t button_get_pressed_id(void);
+static bool button_is_pressed(uint8_t id);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+lv_indev_t * indev_touchpad;
+lv_indev_t * indev_mouse;
+lv_indev_t * indev_keypad;
+lv_indev_t * indev_encoder;
+lv_indev_t * indev_button;
+
+static int32_t encoder_diff;
+static lv_indev_state_t encoder_state;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+void lv_port_indev_init(void)
+{
+    /* Here you will find example implementation of input devices supported by 
LittelvGL:
+     *  - Touchpad
+     *  - Mouse (with cursor support)
+     *  - Keypad (supports GUI usage only with key)
+     *  - Encoder (supports GUI usage only with: left, right, push)
+     *  - Button (external buttons to press points on the screen)
+     *
+     *  The `..._read()` function are only examples.
+     *  You should shape them according to your hardware
+     */
+
+
+    lv_indev_drv_t indev_drv;
+
+    /*------------------
+     * Touchpad
+     * -----------------*/
+
+    /*Initialize your touchpad if you have*/
+    touchpad_init();
+
+    /*Register a touchpad input device*/
+    lv_indev_drv_init(&indev_drv);
+    indev_drv.type = LV_INDEV_TYPE_POINTER;
+    indev_drv.read_cb = touchpad_read;
+    indev_touchpad = lv_indev_drv_register(&indev_drv);
+
+    /*------------------
+     * Mouse
+     * -----------------*/
+
+    /*Initialize your touchpad if you have*/
+    mouse_init();
+
+    /*Register a mouse input device*/
+    lv_indev_drv_init(&indev_drv);
+    indev_drv.type = LV_INDEV_TYPE_POINTER;
+    indev_drv.read_cb = mouse_read;
+    indev_mouse = lv_indev_drv_register(&indev_drv);
+
+    /*Set cursor. For simplicity set a HOME symbol now.*/
+    lv_obj_t * mouse_cursor = lv_img_create(lv_disp_get_scr_act(NULL), NULL);
+    lv_img_set_src(mouse_cursor, LV_SYMBOL_HOME);
+    lv_indev_set_cursor(indev_mouse, mouse_cursor);
+
+    /*------------------
+     * Keypad
+     * -----------------*/
+
+    /*Initialize your keypad or keyboard if you have*/
+    keypad_init();
+
+    /*Register a keypad input device*/
+    lv_indev_drv_init(&indev_drv);
+    indev_drv.type = LV_INDEV_TYPE_KEYPAD;
+    indev_drv.read_cb = keypad_read;
+    indev_keypad = lv_indev_drv_register(&indev_drv);
+
+    /* Later you should create group(s) with `lv_group_t * group = 
lv_group_create()`,
+     * add objects to the group with `lv_group_add_obj(group, obj)`
+     * and assign this input device to group to navigate in it:
+     * `lv_indev_set_group(indev_keypad, group);` */
+
+    /*------------------
+     * Encoder
+     * -----------------*/
+
+    /*Initialize your encoder if you have*/
+    encoder_init();
+
+    /*Register a encoder input device*/
+    lv_indev_drv_init(&indev_drv);
+    indev_drv.type = LV_INDEV_TYPE_KEYPAD;
+    indev_drv.read_cb = encoder_read;
+    indev_encoder = lv_indev_drv_register(&indev_drv);
+
+    /* Later you should create group(s) with `lv_group_t * group = 
lv_group_create()`,
+     * add objects to the group with `lv_group_add_obj(group, obj)`
+     * and assign this input device to group to navigate in it:
+     * `lv_indev_set_group(indev_keypad, group);` */
+
+    /*------------------
+     * Button
+     * -----------------*/
+
+    /*Initialize your button if you have*/
+    button_init();
+
+    /*Register a button input device*/
+    lv_indev_drv_init(&indev_drv);
+    indev_drv.type = LV_INDEV_TYPE_BUTTON;
+    indev_drv.read_cb = button_read;
+    indev_button = lv_indev_drv_register(&indev_drv);
+
+    /*Assign buttons to points on the screen*/
+    static const lv_point_t btn_points[2] = {
+            {10, 10},   /*Button 0 -> x:10; y:10*/
+            {40, 100},  /*Button 1 -> x:40; y:100*/
+    };
+    lv_indev_set_button_points(indev_button, btn_points);
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+
+
+/*------------------
+ * Touchpad
+ * -----------------*/
+
+/*Initialize your touchpad*/
+static void touchpad_init(void)
+{
+    /*Your code comes here*/
+}
+
+/* Will be called by the library to read the touchpad */
+static bool touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
+{
+    static lv_coord_t last_x = 0;
+    static lv_coord_t last_y = 0;
+
+    /*Save the pressed coordinates and the state*/
+    if(touchpad_is_pressed()) {
+        touchpad_get_xy(&last_x, &last_y);
+        data->state = LV_INDEV_STATE_PR;
+    } else {
+        data->state = LV_INDEV_STATE_REL;
+    }
+
+    /*Set the last pressed coordinates*/
+    data->point.x = last_x;
+    data->point.y = last_y;
+
+    /*Return `false` because we are not buffering and no more data to read*/
+    return false;
+}
+
+/*Return true is the touchpad is pressed*/
+static bool touchpad_is_pressed(void)
+{
+    /*Your code comes here*/
+
+    return false;
+}
+
+/*Get the x and y coordinates if the touchpad is pressed*/
+static void touchpad_get_xy(lv_coord_t * x, lv_coord_t * y)
+{
+    /*Your code comes here*/
+
+    (*x) = 0;
+    (*y) = 0;
+}
+
+
+/*------------------
+ * Mouse
+ * -----------------*/
+
+/* Initialize your mouse */
+static void mouse_init(void)
+{
+    /*Your code comes here*/
+}
+
+/* Will be called by the library to read the mouse */
+static bool mouse_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
+{
+    /*Get the current x and y coordinates*/
+    mouse_get_xy(&data->point.x, &data->point.y);
+
+    /*Get whether the mouse button is pressed or released*/
+    if(mouse_is_pressed()) {
+        data->state = LV_INDEV_STATE_PR;
+    } else {
+        data->state = LV_INDEV_STATE_REL;
+    }
+
+    /*Return `false` because we are not buffering and no more data to read*/
+    return false;
+}
+
+/*Return true is the mouse button is pressed*/
+static bool mouse_is_pressed(void)
+{
+    /*Your code comes here*/
+
+    return false;
+}
+
+/*Get the x and y coordinates if the mouse is pressed*/
+static void mouse_get_xy(lv_coord_t * x, lv_coord_t * y)
+{
+    /*Your code comes here*/
+
+    (*x) = 0;
+    (*y) = 0;
+}
+
+/*------------------
+ * Keypad
+ * -----------------*/
+
+/* Initialize your keypad */
+static void keypad_init(void)
+{
+    /*Your code comes here*/
+}
+
+/* Will be called by the library to read the mouse */
+static bool keypad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
+{
+    static uint32_t last_key = 0;
+
+    /*Get the current x and y coordinates*/
+    mouse_get_xy(&data->point.x, &data->point.y);
+
+    /*Get whether the a key is pressed and save the pressed key*/
+    uint32_t act_key = keypad_get_key();
+    if(act_key != 0) {
+        data->state = LV_INDEV_STATE_PR;
+
+        /*Translate the keys to LittlevGL control characters according to your 
key definitions*/
+        switch(act_key) {
+        case 1:
+            act_key = LV_KEY_NEXT;
+            break;
+        case 2:
+            act_key = LV_KEY_PREV;
+            break;
+        case 3:
+            act_key = LV_KEY_LEFT;
+            break;
+        case 4:
+            act_key = LV_KEY_RIGHT;
+            break;
+        case 5:
+            act_key = LV_KEY_ENTER;
+            break;
+        }
+
+        last_key = act_key;
+    } else {
+        data->state = LV_INDEV_STATE_REL;
+    }
+
+    data->key = last_key;
+
+    /*Return `false` because we are not buffering and no more data to read*/
+    return false;
+}
+
+/*Get the currently being pressed key.  0 if no key is pressed*/
+static uint32_t keypad_get_key(void)
+{
+    /*Your code comes here*/
+
+    return 0;
+}
+
+/*------------------
+ * Encoder
+ * -----------------*/
+
+/* Initialize your keypad */
+static void encoder_init(void)
+{
+    /*Your code comes here*/
+}
+
+/* Will be called by the library to read the encoder */
+static bool encoder_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
+{
+
+    data->enc_diff = encoder_diff;
+    data->state = encoder_state;
+
+    /*Return `false` because we are not buffering and no more data to read*/
+    return false;
+}
+
+/*Call this function in an interrupt to process encoder events (turn, press)*/
+static void encoder_handler(void)
+{
+    /*Your code comes here*/
+
+    encoder_diff += 0;
+    encoder_state = LV_INDEV_STATE_REL;
+}
+
+
+/*------------------
+ * Button
+ * -----------------*/
+
+/* Initialize your buttons */
+static void button_init(void)
+{
+    /*Your code comes here*/
+}
+
+/* Will be called by the library to read the button */
+static bool button_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
+{
+
+    static uint8_t last_btn = 0;
+
+    /*Get the pressed button's ID*/
+    int8_t btn_act = button_get_pressed_id();
+
+    if(btn_act >= 0) {
+        data->state = LV_INDEV_STATE_PR;
+        last_btn = btn_act;
+    } else {
+        data->state = LV_INDEV_STATE_REL;
+    }
+
+    /*Save the last pressed button's ID*/
+    data->btn_id = last_btn;
+
+    /*Return `false` because we are not buffering and no more data to read*/
+    return false;
+}
+
+/*Get ID  (0, 1, 2 ..) of the pressed button*/
+static int8_t button_get_pressed_id(void)
+{
+    uint8_t i;
+
+    /*Check to buttons see which is being pressed (assume there are 2 
buttons)*/
+    for(i = 0; i < 2; i++) {
+        /*Return the pressed button's ID*/
+        if(button_is_pressed(i)) {
+            return i;
+        }
+    }
+
+    /*No button pressed*/
+    return -1;
+}
+
+/*Test if `id` button is pressed or not*/
+static bool button_is_pressed(uint8_t id)
+{
+
+    /*Your code comes here*/
+
+    return false;
+}
+
+#else /* Enable this file at the top */
+
+/* This dummy typedef exists purely to silence -Wpedantic. */
+typedef int keep_pedantic_happy;
+#endif
diff --git a/scriptsrcs/lvgl/porting/lv_port_indev_template.h 
b/scriptsrcs/lvgl/porting/lv_port_indev_template.h
new file mode 100755
index 0000000..ca0274e
--- /dev/null
+++ b/scriptsrcs/lvgl/porting/lv_port_indev_template.h
@@ -0,0 +1,45 @@
+
+/**
+ * @file lv_port_indev_templ.h
+ *
+ */
+
+ /*Copy this file as "lv_port_indev.h" and set this value to "1" to enable 
content*/
+#if 0
+
+#ifndef LV_PORT_INDEV_TEMPL_H
+#define LV_PORT_INDEV_TEMPL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lvgl/lvgl.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_PORT_INDEV_TEMPL_H*/
+
+#endif /*Disable/Enable content*/
diff --git a/scriptsrcs/lvgl/scripts/Doxyfile b/scriptsrcs/lvgl/scripts/Doxyfile
new file mode 100755
index 0000000..2f93286
--- /dev/null
+++ b/scriptsrcs/lvgl/scripts/Doxyfile
@@ -0,0 +1,2455 @@
+# Doxyfile 1.8.13
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all 
text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See 
http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME           = "LittlevGL"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER         =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = ../docs/api_doc
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format 
and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, 
where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, 
Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, 
Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES        = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file 
list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name 
of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular 
Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits 
the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a 
new
+# page for each member. If set to NO, the documentation of a member will be 
part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES                =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, 
and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is 
fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. 
For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all 
comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 0.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS   = 0
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set 
this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and 
collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public 
instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will 
make
+# doxygen to replace the get and set methods by a property in the 
documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# If one adds a struct or class to a group and this option is enabled, then 
also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and 
unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and 
unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML 
and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically 
be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can 
be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too 
small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid 
range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or 
internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface 
are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name 
of
+# the file that contains the anonymous namespace. By default anonymous 
namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS          = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, 
the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp 
brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in 
the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting 
brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list 
will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match 
between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the 
todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the 
test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in 
the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
This
+# will remove the Files entry from the Quick Index and from the Folder Tree 
View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically 
from
+# the version control system). Doxygen will invoke the program by executing 
(via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the 
file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the 
LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files 
containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in 
the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS               = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this 
flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings 
for
+# potential errors in the documentation, such as not documenting some 
parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions 
that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop 
when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR          = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
doxygen
+# can produce. The string should contain the $file, $line, and $text tags, 
which
+# will be replaced by the file and line number from which the warning 
originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT            = "WARNING: $file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT                  = ../src
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
+
+FILE_PATTERNS          = *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT 
tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so 
to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so 
to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS       = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude 
commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are 
added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: 
pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to 
YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ 
and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented 
function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they 
will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as 
prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS       = YES
+
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# generated with the -Duse-libclang=ON option for CMake.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with 
command
+# line options that you would normally use when invoking the compiler. Note 
that
+# the include paths will already be set by doxygen for the files and 
directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX     = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be 
ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front 
of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file 
for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used 
(e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a 
description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for 
each
+# generated HTML page. If the tag is left blank doxygen will generate a 
standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the 
last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that 
the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 
represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated 
HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated 
development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset 
in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it 
at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET        = NO
+
+# This tag determines the name of the docset feed. A documentation feed 
provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help 
Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP      = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE               =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION           =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI           = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING     =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / 
Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / 
Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files 
needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at 
top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the 
navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to 
YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one 
can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically 
has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW      = YES
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 
that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from 
appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH         = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files 
in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the 
path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax 
site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to 
cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. 
There
+# are two flavors of web server based searching depending on the 
EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the 
indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain 
the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If 
a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front 
of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 
x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified 
just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the 
first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and 
what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           =
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the 
last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
running
+# if errors occur, instead of asking the user for help. This option is also 
used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE        = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES     = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other 
RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front 
of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE    =
+
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source 
code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front 
of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the 
number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION          = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but 
without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML           = YES
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front 
of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT             = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook 
files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be 
put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will 
significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl 
module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and 
DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be 
nicely
+# formatted so it can be parsed by a human reader. This is useful if you want 
to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING   = NO
+
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED 
and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED             =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the 
PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor 
will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format 
of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the 
use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS        = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class 
diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag 
to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary 
resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: YES.
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 
allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect 
implementation
+# dependencies (inheritance, containment, and class references variables) of 
the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set 
to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH          = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file 
showing
+# the direct and indirect include dependencies of the file with other 
documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can 
be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
+# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
+# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS           =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH      =
+
+# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
+# configuration file for plantuml.
+
+PLANTUML_CFG_FILE      =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH  =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of 
direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 
1
+# or 2 may greatly reduce the computation time needed for large code bases. 
Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate 
dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP            = YES
diff --git 
a/scriptsrcs/lvgl/scripts/built_in_font/FontAwesome5-Solid+Brands+Regular.woff 
b/scriptsrcs/lvgl/scripts/built_in_font/FontAwesome5-Solid+Brands+Regular.woff
new file mode 100755
index 
0000000000000000000000000000000000000000..791b4101398bdd5b8ff606d2628c38a0876727eb
GIT binary patch
literal 353228
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

literal 0
HcmV?d00001

diff --git a/scriptsrcs/lvgl/scripts/built_in_font/Roboto-Regular.woff 
b/scriptsrcs/lvgl/scripts/built_in_font/Roboto-Regular.woff
new file mode 100755
index 
0000000000000000000000000000000000000000..f823258a4e6e66ff781f4446303823f36201a2eb
GIT binary patch
literal 61736
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

literal 0
HcmV?d00001

diff --git a/scriptsrcs/lvgl/scripts/built_in_font/built_in_font_gen.py 
b/scriptsrcs/lvgl/scripts/built_in_font/built_in_font_gen.py
new file mode 100755
index 0000000..db8e88c
--- /dev/null
+++ b/scriptsrcs/lvgl/scripts/built_in_font/built_in_font_gen.py
@@ -0,0 +1,47 @@
+import argparse
+from argparse import RawTextHelpFormatter
+import os
+import sys
+
+parser = argparse.ArgumentParser(description="""Create fonts for LittelvGL 
including the built-in symbols. lv_font_conv needs to be installed. See 
https://github.com/littlevgl/lv_font_conv
+Example: python built_in_font_gen.py --size 16 -o lv_font_roboto_16.c --bpp 4 
-r 0x20-0x7F""", formatter_class=RawTextHelpFormatter)
+parser.add_argument('-s', '--size', 
+                                       type=int, 
+                                       metavar = 'px', 
+                                       nargs='?', 
+                                       help='Size of the font in px')
+parser.add_argument('--bpp', 
+                                       type=int, 
+                                       metavar = '1,2,4', 
+                                       nargs='?', 
+                                       help='Bit per pixel')
+parser.add_argument('-r', '--range', 
+                                       nargs='+', 
+                                       metavar = 'start-end', 
+                                       default='0x20-0x7F', 
+                                       help='Ranges and/or characters to 
include. Default is 0x20-7F (ASCII). E.g. -r 0x20-0x7F, 0x200, 324')
+parser.add_argument('--font', 
+                                       metavar = 'file', 
+                                       nargs='?', 
+                                       default='Roboto-Regular.woff', 
+                                       help='A TTF or WOFF file')
+parser.add_argument('-o', '--output', 
+                                       nargs='?', 
+                                       metavar='file', 
+                                       help='Output file name. E.g. 
my_font_20.c')
+parser.add_argument('--compressed', action='store_true',
+                    help='Compress the bitmaps')
+                    
+args = parser.parse_args()
+
+if args.compressed == False:
+       compr = "--no-compress --no-prefilter"
+else:
+       compr = ""
+
+#Built in symbols
+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 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/scriptsrcs/lvgl/scripts/clang-formatter.sh 
b/scriptsrcs/lvgl/scripts/clang-formatter.sh
new file mode 100755
index 0000000..d831917
--- /dev/null
+++ b/scriptsrcs/lvgl/scripts/clang-formatter.sh
@@ -0,0 +1,13 @@
+clang-format-7 -style=file ../src/lv_core/*.c -i
+clang-format-7 -style=file ../src/lv_draw/*.c -i
+clang-format-7 -style=file ../src/lv_hal/*.c -i
+clang-format-7 -style=file ../src/lv_misc/*.c -i
+clang-format-7 -style=file ../src/lv_objx/*.c -i
+clang-format-7 -style=file ../src/lv_themes/*.c -i
+
+clang-format-7 -style=file ../src/lv_core/*.h -i
+clang-format-7 -style=file ../src/lv_draw/*.h -i
+clang-format-7 -style=file ../src/lv_hal/*.h -i
+clang-format-7 -style=file ../src/lv_misc/*.h -i
+clang-format-7 -style=file ../src/lv_objx/*.h -i
+clang-format-7 -style=file ../src/lv_themes/*.h -i
diff --git a/scriptsrcs/lvgl/scripts/cppcheck_run.sh 
b/scriptsrcs/lvgl/scripts/cppcheck_run.sh
new file mode 100755
index 0000000..1db16fc
--- /dev/null
+++ b/scriptsrcs/lvgl/scripts/cppcheck_run.sh
@@ -0,0 +1,2 @@
+cppcheck --template="{severity}\t{file}:{line}\t{id}: {message}" --enable=all 
../src/ --output-file=cppcheck_res.txt --suppress=unusedFunction 
--suppress=preprocessorErrorDirective --force
+    
diff --git a/scriptsrcs/lvgl/scripts/lv_conf_checker.py 
b/scriptsrcs/lvgl/scripts/lv_conf_checker.py
new file mode 100755
index 0000000..c2171ff
--- /dev/null
+++ b/scriptsrcs/lvgl/scripts/lv_conf_checker.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python3.6
+
+'''
+Generates a checker file for lv_conf.h from lv_conf_templ.h define all the not 
defined values
+'''
+
+
+import re
+
+fin = open("../lv_conf_template.h", "r")
+fout = open("../src/lv_conf_checker.h", "w")
+
+
+fout.write(
+'''/**
+ * GENERATED FILE, DO NOT EDIT IT!
+ * @file lv_conf_checker.h
+ * Make sure all the defines of lv_conf.h have a default value
+**/
+
+#ifndef LV_CONF_CHECKER_H
+#define LV_CONF_CHECKER_H
+'''
+)
+
+started = 0
+
+for i in fin.read().splitlines():
+  if not started:
+    if '#define LV_CONF_H' in i:
+      started = 1
+      continue
+    else:
+      continue
+
+  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 {line}\n'
+      f'{i}\n'
+      '#endif\n'
+    )
+  elif re.search('^ *typedef .*;.*$', i):
+    continue   #ignore typedefs to avoide redeclaration
+  else:
+    fout.write(f'{i}\n')
+
+
+fout.write(
+'''
+#endif  /*LV_CONF_CHECKER_H*/
+'''
+)
+
+fin.close()
+fout.close()
diff --git a/scriptsrcs/lvgl/src/lv_conf_checker.h 
b/scriptsrcs/lvgl/src/lv_conf_checker.h
new file mode 100755
index 0000000..4b0d9a6
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_conf_checker.h
@@ -0,0 +1,851 @@
+/**
+ * GENERATED FILE, DO NOT EDIT IT!
+ * @file lv_conf_checker.h
+ * Make sure all the defines of lv_conf.h have a default value
+**/
+
+#ifndef LV_CONF_CHECKER_H
+#define LV_CONF_CHECKER_H
+/* clang-format off */
+
+#include <stdint.h>
+
+/*====================
+   Graphical settings
+ *====================*/
+
+/* Maximal horizontal and vertical resolution to support by the library.*/
+#ifndef LV_HOR_RES_MAX
+#define LV_HOR_RES_MAX          (480)
+#endif
+#ifndef LV_VER_RES_MAX
+#define LV_VER_RES_MAX          (320)
+#endif
+
+/* Color depth:
+ * - 1:  1 byte per pixel
+ * - 8:  RGB233
+ * - 16: RGB565
+ * - 32: ARGB8888
+ */
+#ifndef LV_COLOR_DEPTH
+#define LV_COLOR_DEPTH     16
+#endif
+
+/* Swap the 2 bytes of RGB565 color.
+ * Useful if the display has a 8 bit interface (e.g. SPI)*/
+#ifndef LV_COLOR_16_SWAP
+#define LV_COLOR_16_SWAP   0
+#endif
+
+/* 1: Enable screen transparency.
+ * Useful for OSD or other overlapping GUIs.
+ * Requires `LV_COLOR_DEPTH = 32` colors and the screen's style should be 
modified: `style.body.opa = ...`*/
+#ifndef LV_COLOR_SCREEN_TRANSP
+#define LV_COLOR_SCREEN_TRANSP    0
+#endif
+
+/*Images pixels with this color will not be drawn (with chroma keying)*/
+#ifndef LV_COLOR_TRANSP
+#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
+#endif
+
+/* Default display refresh period.
+ * Can be changed in the display driver (`lv_disp_drv_t`).*/
+#ifndef LV_DISP_DEF_REFR_PERIOD
+#define LV_DISP_DEF_REFR_PERIOD      30      /*[ms]*/
+#endif
+
+/* Dot Per Inch: used to initialize default sizes.
+ * E.g. a button with width = LV_DPI / 2 -> half inch wide
+ * (Not so important, you can adjust it to modify default sizes and spaces)*/
+#ifndef LV_DPI
+#define LV_DPI              100     /*[px]*/
+#endif
+
+/* Type of coordinates. Should be `int16_t` (or `int32_t` for extreme cases) */
+
+/*=========================
+   Memory manager settings
+ *=========================*/
+
+/* LittelvGL's internal memory manager's settings.
+ * The graphical objects and other related data are stored here. */
+
+/* 1: use custom malloc/free, 0: use the built-in `lv_mem_alloc` and 
`lv_mem_free` */
+#ifndef LV_MEM_CUSTOM
+#define LV_MEM_CUSTOM      0
+#endif
+#if LV_MEM_CUSTOM == 0
+/* Size of the memory used by `lv_mem_alloc` in bytes (>= 2kB)*/
+#ifndef LV_MEM_SIZE
+#  define LV_MEM_SIZE    (32U * 1024U)
+#endif
+
+/* Complier prefix for a big array declaration */
+#ifndef LV_MEM_ATTR
+#  define LV_MEM_ATTR
+#endif
+
+/* Set an address for the memory pool instead of allocating it as an array.
+ * Can be in external SRAM too. */
+#ifndef LV_MEM_ADR
+#  define LV_MEM_ADR          0
+#endif
+
+/* Automatically defrag. on free. Defrag. means joining the adjacent free 
cells. */
+#ifndef LV_MEM_AUTO_DEFRAG
+#  define LV_MEM_AUTO_DEFRAG  1
+#endif
+#else       /*LV_MEM_CUSTOM*/
+#ifndef LV_MEM_CUSTOM_INCLUDE
+#  define LV_MEM_CUSTOM_INCLUDE <stdlib.h>   /*Header for the dynamic memory 
function*/
+#endif
+#ifndef LV_MEM_CUSTOM_ALLOC
+#  define LV_MEM_CUSTOM_ALLOC   malloc       /*Wrapper to malloc*/
+#endif
+#ifndef LV_MEM_CUSTOM_FREE
+#  define LV_MEM_CUSTOM_FREE    free         /*Wrapper to free*/
+#endif
+#endif     /*LV_MEM_CUSTOM*/
+
+/* Garbage Collector settings
+ * Used if lvgl is binded to higher level language and the memory is managed 
by that language */
+#ifndef LV_ENABLE_GC
+#define LV_ENABLE_GC 0
+#endif
+#if LV_ENABLE_GC != 0
+#ifndef LV_GC_INCLUDE
+#  define LV_GC_INCLUDE "gc.h"                           /*Include Garbage 
Collector related things*/
+#endif
+#ifndef LV_MEM_CUSTOM_REALLOC
+#  define LV_MEM_CUSTOM_REALLOC   your_realloc           /*Wrapper to realloc*/
+#endif
+#ifndef LV_MEM_CUSTOM_GET_SIZE
+#  define LV_MEM_CUSTOM_GET_SIZE  your_mem_get_size      /*Wrapper to 
lv_mem_get_size*/
+#endif
+#endif /* LV_ENABLE_GC */
+
+/*=======================
+   Input device settings
+ *=======================*/
+
+/* Input device default settings.
+ * Can be changed in the Input device driver (`lv_indev_drv_t`)*/
+
+/* Input device read period in milliseconds */
+#ifndef LV_INDEV_DEF_READ_PERIOD
+#define LV_INDEV_DEF_READ_PERIOD          30
+#endif
+
+/* Drag threshold in pixels */
+#ifndef LV_INDEV_DEF_DRAG_LIMIT
+#define LV_INDEV_DEF_DRAG_LIMIT           10
+#endif
+
+/* Drag throw slow-down in [%]. Greater value -> faster slow-down */
+#ifndef LV_INDEV_DEF_DRAG_THROW
+#define LV_INDEV_DEF_DRAG_THROW           20
+#endif
+
+/* Long press time in milliseconds.
+ * Time to send `LV_EVENT_LONG_PRESSSED`) */
+#ifndef LV_INDEV_DEF_LONG_PRESS_TIME
+#define LV_INDEV_DEF_LONG_PRESS_TIME      400
+#endif
+
+/* Repeated trigger period in long press [ms]
+ * Time between `LV_EVENT_LONG_PRESSED_REPEAT */
+#ifndef LV_INDEV_DEF_LONG_PRESS_REP_TIME
+#define LV_INDEV_DEF_LONG_PRESS_REP_TIME  100
+#endif
+
+/*==================
+ * Feature usage
+ *==================*/
+
+/*1: Enable the Animations */
+#ifndef LV_USE_ANIMATION
+#define LV_USE_ANIMATION        1
+#endif
+#if LV_USE_ANIMATION
+
+/*Declare the type of the user data of animations (can be e.g. `void *`, 
`int`, `struct`)*/
+
+#endif
+
+/* 1: Enable shadow drawing*/
+#ifndef LV_USE_SHADOW
+#define LV_USE_SHADOW           1
+#endif
+
+/* 1: Enable object groups (for keyboard/encoder navigation) */
+#ifndef LV_USE_GROUP
+#define LV_USE_GROUP            1
+#endif
+#if LV_USE_GROUP
+#endif  /*LV_USE_GROUP*/
+
+/* 1: Enable GPU interface*/
+#ifndef LV_USE_GPU
+#define LV_USE_GPU              1
+#endif
+
+/* 1: Enable file system (might be required for images */
+#ifndef LV_USE_FILESYSTEM
+#define LV_USE_FILESYSTEM       1
+#endif
+#if LV_USE_FILESYSTEM
+/*Declare the type of the user data of file system drivers (can be e.g. `void 
*`, `int`, `struct`)*/
+#endif
+
+/*1: Add a `user_data` to drivers and objects*/
+#ifndef LV_USE_USER_DATA
+#define LV_USE_USER_DATA        0
+#endif
+
+/*========================
+ * Image decoder and cache
+ *========================*/
+
+/* 1: Enable indexed (palette) images */
+#ifndef LV_IMG_CF_INDEXED
+#define LV_IMG_CF_INDEXED       1
+#endif
+
+/* 1: Enable alpha indexed images */
+#ifndef LV_IMG_CF_ALPHA
+#define LV_IMG_CF_ALPHA         1
+#endif
+
+/* Default image cache size. Image caching keeps the images opened.
+ * If only the built-in image formats are used there is no real advantage of 
caching.
+ * (I.e. no new image decoder is added)
+ * With complex image decoders (e.g. PNG or JPG) caching can save the 
continuous open/decode of images.
+ * However the opened images might consume additional RAM.
+ * LV_IMG_CACHE_DEF_SIZE must be >= 1 */
+#ifndef LV_IMG_CACHE_DEF_SIZE
+#define LV_IMG_CACHE_DEF_SIZE       1
+#endif
+
+/*Declare the type of the user data of image decoder (can be e.g. `void *`, 
`int`, `struct`)*/
+
+/*=====================
+ *  Compiler settings
+ *====================*/
+/* Define a custom attribute to `lv_tick_inc` function */
+#ifndef LV_ATTRIBUTE_TICK_INC
+#define LV_ATTRIBUTE_TICK_INC
+#endif
+
+/* Define a custom attribute to `lv_task_handler` function */
+#ifndef LV_ATTRIBUTE_TASK_HANDLER
+#define LV_ATTRIBUTE_TASK_HANDLER
+#endif
+
+/* With size optimization (-Os) the compiler might not align data to
+ * 4 or 8 byte boundary. This alignment will be explicitly applied where 
needed.
+ * E.g. __attribute__((aligned(4))) */
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+/* Attribute to mark large constant arrays for example
+ * font's bitmaps */
+#ifndef LV_ATTRIBUTE_LARGE_CONST
+#define LV_ATTRIBUTE_LARGE_CONST
+#endif
+
+/* Export integer constant to binding.
+ * This macro is used with constants in the form of LV_<CONST> 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
+ *==================*/
+
+/* 1: use a custom tick source.
+ * It removes the need to manually update the tick with `lv_tick_inc`) */
+#ifndef LV_TICK_CUSTOM
+#define LV_TICK_CUSTOM     0
+#endif
+#if LV_TICK_CUSTOM == 1
+#ifndef LV_TICK_CUSTOM_INCLUDE
+#define LV_TICK_CUSTOM_INCLUDE  "something.h"       /*Header for the sys time 
function*/
+#endif
+#ifndef LV_TICK_CUSTOM_SYS_TIME_EXPR
+#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis())     /*Expression evaluating to 
current systime in ms*/
+#endif
+#endif   /*LV_TICK_CUSTOM*/
+
+
+/*================
+ * Log settings
+ *===============*/
+
+/*1: Enable the log module*/
+#ifndef LV_USE_LOG
+#define LV_USE_LOG      0
+#endif
+#if LV_USE_LOG
+/* How important log should be added:
+ * LV_LOG_LEVEL_TRACE       A lot of logs to give detailed information
+ * LV_LOG_LEVEL_INFO        Log important events
+ * LV_LOG_LEVEL_WARN        Log if something unwanted happened but didn't 
cause a problem
+ * LV_LOG_LEVEL_ERROR       Only critical issue, when the system may fail
+ * LV_LOG_LEVEL_NONE        Do not log anything
+ */
+#ifndef LV_LOG_LEVEL
+#  define LV_LOG_LEVEL    LV_LOG_LEVEL_WARN
+#endif
+
+/* 1: Print the log with 'printf';
+ * 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)  <my_assert_code>
+ */
+#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
+ *================*/
+#ifndef LV_THEME_LIVE_UPDATE
+#define LV_THEME_LIVE_UPDATE    0   /*1: Allow theme switching at run time. 
Uses 8..10 kB of RAM*/
+#endif
+
+#ifndef LV_USE_THEME_TEMPL
+#define LV_USE_THEME_TEMPL      0   /*Just for test*/
+#endif
+#ifndef LV_USE_THEME_DEFAULT
+#define LV_USE_THEME_DEFAULT    0   /*Built mainly from the built-in styles. 
Consumes very few RAM*/
+#endif
+#ifndef LV_USE_THEME_ALIEN
+#define LV_USE_THEME_ALIEN      0   /*Dark futuristic theme*/
+#endif
+#ifndef LV_USE_THEME_NIGHT
+#define LV_USE_THEME_NIGHT      0   /*Dark elegant theme*/
+#endif
+#ifndef LV_USE_THEME_MONO
+#define LV_USE_THEME_MONO       0   /*Mono color theme for monochrome 
displays*/
+#endif
+#ifndef LV_USE_THEME_MATERIAL
+#define LV_USE_THEME_MATERIAL   0   /*Flat theme with bold colors and light 
shadows*/
+#endif
+#ifndef LV_USE_THEME_ZEN
+#define LV_USE_THEME_ZEN        0   /*Peaceful, mainly light theme */
+#endif
+#ifndef LV_USE_THEME_NEMO
+#define LV_USE_THEME_NEMO       0   /*Water-like theme based on the movie 
"Finding Nemo"*/
+#endif
+
+/*==================
+ *    FONT USAGE
+ *===================*/
+
+/* The built-in fonts contains the ASCII range and some Symbols with  4 
bit-per-pixel.
+ * The symbols are available via `LV_SYMBOL_...` defines
+ * More info about fonts: https://docs.littlevgl.com/#Fonts
+ * To create a new font go to: https://littlevgl.com/ttf-font-to-c-array
+ */
+
+/* Robot fonts with bpp = 4
+ * https://fonts.google.com/specimen/Roboto  */
+#ifndef LV_FONT_ROBOTO_12
+#define LV_FONT_ROBOTO_12    0
+#endif
+#ifndef LV_FONT_ROBOTO_16
+#define LV_FONT_ROBOTO_16    1
+#endif
+#ifndef LV_FONT_ROBOTO_22
+#define LV_FONT_ROBOTO_22    0
+#endif
+#ifndef LV_FONT_ROBOTO_28
+#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
+#define LV_FONT_UNSCII_8     0
+#endif
+
+/* Optionally declare your custom fonts here.
+ * You can use these fonts as default font too
+ * and they will be available globally. E.g.
+ * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \
+ *                                LV_FONT_DECLARE(my_font_2)
+ */
+#ifndef LV_FONT_CUSTOM_DECLARE
+#define LV_FONT_CUSTOM_DECLARE
+#endif
+
+/*Always set a default font from the built-in fonts*/
+#ifndef LV_FONT_DEFAULT
+#define LV_FONT_DEFAULT        &lv_font_roboto_16
+#endif
+
+/* Enable it if you have fonts with a lot of characters.
+ * The limit depends on the font size, font face and bpp
+ * but with > 10,000 characters if you see issues probably you need to enable 
it.*/
+#ifndef LV_FONT_FMT_TXT_LARGE
+#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`)*/
+
+/*=================
+ *  Text settings
+ *=================*/
+
+/* Select a character encoding for strings.
+ * Your IDE or editor should have the same character encoding
+ * - LV_TXT_ENC_UTF8
+ * - LV_TXT_ENC_ASCII
+ * */
+#ifndef LV_TXT_ENC
+#define LV_TXT_ENC LV_TXT_ENC_UTF8
+#endif
+
+ /*Can break (wrap) texts on these chars*/
+#ifndef LV_TXT_BREAK_CHARS
+#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 <stdio.h>
+#endif
+#ifndef lv_snprintf
+#  define lv_snprintf     snprintf
+#endif
+#ifndef lv_vsnprintf
+#  define lv_vsnprintf    vsnprintf
+#endif
+#endif  /*LV_SPRINTF_CUSTOM*/
+
+/*===================
+ *  LV_OBJ SETTINGS
+ *==================*/
+
+/*Declare the type of the user data of object (can be e.g. `void *`, `int`, 
`struct`)*/
+
+/*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/
+#ifndef LV_USE_OBJ_REALIGN
+#define LV_USE_OBJ_REALIGN          1
+#endif
+
+/* Enable to make the object clickable on a larger area.
+ * LV_EXT_CLICK_AREA_OFF or 0: Disable this feature
+ * LV_EXT_CLICK_AREA_TINY: The extra area can be adjusted horizontally and 
vertically (0..255 px)
+ * LV_EXT_CLICK_AREA_FULL: The extra area can be adjusted in all 4 directions 
(-32k..+32k px)
+ */
+#ifndef LV_USE_EXT_CLICK_AREA
+#define LV_USE_EXT_CLICK_AREA  LV_EXT_CLICK_AREA_OFF
+#endif
+
+/*==================
+ *  LV OBJ X USAGE
+ *================*/
+/*
+ * Documentation of the object types: https://docs.littlevgl.com/#Object-types
+ */
+
+/*Arc (dependencies: -)*/
+#ifndef LV_USE_ARC
+#define LV_USE_ARC      1
+#endif
+
+/*Bar (dependencies: -)*/
+#ifndef LV_USE_BAR
+#define LV_USE_BAR      1
+#endif
+
+/*Button (dependencies: lv_cont*/
+#ifndef LV_USE_BTN
+#define LV_USE_BTN      1
+#endif
+#if LV_USE_BTN != 0
+/*Enable button-state animations - draw a circle on click (dependencies: 
LV_USE_ANIMATION)*/
+#ifndef LV_BTN_INK_EFFECT
+#  define LV_BTN_INK_EFFECT   0
+#endif
+#endif
+
+/*Button matrix (dependencies: -)*/
+#ifndef LV_USE_BTNM
+#define LV_USE_BTNM     1
+#endif
+
+/*Calendar (dependencies: -)*/
+#ifndef LV_USE_CALENDAR
+#define LV_USE_CALENDAR 1
+#endif
+
+/*Canvas (dependencies: lv_img)*/
+#ifndef LV_USE_CANVAS
+#define LV_USE_CANVAS   1
+#endif
+
+/*Check box (dependencies: lv_btn, lv_label)*/
+#ifndef LV_USE_CB
+#define LV_USE_CB       1
+#endif
+
+/*Chart (dependencies: -)*/
+#ifndef LV_USE_CHART
+#define LV_USE_CHART    1
+#endif
+#if LV_USE_CHART
+#ifndef LV_CHART_AXIS_TICK_LABEL_MAX_LEN
+#  define LV_CHART_AXIS_TICK_LABEL_MAX_LEN    20
+#endif
+#endif
+
+/*Container (dependencies: -*/
+#ifndef LV_USE_CONT
+#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
+#endif
+#if LV_USE_DDLIST != 0
+/*Open and close default animation time [ms] (0: no animation)*/
+#ifndef LV_DDLIST_DEF_ANIM_TIME
+#  define LV_DDLIST_DEF_ANIM_TIME     200
+#endif
+#endif
+
+/*Gauge (dependencies:lv_bar, lv_lmeter)*/
+#ifndef LV_USE_GAUGE
+#define LV_USE_GAUGE    1
+#endif
+
+/*Image (dependencies: lv_label*/
+#ifndef LV_USE_IMG
+#define LV_USE_IMG      1
+#endif
+
+/*Image Button (dependencies: lv_btn*/
+#ifndef LV_USE_IMGBTN
+#define LV_USE_IMGBTN   1
+#endif
+#if LV_USE_IMGBTN
+/*1: The imgbtn requires left, mid and right parts and the width can be set 
freely*/
+#ifndef LV_IMGBTN_TILED
+#  define LV_IMGBTN_TILED 0
+#endif
+#endif
+
+/*Keyboard (dependencies: lv_btnm)*/
+#ifndef LV_USE_KB
+#define LV_USE_KB       1
+#endif
+
+/*Label (dependencies: -*/
+#ifndef LV_USE_LABEL
+#define LV_USE_LABEL    1
+#endif
+#if LV_USE_LABEL != 0
+/*Hor, or ver. scroll speed [px/sec] in 'LV_LABEL_LONG_ROLL/ROLL_CIRC' mode*/
+#ifndef LV_LABEL_DEF_SCROLL_SPEED
+#  define LV_LABEL_DEF_SCROLL_SPEED       25
+#endif
+
+/* Waiting period at beginning/end of animation cycle */
+#ifndef LV_LABEL_WAIT_CHAR_COUNT
+#  define LV_LABEL_WAIT_CHAR_COUNT        3
+#endif
+
+/*Enable selecting text of the label */
+#ifndef LV_LABEL_TEXT_SEL
+#  define LV_LABEL_TEXT_SEL               0
+#endif
+
+/*Store extra some info in labels (12 bytes) to speed up drawing of very long 
texts*/
+#ifndef LV_LABEL_LONG_TXT_HINT
+#  define LV_LABEL_LONG_TXT_HINT          0
+#endif
+#endif
+
+/*LED (dependencies: -)*/
+#ifndef LV_USE_LED
+#define LV_USE_LED      1
+#endif
+
+/*Line (dependencies: -*/
+#ifndef LV_USE_LINE
+#define LV_USE_LINE     1
+#endif
+
+/*List (dependencies: lv_page, lv_btn, lv_label, (lv_img optionally for icons 
))*/
+#ifndef LV_USE_LIST
+#define LV_USE_LIST     1
+#endif
+#if LV_USE_LIST != 0
+/*Default animation time of focusing to a list element [ms] (0: no animation)  
*/
+#ifndef LV_LIST_DEF_ANIM_TIME
+#  define LV_LIST_DEF_ANIM_TIME  100
+#endif
+#endif
+
+/*Line meter (dependencies: *;)*/
+#ifndef LV_USE_LMETER
+#define LV_USE_LMETER   1
+#endif
+
+/*Message box (dependencies: lv_rect, lv_btnm, lv_label)*/
+#ifndef LV_USE_MBOX
+#define LV_USE_MBOX     1
+#endif
+
+/*Page (dependencies: lv_cont)*/
+#ifndef LV_USE_PAGE
+#define LV_USE_PAGE     1
+#endif
+#if LV_USE_PAGE != 0
+/*Focus default animation time [ms] (0: no animation)*/
+#ifndef LV_PAGE_DEF_ANIM_TIME
+#  define LV_PAGE_DEF_ANIM_TIME     400
+#endif
+#endif
+
+/*Preload (dependencies: lv_arc, lv_anim)*/
+#ifndef LV_USE_PRELOAD
+#define LV_USE_PRELOAD      1
+#endif
+#if LV_USE_PRELOAD != 0
+#ifndef LV_PRELOAD_DEF_ARC_LENGTH
+#  define LV_PRELOAD_DEF_ARC_LENGTH   60      /*[deg]*/
+#endif
+#ifndef LV_PRELOAD_DEF_SPIN_TIME
+#  define LV_PRELOAD_DEF_SPIN_TIME    1000    /*[ms]*/
+#endif
+#ifndef LV_PRELOAD_DEF_ANIM
+#  define LV_PRELOAD_DEF_ANIM         LV_PRELOAD_TYPE_SPINNING_ARC
+#endif
+#endif
+
+/*Roller (dependencies: lv_ddlist)*/
+#ifndef LV_USE_ROLLER
+#define LV_USE_ROLLER    1
+#endif
+#if LV_USE_ROLLER != 0
+/*Focus animation time [ms] (0: no animation)*/
+#ifndef LV_ROLLER_DEF_ANIM_TIME
+#  define LV_ROLLER_DEF_ANIM_TIME     200
+#endif
+
+/*Number of extra "pages" when the roller is infinite*/
+#ifndef LV_ROLLER_INF_PAGES
+#  define LV_ROLLER_INF_PAGES         7
+#endif
+#endif
+
+/*Slider (dependencies: lv_bar)*/
+#ifndef LV_USE_SLIDER
+#define LV_USE_SLIDER    1
+#endif
+
+/*Spinbox (dependencies: lv_ta)*/
+#ifndef LV_USE_SPINBOX
+#define LV_USE_SPINBOX       1
+#endif
+
+/*Switch (dependencies: lv_slider)*/
+#ifndef LV_USE_SW
+#define LV_USE_SW       1
+#endif
+
+/*Text area (dependencies: lv_label, lv_page)*/
+#ifndef LV_USE_TA
+#define LV_USE_TA       1
+#endif
+#if LV_USE_TA != 0
+#ifndef LV_TA_DEF_CURSOR_BLINK_TIME
+#  define LV_TA_DEF_CURSOR_BLINK_TIME 400     /*ms*/
+#endif
+#ifndef LV_TA_DEF_PWD_SHOW_TIME
+#  define LV_TA_DEF_PWD_SHOW_TIME     1500    /*ms*/
+#endif
+#endif
+
+/*Table (dependencies: lv_label)*/
+#ifndef LV_USE_TABLE
+#define LV_USE_TABLE    1
+#endif
+#if LV_USE_TABLE
+#ifndef LV_TABLE_COL_MAX
+#  define LV_TABLE_COL_MAX    12
+#endif
+#endif
+
+/*Tab (dependencies: lv_page, lv_btnm)*/
+#ifndef LV_USE_TABVIEW
+#define LV_USE_TABVIEW      1
+#endif
+#  if LV_USE_TABVIEW != 0
+/*Time of slide animation [ms] (0: no animation)*/
+#ifndef LV_TABVIEW_DEF_ANIM_TIME
+#  define LV_TABVIEW_DEF_ANIM_TIME    300
+#endif
+#endif
+
+/*Tileview (dependencies: lv_page) */
+#ifndef LV_USE_TILEVIEW
+#define LV_USE_TILEVIEW     1
+#endif
+#if LV_USE_TILEVIEW
+/*Time of slide animation [ms] (0: no animation)*/
+#ifndef LV_TILEVIEW_DEF_ANIM_TIME
+#  define LV_TILEVIEW_DEF_ANIM_TIME   300
+#endif
+#endif
+
+/*Window (dependencies: lv_cont, lv_btn, lv_label, lv_img, lv_page)*/
+#ifndef LV_USE_WIN
+#define LV_USE_WIN      1
+#endif
+
+/*==================
+ * Non-user section
+ *==================*/
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)    /* Disable 
warnings for Visual Studio*/
+#ifndef _CRT_SECURE_NO_WARNINGS
+#  define _CRT_SECURE_NO_WARNINGS
+#endif
+#endif
+
+
+#endif  /*LV_CONF_CHECKER_H*/
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_core.mk 
b/scriptsrcs/lvgl/src/lv_core/lv_core.mk
new file mode 100755
index 0000000..eb1c5e0
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_core.mk
@@ -0,0 +1,12 @@
+CSRCS += lv_group.c
+CSRCS += lv_indev.c
+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
+
+CFLAGS += "-I$(LVGL_DIR)/lvgl/src/lv_core"
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_debug.c 
b/scriptsrcs/lvgl/src/lv_core/lv_debug.c
new file mode 100755
index 0000000..83071af
--- /dev/null
+++ b/scriptsrcs/lvgl/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/scriptsrcs/lvgl/src/lv_core/lv_debug.h 
b/scriptsrcs/lvgl/src/lv_core/lv_debug.h
new file mode 100755
index 0000000..a932004
--- /dev/null
+++ b/scriptsrcs/lvgl/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)       \
+{                                               \
+    if(!(expr)) {                               \
+        LV_LOG_ERROR(__func__);                 \
+        lv_debug_log_error(msg, (uint64_t)((uintptr_t)value));         \
+        while(1);                               \
+    }                                           \
+}
+#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/scriptsrcs/lvgl/src/lv_core/lv_disp.c 
b/scriptsrcs/lvgl/src/lv_core/lv_disp.c
new file mode 100755
index 0000000..bcb7382
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_disp.c
@@ -0,0 +1,178 @@
+/**
+ * @file lv_disp.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_disp.h"
+#include "../lv_misc/lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Return with a pointer to the active screen
+ * @param disp pointer to display which active screen should be get. (NULL to 
use the default
+ * screen)
+ * @return pointer to the active screen object (loaded by 'lv_scr_load()')
+ */
+lv_obj_t * lv_disp_get_scr_act(lv_disp_t * disp)
+{
+    if(!disp) disp = lv_disp_get_default();
+    if(!disp) {
+        LV_LOG_WARN("lv_scr_act: no display registered to get its top layer");
+        return NULL;
+    }
+
+    return disp->act_scr;
+}
+
+/**
+ * Make a screen active
+ * @param scr pointer to a screen
+ */
+void lv_disp_load_scr(lv_obj_t * scr)
+{
+    lv_disp_t * d = lv_obj_get_disp(scr);
+
+    d->act_scr = scr;
+
+    lv_obj_invalidate(scr);
+}
+
+/**
+ * Return with the top layer. (Same on every screen and it is above the normal 
screen layer)
+ * @param disp pointer to display which top layer should be get. (NULL to use 
the default screen)
+ * @return pointer to the top layer object  (transparent screen sized lv_obj)
+ */
+lv_obj_t * lv_disp_get_layer_top(lv_disp_t * disp)
+{
+    if(!disp) disp = lv_disp_get_default();
+    if(!disp) {
+        LV_LOG_WARN("lv_layer_top: no display registered to get its top 
layer");
+        return NULL;
+    }
+
+    return disp->top_layer;
+}
+
+/**
+ * Return with the sys. layer. (Same on every screen and it is above the 
normal screen and the top
+ * layer)
+ * @param disp pointer to display which sys. layer  should be get. (NULL to 
use the default screen)
+ * @return pointer to the sys layer object  (transparent screen sized lv_obj)
+ */
+lv_obj_t * lv_disp_get_layer_sys(lv_disp_t * disp)
+{
+    if(!disp) disp = lv_disp_get_default();
+    if(!disp) {
+        LV_LOG_WARN("lv_layer_sys: no display registered to get its top 
layer");
+        return NULL;
+    }
+
+    return disp->sys_layer;
+}
+
+/**
+ * Assign a screen to a display.
+ * @param disp pointer to a display where to assign the screen
+ * @param scr pointer to a screen object to assign
+ */
+void lv_disp_assign_screen(lv_disp_t * disp, lv_obj_t * scr)
+{
+    if(lv_obj_get_parent(scr) != NULL) {
+        LV_LOG_WARN("lv_disp_assign_screen: try to assign a non-screen 
object");
+        return;
+    }
+
+    lv_disp_t * old_disp = lv_obj_get_disp(scr);
+
+    if(old_disp == disp) return;
+
+    lv_ll_chg_list(&old_disp->scr_ll, &disp->scr_ll, scr, true);
+}
+
+/**
+ * Get a pointer to the screen refresher task to
+ * modify its parameters with `lv_task_...` functions.
+ * @param disp pointer to a display
+ * @return pointer to the display refresher task. (NULL on error)
+ */
+lv_task_t * lv_disp_get_refr_task(lv_disp_t * disp)
+{
+    if(!disp) disp = lv_disp_get_default();
+    if(!disp) {
+        LV_LOG_WARN("lv_disp_get_refr_task: no display registered");
+        return NULL;
+    }
+
+    return disp->refr_task;
+}
+
+/**
+ * Get elapsed time since last user activity on a display (e.g. click)
+ * @param disp pointer to an display (NULL to get the overall smallest 
inactivity)
+ * @return elapsed ticks (milliseconds) since the last activity
+ */
+uint32_t lv_disp_get_inactive_time(const lv_disp_t * disp)
+{
+    if(!disp) disp = lv_disp_get_default();
+    if(!disp) {
+        LV_LOG_WARN("lv_disp_get_inactive_time: no display registered");
+        return 0;
+    }
+
+    if(disp) return lv_tick_elaps(disp->last_activity_time);
+
+    lv_disp_t * d;
+    uint32_t t = UINT32_MAX;
+    d          = lv_disp_get_next(NULL);
+    while(d) {
+        t = LV_MATH_MIN(t, lv_tick_elaps(d->last_activity_time));
+        d = lv_disp_get_next(d);
+    }
+
+    return t;
+}
+
+/**
+ * Manually trigger an activity on a display
+ * @param disp pointer to an display (NULL to use the default display)
+ */
+void lv_disp_trig_activity(lv_disp_t * disp)
+{
+    if(!disp) disp = lv_disp_get_default();
+    if(!disp) {
+        LV_LOG_WARN("lv_disp_trig_activity: no display registered");
+        return;
+    }
+
+    disp->last_activity_time = lv_tick_get();
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_disp.h 
b/scriptsrcs/lvgl/src/lv_core/lv_disp.h
new file mode 100755
index 0000000..3047154
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_disp.h
@@ -0,0 +1,152 @@
+/**
+ * @file lv_disp.h
+ *
+ */
+
+#ifndef LV_DISP_H
+#define LV_DISP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "../lv_hal/lv_hal.h"
+#include "lv_obj.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Return with a pointer to the active screen
+ * @param disp pointer to display which active screen should be get. (NULL to 
use the default
+ * screen)
+ * @return pointer to the active screen object (loaded by 'lv_scr_load()')
+ */
+lv_obj_t * lv_disp_get_scr_act(lv_disp_t * disp);
+
+/**
+ * Make a screen active
+ * @param scr pointer to a screen
+ */
+void lv_disp_load_scr(lv_obj_t * scr);
+
+/**
+ * Return with the top layer. (Same on every screen and it is above the normal 
screen layer)
+ * @param disp pointer to display which top layer should be get. (NULL to use 
the default screen)
+ * @return pointer to the top layer object  (transparent screen sized lv_obj)
+ */
+lv_obj_t * lv_disp_get_layer_top(lv_disp_t * disp);
+
+/**
+ * Return with the sys. layer. (Same on every screen and it is above the 
normal screen and the top
+ * layer)
+ * @param disp pointer to display which sys. layer  should be get. (NULL to 
use the default screen)
+ * @return pointer to the sys layer object  (transparent screen sized lv_obj)
+ */
+lv_obj_t * lv_disp_get_layer_sys(lv_disp_t * disp);
+
+/**
+ * Assign a screen to a display.
+ * @param disp pointer to a display where to assign the screen
+ * @param scr pointer to a screen object to assign
+ */
+void lv_disp_assign_screen(lv_disp_t * disp, lv_obj_t * scr);
+
+/**
+ * Get a pointer to the screen refresher task to
+ * modify its parameters with `lv_task_...` functions.
+ * @param disp pointer to a display
+ * @return pointer to the display refresher task. (NULL on error)
+ */
+lv_task_t * lv_disp_get_refr_task(lv_disp_t * disp);
+
+/**
+ * Get elapsed time since last user activity on a display (e.g. click)
+ * @param disp pointer to an display (NULL to get the overall smallest 
inactivity)
+ * @return elapsed ticks (milliseconds) since the last activity
+ */
+uint32_t lv_disp_get_inactive_time(const lv_disp_t * disp);
+
+/**
+ * Manually trigger an activity on a display
+ * @param disp pointer to an display (NULL to use the default display)
+ */
+void lv_disp_trig_activity(lv_disp_t * disp);
+
+/*------------------------------------------------
+ * To improve backward compatibility
+ * Recommended only if you have one display
+ *------------------------------------------------*/
+
+/**
+ * Get the active screen of the default display
+ * @return pointer to the active screen
+ */
+static inline lv_obj_t * lv_scr_act(void)
+{
+    return lv_disp_get_scr_act(lv_disp_get_default());
+}
+
+/**
+ * Get the top layer  of the default display
+ * @return pointer to the top layer
+ */
+static inline lv_obj_t * lv_layer_top(void)
+{
+    return lv_disp_get_layer_top(lv_disp_get_default());
+}
+
+/**
+ * Get the active screen of the default display
+ * @return  pointer to the sys layer
+ */
+static inline lv_obj_t * lv_layer_sys(void)
+{
+    return lv_disp_get_layer_sys(lv_disp_get_default());
+}
+
+static inline void lv_scr_load(lv_obj_t * scr)
+{
+    lv_disp_load_scr(scr);
+}
+
+/**********************
+ *      MACROS
+ **********************/
+
+/*------------------------------------------------
+ * To improve backward compatibility
+ * Recommended only if you have one display
+ *------------------------------------------------*/
+
+#ifndef LV_HOR_RES
+/**
+ * The horizontal resolution of the currently active display.
+ */
+#define LV_HOR_RES lv_disp_get_hor_res(lv_disp_get_default())
+#endif
+
+#ifndef LV_VER_RES
+/**
+ * The vertical resolution of the currently active display.
+ */
+#define LV_VER_RES lv_disp_get_ver_res(lv_disp_get_default())
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_TEMPL_H*/
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_group.c 
b/scriptsrcs/lvgl/src/lv_core/lv_group.c
new file mode 100755
index 0000000..b26de56
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_group.c
@@ -0,0 +1,708 @@
+/**
+ * @file lv_group.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_group.h"
+#if LV_USE_GROUP != 0
+#include <stddef.h>
+#include "../lv_core/lv_debug.h"
+#include "../lv_themes/lv_theme.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 void style_mod_def(lv_group_t * group, lv_style_t * style);
+static void style_mod_edit_def(lv_group_t * group, lv_style_t * style);
+static void refresh_theme(lv_group_t * g, lv_theme_t * th);
+static void focus_next_core(lv_group_t * group, void * (*begin)(const lv_ll_t 
*),
+                            void * (*move)(const lv_ll_t *, const void *));
+static void lv_group_refocus(lv_group_t * g);
+static void obj_to_foreground(lv_obj_t * obj);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Init. the group module
+ */
+void lv_group_init(void)
+{
+    lv_ll_init(&LV_GC_ROOT(_lv_group_ll), sizeof(lv_group_t));
+}
+
+/**
+ * Create a new object group
+ * @return pointer to the new object group
+ */
+lv_group_t * lv_group_create(void)
+{
+    lv_group_t * group = lv_ll_ins_head(&LV_GC_ROOT(_lv_group_ll));
+    LV_ASSERT_MEM(group);
+    if(group == NULL) return NULL;
+    lv_ll_init(&group->obj_ll, sizeof(lv_obj_t *));
+
+    group->obj_focus      = NULL;
+    group->frozen         = 0;
+    group->focus_cb       = NULL;
+    group->click_focus    = 1;
+    group->editing        = 0;
+    group->refocus_policy = LV_GROUP_REFOCUS_POLICY_PREV;
+    group->wrap           = 1;
+
+#if LV_USE_USER_DATA
+    memset(&group->user_data, 0, sizeof(lv_group_user_data_t));
+#endif
+
+    /*Initialize style modification callbacks from current theme*/
+    refresh_theme(group, lv_theme_get_current());
+
+    return group;
+}
+
+/**
+ * Delete a group object
+ * @param group pointer to a group
+ */
+void lv_group_del(lv_group_t * group)
+{
+    /*Defocus the the currently focused object*/
+    if(group->obj_focus != NULL) {
+        (*group->obj_focus)->signal_cb(*group->obj_focus, LV_SIGNAL_DEFOCUS, 
NULL);
+        lv_obj_invalidate(*group->obj_focus);
+    }
+
+    /*Remove the objects from the group*/
+    lv_obj_t ** obj;
+    LV_LL_READ(group->obj_ll, obj)
+    {
+        (*obj)->group_p = NULL;
+    }
+
+    lv_ll_clear(&(group->obj_ll));
+    lv_ll_rem(&LV_GC_ROOT(_lv_group_ll), group);
+    lv_mem_free(group);
+}
+
+/**
+ * Add an object to a group
+ * @param group pointer to a group
+ * @param obj pointer to an object to add
+ */
+void lv_group_add_obj(lv_group_t * group, lv_obj_t * obj)
+{
+    if(group == NULL) return;
+
+    /*Do not add the object twice*/
+    lv_obj_t ** obj_i;
+    LV_LL_READ(group->obj_ll, obj_i)
+    {
+        if((*obj_i) == obj) {
+            LV_LOG_INFO("lv_group_add_obj: the object is already added to this 
group");
+            return;
+        }
+    }
+
+    /*If the object is already in a group and focused then defocus it*/
+    if(obj->group_p) {
+        if(lv_obj_is_focused(obj)) {
+            lv_group_refocus(obj->group_p);
+
+            LV_LOG_INFO("lv_group_add_obj: assign object to an other group");
+        }
+    }
+
+    obj->group_p     = group;
+    lv_obj_t ** next = lv_ll_ins_tail(&group->obj_ll);
+    LV_ASSERT_MEM(next);
+    if(next == NULL) return;
+    *next = obj;
+
+    /* If the head and the tail is equal then there is only one object in the 
linked list.
+     * In this case automatically activate it*/
+    if(lv_ll_get_head(&group->obj_ll) == next) {
+        lv_group_refocus(group);
+    }
+}
+
+/**
+ * Remove an object from its group
+ * @param obj pointer to an object to remove
+ */
+void lv_group_remove_obj(lv_obj_t * obj)
+{
+    lv_group_t * g = obj->group_p;
+    if(g == NULL) return;
+    if(g->obj_focus == NULL) return; /*Just to be sure (Not possible if there 
is at least one object in the group)*/
+
+    /*Focus on the next object*/
+    if(*g->obj_focus == obj) {
+        /*If this is the only object in the group then focus to nothing.*/
+        if(lv_ll_get_head(&g->obj_ll) == g->obj_focus && 
lv_ll_get_tail(&g->obj_ll) == g->obj_focus) {
+            (*g->obj_focus)->signal_cb(*g->obj_focus, LV_SIGNAL_DEFOCUS, NULL);
+        }
+        /*If there more objects in the group then focus to the next/prev 
object*/
+        else {
+            lv_group_refocus(g);
+        }
+    }
+
+    /* If the focuses object is still the same then it was the only object in 
the group but it will
+     * be deleted. Set the `obj_focus` to NULL to get back to the initial 
state of the group with
+     * zero objects*/
+    if(*g->obj_focus == obj) {
+        g->obj_focus = NULL;
+    }
+
+    /*Search the object and remove it from its group */
+    lv_obj_t ** i;
+    LV_LL_READ(g->obj_ll, i)
+    {
+        if(*i == obj) {
+            lv_ll_rem(&g->obj_ll, i);
+            lv_mem_free(i);
+            obj->group_p = NULL;
+            break;
+        }
+    }
+}
+
+/**
+ * Remove all objects from a group
+ * @param group pointer to a group
+ */
+void lv_group_remove_all_objs(lv_group_t * group)
+{
+    /*Defocus the the currently focused object*/
+    if(group->obj_focus != NULL) {
+        (*group->obj_focus)->signal_cb(*group->obj_focus, LV_SIGNAL_DEFOCUS, 
NULL);
+        lv_obj_invalidate(*group->obj_focus);
+        group->obj_focus = NULL;
+    }
+
+    /*Remove the objects from the group*/
+    lv_obj_t ** obj;
+    LV_LL_READ(group->obj_ll, obj)
+    {
+        (*obj)->group_p = NULL;
+    }
+
+    lv_ll_clear(&(group->obj_ll));
+}
+
+/**
+ * Focus on an object (defocus the current)
+ * @param obj pointer to an object to focus on
+ */
+void lv_group_focus_obj(lv_obj_t * obj)
+{
+    if(obj == NULL) return;
+    lv_group_t * g = obj->group_p;
+    if(g == NULL) return;
+
+    if(g->frozen != 0) return;
+
+    /*On defocus edit mode must be leaved*/
+    lv_group_set_editing(g, false);
+
+    lv_obj_t ** i;
+    LV_LL_READ(g->obj_ll, i)
+    {
+        if(*i == obj) {
+            if(g->obj_focus != NULL) {
+                (*g->obj_focus)->signal_cb(*g->obj_focus, LV_SIGNAL_DEFOCUS, 
NULL);
+                lv_res_t res = lv_event_send(*g->obj_focus, 
LV_EVENT_DEFOCUSED, NULL);
+                if(res != LV_RES_OK) return;
+                lv_obj_invalidate(*g->obj_focus);
+            }
+
+            g->obj_focus = i;
+
+            if(g->obj_focus != NULL) {
+                (*g->obj_focus)->signal_cb(*g->obj_focus, LV_SIGNAL_FOCUS, 
NULL);
+                if(g->focus_cb) g->focus_cb(g);
+                lv_res_t res = lv_event_send(*g->obj_focus, LV_EVENT_FOCUSED, 
NULL);
+                if(res != LV_RES_OK) return;
+                lv_obj_invalidate(*g->obj_focus);
+
+                /*If the object or its parent has `top == true` bring it to 
the foregorund*/
+                obj_to_foreground(*g->obj_focus);
+            }
+            break;
+        }
+    }
+}
+
+/**
+ * Focus the next object in a group (defocus the current)
+ * @param group pointer to a group
+ */
+void lv_group_focus_next(lv_group_t * group)
+{
+    focus_next_core(group, lv_ll_get_head, lv_ll_get_next);
+}
+
+/**
+ * Focus the previous object in a group (defocus the current)
+ * @param group pointer to a group
+ */
+void lv_group_focus_prev(lv_group_t * group)
+{
+    focus_next_core(group, lv_ll_get_tail, lv_ll_get_prev);
+}
+
+/**
+ * Do not let to change the focus from the current object
+ * @param group pointer to a group
+ * @param en true: freeze, false: release freezing (normal mode)
+ */
+void lv_group_focus_freeze(lv_group_t * group, bool en)
+{
+    if(en == false)
+        group->frozen = 0;
+    else
+        group->frozen = 1;
+}
+
+/**
+ * Send a control character to the focuses object of a group
+ * @param group pointer to a group
+ * @param c a character (use LV_KEY_.. to navigate)
+ * @return result of focused object in group.
+ */
+lv_res_t lv_group_send_data(lv_group_t * group, uint32_t c)
+{
+    lv_obj_t * act = lv_group_get_focused(group);
+    if(act == NULL) return LV_RES_OK;
+
+    lv_res_t res;
+
+    res = act->signal_cb(act, LV_SIGNAL_CONTROL, &c);
+    if(res != LV_RES_OK) return res;
+
+    res = lv_event_send(act, LV_EVENT_KEY, &c);
+    if(res != LV_RES_OK) return res;
+
+    return res;
+}
+
+/**
+ * Set a function for a group which will modify the object's style if it is in 
focus
+ * @param group pointer to a group
+ * @param style_mod_cb the style modifier function pointer
+ */
+void lv_group_set_style_mod_cb(lv_group_t * group, lv_group_style_mod_cb_t 
style_mod_cb)
+{
+    group->style_mod_cb = style_mod_cb;
+    if(group->obj_focus != NULL) lv_obj_invalidate(*group->obj_focus);
+}
+
+/**
+ * Set a function for a group which will modify the object's style if it is in 
focus in edit mode
+ * @param group pointer to a group
+ * @param style_mod_func the style modifier function pointer
+ */
+void lv_group_set_style_mod_edit_cb(lv_group_t * group, 
lv_group_style_mod_cb_t style_mod_edit_cb)
+{
+    group->style_mod_edit_cb = style_mod_edit_cb;
+    if(group->obj_focus != NULL) lv_obj_invalidate(*group->obj_focus);
+}
+
+/**
+ * Set a function for a group which will be called when a new object is focused
+ * @param group pointer to a group
+ * @param focus_cb the call back function or NULL if unused
+ */
+void lv_group_set_focus_cb(lv_group_t * group, lv_group_focus_cb_t focus_cb)
+{
+    group->focus_cb = focus_cb;
+}
+
+/**
+ * Manually set the current mode (edit or navigate).
+ * @param group pointer to group
+ * @param edit: true: edit mode; false: navigate mode
+ */
+void lv_group_set_editing(lv_group_t * group, bool edit)
+{
+    uint8_t en_val = edit ? 1 : 0;
+
+    if(en_val == group->editing) return; /*Do not set the same mode again*/
+
+    group->editing     = en_val;
+    lv_obj_t * focused = lv_group_get_focused(group);
+
+    if(focused) {
+        focused->signal_cb(focused, LV_SIGNAL_FOCUS, NULL); /*Focus again to 
properly leave/open edit/navigate mode*/
+        lv_res_t res = lv_event_send(*group->obj_focus, LV_EVENT_FOCUSED, 
NULL);
+        if(res != LV_RES_OK) return;
+    }
+
+    lv_obj_invalidate(focused);
+}
+
+/**
+ * Set the `click_focus` attribute. If enabled then the object will be focused 
then it is clicked.
+ * @param group pointer to group
+ * @param en: true: enable `click_focus`
+ */
+void lv_group_set_click_focus(lv_group_t * group, bool en)
+{
+    group->click_focus = en ? 1 : 0;
+}
+
+void lv_group_set_refocus_policy(lv_group_t * group, lv_group_refocus_policy_t 
policy)
+{
+    group->refocus_policy = policy & 0x01;
+}
+
+/**
+ * Set whether focus next/prev will allow wrapping from first->last or 
last->first.
+ * @param group pointer to group
+ * @param en: true: enable `wrap`
+ */
+void lv_group_set_wrap(lv_group_t * group, bool en)
+{
+    group->wrap = en ? 1 : 0;
+}
+
+/**
+ * Modify a style with the set 'style_mod' function. The input style remains 
unchanged.
+ * @param group pointer to group
+ * @param style pointer to a style to modify
+ * @return a copy of the input style but modified with the 'style_mod' function
+ */
+lv_style_t * lv_group_mod_style(lv_group_t * group, const lv_style_t * style)
+{
+    /*Load the current style. It will be modified by the callback*/
+    lv_style_copy(&group->style_tmp, style);
+
+    if(group->editing) {
+        if(group->style_mod_edit_cb) group->style_mod_edit_cb(group, 
&group->style_tmp);
+    } else {
+        if(group->style_mod_cb) group->style_mod_cb(group, &group->style_tmp);
+    }
+    return &group->style_tmp;
+}
+
+/**
+ * Get the focused object or NULL if there isn't one
+ * @param group pointer to a group
+ * @return pointer to the focused object
+ */
+lv_obj_t * lv_group_get_focused(const lv_group_t * group)
+{
+    if(!group) return NULL;
+    if(group->obj_focus == NULL) return NULL;
+
+    return *group->obj_focus;
+}
+
+#if LV_USE_USER_DATA
+/**
+ * Get a pointer to the group's user data
+ * @param group pointer to an group
+ * @return pointer to the user data
+ */
+lv_group_user_data_t * lv_group_get_user_data(lv_group_t * group)
+{
+    return &group->user_data;
+}
+#endif
+
+/**
+ * Get a the style modifier function of a group
+ * @param group pointer to a group
+ * @return pointer to the style modifier function
+ */
+lv_group_style_mod_cb_t lv_group_get_style_mod_cb(const lv_group_t * group)
+{
+    if(!group) return false;
+    return group->style_mod_cb;
+}
+
+/**
+ * Get a the style modifier function of a group in edit mode
+ * @param group pointer to a group
+ * @return pointer to the style modifier function
+ */
+lv_group_style_mod_cb_t lv_group_get_style_mod_edit_cb(const lv_group_t * 
group)
+{
+    if(!group) return false;
+    return group->style_mod_edit_cb;
+}
+
+/**
+ * Get the focus callback function of a group
+ * @param group pointer to a group
+ * @return the call back function or NULL if not set
+ */
+lv_group_focus_cb_t lv_group_get_focus_cb(const lv_group_t * group)
+{
+    if(!group) return false;
+    return group->focus_cb;
+}
+
+/**
+ * Get the current mode (edit or navigate).
+ * @param group pointer to group
+ * @return true: edit mode; false: navigate mode
+ */
+bool lv_group_get_editing(const lv_group_t * group)
+{
+    if(!group) return false;
+    return group->editing ? true : false;
+}
+
+/**
+ * Get the `click_focus` attribute.
+ * @param group pointer to group
+ * @return true: `click_focus` is enabled; false: disabled
+ */
+bool lv_group_get_click_focus(const lv_group_t * group)
+{
+    if(!group) return false;
+    return group->click_focus ? true : false;
+}
+
+/**
+ * Get whether focus next/prev will allow wrapping from first->last or 
last->first object.
+ * @param group pointer to group
+ * @param en: true: wrapping enabled; false: wrapping disabled
+ */
+bool lv_group_get_wrap(lv_group_t * group)
+{
+    if(!group) return false;
+    return group->wrap ? true : false;
+}
+
+/**
+ * Notify the group that current theme changed and style modification 
callbacks need to be
+ * refreshed.
+ * @param group pointer to group. If NULL then all groups are notified.
+ */
+void lv_group_report_style_mod(lv_group_t * group)
+{
+    lv_theme_t * th = lv_theme_get_current();
+
+    if(group != NULL) {
+        refresh_theme(group, th);
+        return;
+    }
+
+    lv_group_t * i;
+    LV_LL_READ(LV_GC_ROOT(_lv_group_ll), i)
+    {
+        refresh_theme(i, th);
+    }
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+static void lv_group_refocus(lv_group_t * g)
+{
+    /*Refocus must temporarily allow wrapping to work correctly*/
+    uint8_t temp_wrap = g->wrap;
+    g->wrap           = 1;
+
+    if(g->refocus_policy == LV_GROUP_REFOCUS_POLICY_NEXT)
+        lv_group_focus_next(g);
+    else if(g->refocus_policy == LV_GROUP_REFOCUS_POLICY_PREV)
+        lv_group_focus_prev(g);
+    /*Restore wrap property*/
+    g->wrap = temp_wrap;
+}
+
+/**
+ * Default style modifier function
+ * @param group pointer to the caller group
+ * @param style pointer to a style to modify. (Typically group.style_tmp) It 
will be OVERWRITTEN.
+ */
+static void style_mod_def(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_ORANGE;
+
+    /*If not transparent or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 20;
+
+    style->body.main_color   = lv_color_mix(style->body.main_color, 
LV_COLOR_ORANGE, LV_OPA_70);
+    style->body.grad_color   = lv_color_mix(style->body.grad_color, 
LV_COLOR_ORANGE, LV_OPA_70);
+    style->body.shadow.color = lv_color_mix(style->body.shadow.color, 
LV_COLOR_ORANGE, LV_OPA_60);
+
+    style->text.color = lv_color_mix(style->text.color, LV_COLOR_ORANGE, 
LV_OPA_70);
+
+    /*Add some recolor to the images*/
+    if(style->image.intense < LV_OPA_MIN) {
+        style->image.color   = LV_COLOR_ORANGE;
+        style->image.intense = LV_OPA_40;
+    }
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 2;
+
+#endif
+}
+
+/**
+ * Default style modifier function
+ * @param group pointer to the caller group
+ * @param style pointer to a style to modify. (Typically group.style_tmp) It 
will be OVERWRITTEN.
+ */
+static void style_mod_edit_def(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_GREEN;
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 20;
+
+    style->body.main_color   = lv_color_mix(style->body.main_color, 
LV_COLOR_GREEN, LV_OPA_70);
+    style->body.grad_color   = lv_color_mix(style->body.grad_color, 
LV_COLOR_GREEN, LV_OPA_70);
+    style->body.shadow.color = lv_color_mix(style->body.shadow.color, 
LV_COLOR_GREEN, LV_OPA_60);
+
+    style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, 
LV_OPA_70);
+
+    /*Add some recolor to the images*/
+    if(style->image.intense < LV_OPA_MIN) {
+        style->image.color   = LV_COLOR_GREEN;
+        style->image.intense = LV_OPA_40;
+    }
+
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 3;
+
+#endif
+}
+
+static void refresh_theme(lv_group_t * g, lv_theme_t * th)
+{
+    g->style_mod_cb      = style_mod_def;
+    g->style_mod_edit_cb = style_mod_edit_def;
+    if(th) {
+        if(th->group.style_mod_xcb) g->style_mod_cb = th->group.style_mod_xcb;
+        if(th->group.style_mod_edit_xcb) g->style_mod_edit_cb = 
th->group.style_mod_edit_xcb;
+    }
+}
+
+static void focus_next_core(lv_group_t * group, void * (*begin)(const lv_ll_t 
*),
+                            void * (*move)(const lv_ll_t *, const void *))
+{
+    if(group->frozen) return;
+
+    lv_obj_t ** obj_next     = group->obj_focus;
+    lv_obj_t ** obj_sentinel = NULL;
+    bool can_move            = true;
+    bool can_begin           = true;
+
+    for(;;) {
+        if(obj_next == NULL) {
+            if(group->wrap || obj_sentinel == NULL) {
+                if(!can_begin) return;
+                obj_next  = begin(&group->obj_ll);
+                can_move  = false;
+                can_begin = false;
+            } else {
+                /*Currently focused object is the last/first in the group, 
keep it that way*/
+                return;
+            }
+        }
+
+        if(obj_sentinel == NULL) {
+            obj_sentinel = obj_next;
+            if(obj_sentinel == NULL) return; /*Group is empty*/
+        }
+
+        if(can_move) {
+            obj_next = move(&group->obj_ll, obj_next);
+
+            /*Give up if we walked the entire list and haven't found another 
visible object*/
+            if(obj_next == obj_sentinel) return;
+        }
+
+        can_move = true;
+
+        if(obj_next == NULL) continue;
+
+        /*Hidden objects don't receive focus*/
+        if(!lv_obj_get_hidden(*obj_next)) break;
+    }
+
+    if(obj_next == group->obj_focus) return; /*There's only one visible object 
and it's already focused*/
+
+    if(group->obj_focus) {
+        (*group->obj_focus)->signal_cb(*group->obj_focus, LV_SIGNAL_DEFOCUS, 
NULL);
+        lv_res_t res = lv_event_send(*group->obj_focus, LV_EVENT_DEFOCUSED, 
NULL);
+        if(res != LV_RES_OK) return;
+        lv_obj_invalidate(*group->obj_focus);
+    }
+
+    group->obj_focus = obj_next;
+
+    (*group->obj_focus)->signal_cb(*group->obj_focus, LV_SIGNAL_FOCUS, NULL);
+    lv_res_t res = lv_event_send(*group->obj_focus, LV_EVENT_FOCUSED, NULL);
+    if(res != LV_RES_OK) return;
+
+    /*If the object or its parent has `top == true` bring it to the 
foregorund*/
+    obj_to_foreground(*group->obj_focus);
+
+    lv_obj_invalidate(*group->obj_focus);
+
+    if(group->focus_cb) group->focus_cb(group);
+}
+
+static void obj_to_foreground(lv_obj_t * obj)
+{
+    /*Search for 'top' attribute*/
+    lv_obj_t * i        = obj;
+    lv_obj_t * last_top = NULL;
+    while(i != NULL) {
+        if(i->top != 0) last_top = i;
+        i = lv_obj_get_parent(i);
+    }
+
+    if(last_top != NULL) {
+        /*Move the last_top object to the foreground*/
+        lv_obj_move_foreground(last_top);
+    }
+}
+
+#endif /*LV_USE_GROUP != 0*/
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_group.h 
b/scriptsrcs/lvgl/src/lv_core/lv_group.h
new file mode 100755
index 0000000..c27f769
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_group.h
@@ -0,0 +1,293 @@
+/**
+ * @file lv_group.h
+ *
+ */
+
+#ifndef LV_GROUP_H
+#define LV_GROUP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include "lv_obj.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+/*Predefined keys to control the focused object via lv_group_send(group, c)*/
+/*For compatibility in signal function define the keys regardless to 
`LV_USE_GROUP`*/
+
+enum {
+    LV_KEY_UP        = 17,  /*0x11*/
+    LV_KEY_DOWN      = 18,  /*0x12*/
+    LV_KEY_RIGHT     = 19,  /*0x13*/
+    LV_KEY_LEFT      = 20,  /*0x14*/
+    LV_KEY_ESC       = 27,  /*0x1B*/
+    LV_KEY_DEL       = 127, /*0x7F*/
+    LV_KEY_BACKSPACE = 8,   /*0x08*/
+    LV_KEY_ENTER     = 10,  /*0x0A, '\n'*/
+    LV_KEY_NEXT      = 9,   /*0x09, '\t'*/
+    LV_KEY_PREV      = 11,  /*0x0B, '*/
+    LV_KEY_HOME      = 2,   /*0x02, STX*/
+    LV_KEY_END       = 3,   /*0x03, ETX*/
+};
+typedef uint8_t lv_key_t;
+
+#if LV_USE_GROUP != 0
+/**********************
+ *      TYPEDEFS
+ **********************/
+struct _lv_group_t;
+
+typedef void (*lv_group_style_mod_cb_t)(struct _lv_group_t *, lv_style_t *);
+typedef void (*lv_group_focus_cb_t)(struct _lv_group_t *);
+
+/**
+ * Groups can be used to logically hold objects so that they can be 
individually focused.
+ * They are NOT for laying out objects on a screen (try `lv_cont` for that).
+ */
+typedef struct _lv_group_t
+{
+    lv_ll_t obj_ll;        /**< Linked list to store the objects in the group 
*/
+    lv_obj_t ** obj_focus; /**< The object in focus*/
+
+    lv_group_style_mod_cb_t style_mod_cb;      /**< A function to modifies the 
style of the focused object*/
+    lv_group_style_mod_cb_t style_mod_edit_cb; /**< A function which modifies 
the style of the edited object*/
+    lv_group_focus_cb_t focus_cb;              /**< A function to call when a 
new object is focused (optional)*/
+    lv_style_t style_tmp;                      /**< Stores the modified style 
of the focused object */
+#if LV_USE_USER_DATA
+    lv_group_user_data_t user_data;
+#endif
+
+    uint8_t frozen : 1;         /**< 1: can't focus to new object*/
+    uint8_t editing : 1;        /**< 1: Edit mode, 0: Navigate mode*/
+    uint8_t click_focus : 1;    /**< 1: If an object in a group is clicked by 
an indev then it will be
+                                   focused */
+    uint8_t refocus_policy : 1; /**< 1: Focus prev if focused on deletion. 0: 
Focus next if focused on
+                                   deletion.*/
+    uint8_t wrap : 1;           /**< 1: Focus next/prev can wrap at end of 
list. 0: Focus next/prev stops at end
+                                   of list.*/
+} lv_group_t;
+
+enum { LV_GROUP_REFOCUS_POLICY_NEXT = 0, LV_GROUP_REFOCUS_POLICY_PREV = 1 };
+typedef uint8_t lv_group_refocus_policy_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Init. the group module
+ * @remarks Internal function, do not call directly.
+ */
+void lv_group_init(void);
+
+/**
+ * Create a new object group
+ * @return pointer to the new object group
+ */
+lv_group_t * lv_group_create(void);
+
+/**
+ * Delete a group object
+ * @param group pointer to a group
+ */
+void lv_group_del(lv_group_t * group);
+
+/**
+ * Add an object to a group
+ * @param group pointer to a group
+ * @param obj pointer to an object to add
+ */
+void lv_group_add_obj(lv_group_t * group, lv_obj_t * obj);
+
+/**
+ * Remove an object from its group
+ * @param obj pointer to an object to remove
+ */
+void lv_group_remove_obj(lv_obj_t * obj);
+
+/**
+ * Remove all objects from a group
+ * @param group pointer to a group
+ */
+void lv_group_remove_all_objs(lv_group_t * group);
+
+/**
+ * Focus on an object (defocus the current)
+ * @param obj pointer to an object to focus on
+ */
+void lv_group_focus_obj(lv_obj_t * obj);
+
+/**
+ * Focus the next object in a group (defocus the current)
+ * @param group pointer to a group
+ */
+void lv_group_focus_next(lv_group_t * group);
+
+/**
+ * Focus the previous object in a group (defocus the current)
+ * @param group pointer to a group
+ */
+void lv_group_focus_prev(lv_group_t * group);
+
+/**
+ * Do not let to change the focus from the current object
+ * @param group pointer to a group
+ * @param en true: freeze, false: release freezing (normal mode)
+ */
+void lv_group_focus_freeze(lv_group_t * group, bool en);
+
+/**
+ * Send a control character to the focuses object of a group
+ * @param group pointer to a group
+ * @param c a character (use LV_KEY_.. to navigate)
+ * @return result of focused object in group.
+ */
+lv_res_t lv_group_send_data(lv_group_t * group, uint32_t c);
+
+/**
+ * Set a function for a group which will modify the object's style if it is in 
focus
+ * @param group pointer to a group
+ * @param style_mod_cb the style modifier function pointer
+ */
+void lv_group_set_style_mod_cb(lv_group_t * group, lv_group_style_mod_cb_t 
style_mod_cb);
+
+/**
+ * Set a function for a group which will modify the object's style if it is in 
focus in edit mode
+ * @param group pointer to a group
+ * @param style_mod_edit_cb the style modifier function pointer
+ */
+void lv_group_set_style_mod_edit_cb(lv_group_t * group, 
lv_group_style_mod_cb_t style_mod_edit_cb);
+
+/**
+ * Set a function for a group which will be called when a new object is focused
+ * @param group pointer to a group
+ * @param focus_cb the call back function or NULL if unused
+ */
+void lv_group_set_focus_cb(lv_group_t * group, lv_group_focus_cb_t focus_cb);
+
+/**
+ * Set whether the next or previous item in a group is focused if the 
currently focussed obj is
+ * deleted.
+ * @param group pointer to a group
+ * @param new refocus policy enum
+ */
+void lv_group_set_refocus_policy(lv_group_t * group, lv_group_refocus_policy_t 
policy);
+
+/**
+ * Manually set the current mode (edit or navigate).
+ * @param group pointer to group
+ * @param edit: true: edit mode; false: navigate mode
+ */
+void lv_group_set_editing(lv_group_t * group, bool edit);
+
+/**
+ * Set the `click_focus` attribute. If enabled then the object will be focused 
then it is clicked.
+ * @param group pointer to group
+ * @param en: true: enable `click_focus`
+ */
+void lv_group_set_click_focus(lv_group_t * group, bool en);
+
+/**
+ * Set whether focus next/prev will allow wrapping from first->last or 
last->first object.
+ * @param group pointer to group
+ * @param en: true: wrapping enabled; false: wrapping disabled
+ */
+void lv_group_set_wrap(lv_group_t * group, bool en);
+
+/**
+ * Modify a style with the set 'style_mod' function. The input style remains 
unchanged.
+ * @param group pointer to group
+ * @param style pointer to a style to modify
+ * @return a copy of the input style but modified with the 'style_mod' function
+ */
+lv_style_t * lv_group_mod_style(lv_group_t * group, const lv_style_t * style);
+
+/**
+ * Get the focused object or NULL if there isn't one
+ * @param group pointer to a group
+ * @return pointer to the focused object
+ */
+lv_obj_t * lv_group_get_focused(const lv_group_t * group);
+
+#if LV_USE_USER_DATA
+/**
+ * Get a pointer to the group's user data
+ * @param group pointer to an group
+ * @return pointer to the user data
+ */
+lv_group_user_data_t * lv_group_get_user_data(lv_group_t * group);
+
+#endif
+
+/**
+ * Get a the style modifier function of a group
+ * @param group pointer to a group
+ * @return pointer to the style modifier function
+ */
+lv_group_style_mod_cb_t lv_group_get_style_mod_cb(const lv_group_t * group);
+
+/**
+ * Get a the style modifier function of a group in edit mode
+ * @param group pointer to a group
+ * @return pointer to the style modifier function
+ */
+lv_group_style_mod_cb_t lv_group_get_style_mod_edit_cb(const lv_group_t * 
group);
+
+/**
+ * Get the focus callback function of a group
+ * @param group pointer to a group
+ * @return the call back function or NULL if not set
+ */
+lv_group_focus_cb_t lv_group_get_focus_cb(const lv_group_t * group);
+
+/**
+ * Get the current mode (edit or navigate).
+ * @param group pointer to group
+ * @return true: edit mode; false: navigate mode
+ */
+bool lv_group_get_editing(const lv_group_t * group);
+
+/**
+ * Get the `click_focus` attribute.
+ * @param group pointer to group
+ * @return true: `click_focus` is enabled; false: disabled
+ */
+bool lv_group_get_click_focus(const lv_group_t * group);
+
+/**
+ * Get whether focus next/prev will allow wrapping from first->last or 
last->first object.
+ * @param group pointer to group
+ * @param en: true: wrapping enabled; false: wrapping disabled
+ */
+bool lv_group_get_wrap(lv_group_t * group);
+
+/**
+ * Notify the group that current theme changed and style modification 
callbacks need to be
+ * refreshed.
+ * @param group pointer to group. If NULL then all groups are notified.
+ */
+void lv_group_report_style_mod(lv_group_t * group);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_GROUP != 0*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_GROUP_H*/
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_indev.c 
b/scriptsrcs/lvgl/src/lv_core/lv_indev.c
new file mode 100755
index 0000000..6ec59bd
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_indev.c
@@ -0,0 +1,1240 @@
+/**
+ * @file lv_indev.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ ********************/
+#include "lv_indev.h"
+#include "lv_disp.h"
+#include "lv_obj.h"
+
+#include "../lv_hal/lv_hal_tick.h"
+#include "../lv_core/lv_group.h"
+#include "../lv_core/lv_refr.h"
+#include "../lv_misc/lv_task.h"
+#include "../lv_misc/lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+#if LV_INDEV_DEF_DRAG_THROW <= 0
+#warning "LV_INDEV_DRAG_THROW must be greater than 0"
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+static void indev_pointer_proc(lv_indev_t * i, lv_indev_data_t * data);
+static void indev_keypad_proc(lv_indev_t * i, lv_indev_data_t * data);
+static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data);
+static void indev_button_proc(lv_indev_t * i, lv_indev_data_t * data);
+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_throw(lv_indev_proc_t * proc);
+static bool indev_reset_check(lv_indev_proc_t * proc);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_indev_t * indev_act;
+static lv_obj_t * indev_obj_act = NULL;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the display input device subsystem
+ */
+void lv_indev_init(void)
+{
+    lv_indev_reset(NULL); /*Reset all input devices*/
+}
+
+/**
+ * Called periodically to read the input devices
+ * @param param pointer to and input device to read
+ */
+void lv_indev_read_task(lv_task_t * task)
+{
+    LV_LOG_TRACE("indev read task started");
+
+    lv_indev_data_t data;
+
+    indev_act = task->user_data;
+
+    /*Read and process all indevs*/
+    if(indev_act->driver.disp == NULL) return; /*Not assigned to any displays*/
+
+    /*Handle reset query before processing the point*/
+    indev_proc_reset_query_handler(indev_act);
+
+    if(indev_act->proc.disabled) return;
+    bool more_to_read;
+    do {
+        /*Read the data*/
+        more_to_read = lv_indev_read(indev_act, &data);
+
+        /*The active object might deleted even in the read function*/
+        indev_proc_reset_query_handler(indev_act);
+        indev_obj_act = NULL;
+
+        indev_act->proc.state = data.state;
+
+        /*Save the last activity time*/
+        if(indev_act->proc.state == LV_INDEV_STATE_PR) {
+            indev_act->driver.disp->last_activity_time = lv_tick_get();
+        } else if(indev_act->driver.type == LV_INDEV_TYPE_ENCODER && 
data.enc_diff) {
+            indev_act->driver.disp->last_activity_time = lv_tick_get();
+        }
+
+        if(indev_act->driver.type == LV_INDEV_TYPE_POINTER) {
+            indev_pointer_proc(indev_act, &data);
+        } else if(indev_act->driver.type == LV_INDEV_TYPE_KEYPAD) {
+            indev_keypad_proc(indev_act, &data);
+        } else if(indev_act->driver.type == LV_INDEV_TYPE_ENCODER) {
+            indev_encoder_proc(indev_act, &data);
+        } else if(indev_act->driver.type == LV_INDEV_TYPE_BUTTON) {
+            indev_button_proc(indev_act, &data);
+        }
+        /*Handle reset query if it happened in during processing*/
+        indev_proc_reset_query_handler(indev_act);
+    } while(more_to_read);
+
+    /*End of indev processing, so no act indev*/
+    indev_act     = NULL;
+    indev_obj_act = NULL;
+
+    LV_LOG_TRACE("indev read task finished");
+}
+
+/**
+ * Get the currently processed input device. Can be used in action functions 
too.
+ * @return pointer to the currently processed input device or NULL if no input 
device processing
+ * right now
+ */
+lv_indev_t * lv_indev_get_act(void)
+{
+    return indev_act;
+}
+
+/**
+ * Get the type of an input device
+ * @param indev pointer to an input device
+ * @return the type of the input device from `lv_hal_indev_type_t` 
(`LV_INDEV_TYPE_...`)
+ */
+lv_indev_type_t lv_indev_get_type(const lv_indev_t * indev)
+{
+    if(indev == NULL) return LV_INDEV_TYPE_NONE;
+
+    return indev->driver.type;
+}
+/**
+ * Reset one or all input devices
+ * @param indev pointer to an input device to reset or NULL to reset all of 
them
+ */
+void lv_indev_reset(lv_indev_t * indev)
+{
+    if(indev)
+        indev->proc.reset_query = 1;
+    else {
+        lv_indev_t * i = lv_indev_get_next(NULL);
+        while(i) {
+            i->proc.reset_query = 1;
+
+            i = lv_indev_get_next(i);
+        }
+    }
+}
+
+/**
+ * Reset the long press state of an input device
+ * @param indev pointer to an input device
+ */
+void lv_indev_reset_long_press(lv_indev_t * indev)
+{
+    indev->proc.long_pr_sent         = 0;
+    indev->proc.longpr_rep_timestamp = lv_tick_get();
+    indev->proc.pr_timestamp         = lv_tick_get();
+}
+
+/**
+ * Enable or disable an input devices
+ * @param indev pointer to an input device
+ * @param en true: enable; false: disable
+ */
+void lv_indev_enable(lv_indev_t * indev, bool en)
+{
+    if(!indev) return;
+
+    indev->proc.disabled = en ? 0 : 1;
+}
+
+/**
+ * Set a cursor for a pointer input device (for LV_INPUT_TYPE_POINTER and 
LV_INPUT_TYPE_BUTTON)
+ * @param indev pointer to an input device
+ * @param cur_obj pointer to an object to be used as cursor
+ */
+void lv_indev_set_cursor(lv_indev_t * indev, lv_obj_t * cur_obj)
+{
+    if(indev->driver.type != LV_INDEV_TYPE_POINTER) return;
+
+    indev->cursor = cur_obj;
+    lv_obj_set_parent(indev->cursor, 
lv_disp_get_layer_sys(indev->driver.disp));
+    lv_obj_set_pos(indev->cursor, indev->proc.types.pointer.act_point.x, 
indev->proc.types.pointer.act_point.y);
+}
+
+#if LV_USE_GROUP
+/**
+ * Set a destination group for a keypad input device (for LV_INDEV_TYPE_KEYPAD)
+ * @param indev pointer to an input device
+ * @param group point to a group
+ */
+void lv_indev_set_group(lv_indev_t * indev, lv_group_t * group)
+{
+    if(indev->driver.type == LV_INDEV_TYPE_KEYPAD || indev->driver.type == 
LV_INDEV_TYPE_ENCODER) {
+        indev->group = group;
+    }
+}
+#endif
+
+/**
+ * Set the an array of points for LV_INDEV_TYPE_BUTTON.
+ * These points will be assigned to the buttons to press a specific point on 
the screen
+ * @param indev pointer to an input device
+ * @param group point to a group
+ */
+void lv_indev_set_button_points(lv_indev_t * indev, const lv_point_t * points)
+{
+    if(indev->driver.type == LV_INDEV_TYPE_BUTTON) {
+        indev->btn_points = points;
+    }
+}
+
+/**
+ * Get the last point of an input device (for LV_INDEV_TYPE_POINTER and 
LV_INDEV_TYPE_BUTTON)
+ * @param indev pointer to an input device
+ * @param point pointer to a point to store the result
+ */
+void lv_indev_get_point(const lv_indev_t * indev, lv_point_t * point)
+{
+    if(indev->driver.type != LV_INDEV_TYPE_POINTER && indev->driver.type != 
LV_INDEV_TYPE_BUTTON) {
+        point->x = -1;
+        point->y = -1;
+    } else {
+        point->x = indev->proc.types.pointer.act_point.x;
+        point->y = indev->proc.types.pointer.act_point.y;
+    }
+}
+
+/**
+ * Get the last pressed key of an input device (for LV_INDEV_TYPE_KEYPAD)
+ * @param indev pointer to an input device
+ * @return the last pressed key (0 on error)
+ */
+uint32_t lv_indev_get_key(const lv_indev_t * indev)
+{
+    if(indev->driver.type != LV_INDEV_TYPE_KEYPAD)
+        return 0;
+    else
+        return indev->proc.types.keypad.last_key;
+}
+
+/**
+ * Check if there is dragging with an input device or not (for 
LV_INDEV_TYPE_POINTER and
+ * LV_INDEV_TYPE_BUTTON)
+ * @param indev pointer to an input device
+ * @return true: drag is in progress
+ */
+bool lv_indev_is_dragging(const lv_indev_t * indev)
+{
+    if(indev == NULL) return false;
+    if(indev->driver.type != LV_INDEV_TYPE_POINTER && indev->driver.type != 
LV_INDEV_TYPE_BUTTON) return false;
+    return indev->proc.types.pointer.drag_in_prog == 0 ? false : true;
+}
+
+/**
+ * Get the types.pointer.vector of dragging of an input device (for 
LV_INDEV_TYPE_POINTER and
+ * LV_INDEV_TYPE_BUTTON)
+ * @param indev pointer to an input device
+ * @param point pointer to a point to store the types.pointer.vector
+ */
+void lv_indev_get_vect(const lv_indev_t * indev, lv_point_t * point)
+{
+    if(indev == NULL) {
+        point->x = 0;
+        point->y = 0;
+        return;
+    }
+
+    if(indev->driver.type != LV_INDEV_TYPE_POINTER && indev->driver.type != 
LV_INDEV_TYPE_BUTTON) {
+        point->x = 0;
+        point->y = 0;
+    } else {
+        point->x = indev->proc.types.pointer.vect.x;
+        point->y = indev->proc.types.pointer.vect.y;
+    }
+}
+
+/**
+ * Do nothing until the next release
+ * @param indev pointer to an input device
+ */
+void lv_indev_wait_release(lv_indev_t * indev)
+{
+    indev->proc.wait_until_release = 1;
+}
+
+/**
+ * Get a pointer to the indev read task to
+ * modify its parameters with `lv_task_...` functions.
+ * @param indev pointer to an input device
+ * @return pointer to the indev read refresher task. (NULL on error)
+ */
+lv_task_t * lv_indev_get_read_task(lv_disp_t * indev)
+{
+    if(!indev) {
+        LV_LOG_WARN("lv_indev_get_read_task: indev was NULL");
+        return NULL;
+    }
+
+    return indev->refr_task;
+}
+
+/**
+ * Gets a pointer to the currently active object in the currently processed 
input device.
+ * @return pointer to currently active object or NULL if no active object
+ */
+lv_obj_t * lv_indev_get_obj_act(void)
+{
+    return indev_obj_act;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Process a new point from LV_INDEV_TYPE_POINTER input device
+ * @param i pointer to an input device
+ * @param data pointer to the data read from the input device
+ */
+static void indev_pointer_proc(lv_indev_t * i, lv_indev_data_t * data)
+{
+    /*Move the cursor if set and moved*/
+    if(i->cursor != NULL &&
+       (i->proc.types.pointer.last_point.x != data->point.x || 
i->proc.types.pointer.last_point.y != data->point.y)) {
+        lv_obj_set_pos(i->cursor, data->point.x, data->point.y);
+    }
+
+    i->proc.types.pointer.act_point.x = data->point.x;
+    i->proc.types.pointer.act_point.y = data->point.y;
+
+    if(i->proc.state == LV_INDEV_STATE_PR) {
+        indev_proc_press(&i->proc);
+    } else {
+        indev_proc_release(&i->proc);
+    }
+
+    i->proc.types.pointer.last_point.x = i->proc.types.pointer.act_point.x;
+    i->proc.types.pointer.last_point.y = i->proc.types.pointer.act_point.y;
+}
+
+/**
+ * Process a new point from LV_INDEV_TYPE_KEYPAD input device
+ * @param i pointer to an input device
+ * @param data pointer to the data read from the input device
+ */
+static void indev_keypad_proc(lv_indev_t * i, lv_indev_data_t * data)
+{
+#if LV_USE_GROUP
+    if(data->state == LV_INDEV_STATE_PR && i->proc.wait_until_release) return;
+
+    if(i->proc.wait_until_release) {
+        i->proc.wait_until_release      = 0;
+        i->proc.pr_timestamp            = 0;
+        i->proc.long_pr_sent            = 0;
+        i->proc.types.keypad.last_state = LV_INDEV_STATE_REL; /*To skip the 
processing of release*/
+    }
+
+    lv_group_t * g = i->group;
+    if(g == NULL) return;
+
+    indev_obj_act = lv_group_get_focused(g);
+    if(indev_obj_act == NULL) return;
+
+    /*Save the last key to compare it with the current latter on RELEASE*/
+    uint32_t prev_key = i->proc.types.keypad.last_key;
+
+    /* Save the last key.
+     * It must be done here else `lv_indev_get_key` will return the last key 
in events and signals*/
+    i->proc.types.keypad.last_key = data->key;
+
+    /* Save the previous state so we can detect state changes below and also 
set the last state now
+     * so if any signal/event handler on the way returns `LV_RES_INV` the last 
state is remembered
+     * for the next time*/
+    uint32_t prev_state             = i->proc.types.keypad.last_state;
+    i->proc.types.keypad.last_state = data->state;
+
+    /*Key press happened*/
+    if(data->state == LV_INDEV_STATE_PR && prev_state == LV_INDEV_STATE_REL) {
+        i->proc.pr_timestamp = lv_tick_get();
+
+        /*Simulate a press on the object if ENTER was pressed*/
+        if(data->key == LV_KEY_ENTER) {
+            /*Send the ENTER as a normal KEY*/
+            lv_group_send_data(g, LV_KEY_ENTER);
+
+            indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_PRESSED, NULL);
+            if(indev_reset_check(&i->proc)) return;
+            lv_event_send(indev_obj_act, LV_EVENT_PRESSED, NULL);
+            if(indev_reset_check(&i->proc)) return;
+        } else if(data->key == LV_KEY_ESC) {
+            /*Send the ESC as a normal KEY*/
+            lv_group_send_data(g, LV_KEY_ESC);
+
+            lv_event_send(indev_obj_act, LV_EVENT_CANCEL, NULL);
+            if(indev_reset_check(&i->proc)) return;
+        }
+        /*Move the focus on NEXT*/
+        else if(data->key == LV_KEY_NEXT) {
+            lv_group_set_editing(g, false); /*Editing is not used by KEYPAD is 
be sure it is disabled*/
+            lv_group_focus_next(g);
+            if(indev_reset_check(&i->proc)) return;
+        }
+        /*Move the focus on PREV*/
+        else if(data->key == LV_KEY_PREV) {
+            lv_group_set_editing(g, false); /*Editing is not used by KEYPAD is 
be sure it is disabled*/
+            lv_group_focus_prev(g);
+            if(indev_reset_check(&i->proc)) return;
+        }
+        /*Just send other keys to the object (e.g. 'A' or 
`LV_GROUP_KEY_RIGHT`)*/
+        else {
+            lv_group_send_data(g, data->key);
+        }
+    }
+    /*Pressing*/
+    else if(data->state == LV_INDEV_STATE_PR && prev_state == 
LV_INDEV_STATE_PR) {
+        /*Long press time has elapsed?*/
+        if(i->proc.long_pr_sent == 0 && lv_tick_elaps(i->proc.pr_timestamp) > 
i->driver.long_press_time) {
+            i->proc.long_pr_sent = 1;
+            if(data->key == LV_KEY_ENTER) {
+                i->proc.longpr_rep_timestamp = lv_tick_get();
+                indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_LONG_PRESS, 
NULL);
+                if(indev_reset_check(&i->proc)) return;
+                lv_event_send(indev_obj_act, LV_EVENT_LONG_PRESSED, NULL);
+                if(indev_reset_check(&i->proc)) return;
+            }
+        }
+        /*Long press repeated time has elapsed?*/
+        else if(i->proc.long_pr_sent != 0 &&
+                lv_tick_elaps(i->proc.longpr_rep_timestamp) > 
i->driver.long_press_rep_time) {
+
+            i->proc.longpr_rep_timestamp = lv_tick_get();
+
+            /*Send LONG_PRESS_REP on ENTER*/
+            if(data->key == LV_KEY_ENTER) {
+                indev_obj_act->signal_cb(indev_obj_act, 
LV_SIGNAL_LONG_PRESS_REP, NULL);
+                if(indev_reset_check(&i->proc)) return;
+                lv_event_send(indev_obj_act, LV_EVENT_LONG_PRESSED_REPEAT, 
NULL);
+                if(indev_reset_check(&i->proc)) return;
+            }
+            /*Move the focus on NEXT again*/
+            else if(data->key == LV_KEY_NEXT) {
+                lv_group_set_editing(g, false); /*Editing is not used by 
KEYPAD is be sure it is disabled*/
+                lv_group_focus_next(g);
+                if(indev_reset_check(&i->proc)) return;
+            }
+            /*Move the focus on PREV again*/
+            else if(data->key == LV_KEY_PREV) {
+                lv_group_set_editing(g, false); /*Editing is not used by 
KEYPAD is be sure it is disabled*/
+                lv_group_focus_prev(g);
+                if(indev_reset_check(&i->proc)) return;
+            }
+            /*Just send other keys again to the object (e.g. 'A' or 
`LV_GORUP_KEY_RIGHT)*/
+            else {
+                lv_group_send_data(g, data->key);
+                if(indev_reset_check(&i->proc)) return;
+            }
+        }
+    }
+    /*Release happened*/
+    else if(data->state == LV_INDEV_STATE_REL && prev_state == 
LV_INDEV_STATE_PR) {
+        /*The user might clear the key when it was released. Always release 
the pressed key*/
+        data->key = prev_key;
+        if(data->key == LV_KEY_ENTER) {
+
+            indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_RELEASED, NULL);
+            if(indev_reset_check(&i->proc)) return;
+
+            if(i->proc.long_pr_sent == 0) {
+                lv_event_send(indev_obj_act, LV_EVENT_SHORT_CLICKED, NULL);
+                if(indev_reset_check(&i->proc)) return;
+            }
+
+            lv_event_send(indev_obj_act, LV_EVENT_CLICKED, NULL);
+            if(indev_reset_check(&i->proc)) return;
+
+            lv_event_send(indev_obj_act, LV_EVENT_RELEASED, NULL);
+            if(indev_reset_check(&i->proc)) return;
+        }
+        i->proc.pr_timestamp = 0;
+        i->proc.long_pr_sent = 0;
+    }
+    indev_obj_act = NULL;
+#else
+    (void)data; /*Unused*/
+    (void)i;    /*Unused*/
+#endif
+}
+
+/**
+ * Process a new point from LV_INDEV_TYPE_ENCODER input device
+ * @param i pointer to an input device
+ * @param data pointer to the data read from the input device
+ */
+static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data)
+{
+#if LV_USE_GROUP
+
+    if(data->state == LV_INDEV_STATE_PR && i->proc.wait_until_release) return;
+
+    if(i->proc.wait_until_release) {
+        i->proc.wait_until_release      = 0;
+        i->proc.pr_timestamp            = 0;
+        i->proc.long_pr_sent            = 0;
+        i->proc.types.keypad.last_state = LV_INDEV_STATE_REL; /*To skip the 
processing of release*/
+    }
+
+    /* Save the last keys before anything else.
+     * They need to be already saved if the the function returns for any 
reason*/
+    lv_indev_state_t last_state     = i->proc.types.keypad.last_state;
+    i->proc.types.keypad.last_state = data->state;
+    i->proc.types.keypad.last_key   = data->key;
+
+    lv_group_t * g = i->group;
+    if(g == NULL) return;
+
+    indev_obj_act = lv_group_get_focused(g);
+    if(indev_obj_act == NULL) return;
+
+    /*Process the steps first. They are valid only with released button*/
+    if(data->state == LV_INDEV_STATE_REL) {
+        /*In edit mode send LEFT/RIGHT keys*/
+        if(lv_group_get_editing(g)) {
+            int32_t s;
+            if(data->enc_diff < 0) {
+                for(s = 0; s < -data->enc_diff; s++) lv_group_send_data(g, 
LV_KEY_LEFT);
+            } else if(data->enc_diff > 0) {
+                for(s = 0; s < data->enc_diff; s++) lv_group_send_data(g, 
LV_KEY_RIGHT);
+            }
+        }
+        /*In navigate mode focus on the next/prev objects*/
+        else {
+            int32_t s;
+            if(data->enc_diff < 0) {
+                for(s = 0; s < -data->enc_diff; s++) lv_group_focus_prev(g);
+            } else if(data->enc_diff > 0) {
+                for(s = 0; s < data->enc_diff; s++) lv_group_focus_next(g);
+            }
+        }
+    }
+
+    /*Refresh the focused object. It might change due to 
lv_group_focus_prev/next*/
+    indev_obj_act = lv_group_get_focused(g);
+    if(indev_obj_act == NULL) return;
+
+    /*Button press happened*/
+    if(data->state == LV_INDEV_STATE_PR && last_state == LV_INDEV_STATE_REL) {
+        bool editable = false;
+        indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_GET_EDITABLE, 
&editable);
+
+        i->proc.pr_timestamp = lv_tick_get();
+        if(lv_group_get_editing(g) == true || editable == false) {
+            indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_PRESSED, NULL);
+            if(indev_reset_check(&i->proc)) return;
+
+            lv_event_send(indev_obj_act, LV_EVENT_PRESSED, NULL);
+            if(indev_reset_check(&i->proc)) return;
+        }
+    }
+    /*Pressing*/
+    else if(data->state == LV_INDEV_STATE_PR && last_state == 
LV_INDEV_STATE_PR) {
+        if(i->proc.long_pr_sent == 0 && lv_tick_elaps(i->proc.pr_timestamp) > 
i->driver.long_press_time) {
+            bool editable = false;
+            indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_GET_EDITABLE, 
&editable);
+
+            /*On enter long press toggle edit mode.*/
+            if(editable) {
+                /*Don't leave edit mode if there is only one object (nowhere 
to navigate)*/
+                if(lv_ll_is_empty(&g->obj_ll) == false) {
+                    lv_group_set_editing(g, lv_group_get_editing(g) ? false : 
true); /*Toggle edit mode on long press*/
+                }
+            }
+            /*If not editable then just send a long press signal*/
+            else {
+                indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_LONG_PRESS, 
NULL);
+                if(indev_reset_check(&i->proc)) return;
+                lv_event_send(indev_obj_act, LV_EVENT_LONG_PRESSED, NULL);
+                if(indev_reset_check(&i->proc)) return;
+            }
+            i->proc.long_pr_sent = 1;
+        }
+    }
+    /*Release happened*/
+    else if(data->state == LV_INDEV_STATE_REL && last_state == 
LV_INDEV_STATE_PR) {
+
+        bool editable = false;
+        indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_GET_EDITABLE, 
&editable);
+
+        /*The button was released on a non-editable object. Just send enter*/
+        if(editable == false) {
+            indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_RELEASED, NULL);
+            if(indev_reset_check(&i->proc)) return;
+
+            if(i->proc.long_pr_sent == 0) lv_event_send(indev_obj_act, 
LV_EVENT_SHORT_CLICKED, NULL);
+            if(indev_reset_check(&i->proc)) return;
+
+            lv_event_send(indev_obj_act, LV_EVENT_CLICKED, NULL);
+            if(indev_reset_check(&i->proc)) return;
+
+            lv_event_send(indev_obj_act, LV_EVENT_RELEASED, NULL);
+            if(indev_reset_check(&i->proc)) return;
+        }
+        /*An object is being edited and the button is released. */
+        else if(g->editing) {
+            /*Ignore long pressed enter release because it comes from mode 
switch*/
+            if(!i->proc.long_pr_sent || lv_ll_is_empty(&g->obj_ll)) {
+                indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_RELEASED, 
NULL);
+                if(indev_reset_check(&i->proc)) return;
+
+                lv_event_send(indev_obj_act, LV_EVENT_SHORT_CLICKED, NULL);
+                if(indev_reset_check(&i->proc)) return;
+
+                lv_event_send(indev_obj_act, LV_EVENT_CLICKED, NULL);
+                if(indev_reset_check(&i->proc)) return;
+
+                lv_event_send(indev_obj_act, LV_EVENT_RELEASED, NULL);
+                if(indev_reset_check(&i->proc)) return;
+
+                lv_group_send_data(g, LV_KEY_ENTER);
+            }
+        }
+        /*If the focused object is editable and now in navigate mode then on 
enter switch edit
+           mode*/
+        else if(editable && !g->editing && !i->proc.long_pr_sent) {
+            lv_group_set_editing(g, true); /*Set edit mode*/
+        }
+
+        i->proc.pr_timestamp = 0;
+        i->proc.long_pr_sent = 0;
+    }
+    indev_obj_act = NULL;
+#else
+    (void)data; /*Unused*/
+    (void)i;    /*Unused*/
+#endif
+}
+
+/**
+ * Process new points from a input device. indev->state.pressed has to be set
+ * @param indev pointer to an input device state
+ * @param x x coordinate of the next point
+ * @param y y coordinate of the next point
+ */
+static void indev_button_proc(lv_indev_t * i, lv_indev_data_t * data)
+{
+    i->proc.types.pointer.act_point.x = i->btn_points[data->btn_id].x;
+    i->proc.types.pointer.act_point.y = i->btn_points[data->btn_id].y;
+
+    /*Still the same point is pressed*/
+    if(i->proc.types.pointer.last_point.x == i->proc.types.pointer.act_point.x 
&&
+       i->proc.types.pointer.last_point.y == i->proc.types.pointer.act_point.y 
&& data->state == LV_INDEV_STATE_PR) {
+        indev_proc_press(&i->proc);
+    } else {
+        /*If a new point comes always make a release*/
+        indev_proc_release(&i->proc);
+    }
+
+    i->proc.types.pointer.last_point.x = i->proc.types.pointer.act_point.x;
+    i->proc.types.pointer.last_point.y = i->proc.types.pointer.act_point.y;
+}
+
+/**
+ * Process the pressed state of LV_INDEV_TYPE_POINER input devices
+ * @param indev pointer to an input device 'proc'
+ * @return LV_RES_OK: no indev reset required; LV_RES_INV: indev reset is 
required
+ */
+static void indev_proc_press(lv_indev_proc_t * proc)
+{
+    indev_obj_act = proc->types.pointer.act_obj;
+
+    if(proc->wait_until_release != 0) return;
+
+    lv_disp_t * disp = indev_act->driver.disp;
+    bool new_obj_searched = false;
+
+    /*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));
+        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));
+        new_obj_searched = true;
+    }
+    /*If a dragable or a protected object was the last then keep it*/
+    else {
+    }
+
+    /*The last object might have drag throw. Stop it manually*/
+    if(new_obj_searched && proc->types.pointer.last_obj) {
+        proc->types.pointer.drag_throw_vect.x = 0;
+        proc->types.pointer.drag_throw_vect.y = 0;
+        indev_drag_throw(proc);
+    }
+
+    /*If a new object was found reset some variables and send a pressed 
signal*/
+    if(indev_obj_act != proc->types.pointer.act_obj) {
+        proc->types.pointer.last_point.x = proc->types.pointer.act_point.x;
+        proc->types.pointer.last_point.y = proc->types.pointer.act_point.y;
+
+        /*If a new object found the previous was lost, so send a signal*/
+        if(proc->types.pointer.act_obj != NULL) {
+            /*Save the obj because in special cases `act_obj` can change in 
the signal function*/
+            lv_obj_t * last_obj = proc->types.pointer.act_obj;
+
+            last_obj->signal_cb(last_obj, LV_SIGNAL_PRESS_LOST, indev_act);
+            if(indev_reset_check(proc)) return;
+            lv_event_send(last_obj, LV_EVENT_PRESS_LOST, NULL);
+            if(indev_reset_check(proc)) return;
+
+        }
+
+        proc->types.pointer.act_obj  = indev_obj_act; /*Save the pressed 
object*/
+        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.*/
+            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.vect.x         = 0;
+            proc->types.pointer.vect.y         = 0;
+
+            /*Search for 'top' attribute*/
+            lv_obj_t * i        = indev_obj_act;
+            lv_obj_t * last_top = NULL;
+            while(i != NULL) {
+                if(i->top) last_top = i;
+                i = lv_obj_get_parent(i);
+            }
+
+            if(last_top != NULL) {
+                /*Move the last_top object to the foreground*/
+                lv_obj_move_foreground(last_top);
+            }
+
+            /*Send a signal about the press*/
+            indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_PRESSED, 
indev_act);
+            if(indev_reset_check(proc)) return;
+
+            lv_event_send(indev_obj_act, LV_EVENT_PRESSED, NULL);
+            if(indev_reset_check(proc)) return;
+        }
+    }
+
+    /*Calculate the types.pointer.vector*/
+    proc->types.pointer.vect.x = proc->types.pointer.act_point.x - 
proc->types.pointer.last_point.x;
+    proc->types.pointer.vect.y = proc->types.pointer.act_point.y - 
proc->types.pointer.last_point.y;
+
+    proc->types.pointer.drag_throw_vect.x = 
(proc->types.pointer.drag_throw_vect.x * 5) >> 3;
+    proc->types.pointer.drag_throw_vect.y = 
(proc->types.pointer.drag_throw_vect.y * 5) >> 3;
+
+    if(proc->types.pointer.drag_throw_vect.x < 0)
+        proc->types.pointer.drag_throw_vect.x++;
+    else if(proc->types.pointer.drag_throw_vect.x > 0)
+        proc->types.pointer.drag_throw_vect.x--;
+
+    if(proc->types.pointer.drag_throw_vect.y < 0)
+        proc->types.pointer.drag_throw_vect.y++;
+    else if(proc->types.pointer.drag_throw_vect.y > 0)
+        proc->types.pointer.drag_throw_vect.y--;
+
+    proc->types.pointer.drag_throw_vect.x += (proc->types.pointer.vect.x * 4) 
>> 3;
+    proc->types.pointer.drag_throw_vect.y += (proc->types.pointer.vect.y * 4) 
>> 3;
+
+    /*If there is active object and it can be dragged run the drag*/
+    if(indev_obj_act != NULL) {
+        indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_PRESSING, indev_act);
+        if(indev_reset_check(proc)) return;
+        lv_event_send(indev_obj_act, LV_EVENT_PRESSING, NULL);
+        if(indev_reset_check(proc)) return;
+
+        indev_drag(proc);
+        if(indev_reset_check(proc)) return;
+
+        /*If there is no drag then check for long press time*/
+        if(proc->types.pointer.drag_in_prog == 0 && proc->long_pr_sent == 0) {
+            /*Send a signal about the long press if enough time elapsed*/
+            if(lv_tick_elaps(proc->pr_timestamp) > 
indev_act->driver.long_press_time) {
+                indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_LONG_PRESS, 
indev_act);
+                if(indev_reset_check(proc)) return;
+                lv_event_send(indev_obj_act, LV_EVENT_LONG_PRESSED, NULL);
+                if(indev_reset_check(proc)) return;
+
+                /*Mark the signal sending to do not send it again*/
+                proc->long_pr_sent = 1;
+
+                /*Save the long press time stamp for the long press repeat 
handler*/
+                proc->longpr_rep_timestamp = lv_tick_get();
+            }
+        }
+        /*Send long press repeated signal*/
+        if(proc->types.pointer.drag_in_prog == 0 && proc->long_pr_sent == 1) {
+            /*Send a signal about the long press repeat if enough time 
elapsed*/
+            if(lv_tick_elaps(proc->longpr_rep_timestamp) > 
indev_act->driver.long_press_rep_time) {
+                indev_obj_act->signal_cb(indev_obj_act, 
LV_SIGNAL_LONG_PRESS_REP, indev_act);
+                if(indev_reset_check(proc)) return;
+                lv_event_send(indev_obj_act, LV_EVENT_LONG_PRESSED_REPEAT, 
NULL);
+                if(indev_reset_check(proc)) return;
+                proc->longpr_rep_timestamp = lv_tick_get();
+            }
+        }
+    }
+}
+
+/**
+ * Process the released state of LV_INDEV_TYPE_POINER input devices
+ * @param proc pointer to an input device 'proc'
+ */
+static void indev_proc_release(lv_indev_proc_t * proc)
+{
+    if(proc->wait_until_release != 0) {
+        proc->types.pointer.act_obj  = NULL;
+        proc->types.pointer.last_obj = NULL;
+        proc->pr_timestamp           = 0;
+        proc->longpr_rep_timestamp   = 0;
+        proc->wait_until_release     = 0;
+    }
+    indev_obj_act = proc->types.pointer.act_obj;
+
+    /*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
+         * the indev is ON the `types.pointer.act_obj` */
+        if(lv_obj_is_protected(indev_obj_act, LV_PROTECT_PRESS_LOST)) {
+            indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_RELEASED, 
indev_act);
+            if(indev_reset_check(proc)) return;
+
+            if(proc->types.pointer.drag_in_prog == 0) {
+                if(proc->long_pr_sent == 0) {
+                    lv_event_send(indev_obj_act, LV_EVENT_SHORT_CLICKED, NULL);
+                    if(indev_reset_check(proc)) return;
+                }
+
+                lv_event_send(indev_obj_act, LV_EVENT_CLICKED, NULL);
+                if(indev_reset_check(proc)) return;
+            }
+
+            lv_event_send(indev_obj_act, LV_EVENT_RELEASED, NULL);
+            if(indev_reset_check(proc)) return;
+        }
+        /* The simple case: `act_obj` was not protected against press lost.
+         * If it is already not pressed then `indev_proc_press` would set 
`indev_obj_act = NULL`*/
+        else {
+            indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_RELEASED, 
indev_act);
+            if(indev_reset_check(proc)) return;
+
+            if(proc->long_pr_sent == 0 && proc->types.pointer.drag_in_prog == 
0) {
+                lv_event_send(indev_obj_act, LV_EVENT_SHORT_CLICKED, NULL);
+                if(indev_reset_check(proc)) return;
+            }
+
+            if(proc->types.pointer.drag_in_prog == 0) {
+                lv_event_send(indev_obj_act, LV_EVENT_CLICKED, NULL);
+                if(indev_reset_check(proc)) return;
+            }
+
+            lv_event_send(indev_obj_act, LV_EVENT_RELEASED, NULL);
+            if(indev_reset_check(proc)) return;
+        }
+
+        if(indev_reset_check(proc)) return;
+
+        /*Handle click focus*/
+        bool click_focus_sent = false;
+#if LV_USE_GROUP
+        lv_group_t * g = lv_obj_get_group(indev_obj_act);
+
+        /*Check, if the parent is in a group and focus on it.*/
+        /*Respect the click focus protection*/
+        if(lv_obj_is_protected(indev_obj_act, LV_PROTECT_CLICK_FOCUS) == 
false) {
+            lv_obj_t * parent = indev_obj_act;
+
+            while(g == NULL) {
+                parent = lv_obj_get_parent(parent);
+                if(parent == NULL) break;
+
+                /*Ignore is the protected against click focus*/
+                if(lv_obj_is_protected(parent, LV_PROTECT_CLICK_FOCUS)) {
+                    parent = NULL;
+                    break;
+                }
+                g = lv_obj_get_group(parent);
+            }
+
+            /* If a parent is in a group make it focused.
+             * `LV_EVENT_FOCUSED/DEFOCUSED` will be sent by 
`lv_group_focus_obj`*/
+            if(g && parent) {
+                if(lv_group_get_click_focus(g)) {
+                    click_focus_sent = true;
+                    lv_group_focus_obj(parent);
+                }
+            }
+        }
+#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*/
+        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;
+
+            lv_event_send(proc->types.pointer.act_obj, LV_EVENT_FOCUSED, NULL);
+            if(indev_reset_check(proc)) return;
+
+            proc->types.pointer.last_pressed = indev_obj_act;
+        }
+
+        if(indev_reset_check(proc)) return;
+
+        /*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);
+        }
+
+        if(drag_obj) {
+            if(lv_obj_get_drag_throw(drag_obj) && 
proc->types.pointer.drag_in_prog) {
+                lv_event_send(drag_obj, LV_EVENT_DRAG_THROW_BEGIN, NULL);
+                if(indev_reset_check(proc)) return;
+            }
+        }
+
+        proc->types.pointer.act_obj = NULL;
+        proc->pr_timestamp          = 0;
+        proc->longpr_rep_timestamp  = 0;
+    }
+
+    /*The reset can be set in the signal function.
+     * In case of reset query ignore the remaining parts.*/
+    if(proc->types.pointer.last_obj != NULL && proc->reset_query == 0) {
+        indev_drag_throw(proc);
+        if(indev_reset_check(proc)) return;
+    }
+}
+
+/**
+ * Process a new point from LV_INDEV_TYPE_BUTTON input device
+ * @param i pointer to an input device
+ * @param data pointer to the data read from the input device
+ * Reset input device if a reset query has been sent to it
+ * @param indev pointer to an input device
+ */
+static void indev_proc_reset_query_handler(lv_indev_t * indev)
+{
+    if(indev->proc.reset_query) {
+        indev->proc.types.pointer.act_obj           = NULL;
+        indev->proc.types.pointer.last_obj          = NULL;
+        indev->proc.types.pointer.last_pressed      = NULL;
+        indev->proc.types.pointer.drag_limit_out    = 0;
+        indev->proc.types.pointer.drag_in_prog      = 0;
+        indev->proc.long_pr_sent                    = 0;
+        indev->proc.pr_timestamp                    = 0;
+        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_throw_vect.x = 0;
+        indev->proc.types.pointer.drag_throw_vect.y = 0;
+        indev->proc.reset_query                     = 0;
+        indev_obj_act                               = NULL;
+    }
+}
+/**
+ * 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
+ * @param obj pointer to a start object, typically the screen
+ * @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 * found_p = NULL;
+
+    /*If the point is on this object check its children too*/
+#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
+    lv_area_t ext_area;
+    ext_area.x1 = obj->coords.x1 - obj->ext_click_pad_hor;
+    ext_area.x2 = obj->coords.x2 + obj->ext_click_pad_hor;
+    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)) {
+#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;
+    ext_area.x2 = obj->coords.x2 + obj->ext_click_pad.x2;
+    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)) {
+#else
+    if(lv_area_is_point_on(&obj->coords, &proc->types.pointer.act_point)) {
+#endif
+        lv_obj_t * i;
+
+        LV_LL_READ(obj->child_ll, i)
+        {
+            found_p = indev_search_obj(proc, i);
+
+            /*If a child was found then break*/
+            if(found_p != NULL) {
+                break;
+            }
+        }
+
+        /*If then the children was not ok, and this obj is clickable
+         * and it or its parent is not hidden then save this object*/
+        if(found_p == NULL && lv_obj_get_click(obj) != false) {
+            lv_obj_t * hidden_i = obj;
+            while(hidden_i != NULL) {
+                if(lv_obj_get_hidden(hidden_i) == true) break;
+                hidden_i = lv_obj_get_parent(hidden_i);
+            }
+            /*No parent found with hidden == true*/
+            if(hidden_i == NULL) found_p = obj;
+        }
+    }
+
+    return found_p;
+}
+
+/**
+ * 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)
+{
+    lv_obj_t * drag_obj    = state->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;
+
+    /*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;
+            drag_just_started                   = true;
+        }
+    }
+
+    /*If the drag limit is exceeded handle the dragging*/
+    if(state->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) {
+
+            uint16_t inv_buf_size =
+                lv_disp_get_inv_buf_size(indev_act->driver.disp); /*Get the 
number of currently invalidated areas*/
+
+            lv_coord_t prev_x     = drag_obj->coords.x1;
+            lv_coord_t prev_y     = drag_obj->coords.y1;
+            lv_coord_t prev_par_w = 
lv_obj_get_width(lv_obj_get_parent(drag_obj));
+            lv_coord_t prev_par_h = 
lv_obj_get_height(lv_obj_get_parent(drag_obj));
+
+            /*Get the coordinates of the object and modify them*/
+            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(drag_just_started) {
+                    act_x += state->types.pointer.drag_sum.x;
+                    act_y += state->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) {
+                if(drag_just_started) {
+                    act_x += state->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) {
+                if(drag_just_started) {
+                    act_y += state->types.pointer.drag_sum.y;
+                }
+                lv_obj_set_y(drag_obj, act_y + state->types.pointer.vect.y);
+            }
+
+            /*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 */
+                lv_coord_t act_par_w = 
lv_obj_get_width(lv_obj_get_parent(drag_obj));
+                lv_coord_t act_par_h = 
lv_obj_get_height(lv_obj_get_parent(drag_obj));
+                if(act_par_w == prev_par_w && act_par_h == prev_par_h) {
+                    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;
+                }
+            }
+        }
+    }
+}
+
+/**
+ * Handle throwing by drag if the drag is ended
+ * @param indev pointer to an input device state
+ */
+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;
+
+    /*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;
+    }
+
+    /*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);
+        return;
+    }
+
+    lv_drag_dir_t allowed_dirs = lv_obj_get_drag_dir(drag_obj);
+
+    /*Reduce the vectors*/
+    proc->types.pointer.drag_throw_vect.x =
+        proc->types.pointer.drag_throw_vect.x * (100 - 
indev_act->driver.drag_throw) / 100;
+    proc->types.pointer.drag_throw_vect.y =
+        proc->types.pointer.drag_throw_vect.y * (100 - 
indev_act->driver.drag_throw) / 100;
+
+    if(proc->types.pointer.drag_throw_vect.x != 0 || 
proc->types.pointer.drag_throw_vect.y != 0) {
+        /*Get the coordinates and modify them*/
+        lv_area_t coords_ori;
+        lv_obj_get_coords(drag_obj, &coords_ori);
+        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);
+
+        lv_area_t coord_new;
+        lv_obj_get_coords(drag_obj, &coord_new);
+
+        /*If non of the coordinates are changed then do not continue throwing*/
+        if((coords_ori.x1 == coord_new.x1 || 
proc->types.pointer.drag_throw_vect.x == 0) &&
+           (coords_ori.y1 == coord_new.y1 || 
proc->types.pointer.drag_throw_vect.y == 0)) {
+            proc->types.pointer.drag_in_prog      = 0;
+            proc->types.pointer.vect.x            = 0;
+            proc->types.pointer.vect.y            = 0;
+            proc->types.pointer.drag_throw_vect.x = 0;
+            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;
+        }
+    }
+    /*If the types.pointer.vectors become 0 -> types.pointer.drag_in_prog = 0 
and send a drag end
+       signal*/
+    else {
+        proc->types.pointer.drag_in_prog = 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;
+    }
+}
+
+/**
+ * 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'
+ * return true if indev query should be immediately truncated.
+ */
+static bool indev_reset_check(lv_indev_proc_t * proc)
+{
+    if(proc->reset_query) {
+        indev_obj_act = NULL;
+    }
+
+    return proc->reset_query ? true : false;
+}
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_indev.h 
b/scriptsrcs/lvgl/src/lv_core/lv_indev.h
new file mode 100755
index 0000000..69ab5a4
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_indev.h
@@ -0,0 +1,159 @@
+/**
+ * @file lv_indev.h
+ *
+ */
+
+#ifndef LV_INDEV_H
+#define LV_INDEV_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_obj.h"
+#include "../lv_hal/lv_hal_indev.h"
+#include "../lv_core/lv_group.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the display input device subsystem
+ */
+void lv_indev_init(void);
+
+/**
+ * Called periodically to read the input devices
+ * @param task pointer to the task itself
+ */
+void lv_indev_read_task(lv_task_t * task);
+
+/**
+ * Get the currently processed input device. Can be used in action functions 
too.
+ * @return pointer to the currently processed input device or NULL if no input 
device processing
+ * right now
+ */
+lv_indev_t * lv_indev_get_act(void);
+
+/**
+ * Get the type of an input device
+ * @param indev pointer to an input device
+ * @return the type of the input device from `lv_hal_indev_type_t` 
(`LV_INDEV_TYPE_...`)
+ */
+lv_indev_type_t lv_indev_get_type(const lv_indev_t * indev);
+
+/**
+ * Reset one or all input devices
+ * @param indev pointer to an input device to reset or NULL to reset all of 
them
+ */
+void lv_indev_reset(lv_indev_t * indev);
+
+/**
+ * Reset the long press state of an input device
+ * @param indev_proc pointer to an input device
+ */
+void lv_indev_reset_long_press(lv_indev_t * indev);
+
+/**
+ * Enable or disable an input devices
+ * @param indev pointer to an input device
+ * @param en true: enable; false: disable
+ */
+void lv_indev_enable(lv_indev_t * indev, bool en);
+
+/**
+ * Set a cursor for a pointer input device (for LV_INPUT_TYPE_POINTER and 
LV_INPUT_TYPE_BUTTON)
+ * @param indev pointer to an input device
+ * @param cur_obj pointer to an object to be used as cursor
+ */
+void lv_indev_set_cursor(lv_indev_t * indev, lv_obj_t * cur_obj);
+
+#if LV_USE_GROUP
+/**
+ * Set a destination group for a keypad input device (for LV_INDEV_TYPE_KEYPAD)
+ * @param indev pointer to an input device
+ * @param group point to a group
+ */
+void lv_indev_set_group(lv_indev_t * indev, lv_group_t * group);
+#endif
+
+/**
+ * Set the an array of points for LV_INDEV_TYPE_BUTTON.
+ * These points will be assigned to the buttons to press a specific point on 
the screen
+ * @param indev pointer to an input device
+ * @param group point to a group
+ */
+void lv_indev_set_button_points(lv_indev_t * indev, const lv_point_t * points);
+
+/**
+ * Get the last point of an input device (for LV_INDEV_TYPE_POINTER and 
LV_INDEV_TYPE_BUTTON)
+ * @param indev pointer to an input device
+ * @param point pointer to a point to store the result
+ */
+void lv_indev_get_point(const lv_indev_t * indev, lv_point_t * point);
+
+/**
+ * Get the last pressed key of an input device (for LV_INDEV_TYPE_KEYPAD)
+ * @param indev pointer to an input device
+ * @return the last pressed key (0 on error)
+ */
+uint32_t lv_indev_get_key(const lv_indev_t * indev);
+
+/**
+ * Check if there is dragging with an input device or not (for 
LV_INDEV_TYPE_POINTER and
+ * LV_INDEV_TYPE_BUTTON)
+ * @param indev pointer to an input device
+ * @return true: drag is in progress
+ */
+bool lv_indev_is_dragging(const lv_indev_t * indev);
+
+/**
+ * Get the vector of dragging of an input device (for LV_INDEV_TYPE_POINTER and
+ * LV_INDEV_TYPE_BUTTON)
+ * @param indev pointer to an input device
+ * @param point pointer to a point to store the vector
+ */
+void lv_indev_get_vect(const lv_indev_t * indev, lv_point_t * point);
+
+/**
+ * Do nothing until the next release
+ * @param indev pointer to an input device
+ */
+void lv_indev_wait_release(lv_indev_t * indev);
+
+/**
+ * Get a pointer to the indev read task to
+ * modify its parameters with `lv_task_...` functions.
+ * @param indev pointer to an inout device
+ * @return pointer to the indev read refresher task. (NULL on error)
+ */
+lv_task_t * lv_indev_get_read_task(lv_disp_t * indev);
+
+/**
+ * Gets a pointer to the currently active object in indev proc functions.
+ * NULL if no object is currently being handled or if groups aren't used.
+ * @return pointer to currently active object
+ */
+lv_obj_t * lv_indev_get_obj_act(void);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_INDEV_H*/
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_obj.c 
b/scriptsrcs/lvgl/src/lv_core/lv_obj.c
new file mode 100755
index 0000000..089c5e3
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_obj.c
@@ -0,0 +1,2606 @@
+/**
+ * @file lv_base_obj.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_obj.h"
+#include "lv_indev.h"
+#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_hal/lv_hal.h"
+#include <stdint.h>
+#include <string.h>
+#include "../lv_misc/lv_gc.h"
+#include "../lv_misc/lv_math.h"
+
+#if defined(LV_GC_INCLUDE)
+#include LV_GC_INCLUDE
+#endif /* LV_ENABLE_GC */
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_obj"
+#define LV_OBJ_DEF_WIDTH (LV_DPI)
+#define LV_OBJ_DEF_HEIGHT (2 * LV_DPI / 3)
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+typedef struct _lv_event_temp_data
+{
+    lv_obj_t * obj;
+    bool deleted;
+    struct _lv_event_temp_data * prev;
+} lv_event_temp_data_t;
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static void refresh_children_position(lv_obj_t * obj, lv_coord_t x_diff, 
lv_coord_t y_diff);
+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_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static bool lv_initialized = false;
+static lv_event_temp_data_t * event_temp_data_head;
+static const void * event_act_data;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Init. the 'lv' library.
+ */
+void lv_init(void)
+{
+    /* Do nothing if already initialized */
+    if(lv_initialized) {
+        LV_LOG_WARN("lv_init: already inited");
+        return;
+    }
+
+    LV_LOG_TRACE("lv_init started");
+
+    /*Initialize the lv_misc modules*/
+    lv_mem_init();
+    lv_task_core_init();
+
+#if LV_USE_FILESYSTEM
+    lv_fs_init();
+#endif
+
+#if LV_USE_ANIMATION
+    lv_anim_core_init();
+#endif
+
+#if LV_USE_GROUP
+    lv_group_init();
+#endif
+
+    /*Init. the sstyles*/
+    lv_style_init();
+
+    /*Initialize the screen refresh system*/
+    lv_refr_init();
+
+    lv_ll_init(&LV_GC_ROOT(_lv_disp_ll), sizeof(lv_disp_t));
+    lv_ll_init(&LV_GC_ROOT(_lv_indev_ll), sizeof(lv_indev_t));
+
+    /*Init the input device handling*/
+    lv_indev_init();
+
+    lv_img_decoder_init();
+    lv_img_cache_set_size(LV_IMG_CACHE_DEF_SIZE);
+
+    lv_initialized = true;
+    LV_LOG_INFO("lv_init ready");
+}
+
+/*--------------------
+ * Create and delete
+ *-------------------*/
+
+/**
+ * Create a basic object
+ * @param parent pointer to a parent object.
+ *                  If NULL then a screen will be created
+ * @param copy pointer to a base object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the new object
+ */
+lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
+{
+
+    lv_obj_t * new_obj = NULL;
+    /*Create a screen if the parent is NULL*/
+    if(parent == NULL) {
+        LV_LOG_TRACE("Screen create started");
+        lv_disp_t * disp = lv_disp_get_default();
+        if(!disp) {
+            LV_LOG_WARN("lv_obj_create: not display created to so far. No 
place to assign the new screen");
+            return NULL;
+        }
+
+        new_obj = lv_ll_ins_head(&disp->scr_ll);
+        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;
+        new_obj->coords.x2    = lv_disp_get_hor_res(NULL) - 1;
+        new_obj->coords.y2    = lv_disp_get_ver_res(NULL) - 1;
+        new_obj->ext_draw_pad = 0;
+
+#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
+
+#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
+        new_obj->ext_click_pad_hor = 0;
+        new_obj->ext_click_pad_ver = 0;
+#endif
+
+        /*Init realign*/
+#if LV_USE_OBJ_REALIGN
+        new_obj->realign.align        = LV_ALIGN_CENTER;
+        new_obj->realign.xofs         = 0;
+        new_obj->realign.yofs         = 0;
+        new_obj->realign.base         = NULL;
+        new_obj->realign.auto_realign = 0;
+#endif
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            new_obj->style_p = th->style.scr;
+        } else {
+            new_obj->style_p = &lv_style_scr;
+        }
+
+        /*Init. user date*/
+#if LV_USE_USER_DATA
+        memset(&new_obj->user_data, 0, sizeof(lv_obj_user_data_t));
+#endif
+
+#if LV_USE_GROUP
+        new_obj->group_p = NULL;
+#endif
+        /*Set attributes*/
+        new_obj->click        = 0;
+        new_obj->drag         = 0;
+        new_obj->drag_throw   = 0;
+        new_obj->drag_parent  = 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;
+
+        LV_LOG_INFO("Screen create ready");
+    }
+    /*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_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.y1    = parent->coords.y1;
+        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
+        memset(&new_obj->ext_click_pad, 0, sizeof(new_obj->ext_click_pad));
+#endif
+
+#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
+        new_obj->ext_click_pad_hor = 0;
+        new_obj->ext_click_pad_ver = 0;
+#endif
+
+        /*Init realign*/
+#if LV_USE_OBJ_REALIGN
+        new_obj->realign.align        = LV_ALIGN_CENTER;
+        new_obj->realign.xofs         = 0;
+        new_obj->realign.yofs         = 0;
+        new_obj->realign.base         = NULL;
+        new_obj->realign.auto_realign = 0;
+#endif
+        /*Set appearance*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            new_obj->style_p = th->style.panel;
+        } else {
+            new_obj->style_p = &lv_style_plain_color;
+        }
+
+#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
+
+#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
+        new_obj->ext_click_pad_hor = 0;
+        new_obj->ext_click_pad_ver = 0;
+#endif
+
+        /*Init. user date*/
+#if LV_USE_USER_DATA
+        memset(&new_obj->user_data, 0, sizeof(lv_obj_user_data_t));
+#endif
+
+#if LV_USE_GROUP
+        new_obj->group_p = NULL;
+#endif
+
+        /*Set attributes*/
+        new_obj->click        = 1;
+        new_obj->drag         = 0;
+        new_obj->drag_dir     = LV_DRAG_DIR_ALL;
+        new_obj->drag_throw   = 0;
+        new_obj->drag_parent  = 0;
+        new_obj->hidden       = 0;
+        new_obj->top          = 0;
+        new_obj->protect      = LV_PROTECT_NONE;
+        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, &copy->coords);
+        new_obj->ext_draw_pad = copy->ext_draw_pad;
+
+#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
+        lv_area_copy(&new_obj->ext_click_pad, &copy->ext_click_pad);
+#endif
+
+#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
+        new_obj->ext_click_pad_hor = copy->ext_click_pad_hor;
+        new_obj->ext_click_pad_ver = copy->ext_click_pad_ver;
+#endif
+
+        /*Set free data*/
+#if LV_USE_USER_DATA
+        memcpy(&new_obj->user_data, &copy->user_data, 
sizeof(lv_obj_user_data_t));
+#endif
+        /*Copy realign*/
+#if LV_USE_OBJ_REALIGN
+        new_obj->realign.align        = copy->realign.align;
+        new_obj->realign.xofs         = copy->realign.xofs;
+        new_obj->realign.yofs         = copy->realign.yofs;
+        new_obj->realign.base         = copy->realign.base;
+        new_obj->realign.auto_realign = copy->realign.auto_realign;
+#endif
+
+        /*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;
+
+        /*Copy attributes*/
+        new_obj->click        = copy->click;
+        new_obj->drag         = copy->drag;
+        new_obj->drag_dir     = copy->drag_dir;
+        new_obj->drag_throw   = copy->drag_throw;
+        new_obj->drag_parent  = copy->drag_parent;
+        new_obj->hidden       = copy->hidden;
+        new_obj->top          = copy->top;
+        new_obj->parent_event = copy->parent_event;
+
+        new_obj->opa_scale_en = copy->opa_scale_en;
+        new_obj->protect      = copy->protect;
+        new_obj->opa_scale    = copy->opa_scale;
+
+        new_obj->style_p = copy->style_p;
+
+#if LV_USE_GROUP
+        /*Add to the same group*/
+        if(copy->group_p != NULL) {
+            lv_group_add_obj(copy->group_p, new_obj);
+        }
+#endif
+
+        /*Set the same coordinates for non screen objects*/
+        if(lv_obj_get_parent(copy) != NULL && parent != NULL) {
+            lv_obj_set_pos(new_obj, lv_obj_get_x(copy), lv_obj_get_y(copy));
+        } else {
+            lv_obj_set_pos(new_obj, 0, 0);
+        }
+
+        LV_LOG_INFO("Object create ready");
+    }
+
+    /*Send a signal to the parent to notify it about the new child*/
+    if(parent != NULL) {
+        parent->signal_cb(parent, LV_SIGNAL_CHILD_CHG, new_obj);
+
+        /*Invalidate the area if not screen created*/
+        lv_obj_invalidate(new_obj);
+    }
+
+    return new_obj;
+}
+
+/**
+ * Delete 'obj' and all of its children
+ * @param obj pointer to an object to delete
+ * @return LV_RES_INV because the object is deleted
+ */
+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*/
+#if LV_USE_GROUP
+    lv_group_t * group = lv_obj_get_group(obj);
+    if(group) lv_group_remove_obj(obj);
+#endif
+
+        /*Remove the animations from this object*/
+#if LV_USE_ANIMATION
+    lv_anim_del(obj, NULL);
+#endif
+
+    /*Recursively delete the children*/
+    lv_obj_t * i;
+    lv_obj_t * i_next;
+    i = lv_ll_get_head(&(obj->child_ll));
+    while(i != NULL) {
+        /*Get the next object before delete this*/
+        i_next = lv_ll_get_next(&(obj->child_ll), i);
+
+        /*Call the recursive del to the child too*/
+        delete_children(i);
+
+        /*Set i to the next node*/
+        i = i_next;
+    }
+
+    /*Let the user free the resources used in `LV_EVENT_DELETE`*/
+    lv_event_send(obj, LV_EVENT_DELETE, NULL);
+
+    lv_event_mark_deleted(obj);
+
+    /* Reset all input devices if the object to delete is used*/
+    lv_indev_t * indev = lv_indev_get_next(NULL);
+    while(indev) {
+        if(indev->proc.types.pointer.act_obj == obj || 
indev->proc.types.pointer.last_obj == obj) {
+            lv_indev_reset(indev);
+        }
+        if(indev->proc.types.pointer.last_pressed == obj) {
+            indev->proc.types.pointer.last_pressed = NULL;
+        }
+
+#if LV_USE_GROUP
+        if(indev->group == group && obj == lv_indev_get_obj_act()) {
+            lv_indev_reset(indev);
+        }
+#endif
+        indev = lv_indev_get_next(indev);
+    }
+
+    /* All children deleted.
+     * 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_rem(&d->scr_ll, obj);
+    } else {
+        lv_ll_rem(&(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*/
+
+    /*Send a signal to the parent to notify it about the child delete*/
+    if(par != NULL) {
+        par->signal_cb(par, LV_SIGNAL_CHILD_CHG, NULL);
+    }
+
+    return LV_RES_INV;
+}
+
+/**
+ * Helper function for asynchronously deleting objects.
+ * Useful for cases where you can't delete an object directly in an 
`LV_EVENT_DELETE` handler (i.e. parent).
+ * @param obj object to delete
+ * @see lv_async_call
+ */
+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);
+}
+
+/**
+ * Delete all children of an object
+ * @param obj pointer to an object
+ */
+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) {
+        /* Read the next child before deleting the current
+         * because the next couldn't be read from a deleted (invalid) node*/
+        child_next = lv_obj_get_child(obj, child);
+        lv_obj_del(child);
+        child = child_next;
+    }
+}
+
+/**
+ * Mark the object as invalid therefore its current position will be redrawn 
by 'lv_refr_task'
+ * @param obj pointer to an object
+ */
+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)'*/
+    lv_obj_t * obj_scr = lv_obj_get_screen(obj);
+    lv_disp_t * disp   = lv_obj_get_disp(obj_scr);
+    if(obj_scr == lv_disp_get_scr_act(disp) || obj_scr == 
lv_disp_get_layer_top(disp) ||
+       obj_scr == lv_disp_get_layer_sys(disp)) {
+        /*Truncate recursively to the parents*/
+        lv_area_t area_trunc;
+        lv_obj_t * par = lv_obj_get_parent(obj);
+        bool union_ok  = true;
+        /*Start with the original coordinates*/
+        lv_coord_t ext_size = obj->ext_draw_pad;
+        lv_area_copy(&area_trunc, &obj->coords);
+        area_trunc.x1 -= ext_size;
+        area_trunc.y1 -= ext_size;
+        area_trunc.x2 += ext_size;
+        area_trunc.y2 += ext_size;
+
+        /*Check through all parents*/
+        while(par != NULL) {
+            union_ok = lv_area_intersect(&area_trunc, &area_trunc, 
&par->coords);
+            if(union_ok == false) break;       /*If no common parts with 
parent break;*/
+            if(lv_obj_get_hidden(par)) return; /*If the parent is hidden then 
the child is hidden and won't be drawn*/
+
+            par = lv_obj_get_parent(par);
+        }
+
+        if(union_ok) lv_inv_area(disp, &area_trunc);
+    }
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/*--------------------
+ * Parent/children set
+ *--------------------*/
+
+/**
+ * Set a new parent for an object. Its relative position will be the same.
+ * @param obj pointer to an object. Can't be a screen.
+ * @param parent pointer to the new parent object. (Can't be NULL)
+ */
+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;
+    }
+
+    if(parent == NULL) {
+        LV_LOG_WARN("Can't set parent == NULL to an object");
+        return;
+    }
+
+    lv_obj_invalidate(obj);
+
+    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_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);
+
+    /*Notify the original parent because one of its children is lost*/
+    old_par->signal_cb(old_par, LV_SIGNAL_CHILD_CHG, NULL);
+
+    /*Notify the new parent about the child*/
+    parent->signal_cb(parent, LV_SIGNAL_CHILD_CHG, obj);
+
+    lv_obj_invalidate(obj);
+}
+
+/**
+ * Move and object to the foreground
+ * @param obj pointer to an object
+ */
+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*/
+    if(lv_ll_get_head(&parent->child_ll) == obj) return;
+
+    lv_obj_invalidate(parent);
+
+    lv_ll_chg_list(&parent->child_ll, &parent->child_ll, obj, true);
+
+    /*Notify the new parent about the child*/
+    parent->signal_cb(parent, LV_SIGNAL_CHILD_CHG, obj);
+
+    lv_obj_invalidate(parent);
+}
+
+/**
+ * Move and object to the background
+ * @param obj pointer to an object
+ */
+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*/
+    if(lv_ll_get_tail(&parent->child_ll) == obj) return;
+
+    lv_obj_invalidate(parent);
+
+    lv_ll_chg_list(&parent->child_ll, &parent->child_ll, obj, false);
+
+    /*Notify the new parent about the child*/
+    parent->signal_cb(parent, LV_SIGNAL_CHILD_CHG, obj);
+
+    lv_obj_invalidate(parent);
+}
+
+/*--------------------
+ * Coordinate set
+ * ------------------*/
+
+/**
+ * Set relative the position of an object (relative to the parent)
+ * @param obj pointer to an object
+ * @param x new distance from the left side of the parent
+ * @param y new distance from the top of the parent
+ */
+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;
+
+    x = x + par->coords.x1;
+    y = y + par->coords.y1;
+
+    /*Calculate and set the movement*/
+    lv_point_t diff;
+    diff.x = x - obj->coords.x1;
+    diff.y = y - obj->coords.y1;
+
+    /* Do nothing if the position is not changed */
+    /* It is very important else recursive positioning can
+     * occur without position change*/
+    if(diff.x == 0 && diff.y == 0) return;
+
+    /*Invalidate the original area*/
+    lv_obj_invalidate(obj);
+
+    /*Save the original coordinates*/
+    lv_area_t ori;
+    lv_obj_get_coords(obj, &ori);
+
+    obj->coords.x1 += diff.x;
+    obj->coords.y1 += diff.y;
+    obj->coords.x2 += diff.x;
+    obj->coords.y2 += diff.y;
+
+    refresh_children_position(obj, diff.x, diff.y);
+
+    /*Inform the object about its new coordinates*/
+    obj->signal_cb(obj, LV_SIGNAL_CORD_CHG, &ori);
+
+    /*Send a signal to the parent too*/
+    par->signal_cb(par, LV_SIGNAL_CHILD_CHG, obj);
+
+    /*Invalidate the new area*/
+    lv_obj_invalidate(obj);
+}
+
+/**
+ * Set the x coordinate of a object
+ * @param obj pointer to an object
+ * @param x new distance from the left side from the parent
+ */
+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));
+}
+
+/**
+ * Set the y coordinate of a object
+ * @param obj pointer to an object
+ * @param y new distance from the top of the parent
+ */
+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);
+}
+
+/**
+ * Set the size of an object
+ * @param obj pointer to an object
+ * @param w new width
+ * @param h new height
+ */
+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
+     * occur without size change*/
+    if(lv_obj_get_width(obj) == w && lv_obj_get_height(obj) == h) {
+        return;
+    }
+
+    /*Invalidate the original area*/
+    lv_obj_invalidate(obj);
+
+    /*Save the original coordinates*/
+    lv_area_t ori;
+    lv_obj_get_coords(obj, &ori);
+
+    /*Set the length and height*/
+    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);
+
+    /*Send a signal to the parent too*/
+    lv_obj_t * par = lv_obj_get_parent(obj);
+    if(par != NULL) par->signal_cb(par, LV_SIGNAL_CHILD_CHG, obj);
+
+    /*Tell the children the parent's size has changed*/
+    lv_obj_t * i;
+    LV_LL_READ(obj->child_ll, i)
+    {
+        i->signal_cb(i, LV_SIGNAL_PARENT_SIZE_CHG, NULL);
+    }
+
+    /*Invalidate the new area*/
+    lv_obj_invalidate(obj);
+
+    /*Automatically realign the object if required*/
+#if LV_USE_OBJ_REALIGN
+    if(obj->realign.auto_realign) lv_obj_realign(obj);
+#endif
+}
+
+/**
+ * Set the width of an object
+ * @param obj pointer to an object
+ * @param w new width
+ */
+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));
+}
+
+/**
+ * Set the height of an object
+ * @param obj pointer to an object
+ * @param h new height
+ */
+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);
+}
+
+/**
+ * Align an object to an other object.
+ * @param obj pointer to an object to align
+ * @param base pointer to an object (if NULL the parent is used). 'obj' will 
be aligned to it.
+ * @param align type of alignment (see 'lv_align_t' enum)
+ * @param x_mod x coordinate shift after alignment
+ * @param y_mod y coordinate shift after alignment
+ */
+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);
+
+    if(base == NULL) {
+        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;
+            new_y = lv_obj_get_height(base) / 2 - lv_obj_get_height(obj) / 2;
+            break;
+
+        case LV_ALIGN_IN_TOP_LEFT:
+            new_x = 0;
+            new_y = 0;
+            break;
+        case LV_ALIGN_IN_TOP_MID:
+            new_x = lv_obj_get_width(base) / 2 - lv_obj_get_width(obj) / 2;
+            new_y = 0;
+            break;
+
+        case LV_ALIGN_IN_TOP_RIGHT:
+            new_x = lv_obj_get_width(base) - lv_obj_get_width(obj);
+            new_y = 0;
+            break;
+
+        case LV_ALIGN_IN_BOTTOM_LEFT:
+            new_x = 0;
+            new_y = lv_obj_get_height(base) - lv_obj_get_height(obj);
+            break;
+        case LV_ALIGN_IN_BOTTOM_MID:
+            new_x = lv_obj_get_width(base) / 2 - lv_obj_get_width(obj) / 2;
+            new_y = lv_obj_get_height(base) - lv_obj_get_height(obj);
+            break;
+
+        case LV_ALIGN_IN_BOTTOM_RIGHT:
+            new_x = lv_obj_get_width(base) - lv_obj_get_width(obj);
+            new_y = lv_obj_get_height(base) - lv_obj_get_height(obj);
+            break;
+
+        case LV_ALIGN_IN_LEFT_MID:
+            new_x = 0;
+            new_y = lv_obj_get_height(base) / 2 - lv_obj_get_height(obj) / 2;
+            break;
+
+        case LV_ALIGN_IN_RIGHT_MID:
+            new_x = lv_obj_get_width(base) - lv_obj_get_width(obj);
+            new_y = lv_obj_get_height(base) / 2 - lv_obj_get_height(obj) / 2;
+            break;
+
+        case LV_ALIGN_OUT_TOP_LEFT:
+            new_x = 0;
+            new_y = -lv_obj_get_height(obj);
+            break;
+
+        case LV_ALIGN_OUT_TOP_MID:
+            new_x = lv_obj_get_width(base) / 2 - lv_obj_get_width(obj) / 2;
+            new_y = -lv_obj_get_height(obj);
+            break;
+
+        case LV_ALIGN_OUT_TOP_RIGHT:
+            new_x = lv_obj_get_width(base) - lv_obj_get_width(obj);
+            new_y = -lv_obj_get_height(obj);
+            break;
+
+        case LV_ALIGN_OUT_BOTTOM_LEFT:
+            new_x = 0;
+            new_y = lv_obj_get_height(base);
+            break;
+
+        case LV_ALIGN_OUT_BOTTOM_MID:
+            new_x = lv_obj_get_width(base) / 2 - lv_obj_get_width(obj) / 2;
+            new_y = lv_obj_get_height(base);
+            break;
+
+        case LV_ALIGN_OUT_BOTTOM_RIGHT:
+            new_x = lv_obj_get_width(base) - lv_obj_get_width(obj);
+            new_y = lv_obj_get_height(base);
+            break;
+
+        case LV_ALIGN_OUT_LEFT_TOP:
+            new_x = -lv_obj_get_width(obj);
+            new_y = 0;
+            break;
+
+        case LV_ALIGN_OUT_LEFT_MID:
+            new_x = -lv_obj_get_width(obj);
+            new_y = lv_obj_get_height(base) / 2 - lv_obj_get_height(obj) / 2;
+            break;
+
+        case LV_ALIGN_OUT_LEFT_BOTTOM:
+            new_x = -lv_obj_get_width(obj);
+            new_y = lv_obj_get_height(base) - lv_obj_get_height(obj);
+            break;
+
+        case LV_ALIGN_OUT_RIGHT_TOP:
+            new_x = lv_obj_get_width(base);
+            new_y = 0;
+            break;
+
+        case LV_ALIGN_OUT_RIGHT_MID:
+            new_x = lv_obj_get_width(base);
+            new_y = lv_obj_get_height(base) / 2 - lv_obj_get_height(obj) / 2;
+            break;
+
+        case LV_ALIGN_OUT_RIGHT_BOTTOM:
+            new_x = lv_obj_get_width(base);
+            new_y = lv_obj_get_height(base) - lv_obj_get_height(obj);
+            break;
+    }
+
+    /*Bring together the coordination system of base and obj*/
+    lv_obj_t * par        = lv_obj_get_parent(obj);
+    lv_coord_t base_abs_x = base->coords.x1;
+    lv_coord_t base_abs_y = base->coords.y1;
+    lv_coord_t par_abs_x  = par->coords.x1;
+    lv_coord_t par_abs_y  = par->coords.y1;
+    new_x += x_mod + base_abs_x;
+    new_y += y_mod + base_abs_y;
+    new_x -= par_abs_x;
+    new_y -= par_abs_y;
+
+    lv_obj_set_pos(obj, new_x, new_y);
+
+#if LV_USE_OBJ_REALIGN
+    /*Save the last align parameters to use them in `lv_obj_realign`*/
+    obj->realign.align       = align;
+    obj->realign.xofs        = x_mod;
+    obj->realign.yofs        = y_mod;
+    obj->realign.base        = base;
+    obj->realign.origo_align = 0;
+#endif
+}
+
+/**
+ * Align an object's middle point to an other object.
+ * @param obj pointer to an object to align
+ * @param base pointer to an object (if NULL the parent is used). 'obj' will 
be aligned to it.
+ * @param align type of alignment (see 'lv_align_t' enum)
+ * @param x_mod x coordinate shift after alignment
+ * @param y_mod y coordinate shift after alignment
+ */
+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);
+
+    lv_coord_t obj_w_half = lv_obj_get_width(obj) / 2;
+    lv_coord_t obj_h_half = lv_obj_get_height(obj) / 2;
+
+    if(base == NULL) {
+        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;
+            new_y = lv_obj_get_height(base) / 2 - obj_h_half;
+            break;
+
+        case LV_ALIGN_IN_TOP_LEFT:
+            new_x = -obj_w_half;
+            new_y = -obj_h_half;
+            break;
+        case LV_ALIGN_IN_TOP_MID:
+            new_x = lv_obj_get_width(base) / 2 - obj_w_half;
+            new_y = -obj_h_half;
+            break;
+
+        case LV_ALIGN_IN_TOP_RIGHT:
+            new_x = lv_obj_get_width(base) - obj_w_half;
+            new_y = -obj_h_half;
+            break;
+
+        case LV_ALIGN_IN_BOTTOM_LEFT:
+            new_x = -obj_w_half;
+            new_y = lv_obj_get_height(base) - obj_h_half;
+            break;
+        case LV_ALIGN_IN_BOTTOM_MID:
+            new_x = lv_obj_get_width(base) / 2 - obj_w_half;
+            new_y = lv_obj_get_height(base) - obj_h_half;
+            break;
+
+        case LV_ALIGN_IN_BOTTOM_RIGHT:
+            new_x = lv_obj_get_width(base) - obj_w_half;
+            new_y = lv_obj_get_height(base) - obj_h_half;
+            break;
+
+        case LV_ALIGN_IN_LEFT_MID:
+            new_x = -obj_w_half;
+            new_y = lv_obj_get_height(base) / 2 - obj_h_half;
+            break;
+
+        case LV_ALIGN_IN_RIGHT_MID:
+            new_x = lv_obj_get_width(base) - obj_w_half;
+            new_y = lv_obj_get_height(base) / 2 - obj_h_half;
+            break;
+
+        case LV_ALIGN_OUT_TOP_LEFT:
+            new_x = -obj_w_half;
+            new_y = -obj_h_half;
+            break;
+
+        case LV_ALIGN_OUT_TOP_MID:
+            new_x = lv_obj_get_width(base) / 2 - obj_w_half;
+            new_y = -obj_h_half;
+            break;
+
+        case LV_ALIGN_OUT_TOP_RIGHT:
+            new_x = lv_obj_get_width(base) - obj_w_half;
+            new_y = -obj_h_half;
+            break;
+
+        case LV_ALIGN_OUT_BOTTOM_LEFT:
+            new_x = -obj_w_half;
+            new_y = lv_obj_get_height(base) - obj_h_half;
+            break;
+
+        case LV_ALIGN_OUT_BOTTOM_MID:
+            new_x = lv_obj_get_width(base) / 2 - obj_w_half;
+            new_y = lv_obj_get_height(base) - obj_h_half;
+            break;
+
+        case LV_ALIGN_OUT_BOTTOM_RIGHT:
+            new_x = lv_obj_get_width(base) - obj_w_half;
+            new_y = lv_obj_get_height(base) - obj_h_half;
+            break;
+
+        case LV_ALIGN_OUT_LEFT_TOP:
+            new_x = -obj_w_half;
+            new_y = -obj_h_half;
+            break;
+
+        case LV_ALIGN_OUT_LEFT_MID:
+            new_x = -obj_w_half;
+            new_y = lv_obj_get_height(base) / 2 - obj_h_half;
+            break;
+
+        case LV_ALIGN_OUT_LEFT_BOTTOM:
+            new_x = -obj_w_half;
+            new_y = lv_obj_get_height(base) - obj_h_half;
+            break;
+
+        case LV_ALIGN_OUT_RIGHT_TOP:
+            new_x = lv_obj_get_width(base) - obj_w_half;
+            new_y = -obj_h_half;
+            break;
+
+        case LV_ALIGN_OUT_RIGHT_MID:
+            new_x = lv_obj_get_width(base) - obj_w_half;
+            new_y = lv_obj_get_height(base) / 2 - obj_h_half;
+            break;
+
+        case LV_ALIGN_OUT_RIGHT_BOTTOM:
+            new_x = lv_obj_get_width(base) - obj_w_half;
+            new_y = lv_obj_get_height(base) - obj_h_half;
+            break;
+    }
+
+    /*Bring together the coordination system of base and obj*/
+    lv_obj_t * par        = lv_obj_get_parent(obj);
+    lv_coord_t base_abs_x = base->coords.x1;
+    lv_coord_t base_abs_y = base->coords.y1;
+    lv_coord_t par_abs_x  = par->coords.x1;
+    lv_coord_t par_abs_y  = par->coords.y1;
+    new_x += x_mod + base_abs_x;
+    new_y += y_mod + base_abs_y;
+    new_x -= par_abs_x;
+    new_y -= par_abs_y;
+
+    lv_obj_set_pos(obj, new_x, new_y);
+
+#if LV_USE_OBJ_REALIGN
+    /*Save the last align parameters to use them in `lv_obj_realign`*/
+    obj->realign.align       = align;
+    obj->realign.xofs        = x_mod;
+    obj->realign.yofs        = y_mod;
+    obj->realign.base        = base;
+    obj->realign.origo_align = 1;
+#endif
+}
+
+/**
+ * Realign the object based on the last `lv_obj_align` parameters.
+ * @param obj pointer to an object
+ */
+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);
+    else
+        lv_obj_align(obj, obj->realign.base, obj->realign.align, 
obj->realign.xofs, obj->realign.yofs);
+#else
+    (void)obj;
+    LV_LOG_WARN("lv_obj_realaign: no effect because LV_USE_OBJ_REALIGN = 0");
+#endif
+}
+
+/**
+ * Enable the automatic realign of the object when its size has changed based 
on the last
+ * `lv_obj_align` parameters.
+ * @param obj pointer to an object
+ * @param en true: enable auto realign; false: disable auto realign
+ */
+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
+    (void)obj;
+    (void)en;
+    LV_LOG_WARN("lv_obj_set_auto_realign: no effect because LV_USE_OBJ_REALIGN 
= 0");
+#endif
+}
+
+
+/**
+ * Set the size of an extended clickable area
+ * If TINY mode is used, only the largest of the horizontal and vertical 
padding
+ * values are considered.
+ * @param obj pointer to an object
+ * @param left extended clickable are on the left [px]
+ * @param right extended clickable are on the right [px]
+ * @param top extended clickable are on the top [px]
+ * @param bottom extended clickable are on the bottom [px]
+ */
+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;
+    obj->ext_click_pad.y1 = top;
+    obj->ext_click_pad.y2 = bottom;
+#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
+    obj->ext_click_pad_hor = LV_MATH_MAX(left, right);
+    obj->ext_click_pad_ver = LV_MATH_MAX(top, bottom);
+#else
+    (void)obj;    /*Unused*/
+    (void)left;   /*Unused*/
+    (void)right;  /*Unused*/
+    (void)top;    /*Unused*/
+    (void)bottom; /*Unused*/
+#endif
+}
+
+/*---------------------
+ * Appearance set
+ *--------------------*/
+
+/**
+ * Set a new style for an object
+ * @param obj pointer to an object
+ * @param style_p pointer to the new style
+ */
+void lv_obj_set_style(lv_obj_t * obj, const lv_style_t * style)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+    LV_ASSERT_STYLE(style);
+
+    obj->style_p = style;
+
+    /*Send a signal about style change to every children with NULL style*/
+    refresh_children_style(obj);
+
+    /*Notify the object about the style change too*/
+    lv_obj_refresh_style(obj);
+}
+
+/**
+ * Notify an object about its style is modified
+ * @param obj pointer to an object
+ */
+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);
+}
+
+/**
+ * Notify all object if a style is modified
+ * @param style pointer to a style. Only the objects with this style will be 
notified
+ *               (NULL to notify all objects)
+ */
+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) {
+        lv_obj_t * i;
+        LV_LL_READ(d->scr_ll, i)
+        {
+            if(i->style_p == style || style == NULL) {
+                lv_obj_refresh_style(i);
+            }
+
+            report_style_mod_core(style, i);
+        }
+        d = lv_disp_get_next(d);
+    }
+}
+
+/*-----------------
+ * Attribute set
+ *----------------*/
+
+/**
+ * Hide an object. It won't be visible and clickable.
+ * @param obj pointer to an object
+ * @param en true: hide the object
+ */
+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;
+
+    if(!obj->hidden) lv_obj_invalidate(obj); /*Invalidate when not hidden 
(hidden objects are ignored) */
+
+    lv_obj_t * par = lv_obj_get_parent(obj);
+    par->signal_cb(par, LV_SIGNAL_CHILD_CHG, obj);
+}
+
+/**
+ * Enable or disable the clicking of an object
+ * @param obj pointer to an object
+ * @param en true: make the object clickable
+ */
+void lv_obj_set_click(lv_obj_t * obj, bool en)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    obj->click = (en == true ? 1 : 0);
+}
+
+/**
+ * Enable to bring this object to the foreground if it
+ * or any of its children is clicked
+ * @param obj pointer to an object
+ * @param en true: enable the auto top feature
+ */
+void lv_obj_set_top(lv_obj_t * obj, bool en)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    obj->top = (en == true ? 1 : 0);
+}
+
+/**
+ * Enable the dragging of an object
+ * @param obj pointer to an object
+ * @param en true: make the object dragable
+ */
+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);
+}
+
+/**
+ * Set the directions an object can be dragged in
+ * @param obj pointer to an object
+ * @param drag_dir bitwise OR of allowed directions an object can be dragged in
+ */
+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*/
+}
+
+/**
+ * Enable the throwing of an object after is is dragged
+ * @param obj pointer to an object
+ * @param en true: enable the drag throw
+ */
+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);
+}
+
+/**
+ * Enable to use parent for drag related operations.
+ * If trying to drag the object the parent will be moved instead
+ * @param obj pointer to an object
+ * @param en true: enable the 'drag parent' for the object
+ */
+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);
+}
+
+/**
+ * Propagate the events to the parent too
+ * @param obj pointer to an object
+ * @param en true: enable the event propagation
+ */
+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
+ * @param en true: opa scaling is enabled for this object and all children; 
false: no opa scaling
+ */
+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;
+}
+
+/**
+ * Set the opa scale of an object.
+ * The opacity of this object and all it's children will be scaled down with 
this factor.
+ * `lv_obj_set_opa_scale_enable(obj, true)` needs to be called to enable it.
+ * (not for all children just for the parent where to start the opa scaling)
+ * @param obj pointer to an object
+ * @param opa_scale a factor to scale down opacity [0..255]
+ */
+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);
+}
+
+/**
+ * Set a bit or bits in the protect filed
+ * @param obj pointer to an object
+ * @param prot 'OR'-ed values from `lv_protect_t`
+ */
+void lv_obj_set_protect(lv_obj_t * obj, uint8_t prot)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    obj->protect |= prot;
+}
+
+/**
+ * Clear a bit or bits in the protect filed
+ * @param obj pointer to an object
+ * @param prot 'OR'-ed values from `lv_protect_t`
+ */
+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;
+}
+
+/**
+ * Set a an event handler function for an object.
+ * Used by the user to react on event which happens with the object.
+ * @param obj pointer to an object
+ * @param event_cb the new event function
+ */
+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;
+}
+
+/**
+ * Send an event to the object
+ * @param obj pointer to an object
+ * @param event the type of the event from `lv_event_t`
+ * @param data arbitrary data depending on the object type and the event. 
(Usually `NULL`)
+ * @return LV_RES_OK: `obj` was not deleted in the event; LV_RES_INV: `obj` 
was deleted in the event
+ */
+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;
+}
+
+/**
+ * Call an event function with an object, event, and data.
+ * @param event_xcb an event callback function. If `NULL` `LV_RES_OK` will 
return without any actions.
+ *        (the 'x' in the argument name indicates that its not a fully generic 
function because it not follows
+ *         the `func_name(object, callback, ...)` convention)
+ * @param obj pointer to an object to associate with the event (can be `NULL` 
to simply call the `event_cb`)
+ * @param event an event
+ * @param data pointer to a custom data
+ * @return LV_RES_OK: `obj` was not deleted in the event; LV_RES_INV: `obj` 
was deleted in the event
+ */
+lv_res_t lv_event_send_func(lv_event_cb_t event_xcb, lv_obj_t * obj, 
lv_event_t event, const void * data)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    /* Build a simple linked list from the objects used in the events
+     * It's important to know if an this object was deleted by a nested event
+     * called from this `even_cb`. */
+    lv_event_temp_data_t event_temp_data;
+    event_temp_data.obj     = obj;
+    event_temp_data.deleted = false;
+    event_temp_data.prev    = NULL;
+
+    if(event_temp_data_head) {
+        event_temp_data.prev = event_temp_data_head;
+    }
+    event_temp_data_head = &event_temp_data;
+
+    const void * event_act_data_save = event_act_data;
+    event_act_data                   = data;
+
+    /*Call the input device's feedback callback if set*/
+    lv_indev_t * indev_act = lv_indev_get_act();
+    if(indev_act) {
+        if(indev_act->driver.feedback_cb) 
indev_act->driver.feedback_cb(&indev_act->driver, event);
+    }
+
+    /*Call the event callback itself*/
+    if(event_xcb) event_xcb(obj, event);
+
+    /*Restore the event data*/
+    event_act_data = event_act_data_save;
+
+    /*Remove this element from the list*/
+    event_temp_data_head = event_temp_data_head->prev;
+
+    if(event_temp_data.deleted) {
+        return LV_RES_INV;
+    }
+
+    if(obj) {
+        if(obj->parent_event && obj->par) {
+            lv_res_t res = lv_event_send(obj->par, event, data);
+            if(res != LV_RES_OK) {
+                return LV_RES_INV;
+            }
+        }
+    }
+
+    return LV_RES_OK;
+}
+
+/**
+ * Get the `data` parameter of the current event
+ * @return the `data` parameter
+ */
+const void * lv_event_get_data(void)
+{
+    return event_act_data;
+}
+
+/**
+ * Set the a signal function of an object. Used internally by the library.
+ * Always call the previous signal function in the new.
+ * @param obj pointer to an object
+ * @param cb the new signal function
+ */
+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;
+}
+
+/**
+ * Send an event to the object
+ * @param obj pointer to an object
+ * @param event the type of the event from `lv_event_t`.
+ */
+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);
+}
+
+/**
+ * Set a new design function for an object
+ * @param obj pointer to an object
+ * @param design_cb the new design function
+ */
+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;
+}
+
+/*----------------
+ * Other set
+ *--------------*/
+
+/**
+ * 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
+ */
+void * lv_obj_allocate_ext_attr(lv_obj_t * obj, uint16_t ext_size)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    obj->ext_attr = lv_mem_realloc(obj->ext_attr, ext_size);
+
+    return (void *)obj->ext_attr;
+}
+
+/**
+ * Send a 'LV_SIGNAL_REFR_EXT_SIZE' signal to the object
+ * @param obj pointer to an object
+ */
+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);
+
+    lv_obj_invalidate(obj);
+}
+
+/*=======================
+ * Getter functions
+ *======================*/
+
+/**
+ * Return with the screen of an object
+ * @param obj pointer to an object
+ * @return pointer to a screen
+ */
+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;
+
+    do {
+        act_p = par;
+        par   = lv_obj_get_parent(act_p);
+    } while(par != NULL);
+
+    return (lv_obj_t *)act_p;
+}
+
+/**
+ * Get the display of an object
+ * @param scr pointer to an object
+ * @return pointer the object's display
+ */
+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)
+        scr = obj; /*`obj` is a screen*/
+    else
+        scr = lv_obj_get_screen(obj); /*get the screen of `obj`*/
+
+    lv_disp_t * d;
+    LV_LL_READ(LV_GC_ROOT(_lv_disp_ll), d)
+    {
+        lv_obj_t * s;
+        LV_LL_READ(d->scr_ll, s)
+        {
+            if(s == scr) return d;
+        }
+    }
+
+    LV_LOG_WARN("lv_scr_get_disp: screen not found")
+    return NULL;
+}
+
+/*---------------------
+ * Parent/children get
+ *--------------------*/
+
+/**
+ * Returns with the parent of an object
+ * @param obj pointer to an object
+ * @return pointer to the parent of  'obj'
+ */
+lv_obj_t * lv_obj_get_parent(const lv_obj_t * obj)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    return obj->par;
+}
+
+/**
+ * Iterate through the children of an object (start from the "youngest")
+ * @param obj pointer to an object
+ * @param child NULL at first call to get the next children
+ *                  and the previous return value later
+ * @return the child after 'act_child' or NULL if no more child
+ */
+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) {
+        result = lv_ll_get_head(&obj->child_ll);
+    } else {
+        result = lv_ll_get_next(&obj->child_ll, child);
+    }
+
+    return result;
+}
+
+/**
+ * Iterate through the children of an object (start from the "oldest")
+ * @param obj pointer to an object
+ * @param child NULL at first call to get the next children
+ *                  and the previous return value later
+ * @return the child after 'act_child' or NULL if no more 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) {
+        result = lv_ll_get_tail(&obj->child_ll);
+    } else {
+        result = lv_ll_get_prev(&obj->child_ll, child);
+    }
+
+    return result;
+}
+
+/**
+ * Count the children of an object (only children directly on 'obj')
+ * @param obj pointer to an object
+ * @return children number of 'obj'
+ */
+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;
+
+    LV_LL_READ(obj->child_ll, i) cnt++;
+
+    return cnt;
+}
+
+/** Recursively count the children of an object
+ * @param obj pointer to an object
+ * @return children number of '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;
+
+    LV_LL_READ(obj->child_ll, i)
+    {
+        cnt++;                                     /*Count the child*/
+        cnt += lv_obj_count_children_recursive(i); /*recursively count 
children's children*/
+    }
+
+    return cnt;
+}
+
+/*---------------------
+ * Coordinate get
+ *--------------------*/
+
+/**
+ * Copy the coordinates of an object to an area
+ * @param obj pointer to an object
+ * @param cords_p pointer to an area to store the coordinates
+ */
+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);
+}
+
+/**
+ * Reduce area retried by `lv_obj_get_coords()` the get graphically usable 
area of an object.
+ * (Without the size of the border or other extra graphical elements)
+ * @param coords_p store the result area here
+ */
+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_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_BOTTOM) coords_p->y2 -= 
style->body.border.width;
+}
+
+/**
+ * Get the x coordinate of object
+ * @param obj pointer to an object
+ * @return distance of 'obj' from the left side of its parent
+ */
+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);
+    if(parent) {
+        rel_x             = obj->coords.x1 - parent->coords.x1;
+    } else {
+        rel_x = obj->coords.x1;
+    }
+    return rel_x;
+}
+
+/**
+ * Get the y coordinate of object
+ * @param obj pointer to an object
+ * @return distance of 'obj' from the top of its parent
+ */
+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);
+   if(parent) {
+       rel_y             = obj->coords.y1 - parent->coords.y1;
+   } else {
+       rel_y = obj->coords.y1;
+   }
+    return rel_y;
+}
+
+/**
+ * Get the width of an object
+ * @param obj pointer to an object
+ * @return the width
+ */
+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);
+}
+
+/**
+ * Get the height of an object
+ * @param obj pointer to an object
+ * @return the height
+ */
+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);
+}
+
+/**
+ * Get that width reduced by the left and right padding.
+ * @param obj pointer to an object
+ * @return the width which still fits into the container
+ */
+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;
+}
+
+/**
+ * Get that height reduced by the top an bottom padding.
+ * @param obj pointer to an object
+ * @return the height which still fits into the container
+ */
+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;
+}
+
+/**
+ * Get the automatic realign property of the object.
+ * @param obj pointer to an object
+ * @return  true: auto realign is enabled; false: auto realign is disabled
+ */
+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
+    (void)obj;
+    return false;
+#endif
+}
+
+/**
+ * Get the left padding of extended clickable area
+ * @param obj pointer to an object
+ * @return the extended left padding
+ */
+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
+    return obj->ext_click_pad.x1;
+#else
+    (void)obj;    /*Unused*/
+    return 0;
+#endif
+}
+
+/**
+ * Get the right padding of extended clickable area
+ * @param obj pointer to an object
+ * @return the extended right padding
+ */
+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
+    return obj->ext_click_pad.x2;
+#else
+    (void)obj; /*Unused*/
+    return 0;
+#endif
+}
+
+/**
+ * Get the top padding of extended clickable area
+ * @param obj pointer to an object
+ * @return the extended top padding
+ */
+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
+    return obj->ext_click_pad.y1;
+#else
+    (void)obj; /*Unused*/
+    return 0;
+#endif
+}
+
+/**
+ * Get the bottom padding of extended clickable area
+ * @param obj pointer to an object
+ * @return the extended bottom padding
+ */
+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;
+#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
+    return obj->ext_click_pad.y2;
+#else
+    (void)obj; /*Unused*/
+    return 0;
+#endif
+}
+
+/**
+ * Get the extended size attribute of an object
+ * @param obj pointer to an object
+ * @return the extended size attribute
+ */
+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;
+}
+
+/*-----------------
+ * Appearance get
+ *---------------*/
+
+/**
+ * Get the style pointer of an object (if NULL get style of the parent)
+ * @param obj pointer to an object
+ * @return pointer to a style
+ */
+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;
+
+        while(par) {
+            if(par->style_p) {
+                if(par->style_p->glass == 0) {
+#if LV_USE_GROUP == 0
+                    style_act = par->style_p;
+#else
+                    /*If a parent is focused then use then focused style*/
+                    lv_group_t * g = lv_obj_get_group(par);
+                    if(lv_group_get_focused(g) == par) {
+                        style_act = lv_group_mod_style(g, par->style_p);
+                    } else {
+                        style_act = par->style_p;
+                    }
+#endif
+                    break;
+                }
+            }
+            par = par->par;
+        }
+    }
+#if LV_USE_GROUP
+    if(obj->group_p) {
+        if(lv_group_get_focused(obj->group_p) == obj) {
+            style_act = lv_group_mod_style(obj->group_p, style_act);
+        }
+    }
+#endif
+
+    if(style_act == NULL) style_act = &lv_style_plain;
+
+    return style_act;
+}
+
+/*-----------------
+ * Attribute get
+ *----------------*/
+
+/**
+ * Get the hidden attribute of an object
+ * @param obj pointer to an object
+ * @return true: the object is hidden
+ */
+bool lv_obj_get_hidden(const lv_obj_t * obj)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    return obj->hidden == 0 ? false : true;
+}
+
+/**
+ * Get the click enable attribute of an object
+ * @param obj pointer to an object
+ * @return true: the object is clickable
+ */
+bool lv_obj_get_click(const lv_obj_t * obj)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    return obj->click == 0 ? false : true;
+}
+
+/**
+ * Get the top enable attribute of an object
+ * @param obj pointer to an object
+ * @return true: the auto top feture is enabled
+ */
+bool lv_obj_get_top(const lv_obj_t * obj)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    return obj->top == 0 ? false : true;
+}
+
+/**
+ * Get the drag enable attribute of an object
+ * @param obj pointer to an object
+ * @return true: the object is dragable
+ */
+bool lv_obj_get_drag(const lv_obj_t * obj)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    return obj->drag == 0 ? false : true;
+}
+
+/**
+ * Get the directions an object can be dragged
+ * @param obj pointer to an object
+ * @return bitwise OR of allowed directions an object can be dragged in
+ */
+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;
+}
+
+/**
+ * Get the drag throw enable attribute of an object
+ * @param obj pointer to an object
+ * @return true: drag throw is enabled
+ */
+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;
+}
+
+/**
+ * Get the drag parent attribute of an object
+ * @param obj pointer to an object
+ * @return true: drag parent is enabled
+ */
+bool lv_obj_get_drag_parent(const lv_obj_t * obj)
+{
+    return obj->drag_parent == 0 ? false : true;
+}
+
+/**
+ * Get the drag parent attribute of an object
+ * @param obj pointer to an object
+ * @return true: drag parent is enabled
+ */
+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
+ * @return true: opa scaling is enabled for this object and all children; 
false: no opa scaling
+ */
+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;
+}
+
+/**
+ * Get the opa scale parameter of an object
+ * @param obj pointer to an object
+ * @return opa scale [0..255]
+ */
+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) {
+        if(parent->opa_scale_en) return parent->opa_scale;
+        parent = lv_obj_get_parent(parent);
+    }
+
+    return LV_OPA_COVER;
+}
+
+/**
+ * Get the protect field of an object
+ * @param obj pointer to an object
+ * @return protect field ('OR'ed values of `lv_protect_t`)
+ */
+uint8_t lv_obj_get_protect(const lv_obj_t * obj)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    return obj->protect;
+}
+
+/**
+ * Check at least one bit of a given protect bitfield is set
+ * @param obj pointer to an object
+ * @param prot protect bits to test ('OR'ed values of `lv_protect_t`)
+ * @return false: none of the given bits are set, true: at least one bit is set
+ */
+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;
+}
+
+/**
+ * Get the signal function of an object
+ * @param obj pointer to an object
+ * @return the signal function
+ */
+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;
+}
+
+/**
+ * Get the design function of an object
+ * @param obj pointer to an object
+ * @return the design function
+ */
+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;
+}
+
+/**
+ * Get the event function of an object
+ * @param obj pointer to an object
+ * @return the event function
+ */
+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;
+}
+
+/*------------------
+ * Other get
+ *-----------------*/
+
+/**
+ * Get the ext pointer
+ * @param obj pointer to an object
+ * @return the ext pointer but not the dynamic version
+ *         Use it as ext->data1, and NOT da(ext)->data1
+ */
+void * lv_obj_get_ext_attr(const lv_obj_t * obj)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    return obj->ext_attr;
+}
+
+/**
+ * Get object's and its ancestors type. Put their name in `type_buf` starting 
with the current type.
+ * E.g. buf.type[0]="lv_btn", buf.type[1]="lv_cont", buf.type[2]="lv_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(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((lv_obj_t *)obj, LV_SIGNAL_GET_TYPE, &tmp);
+
+    uint8_t cnt;
+    for(cnt = 0; cnt < LV_MAX_ANCESTOR_NUM; cnt++) {
+        if(tmp.type[cnt] == NULL) break;
+    }
+
+    /*Swap the order. The real type comes first*/
+    uint8_t i;
+    for(i = 0; i < cnt; i++) {
+        buf->type[i] = tmp.type[cnt - 1 - i];
+    }
+}
+
+#if LV_USE_USER_DATA
+
+/**
+ * Get the object's user data
+ * @param obj pointer to an object
+ * @return user data
+ */
+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;
+}
+
+/**
+ * Get a pointer to the object's user data
+ * @param obj pointer to an object
+ * @return pointer to the user data
+ */
+lv_obj_user_data_t * lv_obj_get_user_data_ptr(const lv_obj_t * obj)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    return (lv_obj_user_data_t *)&obj->user_data;
+}
+
+/**
+ * Set the object's user data. The data will be copied.
+ * @param obj pointer to an object
+ * @param data user data
+ */
+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
+
+#if LV_USE_GROUP
+/**
+ * Get the group of the object
+ * @param obj pointer to an object
+ * @return the pointer to group of the object
+ */
+void * lv_obj_get_group(const lv_obj_t * obj)
+{
+    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+    return obj->group_p;
+}
+
+/**
+ * Tell whether the object is the focused object of a group or not.
+ * @param obj pointer to an object
+ * @return true: the object is focused, false: the object is not focused or 
not in a group
+ */
+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;
+    }
+
+    return false;
+}
+#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 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'
+ */
+static bool lv_obj_design(lv_obj_t * obj, const lv_area_t * mask_p, 
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;
+
+        /*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;
+
+        /* 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;
+
+        lv_area_t area_tmp;
+
+        /*Check horizontally without radius*/
+        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;
+
+        /*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;
+
+    } 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));
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the basic object
+ * @param obj pointer to an object
+ * @param sign signal type
+ * @param param parameter for the signal (depends on signal type)
+ * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: 
the object is deleted
+ */
+static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, 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;
+
+    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) {
+        const lv_style_t * style = lv_obj_get_style(obj);
+        if(style->body.shadow.width > obj->ext_draw_pad) obj->ext_draw_pad = 
style->body.shadow.width;
+    } else if(sign == LV_SIGNAL_STYLE_CHG) {
+        lv_obj_refresh_ext_draw_pad(obj);
+    }
+    return res;
+}
+
+/**
+ * Reposition the children of an object. (Called recursively)
+ * @param obj pointer to an object which children will be repositioned
+ * @param x_diff x coordinate shift
+ * @param y_diff y coordinate shift
+ */
+static void refresh_children_position(lv_obj_t * obj, lv_coord_t x_diff, 
lv_coord_t y_diff)
+{
+    lv_obj_t * i;
+    LV_LL_READ(obj->child_ll, i)
+    {
+        i->coords.x1 += x_diff;
+        i->coords.y1 += y_diff;
+        i->coords.x2 += x_diff;
+        i->coords.y2 += y_diff;
+
+        refresh_children_position(i, x_diff, y_diff);
+    }
+}
+
+/**
+ * Refresh the style of all children of an object. (Called recursively)
+ * @param style_p refresh objects only with this style.
+ * @param obj pointer to an object
+ */
+static void report_style_mod_core(void * style_p, lv_obj_t * obj)
+{
+    lv_obj_t * i;
+    LV_LL_READ(obj->child_ll, i)
+    {
+        if(i->style_p == style_p || style_p == NULL) {
+            refresh_children_style(i);
+            lv_obj_refresh_style(i);
+        }
+
+        report_style_mod_core(style_p, i);
+    }
+}
+
+/**
+ * Recursively refresh the style of the children. Go deeper until a not NULL 
style is found
+ * because the NULL styles are inherited from the parent
+ * @param obj pointer to an object
+ */
+static void refresh_children_style(lv_obj_t * obj)
+{
+    lv_obj_t * child = lv_obj_get_child(obj, NULL);
+    while(child != NULL) {
+        if(child->style_p == NULL) {
+            refresh_children_style(child); /*Check children too*/
+            lv_obj_refresh_style(child);   /*Notify the child about the style 
change*/
+        } else if(child->style_p->glass) {
+            /*Children with 'glass' parent might be effected if their style == 
NULL*/
+            refresh_children_style(child);
+        }
+        child = lv_obj_get_child(obj, child);
+    }
+}
+
+/**
+ * Called by 'lv_obj_del' to delete the children objects
+ * @param obj pointer to an object (all of its children will be deleted)
+ */
+static void delete_children(lv_obj_t * obj)
+{
+    lv_obj_t * i;
+    lv_obj_t * i_next;
+    i = lv_ll_get_head(&(obj->child_ll));
+
+    /*Remove from the group; remove before transversing children so that
+     * the object still has access to all children during the
+     * LV_SIGNAL_DEFOCUS call*/
+#if LV_USE_GROUP
+    lv_group_t * group = lv_obj_get_group(obj);
+    if(group) lv_group_remove_obj(obj);
+#endif
+
+    while(i != NULL) {
+        /*Get the next object before delete this*/
+        i_next = lv_ll_get_next(&(obj->child_ll), i);
+
+        /*Call the recursive del to the child too*/
+        delete_children(i);
+
+        /*Set i to the next node*/
+        i = i_next;
+    }
+
+    /*Let the suer free the resources used in `LV_EVENT_DELETE`*/
+    lv_event_send(obj, LV_EVENT_DELETE, NULL);
+
+    lv_event_mark_deleted(obj);
+
+    /*Remove the animations from this object*/
+#if LV_USE_ANIMATION
+    lv_anim_del(obj, NULL);
+#endif
+
+    /* Reset the input devices if
+     * the object to delete is used*/
+    lv_indev_t * indev = lv_indev_get_next(NULL);
+    while(indev) {
+        if(indev->proc.types.pointer.act_obj == obj || 
indev->proc.types.pointer.last_obj == obj) {
+            lv_indev_reset(indev);
+        }
+
+        if(indev->proc.types.pointer.last_pressed == obj) {
+            indev->proc.types.pointer.last_pressed = NULL;
+        }
+#if LV_USE_GROUP
+        if(indev->group == group && obj == lv_indev_get_obj_act()) {
+            lv_indev_reset(indev);
+        }
+#endif
+        indev = lv_indev_get_next(indev);
+    }
+
+    /* 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_rem(&(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;
+
+    while(t) {
+        if(t->obj == obj) t->deleted = true;
+        t = t->prev;
+    }
+}
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_obj.h 
b/scriptsrcs/lvgl/src/lv_core/lv_obj.h
new file mode 100755
index 0000000..8698718
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_obj.h
@@ -0,0 +1,1007 @@
+/**
+ * @file lv_obj.h
+ *
+ */
+
+#ifndef LV_OBJ_H
+#define LV_OBJ_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include <stddef.h>
+#include <stdbool.h>
+#include "lv_style.h"
+#include "../lv_misc/lv_types.h"
+#include "../lv_misc/lv_area.h"
+#include "../lv_misc/lv_mem.h"
+#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"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/*Error check of lv_conf.h*/
+#if LV_HOR_RES_MAX == 0 || LV_VER_RES_MAX == 0
+#error "LittlevGL: LV_HOR_RES_MAX and LV_VER_RES_MAX must be greater than 0"
+#endif
+
+#if LV_ANTIALIAS > 1
+#error "LittlevGL: LV_ANTIALIAS can be only 0 or 1"
+#endif
+
+#define LV_MAX_ANCESTOR_NUM 8
+
+#define LV_EXT_CLICK_AREA_OFF 0
+#define LV_EXT_CLICK_AREA_TINY 1
+#define LV_EXT_CLICK_AREA_FULL 2
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+struct _lv_obj_t;
+
+
+/** Design modes */
+enum {
+    LV_DESIGN_DRAW_MAIN, /**< Draw the main portion of the object */
+    LV_DESIGN_DRAW_POST, /**< Draw extras on the object */
+    LV_DESIGN_COVER_CHK, /**< Check if the object fully covers the 'mask_p' 
area */
+};
+typedef uint8_t lv_design_mode_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);
+
+enum {
+    LV_EVENT_PRESSED,             /**< The object has been pressed*/
+    LV_EVENT_PRESSING,            /**< The object is being pressed (called 
continuously while pressing)*/
+    LV_EVENT_PRESS_LOST,          /**< User is still pressing but slid 
cursor/finger off of the object */
+    LV_EVENT_SHORT_CLICKED,       /**< User pressed object for a short period 
of time, then released it. Not called if dragged. */
+    LV_EVENT_LONG_PRESSED,        /**< Object has been pressed for at least 
`LV_INDEV_LONG_PRESS_TIME`.  Not called if dragged.*/
+    LV_EVENT_LONG_PRESSED_REPEAT, /**< Called after `LV_INDEV_LONG_PRESS_TIME` 
in every
+                                       `LV_INDEV_LONG_PRESS_REP_TIME` ms.  Not 
called if dragged.*/
+    LV_EVENT_CLICKED,             /**< Called on release if not dragged 
(regardless to long press)*/
+    LV_EVENT_RELEASED,            /**< Called in every cases when the object 
has been released*/                                    
+    LV_EVENT_DRAG_BEGIN,                 
+    LV_EVENT_DRAG_END,
+    LV_EVENT_DRAG_THROW_BEGIN,
+    LV_EVENT_KEY,
+    LV_EVENT_FOCUSED,
+    LV_EVENT_DEFOCUSED,
+    LV_EVENT_VALUE_CHANGED,             /**< The object's value has changed 
(i.e. slider moved) */
+    LV_EVENT_INSERT,
+    LV_EVENT_REFRESH,
+    LV_EVENT_APPLY,  /**< "Ok", "Apply" or similar specific button has 
clicked*/
+    LV_EVENT_CANCEL, /**< "Close", "Cancel" or similar specific button has 
clicked*/
+    LV_EVENT_DELETE, /**< Object is being deleted */
+};
+typedef uint8_t lv_event_t; /**< Type of event being sent to the object. */
+
+/**
+ * @brief Event callback.
+ * Events are used to notify the user of some action being taken on the object.
+ * For details, see ::lv_event_t.
+ */
+typedef void (*lv_event_cb_t)(struct _lv_obj_t * obj, lv_event_t event);
+
+/** Signals are for use by the object itself or to extend the object's 
functionality.
+  * Applications should use ::lv_obj_set_event_cb to be notified of events 
that occur
+  * on the object. */
+enum {
+    /*General signals*/
+    LV_SIGNAL_CLEANUP, /**< Object is being deleted */
+    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_BASE_DIR_CHG, /**<The base dir has changed*/
+    LV_SIGNAL_REFR_EXT_DRAW_PAD, /**< Object's extra padding has changed */
+    LV_SIGNAL_GET_TYPE, /**< LittlevGL needs to retrieve the object's type */
+
+    /*Input device related*/
+    LV_SIGNAL_PRESSED,           /**< The object has been pressed*/
+    LV_SIGNAL_PRESSING,          /**< The object is being pressed (called 
continuously while pressing)*/
+    LV_SIGNAL_PRESS_LOST,        /**< User is still pressing but slid 
cursor/finger off of the object */
+    LV_SIGNAL_RELEASED,          /**< User pressed object for a short period 
of time, then released it. Not called if dragged. */
+    LV_SIGNAL_LONG_PRESS,        /**< Object has been pressed for at least 
`LV_INDEV_LONG_PRESS_TIME`.  Not called if dragged.*/
+    LV_SIGNAL_LONG_PRESS_REP,    /**< Called after `LV_INDEV_LONG_PRESS_TIME` 
in every `LV_INDEV_LONG_PRESS_REP_TIME` ms.  Not called if dragged.*/
+    LV_SIGNAL_DRAG_BEGIN,      
+    LV_SIGNAL_DRAG_END,
+
+    /*Group related*/
+    LV_SIGNAL_FOCUS,
+    LV_SIGNAL_DEFOCUS,
+    LV_SIGNAL_CONTROL,
+    LV_SIGNAL_GET_EDITABLE,
+};
+typedef uint8_t lv_signal_t;
+
+typedef lv_res_t (*lv_signal_cb_t)(struct _lv_obj_t * obj, lv_signal_t sign, 
void * param);
+
+/** Object alignment. */
+enum {
+    LV_ALIGN_CENTER = 0,
+    LV_ALIGN_IN_TOP_LEFT,
+    LV_ALIGN_IN_TOP_MID,
+    LV_ALIGN_IN_TOP_RIGHT,
+    LV_ALIGN_IN_BOTTOM_LEFT,
+    LV_ALIGN_IN_BOTTOM_MID,
+    LV_ALIGN_IN_BOTTOM_RIGHT,
+    LV_ALIGN_IN_LEFT_MID,
+    LV_ALIGN_IN_RIGHT_MID,
+    LV_ALIGN_OUT_TOP_LEFT,
+    LV_ALIGN_OUT_TOP_MID,
+    LV_ALIGN_OUT_TOP_RIGHT,
+    LV_ALIGN_OUT_BOTTOM_LEFT,
+    LV_ALIGN_OUT_BOTTOM_MID,
+    LV_ALIGN_OUT_BOTTOM_RIGHT,
+    LV_ALIGN_OUT_LEFT_TOP,
+    LV_ALIGN_OUT_LEFT_MID,
+    LV_ALIGN_OUT_LEFT_BOTTOM,
+    LV_ALIGN_OUT_RIGHT_TOP,
+    LV_ALIGN_OUT_RIGHT_MID,
+    LV_ALIGN_OUT_RIGHT_BOTTOM,
+};
+typedef uint8_t lv_align_t;
+
+#if LV_USE_OBJ_REALIGN
+typedef struct
+{
+    const struct _lv_obj_t * base;
+    lv_coord_t xofs;
+    lv_coord_t yofs;
+    lv_align_t align;
+    uint8_t auto_realign : 1;
+    uint8_t origo_align : 1; /**< 1: the origo (center of the object) was 
aligned with
+                                `lv_obj_align_origo`*/
+} lv_reailgn_t;
+#endif
+
+enum {
+    LV_DRAG_DIR_HOR = 0x1, /**< Object can be dragged horizontally. */
+    LV_DRAG_DIR_VER = 0x2, /**< Object can be dragged vertically. */
+    LV_DRAG_DIR_ALL = 0x3, /**< Object can be dragged in all directions. */
+};
+
+typedef uint8_t lv_drag_dir_t;
+
+typedef struct _lv_obj_t
+{
+    struct _lv_obj_t * par; /**< Pointer to the parent object*/
+    lv_ll_t child_ll;       /**< Linked list to store the children objects*/
+
+    lv_area_t coords; /**< Coordinates of the object (x1, y1, x2, y2)*/
+
+    lv_event_cb_t event_cb; /**< Event callback function */
+    lv_signal_cb_t signal_cb; /**< Object type specific signal function*/
+    lv_design_cb_t design_cb; /**< Object type specific design function*/
+
+    void * ext_attr;            /**< Object type specific extended data*/
+    const lv_style_t * style_p; /**< Pointer to the object's style*/
+
+#if LV_USE_GROUP != 0
+    void * group_p; /**< Pointer to the group of the object*/
+#endif
+
+#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
+    uint8_t ext_click_pad_hor; /**< Extra click padding in horizontal 
direction */
+    uint8_t ext_click_pad_ver; /**< Extra click padding in vertical direction 
*/
+#endif
+
+#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
+    lv_area_t ext_click_pad;   /**< Extra click padding area. */
+#endif
+
+    /*Attributes and states*/
+    uint8_t click : 1;          /**< 1: Can be pressed by an input device*/
+    uint8_t drag : 1;           /**< 1: Enable the dragging*/
+    uint8_t drag_throw : 1;     /**< 1: Enable throwing with drag*/
+    uint8_t drag_parent : 1;    /**< 1: Parent will be dragged instead*/
+    uint8_t hidden : 1;         /**< 1: Object is hidden*/
+    uint8_t top : 1;            /**< 1: If the object or its children is 
clicked it goes to the foreground*/
+    uint8_t opa_scale_en : 1;   /**< 1: opa_scale is set*/
+    uint8_t parent_event : 1;   /**< 1: Send the object's events to the parent 
too. */
+    lv_drag_dir_t drag_dir : 2; /**<  Which directions the object can be 
dragged in */
+    lv_bidi_dir_t base_dir : 2; /**< Base direction of texts related to this 
object */
+    uint8_t reserved : 3;       /**<  Reserved for future use*/
+    uint8_t protect;            /**< Automatically happening actions can be 
prevented. 'OR'ed values from
+                                   `lv_protect_t`*/
+    lv_opa_t opa_scale;         /**< Scale down the opacity by this factor. 
Effects all children as well*/
+
+    lv_coord_t ext_draw_pad; /**< EXTtend the size in every direction for 
drawing. */
+
+#if LV_USE_OBJ_REALIGN
+    lv_reailgn_t realign;       /**< Information about the last call to 
::lv_obj_align. */
+#endif
+
+#if LV_USE_USER_DATA
+    lv_obj_user_data_t user_data; /**< Custom user data for object. */
+#endif
+
+} lv_obj_t;
+
+/*Protect some attributes (max. 8 bit)*/
+enum {
+    LV_PROTECT_NONE      = 0x00,
+    LV_PROTECT_CHILD_CHG = 0x01,   /**< Disable the child change signal. Used 
by the library*/
+    LV_PROTECT_PARENT    = 0x02,   /**< Prevent automatic parent change (e.g. 
in lv_page)*/
+    LV_PROTECT_POS       = 0x04,   /**< Prevent automatic positioning (e.g. in 
lv_cont layout)*/
+    LV_PROTECT_FOLLOW    = 0x08,   /**< Prevent the object be followed in 
automatic ordering (e.g. in
+                                      lv_cont PRETTY layout)*/
+    LV_PROTECT_PRESS_LOST = 0x10,  /**< If the `indev` was pressing this 
object but swiped out while
+                                      pressing do not search other object.*/
+    LV_PROTECT_CLICK_FOCUS = 0x20, /**< Prevent focusing the object by 
clicking on it*/
+};
+typedef uint8_t lv_protect_t;
+
+/** Used by `lv_obj_get_type()`. The object's and its ancestor types are 
stored here*/
+typedef struct
+{
+    const char * type[LV_MAX_ANCESTOR_NUM]; /**< [0]: the actual type, [1]: 
ancestor, [2] #1's ancestor
+                                               ... [x]: "lv_obj" */
+} lv_obj_type_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Init. the 'lv' library.
+ */
+void lv_init(void);
+
+/*--------------------
+ * Create and delete
+ *-------------------*/
+
+/**
+ * Create a basic object
+ * @param parent pointer to a parent object.
+ *                  If NULL then a screen will be created
+ * @param copy pointer to a base object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the new object
+ */
+lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy);
+
+/**
+ * Delete 'obj' and all of its children
+ * @param obj pointer to an object to delete
+ * @return LV_RES_INV because the object is deleted
+ */
+lv_res_t lv_obj_del(lv_obj_t * obj);
+
+/**
+ * Helper function for asynchronously deleting objects.
+ * Useful for cases where you can't delete an object directly in an 
`LV_EVENT_DELETE` handler (i.e. parent).
+ * @param obj object to delete
+ * @see lv_async_call
+ */
+void lv_obj_del_async(struct _lv_obj_t *obj);
+
+/**
+ * Delete all children of an object
+ * @param obj pointer to an object
+ */
+void lv_obj_clean(lv_obj_t * obj);
+
+/**
+ * Mark the object as invalid therefore its current position will be redrawn 
by 'lv_refr_task'
+ * @param obj pointer to an object
+ */
+void lv_obj_invalidate(const lv_obj_t * obj);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/*--------------------
+ * Parent/children set
+ *--------------------*/
+
+/**
+ * Set a new parent for an object. Its relative position will be the same.
+ * @param obj pointer to an object. Can't be a screen.
+ * @param parent pointer to the new parent object. (Can't be NULL)
+ */
+void lv_obj_set_parent(lv_obj_t * obj, lv_obj_t * parent);
+
+/**
+ * Move and object to the foreground
+ * @param obj pointer to an object
+ */
+void lv_obj_move_foreground(lv_obj_t * obj);
+
+/**
+ * Move and object to the background
+ * @param obj pointer to an object
+ */
+void lv_obj_move_background(lv_obj_t * obj);
+
+/*--------------------
+ * Coordinate set
+ * ------------------*/
+
+/**
+ * Set relative the position of an object (relative to the parent)
+ * @param obj pointer to an object
+ * @param x new distance from the left side of the parent
+ * @param y new distance from the top of the parent
+ */
+void lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y);
+
+/**
+ * Set the x coordinate of a object
+ * @param obj pointer to an object
+ * @param x new distance from the left side from the parent
+ */
+void lv_obj_set_x(lv_obj_t * obj, lv_coord_t x);
+
+/**
+ * Set the y coordinate of a object
+ * @param obj pointer to an object
+ * @param y new distance from the top of the parent
+ */
+void lv_obj_set_y(lv_obj_t * obj, lv_coord_t y);
+
+/**
+ * Set the size of an object
+ * @param obj pointer to an object
+ * @param w new width
+ * @param h new height
+ */
+void lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h);
+
+/**
+ * Set the width of an object
+ * @param obj pointer to an object
+ * @param w new width
+ */
+void lv_obj_set_width(lv_obj_t * obj, lv_coord_t w);
+
+/**
+ * Set the height of an object
+ * @param obj pointer to an object
+ * @param h new height
+ */
+void lv_obj_set_height(lv_obj_t * obj, lv_coord_t h);
+
+/**
+ * Align an object to an other object.
+ * @param obj pointer to an object to align
+ * @param base pointer to an object (if NULL the parent is used). 'obj' will 
be aligned to it.
+ * @param align type of alignment (see 'lv_align_t' enum)
+ * @param x_mod x coordinate shift after alignment
+ * @param y_mod y coordinate shift after alignment
+ */
+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);
+
+/**
+ * Align an object to an other object.
+ * @param obj pointer to an object to align
+ * @param base pointer to an object (if NULL the parent is used). 'obj' will 
be aligned to it.
+ * @param align type of alignment (see 'lv_align_t' enum)
+ * @param x_mod x coordinate shift after alignment
+ * @param y_mod y coordinate shift after alignment
+ */
+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);
+
+/**
+ * Realign the object based on the last `lv_obj_align` parameters.
+ * @param obj pointer to an object
+ */
+void lv_obj_realign(lv_obj_t * obj);
+
+/**
+ * Enable the automatic realign of the object when its size has changed based 
on the last
+ * `lv_obj_align` parameters.
+ * @param obj pointer to an object
+ * @param en true: enable auto realign; false: disable auto realign
+ */
+void lv_obj_set_auto_realign(lv_obj_t * obj, bool en);
+
+/**
+ * Set the size of an extended clickable area
+ * @param obj pointer to an object
+ * @param left extended clickable are on the left [px]
+ * @param right extended clickable are on the right [px]
+ * @param top extended clickable are on the top [px]
+ * @param bottom extended clickable are on the bottom [px]
+ */
+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);
+
+/*---------------------
+ * Appearance set
+ *--------------------*/
+
+/**
+ * Set a new style for an object
+ * @param obj pointer to an object
+ * @param style_p pointer to the new style
+ */
+void lv_obj_set_style(lv_obj_t * obj, const lv_style_t * style);
+
+/**
+ * Notify an object about its style is modified
+ * @param obj pointer to an object
+ */
+void lv_obj_refresh_style(lv_obj_t * obj);
+
+/**
+ * Notify all object if a style is modified
+ * @param style pointer to a style. Only the objects with this style will be 
notified
+ *               (NULL to notify all objects)
+ */
+void lv_obj_report_style_mod(lv_style_t * style);
+
+/*-----------------
+ * Attribute set
+ *----------------*/
+
+/**
+ * Hide an object. It won't be visible and clickable.
+ * @param obj pointer to an object
+ * @param en true: hide the object
+ */
+void lv_obj_set_hidden(lv_obj_t * obj, bool en);
+
+/**
+ * Enable or disable the clicking of an object
+ * @param obj pointer to an object
+ * @param en true: make the object clickable
+ */
+void lv_obj_set_click(lv_obj_t * obj, bool en);
+
+/**
+ * Enable to bring this object to the foreground if it
+ * or any of its children is clicked
+ * @param obj pointer to an object
+ * @param en true: enable the auto top feature
+ */
+void lv_obj_set_top(lv_obj_t * obj, bool en);
+
+/**
+ * Enable the dragging of an object
+ * @param obj pointer to an object
+ * @param en true: make the object dragable
+ */
+void lv_obj_set_drag(lv_obj_t * obj, bool en);
+
+/**
+ * Set the directions an object can be dragged in
+ * @param obj pointer to an object
+ * @param drag_dir bitwise OR of allowed drag directions
+ */
+void lv_obj_set_drag_dir(lv_obj_t * obj, lv_drag_dir_t drag_dir);
+
+/**
+ * Enable the throwing of an object after is is dragged
+ * @param obj pointer to an object
+ * @param en true: enable the drag throw
+ */
+void lv_obj_set_drag_throw(lv_obj_t * obj, bool en);
+
+/**
+ * Enable to use parent for drag related operations.
+ * If trying to drag the object the parent will be moved instead
+ * @param obj pointer to an object
+ * @param en true: enable the 'drag parent' for the object
+ */
+void lv_obj_set_drag_parent(lv_obj_t * obj, bool en);
+
+/**
+ * Propagate the events to the parent too
+ * @param obj pointer to an object
+ * @param en true: enable the event propagation
+ */
+void lv_obj_set_parent_event(lv_obj_t * obj, bool en);
+
+void lv_obj_set_base_dir(lv_obj_t * obj, lv_bidi_dir_t dir);
+/**
+ * Set the opa scale enable parameter (required to set opa_scale with 
`lv_obj_set_opa_scale()`)
+ * @param obj pointer to an object
+ * @param en true: opa scaling is enabled for this object and all children; 
false: no opa scaling
+ */
+void lv_obj_set_opa_scale_enable(lv_obj_t * obj, bool en);
+
+/**
+ * Set the opa scale of an object.
+ * The opacity of this object and all it's children will be scaled down with 
this factor.
+ * `lv_obj_set_opa_scale_enable(obj, true)` needs to be called to enable it.
+ * (not for all children just for the parent where to start the opa scaling)
+ * @param obj pointer to an object
+ * @param opa_scale a factor to scale down opacity [0..255]
+ */
+void lv_obj_set_opa_scale(lv_obj_t * obj, lv_opa_t opa_scale);
+
+/**
+ * Set a bit or bits in the protect filed
+ * @param obj pointer to an object
+ * @param prot 'OR'-ed values from `lv_protect_t`
+ */
+void lv_obj_set_protect(lv_obj_t * obj, uint8_t prot);
+
+/**
+ * Clear a bit or bits in the protect filed
+ * @param obj pointer to an object
+ * @param prot 'OR'-ed values from `lv_protect_t`
+ */
+void lv_obj_clear_protect(lv_obj_t * obj, uint8_t prot);
+
+/**
+ * Set a an event handler function for an object.
+ * Used by the user to react on event which happens with the object.
+ * @param obj pointer to an object
+ * @param event_cb the new event function
+ */
+void lv_obj_set_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb);
+
+/**
+ * Send an event to the object
+ * @param obj pointer to an object
+ * @param event the type of the event from `lv_event_t`.
+ * @param data arbitrary data depending on the object type and the event. 
(Usually `NULL`)
+ * @return LV_RES_OK: `obj` was not deleted in the event; LV_RES_INV: `obj` 
was deleted in the event
+ */
+lv_res_t lv_event_send(lv_obj_t * obj, lv_event_t event, const void * data);
+
+/**
+ * Call an event function with an object, event, and data.
+ * @param event_xcb an event callback function. If `NULL` `LV_RES_OK` will 
return without any actions.
+ *        (the 'x' in the argument name indicates that its not a fully generic 
function because it not follows
+ *         the `func_name(object, callback, ...)` convention)
+ * @param obj pointer to an object to associate with the event (can be `NULL` 
to simply call the `event_cb`)
+ * @param event an event
+ * @param data pointer to a custom data
+ * @return LV_RES_OK: `obj` was not deleted in the event; LV_RES_INV: `obj` 
was deleted in the event
+ */
+lv_res_t lv_event_send_func(lv_event_cb_t event_xcb, lv_obj_t * obj, 
lv_event_t event, const void * data);
+
+/**
+ * Get the `data` parameter of the current event
+ * @return the `data` parameter
+ */
+const void * lv_event_get_data(void);
+
+/**
+ * Set the a signal function of an object. Used internally by the library.
+ * Always call the previous signal function in the new.
+ * @param obj pointer to an object
+ * @param signal_cb the new signal function
+ */
+void lv_obj_set_signal_cb(lv_obj_t * obj, lv_signal_cb_t signal_cb);
+
+/**
+ * Send an event to the object
+ * @param obj pointer to an object
+ * @param event the type of the event from `lv_event_t`.
+ */
+void lv_signal_send(lv_obj_t * obj, lv_signal_t signal, void * param);
+
+/**
+ * Set a new design function for an object
+ * @param obj pointer to an object
+ * @param design_cb the new design function
+ */
+void lv_obj_set_design_cb(lv_obj_t * obj, lv_design_cb_t design_cb);
+
+/*----------------
+ * Other set
+ *--------------*/
+
+/**
+ * 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 pointer to the allocated ext
+ */
+void * lv_obj_allocate_ext_attr(lv_obj_t * obj, uint16_t ext_size);
+
+/**
+ * Send a 'LV_SIGNAL_REFR_EXT_SIZE' signal to the object
+ * @param obj pointer to an object
+ */
+void lv_obj_refresh_ext_draw_pad(lv_obj_t * obj);
+
+/*=======================
+ * Getter functions
+ *======================*/
+
+/**
+ * Return with the screen of an object
+ * @param obj pointer to an object
+ * @return pointer to a screen
+ */
+lv_obj_t * lv_obj_get_screen(const lv_obj_t * obj);
+
+/**
+ * Get the display of an object
+ * @param scr pointer to an object
+ * @return pointer the object's display
+ */
+lv_disp_t * lv_obj_get_disp(const lv_obj_t * obj);
+
+/*---------------------
+ * Parent/children get
+ *--------------------*/
+
+/**
+ * Returns with the parent of an object
+ * @param obj pointer to an object
+ * @return pointer to the parent of  'obj'
+ */
+lv_obj_t * lv_obj_get_parent(const lv_obj_t * obj);
+
+/**
+ * Iterate through the children of an object (start from the "youngest, lastly 
created")
+ * @param obj pointer to an object
+ * @param child NULL at first call to get the next children
+ *                  and the previous return value later
+ * @return the child after 'act_child' or NULL if no more child
+ */
+lv_obj_t * lv_obj_get_child(const lv_obj_t * obj, const lv_obj_t * child);
+
+/**
+ * Iterate through the children of an object (start from the "oldest", firstly 
created)
+ * @param obj pointer to an object
+ * @param child NULL at first call to get the next children
+ *                  and the previous return value later
+ * @return the child after 'act_child' or NULL if no more child
+ */
+lv_obj_t * lv_obj_get_child_back(const lv_obj_t * obj, const lv_obj_t * child);
+
+/**
+ * Count the children of an object (only children directly on 'obj')
+ * @param obj pointer to an object
+ * @return children number of 'obj'
+ */
+uint16_t lv_obj_count_children(const lv_obj_t * obj);
+
+/** Recursively count the children of an object
+ * @param obj pointer to an object
+ * @return children number of 'obj'
+ */
+uint16_t lv_obj_count_children_recursive(const lv_obj_t * obj);
+
+/*---------------------
+ * Coordinate get
+ *--------------------*/
+
+/**
+ * Copy the coordinates of an object to an area
+ * @param obj pointer to an object
+ * @param cords_p pointer to an area to store the coordinates
+ */
+void lv_obj_get_coords(const lv_obj_t * obj, lv_area_t * cords_p);
+
+/**
+ * Reduce area retried by `lv_obj_get_coords()` the get graphically usable 
area of an object.
+ * (Without the size of the border or other extra graphical elements)
+ * @param coords_p store the result area here
+ */
+void lv_obj_get_inner_coords(const lv_obj_t * obj, lv_area_t * coords_p);
+
+/**
+ * Get the x coordinate of object
+ * @param obj pointer to an object
+ * @return distance of 'obj' from the left side of its parent
+ */
+lv_coord_t lv_obj_get_x(const lv_obj_t * obj);
+
+/**
+ * Get the y coordinate of object
+ * @param obj pointer to an object
+ * @return distance of 'obj' from the top of its parent
+ */
+lv_coord_t lv_obj_get_y(const lv_obj_t * obj);
+
+/**
+ * Get the width of an object
+ * @param obj pointer to an object
+ * @return the width
+ */
+lv_coord_t lv_obj_get_width(const lv_obj_t * obj);
+
+/**
+ * Get the height of an object
+ * @param obj pointer to an object
+ * @return the height
+ */
+lv_coord_t lv_obj_get_height(const lv_obj_t * obj);
+
+/**
+ * Get that width reduced by the left and right padding.
+ * @param obj pointer to an object
+ * @return the width which still fits into the container
+ */
+lv_coord_t lv_obj_get_width_fit(const lv_obj_t * obj);
+
+/**
+ * Get that height reduced by the top an bottom padding.
+ * @param obj pointer to an object
+ * @return the height which still fits into the container
+ */
+lv_coord_t lv_obj_get_height_fit(const lv_obj_t * obj);
+
+/**
+ * Get the automatic realign property of the object.
+ * @param obj pointer to an object
+ * @return  true: auto realign is enabled; false: auto realign is disabled
+ */
+bool lv_obj_get_auto_realign(const lv_obj_t * obj);
+
+/**
+ * Get the left padding of extended clickable area
+ * @param obj pointer to an object
+ * @return the extended left padding
+ */
+lv_coord_t lv_obj_get_ext_click_pad_left(const lv_obj_t * obj);
+
+/**
+ * Get the right padding of extended clickable area
+ * @param obj pointer to an object
+ * @return the extended right padding
+ */
+lv_coord_t lv_obj_get_ext_click_pad_right(const lv_obj_t * obj);
+
+/**
+ * Get the top padding of extended clickable area
+ * @param obj pointer to an object
+ * @return the extended top padding
+ */
+lv_coord_t lv_obj_get_ext_click_pad_top(const lv_obj_t * obj);
+
+/**
+ * Get the bottom padding of extended clickable area
+ * @param obj pointer to an object
+ * @return the extended bottom padding
+ */
+lv_coord_t lv_obj_get_ext_click_pad_bottom(const lv_obj_t * obj);
+
+/**
+ * Get the extended size attribute of an object
+ * @param obj pointer to an object
+ * @return the extended size attribute
+ */
+lv_coord_t lv_obj_get_ext_draw_pad(const lv_obj_t * obj);
+
+/*-----------------
+ * Appearance get
+ *---------------*/
+
+/**
+ * Get the style pointer of an object (if NULL get style of the parent)
+ * @param obj pointer to an object
+ * @return pointer to a style
+ */
+const lv_style_t * lv_obj_get_style(const lv_obj_t * obj);
+
+/*-----------------
+ * Attribute get
+ *----------------*/
+
+/**
+ * Get the hidden attribute of an object
+ * @param obj pointer to an object
+ * @return true: the object is hidden
+ */
+bool lv_obj_get_hidden(const lv_obj_t * obj);
+
+/**
+ * Get the click enable attribute of an object
+ * @param obj pointer to an object
+ * @return true: the object is clickable
+ */
+bool lv_obj_get_click(const lv_obj_t * obj);
+
+/**
+ * Get the top enable attribute of an object
+ * @param obj pointer to an object
+ * @return true: the auto top feature is enabled
+ */
+bool lv_obj_get_top(const lv_obj_t * obj);
+
+/**
+ * Get the drag enable attribute of an object
+ * @param obj pointer to an object
+ * @return true: the object is dragable
+ */
+bool lv_obj_get_drag(const lv_obj_t * obj);
+
+/**
+ * Get the directions an object can be dragged
+ * @param obj pointer to an object
+ * @return bitwise OR of allowed directions an object can be dragged in
+ */
+lv_drag_dir_t lv_obj_get_drag_dir(const lv_obj_t * obj);
+
+/**
+ * Get the drag throw enable attribute of an object
+ * @param obj pointer to an object
+ * @return true: drag throw is enabled
+ */
+bool lv_obj_get_drag_throw(const lv_obj_t * obj);
+
+/**
+ * Get the drag parent attribute of an object
+ * @param obj pointer to an object
+ * @return true: drag parent is enabled
+ */
+bool lv_obj_get_drag_parent(const lv_obj_t * obj);
+
+/**
+ * Get the drag parent attribute of an object
+ * @param obj pointer to an object
+ * @return true: drag parent is enabled
+ */
+bool lv_obj_get_parent_event(const lv_obj_t * obj);
+
+
+lv_bidi_dir_t lv_obj_get_base_dir(const lv_obj_t * obj);
+
+/**
+ * Get the opa scale enable parameter
+ * @param obj pointer to an object
+ * @return true: opa scaling is enabled for this object and all children; 
false: no opa scaling
+ */
+lv_opa_t lv_obj_get_opa_scale_enable(const lv_obj_t * obj);
+
+/**
+ * Get the opa scale parameter of an object
+ * @param obj pointer to an object
+ * @return opa scale [0..255]
+ */
+lv_opa_t lv_obj_get_opa_scale(const lv_obj_t * obj);
+
+/**
+ * Get the protect field of an object
+ * @param obj pointer to an object
+ * @return protect field ('OR'ed values of `lv_protect_t`)
+ */
+uint8_t lv_obj_get_protect(const lv_obj_t * obj);
+
+/**
+ * Check at least one bit of a given protect bitfield is set
+ * @param obj pointer to an object
+ * @param prot protect bits to test ('OR'ed values of `lv_protect_t`)
+ * @return false: none of the given bits are set, true: at least one bit is set
+ */
+bool lv_obj_is_protected(const lv_obj_t * obj, uint8_t prot);
+
+/**
+ * Get the signal function of an object
+ * @param obj pointer to an object
+ * @return the signal function
+ */
+lv_signal_cb_t lv_obj_get_signal_cb(const lv_obj_t * obj);
+
+/**
+ * Get the design function of an object
+ * @param obj pointer to an object
+ * @return the design function
+ */
+lv_design_cb_t lv_obj_get_design_cb(const lv_obj_t * obj);
+
+/**
+ * Get the event function of an object
+ * @param obj pointer to an object
+ * @return the event function
+ */
+lv_event_cb_t lv_obj_get_event_cb(const lv_obj_t * obj);
+
+/*------------------
+ * Other get
+ *-----------------*/
+
+/**
+ * Get the ext pointer
+ * @param obj pointer to an object
+ * @return the ext pointer but not the dynamic version
+ *         Use it as ext->data1, and NOT da(ext)->data1
+ */
+void * lv_obj_get_ext_attr(const lv_obj_t * obj);
+
+/**
+ * Get object's and its ancestors type. Put their name in `type_buf` starting 
with the current type.
+ * E.g. buf.type[0]="lv_btn", buf.type[1]="lv_cont", buf.type[2]="lv_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(const lv_obj_t * obj, lv_obj_type_t * buf);
+
+#if LV_USE_USER_DATA
+/**
+ * Get the object's user data
+ * @param obj pointer to an object
+ * @return user data
+ */
+lv_obj_user_data_t lv_obj_get_user_data(const lv_obj_t * obj);
+
+/**
+ * Get a pointer to the object's user data
+ * @param obj pointer to an object
+ * @return pointer to the user data
+ */
+lv_obj_user_data_t * lv_obj_get_user_data_ptr(const lv_obj_t * obj);
+
+/**
+ * Set the object's user data. The data will be copied.
+ * @param obj pointer to an object
+ * @param data user data
+ */
+void lv_obj_set_user_data(lv_obj_t * obj, lv_obj_user_data_t data);
+
+#endif
+
+#if LV_USE_GROUP
+/**
+ * Get the group of the object
+ * @param obj pointer to an object
+ * @return the pointer to group of the object
+ */
+void * lv_obj_get_group(const lv_obj_t * obj);
+
+/**
+ * Tell whether the object is the focused object of a group or not.
+ * @param obj pointer to an object
+ * @return true: the object is focused, false: the object is not focused or 
not in a group
+ */
+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 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);
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**
+ * Helps to quickly declare an event callback function.
+ * Will be expanded to: `void <name> (lv_obj_t * obj, lv_event_t e)`
+ *
+ * Examples:
+ * static LV_EVENT_CB_DECLARE(my_event1);  //Protoype declaration
+ *
+ * static LV_EVENT_CB_DECLARE(my_event1)
+ * {
+ *   if(e == LV_EVENT_CLICKED) {
+ *      lv_obj_set_hidden(obj ,true);
+ *   }
+ * }
+ */
+#define LV_EVENT_CB_DECLARE(name) void name(lv_obj_t * obj, lv_event_t e)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_OBJ_H*/
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_refr.c 
b/scriptsrcs/lvgl/src/lv_core/lv_refr.c
new file mode 100755
index 0000000..5ee3fbb
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_refr.c
@@ -0,0 +1,583 @@
+/**
+ * @file lv_refr.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stddef.h>
+#include "lv_refr.h"
+#include "lv_disp.h"
+#include "../lv_hal/lv_hal_tick.h"
+#include "../lv_hal/lv_hal_disp.h"
+#include "../lv_misc/lv_task.h"
+#include "../lv_misc/lv_mem.h"
+#include "../lv_misc/lv_gc.h"
+#include "../lv_draw/lv_draw.h"
+
+#if defined(LV_GC_INCLUDE)
+#include LV_GC_INCLUDE
+#endif /* LV_ENABLE_GC */
+
+/*********************
+ *      DEFINES
+ *********************/
+/* Draw translucent random colored areas on the invalidated (redrawn) areas*/
+#define MASK_AREA_DEBUG 0
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static void lv_refr_join_area(void);
+static void lv_refr_areas(void);
+static void lv_refr_area(const lv_area_t * area_p);
+static void lv_refr_area_part(const lv_area_t * area_p);
+static lv_obj_t * lv_refr_get_top_obj(const lv_area_t * area_p, lv_obj_t * 
obj);
+static void lv_refr_obj_and_children(lv_obj_t * top_p, const lv_area_t * 
mask_p);
+static void lv_refr_obj(lv_obj_t * obj, const lv_area_t * mask_ori_p);
+static void lv_refr_vdb_flush(void);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static uint32_t px_num;
+static lv_disp_t * disp_refr; /*Display being refreshed*/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the screen refresh subsystem
+ */
+void lv_refr_init(void)
+{
+    /*Nothing to do*/
+}
+
+/**
+ * Redraw the invalidated areas now.
+ * Normally the redrawing is periodically executed in `lv_task_handler` but a 
long blocking process
+ * can prevent the call of `lv_task_handler`. In this case if the the GUI is 
updated in the process
+ * (e.g. progress bar) this function can be called when the screen should be 
updated.
+ * @param disp pointer to display to refresh. NULL to refresh all displays.
+ */
+void lv_refr_now(lv_disp_t * disp)
+{
+    if(disp) {
+        lv_disp_refr_task(disp->refr_task);
+    } else {
+        lv_disp_t * d;
+        d = lv_disp_get_next(NULL);
+        while(d) {
+            lv_disp_refr_task(d->refr_task);
+            d = lv_disp_get_next(d);
+        }
+    }
+}
+
+/**
+ * Invalidate an area on display to redraw it
+ * @param area_p pointer to area which should be invalidated (NULL: delete the 
invalidated areas)
+ * @param disp pointer to display where the area should be invalidated (NULL 
can be used if there is
+ * only one display)
+ */
+void lv_inv_area(lv_disp_t * disp, const lv_area_t * area_p)
+{
+    if(!disp) disp = lv_disp_get_default();
+    if(!disp) return;
+
+    /*Clear the invalidate buffer if the parameter is NULL*/
+    if(area_p == NULL) {
+        disp->inv_p = 0;
+        return;
+    }
+
+    lv_area_t scr_area;
+    scr_area.x1 = 0;
+    scr_area.y1 = 0;
+    scr_area.x2 = lv_disp_get_hor_res(disp) - 1;
+    scr_area.y2 = lv_disp_get_ver_res(disp) - 1;
+
+    lv_area_t com_area;
+    bool suc;
+
+    suc = lv_area_intersect(&com_area, area_p, &scr_area);
+
+    /*The area is truncated to the screen*/
+    if(suc != false) {
+        if(disp->driver.rounder_cb) disp->driver.rounder_cb(&disp->driver, 
&com_area);
+
+        /*Save only if this area is not in one of the saved areas*/
+        uint16_t i;
+        for(i = 0; i < disp->inv_p; i++) {
+            if(lv_area_is_in(&com_area, &disp->inv_areas[i]) != false) return;
+        }
+
+        /*Save the area*/
+        if(disp->inv_p < LV_INV_BUF_SIZE) {
+            lv_area_copy(&disp->inv_areas[disp->inv_p], &com_area);
+        } else { /*If no place for the area add the screen*/
+            disp->inv_p = 0;
+            lv_area_copy(&disp->inv_areas[disp->inv_p], &scr_area);
+        }
+        disp->inv_p++;
+    }
+}
+
+/**
+ * Get the display which is being refreshed
+ * @return the display being refreshed
+ */
+lv_disp_t * lv_refr_get_disp_refreshing(void)
+{
+    return disp_refr;
+}
+
+/**
+ * Set the display which is being refreshed.
+ * It shouldn1t be used directly by the user.
+ * It can be used to trick the drawing functions about there is an active 
display.
+ * @param the display being refreshed
+ */
+void lv_refr_set_disp_refreshing(lv_disp_t * disp)
+{
+    disp_refr = disp;
+}
+
+/**
+ * Called periodically to handle the refreshing
+ * @param task pointer to the task itself
+ */
+void lv_disp_refr_task(lv_task_t * task)
+{
+    LV_LOG_TRACE("lv_refr_task: started");
+
+    uint32_t start = lv_tick_get();
+
+    disp_refr = task->user_data;
+
+    lv_refr_join_area();
+
+    lv_refr_areas();
+
+    /*If refresh happened ...*/
+    if(disp_refr->inv_p != 0) {
+        /*In true double buffered mode copy the refreshed areas to the new VDB 
to keep it up to
+         * date*/
+        if(lv_disp_is_true_double_buf(disp_refr)) {
+            lv_disp_buf_t * vdb = lv_disp_get_buf(disp_refr);
+
+            /*Flush the content of the VDB*/
+            lv_refr_vdb_flush();
+
+            /* With true double buffering the flushing should be only the 
address change of the
+             * current frame buffer. Wait until the address change is ready 
and copy the changed
+             * content to the other frame buffer (new active VDB) to keep the 
buffers synchronized*/
+            while(vdb->flushing)
+                ;
+
+            uint8_t * buf_act = (uint8_t *)vdb->buf_act;
+            uint8_t * buf_ina = (uint8_t *)vdb->buf_act == vdb->buf1 ? 
vdb->buf2 : vdb->buf1;
+
+            lv_coord_t hres = lv_disp_get_hor_res(disp_refr);
+            uint16_t a;
+            for(a = 0; a < disp_refr->inv_p; a++) {
+                if(disp_refr->inv_area_joined[a] == 0) {
+                    lv_coord_t y;
+                    uint32_t start_offs =
+                        (hres * disp_refr->inv_areas[a].y1 + 
disp_refr->inv_areas[a].x1) * sizeof(lv_color_t);
+                    uint32_t line_length = 
lv_area_get_width(&disp_refr->inv_areas[a]) * sizeof(lv_color_t);
+
+                    for(y = disp_refr->inv_areas[a].y1; y <= 
disp_refr->inv_areas[a].y2; y++) {
+                        memcpy(buf_act + start_offs, buf_ina + start_offs, 
line_length);
+                        start_offs += hres * sizeof(lv_color_t);
+                    }
+                }
+            }
+        } /*End of true double buffer handling*/
+
+        /*Clean up*/
+        memset(disp_refr->inv_areas, 0, sizeof(disp_refr->inv_areas));
+        memset(disp_refr->inv_area_joined, 0, 
sizeof(disp_refr->inv_area_joined));
+        disp_refr->inv_p = 0;
+
+        /*Call monitor cb if present*/
+        if(disp_refr->driver.monitor_cb) {
+            disp_refr->driver.monitor_cb(&disp_refr->driver, 
lv_tick_elaps(start), px_num);
+        }
+    }
+
+    lv_draw_free_buf();
+
+    LV_LOG_TRACE("lv_refr_task: ready");
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Join the areas which has got common parts
+ */
+static void lv_refr_join_area(void)
+{
+    uint32_t join_from;
+    uint32_t join_in;
+    lv_area_t joined_area;
+    for(join_in = 0; join_in < disp_refr->inv_p; join_in++) {
+        if(disp_refr->inv_area_joined[join_in] != 0) continue;
+
+        /*Check all areas to join them in 'join_in'*/
+        for(join_from = 0; join_from < disp_refr->inv_p; join_from++) {
+            /*Handle only unjoined areas and ignore itself*/
+            if(disp_refr->inv_area_joined[join_from] != 0 || join_in == 
join_from) {
+                continue;
+            }
+
+            /*Check if the areas are on each other*/
+            if(lv_area_is_on(&disp_refr->inv_areas[join_in], 
&disp_refr->inv_areas[join_from]) == false) {
+                continue;
+            }
+
+            lv_area_join(&joined_area, &disp_refr->inv_areas[join_in], 
&disp_refr->inv_areas[join_from]);
+
+            /*Join two area only if the joined area size is smaller*/
+            if(lv_area_get_size(&joined_area) < 
(lv_area_get_size(&disp_refr->inv_areas[join_in]) +
+                                                 
lv_area_get_size(&disp_refr->inv_areas[join_from]))) {
+                lv_area_copy(&disp_refr->inv_areas[join_in], &joined_area);
+
+                /*Mark 'join_form' is joined into 'join_in'*/
+                disp_refr->inv_area_joined[join_from] = 1;
+            }
+        }
+    }
+}
+
+/**
+ * Refresh the joined areas
+ */
+static void lv_refr_areas(void)
+{
+    px_num = 0;
+    uint32_t i;
+
+    for(i = 0; i < disp_refr->inv_p; i++) {
+        /*Refresh the unjoined areas*/
+        if(disp_refr->inv_area_joined[i] == 0) {
+
+            lv_refr_area(&disp_refr->inv_areas[i]);
+
+            if(disp_refr->driver.monitor_cb) px_num += 
lv_area_get_size(&disp_refr->inv_areas[i]);
+        }
+    }
+}
+
+/**
+ * Refresh an area if there is Virtual Display Buffer
+ * @param area_p  pointer to an area to refresh
+ */
+static void lv_refr_area(const lv_area_t * area_p)
+{
+    /*True double buffering: there are two screen sized buffers. Just redraw 
directly into a
+     * buffer*/
+    if(lv_disp_is_true_double_buf(disp_refr)) {
+        lv_disp_buf_t * vdb = lv_disp_get_buf(disp_refr);
+        vdb->area.x1        = 0;
+        vdb->area.x2        = lv_disp_get_hor_res(disp_refr) - 1;
+        vdb->area.y1        = 0;
+        vdb->area.y2        = lv_disp_get_ver_res(disp_refr) - 1;
+        lv_refr_area_part(area_p);
+    }
+    /*The buffer is smaller: refresh the area in parts*/
+    else {
+        lv_disp_buf_t * vdb = lv_disp_get_buf(disp_refr);
+        /*Calculate the max row num*/
+        lv_coord_t w = lv_area_get_width(area_p);
+        lv_coord_t h = lv_area_get_height(area_p);
+        lv_coord_t y2 =
+            area_p->y2 >= lv_disp_get_ver_res(disp_refr) ? y2 = 
lv_disp_get_ver_res(disp_refr) - 1 : area_p->y2;
+
+        int32_t max_row = (uint32_t)vdb->size / w;
+
+        if(max_row > h) max_row = h;
+
+        /*Round down the lines of VDB if rounding is added*/
+        if(disp_refr->driver.rounder_cb) {
+            lv_area_t tmp;
+            tmp.x1 = 0;
+            tmp.x2 = 0;
+            tmp.y1 = 0;
+
+            lv_coord_t h_tmp = max_row;
+            do {
+                tmp.y2 = h_tmp - 1;
+                disp_refr->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*/
+                h_tmp--;
+            } while(h_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;
+            } else {
+                max_row = tmp.y2 + 1;
+            }
+        }
+
+        /*Always use the full row*/
+        lv_coord_t row;
+        lv_coord_t row_last = 0;
+        for(row = area_p->y1; row + max_row - 1 <= y2; row += max_row) {
+            /*Calc. the next y coordinates of VDB*/
+            vdb->area.x1 = area_p->x1;
+            vdb->area.x2 = area_p->x2;
+            vdb->area.y1 = row;
+            vdb->area.y2 = row + max_row - 1;
+            if(vdb->area.y2 > y2) vdb->area.y2 = y2;
+            row_last = vdb->area.y2;
+            lv_refr_area_part(area_p);
+        }
+
+        /*If the last y coordinates are not handled yet ...*/
+        if(y2 != row_last) {
+            /*Calc. the next y coordinates of VDB*/
+            vdb->area.x1 = area_p->x1;
+            vdb->area.x2 = area_p->x2;
+            vdb->area.y1 = row;
+            vdb->area.y2 = y2;
+
+            /*Refresh this part too*/
+            lv_refr_area_part(area_p);
+        }
+    }
+}
+
+/**
+ * Refresh a part of an area which is on the actual Virtual Display Buffer
+ * @param area_p pointer to an area to refresh
+ */
+static void lv_refr_area_part(const lv_area_t * area_p)
+{
+
+    lv_disp_buf_t * vdb = lv_disp_get_buf(disp_refr);
+
+    /*In non double buffered mode, before rendering the next part wait until 
the previous image is
+     * flushed*/
+    if(lv_disp_is_double_buf(disp_refr) == false) {
+        while(vdb->flushing)
+            ;
+    }
+
+    lv_obj_t * top_p;
+
+    /*Get the new mask from the original area and the act. VDB
+     It will be a part of 'area_p'*/
+    lv_area_t start_mask;
+    lv_area_intersect(&start_mask, area_p, &vdb->area);
+
+    /*Get the most top object which is not covered by others*/
+    top_p = lv_refr_get_top_obj(&start_mask, lv_disp_get_scr_act(disp_refr));
+
+    /*Do the refreshing from the top object*/
+    lv_refr_obj_and_children(top_p, &start_mask);
+
+    /*Also refresh top and sys layer unconditionally*/
+    lv_refr_obj_and_children(lv_disp_get_layer_top(disp_refr), &start_mask);
+    lv_refr_obj_and_children(lv_disp_get_layer_sys(disp_refr), &start_mask);
+
+    /* In true double buffered mode flush only once when all areas were 
rendered.
+     * In normal mode flush after every area */
+    if(lv_disp_is_true_double_buf(disp_refr) == false) {
+        lv_refr_vdb_flush();
+    }
+}
+
+/**
+ * Search the most top object which fully covers an area
+ * @param area_p pointer to an area
+ * @param obj the first object to start the searching (typically a screen)
+ * @return
+ */
+static lv_obj_t * lv_refr_get_top_obj(const lv_area_t * area_p, lv_obj_t * obj)
+{
+    lv_obj_t * found_p = NULL;
+
+    /*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_obj_t * i;
+        LV_LL_READ(obj->child_ll, i)
+        {
+            found_p = lv_refr_get_top_obj(area_p, i);
+
+            /*If a children is ok then break*/
+            if(found_p != NULL) {
+                break;
+            }
+        }
+
+        /*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) {
+                found_p = obj;
+            }
+        }
+    }
+
+    return found_p;
+}
+
+/**
+ * Make the refreshing from an object. Draw all its children and the youngers 
too.
+ * @param top_p pointer to an objects. Start the drawing from it.
+ * @param mask_p pointer to an area, the objects will be drawn only here
+ */
+static void lv_refr_obj_and_children(lv_obj_t * top_p, const lv_area_t * 
mask_p)
+{
+    /* Normally always will be a top_obj (at least the screen)
+     * but in special cases (e.g. if the screen has alpha) it won't.
+     * In this case use the screen directly */
+    if(top_p == NULL) top_p = lv_disp_get_scr_act(disp_refr);
+
+    /*Refresh the top object and its children*/
+    lv_refr_obj(top_p, mask_p);
+
+    /*Draw the 'younger' sibling objects because they can be on top_obj */
+    lv_obj_t * par;
+    lv_obj_t * border_p = top_p;
+
+    par = lv_obj_get_parent(top_p);
+
+    /*Do until not reach the screen*/
+    while(par != NULL) {
+        /*object before border_p has to be redrawn*/
+        lv_obj_t * i = lv_ll_get_prev(&(par->child_ll), border_p);
+
+        while(i != NULL) {
+            /*Refresh the objects*/
+            lv_refr_obj(i, mask_p);
+            i = lv_ll_get_prev(&(par->child_ll), i);
+        }
+
+        /*Call the post draw design function of the parents of the to object*/
+        par->design_cb(par, mask_p, LV_DESIGN_DRAW_POST);
+
+        /*The new border will be there last parents,
+         *so the 'younger' brothers of parent will be refreshed*/
+        border_p = par;
+        /*Go a level deeper*/
+        par = lv_obj_get_parent(par);
+    }
+}
+
+/**
+ * Refresh an object an all of its children. (Called recursively)
+ * @param obj pointer to an object to refresh
+ * @param mask_ori_p pointer to an area, the objects will be drawn only here
+ */
+static void lv_refr_obj(lv_obj_t * obj, const lv_area_t * mask_ori_p)
+{
+    /*Do not refresh hidden objects*/
+    if(obj->hidden != 0) return;
+
+    bool union_ok; /* Store the return value of area_union */
+    /* Truncate the original mask to the coordinates of the parent
+     * because the parent and its children are visible only here */
+    lv_area_t obj_mask;
+    lv_area_t obj_ext_mask;
+    lv_area_t obj_area;
+    lv_coord_t ext_size = obj->ext_draw_pad;
+    lv_obj_get_coords(obj, &obj_area);
+    obj_area.x1 -= ext_size;
+    obj_area.y1 -= ext_size;
+    obj_area.x2 += ext_size;
+    obj_area.y2 += ext_size;
+    union_ok = lv_area_intersect(&obj_ext_mask, mask_ori_p, &obj_area);
+
+    /*Draw the parent and its children only if they ore on 'mask_parent'*/
+    if(union_ok != false) {
+
+        /* Redraw the object */
+        obj->design_cb(obj, &obj_ext_mask, LV_DESIGN_DRAW_MAIN);
+
+#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);
+        debug_color.full *= 17;
+        debug_color.full += 0xA1;
+#endif
+        /*Create a new 'obj_mask' without 'ext_size' because the children 
can't be visible there*/
+        lv_obj_get_coords(obj, &obj_area);
+        union_ok = lv_area_intersect(&obj_mask, mask_ori_p, &obj_area);
+        if(union_ok != false) {
+            lv_area_t mask_child; /*Mask from obj and its child*/
+            lv_obj_t * child_p;
+            lv_area_t child_area;
+            LV_LL_READ_BACK(obj->child_ll, child_p)
+            {
+                lv_obj_get_coords(child_p, &child_area);
+                ext_size = child_p->ext_draw_pad;
+                child_area.x1 -= ext_size;
+                child_area.y1 -= ext_size;
+                child_area.x2 += ext_size;
+                child_area.y2 += ext_size;
+                /* Get the union (common parts) of original mask (from obj)
+                 * and its child */
+                union_ok = lv_area_intersect(&mask_child, &obj_mask, 
&child_area);
+
+                /*If the parent and the child has common area then refresh the 
child */
+                if(union_ok) {
+                    /*Refresh the next children*/
+                    lv_refr_obj(child_p, &mask_child);
+                }
+            }
+        }
+
+        /* If all the children are redrawn make 'post draw' design */
+        obj->design_cb(obj, &obj_ext_mask, LV_DESIGN_DRAW_POST);
+    }
+}
+
+/**
+ * Flush the content of the VDB
+ */
+static void lv_refr_vdb_flush(void)
+{
+    lv_disp_buf_t * vdb = lv_disp_get_buf(disp_refr);
+
+    /*In double buffered mode wait until the other buffer is flushed before 
flushing the current
+     * one*/
+    if(lv_disp_is_double_buf(disp_refr)) {
+        while(vdb->flushing)
+            ;
+    }
+
+    vdb->flushing = 1;
+
+    /*Flush the rendered content to the display*/
+    lv_disp_t * disp = lv_refr_get_disp_refreshing();
+    if(disp->driver.flush_cb) disp->driver.flush_cb(&disp->driver, &vdb->area, 
vdb->buf_act);
+
+    if(vdb->buf1 && vdb->buf2) {
+        if(vdb->buf_act == vdb->buf1)
+            vdb->buf_act = vdb->buf2;
+        else
+            vdb->buf_act = vdb->buf1;
+    }
+}
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_refr.h 
b/scriptsrcs/lvgl/src/lv_core/lv_refr.h
new file mode 100755
index 0000000..8c0ed03
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_refr.h
@@ -0,0 +1,93 @@
+/**
+ * @file lv_refr.h
+ *
+ */
+
+#ifndef LV_REFR_H
+#define LV_REFR_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_obj.h"
+#include <stdbool.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the screen refresh subsystem
+ */
+void lv_refr_init(void);
+
+/**
+ * Redraw the invalidated areas now.
+ * Normally the redrawing is periodically executed in `lv_task_handler` but a 
long blocking process
+ * can prevent the call of `lv_task_handler`. In this case if the the GUI is 
updated in the process
+ * (e.g. progress bar) this function can be called when the screen should be 
updated.
+ * @param disp pointer to display to refresh. NULL to refresh all displays.
+ */
+void lv_refr_now(lv_disp_t * disp);
+
+/**
+ * Invalidate an area on display to redraw it
+ * @param area_p pointer to area which should be invalidated (NULL: delete the 
invalidated areas)
+ * @param disp pointer to display where the area should be invalidated (NULL 
can be used if there is
+ * only one display)
+ */
+void lv_inv_area(lv_disp_t * disp, const lv_area_t * area_p);
+
+/**
+ * Get the display which is being refreshed
+ * @return the display being refreshed
+ */
+lv_disp_t * lv_refr_get_disp_refreshing(void);
+
+/**
+ * Set the display which is being refreshed.
+ * It shouldn1t be used directly by the user.
+ * It can be used to trick the drawing functions about there is an active 
display.
+ * @param the display being refreshed
+ */
+void lv_refr_set_disp_refreshing(lv_disp_t * disp);
+
+/**
+ * Called periodically to handle the refreshing
+ * @param task pointer to the task itself
+ */
+void lv_disp_refr_task(lv_task_t * task);
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_REFR_H*/
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_style.c 
b/scriptsrcs/lvgl/src/lv_core/lv_style.c
new file mode 100755
index 0000000..718fa6b
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_style.c
@@ -0,0 +1,353 @@
+/**
+ * @file lv_style.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_obj.h"
+#include "../lv_core/lv_debug.h"
+#include "../lv_misc/lv_mem.h"
+#include "../lv_misc/lv_anim.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define STYLE_MIX_MAX 256
+#define STYLE_MIX_SHIFT 8 /*log2(STYLE_MIX_MAX)*/
+
+#define VAL_PROP(v1, v2, r) v1 + (((v2 - v1) * r) >> STYLE_MIX_SHIFT)
+#define STYLE_ATTR_MIX(attr, r)                                                
                                        \
+    if(start->attr != end->attr) {                                             
                                        \
+        res->attr = VAL_PROP(start->attr, end->attr, r);                       
                                        \
+    } else {                                                                   
                                        \
+        res->attr = start->attr;                                               
                                        \
+    }
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+#if LV_USE_ANIMATION
+static void style_animator(lv_style_anim_dsc_t * dsc, lv_anim_value_t val);
+static void style_animation_common_end_cb(lv_anim_t * a);
+#endif
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+lv_style_t lv_style_scr;
+lv_style_t lv_style_transp;
+lv_style_t lv_style_transp_fit;
+lv_style_t lv_style_transp_tight;
+lv_style_t lv_style_plain;
+lv_style_t lv_style_plain_color;
+lv_style_t lv_style_pretty;
+lv_style_t lv_style_pretty_color;
+lv_style_t lv_style_btn_rel;
+lv_style_t lv_style_btn_pr;
+lv_style_t lv_style_btn_tgl_rel;
+lv_style_t lv_style_btn_tgl_pr;
+lv_style_t lv_style_btn_ina;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ *  Init the basic styles
+ */
+void lv_style_init(void)
+{
+    /* Not White/Black/Gray colors are created by HSV model with
+     * HUE = 210*/
+
+    /*Screen style*/
+    lv_style_scr.glass               = 0;
+    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.radius         = 0;
+    lv_style_scr.body.padding.left   = 0;
+    lv_style_scr.body.padding.right  = 0;
+    lv_style_scr.body.padding.top    = 0;
+    lv_style_scr.body.padding.bottom = 0;
+    lv_style_scr.body.padding.inner  = LV_DPI / 20;
+
+    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.shadow.color = LV_COLOR_GRAY;
+    lv_style_scr.body.shadow.type  = LV_SHADOW_FULL;
+    lv_style_scr.body.shadow.width = 0;
+
+    lv_style_scr.text.opa          = LV_OPA_COVER;
+    lv_style_scr.text.color        = lv_color_make(0x30, 0x30, 0x30);
+    lv_style_scr.text.sel_color    = lv_color_make(0x55, 0x96, 0xd8);
+    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.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.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;
+
+#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.padding.left   = LV_DPI / 20;
+    lv_style_plain.body.padding.right  = LV_DPI / 20;
+    lv_style_plain.body.padding.top    = LV_DPI / 20;
+    lv_style_plain.body.padding.bottom = LV_DPI / 20;
+
+    /*Plain color style*/
+    lv_style_copy(&lv_style_plain_color, &lv_style_plain);
+    lv_style_plain_color.text.color      = lv_color_make(0xf0, 0xf0, 0xf0);
+    lv_style_plain_color.image.color     = lv_color_make(0xf0, 0xf0, 0xf0);
+    lv_style_plain_color.line.color      = lv_color_make(0xf0, 0xf0, 0xf0);
+    lv_style_plain_color.body.main_color = lv_color_make(0x55, 0x96, 0xd8);
+    lv_style_plain_color.body.grad_color = 
lv_style_plain_color.body.main_color;
+
+    /*Pretty style */
+    lv_style_copy(&lv_style_pretty, &lv_style_plain);
+    lv_style_pretty.text.color        = lv_color_make(0x20, 0x20, 0x20);
+    lv_style_pretty.image.color       = lv_color_make(0x20, 0x20, 0x20);
+    lv_style_pretty.line.color        = lv_color_make(0x20, 0x20, 0x20);
+    lv_style_pretty.body.main_color   = LV_COLOR_WHITE;
+    lv_style_pretty.body.grad_color   = LV_COLOR_SILVER;
+    lv_style_pretty.body.radius       = LV_DPI / 15;
+    lv_style_pretty.body.border.color = lv_color_make(0x40, 0x40, 0x40);
+    lv_style_pretty.body.border.width = LV_DPI / 50 >= 1 ? LV_DPI / 50 : 1;
+    lv_style_pretty.body.border.opa   = LV_OPA_30;
+
+    /*Pretty color style*/
+    lv_style_copy(&lv_style_pretty_color, &lv_style_pretty);
+    lv_style_pretty_color.text.color        = lv_color_make(0xe0, 0xe0, 0xe0);
+    lv_style_pretty_color.image.color       = lv_color_make(0xe0, 0xe0, 0xe0);
+    lv_style_pretty_color.line.color        = lv_color_make(0xc0, 0xc0, 0xc0);
+    lv_style_pretty_color.body.main_color   = lv_color_make(0x6b, 0x9a, 0xc7);
+    lv_style_pretty_color.body.grad_color   = lv_color_make(0x2b, 0x59, 0x8b);
+    lv_style_pretty_color.body.border.color = lv_color_make(0x15, 0x2c, 0x42);
+
+    /*Transparent style*/
+    lv_style_copy(&lv_style_transp, &lv_style_plain);
+    lv_style_transp.glass             = 1;
+    lv_style_transp.body.border.width = 0;
+    lv_style_transp.body.opa          = LV_OPA_TRANSP;
+
+    /*Transparent fitting size*/
+    lv_style_copy(&lv_style_transp_fit, &lv_style_transp);
+    lv_style_transp_fit.body.padding.left   = 0;
+    lv_style_transp_fit.body.padding.right  = 0;
+    lv_style_transp_fit.body.padding.top    = 0;
+    lv_style_transp_fit.body.padding.bottom = 0;
+
+    /*Transparent tight style*/
+    lv_style_copy(&lv_style_transp_tight, &lv_style_transp_fit);
+    lv_style_transp_tight.body.padding.inner = 0;
+
+    /*Button released style*/
+    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.radius         = LV_DPI / 15;
+    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;
+    lv_style_btn_rel.body.padding.bottom = LV_DPI / 6;
+    lv_style_btn_rel.body.padding.inner  = LV_DPI / 10;
+    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.width   = 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);
+
+    /*Button pressed style*/
+    lv_style_copy(&lv_style_btn_pr, &lv_style_btn_rel);
+    lv_style_btn_pr.body.main_color = lv_color_make(0x33, 0x62, 0x94);
+    lv_style_btn_pr.body.grad_color = lv_color_make(0x10, 0x26, 0x3c);
+    lv_style_btn_pr.text.color      = lv_color_make(0xa4, 0xb5, 0xc6);
+    lv_style_btn_pr.image.color     = lv_color_make(0xa4, 0xb5, 0xc6);
+    lv_style_btn_pr.line.color      = lv_color_make(0xa4, 0xb5, 0xc6);
+
+    /*Button toggle released style*/
+    lv_style_copy(&lv_style_btn_tgl_rel, &lv_style_btn_rel);
+    lv_style_btn_tgl_rel.body.main_color   = lv_color_make(0x0a, 0x11, 0x22);
+    lv_style_btn_tgl_rel.body.grad_color   = lv_color_make(0x37, 0x62, 0x90);
+    lv_style_btn_tgl_rel.body.border.color = lv_color_make(0x01, 0x07, 0x0d);
+    lv_style_btn_tgl_rel.text.color        = lv_color_make(0xc8, 0xdd, 0xf4);
+    lv_style_btn_tgl_rel.image.color       = lv_color_make(0xc8, 0xdd, 0xf4);
+    lv_style_btn_tgl_rel.line.color        = lv_color_make(0xc8, 0xdd, 0xf4);
+
+    /*Button toggle pressed style*/
+    lv_style_copy(&lv_style_btn_tgl_pr, &lv_style_btn_tgl_rel);
+    lv_style_btn_tgl_pr.body.main_color = lv_color_make(0x02, 0x14, 0x27);
+    lv_style_btn_tgl_pr.body.grad_color = lv_color_make(0x2b, 0x4c, 0x70);
+    lv_style_btn_tgl_pr.text.color      = lv_color_make(0xa4, 0xb5, 0xc6);
+    lv_style_btn_tgl_pr.image.color     = lv_color_make(0xa4, 0xb5, 0xc6);
+    lv_style_btn_tgl_pr.line.color      = lv_color_make(0xa4, 0xb5, 0xc6);
+
+    /*Button inactive style*/
+    lv_style_copy(&lv_style_btn_ina, &lv_style_btn_rel);
+    lv_style_btn_ina.body.main_color   = lv_color_make(0xd8, 0xd8, 0xd8);
+    lv_style_btn_ina.body.grad_color   = lv_color_make(0xd8, 0xd8, 0xd8);
+    lv_style_btn_ina.body.border.color = lv_color_make(0x90, 0x90, 0x90);
+    lv_style_btn_ina.text.color        = lv_color_make(0x70, 0x70, 0x70);
+    lv_style_btn_ina.image.color       = lv_color_make(0x70, 0x70, 0x70);
+    lv_style_btn_ina.line.color        = lv_color_make(0x70, 0x70, 0x70);
+}
+
+/**
+ * Copy a style to an other
+ * @param dest pointer to the destination style
+ * @param src pointer to the source style
+ */
+void lv_style_copy(lv_style_t * dest, const lv_style_t * src)
+{
+    memcpy(dest, src, sizeof(lv_style_t));
+}
+
+/**
+ * Mix two styles according to a given ratio
+ * @param start start style
+ * @param end end style
+ * @param res store the result style here
+ * @param ratio the ratio of mix [0..256]; 0: `start` style; 256: `end` style
+ */
+void lv_style_mix(const lv_style_t * start, const lv_style_t * end, lv_style_t 
* res, uint16_t ratio)
+{
+    STYLE_ATTR_MIX(body.opa, ratio);
+    STYLE_ATTR_MIX(body.radius, ratio);
+    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.padding.left, ratio);
+    STYLE_ATTR_MIX(body.padding.right, ratio);
+    STYLE_ATTR_MIX(body.padding.top, ratio);
+    STYLE_ATTR_MIX(body.padding.bottom, ratio);
+    STYLE_ATTR_MIX(body.padding.inner, ratio);
+    STYLE_ATTR_MIX(text.line_space, ratio);
+    STYLE_ATTR_MIX(text.letter_space, ratio);
+    STYLE_ATTR_MIX(text.opa, ratio);
+    STYLE_ATTR_MIX(line.width, ratio);
+    STYLE_ATTR_MIX(line.opa, ratio);
+    STYLE_ATTR_MIX(image.intense, ratio);
+    STYLE_ATTR_MIX(image.opa, ratio);
+
+    lv_opa_t opa = ratio == STYLE_MIX_MAX ? LV_OPA_COVER : ratio;
+
+    res->body.main_color   = lv_color_mix(end->body.main_color, 
start->body.main_color, opa);
+    res->body.grad_color   = lv_color_mix(end->body.grad_color, 
start->body.grad_color, opa);
+    res->body.border.color = lv_color_mix(end->body.border.color, 
start->body.border.color, opa);
+    res->body.shadow.color = lv_color_mix(end->body.shadow.color, 
start->body.shadow.color, opa);
+    res->text.color        = lv_color_mix(end->text.color, start->text.color, 
opa);
+    res->image.color       = lv_color_mix(end->image.color, 
start->image.color, opa);
+    res->line.color        = lv_color_mix(end->line.color, start->line.color, 
opa);
+
+    if(ratio < (STYLE_MIX_MAX >> 1)) {
+        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;
+    }
+}
+
+#if LV_USE_ANIMATION
+
+void lv_style_anim_init(lv_anim_t * a)
+{
+    lv_anim_init(a);
+    a->start    = 0;
+    a->end      = STYLE_MIX_MAX;
+    a->exec_cb  = (lv_anim_exec_xcb_t)style_animator;
+    a->path_cb  = lv_anim_path_linear;
+    a->ready_cb = style_animation_common_end_cb;
+
+    lv_style_anim_dsc_t * dsc;
+    dsc = lv_mem_alloc(sizeof(lv_style_anim_dsc_t));
+    LV_ASSERT_MEM(dsc);
+    if(dsc == NULL) return;
+    dsc->ready_cb   = NULL;
+    dsc->style_anim = NULL;
+    lv_style_copy(&dsc->style_start, &lv_style_plain);
+    lv_style_copy(&dsc->style_end, &lv_style_plain);
+
+    a->var = (void *)dsc;
+}
+
+void lv_style_anim_set_styles(lv_anim_t * a, lv_style_t * to_anim, const 
lv_style_t * start, const lv_style_t * end)
+{
+
+    lv_style_anim_dsc_t * dsc = a->var;
+    dsc->style_anim           = to_anim;
+    memcpy(&dsc->style_start, start, sizeof(lv_style_t));
+    memcpy(&dsc->style_end, end, sizeof(lv_style_t));
+    memcpy(dsc->style_anim, start, sizeof(lv_style_t));
+}
+#endif
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+#if LV_USE_ANIMATION
+/**
+ * Used by the style animations to set the values of a style according to 
start and end style.
+ * @param dsc the 'animated variable' set by lv_style_anim_create()
+ * @param val the current state of the animation between 0 and 
LV_ANIM_RESOLUTION
+ */
+static void style_animator(lv_style_anim_dsc_t * dsc, lv_anim_value_t val)
+{
+    const lv_style_t * start = &dsc->style_start;
+    const lv_style_t * end   = &dsc->style_end;
+    lv_style_t * act         = dsc->style_anim;
+
+    lv_style_mix(start, end, act, val);
+
+    lv_obj_report_style_mod(dsc->style_anim);
+}
+
+/**
+ * Called when a style animation is ready
+ * It called the user defined call back and free the allocated memories
+ * @param a pointer to the animation
+ */
+static void style_animation_common_end_cb(lv_anim_t * a)
+{
+
+    (void)a;                            /*Unused*/
+    lv_style_anim_dsc_t * dsc = a->var; /*To avoid casting*/
+
+    if(dsc->ready_cb) dsc->ready_cb(a);
+
+    lv_mem_free(dsc);
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_core/lv_style.h 
b/scriptsrcs/lvgl/src/lv_core/lv_style.h
new file mode 100755
index 0000000..e002b2e
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_core/lv_style.h
@@ -0,0 +1,301 @@
+/**
+ * @file lv_style.h
+ *
+ */
+
+#ifndef LV_STYLE_H
+#define LV_STYLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stdbool.h>
+#include "../lv_font/lv_font.h"
+#include "../lv_misc/lv_color.h"
+#include "../lv_misc/lv_area.h"
+#include "../lv_misc/lv_anim.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
+ **********************/
+
+/*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)*/
+};
+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 */
+};
+typedef uint8_t lv_shadow_type_t;
+
+/**
+ * Objects in LittlevGL can be assigned a style - which holds information about
+ * how the object should be drawn.
+ * 
+ * This allows for easy customization without having to modify the object's 
design
+ * function.
+ */
+typedef struct
+{
+    uint8_t glass : 1; /**< 1: Do not inherit this style*/
+
+    /** Object background. */
+    struct
+    {
+        lv_color_t main_color; /**< Object's main background color. */
+        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). */
+
+        struct
+        {
+            lv_color_t color; /**< Border color */
+            lv_coord_t width; /**< Border width */
+            lv_border_part_t part; /**< Which borders to draw */
+            lv_opa_t opa; /**< Border opacity. */
+        } border;
+
+        
+        struct
+        {
+            lv_color_t color;
+            lv_coord_t width;
+            lv_shadow_type_t type; /**< Which parts of the shadow to draw */
+        } shadow;
+
+        struct
+        {
+            lv_coord_t top;
+            lv_coord_t bottom;
+            lv_coord_t left;
+            lv_coord_t right;
+            lv_coord_t inner;
+        } padding;
+    } body;
+
+    /** Style for text drawn by this object. */
+    struct
+    {
+        lv_color_t color; /**< Text color */
+        lv_color_t sel_color; /**< Text selection background color. */
+        const lv_font_t * font;
+        lv_coord_t letter_space; /**< Space between letters */
+        lv_coord_t line_space; /**< Space between lines (vertical) */
+        lv_opa_t opa; /**< Text opacity */
+    } text;
+
+    /**< Style of images. */
+    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 */
+    } image;
+
+    /**< Style of lines (not borders). */
+    struct
+    {
+        lv_color_t color;
+        lv_coord_t width;
+        lv_opa_t opa;
+        uint8_t rounded : 1; /**< 1: rounded line endings*/
+    } line;
+
+#if LV_USE_DEBUG
+#if LV_USE_ASSERT_STYLE
+    uint32_t debug_sentinel; /**<Should `LV_STYLE_DEGUG_SENTINEL_VALUE` to 
indicate that the style is valid*/
+#endif
+#endif
+
+} lv_style_t;
+
+#if LV_USE_ANIMATION
+/** Data structure for style animations. */
+typedef struct
+{
+    lv_style_t style_start; /*Save not only pointers because can be same as 
'style_anim' then it
+                               will be modified too*/
+    lv_style_t style_end;
+    lv_style_t * style_anim;
+    lv_anim_ready_cb_t ready_cb;
+} lv_style_anim_dsc_t;
+#endif
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ *  Init the basic styles
+ */
+void lv_style_init(void);
+
+/**
+ * Copy a style to an other
+ * @param dest pointer to the destination style
+ * @param src pointer to the source style
+ */
+void lv_style_copy(lv_style_t * dest, const lv_style_t * src);
+
+/**
+ * Mix two styles according to a given ratio
+ * @param start start style
+ * @param end end style
+ * @param res store the result style here
+ * @param ratio the ratio of mix [0..256]; 0: `start` style; 256: `end` style
+ */
+void lv_style_mix(const lv_style_t * start, const lv_style_t * end, lv_style_t 
* res, uint16_t ratio);
+
+#if LV_USE_ANIMATION
+
+/**
+ * Initialize an animation variable.
+ * E.g.:
+ * lv_anim_t a;
+ * lv_style_anim__init(&a);
+ * lv_style_anim_set_...(&a);
+ * lv_style_anim_create(&a);
+ * @param a pointer to an `lv_anim_t` variable to initialize
+ */
+void lv_style_anim_init(lv_anim_t * a);
+
+/**
+ *
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @param to_anim pointer to the style to animate
+ * @param start pointer to a style to animate from (start value)
+ * @param end pointer to a style to animate to (end value)
+ */
+void lv_style_anim_set_styles(lv_anim_t * a, lv_style_t * to_anim, const 
lv_style_t * start, const lv_style_t * end);
+
+/**
+ * Set the duration and delay of an animation
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @param duration duration of the animation in milliseconds
+ * @param delay delay before the animation in milliseconds
+ */
+static inline void lv_style_anim_set_time(lv_anim_t * a, uint16_t duration, 
int16_t delay)
+{
+    lv_anim_set_time(a, duration, delay);
+}
+
+/**
+ * Set a function call when the animation is ready
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @param ready_cb a function call when the animation is ready
+ */
+static inline void lv_style_anim_set_ready_cb(lv_anim_t * a, 
lv_anim_ready_cb_t ready_cb)
+{
+    lv_style_anim_dsc_t * dsc = (lv_style_anim_dsc_t *)a->var;
+    dsc->ready_cb             = ready_cb;
+}
+
+/**
+ * Make the animation to play back to when the forward direction is ready
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @param wait_time time in milliseconds to wait before starting the back 
direction
+ */
+static inline void lv_style_anim_set_playback(lv_anim_t * a, uint16_t 
wait_time)
+{
+    lv_anim_set_playback(a, wait_time);
+}
+
+/**
+ * Disable playback. (Disabled after `lv_anim_init()`)
+ * @param a pointer to an initialized `lv_anim_t` variable
+ */
+static inline void lv_style_anim_clear_playback(lv_anim_t * a)
+{
+    lv_anim_clear_playback(a);
+}
+
+/**
+ * Make the animation to start again when ready.
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @param wait_time time in milliseconds to wait before starting the animation 
again
+ */
+static inline void lv_style_anim_set_repeat(lv_anim_t * a, uint16_t wait_time)
+{
+    lv_anim_set_repeat(a, wait_time);
+}
+
+/**
+ * Disable repeat. (Disabled after `lv_anim_init()`)
+ * @param a pointer to an initialized `lv_anim_t` variable
+ */
+static inline void lv_style_anim_clear_repeat(lv_anim_t * a)
+{
+    lv_anim_clear_repeat(a);
+}
+
+/**
+ * Create an animation
+ * @param a an initialized 'anim_t' variable. Not required after call.
+ */
+static inline void lv_style_anim_create(lv_anim_t * a)
+{
+    lv_anim_create(a);
+}
+
+#endif
+
+/*************************
+ *    GLOBAL VARIABLES
+ *************************/
+extern lv_style_t lv_style_scr;
+extern lv_style_t lv_style_transp;
+extern lv_style_t lv_style_transp_fit;
+extern lv_style_t lv_style_transp_tight;
+extern lv_style_t lv_style_plain;
+extern lv_style_t lv_style_plain_color;
+extern lv_style_t lv_style_pretty;
+extern lv_style_t lv_style_pretty_color;
+extern lv_style_t lv_style_btn_rel;
+extern lv_style_t lv_style_btn_pr;
+extern lv_style_t lv_style_btn_tgl_rel;
+extern lv_style_t lv_style_btn_tgl_pr;
+extern lv_style_t lv_style_btn_ina;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**
+ * Create and initialize a `static` style
+ * Example:
+ *     LV_STYLE_CREATE(my_style, &lv_style_plain);
+ *   is equivalent to
+ *     static lv_style_t my_style;
+ *     lv_style_copy(my_style, &lv_style_plain);
+ *
+ * If the style to copy is `NULL` `lv_style_plain` will be used.
+ */
+#define LV_STYLE_CREATE(name, copy_p) static lv_style_t name; 
lv_style_copy(&name, copy_p == NULL ? &lv_style_plain : copy_p);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_STYLE_H*/
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_draw.c 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw.c
new file mode 100755
index 0000000..45eaff6
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw.c
@@ -0,0 +1,191 @@
+/**
+ * @file lv_draw.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+
+#include <stdio.h>
+#include <stdbool.h>
+#include "lv_draw.h"
+#include "../lv_core/lv_debug.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_ASSERT_MEM(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_ASSERT_MEM(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/scriptsrcs/lvgl/src/lv_draw/lv_draw.h 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw.h
new file mode 100755
index 0000000..a9fa58d
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw.h
@@ -0,0 +1,109 @@
+/**
+ * @file lv_draw.h
+ *
+ */
+
+#ifndef LV_DRAW_H
+#define LV_DRAW_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include "../lv_core/lv_style.h"
+#include "../lv_misc/lv_txt.h"
+#include "lv_img_decoder.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * 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
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   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" */
+#endif
+
+#endif /*LV_DRAW_H*/
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_draw.mk 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw.mk
new file mode 100755
index 0000000..c879ebe
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw.mk
@@ -0,0 +1,15 @@
+CSRCS += lv_draw_basic.c
+CSRCS += lv_draw.c
+CSRCS += lv_draw_rect.c
+CSRCS += lv_draw_label.c
+CSRCS += lv_draw_line.c
+CSRCS += lv_draw_img.c
+CSRCS += lv_draw_arc.c
+CSRCS += lv_draw_triangle.c
+CSRCS += lv_img_decoder.c
+CSRCS += lv_img_cache.c
+
+DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_draw
+VPATH += :$(LVGL_DIR)/lvgl/src/lv_draw
+
+CFLAGS += "-I$(LVGL_DIR)lvgl/src/lv_draw"
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_draw_arc.c 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_arc.c
new file mode 100755
index 0000000..5b19a12
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_arc.c
@@ -0,0 +1,251 @@
+/**
+ * @file lv_draw_arc.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_draw_arc.h"
+#include "../lv_misc/lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+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 VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Draw an arc. (Can draw pie too with great thickness.)
+ * @param center_x the x coordinate of the center of the arc
+ * @param center_y the y coordinate of the center of the arc
+ * @param radius the radius of the arc
+ * @param mask the arc will be drawn only in this mask
+ * @param start_angle the start angle of the arc (0 deg on the bottom, 90 deg 
on the right)
+ * @param end_angle the end angle of the arc
+ * @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)
+{
+    lv_coord_t thickness = style->line.width;
+    if(thickness > radius) thickness = radius;
+
+#if LV_ANTIALIAS
+    thickness--;
+    radius--;
+#endif
+
+    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_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;
+
+    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;
+
+    int middle_r_out = r_out;
+#if !LV_ANTIALIAS
+    thickness--;
+    middle_r_out = r_out - 1;
+#endif
+    if(deg_test(270, start_angle, end_angle))
+        hor_line(center_x - middle_r_out, center_y, mask, thickness, color, 
opa); /*Left Middle*/
+    if(deg_test(90, start_angle, end_angle))
+        hor_line(center_x + r_in, center_y, mask, thickness, color, opa); 
/*Right Middle*/
+    if(deg_test(180, start_angle, end_angle))
+        ver_line(center_x, center_y - middle_r_out, mask, thickness, color, 
opa); /*Top Middle*/
+    if(deg_test(0, start_angle, end_angle))
+        ver_line(center_x, center_y + r_in, mask, thickness, color, opa); 
/*Bottom middle*/
+
+    uint32_t r_out_sqr = r_out * r_out;
+    uint32_t r_in_sqr  = r_in * r_in;
+#if LV_ANTIALIAS
+    uint32_t r_out_aa_sqr = (r_out + 1) * (r_out + 1);
+    uint32_t r_in_aa_sqr  = (r_in - 1) * (r_in - 1);
+#endif
+    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;
+        int xe     = 0;
+        for(xi = -r_out; xi < 0; xi++) {
+
+            uint32_t r_act_sqr = xi * xi + yi * yi;
+#if LV_ANTIALIAS
+            if(r_act_sqr > r_out_aa_sqr) {
+                continue;
+            }
+#else
+            if(r_act_sqr > r_out_sqr) continue;
+#endif
+
+            deg_base = lv_atan2(xi, yi) - 180;
+
+#if LV_ANTIALIAS
+            int opa2 = -1;
+            if(r_act_sqr > r_out_sqr) {
+                opa2 = LV_OPA_100 * (r_out + 1) - lv_sqrt(LV_OPA_100 * 
LV_OPA_100 * r_act_sqr);
+                if(opa2 < LV_OPA_0)
+                    opa2 = LV_OPA_0;
+                else if(opa2 > LV_OPA_100)
+                    opa2 = LV_OPA_100;
+            } else if(r_act_sqr < r_in_sqr) {
+                if(xe == 0) xe = xi;
+                opa2 = lv_sqrt(LV_OPA_100 * LV_OPA_100 * r_act_sqr) - 
LV_OPA_100 * (r_in - 1);
+                if(opa2 < LV_OPA_0)
+                    opa2 = LV_OPA_0;
+                else if(opa2 > LV_OPA_100)
+                    opa2 = LV_OPA_100;
+                if(r_act_sqr < r_in_aa_sqr)
+                    break; /*No need to continue the iteration in x once we 
found the inner edge of the
+                              arc*/
+            }
+            if(opa2 != -1) {
+                if(deg_test(180 + deg_base, start_angle, end_angle)) {
+                    lv_draw_px(center_x + xi, center_y + yi, mask, color, 
opa2);
+                }
+                if(deg_test(360 - deg_base, start_angle, end_angle)) {
+                    lv_draw_px(center_x + xi, center_y - yi, mask, color, 
opa2);
+                }
+                if(deg_test(180 - deg_base, start_angle, end_angle)) {
+                    lv_draw_px(center_x - xi, center_y + yi, mask, color, 
opa2);
+                }
+                if(deg_test(deg_base, start_angle, end_angle)) {
+                    lv_draw_px(center_x - xi, center_y - yi, mask, color, 
opa2);
+                }
+                continue;
+            }
+#endif
+
+            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;
+            }
+
+            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;
+            }
+
+            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) {
+                xe = xi;
+                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] = xe - 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] = xe - 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] = xe - 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] = xe - 1;
+            hor_line(center_x - x_end[3], center_y - yi, mask, 
LV_MATH_ABS(x_end[3] - x_start[3]), color, opa);
+        }
+    }
+}
+
+/**********************
+ *   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)
+{
+    lv_area_t area;
+    lv_area_set(&area, x, y, x, y + len);
+
+    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;
+}
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_draw_arc.h 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_arc.h
new file mode 100755
index 0000000..98d0f0b
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_arc.h
@@ -0,0 +1,52 @@
+/**
+ * @file lv_draw_arc.h
+ *
+ */
+
+#ifndef LV_DRAW_ARC_H
+#define LV_DRAW_ARC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_draw.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Draw an arc. (Can draw pie too with great thickness.)
+ * @param center_x the x coordinate of the center of the arc
+ * @param center_y the y coordinate of the center of the arc
+ * @param radius the radius of the arc
+ * @param mask the arc will be drawn only in this mask
+ * @param start_angle the start angle of the arc (0 deg on the bottom, 90 deg 
on the right)
+ * @param end_angle the end angle of the arc
+ * @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);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_DRAW_ARC*/
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_draw_basic.c 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_basic.c
new file mode 100755
index 0000000..462e152
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_basic.c
@@ -0,0 +1,783 @@
+/**
+ * @file lv_draw_basic.c
+ *
+ */
+
+#include "lv_draw_basic.h"
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+#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 <stddef.h>
+#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;
+
+    /*bpp = 3 should be converted to bpp = 4 in lv_font_get_glyph_bitmap */
+    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: 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*/
+
+    bool subpx = font_p->subpx == LV_FONT_SUBPX_NONE ? false : true;
+
+    /* Calculate the col/row start/end on the map*/
+    lv_coord_t col_start;
+    lv_coord_t col_end;
+    lv_coord_t row_start;
+    lv_coord_t row_end;
+
+    if(subpx == false) {
+        col_start = pos_x >= mask_p->x1 ? 0 : mask_p->x1 - pos_x;
+        col_end   = pos_x + g.box_w <= mask_p->x2 ? g.box_w : mask_p->x2 - 
pos_x + 1;
+        row_start = pos_y >= mask_p->y1 ? 0 : mask_p->y1 - pos_y;
+        row_end   = pos_y + g.box_h <= mask_p->y2 ? g.box_h : mask_p->y2 - 
pos_y + 1;
+    } else {
+        col_start = pos_x >= mask_p->x1 ? 0 : (mask_p->x1 - pos_x) * 3;
+        col_end   = pos_x + g.box_w / 3 <= mask_p->x2 ? g.box_w : (mask_p->x2 
- pos_x + 1) * 3;
+        row_start = pos_y >= mask_p->y1 ? 0 : mask_p->y1 - pos_y;
+        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*/
+    if(subpx) vdb_buf_tmp += (row_start * vdb_width) + col_start / 3;
+    else 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 = 0;
+    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
+
+    uint8_t font_rgb[3];
+    uint8_t txt_rgb[3] = {LV_COLOR_GET_R(color), LV_COLOR_GET_G(color), 
LV_COLOR_GET_B(color)};
+
+    for(row = row_start; row < row_end; row++) {
+        bitmask = bitmask_init >> col_bit;
+        uint8_t sub_px_cnt = 0;
+        for(col = col_start; col < col_end; col++) {
+            letter_px = (*map_p & bitmask) >> (8 - col_bit - g.bpp);
+
+            /*subpx == 0*/
+            if(subpx == false) {
+                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++;
+            }
+            /*Handle subpx drawing*/
+            else {
+                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;
+                    }
+
+                    font_rgb[sub_px_cnt] = px_opa;
+                } else {
+                    font_rgb[sub_px_cnt] = 0;
+                }
+                sub_px_cnt ++;
+
+                if(sub_px_cnt == 3) {
+                    lv_color_t res_color;
+
+                    if(font_rgb[0] == 0 && font_rgb[1] == 0 && font_rgb[2] == 
0) {
+                        res_color = *vdb_buf_tmp;
+                    } else {
+
+                        uint8_t bg_rgb[3] = {LV_COLOR_GET_R(*vdb_buf_tmp), 
LV_COLOR_GET_G(*vdb_buf_tmp), LV_COLOR_GET_B(*vdb_buf_tmp)};
+
+#if LV_FONT_SUBPX_BGR
+                        LV_COLOR_SET_B(res_color, 
(uint16_t)((uint16_t)txt_rgb[0] * font_rgb[0] + (bg_rgb[2] * (255 - 
font_rgb[0]))) >> 8);
+                        LV_COLOR_SET_R(res_color, 
(uint16_t)((uint16_t)txt_rgb[2] * font_rgb[2] + (bg_rgb[0] * (255 - 
font_rgb[2]))) >> 8);
+#else
+                        LV_COLOR_SET_R(res_color, 
(uint16_t)((uint16_t)txt_rgb[0] * font_rgb[0] + (bg_rgb[0] * (255 - 
font_rgb[0]))) >> 8);
+                        LV_COLOR_SET_B(res_color, 
(uint16_t)((uint16_t)txt_rgb[2] * font_rgb[2] + (bg_rgb[2] * (255 - 
font_rgb[2]))) >> 8);
+#endif
+                        LV_COLOR_SET_G(res_color, 
(uint16_t)((uint16_t)txt_rgb[1] * font_rgb[1] + (bg_rgb[1] * (255 - 
font_rgb[1]))) >> 8);
+                    }
+                    if(scr_transp == false) {
+                        vdb_buf_tmp->full = res_color.full;
+#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
+                    } else {
+                        *vdb_buf_tmp = color_mix_2_alpha(*vdb_buf_tmp, 
(*vdb_buf_tmp).ch.alpha, color, px_opa);
+#endif
+                    }
+                    sub_px_cnt = 0;
+                    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;
+
+        /*Next row in VDB*/
+        if(subpx) vdb_buf_tmp += vdb_width - (col_end - col_start) / 3;
+        else vdb_buf_tmp += vdb_width - (col_end - col_start);
+    }
+}
+
+/**
+ * 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/scriptsrcs/lvgl/src/lv_draw/lv_draw_basic.h 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_basic.h
new file mode 100755
index 0000000..266b0c6
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_basic.h
@@ -0,0 +1,82 @@
+/**
+ * @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/scriptsrcs/lvgl/src/lv_draw/lv_draw_img.c 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_img.c
new file mode 100755
index 0000000..e19ba01
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_img.c
@@ -0,0 +1,601 @@
+/**
+ * @file lv_draw_img.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_draw_img.h"
+#include "lv_img_cache.h"
+#include "../lv_misc/lv_log.h"
+#include "../lv_misc/lv_mem.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  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);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Draw an image
+ * @param coords the coordinates of the image
+ * @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 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)
+{
+    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, NULL, NULL, LV_BIDI_DIR_LTR);
+        return;
+    }
+
+    lv_res_t res;
+    res = lv_img_draw_core(coords, mask, src, style, 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,  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 >= (lv_coord_t)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 >= (lv_coord_t)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 >= (lv_coord_t)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 >= (lv_coord_t)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 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;
+    }
+
+    return px_size;
+}
+
+/**
+ * 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 is_chroma_keyed = false;
+
+    switch(cf) {
+        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;
+}
+
+/**
+ * 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 has_alpha = false;
+
+    switch(cf) {
+        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;
+}
+
+/**
+ * Get the type of an image source
+ * @param src pointer to an image source:
+ *  - pointer to an 'lv_img_t' variable (image stored internally and compiled 
into the code)
+ *  - a path to a file (e.g. "S:/folder/image.bin")
+ *  - or a symbol (e.g. LV_SYMBOL_CLOSE)
+ * @return type of the image source LV_IMG_SRC_VARIABLE/FILE/SYMBOL/UNKNOWN
+ */
+lv_img_src_t lv_img_src_get_type(const void * src)
+{
+    lv_img_src_t img_src_type = LV_IMG_SRC_UNKNOWN;
+
+    if(src == NULL) return img_src_type;
+    const uint8_t * u8_p = src;
+
+    /*The first byte shows the type of the image source*/
+    if(u8_p[0] >= 0x20 && u8_p[0] <= 0x7F) {
+        img_src_type = LV_IMG_SRC_FILE; /*If it's an ASCII character then it's 
file name*/
+    } else if(u8_p[0] >= 0x80) {
+        img_src_type = LV_IMG_SRC_SYMBOL; /*Symbols begins after 0x7F*/
+    } else {
+        img_src_type = LV_IMG_SRC_VARIABLE; /*`lv_img_dsc_t` is design to the 
first byte < 0x20*/
+    }
+
+    if(LV_IMG_SRC_UNKNOWN == img_src_type) {
+        LV_LOG_WARN("lv_img_src_get_type: unknown image type");
+    }
+
+    return img_src_type;
+}
+
+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;
+}
+
+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);
+    }
+}
+
+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;
+    }
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+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)
+{
+
+    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;
+
+    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);
+
+    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, 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);
+    }
+    /* The whole uncompressed image is not available. Try to read it 
line-by-line*/
+    else {
+        lv_coord_t width = lv_area_get_width(&mask_com);
+
+        uint8_t  * buf = lv_draw_get_buf(lv_area_get_width(&mask_com) * 
LV_IMG_PX_SIZE_ALPHA_BYTE);  /*space for the possible alpha byte*/
+
+        lv_area_t line;
+        lv_area_copy(&line, &mask_com);
+        lv_area_set_height(&line, 1);
+        lv_coord_t x = mask_com.x1 - coords->x1;
+        lv_coord_t y = mask_com.y1 - coords->y1;
+        lv_coord_t row;
+        lv_res_t read_res;
+        for(row = mask_com.y1; row <= mask_com.y2; row++) {
+            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");
+                return LV_RES_INV;
+            }
+            lv_draw_map(&line, mask, buf, opa, chroma_keyed, alpha_byte, 
style->image.color, style->image.intense);
+            line.y1++;
+            line.y2++;
+            y++;
+        }
+    }
+
+    return LV_RES_OK;
+}
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_draw_img.h 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_img.h
new file mode 100755
index 0000000..794dd79
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_img.h
@@ -0,0 +1,172 @@
+/**
+ * @file lv_draw_img.h
+ *
+ */
+
+#ifndef LV_DRAW_IMG_H
+#define LV_DRAW_IMG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_draw.h"
+#include "lv_img_decoder.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+#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)
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Draw an image
+ * @param coords the coordinates of the image
+ * @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 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);
+
+/**
+ * Get the type of an image source
+ * @param src pointer to an image source:
+ *  - pointer to an 'lv_img_t' variable (image stored internally and compiled 
into the code)
+ *  - a path to a file (e.g. "S:/folder/image.bin")
+ *  - or a symbol (e.g. LV_SYMBOL_CLOSE)
+ * @return type of the image source LV_IMG_SRC_VARIABLE/FILE/SYMBOL/UNKNOWN
+ */
+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);
+
+/**
+ * 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);
+
+/**
+ * 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);
+
+/**
+ * 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);
+
+/**
+ * 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);
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_TEMPL_H*/
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_draw_label.c 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_label.c
new file mode 100755
index 0000000..2986543
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_label.c
@@ -0,0 +1,318 @@
+/**
+ * @file lv_draw_label.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_draw_label.h"
+#include "../lv_misc/lv_math.h"
+#include "../lv_misc/lv_bidi.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LABEL_RECOLOR_PAR_LENGTH 6
+#define LV_LABEL_HINT_UPDATE_TH 1024 /*Update the "hint" if the label's y 
coordinates have changed more then this*/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+enum {
+    CMD_STATE_WAIT,
+    CMD_STATE_PAR,
+    CMD_STATE_IN,
+};
+typedef uint8_t cmd_state_t;
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static uint8_t hex_char_to_num(char hex);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Write a text
+ * @param coords coordinates of the label
+ * @param mask the label will be drawn only in this area
+ * @param style pointer to a style
+ * @param opa_scale scale down all opacities by the factor
+ * @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 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, 
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);
+    } else {
+        /*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);
+        w = p.x;
+    }
+
+    lv_coord_t line_height = lv_font_get_line_height(font) + 
style->text.line_space;
+
+    /*Init variables for the first line*/
+    lv_coord_t line_width = 0;
+    lv_point_t pos;
+    pos.x = coords->x1;
+    pos.y = coords->y1;
+
+    lv_coord_t x_ofs = 0;
+    lv_coord_t y_ofs = 0;
+    if(offset != NULL) {
+        x_ofs = offset->x;
+        y_ofs = offset->y;
+        pos.y += y_ofs;
+    }
+
+    uint32_t line_start     = 0;
+    int32_t last_line_start = -1;
+
+    /*Check the hint to use the cached info*/
+    if(hint && y_ofs == 0 && coords->y1 < 0) {
+        /*If the label changed too much recalculate the hint.*/
+        if(LV_MATH_ABS(hint->coord_y - coords->y1) > LV_LABEL_HINT_UPDATE_TH - 
2 * line_height) {
+            hint->line_start = -1;
+        }
+        last_line_start = hint->line_start;
+    }
+
+    /*Use the hint if it's valid*/
+    if(hint && last_line_start >= 0) {
+        line_start = last_line_start;
+        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*/
+    while(pos.y + line_height < mask->y1) {
+        /*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);
+        pos.y += line_height;
+
+        /*Save at the threshold coordinate*/
+        if(hint && pos.y >= -LV_LABEL_HINT_UPDATE_TH && hint->line_start < 0) {
+            hint->line_start = line_start;
+            hint->y          = pos.y - coords->y1;
+            hint->coord_y    = coords->y1;
+        }
+
+        if(txt[line_start] == '\0') return;
+    }
+
+    /*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);
+
+        pos.x += (lv_area_get_width(coords) - line_width) / 2;
+
+    }
+    /*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);
+        pos.x += lv_area_get_width(coords) - line_width;
+    }
+
+    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;
+        }
+    }
+
+    cmd_state_t cmd_state = CMD_STATE_WAIT;
+    uint32_t i;
+    uint16_t par_start = 0;
+    lv_color_t recolor;
+    lv_coord_t letter_w;
+    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;
+
+    /*Write out all lines*/
+    while(txt[line_start] != '\0') {
+        if(offset != NULL) {
+            pos.x += x_ofs;
+        }
+        /*Write all letter of a line*/
+        cmd_state = CMD_STATE_WAIT;
+        i         = 0;
+        uint32_t letter;
+        uint32_t letter_next;
+#if LV_USE_BIDI
+        char *bidi_txt = lv_draw_get_buf(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) {
+                if(letter == (uint32_t)LV_TXT_COLOR_CMD[0]) {
+                    if(cmd_state == CMD_STATE_WAIT) { /*Start char*/
+                        par_start = i;
+                        cmd_state = CMD_STATE_PAR;
+                        continue;
+                    } else if(cmd_state == CMD_STATE_PAR) { /*Other start char 
in parameter escaped cmd. char */
+                        cmd_state = CMD_STATE_WAIT;
+                    } else if(cmd_state == CMD_STATE_IN) { /*Command end */
+                        cmd_state = CMD_STATE_WAIT;
+                        continue;
+                    }
+                }
+
+                /*Skip the color parameter and wait the space after it*/
+                if(cmd_state == CMD_STATE_PAR) {
+                    if(letter == ' ') {
+                        /*Get the parameter*/
+                        if(i - par_start == LABEL_RECOLOR_PAR_LENGTH + 1) {
+                            char buf[LABEL_RECOLOR_PAR_LENGTH + 1];
+                            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]);
+                            g       = (hex_char_to_num(buf[2]) << 4) + 
hex_char_to_num(buf[3]);
+                            b       = (hex_char_to_num(buf[4]) << 4) + 
hex_char_to_num(buf[5]);
+                            recolor = lv_color_make(r, g, b);
+                        } else {
+                            recolor.full = style->text.color.full;
+                        }
+                        cmd_state = CMD_STATE_IN; /*After the parameter the 
text is in the command*/
+                    }
+                    continue;
+                }
+            }
+
+            lv_color_t color = style->text.color;
+
+            if(cmd_state == CMD_STATE_IN) color = recolor;
+
+            letter_w = lv_font_get_glyph_width(font, letter, letter_next);
+
+            if(sel_start != 0xFFFF && sel_end != 0xFFFF) {
+                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;
+                    sel_coords.x2 = pos.x + letter_w + 
style->text.letter_space - 1;
+                    sel_coords.y2 = pos.y + line_height - 1;
+                    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;
+            }
+        }
+        /*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);
+
+        pos.x = coords->x1;
+        /*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);
+
+            pos.x += (lv_area_get_width(coords) - line_width) / 2;
+
+        }
+        /*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);
+            pos.x += lv_area_get_width(coords) - line_width;
+        }
+
+        /*Go the next line position*/
+        pos.y += line_height;
+
+        if(pos.y > mask->y2) return;
+    }
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Convert a hexadecimal characters to a number (0..15)
+ * @param hex Pointer to a hexadecimal character (0..9, A..F)
+ * @return the numerical value of `hex` or 0 on error
+ */
+static uint8_t hex_char_to_num(char hex)
+{
+    uint8_t result = 0;
+
+    if(hex >= '0' && hex <= '9') {
+        result = hex - '0';
+    } else {
+        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;
+        }
+    }
+
+    return result;
+}
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_draw_label.h 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_label.h
new file mode 100755
index 0000000..6dc4d64
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_label.h
@@ -0,0 +1,80 @@
+/**
+ * @file lv_draw_label.h
+ *
+ */
+
+#ifndef LV_DRAW_LABEL_H
+#define LV_DRAW_LABEL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      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.
+ * This structure stores an earlier (e.g. at -1000 px) coordinate and the 
index of that line.
+ * Therefore the calculations can start from here.*/
+typedef struct {
+    /** Index of the line at `y` coordinate*/
+    int32_t line_start;
+
+    /** Give the `y` coordinate of the first letter at `line start` index. 
Relative to the label's coordinates*/
+    int32_t y;
+
+    /** The 'y1' coordinate of the label when the hint was saved.
+     * Used to invalidate the hint if the label has moved too much. */
+    int32_t coord_y;
+}lv_draw_label_hint_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Write a text
+ * @param coords coordinates of the label
+ * @param mask the label will be drawn only in this area
+ * @param style pointer to a style
+ * @param opa_scale scale down all opacities by the factor
+ * @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 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, 
lv_draw_label_txt_sel_t * sel,
+                   lv_draw_label_hint_t * hint, lv_bidi_dir_t bidi_dir);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_DRAW_LABEL_H*/
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_draw_line.c 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_line.c
new file mode 100755
index 0000000..a522a4b
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_line.c
@@ -0,0 +1,637 @@
+/**
+ * @file lv_draw_line.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stdio.h>
+#include <stdbool.h>
+#include "lv_draw.h"
+#include "../lv_core/lv_refr.h"
+#include "../lv_misc/lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      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 VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Draw a line
+ * @param point1 first point of the line
+ * @param point2 second point of the line
+ * @param mask the line will be drawn only on this area
+ * @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)
+{
+
+    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;
+
+    line_draw_t main_line;
+    lv_point_t p1;
+    lv_point_t p2;
+
+    /*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);
+    }
+}
+
+/**********************
+ *   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)
+{
+    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;
+    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_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_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;
+        }
+    }
+
+    /* 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*/
+    else {
+
+        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;
+
+                lv_draw_fill(&draw_area, mask, style->line.color, opa);
+
+                /* 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);
+                }
+            }
+
+#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
+
+            first_run = false;
+
+            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
+    }
+}
+
+static void line_init(line_draw_t * line, const lv_point_t * p1, const 
lv_point_t * p2)
+{
+    line->p1.x = p1->x;
+    line->p1.y = p1->y;
+    line->p2.x = p2->x;
+    line->p2.y = p2->y;
+
+    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*/
+
+    line->p_act.x = line->p1.x;
+    line->p_act.y = line->p1.y;
+}
+
+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;
+    }
+    if(line->e2 < line->dy) {
+        line->err += line->dx;
+        line->p_act.y += line->sy;
+    }
+    return true;
+}
+
+/**
+ * Iterate until step one in y direction.
+ * @param line
+ * @return
+ */
+static bool line_next_y(line_draw_t * line)
+{
+    lv_coord_t last_y = line->p_act.y;
+
+    do {
+        if(!line_next(line)) return false;
+    } while(last_y == line->p_act.y);
+
+    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;
+}
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_draw_line.h 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_line.h
new file mode 100755
index 0000000..208bd05
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_line.h
@@ -0,0 +1,48 @@
+/**
+ * @file lv_draw_line.h
+ *
+ */
+
+#ifndef LV_DRAW_LINE_H
+#define LV_DRAW_LINE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Draw a line
+ * @param point1 first point of the line
+ * @param point2 second point of the line
+ * @param mask the line will be drawn only on this area
+ * @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);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_DRAW_LINE_H*/
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_draw_rect.c 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_rect.c
new file mode 100755
index 0000000..0964a46
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_rect.c
@@ -0,0 +1,1521 @@
+/**
+ * @file lv_draw_rect.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_draw_rect.h"
+#include "../lv_misc/lv_circ.h"
+#include "../lv_misc/lv_math.h"
+#include "../lv_core/lv_refr.h"
+
+/*********************
+ *      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
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  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 VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Draw a rectangle
+ * @param coords the coordinates of the rectangle
+ * @param mask the rectangle will be drawn only in this mask
+ * @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)
+{
+    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
+
+    /* 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;
+
+    if(style->body.opa > LV_OPA_MIN) {
+        lv_draw_rect_main_mid(coords, mask, style, opa_scale);
+
+        if(style->body.radius != 0) {
+            lv_draw_rect_main_corner(coords, mask, style, opa_scale);
+        }
+    }
+
+    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);
+
+        if(style->body.radius != 0) {
+            lv_draw_rect_border_corner(coords, mask, style, opa_scale);
+        }
+    }
+}
+
+/**********************
+ *   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)
+{
+    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;
+    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);
+        }
+    }
+}
+/**
+ * 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);
+
+    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_area_t edge_top_area;
+    lv_area_t mid_top_area;
+    lv_area_t mid_bot_area;
+    lv_area_t edge_bot_area;
+
+    lv_point_t cir;
+    lv_coord_t cir_tmp;
+    lv_circ_init(&cir, &cir_tmp, radius);
+
+    /*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));
+
+    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));
+#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_color_t aa_color_hor_top;
+    lv_color_t aa_color_hor_bottom;
+    lv_color_t aa_color_ver;
+#endif
+
+    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_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);
+                    }
+
+                    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);
+                }
+
+                out_x_last      = cir.x;
+                out_y_seg_start = out_y_seg_end;
+            }
+        }
+#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(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);
+    }
+
+    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(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)
+{
+    uint16_t radius = style->body.radius;
+    bool aa         = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
+
+    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;
+
+    /*the 0 px border width drawn as 1 px, so decrement the b_width*/
+    bwidth--;
+
+    radius = lv_draw_cont_radius_corr(radius, width, height);
+
+    if(radius < bwidth) {
+        length_corr = bwidth - radius - aa;
+        corner_size = bwidth;
+    } else {
+        corner_size = radius + aa;
+    }
+
+    /*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);
+        }
+
+        /*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);
+        }
+
+        /*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);
+        }
+
+        /*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);
+        }
+        return;
+    }
+
+    /* Modify the corner_size if corner is drawn */
+    corner_size++;
+
+    /*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;
+
+    if(part & LV_BORDER_BOTTOM)
+        work_area.y2 = coords->y2 - corner_size;
+    else
+        work_area.y2 = coords->y2 - radius;
+
+    /*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);
+    }
+
+    /*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);
+    }
+
+    work_area.x1 = coords->x1 + corner_size - length_corr;
+    work_area.x2 = coords->x2 - corner_size + length_corr;
+
+    /*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);
+    }
+
+    /*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);
+    }
+
+    /*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);
+        }
+
+        /*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);
+        }
+
+        /*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);
+                }
+            }
+        }
+    }
+#endif
+}
+
+#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);
+    }
+
+    uint16_t col;
+
+    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;
+
+    ofs_rt.x = coords->x2 - radius - aa;
+    ofs_rt.y = coords->y1 + radius + aa;
+
+    ofs_lb.x = coords->x1 + radius + aa;
+    ofs_lb.y = coords->y2 - radius - aa;
+
+    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))*/
+
+            /*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;
+                }
+
+                /*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)*/
+            }
+
+            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;
+            }
+        }
+
+        /*Flush the line*/
+        point_rt.x = curve_x[line] + ofs_rt.x + 1;
+        point_rt.y = ofs_rt.y - line;
+
+        point_rb.x = curve_x[line] + ofs_rb.x + 1;
+        point_rb.y = ofs_rb.y + line;
+
+        point_lt.x = ofs_lt.x - curve_x[line] - 1;
+        point_lt.y = ofs_lt.y - line;
+
+        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++) {
+
+            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(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]);
+            }
+
+            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--;
+        }
+
+        /* 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);
+    }
+}
+
+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];
+            } 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);
+            }
+            point_r.y++;
+        }
+    }
+
+    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;
+
+    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++;
+    }
+}
+
+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)
+{
+    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;
+
+    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;
+
+    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++;
+    }
+}
+
+#endif
+
+static uint16_t lv_draw_cont_radius_corr(uint16_t r, lv_coord_t w, lv_coord_t 
h)
+{
+    bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
+
+    if(r >= (w >> 1)) {
+        r = (w >> 1);
+        if(r != 0) r--;
+    }
+    if(r >= (h >> 1)) {
+        r = (h >> 1);
+        if(r != 0) r--;
+    }
+
+    if(r > 0) r -= aa;
+
+    return r;
+}
+
+#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/scriptsrcs/lvgl/src/lv_draw/lv_draw_rect.h 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_rect.h
new file mode 100755
index 0000000..852b729
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_rect.h
@@ -0,0 +1,47 @@
+/**
+ * @file lv_draw_rect.h
+ *
+ */
+
+#ifndef LV_DRAW_RECT_H
+#define LV_DRAW_RECT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_draw.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Draw a rectangle
+ * @param coords the coordinates of the rectangle
+ * @param mask the rectangle will be drawn only in this mask
+ * @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);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_DRAW_RECT_H*/
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_draw_triangle.c 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_triangle.c
new file mode 100755
index 0000000..1c8939a
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_triangle.c
@@ -0,0 +1,343 @@
+/**
+ * @file lv_draw_triangle.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_draw_triangle.h"
+#include "../lv_misc/lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  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
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ *
+ * @param points pointer to an array with 3 points
+ * @param mask the triangle will be drawn only in this mask
+ * @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)
+{
+    /*Return if 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);
+    }
+}
+
+/**
+ * Draw a polygon from triangles. 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 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,
+                     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);
+    }
+}
+
+/**********************
+ *   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/scriptsrcs/lvgl/src/lv_draw/lv_draw_triangle.h 
b/scriptsrcs/lvgl/src/lv_draw/lv_draw_triangle.h
new file mode 100755
index 0000000..b6b230d
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_draw_triangle.h
@@ -0,0 +1,58 @@
+/**
+ * @file lv_draw_triangle.h
+ *
+ */
+
+#ifndef LV_DRAW_TRIANGLE_H
+#define LV_DRAW_TRIANGLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_draw.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ *
+ * @param points pointer to an array with 3 points
+ * @param mask the triangle will be drawn only in this mask
+ * @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);
+
+/**
+ * Draw a polygon from triangles. 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 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,
+                     lv_opa_t opa_scale);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_DRAW_TRIANGLE_H*/
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_img_cache.c 
b/scriptsrcs/lvgl/src/lv_draw/lv_img_cache.c
new file mode 100755
index 0000000..841e116
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_img_cache.c
@@ -0,0 +1,206 @@
+/**
+ * @file lv_img_cache.c
+ *
+ */
+
+/*********************
+ *      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"
+
+#if defined(LV_GC_INCLUDE)
+#include LV_GC_INCLUDE
+#endif /* LV_ENABLE_GC */
+/*********************
+ *      DEFINES
+ *********************/
+/*Decrement life with this value in every open*/
+#define LV_IMG_CACHE_AGING 1
+
+/*Boost life by this factor (multiply time_to_open with this value)*/
+#define LV_IMG_CACHE_LIFE_GAIN 1
+
+/*Don't let life to be greater than this limit because it would require a lot 
of time to
+ * "die" from very high values */
+#define LV_IMG_CACHE_LIFE_LIMIT 1000
+
+#if LV_IMG_CACHE_DEF_SIZE < 1
+#error "LV_IMG_CACHE_DEF_SIZE must be >= 1. See lv_conf.h"
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static uint16_t entry_cnt;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Open an image using the image decoder interface and cache it.
+ * The image will be left open meaning if the image decoder open callback 
allocated memory then it will remain.
+ * The image is closed if a new image is opened and the new image takes its 
place in the cache.
+ * @param src source of the image. Path to file or pointer to an 
`lv_img_dsc_t` variable
+ * @param style style of the image
+ * @return pointer to the cache entry or NULL if can open the image
+ */
+lv_img_cache_entry_t * lv_img_cache_open(const void * src, const lv_style_t * 
style)
+{
+    if(entry_cnt == 0) {
+        LV_LOG_WARN("lv_img_cache_open: the cache size is 0");
+        return NULL;
+    }
+
+    lv_img_cache_entry_t * cache = LV_GC_ROOT(_lv_img_cache_array);
+
+    /*Decrement all lifes. Make the entries older*/
+    uint16_t i;
+    for(i = 0; i < entry_cnt; i++) {
+        if(cache[i].life > INT32_MIN + LV_IMG_CACHE_AGING) {
+            cache[i].life -= LV_IMG_CACHE_AGING;
+        }
+    }
+
+    /*Is the image cached?*/
+    lv_img_cache_entry_t * cached_src = NULL;
+    for(i = 0; i < entry_cnt; i++) {
+        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 && cache[i].dec_dsc.style == style) 
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`*/
+            cached_src = &cache[i];
+            cached_src->life += cached_src->dec_dsc.time_to_open * 
LV_IMG_CACHE_LIFE_GAIN;
+            if(cached_src->life > LV_IMG_CACHE_LIFE_LIMIT) cached_src->life = 
LV_IMG_CACHE_LIFE_LIMIT;
+            LV_LOG_TRACE("image draw: image found in the cache");
+            break;
+        }
+    }
+
+    /*The image is not cached then cache it now*/
+    if(cached_src == NULL) {
+        /*Find an entry to reuse. Select the entry with the least life*/
+        cached_src = &cache[0];
+        for(i = 1; i < entry_cnt; i++) {
+            if(cache[i].life < cached_src->life) {
+                cached_src = &cache[i];
+            }
+        }
+
+        /*Close the decoder to reuse if it was opened (has a valid source)*/
+        if(cached_src->dec_dsc.src) {
+            lv_img_decoder_close(&cached_src->dec_dsc);
+            LV_LOG_INFO("image draw: cache miss, close and reuse an entry");
+        } else {
+            LV_LOG_INFO("image draw: cache miss, cached to an empty entry");
+        }
+
+        /*Open the image and measure the time to open*/
+        uint32_t t_start;
+        t_start                          = lv_tick_get();
+        cached_src->dec_dsc.time_to_open = 0;
+        lv_res_t open_res                = 
lv_img_decoder_open(&cached_src->dec_dsc, src, style);
+        if(open_res == LV_RES_INV) {
+            LV_LOG_WARN("Image draw cannot open the image resource");
+            lv_img_decoder_close(&cached_src->dec_dsc);
+            memset(&cached_src->dec_dsc, 0, sizeof(lv_img_decoder_dsc_t));
+            memset(cached_src, 0, sizeof(lv_img_cache_entry_t));
+            cached_src->life = INT32_MIN; /*Make the empty entry very "weak" 
to force its use  */
+            return NULL;
+        }
+
+        cached_src->life = 0;
+
+        /*If `time_to_open` was not set in the open function set it here*/
+        if(cached_src->dec_dsc.time_to_open == 0) {
+            cached_src->dec_dsc.time_to_open = lv_tick_elaps(t_start);
+        }
+
+        if(cached_src->dec_dsc.time_to_open == 0) 
cached_src->dec_dsc.time_to_open = 1;
+    }
+
+    return cached_src;
+}
+
+/**
+ * Set the number of images to be cached.
+ * More cached images mean more opened image at same time which might mean 
more memory usage.
+ * E.g. if 20 PNG or JPG images are open in the RAM they consume memory while 
opened in the cache.
+ * @param new_entry_cnt number of image to cache
+ */
+void lv_img_cache_set_size(uint16_t new_entry_cnt)
+{
+    if(LV_GC_ROOT(_lv_img_cache_array) != NULL) {
+        /*Clean the cache before free it*/
+        lv_img_cache_invalidate_src(NULL);
+        lv_mem_free(LV_GC_ROOT(_lv_img_cache_array));
+    }
+
+    /*Reallocate the cache*/
+    LV_GC_ROOT(_lv_img_cache_array) = 
lv_mem_alloc(sizeof(lv_img_cache_entry_t) * new_entry_cnt);
+    LV_ASSERT_MEM(LV_GC_ROOT(_lv_img_cache_array));
+    if(LV_GC_ROOT(_lv_img_cache_array) == NULL) {
+        entry_cnt = 0;
+        return;
+    }
+    entry_cnt = new_entry_cnt;
+
+    /*Clean the cache*/
+    uint16_t i;
+    for(i = 0; i < entry_cnt; i++) {
+        memset(&LV_GC_ROOT(_lv_img_cache_array)[i].dec_dsc, 0, 
sizeof(lv_img_decoder_dsc_t));
+        memset(&LV_GC_ROOT(_lv_img_cache_array)[i], 0, 
sizeof(lv_img_cache_entry_t));
+    }
+}
+
+/**
+ * Invalidate an image source in the cache.
+ * Useful if the image source is updated therefore it needs to be cached again.
+ * @param src an image source path to a file or pointer to an `lv_img_dsc_t` 
variable.
+ */
+void lv_img_cache_invalidate_src(const void * src)
+{
+
+    lv_img_cache_entry_t * cache = LV_GC_ROOT(_lv_img_cache_array);
+
+    uint16_t i;
+    for(i = 0; i < entry_cnt; i++) {
+        if(cache[i].dec_dsc.src == src || src == NULL) {
+            if(cache[i].dec_dsc.src != NULL) {
+                lv_img_decoder_close(&cache[i].dec_dsc);
+            }
+
+            memset(&cache[i].dec_dsc, 0, sizeof(lv_img_decoder_dsc_t));
+            memset(&cache[i], 0, sizeof(lv_img_cache_entry_t));
+        }
+    }
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_img_cache.h 
b/scriptsrcs/lvgl/src/lv_draw/lv_img_cache.h
new file mode 100755
index 0000000..859b4b8
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_img_cache.h
@@ -0,0 +1,78 @@
+/**
+ * @file lv_img_cache.h
+ *
+ */
+
+#ifndef LV_IMG_CACHE_H
+#define LV_IMG_CACHE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_img_decoder.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**
+ * When loading images from the network it can take a long time to download 
and decode the image.
+ * 
+ * To avoid repeating this heavy load images can be cached.
+ */
+typedef struct
+{
+    lv_img_decoder_dsc_t dec_dsc; /**< Image information */
+
+    /** Count the cache entries's life. Add `time_tio_open` to `life` when the 
entry is used.
+     * Decrement all lifes by one every in every ::lv_img_cache_open.
+     * If life == 0 the entry can be reused */
+    int32_t life;
+} lv_img_cache_entry_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Open an image using the image decoder interface and cache it.
+ * The image will be left open meaning if the image decoder open callback 
allocated memory then it will remain.
+ * The image is closed if a new image is opened and the new image takes its 
place in the cache.
+ * @param src source of the image. Path to file or pointer to an 
`lv_img_dsc_t` variable
+ * @param style style of the image
+ * @return pointer to the cache entry or NULL if can open the image
+ */
+lv_img_cache_entry_t * lv_img_cache_open(const void * src, const lv_style_t * 
style);
+
+/**
+ * Set the number of images to be cached.
+ * More cached images mean more opened image at same time which might mean 
more memory usage.
+ * E.g. if 20 PNG or JPG images are open in the RAM they consume memory while 
opened in the cache.
+ * @param new_entry_cnt number of image to cache
+ */
+void lv_img_cache_set_size(uint16_t new_slot_num);
+
+/**
+ * Invalidate an image source in the cache.
+ * Useful if the image source is updated therefore it needs to be cached again.
+ * @param src an image source path to a file or pointer to an `lv_img_dsc_t` 
variable.
+ */
+void lv_img_cache_invalidate_src(const void * src);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_IMG_CACHE_H*/
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_img_decoder.c 
b/scriptsrcs/lvgl/src/lv_draw/lv_img_decoder.c
new file mode 100755
index 0000000..5505b90
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_img_decoder.c
@@ -0,0 +1,755 @@
+/**
+ * @file lv_img_decoder.c
+ *
+ */
+
+/*********************
+ *      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"
+#include "../lv_misc/lv_gc.h"
+
+#if defined(LV_GC_INCLUDE)
+#include LV_GC_INCLUDE
+#endif /* LV_ENABLE_GC */
+
+/*********************
+ *      DEFINES
+ *********************/
+#define CF_BUILT_IN_FIRST LV_IMG_CF_TRUE_COLOR
+#define CF_BUILT_IN_LAST LV_IMG_CF_ALPHA_8BIT
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+typedef struct
+{
+#if LV_USE_FILESYSTEM
+    lv_fs_file_t * f;
+#endif
+    lv_color_t * palette;
+    lv_opa_t * opa;
+} lv_img_decoder_built_in_data_t;
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static lv_res_t lv_img_decoder_built_in_line_true_color(lv_img_decoder_dsc_t * 
dsc, lv_coord_t x, lv_coord_t y,
+                                                        lv_coord_t len, 
uint8_t * buf);
+static lv_res_t lv_img_decoder_built_in_line_alpha(lv_img_decoder_dsc_t * dsc, 
lv_coord_t x, lv_coord_t y,
+                                                   lv_coord_t len, uint8_t * 
buf);
+static lv_res_t lv_img_decoder_built_in_line_indexed(lv_img_decoder_dsc_t * 
dsc, lv_coord_t x, lv_coord_t y,
+                                                     lv_coord_t len, uint8_t * 
buf);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the image decoder module
+ * */
+void lv_img_decoder_init(void)
+{
+    lv_ll_init(&LV_GC_ROOT(_lv_img_defoder_ll), sizeof(lv_img_decoder_t));
+
+    lv_img_decoder_t * decoder;
+
+    /*Create a decoder for the built in color format*/
+    decoder = lv_img_decoder_create();
+    if(decoder == NULL) {
+        LV_LOG_WARN("lv_img_decoder_init: out of memory");
+        LV_ASSERT_MEM(decoder);
+        return;
+    }
+
+    lv_img_decoder_set_info_cb(decoder, lv_img_decoder_built_in_info);
+    lv_img_decoder_set_open_cb(decoder, lv_img_decoder_built_in_open);
+    lv_img_decoder_set_read_line_cb(decoder, 
lv_img_decoder_built_in_read_line);
+    lv_img_decoder_set_close_cb(decoder, lv_img_decoder_built_in_close);
+}
+
+/**
+ * Get information about an image.
+ * Try the created image decoder one by one. Once one is able to get info that 
info will be used.
+ * @param src the image source. E.g. file name or variable.
+ * @param header the image info will be stored here
+ * @return LV_RES_OK: success; LV_RES_INV: wasn't able to get info about the 
image
+ */
+lv_res_t lv_img_decoder_get_info(const char * src, lv_img_header_t * header)
+{
+    header->always_zero = 0;
+
+    lv_res_t res = LV_RES_INV;
+    lv_img_decoder_t * d;
+    LV_LL_READ(LV_GC_ROOT(_lv_img_defoder_ll), d)
+    {
+        res = LV_RES_INV;
+        if(d->info_cb) {
+            res = d->info_cb(d, src, header);
+            if(res == LV_RES_OK) break;
+        }
+    }
+
+    return res;
+}
+
+/**
+ * Open an image.
+ * Try the created image decoder one by one. Once one is able to open the 
image that decoder is save in `dsc`
+ * @param dsc describe a decoding session. Simply a pointer to an 
`lv_img_decoder_dsc_t` variable.
+ * @param src the image source. Can be
+ *  1) File name: E.g. "S:folder/img1.png" (The drivers needs to registered 
via `lv_fs_add_drv()`)
+ *  2) Variable: Pointer to an `lv_img_dsc_t` variable
+ *  3) Symbol: E.g. `LV_SYMBOL_OK`
+ * @param style the style of the image
+ * @return LV_RES_OK: opened the image. `dsc->img_data` and `dsc->header` are 
set.
+ *         LV_RES_INV: none of the registered image decoders were able to open 
the image.
+ */
+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_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;
+    LV_LL_READ(LV_GC_ROOT(_lv_img_defoder_ll), d)
+    {
+        /*Info an Open callbacks are required*/
+        if(d->info_cb == NULL || d->open_cb == NULL) continue;
+
+        res = d->info_cb(d, src, &dsc->header);
+        if(res != LV_RES_OK) continue;
+
+        dsc->error_msg = NULL;
+        dsc->img_data  = NULL;
+        dsc->decoder   = d;
+
+        res = d->open_cb(d, dsc);
+
+        /*Opened successfully. It is a good decoder to for this image source*/
+        if(res == LV_RES_OK) break;
+    }
+
+    if(res == LV_RES_INV) {
+        memset(dsc, 0, sizeof(lv_img_decoder_dsc_t));
+    }
+
+    return res;
+}
+
+/**
+ * Read a line from an opened image
+ * @param dsc pointer to `lv_img_decoder_dsc_t` used in `lv_img_decoder_open`
+ * @param x start X coordinate (from left)
+ * @param y start Y coordinate (from top)
+ * @param len number of pixels to read
+ * @param buf store the data here
+ * @return LV_RES_OK: success; LV_RES_INV: an error occurred
+ */
+lv_res_t lv_img_decoder_read_line(lv_img_decoder_dsc_t * dsc, lv_coord_t x, 
lv_coord_t y, lv_coord_t len, uint8_t * buf)
+{
+    lv_res_t res = LV_RES_INV;
+    if(dsc->decoder->read_line_cb) res = 
dsc->decoder->read_line_cb(dsc->decoder, dsc, x, y, len, buf);
+
+    return res;
+}
+
+/**
+ * Close a decoding session
+ * @param dsc pointer to `lv_img_decoder_dsc_t` used in `lv_img_decoder_open`
+ */
+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;
+        }
+    }
+}
+
+/**
+ * Create a new image decoder
+ * @return pointer to the new image decoder
+ */
+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_ASSERT_MEM(decoder);
+    if(decoder == NULL) return NULL;
+
+    memset(decoder, 0, sizeof(lv_img_decoder_t));
+
+    return decoder;
+}
+
+/**
+ * Delete an image decoder
+ * @param decoder pointer to an image decoder
+ */
+void lv_img_decoder_delete(lv_img_decoder_t * decoder)
+{
+    lv_ll_rem(&LV_GC_ROOT(_lv_img_defoder_ll), decoder);
+    lv_mem_free(decoder);
+}
+
+/**
+ * Set a callback to get information about the image
+ * @param decoder pointer to an image decoder
+ * @param info_cb a function to collect info about an image (fill an 
`lv_img_header_t` struct)
+ */
+void lv_img_decoder_set_info_cb(lv_img_decoder_t * decoder, 
lv_img_decoder_info_f_t info_cb)
+{
+    decoder->info_cb = info_cb;
+}
+
+/**
+ * Set a callback to open an image
+ * @param decoder pointer to an image decoder
+ * @param open_cb a function to open an image
+ */
+void lv_img_decoder_set_open_cb(lv_img_decoder_t * decoder, 
lv_img_decoder_open_f_t open_cb)
+{
+    decoder->open_cb = open_cb;
+}
+
+/**
+ * Set a callback to a decoded line of an image
+ * @param decoder pointer to an image decoder
+ * @param read_line_cb a function to read a line of an image
+ */
+void lv_img_decoder_set_read_line_cb(lv_img_decoder_t * decoder, 
lv_img_decoder_read_line_f_t read_line_cb)
+{
+    decoder->read_line_cb = read_line_cb;
+}
+
+/**
+ * Set a callback to close a decoding session. E.g. close files and free other 
resources.
+ * @param decoder pointer to an image decoder
+ * @param close_cb a function to close a decoding session
+ */
+void lv_img_decoder_set_close_cb(lv_img_decoder_t * decoder, 
lv_img_decoder_close_f_t close_cb)
+{
+    decoder->close_cb = close_cb;
+}
+
+/**
+ * Get info about a built-in image
+ * @param decoder the decoder where this function belongs
+ * @param src the image source: pointer to an `lv_img_dsc_t` variable, a file 
path or a symbol
+ * @param header store the image data here
+ * @return LV_RES_OK: the info is successfully stored in `header`; LV_RES_INV: 
unknown format or other error.
+ */
+lv_res_t lv_img_decoder_built_in_info(lv_img_decoder_t * decoder, const void * 
src, lv_img_header_t * header)
+{
+    (void)decoder; /*Unused*/
+
+    lv_img_src_t src_type = lv_img_src_get_type(src);
+    if(src_type == LV_IMG_SRC_VARIABLE) {
+        lv_img_cf_t cf = ((lv_img_dsc_t *)src)->header.cf;
+        if(cf < CF_BUILT_IN_FIRST || cf > CF_BUILT_IN_LAST) return LV_RES_INV;
+
+        header->w  = ((lv_img_dsc_t *)src)->header.w;
+        header->h  = ((lv_img_dsc_t *)src)->header.h;
+        header->cf = ((lv_img_dsc_t *)src)->header.cf;
+    }
+#if LV_USE_FILESYSTEM
+    else if(src_type == LV_IMG_SRC_FILE) {
+        lv_fs_file_t file;
+        lv_fs_res_t res;
+        uint32_t rn;
+        res = lv_fs_open(&file, src, LV_FS_MODE_RD);
+        if(res == LV_FS_RES_OK) {
+            res = lv_fs_read(&file, header, sizeof(lv_img_header_t), &rn);
+            lv_fs_close(&file);
+        }
+
+        if(header->cf < CF_BUILT_IN_FIRST || header->cf > CF_BUILT_IN_LAST) 
return LV_RES_INV;
+
+    }
+#endif
+    else if(src_type == LV_IMG_SRC_SYMBOL) {
+        /*The size depend on the font but it is unknown here. It should be 
handled outside of the
+         * function*/
+        header->w = 1;
+        header->h = 1;
+        /* Symbols always have transparent parts. Important because of cover 
check in the design
+         * function. The actual value doesn't matter because lv_draw_label 
will draw it*/
+        header->cf = LV_IMG_CF_ALPHA_1BIT;
+    } else {
+        LV_LOG_WARN("Image get info found unknown src type");
+        return LV_RES_INV;
+    }
+    return LV_RES_OK;
+}
+
+/**
+ * Open a built in image
+ * @param decoder the decoder where this function belongs
+ * @param dsc pointer to decoder descriptor. `src`, `style` are already 
initialized in it.
+ * @return LV_RES_OK: the info is successfully stored in `header`; LV_RES_INV: 
unknown format or other error.
+ */
+lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, 
lv_img_decoder_dsc_t * dsc)
+{
+    /*Open the file if it's a file*/
+    if(dsc->src_type == LV_IMG_SRC_FILE) {
+#if LV_USE_FILESYSTEM
+
+        /*Support only "*.bin" files*/
+        if(strcmp(lv_fs_get_ext(dsc->src), "bin")) return LV_RES_INV;
+
+        lv_fs_file_t f;
+        lv_fs_res_t res = lv_fs_open(&f, dsc->src, LV_FS_MODE_RD);
+        if(res != LV_FS_RES_OK) {
+            LV_LOG_WARN("Built-in image decoder can't open the file");
+            return LV_RES_INV;
+        }
+
+        /*If the file was open successfully save the file descriptor*/
+        if(dsc->user_data == NULL) {
+            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_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->f                               = lv_mem_alloc(sizeof(f));
+        if(user_data->f == NULL) {
+            LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
+            LV_ASSERT_MEM(user_data->f);
+        }
+
+        memcpy(user_data->f, &f, sizeof(f));
+
+#else
+        LV_LOG_WARN("Image built-in decoder cannot read file because 
LV_USE_FILESYSTEM = 0");
+        return LV_RES_INV;
+#endif
+    }
+
+    lv_img_cf_t cf = dsc->header.cf;
+    /*Process true color formats*/
+    if(cf == LV_IMG_CF_TRUE_COLOR || cf == LV_IMG_CF_TRUE_COLOR_ALPHA || cf == 
LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED) {
+        if(dsc->src_type == LV_IMG_SRC_VARIABLE) {
+            /* In case of uncompressed formats the image stored in the ROM/RAM.
+             * So simply give its pointer*/
+            dsc->img_data = ((lv_img_dsc_t *)dsc->src)->data;
+            return LV_RES_OK;
+        } else {
+            /*If it's a file it need to be read line by line later*/
+            dsc->img_data = NULL;
+            return LV_RES_OK;
+        }
+    }
+    /*Process indexed images. Build a palette*/
+    else if(cf == LV_IMG_CF_INDEXED_1BIT || cf == LV_IMG_CF_INDEXED_2BIT || cf 
== LV_IMG_CF_INDEXED_4BIT ||
+            cf == LV_IMG_CF_INDEXED_8BIT) {
+
+#if LV_IMG_CF_INDEXED
+        uint8_t px_size       = lv_img_color_format_get_px_size(cf);
+        uint32_t palette_size = 1 << px_size;
+
+        /*Allocate the palette*/
+        if(dsc->user_data == NULL) {
+            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_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));
+        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_ASSERT_MEM(user_data->f);
+#endif
+        }
+
+        if(dsc->src_type == LV_IMG_SRC_FILE) {
+            /*Read the palette from file*/
+#if LV_USE_FILESYSTEM
+            lv_fs_seek(user_data->f, 4); /*Skip the header*/
+            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;
+#endif
+        } else {
+            /*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;
+            }
+        }
+
+        dsc->img_data = NULL;
+        return LV_RES_OK;
+#else
+        LV_LOG_WARN("Indexed (palette) images are not enabled in lv_conf.h. 
See LV_IMG_CF_INDEXED");
+        return LV_RES_INV;
+#endif
+    }
+    /*Alpha indexed images. */
+    else if(cf == LV_IMG_CF_ALPHA_1BIT || cf == LV_IMG_CF_ALPHA_2BIT || cf == 
LV_IMG_CF_ALPHA_4BIT ||
+            cf == LV_IMG_CF_ALPHA_8BIT) {
+#if LV_IMG_CF_ALPHA
+        dsc->img_data = NULL;
+        return LV_RES_OK; /*Nothing to process*/
+#else
+        LV_LOG_WARN("Alpha indexed images are not enabled in lv_conf.h. See 
LV_IMG_CF_ALPHA");
+        return LV_RES_INV;
+#endif
+    }
+    /*Unknown format. Can't decode it.*/
+    else {
+        /*Free the potentially allocated memories*/
+        lv_img_decoder_built_in_close(decoder, dsc);
+
+        LV_LOG_WARN("Image decoder open: unknown color format")
+        return LV_RES_INV;
+    }
+}
+
+/**
+ * Decode `len` pixels starting from the given `x`, `y` coordinates and store 
them in `buf`.
+ * Required only if the "open" function can't return with the whole decoded 
pixel array.
+ * @param decoder pointer to the decoder the function associated with
+ * @param dsc pointer to decoder descriptor
+ * @param x start x coordinate
+ * @param y start y coordinate
+ * @param len number of pixels to decode
+ * @param buf a buffer to store the decoded pixels
+ * @return LV_RES_OK: ok; LV_RES_INV: failed
+ */
+lv_res_t lv_img_decoder_built_in_read_line(lv_img_decoder_t * decoder, 
lv_img_decoder_dsc_t * dsc, lv_coord_t x,
+                                                  lv_coord_t y, lv_coord_t 
len, uint8_t * buf)
+{
+    (void)decoder; /*Unused*/
+
+    lv_res_t res = LV_RES_INV;
+
+    if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR || dsc->header.cf == 
LV_IMG_CF_TRUE_COLOR_ALPHA ||
+       dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED) {
+        /* For TRUE_COLOR images read line required only for files.
+         * For variables the image data was returned in `open`*/
+        if(dsc->src_type == LV_IMG_SRC_FILE) {
+            res = lv_img_decoder_built_in_line_true_color(dsc, x, y, len, buf);
+        }
+    } 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) {
+
+        res = lv_img_decoder_built_in_line_alpha(dsc, x, y, len, buf);
+    } else if(dsc->header.cf == LV_IMG_CF_INDEXED_1BIT || dsc->header.cf == 
LV_IMG_CF_INDEXED_2BIT ||
+              dsc->header.cf == LV_IMG_CF_INDEXED_4BIT || dsc->header.cf == 
LV_IMG_CF_INDEXED_8BIT) {
+        res = lv_img_decoder_built_in_line_indexed(dsc, x, y, len, buf);
+    } else {
+        LV_LOG_WARN("Built-in image decoder read not supports the color 
format");
+        return LV_RES_INV;
+    }
+
+    return res;
+}
+
+/**
+ * Close the pending decoding. Free resources etc.
+ * @param decoder pointer to the decoder the function associated with
+ * @param dsc pointer to decoder descriptor
+ */
+void lv_img_decoder_built_in_close(lv_img_decoder_t * decoder, 
lv_img_decoder_dsc_t * dsc)
+{
+    (void)decoder; /*Unused*/
+
+    lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
+    if(user_data) {
+#if LV_USE_FILESYSTEM
+        if(user_data->f) {
+            lv_fs_close(user_data->f);
+            lv_mem_free(user_data->f);
+        }
+#endif
+        if(user_data->palette) lv_mem_free(user_data->palette);
+
+        lv_mem_free(user_data);
+
+        dsc->user_data = NULL;
+    }
+}
+
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+static lv_res_t lv_img_decoder_built_in_line_true_color(lv_img_decoder_dsc_t * 
dsc, lv_coord_t x, lv_coord_t y,
+                                                        lv_coord_t len, 
uint8_t * buf)
+{
+#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);
+
+    uint32_t pos = ((y * dsc->header.w + x) * px_size) >> 3;
+    pos += 4; /*Skip the header*/
+    res = lv_fs_seek(user_data->f, pos);
+    if(res != LV_FS_RES_OK) {
+        LV_LOG_WARN("Built-in image decoder seek failed");
+        return LV_RES_INV;
+    }
+    uint32_t btr = len * (px_size >> 3);
+    uint32_t br  = 0;
+    lv_fs_read(user_data->f, buf, btr, &br);
+    if(res != LV_FS_RES_OK || btr != br) {
+        LV_LOG_WARN("Built-in image decoder read failed");
+        return LV_RES_INV;
+    }
+
+    return LV_RES_OK;
+#else
+    LV_LOG_WARN("Image built-in decoder cannot read file because 
LV_USE_FILESYSTEM = 0");
+    return LV_RES_INV;
+#endif
+}
+
+static lv_res_t lv_img_decoder_built_in_line_alpha(lv_img_decoder_dsc_t * dsc, 
lv_coord_t x, lv_coord_t y,
+                                                   lv_coord_t len, uint8_t * 
buf)
+{
+
+#if LV_IMG_CF_ALPHA
+    const lv_opa_t alpha1_opa_table[2]  = {0, 255};          /*Opacity mapping 
with bpp = 1 (Just for compatibility)*/
+    const lv_opa_t alpha2_opa_table[4]  = {0, 85, 170, 255}; /*Opacity mapping 
with bpp = 2*/
+    const lv_opa_t alpha4_opa_table[16] = {0,  17, 34,  51,  /*Opacity mapping 
with bpp = 4*/
+                                           68, 85, 102, 119, 136, 153, 170, 
187, 204, 221, 238, 255};
+
+    /*Simply fill the buffer with the color. Later only the alpha value will 
be modified.*/
+    lv_color_t bg_color = dsc->style->image.color;
+    lv_coord_t i;
+    for(i = 0; i < len; i++) {
+#if LV_COLOR_DEPTH == 8 || LV_COLOR_DEPTH == 1
+        buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE] = bg_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] = bg_color.full & 0xFF;
+        buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE + 1] = (bg_color.full >> 8) & 0xFF;
+#elif LV_COLOR_DEPTH == 32
+        *((uint32_t *)&buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE]) = bg_color.full;
+#else
+#error "Invalid LV_COLOR_DEPTH. Check it in lv_conf.h"
+#endif
+    }
+
+    const lv_opa_t * opa_table = NULL;
+    uint8_t px_size            = 
lv_img_color_format_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;
+    uint32_t ofs = 0;
+    int8_t pos   = 0;
+    switch(dsc->header.cf) {
+        case LV_IMG_CF_ALPHA_1BIT:
+            w = (dsc->header.w >> 3); /*E.g. w = 20 -> w = 2 + 1*/
+            if(dsc->header.w & 0x7) w++;
+            ofs += w * y + (x >> 3); /*First pixel*/
+            pos       = 7 - (x & 0x7);
+            opa_table = alpha1_opa_table;
+            break;
+        case LV_IMG_CF_ALPHA_2BIT:
+            w = (dsc->header.w >> 2); /*E.g. w = 13 -> w = 3 + 1 (bytes)*/
+            if(dsc->header.w & 0x3) w++;
+            ofs += w * y + (x >> 2); /*First pixel*/
+            pos       = 6 - ((x & 0x3) * 2);
+            opa_table = alpha2_opa_table;
+            break;
+        case LV_IMG_CF_ALPHA_4BIT:
+            w = (dsc->header.w >> 1); /*E.g. w = 13 -> w = 6 + 1 (bytes)*/
+            if(dsc->header.w & 0x1) w++;
+            ofs += w * y + (x >> 1); /*First pixel*/
+            pos       = 4 - ((x & 0x1) * 4);
+            opa_table = alpha4_opa_table;
+            break;
+        case LV_IMG_CF_ALPHA_8BIT:
+            w = dsc->header.w; /*E.g. x = 7 -> w = 7 (bytes)*/
+            ofs += w * y + x;  /*First pixel*/
+            pos = 0;
+            break;
+    }
+
+#if LV_USE_FILESYSTEM
+    lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
+    uint8_t fs_buf[LV_HOR_RES_MAX];
+#endif
+
+    const uint8_t * data_tmp = NULL;
+    if(dsc->src_type == LV_IMG_SRC_VARIABLE) {
+        const lv_img_dsc_t * img_dsc = dsc->src;
+
+        data_tmp = img_dsc->data + ofs;
+    } else {
+#if LV_USE_FILESYSTEM
+        lv_fs_seek(user_data->f, ofs + 4); /*+4 to skip the header*/
+        lv_fs_read(user_data->f, fs_buf, w, NULL);
+        data_tmp = fs_buf;
+#else
+        LV_LOG_WARN("Image built-in alpha line reader can't read file because 
LV_USE_FILESYSTEM = 0");
+        data_tmp = NULL; /*To avoid warnings*/
+        return LV_RES_INV;
+#endif
+    }
+
+    uint8_t byte_act = 0;
+    uint8_t val_act;
+    for(i = 0; i < len; i++) {
+        val_act = (data_tmp[byte_act] & (mask << pos)) >> pos;
+
+        buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE + LV_IMG_PX_SIZE_ALPHA_BYTE - 1] =
+            dsc->header.cf == LV_IMG_CF_ALPHA_8BIT ? val_act : 
opa_table[val_act];
+
+        pos -= px_size;
+        if(pos < 0) {
+            pos = 8 - px_size;
+            data_tmp++;
+        }
+    }
+
+    return LV_RES_OK;
+
+#else
+    LV_LOG_WARN("Image built-in alpha line reader failed because 
LV_IMG_CF_ALPHA is 0 in lv_conf.h");
+    return LV_RES_INV;
+#endif
+}
+
+static lv_res_t lv_img_decoder_built_in_line_indexed(lv_img_decoder_dsc_t * 
dsc, lv_coord_t x, lv_coord_t y,
+                                                     lv_coord_t len, uint8_t * 
buf)
+{
+
+#if LV_IMG_CF_INDEXED
+    uint8_t px_size = lv_img_color_format_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;
+    int8_t pos   = 0;
+    uint32_t ofs = 0;
+    switch(dsc->header.cf) {
+        case LV_IMG_CF_INDEXED_1BIT:
+            w = (dsc->header.w >> 3); /*E.g. w = 20 -> w = 2 + 1*/
+            if(dsc->header.w & 0x7) w++;
+            ofs += w * y + (x >> 3); /*First pixel*/
+            ofs += 8;                /*Skip the palette*/
+            pos = 7 - (x & 0x7);
+            break;
+        case LV_IMG_CF_INDEXED_2BIT:
+            w = (dsc->header.w >> 2); /*E.g. w = 13 -> w = 3 + 1 (bytes)*/
+            if(dsc->header.w & 0x3) w++;
+            ofs += w * y + (x >> 2); /*First pixel*/
+            ofs += 16;               /*Skip the palette*/
+            pos = 6 - ((x & 0x3) * 2);
+            break;
+        case LV_IMG_CF_INDEXED_4BIT:
+            w = (dsc->header.w >> 1); /*E.g. w = 13 -> w = 6 + 1 (bytes)*/
+            if(dsc->header.w & 0x1) w++;
+            ofs += w * y + (x >> 1); /*First pixel*/
+            ofs += 64;               /*Skip the palette*/
+            pos = 4 - ((x & 0x1) * 4);
+            break;
+        case LV_IMG_CF_INDEXED_8BIT:
+            w = dsc->header.w; /*E.g. x = 7 -> w = 7 (bytes)*/
+            ofs += w * y + x;  /*First pixel*/
+            ofs += 1024;       /*Skip the palette*/
+            pos = 0;
+            break;
+    }
+
+    lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
+
+#if LV_USE_FILESYSTEM
+    uint8_t fs_buf[LV_HOR_RES_MAX];
+#endif
+    const uint8_t * data_tmp = NULL;
+    if(dsc->src_type == LV_IMG_SRC_VARIABLE) {
+        const lv_img_dsc_t * img_dsc = dsc->src;
+        data_tmp                     = img_dsc->data + ofs;
+    } else {
+#if LV_USE_FILESYSTEM
+        lv_fs_seek(user_data->f, ofs + 4); /*+4 to skip the header*/
+        lv_fs_read(user_data->f, fs_buf, w, NULL);
+        data_tmp = fs_buf;
+#else
+        LV_LOG_WARN("Image built-in indexed line reader can't read file 
because LV_USE_FILESYSTEM = 0");
+        data_tmp = NULL; /*To avoid warnings*/
+        return LV_RES_INV;
+#endif
+    }
+
+    uint8_t val_act;
+    lv_coord_t i;
+    for(i = 0; i < len; i++) {
+        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) {
+            pos = 8 - px_size;
+            data_tmp++;
+        }
+    }
+
+    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");
+    return LV_RES_INV;
+#endif
+}
diff --git a/scriptsrcs/lvgl/src/lv_draw/lv_img_decoder.h 
b/scriptsrcs/lvgl/src/lv_draw/lv_img_decoder.h
new file mode 100755
index 0000000..fb7af83
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_draw/lv_img_decoder.h
@@ -0,0 +1,357 @@
+/**
+ * @file lv_img_decoder.h
+ *
+ */
+
+#ifndef LV_IMG_DEOCER_H
+#define LV_IMG_DEOCER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include <stdint.h>
+#include "../lv_misc/lv_fs.h"
+#include "../lv_misc/lv_types.h"
+#include "../lv_misc/lv_area.h"
+#include "../lv_core/lv_style.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
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**
+ * Source of image. */
+enum {
+    LV_IMG_SRC_VARIABLE, /** Binary/C variable */
+    LV_IMG_SRC_FILE, /** File in filesystem */
+    LV_IMG_SRC_SYMBOL, /** Symbol (@ref lv_symbol_def.h) */
+    LV_IMG_SRC_UNKNOWN, /** Unknown source */
+};
+
+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 */
+
+struct _lv_img_decoder;
+struct _lv_img_decoder_dsc;
+
+/**
+ * Get info from an image and store in the `header`
+ * @param src the image source. Can be a pointer to a C array or a file name 
(Use
+ * `lv_img_src_get_type` to determine the type)
+ * @param header store the info here
+ * @return LV_RES_OK: info written correctly; LV_RES_INV: failed
+ */
+typedef lv_res_t (*lv_img_decoder_info_f_t)(struct _lv_img_decoder * decoder, 
const void * src,
+                                            lv_img_header_t * header);
+
+/**
+ * Open an image for decoding. Prepare it as it is required to read it later
+ * @param decoder pointer to the decoder the function associated with
+ * @param dsc pointer to decoder descriptor. `src`, `style` are already 
initialized in it.
+ */
+typedef lv_res_t (*lv_img_decoder_open_f_t)(struct _lv_img_decoder * decoder, 
struct _lv_img_decoder_dsc * dsc);
+
+/**
+ * Decode `len` pixels starting from the given `x`, `y` coordinates and store 
them in `buf`.
+ * Required only if the "open" function can't return with the whole decoded 
pixel array.
+ * @param decoder pointer to the decoder the function associated with
+ * @param dsc pointer to decoder descriptor
+ * @param x start x coordinate
+ * @param y start y coordinate
+ * @param len number of pixels to decode
+ * @param buf a buffer to store the decoded pixels
+ * @return LV_RES_OK: ok; LV_RES_INV: failed
+ */
+typedef lv_res_t (*lv_img_decoder_read_line_f_t)(struct _lv_img_decoder * 
decoder, struct _lv_img_decoder_dsc * dsc,
+                                                 lv_coord_t x, lv_coord_t y, 
lv_coord_t len, uint8_t * buf);
+
+/**
+ * Close the pending decoding. Free resources etc.
+ * @param decoder pointer to the decoder the function associated with
+ * @param dsc pointer to decoder descriptor
+ */
+typedef void (*lv_img_decoder_close_f_t)(struct _lv_img_decoder * decoder, 
struct _lv_img_decoder_dsc * dsc);
+
+typedef struct _lv_img_decoder
+{
+    lv_img_decoder_info_f_t info_cb;
+    lv_img_decoder_open_f_t open_cb;
+    lv_img_decoder_read_line_f_t read_line_cb;
+    lv_img_decoder_close_f_t close_cb;
+
+#if LV_USE_USER_DATA
+    lv_img_decoder_user_data_t user_data;
+#endif
+} lv_img_decoder_t;
+
+/**Describe an image decoding session. Stores data about the decoding*/
+typedef struct _lv_img_decoder_dsc
+{
+    /**The decoder which was able to open the image source*/
+    lv_img_decoder_t * decoder;
+
+    /**The image source. A file path like "S:my_img.png" or pointer to an 
`lv_img_dsc_t` variable*/
+    const void * src;
+
+    /**Style to draw the image.*/
+    const lv_style_t * style;
+
+    /**Type of the source: file or variable. Can be set in `open` function if 
required*/
+    lv_img_src_t src_type;
+
+    /**Info about the opened image: color format, size, etc. MUST be set in 
`open` function*/
+    lv_img_header_t header;
+
+    /** Pointer to a buffer where the image's data (pixels) are stored in a 
decoded, plain format.
+     *  MUST be set in `open` function*/
+    const uint8_t * img_data;
+
+    /** How much time did it take to open the image. [ms]
+     *  If not set `lv_img_cache` will measure and set the time to open*/
+    uint32_t time_to_open;
+
+    /**A text to display instead of the image when the image can't be opened.
+     * Can be set in `open` function or set NULL. */
+    const char * error_msg;
+
+    /**Store any custom data here is required*/
+    void * user_data;
+} lv_img_decoder_dsc_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the image decoder module
+ */
+void lv_img_decoder_init(void);
+
+/**
+ * Get information about an image.
+ * Try the created image decoder one by one. Once one is able to get info that 
info will be used.
+ * @param src the image source. Can be
+ *  1) File name: E.g. "S:folder/img1.png" (The drivers needs to registered 
via `lv_fs_add_drv()`)
+ *  2) Variable: Pointer to an `lv_img_dsc_t` variable
+ *  3) Symbol: E.g. `LV_SYMBOL_OK`
+ * @param header the image info will be stored here
+ * @return LV_RES_OK: success; LV_RES_INV: wasn't able to get info about the 
image
+ */
+lv_res_t lv_img_decoder_get_info(const char * src, lv_img_header_t * header);
+
+/**
+ * Open an image.
+ * Try the created image decoder one by one. Once one is able to open the 
image that decoder is save in `dsc`
+ * @param dsc describe a decoding session. Simply a pointer to an 
`lv_img_decoder_dsc_t` variable.
+ * @param src the image source. Can be
+ *  1) File name: E.g. "S:folder/img1.png" (The drivers needs to registered 
via `lv_fs_add_drv()`)
+ *  2) Variable: Pointer to an `lv_img_dsc_t` variable
+ *  3) Symbol: E.g. `LV_SYMBOL_OK`
+ * @param style the style of the image
+ * @return LV_RES_OK: opened the image. `dsc->img_data` and `dsc->header` are 
set.
+ *         LV_RES_INV: none of the registered image decoders were able to open 
the image.
+ */
+lv_res_t lv_img_decoder_open(lv_img_decoder_dsc_t * dsc, const void * src, 
const lv_style_t * style);
+
+/**
+ * Read a line from an opened image
+ * @param dsc pointer to `lv_img_decoder_dsc_t` used in `lv_img_decoder_open`
+ * @param x start X coordinate (from left)
+ * @param y start Y coordinate (from top)
+ * @param len number of pixels to read
+ * @param buf store the data here
+ * @return LV_RES_OK: success; LV_RES_INV: an error occurred
+ */
+lv_res_t lv_img_decoder_read_line(lv_img_decoder_dsc_t * dsc, lv_coord_t x, 
lv_coord_t y, lv_coord_t len,
+                                  uint8_t * buf);
+
+/**
+ * Close a decoding session
+ * @param dsc pointer to `lv_img_decoder_dsc_t` used in `lv_img_decoder_open`
+ */
+void lv_img_decoder_close(lv_img_decoder_dsc_t * dsc);
+
+/**
+ * Create a new image decoder
+ * @return pointer to the new image decoder
+ */
+lv_img_decoder_t * lv_img_decoder_create(void);
+
+/**
+ * Delete an image decoder
+ * @param decoder pointer to an image decoder
+ */
+void lv_img_decoder_delete(lv_img_decoder_t * decoder);
+
+/**
+ * Set a callback to get information about the image
+ * @param decoder pointer to an image decoder
+ * @param info_cb a function to collect info about an image (fill an 
`lv_img_header_t` struct)
+ */
+void lv_img_decoder_set_info_cb(lv_img_decoder_t * decoder, 
lv_img_decoder_info_f_t info_cb);
+
+/**
+ * Set a callback to open an image
+ * @param decoder pointer to an image decoder
+ * @param open_cb a function to open an image
+ */
+void lv_img_decoder_set_open_cb(lv_img_decoder_t * decoder, 
lv_img_decoder_open_f_t open_cb);
+
+/**
+ * Set a callback to a decoded line of an image
+ * @param decoder pointer to an image decoder
+ * @param read_line_cb a function to read a line of an image
+ */
+void lv_img_decoder_set_read_line_cb(lv_img_decoder_t * decoder, 
lv_img_decoder_read_line_f_t read_line_cb);
+
+/**
+ * Set a callback to close a decoding session. E.g. close files and free other 
resources.
+ * @param decoder pointer to an image decoder
+ * @param close_cb a function to close a decoding session
+ */
+void lv_img_decoder_set_close_cb(lv_img_decoder_t * decoder, 
lv_img_decoder_close_f_t close_cb);
+
+
+
+/**
+ * Get info about a built-in image
+ * @param decoder the decoder where this function belongs
+ * @param src the image source: pointer to an `lv_img_dsc_t` variable, a file 
path or a symbol
+ * @param header store the image data here
+ * @return LV_RES_OK: the info is successfully stored in `header`; LV_RES_INV: 
unknown format or other error.
+ */
+lv_res_t lv_img_decoder_built_in_info(lv_img_decoder_t * decoder, const void * 
src, lv_img_header_t * header);
+
+/**
+ * Open a built in image
+ * @param decoder the decoder where this function belongs
+ * @param dsc pointer to decoder descriptor. `src`, `style` are already 
initialized in it.
+ * @return LV_RES_OK: the info is successfully stored in `header`; LV_RES_INV: 
unknown format or other error.
+ */
+lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, 
lv_img_decoder_dsc_t * dsc);
+
+/**
+ * Decode `len` pixels starting from the given `x`, `y` coordinates and store 
them in `buf`.
+ * Required only if the "open" function can't return with the whole decoded 
pixel array.
+ * @param decoder pointer to the decoder the function associated with
+ * @param dsc pointer to decoder descriptor
+ * @param x start x coordinate
+ * @param y start y coordinate
+ * @param len number of pixels to decode
+ * @param buf a buffer to store the decoded pixels
+ * @return LV_RES_OK: ok; LV_RES_INV: failed
+ */
+lv_res_t lv_img_decoder_built_in_read_line(lv_img_decoder_t * decoder, 
lv_img_decoder_dsc_t * dsc, lv_coord_t x,
+                                                  lv_coord_t y, lv_coord_t 
len, uint8_t * buf);
+
+/**
+ * Close the pending decoding. Free resources etc.
+ * @param decoder pointer to the decoder the function associated with
+ * @param dsc pointer to decoder descriptor
+ */
+void lv_img_decoder_built_in_close(lv_img_decoder_t * decoder, 
lv_img_decoder_dsc_t * dsc);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_TEMPL_H*/
diff --git a/scriptsrcs/lvgl/src/lv_font/lv_font.c 
b/scriptsrcs/lvgl/src/lv_font/lv_font.c
new file mode 100755
index 0000000..c2d6eac
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_font/lv_font.c
@@ -0,0 +1,84 @@
+/**
+ * @file lv_font.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+
+#include "lv_font.h"
+#include "../lv_misc/lv_utils.h"
+#include "../lv_misc/lv_log.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Return with the bitmap of a font.
+ * @param font_p pointer to a font
+ * @param letter an UNICODE character code
+ * @return  pointer to the bitmap of the letter
+ */
+const uint8_t * lv_font_get_glyph_bitmap(const lv_font_t * font_p, uint32_t 
letter)
+{
+    return font_p->get_glyph_bitmap(font_p, letter);
+}
+
+/**
+ * Get the descriptor of a glyph
+ * @param font_p pointer to font
+ * @param dsc_out store the result descriptor here
+ * @param letter an UNICODE letter code
+ * @return true: descriptor is successfully loaded into `dsc_out`.
+ *         false: the letter was not found, no data is loaded to `dsc_out`
+ */
+bool lv_font_get_glyph_dsc(const lv_font_t * font_p, lv_font_glyph_dsc_t * 
dsc_out, uint32_t letter, uint32_t letter_next)
+{
+    return font_p->get_glyph_dsc(font_p, dsc_out, letter, letter_next);
+}
+
+/**
+ * Get the width of a glyph with kerning
+ * @param font pointer to a font
+ * @param letter an UNICODE letter
+ * @param letter_next the next letter after `letter`. Used for kerning
+ * @return the width of the glyph
+ */
+uint16_t lv_font_get_glyph_width(const lv_font_t * font, uint32_t letter, 
uint32_t letter_next)
+{
+    lv_font_glyph_dsc_t g;
+    bool ret;
+    ret = lv_font_get_glyph_dsc(font, &g, letter, letter_next);
+    if(ret) return g.adv_w;
+    else return 0;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
diff --git a/scriptsrcs/lvgl/src/lv_font/lv_font.h 
b/scriptsrcs/lvgl/src/lv_font/lv_font.h
new file mode 100755
index 0000000..50be635
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_font/lv_font.h
@@ -0,0 +1,164 @@
+/**
+ * @file lv_font.h
+ *
+ */
+
+#ifndef LV_FONT_H
+#define LV_FONT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+
+#include "lv_symbol_def.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+/*Number of fractional digits in the advanced width (`adv_w`) field of 
`lv_font_glyph_dsc_t`*/
+#define LV_FONT_WIDTH_FRACT_DIGIT       4
+
+#define LV_FONT_KERN_POSITIVE        0
+#define LV_FONT_KERN_NEGATIVE        1
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/*------------------
+ * General types
+ *-----------------*/
+
+/** Describes the properties of a glyph. */
+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*/
+    uint8_t bpp;   /**< Bit-per-pixel: 1, 2, 4, 8*/
+}lv_font_glyph_dsc_t;
+
+
+/** 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*/
+    bool (*get_glyph_dsc)(const struct _lv_font_struct *, lv_font_glyph_dsc_t 
*, uint32_t letter, uint32_t letter_next);
+
+    /** Get a glyph's bitmap from a font*/
+    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*/
+    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;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Return with the bitmap of a font.
+ * @param font_p pointer to a font
+ * @param letter an UNICODE character code
+ * @return  pointer to the bitmap of the letter
+ */
+const uint8_t * lv_font_get_glyph_bitmap(const lv_font_t * font_p, uint32_t 
letter);
+
+/**
+ * Get the descriptor of a glyph
+ * @param font_p pointer to font
+ * @param dsc_out store the result descriptor here
+ * @param letter an UNICODE letter code
+ * @return true: descriptor is successfully loaded into `dsc_out`.
+ *         false: the letter was not found, no data is loaded to `dsc_out`
+ */
+bool lv_font_get_glyph_dsc(const lv_font_t * font_p, lv_font_glyph_dsc_t * 
dsc_out, uint32_t letter, uint32_t letter_next);
+
+/**
+ * Get the width of a glyph with kerning
+ * @param font pointer to a font
+ * @param letter an UNICODE letter
+ * @param letter_next the next letter after `letter`. Used for kerning
+ * @return the width of the glyph
+ */
+uint16_t lv_font_get_glyph_width(const lv_font_t * font, uint32_t letter, 
uint32_t letter_next);
+
+/**
+ * Get the line height of a font. All characters fit into this height
+ * @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)
+{
+    return font_p->line_height;
+}
+
+/**********************
+ *      MACROS
+ **********************/
+
+#define LV_FONT_DECLARE(font_name) extern lv_font_t font_name;
+
+#if LV_FONT_ROBOTO_12
+LV_FONT_DECLARE(lv_font_roboto_12)
+#endif
+
+#if LV_FONT_ROBOTO_16
+LV_FONT_DECLARE(lv_font_roboto_16)
+#endif
+
+#if LV_FONT_ROBOTO_22
+LV_FONT_DECLARE(lv_font_roboto_22)
+#endif
+
+#if LV_FONT_ROBOTO_28
+LV_FONT_DECLARE(lv_font_roboto_28)
+#endif
+
+#if LV_FONT_UNSCII_8
+LV_FONT_DECLARE(lv_font_unscii_8)
+#endif
+
+/*Declare the custom (user defined) fonts*/
+#ifdef LV_FONT_CUSTOM_DECLARE
+LV_FONT_CUSTOM_DECLARE
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*USE_FONT*/
diff --git a/scriptsrcs/lvgl/src/lv_font/lv_font.mk 
b/scriptsrcs/lvgl/src/lv_font/lv_font.mk
new file mode 100755
index 0000000..836d86a
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_font/lv_font.mk
@@ -0,0 +1,12 @@
+CSRCS += lv_font.c
+CSRCS += lv_font_fmt_txt.c
+CSRCS += lv_font_roboto_12.c
+CSRCS += lv_font_roboto_16.c
+CSRCS += lv_font_roboto_22.c
+CSRCS += lv_font_roboto_28.c
+CSRCS += lv_font_unscii_8.c
+
+DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_font
+VPATH += :$(LVGL_DIR)/lvgl/src/lv_font
+
+CFLAGS += "-I$(LVGL_DIR)/lvgl/src/lv_font"
diff --git a/scriptsrcs/lvgl/src/lv_font/lv_font_fmt_txt.c 
b/scriptsrcs/lvgl/src/lv_font/lv_font_fmt_txt.c
new file mode 100755
index 0000000..fb02c74
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_font/lv_font_fmt_txt.c
@@ -0,0 +1,479 @@
+/**
+ * @file lv_font.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+typedef enum {
+    RLE_STATE_SINGLE = 0,
+    RLE_STATE_REPEATE,
+    RLE_STATE_COUNTER,
+}rle_state_t;
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static uint32_t get_glyph_dsc_id(const lv_font_t * font, uint32_t letter);
+static int8_t get_kern_value(const lv_font_t * font, uint32_t gid_left, 
uint32_t gid_right);
+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
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Used as `get_glyph_bitmap` callback in LittelvGL's native font format if 
the font is uncompressed.
+ * @param font pointer to font
+ * @param unicode_letter an unicode letter which bitmap should be get
+ * @return pointer to the bitmap or NULL if not found
+ */
+const uint8_t * lv_font_get_bitmap_fmt_txt(const lv_font_t * font, uint32_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 NULL;
+
+    const lv_font_fmt_txt_glyph_dsc_t * gdsc = &fdsc->glyph_dsc[gid];
+
+    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;
+}
+
+/**
+ * Used as `get_glyph_dsc` callback in LittelvGL's native font format if the 
font is uncompressed.
+ * @param font_p pointer to font
+ * @param dsc_out store the result descriptor here
+ * @param letter an UNICODE letter code
+ * @return true: descriptor is successfully loaded into `dsc_out`.
+ *         false: the letter was not found, no data is loaded to `dsc_out`
+ */
+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)
+{
+    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;
+
+    int8_t kvalue = 0;
+    if(fdsc->kern_dsc) {
+        uint32_t gid_next = get_glyph_dsc_id(font, unicode_letter_next);
+        if(gid_next) {
+            kvalue = get_kern_value(font, gid, gid_next);
+        }
+    }
+
+    /*Put together a glyph dsc*/
+    const lv_font_fmt_txt_glyph_dsc_t * gdsc = &fdsc->glyph_dsc[gid];
+
+    int32_t kv = ((int32_t)((int32_t)kvalue * fdsc->kern_scale) >> 4);
+
+    uint32_t adv_w = gdsc->adv_w + kv;
+    adv_w  = (adv_w + (1 << 3)) >> 4;
+
+    dsc_out->adv_w = adv_w;
+    dsc_out->box_h = gdsc->box_h;
+    dsc_out->box_w = gdsc->box_w;
+    dsc_out->ofs_x = gdsc->ofs_x;
+    dsc_out->ofs_y = gdsc->ofs_y;
+    dsc_out->bpp   = (uint8_t)fdsc->bpp;
+
+    return true;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+static uint32_t get_glyph_dsc_id(const lv_font_t * font, uint32_t letter)
+{
+    if(letter == '\0') return 0;
+
+    lv_font_fmt_txt_dsc_t * fdsc = (lv_font_fmt_txt_dsc_t *) font->dsc;
+
+    /*Check the cache first*/
+    if(letter == fdsc->last_letter) return fdsc->last_glyph_id;
+
+    uint16_t i;
+    for(i = 0; i < fdsc->cmap_num; i++) {
+
+        /*Relative code point*/
+        uint32_t rcp = letter - fdsc->cmaps[i].range_start;
+        if(rcp > fdsc->cmaps[i].range_length) continue;
+        uint32_t glyph_id = 0;
+        if(fdsc->cmaps[i].type == LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY) {
+            glyph_id = fdsc->cmaps[i].glyph_id_start + rcp;
+        }
+        else if(fdsc->cmaps[i].type == LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL) {
+            const uint8_t * gid_ofs_8 = fdsc->cmaps[i].glyph_id_ofs_list;
+            glyph_id = fdsc->cmaps[i].glyph_id_start + gid_ofs_8[rcp];
+        }
+        else if(fdsc->cmaps[i].type == LV_FONT_FMT_TXT_CMAP_SPARSE_TINY) {
+            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) {
+                lv_uintptr_t ofs = (lv_uintptr_t)(p - (uint8_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;
+            }
+        }
+        else if(fdsc->cmaps[i].type == LV_FONT_FMT_TXT_CMAP_SPARSE_FULL) {
+            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) {
+                lv_uintptr_t ofs = (lv_uintptr_t)(p - (uint8_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];
+            }
+        }
+
+        /*Update the cache*/
+        fdsc->last_letter = letter;
+        fdsc->last_glyph_id = glyph_id;
+        return glyph_id;
+    }
+
+    fdsc->last_letter = letter;
+    fdsc->last_glyph_id = 0;
+    return 0;
+
+}
+
+static int8_t get_kern_value(const lv_font_t * font, uint32_t gid_left, 
uint32_t gid_right)
+{
+    lv_font_fmt_txt_dsc_t * fdsc = (lv_font_fmt_txt_dsc_t *) font->dsc;
+
+    int8_t value = 0;
+
+    if(fdsc->kern_classes == 0) {
+        /*Kern pairs*/
+        const lv_font_fmt_txt_kern_pair_t * kdsc = fdsc->kern_dsc;
+        if(kdsc->glyph_ids_size == 0) {
+            /* Use binary search to find the kern value.
+             * The pairs are ordered left_id first, then right_id secondly. */
+            const uint8_t * g_ids = kdsc->glyph_ids;
+            uint16_t g_id_both = (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, 2, kern_pair_8_compare);
+
+            /*If the `g_id_both` were found get its index from the pointer*/
+            if(kid_p) {
+                lv_uintptr_t ofs = (lv_uintptr_t)(kid_p - g_ids);
+                ofs = ofs >> 1;     /*ofs is for pair, divide by 2 to refer as 
a single value*/
+                value = kdsc->values[ofs];
+            }
+        } else if(kdsc->glyph_ids_size == 1) {
+            /* 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;
+            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) {
+                lv_uintptr_t ofs = (lv_uintptr_t) (kid_p - (const uint8_t 
*)g_ids);
+                ofs = ofs >> 4;     /*ofs is 4 byte pairs, divide by 4 to 
refer as a single value*/
+                value = kdsc->values[ofs];
+            }
+
+        } else {
+            /*Invalid value*/
+        }
+    } else {
+        /*Kern classes*/
+        const lv_font_fmt_txt_kern_classes_t * kdsc = fdsc->kern_dsc;
+        uint8_t left_class = kdsc->left_class_mapping[gid_left];
+        uint8_t right_class = kdsc->left_class_mapping[gid_right];
+
+        /* If class = 0, kerning not exist for that glyph
+         * else got the value form `class_pair_values` 2D array*/
+        if(left_class > 0 && right_class > 0) {
+            value = kdsc->class_pair_values[(left_class-1)* 
kdsc->right_class_cnt + (right_class-1)];
+        }
+
+    }
+    return value;
+}
+
+static int32_t kern_pair_8_compare(const void * ref, const void * element)
+{
+    const uint8_t * ref8_p = ref;
+    const uint8_t * element8_p = element;
+
+    /*If the MSB is different it will matter. If not return the diff. of the 
LSB*/
+    if(ref8_p[0] != element8_p[0]) return (int32_t)ref8_p[0] - element8_p[0];
+    else return (int32_t) ref8_p[1] - element8_p[1];
+
+}
+
+static int32_t kern_pair_16_compare(const void * ref, const void * element)
+{
+    const uint16_t * ref16_p = ref;
+    const uint16_t * element16_p = element;
+
+    /*If the MSB is different it will matter. If not return the diff. of the 
LSB*/
+    if(ref16_p[0] != element16_p[0]) return (int32_t)ref16_p[0] - 
element16_p[0];
+    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_buf = lv_draw_get_buf(w * 2);
+    uint8_t * line_buf1 = line_buf;
+    uint8_t * line_buf2 = line_buf + 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;
+        }
+    }
+}
+
+/**
+ * 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.
+ *
+ *  @param[in]  pRef        Pointer to the reference.
+ *  @param[in]  pElement    Pointer to the element to compare.
+ *
+ *  @return Result of comparison.
+ *  @retval < 0   Reference is greater than element.
+ *  @retval = 0   Reference is equal to element.
+ *  @retval > 0   Reference is less than element.
+ *
+ */
+static int32_t unicode_list_compare(const void * ref, const void * element)
+{
+    return (*(uint16_t *)ref) - (*(uint16_t *)element);
+}
diff --git a/scriptsrcs/lvgl/src/lv_font/lv_font_fmt_txt.h 
b/scriptsrcs/lvgl/src/lv_font/lv_font_fmt_txt.h
new file mode 100755
index 0000000..58c8b59
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_font/lv_font_fmt_txt.h
@@ -0,0 +1,235 @@
+/**
+ * @file lv_font.h
+ *
+ */
+
+#ifndef LV_FONT_FMT_TXT_H
+#define LV_FONT_FMT_TXT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include "lv_font.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/** This describes a glyph. */
+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*/
+    int8_t ofs_y;                  /**< y offset of the bounding box. Measured 
from the top of the line*/
+}lv_font_fmt_txt_glyph_dsc_t;
+
+
+/** Format of font character map. */
+enum {
+    LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY,
+    LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL,
+    LV_FONT_FMT_TXT_CMAP_SPARSE_TINY,
+    LV_FONT_FMT_TXT_CMAP_SPARSE_FULL,
+};
+
+typedef uint8_t lv_font_fmt_txt_cmap_type_t;
+
+
+/* Map codepoints to a `glyph_dsc`s
+ * Several formats are supported to optimize memory usage
+ * See https://github.com/littlevgl/lv_font_conv/blob/master/doc/font_spec.md
+ */
+typedef struct {
+    /** First Unicode character for this range */
+    uint32_t range_start;
+
+    /** Number of Unicode characters related to this range.
+     * Last Unicode character = range_start + range_length - 1*/
+    uint16_t range_length;
+
+    /** First glyph ID (array index of `glyph_dsc`) for this range */
+    uint16_t glyph_id_start;
+
+    /*
+    According the specification there are 4 formats:
+        https://github.com/littlevgl/lv_font_conv/blob/master/doc/font_spec.md
+
+    For simplicity introduce "relative code point":
+        rcp = codepoint - range_start
+
+    and a search function:
+        search a "value" in an "array" and returns the index of "value".
+
+    Format 0 tiny
+        unicode_list == NULL && glyph_id_ofs_list == NULL
+        glyph_id = glyph_id_start + rcp
+
+    Format 0 full
+        unicode_list == NULL && glyph_id_ofs_list != NULL
+        glyph_id = glyph_id_start + glyph_id_ofs_list[rcp]
+
+    Sparse tiny
+        unicode_list != NULL && glyph_id_ofs_list == NULL
+        glyph_id = glyph_id_start + search(unicode_list, rcp)
+
+    Sparse full
+        unicode_list != NULL && glyph_id_ofs_list != NULL
+        glyph_id = glyph_id_start + glyph_id_ofs_list[search(unicode_list, 
rcp)]
+    */
+
+    const uint16_t * unicode_list;
+
+    /** if(type == LV_FONT_FMT_TXT_CMAP_FORMAT0_...) it's `uint8_t *`
+     * if(type == LV_FONT_FMT_TXT_CMAP_SPARSE_...)  it's `uint16_t *`
+     */
+    const void * glyph_id_ofs_list;
+
+    /** Length of `unicode_list` and/or `glyph_id_ofs_list`*/
+    uint16_t list_length;
+
+    /** Type of this character map*/
+    lv_font_fmt_txt_cmap_type_t type;
+}lv_font_fmt_txt_cmap_t;
+
+/** A simple mapping of kern values from pairs*/
+typedef struct {
+    /*To get a kern value of two code points:
+       1. Get the `glyph_id_left` and `glyph_id_right` from 
`lv_font_fmt_txt_cmap_t
+       2  for(i = 0; i < pair_cnt * 2; i+2)
+             if(gylph_ids[i] == glyph_id_left &&
+                gylph_ids[i+1] == glyph_id_right)
+                 return values[i / 2];
+     */
+    const void * glyph_ids;
+    const int8_t * values;
+    uint32_t pair_cnt   :24;
+    uint32_t glyph_ids_size :2;     /*0: `glyph_ids` is stored as `uint8_t`; 
1: as `uint16_t`*/
+}lv_font_fmt_txt_kern_pair_t;
+
+/** More complex but more optimal class based kern value storage*/
+typedef struct {
+    /*To get a kern value of two code points:
+          1. Get the `glyph_id_left` and `glyph_id_right` from 
`lv_font_fmt_txt_cmap_t
+          2  Get the class of the left and right glyphs as `left_class` and 
`right_class`
+              left_class = left_class_mapping[glyph_id_left];
+              right_class = right_class_mapping[glyph_id_right];
+          3. value = class_pair_values[(left_class-1)*right_class_cnt + 
(righ_class-1)]
+        */
+
+    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;
+    uint8_t right_class_cnt;
+}lv_font_fmt_txt_kern_classes_t;
+
+
+/** Bitmap formats*/
+typedef enum {
+    LV_FONT_FMT_TXT_PLAIN      = 0,
+    LV_FONT_FMT_TXT_COMPRESSED = 1,
+}lv_font_fmt_txt_bitmap_format_t;
+
+
+/*Describe store additional data for fonts */
+typedef struct {
+    /*The bitmaps os all glyphs*/
+    const uint8_t * glyph_bitmap;
+
+    /*Describe the glyphs*/
+    const lv_font_fmt_txt_glyph_dsc_t * glyph_dsc;
+
+    /* Map the glyphs to Unicode characters.
+     * Array of `lv_font_cmap_fmt_txt_t` variables*/
+    const lv_font_fmt_txt_cmap_t * cmaps;
+
+    /* Store kerning values.
+     * Can be  `lv_font_fmt_txt_kern_pair_t *  or 
`lv_font_kern_classes_fmt_txt_t *`
+     * depending on `kern_classes`
+     */
+    const void * kern_dsc;
+
+    /*Scale kern values in 12.4 format*/
+    uint16_t kern_scale;
+
+    /*Number of cmap tables*/
+    uint16_t cmap_num       :10;
+
+    /*Bit per pixel: 1, 2, 3, 4*/
+    uint16_t bpp            :3;
+
+    /*Type of `kern_dsc`*/
+    uint16_t kern_classes   :1;
+
+    /*
+     * storage format of the bitmap
+     * from `lv_font_fmt_txt_bitmap_format_t`
+     */
+    uint16_t bitmap_format  :2;
+
+    /*Cache the last letter and is glyph id*/
+    uint32_t last_letter;
+    uint32_t last_glyph_id;
+
+}lv_font_fmt_txt_dsc_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Used as `get_glyph_bitmap` callback in LittelvGL's native font format if 
the font is uncompressed.
+ * @param font pointer to font
+ * @param unicode_letter an unicode letter which bitmap should be get
+ * @return pointer to the bitmap or NULL if not found
+ */
+const uint8_t * lv_font_get_bitmap_fmt_txt(const lv_font_t * font, uint32_t 
letter);
+
+/**
+ * Used as `get_glyph_dsc` callback in LittelvGL's native font format if the 
font is uncompressed.
+ * @param font_p pointer to font
+ * @param dsc_out store the result descriptor here
+ * @param letter an UNICODE letter code
+ * @return true: descriptor is successfully loaded into `dsc_out`.
+ *         false: the letter was not found, no data is loaded to `dsc_out`
+ */
+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);
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ * ADD BUILT IN FONTS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_FONT_FMT_TXT_H*/
diff --git a/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_12.c 
b/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_12.c
new file mode 100755
index 0000000..3da8e89
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_12.c
@@ -0,0 +1,1628 @@
+#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.c --force-fast-kern-format
+ 
******************************************************************************/
+
+#ifndef LV_FONT_ROBOTO_12
+#define LV_FONT_ROBOTO_12 1
+#endif
+
+#if LV_FONT_ROBOTO_12
+
+/*-----------------
+ *    BITMAPS
+ *----------------*/
+
+/*Store the image of the glyphs*/
+static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
+    /* U+20 " " */
+
+    /* U+21 "!" */
+    0xf, 0x10, 0xf1, 0xf, 0x10, 0xf1, 0xf, 0x0,
+    0xf0, 0x9, 0x0, 0x30, 0xe, 0x10,
+
+    /* U+22 "\"" */
+    0x39, 0x93, 0x39, 0x92, 0x38, 0x91, 0x1, 0x10,
+
+    /* U+23 "#" */
+    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, 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 "%" */
+    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 "&" */
+    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 "'" */
+    0x67, 0x67, 0x66, 0x0,
+
+    /* U+28 "(" */
+    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 ")" */
+    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, 0xd0, 0x4, 0x1c, 0x4, 0x7d, 0xfe, 0x90,
+    0x6e, 0x80, 0x1d, 0x1d, 0x20, 0x10, 0x10,
+
+    /* U+2B "+" */
+    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 "," */
+    0x4c, 0x5b, 0xa5, 0x0,
+
+    /* U+2D "-" */
+    0xbf, 0xf1,
+
+    /* U+2E "." */
+    0x4, 0x1, 0xe1,
+
+    /* U+2F "/" */
+    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" */
+    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" */
+    0x5, 0xc4, 0xea, 0xe4, 0x10, 0xd4, 0x0, 0xd4,
+    0x0, 0xd4, 0x0, 0xd4, 0x0, 0xd4, 0x0, 0xd4,
+    0x0, 0xd4,
+
+    /* U+32 "2" */
+    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" */
+    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, 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" */
+    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, 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" */
+    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" */
+    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" */
+    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 ":" */
+    0x1e, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x40, 0x1e, 0x0,
+
+    /* U+3B ";" */
+    0x3d, 0x4, 0x0, 0x0, 0x0, 0x18, 0x3d, 0x79,
+    0x51,
+
+    /* U+3C "<" */
+    0x0, 0x2, 0x93, 0x2, 0x9f, 0x91, 0x6e, 0x71,
+    0x0, 0x4d, 0xa3, 0x0, 0x0, 0x6e, 0xc1, 0x0,
+    0x0, 0x62,
+
+    /* U+3D "=" */
+    0x1e, 0xee, 0xeb, 0x1, 0x11, 0x11, 0x0, 0x0,
+    0x0, 0x1e, 0xee, 0xeb, 0x1, 0x11, 0x11,
+
+    /* U+3E ">" */
+    0x3a, 0x20, 0x0, 0x8, 0xea, 0x30, 0x0, 0x6,
+    0xd9, 0x0, 0x3a, 0xe6, 0x1c, 0xe7, 0x0, 0x26,
+    0x0, 0x0,
+
+    /* U+3F "?" */
+    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, 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, 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" */
+    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, 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" */
+    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" */
+    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" */
+    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, 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" */
+    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" */
+    0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
+    0xe3,
+
+    /* U+4A "J" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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, 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" */
+    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, 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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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 "[" */
+    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 "\\" */
+    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 "]" */
+    0xef, 0x40, 0xd4, 0xd, 0x40, 0xd4, 0xd, 0x40,
+    0xd4, 0xd, 0x40, 0xd4, 0xd, 0x40, 0xd4, 0xd,
+    0x40, 0xd4, 0xef, 0x40,
+
+    /* U+5E "^" */
+    0x0, 0x70, 0x0, 0x4f, 0x40, 0xa, 0x9a, 0x1,
+    0xe0, 0xe1, 0x69, 0x9, 0x60,
+
+    /* U+5F "_" */
+    0xef, 0xff, 0xf5,
+
+    /* U+60 "`" */
+    0x4e, 0x0, 0x87,
+
+    /* U+61 "a" */
+    0x4, 0xde, 0xb0, 0x1f, 0x30, 0xb7, 0x2, 0x0,
+    0x7a, 0x5, 0xcd, 0xea, 0x3e, 0x10, 0x7a, 0x4e,
+    0x12, 0xca, 0x9, 0xfd, 0x9b,
+
+    /* U+62 "b" */
+    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" */
+    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, 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" */
+    0x3, 0xcf, 0xa0, 0xe, 0x50, 0xa8, 0x4c, 0x0,
+    0x3d, 0x6f, 0xff, 0xfe, 0x5b, 0x0, 0x0, 0x1e,
+    0x40, 0x47, 0x3, 0xcf, 0xc3,
+
+    /* U+66 "f" */
+    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" */
+    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" */
+    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" */
+    0x1e, 0x0, 0x30, 0x1f, 0x1, 0xf0, 0x1f, 0x1,
+    0xf0, 0x1f, 0x1, 0xf0, 0x1f, 0x0,
+
+    /* U+6A "j" */
+    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" */
+    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" */
+    0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
+    0x1f, 0x1f,
+
+    /* U+6D "m" */
+    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" */
+    0x2d, 0x8f, 0xd2, 0x2f, 0x60, 0x9a, 0x2e, 0x0,
+    0x4c, 0x2e, 0x0, 0x4d, 0x2e, 0x0, 0x4d, 0x2e,
+    0x0, 0x4d, 0x2e, 0x0, 0x4d,
+
+    /* U+6F "o" */
+    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" */
+    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" */
+    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" */
+    0x2e, 0xbd, 0x2f, 0x50, 0x2e, 0x0, 0x2e, 0x0,
+    0x2e, 0x0, 0x2e, 0x0, 0x2e, 0x0,
+
+    /* U+73 "s" */
+    0x6, 0xee, 0x90, 0x1f, 0x21, 0xc6, 0x1f, 0x40,
+    0x0, 0x4, 0xbe, 0x80, 0x12, 0x1, 0xb7, 0x4e,
+    0x10, 0xa7, 0x7, 0xee, 0xa0,
+
+    /* U+74 "t" */
+    0x6, 0x20, 0xc, 0x40, 0xdf, 0xe6, 0xc, 0x40,
+    0xc, 0x40, 0xc, 0x40, 0xc, 0x40, 0xc, 0x60,
+    0x5, 0xf7,
+
+    /* U+75 "u" */
+    0x3e, 0x0, 0x4c, 0x3e, 0x0, 0x4c, 0x3e, 0x0,
+    0x4c, 0x3e, 0x0, 0x4c, 0x2e, 0x0, 0x4c, 0x1f,
+    0x31, 0xbc, 0x7, 0xee, 0x9c,
+
+    /* U+76 "v" */
+    0xa7, 0x0, 0xa6, 0x5c, 0x0, 0xf1, 0xf, 0x14,
+    0xc0, 0xa, 0x59, 0x70, 0x5, 0xad, 0x20, 0x0,
+    0xfc, 0x0, 0x0, 0xa7, 0x0,
+
+    /* U+77 "w" */
+    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" */
+    0x6d, 0x0, 0xe5, 0xc, 0x67, 0xb0, 0x3, 0xee,
+    0x20, 0x0, 0xcb, 0x0, 0x4, 0xde, 0x20, 0xd,
+    0x56, 0xc0, 0x7c, 0x0, 0xd6,
+
+    /* U+79 "y" */
+    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" */
+    0x6f, 0xff, 0xf5, 0x0, 0x5, 0xd0, 0x0, 0x1e,
+    0x40, 0x0, 0xb9, 0x0, 0x6, 0xd0, 0x0, 0x1e,
+    0x30, 0x0, 0x7f, 0xff, 0xf8,
+
+    /* U+7B "{" */
+    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 "|" */
+    0xee, 0xee, 0xee, 0xee, 0xee, 0xe0,
+
+    /* U+7D "}" */
+    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, 0xd9, 0x0, 0x85, 0xe, 0x3a, 0x90, 0xc2,
+    0x2a, 0x0, 0xbf, 0x90, 0x0, 0x0, 0x0, 0x0,
+
+    /* U+F001 "" */
+    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 "" */
+    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 "" */
+    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, 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, 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 "" */
+    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, 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, 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, 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, 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 "" */
+    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, 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, 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, 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, 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 "" */
+    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 "" */
+    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 "" */
+    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 "" */
+    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 "" */
+    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 "" */
+    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, 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, 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 "" */
+    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, 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 "" */
+    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, 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, 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, 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 "" */
+    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, 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 "" */
+    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, 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 "" */
+    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 "" */
+    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, 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 "" */
+    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 "" */
+    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, 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 "" */
+    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, 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 "" */
+    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, 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 "" */
+    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 "" */
+    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 "" */
+    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 "" */
+    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 "" */
+    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, 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
+};
+
+
+/*---------------------
+ *  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 = 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}
+};
+
+/*---------------------
+ *  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 = {
+    .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/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_12_subpx.c 
b/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_12_subpx.c
new file mode 100755
index 0000000..4565b99
--- /dev/null
+++ b/scriptsrcs/lvgl/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/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_16.c 
b/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_16.c
new file mode 100755
index 0000000..a52b2c0
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_16.c
@@ -0,0 +1,2116 @@
+#include "../../lvgl.h"
+
+/*******************************************************************************
+ * Size: 16 px
+ * Bpp: 4
+ * 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
+#define LV_FONT_ROBOTO_16 1
+#endif
+
+#if LV_FONT_ROBOTO_16
+
+/*-----------------
+ *    BITMAPS
+ *----------------*/
+
+/*Store the image of the glyphs*/
+static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
+    /* U+20 " " */
+
+    /* U+21 "!" */
+    0xad, 0xac, 0xac, 0xac, 0xac, 0xac, 0x9b, 0x9b,
+    0x56, 0x0, 0x57, 0x8c,
+
+    /* U+22 "\"" */
+    0xe2, 0xd4, 0xe2, 0xd3, 0xe0, 0xd2, 0xe0, 0xd1,
+    0x0, 0x0,
+
+    /* U+23 "#" */
+    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, 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 "%" */
+    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, 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 "'" */
+    0x3f, 0x3f, 0x3e, 0x2c,
+
+    /* U+28 "(" */
+    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 ")" */
+    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, 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, 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 "," */
+    0xf, 0x60, 0xf5, 0x4f, 0x28, 0x90, 0x0, 0x0,
+
+    /* U+2D "-" */
+    0x0, 0x0, 0xb, 0xff, 0xf1, 0x23, 0x33, 0x0,
+
+    /* U+2E "." */
+    0x88, 0xab,
+
+    /* U+2F "/" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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, 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" */
+    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, 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" */
+    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, 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, 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 ":" */
+    0xba, 0x87, 0x0, 0x0, 0x0, 0x0, 0x0, 0x97,
+    0xba,
+
+    /* U+3B ";" */
+    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, 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 "=" */
+    0x1, 0x11, 0x11, 0xd, 0xff, 0xff, 0xfb, 0x34,
+    0x44, 0x44, 0x20, 0x11, 0x11, 0x10, 0xdf, 0xff,
+    0xff, 0xb3, 0x33, 0x33, 0x32,
+
+    /* U+3E ">" */
+    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 "?" */
+    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, 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, 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" */
+    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, 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" */
+    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" */
+    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" */
+    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, 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" */
+    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" */
+    0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
+    0x9f, 0x9f, 0x9f, 0x9f,
+
+    /* U+4A "J" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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, 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" */
+    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, 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" */
+    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, 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" */
+    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,
+    0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xf8,
+    0x0, 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0,
+    0x0, 0xf8, 0x0, 0x0,
+
+    /* U+55 "U" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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 "[" */
+    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 "\\" */
+    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 "]" */
+    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, 0x5f, 0x0, 0x0, 0xb, 0xf6, 0x0, 0x2,
+    0xfa, 0xc0, 0x0, 0x8c, 0x2f, 0x20, 0xe, 0x60,
+    0xb9, 0x4, 0xf1, 0x5, 0xe0,
+
+    /* U+5F "_" */
+    0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf3,
+    0x33, 0x33, 0x33, 0x30,
+
+    /* U+60 "`" */
+    0x28, 0x20, 0xb, 0xc0, 0x1, 0xd6,
+
+    /* U+61 "a" */
+    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" */
+    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, 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, 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, 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, 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, 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" */
+    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" */
+    0xb9, 0x76, 0x0, 0xca, 0xca, 0xca, 0xca, 0xca,
+    0xca, 0xca, 0xca, 0xca,
+
+    /* U+6A "j" */
+    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" */
+    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" */
+    0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
+    0xca, 0xca, 0xca, 0xca,
+
+    /* U+6D "m" */
+    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" */
+    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, 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" */
+    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, 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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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, 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 "|" */
+    0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
+    0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
+
+    /* U+7D "}" */
+    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 "~" */
+    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, 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 "" */
+    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 "" */
+    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,
+    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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 "" */
+    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 "" */
+    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 "" */
+    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 "" */
+    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 "" */
+    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 "" */
+    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, 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, 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 "" */
+    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, 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 "" */
+    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, 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, 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, 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 "" */
+    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, 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 "" */
+    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, 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 "" */
+    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 "" */
+    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, 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 "" */
+    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 "" */
+    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, 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 "" */
+    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, 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 "" */
+    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, 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 "" */
+    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 "" */
+    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 "" */
+    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 "" */
+    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 "" */
+    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, 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
+};
+
+
+/*---------------------
+ *  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 = 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}
+};
+
+/*---------------------
+ *  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, -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,
+};
+
+/*--------------------
+ *  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_16 = {
+    .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 = 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/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_22.c 
b/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_22.c
new file mode 100755
index 0000000..f7bdac0
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_22.c
@@ -0,0 +1,3224 @@
+#include "../../lvgl.h"
+
+/*******************************************************************************
+ * Size: 22 px
+ * Bpp: 4
+ * 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
+#define LV_FONT_ROBOTO_22 1
+#endif
+
+#if LV_FONT_ROBOTO_22
+
+/*-----------------
+ *    BITMAPS
+ *----------------*/
+
+/*Store the image of the glyphs*/
+static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
+    /* U+20 " " */
+
+    /* U+21 "!" */
+    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 "\"" */
+    0x8f, 0xa, 0xe8, 0xf0, 0xad, 0x8e, 0xa, 0xc8,
+    0xc0, 0xab, 0x8b, 0xa, 0x93, 0x40, 0x33,
+
+    /* U+23 "#" */
+    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, 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 "%" */
+    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, 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 "'" */
+    0xeb, 0xeb, 0xea, 0xe9, 0xe8, 0x31,
+
+    /* U+28 "(" */
+    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 ")" */
+    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, 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, 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 "," */
+    0xa, 0xf5, 0xa, 0xf4, 0xb, 0xf3, 0x1f, 0xd0,
+    0x7f, 0x50, 0x5, 0x0,
+
+    /* U+2D "-" */
+    0x6a, 0xaa, 0xa6, 0x9f, 0xff, 0xfa,
+
+    /* U+2E "." */
+    0x5, 0x20, 0x5f, 0xe0, 0x3e, 0xb0,
+
+    /* U+2F "/" */
+    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, 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" */
+    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, 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, 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, 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" */
+    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, 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" */
+    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, 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, 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 ":" */
+    0x4f, 0x97, 0xfd, 0x5, 0x20, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x52, 0x7f,
+    0xd4, 0xf9,
+
+    /* U+3B ";" */
+    0x8, 0xf5, 0xb, 0xf9, 0x1, 0x50, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x4, 0x94, 0x8, 0xf7, 0x8, 0xf6,
+    0xb, 0xf2, 0x3f, 0xb0, 0x3b, 0x10,
+
+    /* U+3C "<" */
+    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 "=" */
+    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 ">" */
+    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, 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, 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, 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" */
+    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, 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" */
+    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" */
+    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" */
+    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, 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" */
+    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" */
+    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, 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" */
+    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" */
+    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" */
+    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" */
+    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, 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" */
+    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, 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" */
+    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, 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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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 "[" */
+    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 "\\" */
+    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 "]" */
+    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, 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 "_" */
+    0x9a, 0xaa, 0xaa, 0xaa, 0xa9, 0xff, 0xff, 0xff,
+    0xff, 0xfe,
+
+    /* U+60 "`" */
+    0x1d, 0xf5, 0x0, 0x1, 0xef, 0x10, 0x0, 0x2e,
+    0xb0,
+
+    /* U+61 "a" */
+    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" */
+    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, 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, 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, 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, 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, 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" */
+    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" */
+    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, 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" */
+    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" */
+    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" */
+    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" */
+    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, 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" */
+    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, 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" */
+    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, 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, 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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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, 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, 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, 0xc, 0xf3, 0x0, 0x0, 0x6, 0xfa, 0x0,
+    0x0, 0x0, 0xaf, 0xb1, 0x0, 0x0, 0x5, 0xb0,
+
+    /* U+7C "|" */
+    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 "}" */
+    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 "~" */
+    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,
+    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 "" */
+    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 "" */
+    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, 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,
+    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, 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 "" */
+    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, 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, 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, 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+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, 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, 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,
+    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,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 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, 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 "" */
+    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, 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 "" */
+    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,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 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+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,
+    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,
+    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,
+    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+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, 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,
+    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, 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 "" */
+    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, 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 "" */
+    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, 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 "" */
+    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, 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 "" */
+    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,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    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, 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, 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, 0x27, 0x9f, 0xff, 0xf7, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x2f, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0,
+
+    /* U+F293 "" */
+    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
+};
+
+
+/*---------------------
+ *  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 = 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}
+};
+
+/*---------------------
+ *  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, -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,
+};
+
+/*--------------------
+ *  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_22 = {
+    .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 = 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/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_28.c 
b/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_28.c
new file mode 100755
index 0000000..f3e58bb
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_28.c
@@ -0,0 +1,4609 @@
+#include "../../lvgl.h"
+
+/*******************************************************************************
+ * Size: 28 px
+ * Bpp: 4
+ * 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
+#define LV_FONT_ROBOTO_28 1
+#endif
+
+#if LV_FONT_ROBOTO_28
+
+/*-----------------
+ *    BITMAPS
+ *----------------*/
+
+/*Store the image of the glyphs*/
+static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
+    /* U+20 " " */
+
+    /* U+21 "!" */
+    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 "\"" */
+    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, 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, 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, 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, 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 "'" */
+    0x9f, 0x79, 0xf7, 0x9f, 0x69, 0xf5, 0x9f, 0x49,
+    0xf3, 0x48, 0x10,
+
+    /* U+28 "(" */
+    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 ")" */
+    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, 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, 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 "," */
+    0x4, 0xff, 0x30, 0x4f, 0xf3, 0x4, 0xff, 0x20,
+    0x7f, 0xf0, 0xc, 0xf9, 0x5, 0xff, 0x10, 0x1b,
+    0x40, 0x0,
+
+    /* U+2D "-" */
+    0x1, 0x11, 0x11, 0x10, 0x8f, 0xff, 0xff, 0xf2,
+    0x8f, 0xff, 0xff, 0xf2,
+
+    /* U+2E "." */
+    0x9, 0xfa, 0x0, 0xff, 0xf1, 0x9, 0xfa, 0x0,
+
+    /* U+2F "/" */
+    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, 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, 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, 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, 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, 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" */
+    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, 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" */
+    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, 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, 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, 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 ":" */
+    0xb, 0xf8, 0x1f, 0xff, 0xb, 0xf8, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xb, 0xf8, 0x2f, 0xff, 0xb, 0xf8,
+
+    /* U+3B ";" */
+    0x2, 0xde, 0x40, 0x7f, 0xf9, 0x2, 0xde, 0x40,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 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, 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 "=" */
+    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 ">" */
+    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, 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, 0x0, 0x0,
+    0xac, 0x40, 0x0, 0x0, 0x0, 0x3, 0xff, 0xb0,
+    0x0, 0x0, 0x0, 0x0, 0xcf, 0x60, 0x0, 0x0,
+
+    /* U+40 "@" */
+    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, 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,
+    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" */
+    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, 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" */
+    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" */
+    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" */
+    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, 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" */
+    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" */
+    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, 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" */
+    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" */
+    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" */
+    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" */
+    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, 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" */
+    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, 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" */
+    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, 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" */
+    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,
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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 "[" */
+    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 "\\" */
+    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 "]" */
+    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, 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 "_" */
+    0x1, 0x11, 0x11, 0x11, 0x11, 0x11, 0xf, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0x90,
+
+    /* U+60 "`" */
+    0xc, 0xff, 0x20, 0x0, 0x1d, 0xfc, 0x0, 0x0,
+    0x1e, 0xf7, 0x0, 0x0, 0x2f, 0xf2,
+
+    /* U+61 "a" */
+    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" */
+    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, 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, 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,
+    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, 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, 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, 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" */
+    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" */
+    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, 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" */
+    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" */
+    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" */
+    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" */
+    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, 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, 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" */
+    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, 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, 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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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" */
+    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, 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 "|" */
+    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 "}" */
+    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, 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, 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,
+    0xff, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    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 "" */
+    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 "" */
+    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,
+    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, 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,
+    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,
+    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,
+    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, 0x0, 0x0, 0x5, 0xe9, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 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, 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, 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, 0x0, 0x69, 0x96,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x2, 0xff, 0xff, 0x20, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 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, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    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, 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, 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, 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, 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, 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, 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,
+    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, 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, 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,
+    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, 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, 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,
+    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, 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, 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, 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,
+    0x0, 0x0, 0x0, 0x18, 0x50, 0x0, 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, 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, 0xb1, 0xbf, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0x93, 0x27, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    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,
+    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,
+    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 "" */
+    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+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, 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, 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, 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,
+    0x8f, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x2f, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    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,
+    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, 0xff, 0xff, 0xff, 0xf7, 0xe, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    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, 0x6, 0xa2, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 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, 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,
+    0x0, 0x0, 0x6, 0xa2, 0x0, 0x0,
+
+    /* U+F077 "" */
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xb2, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 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 "" */
+    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, 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 "" */
+    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, 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, 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,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 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, 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, 0x0, 0x3, 0x10,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x7f, 0xe2, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 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,
+    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, 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, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 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 "" */
+    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, 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 "" */
+    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,
+    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, 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,
+    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 "" */
+    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, 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, 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, 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, 0x0, 0x0, 0x0, 0x5, 0x72, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x6, 0xef, 0xff, 0x40, 0x0, 0x0,
+    0x0, 0x0, 0x0, 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 "" */
+    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,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 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, 0xff, 0xfd, 0x14, 0x44,
+    0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
+    0x10,
+
+    /* 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, 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 "" */
+    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,
+    0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    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, 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, 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, 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+F241 "" */
+    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,
+    0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    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, 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, 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, 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+F242 "" */
+    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,
+    0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    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, 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, 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 "" */
+    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,
+    0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    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, 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, 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 "" */
+    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,
+    0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    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, 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, 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, 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
+};
+
+
+/*---------------------
+ *  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 = 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}
+};
+
+/*---------------------
+ *  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 = 4,
+    .kern_classes = 1,
+    .bitmap_format = 0
+};
+
+
+/*-----------------
+ *  PUBLIC FONT
+ *----------------*/
+
+/*Initialize a public general font descriptor*/
+lv_font_t lv_font_roboto_28 = {
+    .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*/
+
diff --git a/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_28_compressed.c 
b/scriptsrcs/lvgl/src/lv_font/lv_font_roboto_28_compressed.c
new file mode 100755
index 0000000..92e7147
--- /dev/null
+++ b/scriptsrcs/lvgl/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/scriptsrcs/lvgl/src/lv_font/lv_font_unscii_8.c 
b/scriptsrcs/lvgl/src/lv_font/lv_font_unscii_8.c
new file mode 100755
index 0000000..1b96823
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_font/lv_font_unscii_8.c
@@ -0,0 +1,462 @@
+#include "../../lvgl.h"
+
+/*******************************************************************************
+ * Size: 8 px
+ * Bpp: 1
+ * Opts: 
+ 
******************************************************************************/
+
+#ifndef LV_FONT_UNSCII_8
+#define LV_FONT_UNSCII_8 1
+#endif
+
+#if LV_FONT_UNSCII_8
+
+/*-----------------
+ *    BITMAPS
+ *----------------*/
+
+/*Store the image of the glyphs*/
+static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
+    /* U+20 " " */
+
+    /* U+21 "!" */
+    0xf2,
+
+    /* U+22 "\"" */
+    0x99, 0x90,
+
+    /* U+23 "#" */
+    0x49, 0x2f, 0xd2, 0xfd, 0x24, 0x80,
+
+    /* U+24 "$" */
+    0x23, 0xe8, 0xe2, 0xf8, 0x80,
+
+    /* U+25 "%" */
+    0xc7, 0x21, 0x8, 0x4e, 0x30,
+
+    /* U+26 "&" */
+    0x62, 0x49, 0x18, 0x96, 0x27, 0x40,
+
+    /* U+27 "'" */
+    0x2a, 0x0,
+
+    /* U+28 "(" */
+    0x2a, 0x48, 0x88,
+
+    /* U+29 ")" */
+    0x88, 0x92, 0xa0,
+
+    /* U+2A "*" */
+    0x25, 0x5c, 0x47, 0x54, 0x80,
+
+    /* U+2B "+" */
+    0x21, 0x3e, 0x42, 0x0,
+
+    /* U+2C "," */
+    0x58,
+
+    /* U+2D "-" */
+    0xf8,
+
+    /* U+2E "." */
+    0x80,
+
+    /* U+2F "/" */
+    0x2, 0x8, 0x20, 0x82, 0x8, 0x20, 0x0,
+
+    /* U+30 "0" */
+    0x74, 0x67, 0x5c, 0xc5, 0xc0,
+
+    /* U+31 "1" */
+    0x23, 0x28, 0x42, 0x13, 0xe0,
+
+    /* U+32 "2" */
+    0x74, 0x42, 0x26, 0x43, 0xe0,
+
+    /* U+33 "3" */
+    0x74, 0x42, 0x60, 0xc5, 0xc0,
+
+    /* U+34 "4" */
+    0x11, 0x95, 0x2f, 0x88, 0x40,
+
+    /* U+35 "5" */
+    0xfc, 0x3c, 0x10, 0xc5, 0xc0,
+
+    /* U+36 "6" */
+    0x3a, 0x21, 0xe8, 0xc5, 0xc0,
+
+    /* U+37 "7" */
+    0xf8, 0x44, 0x44, 0x21, 0x0,
+
+    /* U+38 "8" */
+    0x74, 0x62, 0xe8, 0xc5, 0xc0,
+
+    /* U+39 "9" */
+    0x74, 0x62, 0xf0, 0x8b, 0x80,
+
+    /* U+3A ":" */
+    0x90,
+
+    /* U+3B ";" */
+    0x41, 0x60,
+
+    /* U+3C "<" */
+    0x12, 0x48, 0x42, 0x10,
+
+    /* U+3D "=" */
+    0xf8, 0x3e,
+
+    /* U+3E ">" */
+    0x84, 0x21, 0x24, 0x80,
+
+    /* U+3F "?" */
+    0x7a, 0x10, 0x84, 0x10, 0x1, 0x0,
+
+    /* U+40 "@" */
+    0x7a, 0x19, 0x6b, 0x9a, 0x7, 0x80,
+
+    /* U+41 "A" */
+    0x31, 0x28, 0x7f, 0x86, 0x18, 0x40,
+
+    /* U+42 "B" */
+    0xfa, 0x18, 0x7e, 0x86, 0x1f, 0x80,
+
+    /* U+43 "C" */
+    0x7a, 0x18, 0x20, 0x82, 0x17, 0x80,
+
+    /* U+44 "D" */
+    0xf2, 0x28, 0x61, 0x86, 0x2f, 0x0,
+
+    /* U+45 "E" */
+    0xfe, 0x8, 0x3c, 0x82, 0xf, 0xc0,
+
+    /* U+46 "F" */
+    0xfe, 0x8, 0x3c, 0x82, 0x8, 0x0,
+
+    /* U+47 "G" */
+    0x7a, 0x18, 0x27, 0x86, 0x17, 0x80,
+
+    /* U+48 "H" */
+    0x86, 0x18, 0x7f, 0x86, 0x18, 0x40,
+
+    /* U+49 "I" */
+    0xe9, 0x24, 0xb8,
+
+    /* U+4A "J" */
+    0x8, 0x42, 0x10, 0xc5, 0xc0,
+
+    /* U+4B "K" */
+    0x86, 0x29, 0x38, 0x92, 0x28, 0x40,
+
+    /* U+4C "L" */
+    0x82, 0x8, 0x20, 0x82, 0xf, 0xc0,
+
+    /* U+4D "M" */
+    0x87, 0x3b, 0x61, 0x86, 0x18, 0x40,
+
+    /* U+4E "N" */
+    0x87, 0x1a, 0x65, 0x8e, 0x18, 0x40,
+
+    /* U+4F "O" */
+    0x7a, 0x18, 0x61, 0x86, 0x17, 0x80,
+
+    /* U+50 "P" */
+    0xfa, 0x18, 0x7e, 0x82, 0x8, 0x0,
+
+    /* U+51 "Q" */
+    0x7a, 0x18, 0x61, 0x96, 0x27, 0x40,
+
+    /* U+52 "R" */
+    0xfa, 0x18, 0x7e, 0x92, 0x28, 0x40,
+
+    /* U+53 "S" */
+    0x7a, 0x18, 0x1e, 0x6, 0x17, 0x80,
+
+    /* U+54 "T" */
+    0xf9, 0x8, 0x42, 0x10, 0x80,
+
+    /* U+55 "U" */
+    0x86, 0x18, 0x61, 0x86, 0x17, 0x80,
+
+    /* U+56 "V" */
+    0x86, 0x18, 0x61, 0x85, 0x23, 0x0,
+
+    /* U+57 "W" */
+    0x86, 0x18, 0x61, 0xb7, 0x38, 0x40,
+
+    /* U+58 "X" */
+    0x86, 0x14, 0x8c, 0x4a, 0x18, 0x40,
+
+    /* U+59 "Y" */
+    0x8c, 0x62, 0xe2, 0x10, 0x80,
+
+    /* U+5A "Z" */
+    0xf8, 0x44, 0x44, 0x43, 0xe0,
+
+    /* U+5B "[" */
+    0xf2, 0x49, 0x38,
+
+    /* U+5C "\\" */
+    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+
+    /* U+5D "]" */
+    0xe4, 0x92, 0x78,
+
+    /* U+5E "^" */
+    0x22, 0xa2,
+
+    /* U+5F "_" */
+    0xf8,
+
+    /* U+60 "`" */
+    0x88, 0x80,
+
+    /* U+61 "a" */
+    0x70, 0x5f, 0x17, 0x80,
+
+    /* U+62 "b" */
+    0x84, 0x3d, 0x18, 0xc7, 0xc0,
+
+    /* U+63 "c" */
+    0x74, 0x61, 0x17, 0x0,
+
+    /* U+64 "d" */
+    0x8, 0x5f, 0x18, 0xc5, 0xe0,
+
+    /* U+65 "e" */
+    0x74, 0x7f, 0x7, 0x0,
+
+    /* U+66 "f" */
+    0x18, 0x92, 0x3e, 0x20, 0x82, 0x0,
+
+    /* U+67 "g" */
+    0x7c, 0x62, 0xf0, 0xb8,
+
+    /* U+68 "h" */
+    0x84, 0x3d, 0x18, 0xc6, 0x20,
+
+    /* U+69 "i" */
+    0x43, 0x24, 0xb8,
+
+    /* U+6A "j" */
+    0x10, 0x31, 0x11, 0x96,
+
+    /* U+6B "k" */
+    0x84, 0x23, 0x2e, 0x4a, 0x20,
+
+    /* U+6C "l" */
+    0xc9, 0x24, 0xb8,
+
+    /* U+6D "m" */
+    0xd5, 0x6b, 0x5a, 0x80,
+
+    /* U+6E "n" */
+    0xf4, 0x63, 0x18, 0x80,
+
+    /* U+6F "o" */
+    0x74, 0x63, 0x17, 0x0,
+
+    /* U+70 "p" */
+    0xf4, 0x63, 0xe8, 0x40,
+
+    /* U+71 "q" */
+    0x7c, 0x62, 0xf0, 0x84,
+
+    /* U+72 "r" */
+    0xbe, 0x21, 0x8, 0x0,
+
+    /* U+73 "s" */
+    0x7c, 0x1c, 0x1f, 0x0,
+
+    /* U+74 "t" */
+    0x42, 0x3c, 0x84, 0x24, 0xc0,
+
+    /* U+75 "u" */
+    0x8c, 0x63, 0x17, 0x0,
+
+    /* U+76 "v" */
+    0x8c, 0x62, 0xa2, 0x0,
+
+    /* U+77 "w" */
+    0x8d, 0x6b, 0x55, 0x0,
+
+    /* U+78 "x" */
+    0x8a, 0x88, 0xa8, 0x80,
+
+    /* U+79 "y" */
+    0x8c, 0x62, 0xf0, 0xb8,
+
+    /* U+7A "z" */
+    0xf8, 0x88, 0x8f, 0x80,
+
+    /* U+7B "{" */
+    0x34, 0x48, 0x44, 0x30,
+
+    /* U+7C "|" */
+    0xff,
+
+    /* U+7D "}" */
+    0xc2, 0x21, 0x22, 0xc0,
+
+    /* U+7E "~" */
+    0x45, 0x44,
+
+    /* U+7F "" */
+    0xc1, 0x42, 0xbd, 0x2c, 0x40, 0x81, 0x0
+};
+
+
+/*---------------------
+ *  GLYPH DESCRIPTION
+ *--------------------*/
+
+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},
+    {.bitmap_index = 1, .adv_w = 128, .box_h = 3, .box_w = 4, .ofs_x = 2, 
.ofs_y = 3},
+    {.bitmap_index = 3, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 9, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 14, .adv_w = 128, .box_h = 6, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 19, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 25, .adv_w = 128, .box_h = 3, .box_w = 3, .ofs_x = 2, 
.ofs_y = 3},
+    {.bitmap_index = 27, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, 
.ofs_y = -1},
+    {.bitmap_index = 30, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, 
.ofs_y = -1},
+    {.bitmap_index = 33, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 38, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = 0},
+    {.bitmap_index = 42, .adv_w = 128, .box_h = 3, .box_w = 2, .ofs_x = 3, 
.ofs_y = -2},
+    {.bitmap_index = 43, .adv_w = 128, .box_h = 1, .box_w = 5, .ofs_x = 1, 
.ofs_y = 1},
+    {.bitmap_index = 44, .adv_w = 128, .box_h = 1, .box_w = 1, .ofs_x = 3, 
.ofs_y = -1},
+    {.bitmap_index = 45, .adv_w = 128, .box_h = 7, .box_w = 7, .ofs_x = 0, 
.ofs_y = -1},
+    {.bitmap_index = 52, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 57, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 62, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 67, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 72, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 77, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 82, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 87, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 92, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 97, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 102, .adv_w = 128, .box_h = 4, .box_w = 1, .ofs_x = 3, 
.ofs_y = 0},
+    {.bitmap_index = 103, .adv_w = 128, .box_h = 6, .box_w = 2, .ofs_x = 2, 
.ofs_y = -2},
+    {.bitmap_index = 105, .adv_w = 128, .box_h = 7, .box_w = 4, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 109, .adv_w = 128, .box_h = 3, .box_w = 5, .ofs_x = 1, 
.ofs_y = 1},
+    {.bitmap_index = 111, .adv_w = 128, .box_h = 7, .box_w = 4, .ofs_x = 2, 
.ofs_y = -1},
+    {.bitmap_index = 115, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 121, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 127, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 133, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 139, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 145, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 151, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 157, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 163, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 169, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 175, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, 
.ofs_y = -1},
+    {.bitmap_index = 178, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 183, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 189, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 195, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 201, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 207, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 213, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 219, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 225, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 231, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 237, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 242, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 248, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 254, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 260, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 266, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 271, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 276, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, 
.ofs_y = -1},
+    {.bitmap_index = 279, .adv_w = 128, .box_h = 7, .box_w = 7, .ofs_x = 0, 
.ofs_y = -1},
+    {.bitmap_index = 286, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, 
.ofs_y = -1},
+    {.bitmap_index = 289, .adv_w = 128, .box_h = 3, .box_w = 5, .ofs_x = 1, 
.ofs_y = 3},
+    {.bitmap_index = 291, .adv_w = 128, .box_h = 1, .box_w = 5, .ofs_x = 1, 
.ofs_y = -2},
+    {.bitmap_index = 292, .adv_w = 128, .box_h = 3, .box_w = 3, .ofs_x = 2, 
.ofs_y = 3},
+    {.bitmap_index = 294, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 298, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 303, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 307, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 312, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 316, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 322, .adv_w = 128, .box_h = 6, .box_w = 5, .ofs_x = 1, 
.ofs_y = -2},
+    {.bitmap_index = 326, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 331, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, 
.ofs_y = -1},
+    {.bitmap_index = 334, .adv_w = 128, .box_h = 8, .box_w = 4, .ofs_x = 2, 
.ofs_y = -2},
+    {.bitmap_index = 338, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 343, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, 
.ofs_y = -1},
+    {.bitmap_index = 346, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 350, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 354, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 358, .adv_w = 128, .box_h = 6, .box_w = 5, .ofs_x = 1, 
.ofs_y = -2},
+    {.bitmap_index = 362, .adv_w = 128, .box_h = 6, .box_w = 5, .ofs_x = 1, 
.ofs_y = -2},
+    {.bitmap_index = 366, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 370, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 374, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 379, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 383, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 387, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 391, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 395, .adv_w = 128, .box_h = 6, .box_w = 5, .ofs_x = 1, 
.ofs_y = -2},
+    {.bitmap_index = 399, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 403, .adv_w = 128, .box_h = 7, .box_w = 4, .ofs_x = 1, 
.ofs_y = -1},
+    {.bitmap_index = 407, .adv_w = 128, .box_h = 8, .box_w = 1, .ofs_x = 3, 
.ofs_y = -2},
+    {.bitmap_index = 408, .adv_w = 128, .box_h = 7, .box_w = 4, .ofs_x = 2, 
.ofs_y = -1},
+    {.bitmap_index = 412, .adv_w = 128, .box_h = 3, .box_w = 5, .ofs_x = 1, 
.ofs_y = 3},
+    {.bitmap_index = 414, .adv_w = 128, .box_h = 7, .box_w = 7, .ofs_x = 0, 
.ofs_y = -1}
+};
+
+/*---------------------
+ *  CHARACTER MAPPING
+ *--------------------*/
+
+
+
+/*Collect the unicode lists and glyph_id offsets*/
+static const lv_font_fmt_txt_cmap_t cmaps[] =
+{
+    {
+        .range_start = 32, .range_length = 96, .type = 
LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY,
+        .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = NULL, 
.list_length = 0
+    }
+};
+
+
+
+/*--------------------
+ *  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,
+    .cmap_num = 1,
+    .bpp = 1,
+
+    .kern_scale = 0,
+    .kern_dsc = NULL,
+    .kern_classes = 0,
+};
+
+
+/*-----------------
+ *  PUBLIC FONT
+ *----------------*/
+
+/*Initialize a public general font descriptor*/
+lv_font_t lv_font_unscii_8 = {
+    .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 = 8,          /*The maximum line height required by the font*/
+    .base_line = 2,             /*Baseline measured from the bottom of the 
line*/
+};
+
+#endif /*#if LV_FONT_UNSCII_8*/
diff --git a/scriptsrcs/lvgl/src/lv_font/lv_symbol_def.h 
b/scriptsrcs/lvgl/src/lv_font/lv_symbol_def.h
new file mode 100755
index 0000000..6fe823b
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_font/lv_symbol_def.h
@@ -0,0 +1,152 @@
+#ifndef LV_SYMBOL_DEF_H
+#define LV_SYMBOL_DEF_H
+/* clang-format off */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#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" /*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"
+
+/*
+ * The following list is generated using
+ * cat src/lv_misc/lv_symbol_def.h | sed -E -n 
's/^#define\s+(LV_SYMBOL_\w+).*"$/    _LV_STR_\1,/p'
+ */
+enum {
+    _LV_STR_SYMBOL_AUDIO,
+    _LV_STR_SYMBOL_VIDEO,
+    _LV_STR_SYMBOL_LIST,
+    _LV_STR_SYMBOL_OK,
+    _LV_STR_SYMBOL_CLOSE,
+    _LV_STR_SYMBOL_POWER,
+    _LV_STR_SYMBOL_SETTINGS,
+    _LV_STR_SYMBOL_TRASH,
+    _LV_STR_SYMBOL_HOME,
+    _LV_STR_SYMBOL_DOWNLOAD,
+    _LV_STR_SYMBOL_DRIVE,
+    _LV_STR_SYMBOL_REFRESH,
+    _LV_STR_SYMBOL_MUTE,
+    _LV_STR_SYMBOL_VOLUME_MID,
+    _LV_STR_SYMBOL_VOLUME_MAX,
+    _LV_STR_SYMBOL_IMAGE,
+    _LV_STR_SYMBOL_EDIT,
+    _LV_STR_SYMBOL_PREV,
+    _LV_STR_SYMBOL_PLAY,
+    _LV_STR_SYMBOL_PAUSE,
+    _LV_STR_SYMBOL_STOP,
+    _LV_STR_SYMBOL_NEXT,
+    _LV_STR_SYMBOL_EJECT,
+    _LV_STR_SYMBOL_LEFT,
+    _LV_STR_SYMBOL_RIGHT,
+    _LV_STR_SYMBOL_PLUS,
+    _LV_STR_SYMBOL_MINUS,
+    _LV_STR_SYMBOL_WARNING,
+    _LV_STR_SYMBOL_SHUFFLE,
+    _LV_STR_SYMBOL_UP,
+    _LV_STR_SYMBOL_DOWN,
+    _LV_STR_SYMBOL_LOOP,
+    _LV_STR_SYMBOL_DIRECTORY,
+    _LV_STR_SYMBOL_UPLOAD,
+    _LV_STR_SYMBOL_CALL,
+    _LV_STR_SYMBOL_CUT,
+    _LV_STR_SYMBOL_COPY,
+    _LV_STR_SYMBOL_SAVE,
+    _LV_STR_SYMBOL_CHARGE,
+    _LV_STR_SYMBOL_BELL,
+    _LV_STR_SYMBOL_KEYBOARD,
+    _LV_STR_SYMBOL_GPS,
+    _LV_STR_SYMBOL_FILE,
+    _LV_STR_SYMBOL_WIFI,
+    _LV_STR_SYMBOL_BATTERY_FULL,
+    _LV_STR_SYMBOL_BATTERY_3,
+    _LV_STR_SYMBOL_BATTERY_2,
+    _LV_STR_SYMBOL_BATTERY_1,
+    _LV_STR_SYMBOL_BATTERY_EMPTY,
+    _LV_STR_SYMBOL_BLUETOOTH,
+    _LV_STR_SYMBOL_DUMMY,
+};
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /*LV_SYMBOL_DEF_H*/
+
+
+
+
+
diff --git a/scriptsrcs/lvgl/src/lv_hal/lv_hal.h 
b/scriptsrcs/lvgl/src/lv_hal/lv_hal.h
new file mode 100755
index 0000000..a5e0a1d
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_hal/lv_hal.h
@@ -0,0 +1,40 @@
+/**
+ * @file lv_hal.h
+ *
+ */
+
+#ifndef LV_HAL_H
+#define LV_HAL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_hal_disp.h"
+#include "lv_hal_indev.h"
+#include "lv_hal_tick.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_hal/lv_hal.mk 
b/scriptsrcs/lvgl/src/lv_hal/lv_hal.mk
new file mode 100755
index 0000000..05af078
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_hal/lv_hal.mk
@@ -0,0 +1,8 @@
+CSRCS += lv_hal_disp.c
+CSRCS += lv_hal_indev.c
+CSRCS += lv_hal_tick.c
+
+DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_hal
+VPATH += :$(LVGL_DIR)/lvgl/src/lv_hal
+
+CFLAGS += "-I$(LVGL_DIR)/lvgl/src/lv_hal"
diff --git a/scriptsrcs/lvgl/src/lv_hal/lv_hal_disp.c 
b/scriptsrcs/lvgl/src/lv_hal/lv_hal_disp.c
new file mode 100755
index 0000000..c2d1f13
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_hal/lv_hal_disp.c
@@ -0,0 +1,358 @@
+
+/**
+ * @file hal_disp.c
+ *
+ * @description HAL layer for display driver
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stdint.h>
+#include <stddef.h>
+#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"
+#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 lv_disp_t * disp_def;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize a display driver with default values.
+ * It is used to surly have known values in the fields ant not memory junk.
+ * After it you can set the fields.
+ * @param driver pointer to driver variable to initialize
+ */
+void lv_disp_drv_init(lv_disp_drv_t * driver)
+{
+    memset(driver, 0, sizeof(lv_disp_drv_t));
+
+    driver->flush_cb         = NULL;
+    driver->hor_res          = LV_HOR_RES_MAX;
+    driver->ver_res          = LV_VER_RES_MAX;
+    driver->buffer           = NULL;
+    driver->rotated          = 0;
+    driver->color_chroma_key = LV_COLOR_TRANSP;
+
+#if LV_ANTIALIAS
+    driver->antialiasing = true;
+#endif
+
+#if LV_COLOR_SCREEN_TRANSP
+    driver->screen_transp = 1;
+#endif
+
+#if LV_USE_GPU
+    driver->gpu_blend_cb = NULL;
+    driver->gpu_fill_cb  = NULL;
+#endif
+
+#if LV_USE_USER_DATA
+    driver->user_data = NULL;
+#endif
+
+    driver->set_px_cb = NULL;
+}
+
+/**
+ * Initialize a display buffer
+ * @param disp_buf pointer `lv_disp_buf_t` variable to initialize
+ * @param buf1 A buffer to be used by LittlevGL to draw the image.
+ *             Always has to specified and can't be NULL.
+ *             Can be an array allocated by the user. E.g. `static lv_color_t 
disp_buf1[1024 * 10]`
+ *             Or a memory address e.g. in external SRAM
+ * @param buf2 Optionally specify a second buffer to make image rendering and 
image flushing
+ *             (sending to the display) parallel.
+ *             In the `disp_drv->flush` you should use DMA or similar hardware 
to send
+ *             the image to the display in the background.
+ *             It lets LittlevGL to render next frame into the other buffer 
while previous is being
+ * sent. Set to `NULL` if unused.
+ * @param size_in_px_cnt size of the `buf1` and `buf2` in pixel count.
+ */
+void lv_disp_buf_init(lv_disp_buf_t * disp_buf, void * buf1, void * buf2, 
uint32_t size_in_px_cnt)
+{
+    memset(disp_buf, 0, sizeof(lv_disp_buf_t));
+
+    disp_buf->buf1    = buf1;
+    disp_buf->buf2    = buf2;
+    disp_buf->buf_act = disp_buf->buf1;
+    disp_buf->size    = size_in_px_cnt;
+}
+
+/**
+ * Register an initialized display driver.
+ * Automatically set the first display as active.
+ * @param driver pointer to an initialized 'lv_disp_drv_t' variable (can be 
local variable)
+ * @return pointer to the new display or NULL on error
+ */
+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_ASSERT_MEM(disp);
+        return NULL;
+    }
+
+    memcpy(&disp->driver, driver, sizeof(lv_disp_drv_t));
+    memset(&disp->inv_area_joined, 0, sizeof(disp->inv_area_joined));
+    memset(&disp->inv_areas, 0, sizeof(disp->inv_areas));
+    lv_ll_init(&disp->scr_ll, sizeof(lv_obj_t));
+
+    if(disp_def == NULL) disp_def = disp;
+
+    lv_disp_t * disp_def_tmp = disp_def;
+    disp_def                 = disp; /*Temporarily change the default screen 
to create the default screens on the
+                                        new display*/
+
+    disp->inv_p = 0;
+
+    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 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);
+
+    lv_obj_invalidate(disp->act_scr);
+
+    disp_def = disp_def_tmp; /*Revert the default display*/
+
+    /*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_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*/
+
+    return disp;
+}
+
+/**
+ * Update the driver in run time.
+ * @param disp pointer to a display. (return value of `lv_disp_drv_register`)
+ * @param new_drv pointer to the new driver
+ */
+void lv_disp_drv_update(lv_disp_t * disp, lv_disp_drv_t * new_drv)
+{
+    memcpy(&disp->driver, new_drv, sizeof(lv_disp_drv_t));
+
+    lv_obj_t * scr;
+    LV_LL_READ(disp->scr_ll, scr)
+    {
+        lv_obj_set_size(scr, lv_disp_get_hor_res(disp), 
lv_disp_get_ver_res(disp));
+    }
+}
+
+/**
+ * Remove a display
+ * @param disp pointer to display
+ */
+void lv_disp_remove(lv_disp_t * disp)
+{
+    bool was_default = false;
+    if(disp == lv_disp_get_default()) was_default = true;
+
+    /*Detach the input devices */
+    lv_indev_t * indev;
+    indev = lv_indev_get_next(NULL);
+    while(indev) {
+        if(indev->driver.disp == disp) {
+            indev->driver.disp = NULL;
+        }
+        indev = lv_indev_get_next(indev);
+    }
+
+    lv_ll_rem(&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)));
+}
+
+/**
+ * Set a default screen. The new screens will be created on it by default.
+ * @param disp pointer to a display
+ */
+void lv_disp_set_default(lv_disp_t * disp)
+{
+    disp_def = disp;
+}
+
+/**
+ * Get the default display
+ * @return pointer to the default display
+ */
+lv_disp_t * lv_disp_get_default(void)
+{
+    return disp_def;
+}
+
+/**
+ * Get the horizontal resolution of a display
+ * @param disp pointer to a display (NULL to use the default display)
+ * @return the horizontal resolution of the display
+ */
+lv_coord_t lv_disp_get_hor_res(lv_disp_t * disp)
+{
+    if(disp == NULL) disp = lv_disp_get_default();
+
+    if(disp == NULL)
+        return LV_HOR_RES_MAX;
+    else
+        return disp->driver.rotated == 0 ? disp->driver.hor_res : 
disp->driver.ver_res;
+}
+
+/**
+ * Get the vertical resolution of a display
+ * @param disp pointer to a display (NULL to use the default display)
+ * @return the vertical resolution of the display
+ */
+lv_coord_t lv_disp_get_ver_res(lv_disp_t * disp)
+{
+    if(disp == NULL) disp = lv_disp_get_default();
+
+    if(disp == NULL)
+        return LV_VER_RES_MAX;
+    else
+        return disp->driver.rotated == 0 ? disp->driver.ver_res : 
disp->driver.hor_res;
+}
+
+/**
+ * Get if anti-aliasing is enabled for a display or not
+ * @param disp pointer to a display (NULL to use the default display)
+ * @return true: anti-aliasing is enabled; false: disabled
+ */
+bool lv_disp_get_antialiasing(lv_disp_t * disp)
+{
+#if LV_ANTIALIAS == 0
+    return false;
+#else
+    if(disp == NULL) disp = lv_disp_get_default();
+    if(disp == NULL) return false;
+
+    return disp->driver.antialiasing ? true : false;
+#endif
+}
+
+/**
+ * Call in the display driver's `flush_cb` function when the flushing is 
finished
+ * @param disp_drv pointer to display driver in `flush_cb` where this function 
is called
+ */
+LV_ATTRIBUTE_FLUSH_READY void lv_disp_flush_ready(lv_disp_drv_t * disp_drv)
+{
+    /*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;
+}
+
+/**
+ * Get the next display.
+ * @param disp pointer to the current display. NULL to initialize.
+ * @return the next display or NULL if no more. Give the first display when 
the parameter is NULL
+ */
+lv_disp_t * lv_disp_get_next(lv_disp_t * disp)
+{
+    if(disp == NULL)
+        return lv_ll_get_head(&LV_GC_ROOT(_lv_disp_ll));
+    else
+        return lv_ll_get_next(&LV_GC_ROOT(_lv_disp_ll), disp);
+}
+
+/**
+ * Get the internal buffer of a display
+ * @param disp pointer to a display
+ * @return pointer to the internal buffers
+ */
+lv_disp_buf_t * lv_disp_get_buf(lv_disp_t * disp)
+{
+    return disp->driver.buffer;
+}
+
+/**
+ * Get the number of areas in the buffer
+ * @return number of invalid areas
+ */
+uint16_t lv_disp_get_inv_buf_size(lv_disp_t * disp)
+{
+    return disp->inv_p;
+}
+
+/**
+ * Pop (delete) the last 'num' invalidated areas from the buffer
+ * @param num number of areas to delete
+ */
+void lv_disp_pop_from_inv_buf(lv_disp_t * disp, uint16_t num)
+{
+
+    if(disp->inv_p < num)
+        disp->inv_p = 0;
+    else
+        disp->inv_p -= num;
+}
+
+/**
+ * Check the driver configuration if it's double buffered (both `buf1` and 
`buf2` are set)
+ * @param disp pointer to to display to check
+ * @return true: double buffered; false: not double buffered
+ */
+bool lv_disp_is_double_buf(lv_disp_t * disp)
+{
+    if(disp->driver.buffer->buf1 && disp->driver.buffer->buf2)
+        return true;
+    else
+        return false;
+}
+
+/**
+ * Check the driver configuration if it's TRUE double buffered (both `buf1` 
and `buf2` are set and
+ * `size` is screen sized)
+ * @param disp pointer to to display to check
+ * @return true: double buffered; false: not double buffered
+ */
+bool lv_disp_is_true_double_buf(lv_disp_t * disp)
+{
+    uint32_t scr_size = disp->driver.hor_res * disp->driver.ver_res;
+
+    if(lv_disp_is_double_buf(disp) && disp->driver.buffer->size == scr_size) {
+        return true;
+    } else {
+        return false;
+    }
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
diff --git a/scriptsrcs/lvgl/src/lv_hal/lv_hal_disp.h 
b/scriptsrcs/lvgl/src/lv_hal/lv_hal_disp.h
new file mode 100755
index 0000000..8db692a
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_hal/lv_hal_disp.h
@@ -0,0 +1,292 @@
+/**
+ * @file lv_hal_disp.h
+ *
+ * @description Display Driver HAL interface header file
+ *
+ */
+
+#ifndef LV_HAL_DISP_H
+#define LV_HAL_DISP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stdint.h>
+#include <stdbool.h>
+#include "lv_hal.h"
+#include "../lv_misc/lv_color.h"
+#include "../lv_misc/lv_area.h"
+#include "../lv_misc/lv_ll.h"
+#include "../lv_misc/lv_task.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#ifndef LV_INV_BUF_SIZE
+#define LV_INV_BUF_SIZE 32 /*Buffer size for invalid areas */
+#endif
+
+#ifndef LV_ATTRIBUTE_FLUSH_READY
+#define LV_ATTRIBUTE_FLUSH_READY
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+struct _disp_t;
+struct _disp_drv_t;
+
+/**
+ * Structure for holding display buffer information.
+ */
+typedef struct
+{
+    void * buf1; /**< First display buffer. */
+    void * buf2; /**< Second display buffer. */
+
+    /*Internal, used by the library*/
+    void * buf_act;
+    uint32_t size; /*In pixel count*/
+    lv_area_t area;
+    volatile uint32_t flushing : 1;
+} lv_disp_buf_t;
+
+/**
+ * Display Driver structure to be registered by HAL
+ */
+typedef struct _disp_drv_t
+{
+
+    lv_coord_t hor_res; /**< Horizontal resolution. */
+    lv_coord_t ver_res; /**< Vertical resolution. */
+
+    /** Pointer to a buffer initialized with `lv_disp_buf_init()`.
+     * LittlevGL will use this buffer(s) to draw the screens contents */
+    lv_disp_buf_t * buffer;
+
+#if LV_ANTIALIAS
+    uint32_t antialiasing : 1; /**< 1: antialiasing is enabled on this 
display. */
+#endif
+    uint32_t rotated : 1; /**< 1: turn the display by 90 degree. @warning Does 
not update coordinates for you!*/
+
+#if LV_COLOR_SCREEN_TRANSP
+    /**Handle if the the screen doesn't have a solid (opa == LV_OPA_COVER) 
background.
+     * Use only if required because it's slower.*/
+    uint32_t screen_transp : 1;
+#endif
+
+    /** MANDATORY: Write the internal buffer (VDB) to the display. 
'lv_disp_flush_ready()' has to be
+     * called when finished */
+    void (*flush_cb)(struct _disp_drv_t * disp_drv, const lv_area_t * area, 
lv_color_t * color_p);
+
+    /** OPTIONAL: Extend the invalidated areas to match with the display 
drivers requirements
+     * E.g. round `y` to, 8, 16 ..) on a monochrome display*/
+    void (*rounder_cb)(struct _disp_drv_t * disp_drv, lv_area_t * area);
+
+    /** OPTIONAL: Set a pixel in a buffer according to the special 
requirements of the display
+     * Can be used for color format not supported in LittelvGL. E.g. 2 bit -> 
4 gray scales
+     * @note Much slower then drawing with supported color formats. */
+    void (*set_px_cb)(struct _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);
+
+    /** OPTIONAL: Called after every refresh cycle to tell the rendering and 
flushing time + the
+     * number of flushed pixels */
+    void (*monitor_cb)(struct _disp_drv_t * disp_drv, uint32_t time, uint32_t 
px);
+
+#if LV_USE_GPU
+    /** OPTIONAL: Blend two memories using opacity (GPU only)*/
+    void (*gpu_blend_cb)(struct _disp_drv_t * disp_drv, lv_color_t * dest, 
const lv_color_t * src, uint32_t length,
+                         lv_opa_t opa);
+
+    /** OPTIONAL: Fill a memory with a color (GPU only)*/
+    void (*gpu_fill_cb)(struct _disp_drv_t * disp_drv, lv_color_t * dest_buf, 
lv_coord_t dest_width,
+                        const lv_area_t * fill_area, lv_color_t color);
+#endif
+
+    /** On CHROMA_KEYED images this color will be transparent.
+     * `LV_COLOR_TRANSP` by default. (lv_conf.h)*/
+    lv_color_t color_chroma_key;
+
+#if LV_USE_USER_DATA
+    lv_disp_drv_user_data_t user_data; /**< Custom display driver user data */
+#endif
+
+} lv_disp_drv_t;
+
+struct _lv_obj_t;
+
+/**
+ * Display structure.
+ * ::lv_disp_drv_t is the first member of the structure.
+ */
+typedef struct _disp_t
+{
+    /**< Driver to the display*/
+    lv_disp_drv_t driver;
+
+    /**< A task which periodically checks the dirty areas and refreshes them*/
+    lv_task_t * refr_task;
+
+    /** Screens of the display*/
+    lv_ll_t scr_ll;
+    struct _lv_obj_t * act_scr; /**< Currently active screen on this display */
+    struct _lv_obj_t * top_layer; /**< @see lv_disp_get_layer_top */
+    struct _lv_obj_t * sys_layer; /**< @see lv_disp_get_layer_sys */
+
+    /** Invalidated (marked to redraw) areas*/
+    lv_area_t inv_areas[LV_INV_BUF_SIZE];
+    uint8_t inv_area_joined[LV_INV_BUF_SIZE];
+    uint32_t inv_p : 10;
+
+    /*Miscellaneous data*/
+    uint32_t last_activity_time; /**< Last time there was activity on this 
display */
+} lv_disp_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize a display driver with default values.
+ * It is used to have known values in the fields and not junk in memory.
+ * After it you can safely set only the fields you need.
+ * @param driver pointer to driver variable to initialize
+ */
+void lv_disp_drv_init(lv_disp_drv_t * driver);
+
+/**
+ * Initialize a display buffer
+ * @param disp_buf pointer `lv_disp_buf_t` variable to initialize
+ * @param buf1 A buffer to be used by LittlevGL to draw the image.
+ *             Always has to specified and can't be NULL.
+ *             Can be an array allocated by the user. E.g. `static lv_color_t 
disp_buf1[1024 * 10]`
+ *             Or a memory address e.g. in external SRAM
+ * @param buf2 Optionally specify a second buffer to make image rendering and 
image flushing
+ *             (sending to the display) parallel.
+ *             In the `disp_drv->flush` you should use DMA or similar hardware 
to send
+ *             the image to the display in the background.
+ *             It lets LittlevGL to render next frame into the other buffer 
while previous is being
+ * sent. Set to `NULL` if unused.
+ * @param size_in_px_cnt size of the `buf1` and `buf2` in pixel count.
+ */
+void lv_disp_buf_init(lv_disp_buf_t * disp_buf, void * buf1, void * buf2, 
uint32_t size_in_px_cnt);
+
+/**
+ * Register an initialized display driver.
+ * Automatically set the first display as active.
+ * @param driver pointer to an initialized 'lv_disp_drv_t' variable (can be 
local variable)
+ * @return pointer to the new display or NULL on error
+ */
+lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver);
+
+/**
+ * Update the driver in run time.
+ * @param disp pointer to a display. (return value of `lv_disp_drv_register`)
+ * @param new_drv pointer to the new driver
+ */
+void lv_disp_drv_update(lv_disp_t * disp, lv_disp_drv_t * new_drv);
+
+/**
+ * Remove a display
+ * @param disp pointer to display
+ */
+void lv_disp_remove(lv_disp_t * disp);
+
+/**
+ * Set a default screen. The new screens will be created on it by default.
+ * @param disp pointer to a display
+ */
+void lv_disp_set_default(lv_disp_t * disp);
+
+/**
+ * Get the default display
+ * @return pointer to the default display
+ */
+lv_disp_t * lv_disp_get_default(void);
+
+/**
+ * Get the horizontal resolution of a display
+ * @param disp pointer to a display (NULL to use the default display)
+ * @return the horizontal resolution of the display
+ */
+lv_coord_t lv_disp_get_hor_res(lv_disp_t * disp);
+
+/**
+ * Get the vertical resolution of a display
+ * @param disp pointer to a display (NULL to use the default display)
+ * @return the vertical resolution of the display
+ */
+lv_coord_t lv_disp_get_ver_res(lv_disp_t * disp);
+
+/**
+ * Get if anti-aliasing is enabled for a display or not
+ * @param disp pointer to a display (NULL to use the default display)
+ * @return true: anti-aliasing is enabled; false: disabled
+ */
+bool lv_disp_get_antialiasing(lv_disp_t * disp);
+
+//! @cond Doxygen_Suppress
+
+/**
+ * Call in the display driver's `flush_cb` function when the flushing is 
finished
+ * @param disp_drv pointer to display driver in `flush_cb` where this function 
is called
+ */
+LV_ATTRIBUTE_FLUSH_READY void lv_disp_flush_ready(lv_disp_drv_t * disp_drv);
+
+//! @endcond
+
+/**
+ * Get the next display.
+ * @param disp pointer to the current display. NULL to initialize.
+ * @return the next display or NULL if no more. Give the first display when 
the parameter is NULL
+ */
+lv_disp_t * lv_disp_get_next(lv_disp_t * disp);
+
+/**
+ * Get the internal buffer of a display
+ * @param disp pointer to a display
+ * @return pointer to the internal buffers
+ */
+lv_disp_buf_t * lv_disp_get_buf(lv_disp_t * disp);
+
+/**
+ * Get the number of areas in the buffer
+ * @return number of invalid areas
+ */
+uint16_t lv_disp_get_inv_buf_size(lv_disp_t * disp);
+
+/**
+ * Pop (delete) the last 'num' invalidated areas from the buffer
+ * @param num number of areas to delete
+ */
+void lv_disp_pop_from_inv_buf(lv_disp_t * disp, uint16_t num);
+
+/**
+ * Check the driver configuration if it's double buffered (both `buf1` and 
`buf2` are set)
+ * @param disp pointer to to display to check
+ * @return true: double buffered; false: not double buffered
+ */
+bool lv_disp_is_double_buf(lv_disp_t * disp);
+
+/**
+ * Check the driver configuration if it's TRUE double buffered (both `buf1` 
and `buf2` are set and
+ * `size` is screen sized)
+ * @param disp pointer to to display to check
+ * @return true: double buffered; false: not double buffered
+ */
+bool lv_disp_is_true_double_buf(lv_disp_t * disp);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_hal/lv_hal_indev.c 
b/scriptsrcs/lvgl/src/lv_hal/lv_hal_indev.c
new file mode 100755
index 0000000..35ff1b3
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_hal/lv_hal_indev.c
@@ -0,0 +1,158 @@
+/**
+ * @file hal_indev.c
+ *
+ * @description Input device HAL interface
+ *
+ */
+
+/*********************
+ *      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"
+#include "../lv_misc/lv_gc.h"
+#include "lv_hal_disp.h"
+
+#if defined(LV_GC_INCLUDE)
+#include LV_GC_INCLUDE
+#endif /* LV_ENABLE_GC */
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize an input device driver with default values.
+ * It is used to surly have known values in the fields ant not memory junk.
+ * After it you can set the fields.
+ * @param driver pointer to driver variable to initialize
+ */
+void lv_indev_drv_init(lv_indev_drv_t * driver)
+{
+    memset(driver, 0, sizeof(lv_indev_drv_t));
+
+    driver->type                = LV_INDEV_TYPE_NONE;
+    driver->drag_limit          = LV_INDEV_DEF_DRAG_LIMIT;
+    driver->drag_throw          = LV_INDEV_DEF_DRAG_THROW;
+    driver->long_press_time     = LV_INDEV_DEF_LONG_PRESS_TIME;
+    driver->long_press_rep_time = LV_INDEV_DEF_LONG_PRESS_REP_TIME;
+}
+
+/**
+ * Register an initialized input device driver.
+ * @param driver pointer to an initialized 'lv_indev_drv_t' variable (can be 
local variable)
+ * @return pointer to the new input device or NULL on error
+ */
+lv_indev_t * lv_indev_drv_register(lv_indev_drv_t * driver)
+{
+
+    if(driver->disp == NULL) driver->disp = lv_disp_get_default();
+
+    if(driver->disp == NULL) {
+        LV_LOG_WARN("lv_indev_drv_register: no display registered hence can't 
attache the indev to "
+                    "a display");
+        return NULL;
+    }
+
+    lv_indev_t * indev = lv_ll_ins_head(&LV_GC_ROOT(_lv_indev_ll));
+    if(!indev) {
+        LV_ASSERT_MEM(indev);
+        return NULL;
+    }
+
+    memset(indev, 0, sizeof(lv_indev_t));
+    memcpy(&indev->driver, driver, sizeof(lv_indev_drv_t));
+
+    indev->proc.reset_query = 1;
+    indev->cursor           = NULL;
+    indev->group            = NULL;
+    indev->btn_points       = NULL;
+
+    indev->driver.read_task = lv_task_create(lv_indev_read_task, 
LV_INDEV_DEF_READ_PERIOD, LV_TASK_PRIO_MID, indev);
+
+    return indev;
+}
+
+/**
+ * Update the driver in run time.
+ * @param indev pointer to a input device. (return value of 
`lv_indev_drv_register`)
+ * @param new_drv pointer to the new driver
+ */
+void lv_indev_drv_update(lv_indev_t * indev, lv_indev_drv_t * new_drv)
+{
+    memcpy(&indev->driver, new_drv, sizeof(lv_indev_drv_t));
+}
+
+/**
+ * Get the next input device.
+ * @param indev pointer to the current input device. NULL to initialize.
+ * @return the next input devise or NULL if no more. Give the first input 
device when the parameter
+ * is NULL
+ */
+lv_indev_t * lv_indev_get_next(lv_indev_t * indev)
+{
+    if(indev == NULL)
+        return lv_ll_get_head(&LV_GC_ROOT(_lv_indev_ll));
+    else
+        return lv_ll_get_next(&LV_GC_ROOT(_lv_indev_ll), indev);
+}
+
+/**
+ * Read data from an input device.
+ * @param indev pointer to an input device
+ * @param data input device will write its data here
+ * @return false: no more data; true: there more data to read (buffered)
+ */
+bool lv_indev_read(lv_indev_t * indev, lv_indev_data_t * data)
+{
+    bool cont = false;
+
+    memset(data, 0, sizeof(lv_indev_data_t));
+
+    /* For touchpad sometimes users don't the last pressed coordinate on 
release.
+     * So be sure a coordinates are initialized to the last point */
+    if(indev->driver.type == LV_INDEV_TYPE_POINTER) {
+        data->point.x = indev->proc.types.pointer.act_point.x;
+        data->point.y = indev->proc.types.pointer.act_point.y;
+    }
+    /*Similarly set at least the last key in case of the  the user doesn't set 
it  on release*/
+    else if(indev->driver.type == LV_INDEV_TYPE_KEYPAD) {
+        data->key = indev->proc.types.keypad.last_key;
+    }
+
+    if(indev->driver.read_cb) {
+        LV_LOG_TRACE("idnev read started");
+        cont = indev->driver.read_cb(&indev->driver, data);
+        LV_LOG_TRACE("idnev read finished");
+    } else {
+        LV_LOG_WARN("indev function registered");
+    }
+
+    return cont;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
diff --git a/scriptsrcs/lvgl/src/lv_hal/lv_hal_indev.h 
b/scriptsrcs/lvgl/src/lv_hal/lv_hal_indev.h
new file mode 100755
index 0000000..ef1a555
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_hal/lv_hal_indev.h
@@ -0,0 +1,213 @@
+/**
+ * @file lv_hal_indev.h
+ *
+ * @description Input Device HAL interface layer header file
+ *
+ */
+
+#ifndef LV_HAL_INDEV_H
+#define LV_HAL_INDEV_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include <stdbool.h>
+#include <stdint.h>
+#include "../lv_misc/lv_area.h"
+#include "../lv_misc/lv_task.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+struct _lv_obj_t;
+struct _disp_t;
+struct _lv_indev_t;
+struct _lv_indev_drv_t;
+
+/** Possible input device types*/
+enum {
+    LV_INDEV_TYPE_NONE,    /**< Uninitialized state*/
+    LV_INDEV_TYPE_POINTER, /**< Touch pad, mouse, external button*/
+    LV_INDEV_TYPE_KEYPAD,  /**< Keypad or keyboard*/
+    LV_INDEV_TYPE_BUTTON,  /**< External (hardware button) which is assigned 
to a specific point of the
+                              screen*/
+    LV_INDEV_TYPE_ENCODER, /**< Encoder with only Left, Right turn and a 
Button*/
+};
+typedef uint8_t lv_indev_type_t;
+
+/** States for input devices*/
+enum { LV_INDEV_STATE_REL = 0, LV_INDEV_STATE_PR };
+typedef uint8_t lv_indev_state_t;
+
+/** Data structure passed to an input driver to fill */
+typedef struct
+{
+    lv_point_t point; /**< For LV_INDEV_TYPE_POINTER the currently pressed 
point*/
+    uint32_t key;     /**< For LV_INDEV_TYPE_KEYPAD the currently pressed key*/
+    uint32_t btn_id;  /**< For LV_INDEV_TYPE_BUTTON the currently pressed 
button*/
+    int16_t enc_diff; /**< For LV_INDEV_TYPE_ENCODER number of steps since the 
previous read*/
+
+    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
+{
+
+    /**< Input device type*/
+    lv_indev_type_t type;
+
+    /**< Function pointer to read input device data.
+     * Return 'true' if there is more data to be read (buffered).
+     * Most drivers can safely return 'false' */
+    bool (*read_cb)(struct _lv_indev_drv_t * indev_drv, lv_indev_data_t * 
data);
+
+    /** Called when an action happened on the input device.
+     * The second parameter is the event from `lv_event_t`*/
+    void (*feedback_cb)(struct _lv_indev_drv_t *, uint8_t);
+
+#if LV_USE_USER_DATA
+    lv_indev_drv_user_data_t user_data;
+#endif
+
+    /**< Pointer to the assigned display*/
+    struct _disp_t * disp;
+
+    /**< Task to read the periodically read the input device*/
+    lv_task_t * read_task;
+
+    /**< Number of pixels to slide before actually drag the object*/
+    uint8_t drag_limit;
+
+    /**< Drag throw slow-down in [%]. Greater value means faster slow-down */
+    uint8_t drag_throw;
+
+    /**< Long press time in milliseconds*/
+    uint16_t long_press_time;
+
+    /**< Repeated trigger period in long press [ms] */
+    uint16_t long_press_rep_time;
+} lv_indev_drv_t;
+
+/** Run time data of input devices
+ * Internally used by the library, you should not need to touch it.
+ */
+typedef struct _lv_indev_proc_t
+{
+    lv_indev_state_t state; /**< Current state of the input device. */
+    union
+    {
+        struct
+        { /*Pointer and button data*/
+            lv_point_t act_point; /**< Current point of input device. */
+            lv_point_t last_point; /**< Last point of input device. */
+            lv_point_t vect; /**< Difference between `act_point` and 
`last_point`. */
+            lv_point_t drag_sum; /*Count the dragged pixels to check 
LV_INDEV_DEF_DRAG_LIMIT*/
+            lv_point_t drag_throw_vect;
+            struct _lv_obj_t * act_obj;      /*The object being pressed*/
+            struct _lv_obj_t * last_obj;     /*The last obejct which was 
pressed (used by dragthrow and
+                                                other post-release event)*/
+            struct _lv_obj_t * last_pressed; /*The lastly pressed object*/
+
+            /*Flags*/
+            uint8_t drag_limit_out : 1;
+            uint8_t drag_in_prog : 1;
+        } pointer;
+        struct
+        { /*Keypad data*/
+            lv_indev_state_t last_state;
+            uint32_t last_key;
+        } keypad;
+    } types;
+
+    uint32_t pr_timestamp;         /**< Pressed time stamp*/
+    uint32_t longpr_rep_timestamp; /**< Long press repeat time stamp*/
+
+    /*Flags*/
+    uint8_t long_pr_sent : 1;
+    uint8_t reset_query : 1;
+    uint8_t disabled : 1;
+    uint8_t wait_until_release : 1;
+} lv_indev_proc_t;
+
+struct _lv_obj_t;
+struct _lv_group_t;
+
+/** The main input device descriptor with driver, runtime data ('proc') and 
some additional
+ * information*/
+typedef struct _lv_indev_t
+{
+    lv_indev_drv_t driver;
+    lv_indev_proc_t proc;
+    struct _lv_obj_t * cursor;     /**< Cursor for LV_INPUT_TYPE_POINTER*/
+    struct _lv_group_t * group;    /**< Keypad destination group*/
+    const lv_point_t * btn_points; /**< Array points assigned to the button 
()screen will be pressed
+                                      here by the buttons*/
+} lv_indev_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize an input device driver with default values.
+ * It is used to surly have known values in the fields ant not memory junk.
+ * After it you can set the fields.
+ * @param driver pointer to driver variable to initialize
+ */
+void lv_indev_drv_init(lv_indev_drv_t * driver);
+
+/**
+ * Register an initialized input device driver.
+ * @param driver pointer to an initialized 'lv_indev_drv_t' variable (can be 
local variable)
+ * @return pointer to the new input device or NULL on error
+ */
+lv_indev_t * lv_indev_drv_register(lv_indev_drv_t * driver);
+
+/**
+ * Update the driver in run time.
+ * @param indev pointer to a input device. (return value of 
`lv_indev_drv_register`)
+ * @param new_drv pointer to the new driver
+ */
+void lv_indev_drv_update(lv_indev_t * indev, lv_indev_drv_t * new_drv);
+
+/**
+ * Get the next input device.
+ * @param indev pointer to the current input device. NULL to initialize.
+ * @return the next input devise or NULL if no more. Give the first input 
device when the parameter
+ * is NULL
+ */
+lv_indev_t * lv_indev_get_next(lv_indev_t * indev);
+
+/**
+ * Read data from an input device.
+ * @param indev pointer to an input device
+ * @param data input device will write its data here
+ * @return false: no more data; true: there more data to read (buffered)
+ */
+bool lv_indev_read(lv_indev_t * indev, lv_indev_data_t * data);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_hal/lv_hal_tick.c 
b/scriptsrcs/lvgl/src/lv_hal/lv_hal_tick.c
new file mode 100755
index 0000000..cdfec32
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_hal/lv_hal_tick.c
@@ -0,0 +1,100 @@
+/**
+ * @file systick.c
+ * Provide access to the system tick with 1 millisecond resolution
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include "lv_hal_tick.h"
+#include <stddef.h>
+
+#if LV_TICK_CUSTOM == 1
+#include LV_TICK_CUSTOM_INCLUDE
+#endif
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static uint32_t sys_time = 0;
+static volatile uint8_t tick_irq_flag;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * You have to call this function periodically
+ * @param tick_period the call period of this function in milliseconds
+ */
+LV_ATTRIBUTE_TICK_INC void lv_tick_inc(uint32_t tick_period)
+{
+    tick_irq_flag = 0;
+    sys_time += tick_period;
+}
+
+/**
+ * Get the elapsed milliseconds since start up
+ * @return the elapsed milliseconds
+ */
+uint32_t lv_tick_get(void)
+{
+#if LV_TICK_CUSTOM == 0
+    uint32_t result;
+    do {
+        tick_irq_flag = 1;
+        result        = sys_time;
+    } while(!tick_irq_flag); /*'lv_tick_inc()' clears this flag which can be 
in an interrupt.
+                                Continue until make a non interrupted cycle */
+
+    return result;
+#else
+    return LV_TICK_CUSTOM_SYS_TIME_EXPR;
+#endif
+}
+
+/**
+ * Get the elapsed milliseconds since a previous time stamp
+ * @param prev_tick a previous time stamp (return value of systick_get() )
+ * @return the elapsed milliseconds since 'prev_tick'
+ */
+uint32_t lv_tick_elaps(uint32_t prev_tick)
+{
+    uint32_t act_time = lv_tick_get();
+
+    /*If there is no overflow in sys_time simple subtract*/
+    if(act_time >= prev_tick) {
+        prev_tick = act_time - prev_tick;
+    } else {
+        prev_tick = UINT32_MAX - prev_tick + 1;
+        prev_tick += act_time;
+    }
+
+    return prev_tick;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
diff --git a/scriptsrcs/lvgl/src/lv_hal/lv_hal_tick.h 
b/scriptsrcs/lvgl/src/lv_hal/lv_hal_tick.h
new file mode 100755
index 0000000..a4de881
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_hal/lv_hal_tick.h
@@ -0,0 +1,70 @@
+/**
+ * @file lv_hal_tick.h
+ * Provide access to the system tick with 1 millisecond resolution
+ */
+
+#ifndef LV_HAL_TICK_H
+#define LV_HAL_TICK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+#include <stdint.h>
+#include <stdbool.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+#ifndef LV_ATTRIBUTE_TICK_INC
+#define LV_ATTRIBUTE_TICK_INC
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+//! @cond Doxygen_Suppress
+
+/**
+ * You have to call this function periodically
+ * @param tick_period the call period of this function in milliseconds
+ */
+LV_ATTRIBUTE_TICK_INC void lv_tick_inc(uint32_t tick_period);
+
+//! @endcond
+
+/**
+ * Get the elapsed milliseconds since start up
+ * @return the elapsed milliseconds
+ */
+uint32_t lv_tick_get(void);
+
+/**
+ * Get the elapsed milliseconds since a previous time stamp
+ * @param prev_tick a previous time stamp (return value of systick_get() )
+ * @return the elapsed milliseconds since 'prev_tick'
+ */
+uint32_t lv_tick_elaps(uint32_t prev_tick);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_HAL_TICK_H*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_anim.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_anim.c
new file mode 100755
index 0000000..790dfc7
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_anim.c
@@ -0,0 +1,474 @@
+/**
+ * @file anim.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_anim.h"
+
+#if LV_USE_ANIMATION
+#include <stddef.h>
+#include <string.h>
+#include "../lv_core/lv_debug.h"
+#include "../lv_hal/lv_hal_tick.h"
+#include "lv_task.h"
+#include "lv_math.h"
+#include "lv_gc.h"
+
+#if defined(LV_GC_INCLUDE)
+#include LV_GC_INCLUDE
+#endif /* LV_ENABLE_GC */
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_ANIM_RESOLUTION 1024
+#define LV_ANIM_RES_SHIFT 10
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static void anim_task(lv_task_t * param);
+static bool anim_ready_handler(lv_anim_t * a);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static uint32_t last_task_run;
+static bool anim_list_changed;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Init. the animation module
+ */
+void lv_anim_core_init(void)
+{
+    lv_ll_init(&LV_GC_ROOT(_lv_anim_ll), sizeof(lv_anim_t));
+    last_task_run = lv_tick_get();
+    lv_task_create(anim_task, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, NULL);
+}
+
+/**
+ * Initialize an animation variable.
+ * E.g.:
+ * lv_anim_t a;
+ * lv_anim_init(&a);
+ * lv_anim_set_...(&a);
+ * lv_anim_craete(&a);
+ * @param a pointer to an `lv_anim_t` variable to initialize
+ */
+void lv_anim_init(lv_anim_t * a)
+{
+    memset(a, 0, sizeof(lv_anim_t));
+    a->time    = 500;
+    a->start   = 0;
+    a->end     = 100;
+    a->path_cb = lv_anim_path_linear;
+}
+/**
+ * Create an animation
+ * @param a an initialized 'anim_t' variable. Not required after call.
+ */
+void lv_anim_create(lv_anim_t * a)
+{
+    LV_LOG_TRACE("animation create started")
+    /* Do not let two animations for the  same 'var' with the same 'fp'*/
+    if(a->exec_cb != NULL) lv_anim_del(a->var, a->exec_cb); /*fp == NULL would 
delete all animations of var*/
+
+    /*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_ASSERT_MEM(new_anim);
+    if(new_anim == NULL) return;
+
+    /*Initialize the animation descriptor*/
+    a->playback_now = 0;
+    memcpy(new_anim, a, sizeof(lv_anim_t));
+
+    /*Set the start value*/
+    if(new_anim->exec_cb) new_anim->exec_cb(new_anim->var, new_anim->start);
+
+    /* Creating an animation changed the linked list.
+     * It's important if it happens in a ready callback. (see `anim_task`)*/
+    anim_list_changed = true;
+
+    LV_LOG_TRACE("animation created")
+}
+
+/**
+ * Delete an animation of a variable with a given animator function
+ * @param var pointer to variable
+ * @param exec_cb a function pointer which is animating 'var',
+ *           or NULL to delete all the animations of 'var'
+ * @return true: at least 1 animation is deleted, false: no animation is 
deleted
+ */
+bool lv_anim_del(void * var, lv_anim_exec_xcb_t exec_cb)
+{
+    lv_anim_t * a;
+    lv_anim_t * a_next;
+    bool del = false;
+    a        = lv_ll_get_head(&LV_GC_ROOT(_lv_anim_ll));
+    while(a != NULL) {
+        /*'a' might be deleted, so get the next object while 'a' is valid*/
+        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_mem_free(a);
+            anim_list_changed = true; /*Read by `anim_task`. It need to know 
if a delete occurred in
+                                         the linked list*/
+            del = true;
+        }
+
+        a = a_next;
+    }
+
+    return del;
+}
+
+/**
+ * Get the number of currently running animations
+ * @return the number of running animations
+ */
+uint16_t lv_anim_count_running(void)
+{
+    uint16_t cnt = 0;
+    lv_anim_t * a;
+    LV_LL_READ(LV_GC_ROOT(_lv_anim_ll), a) cnt++;
+
+    return cnt++;
+}
+
+/**
+ * Calculate the time of an animation with a given speed and the start and end 
values
+ * @param speed speed of animation in unit/sec
+ * @param start start value of the animation
+ * @param end end value of the animation
+ * @return the required time [ms] for the animation with the given parameters
+ */
+uint16_t lv_anim_speed_to_time(uint16_t speed, lv_anim_value_t start, 
lv_anim_value_t end)
+{
+    int32_t d     = LV_MATH_ABS((int32_t)start - end);
+    uint32_t time = (int32_t)((int32_t)(d * 1000) / speed);
+
+    if(time > UINT16_MAX) time = UINT16_MAX;
+
+    if(time == 0) {
+        time++;
+    }
+
+    return time;
+}
+
+/**
+ * Calculate the current value of an animation applying linear characteristic
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_linear(const lv_anim_t * a)
+{
+    /*Calculate the current step*/
+    uint32_t step;
+    if(a->time == a->act_time) {
+        step = LV_ANIM_RESOLUTION; /*Use the last value if the time fully 
elapsed*/
+    } else {
+        step = ((int32_t)a->act_time * LV_ANIM_RESOLUTION) / a->time;
+    }
+
+    /* Get the new value which will be proportional to `step`
+     * and the `start` and `end` values*/
+    int32_t new_value;
+    new_value = (int32_t)step * (a->end - a->start);
+    new_value = new_value >> LV_ANIM_RES_SHIFT;
+    new_value += a->start;
+
+    return (lv_anim_value_t)new_value;
+}
+
+/**
+ * Calculate the current value of an animation slowing down the start phase
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_ease_in(const lv_anim_t * a)
+{
+    /*Calculate the current step*/
+    uint32_t t;
+    if(a->time == a->act_time)
+        t = 1024;
+    else
+        t = (uint32_t)((uint32_t)a->act_time * 1024) / a->time;
+
+    int32_t step = lv_bezier3(t, 0, 1, 1, 1024);
+
+    int32_t new_value;
+    new_value = (int32_t)step * (a->end - a->start);
+    new_value = new_value >> 10;
+    new_value += a->start;
+
+    return (lv_anim_value_t)new_value;
+}
+
+/**
+ * Calculate the current value of an animation slowing down the end phase
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_ease_out(const lv_anim_t * a)
+{
+    /*Calculate the current step*/
+
+    uint32_t t;
+    if(a->time == a->act_time)
+        t = 1024;
+    else
+        t = (uint32_t)((uint32_t)a->act_time * 1024) / a->time;
+
+    int32_t step = lv_bezier3(t, 0, 1023, 1023, 1024);
+
+    int32_t new_value;
+    new_value = (int32_t)step * (a->end - a->start);
+    new_value = new_value >> 10;
+    new_value += a->start;
+
+    return (lv_anim_value_t)new_value;
+}
+
+/**
+ * Calculate the current value of an animation applying an "S" characteristic 
(cosine)
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_ease_in_out(const lv_anim_t * a)
+{
+    /*Calculate the current step*/
+
+    uint32_t t;
+    if(a->time == a->act_time)
+        t = 1024;
+    else
+        t = (uint32_t)((uint32_t)a->act_time * 1024) / a->time;
+
+    int32_t step = lv_bezier3(t, 0, 100, 924, 1024);
+
+    int32_t new_value;
+    new_value = (int32_t)step * (a->end - a->start);
+    new_value = new_value >> 10;
+    new_value += a->start;
+
+    return (lv_anim_value_t)new_value;
+}
+
+/**
+ * Calculate the current value of an animation with overshoot at the end
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_overshoot(const lv_anim_t * a)
+{
+    /*Calculate the current step*/
+
+    uint32_t t;
+    if(a->time == a->act_time)
+        t = 1024;
+    else
+        t = (uint32_t)((uint32_t)a->act_time * 1024) / a->time;
+
+    int32_t step = lv_bezier3(t, 0, 600, 1300, 1024);
+
+    int32_t new_value;
+    new_value = (int32_t)step * (a->end - a->start);
+    new_value = new_value >> 10;
+    new_value += a->start;
+
+    return (lv_anim_value_t)new_value;
+}
+
+/**
+ * Calculate the current value of an animation with 3 bounces
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_bounce(const lv_anim_t * a)
+{
+    /*Calculate the current step*/
+    uint32_t t;
+    if(a->time == a->act_time)
+        t = 1024;
+    else
+        t = (uint32_t)((uint32_t)a->act_time * 1024) / a->time;
+
+    int32_t diff = (a->end - a->start);
+
+    /*3 bounces has 5 parts: 3 down and 2 up. One part is t / 5 long*/
+
+    if(t < 408) {
+        /*Go down*/
+        t = (t * 2500) >> 10; /*[0..1024] range*/
+    } else if(t >= 408 && t < 614) {
+        /*First bounce back*/
+        t -= 408;
+        t    = t * 5; /*to [0..1024] range*/
+        t    = 1024 - t;
+        diff = diff / 6;
+    } else if(t >= 614 && t < 819) {
+        /*Fall back*/
+        t -= 614;
+        t    = t * 5; /*to [0..1024] range*/
+        diff = diff / 6;
+    } else if(t >= 819 && t < 921) {
+        /*Second bounce back*/
+        t -= 819;
+        t    = t * 10; /*to [0..1024] range*/
+        t    = 1024 - t;
+        diff = diff / 16;
+    } else if(t >= 921 && t <= 1024) {
+        /*Fall back*/
+        t -= 921;
+        t    = t * 10; /*to [0..1024] range*/
+        diff = diff / 16;
+    }
+
+    if(t > 1024) t = 1024;
+
+    int32_t step = lv_bezier3(t, 1024, 1024, 800, 0);
+
+    int32_t new_value;
+    new_value = (int32_t)step * diff;
+    new_value = new_value >> 10;
+    new_value = a->end - new_value;
+
+    return (lv_anim_value_t)new_value;
+}
+
+/**
+ * Calculate the current value of an animation applying step characteristic.
+ * (Set end value on the end of the animation)
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_step(const lv_anim_t * a)
+{
+    if(a->act_time >= a->time)
+        return a->end;
+    else
+        return a->start;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Periodically handle the animations.
+ * @param param unused
+ */
+static void anim_task(lv_task_t * param)
+{
+    (void)param;
+
+    lv_anim_t * a;
+    LV_LL_READ(LV_GC_ROOT(_lv_anim_ll), a)
+    {
+        a->has_run = 0;
+    }
+
+    uint32_t elaps = lv_tick_elaps(last_task_run);
+
+    a = lv_ll_get_head(&LV_GC_ROOT(_lv_anim_ll));
+
+    while(a != NULL) {
+        /*It can be set by `lv_anim_del()` typically in `end_cb`. If set then 
an animation delete
+         * happened in `anim_ready_handler` which could make this linked list 
reading corrupt
+         * because the list is changed meanwhile
+         */
+        anim_list_changed = false;
+
+        if(!a->has_run) {
+            a->has_run = 1; /*The list readying might be reseted so need to 
know which anim has run already*/
+            a->act_time += elaps;
+            if(a->act_time >= 0) {
+                if(a->act_time > a->time) a->act_time = a->time;
+
+                int32_t new_value;
+                new_value = a->path_cb(a);
+
+                /*Apply the calculated value*/
+                if(a->exec_cb) a->exec_cb(a->var, new_value);
+
+                /*If the time is elapsed the animation is ready*/
+                if(a->act_time >= a->time) {
+                    anim_ready_handler(a);
+                }
+            }
+        }
+
+        /* If the linked list changed due to anim. delete then it's not safe 
to continue
+         * the reading of the list from here -> start from the head*/
+        if(anim_list_changed)
+            a = lv_ll_get_head(&LV_GC_ROOT(_lv_anim_ll));
+        else
+            a = lv_ll_get_next(&LV_GC_ROOT(_lv_anim_ll), a);
+    }
+
+    last_task_run = lv_tick_get();
+}
+
+/**
+ * Called when an animation is ready to do the necessary thinks
+ * e.g. repeat, play back, delete etc.
+ * @param a pointer to an animation descriptor
+ * @return true: animation delete occurred nnd the `LV_GC_ROOT(_lv_anim_ll)` 
has changed
+ * */
+static bool anim_ready_handler(lv_anim_t * a)
+{
+
+    /*Delete the animation if
+     * - no repeat and no play back (simple one shot animation)
+     * - no repeat, play back is enabled and play back is ready */
+    if((a->repeat == 0 && a->playback == 0) || (a->repeat == 0 && a->playback 
== 1 && a->playback_now == 1)) {
+
+        /*Create copy from the animation and delete the animation from the 
list.
+         * 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_mem_free(a);
+        anim_list_changed = true;
+
+        /* Call the callback function at the end*/
+        if(a_tmp.ready_cb != NULL) a_tmp.ready_cb(&a_tmp);
+    }
+    /*If the animation is not deleted then restart it*/
+    else {
+        a->act_time = -a->repeat_pause; /*Restart the animation*/
+        /*Swap the start and end values in play back mode*/
+        if(a->playback != 0) {
+            /*If now turning back use the 'playback_pause*/
+            if(a->playback_now == 0) a->act_time = -a->playback_pause;
+
+            /*Toggle the play back state*/
+            a->playback_now = a->playback_now == 0 ? 1 : 0;
+            /*Swap the start and end values*/
+            int32_t tmp;
+            tmp      = a->start;
+            a->start = a->end;
+            a->end   = tmp;
+        }
+    }
+
+    return anim_list_changed;
+}
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_anim.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_anim.h
new file mode 100755
index 0000000..36cc35a
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_anim.h
@@ -0,0 +1,331 @@
+/**
+ * @file anim.h
+ *
+ */
+
+#ifndef ANIM_H
+#define ANIM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/** Can be used to indicate if animations are enabled or disabled in a case*/
+enum {
+    LV_ANIM_OFF,
+    LV_ANIM_ON,
+};
+
+typedef uint8_t lv_anim_enable_t;
+
+/** Type of the animated value*/
+typedef lv_coord_t lv_anim_value_t;
+
+#if LV_USE_ANIMATION
+
+struct _lv_anim_t;
+
+/** Generic prototype of "animator" functions.
+ * First parameter is the variable to animate.
+ * Second parameter is the value to set.
+ * Compatible with `lv_xxx_set_yyy(obj, value)` functions
+ * The `x` in `_xcb_t` means its not a fully generic prototype because
+ * it doesn't receive `lv_anim_t *` as its first argument*/
+typedef void (*lv_anim_exec_xcb_t)(void *, lv_anim_value_t);
+
+/** Same as `lv_anim_exec_xcb_t` but receives `lv_anim_t *` as the first 
parameter.
+ * It's more consistent but less convenient. Might be used by binding 
generator functions.*/
+typedef void (*lv_anim_custom_exec_cb_t)(struct _lv_anim_t *, lv_anim_value_t);
+
+/** Get the current value during an animation*/
+typedef lv_anim_value_t (*lv_anim_path_cb_t)(const struct _lv_anim_t *);
+
+/** Callback to call when the animation is ready*/
+typedef void (*lv_anim_ready_cb_t)(struct _lv_anim_t *);
+
+/** Describes an animation*/
+typedef struct _lv_anim_t
+{
+    void * var;                  /**<Variable to animate*/
+    lv_anim_exec_xcb_t exec_cb;   /**< Function to execute to animate*/
+    lv_anim_path_cb_t path_cb;   /**< Function to get the steps of animations*/
+    lv_anim_ready_cb_t ready_cb; /**< Call it when the animation is ready*/
+    int32_t start;               /**< Start value*/
+    int32_t end;                 /**< End value*/
+    uint16_t time;               /**< Animation time in ms*/
+    int16_t act_time;            /**< Current time in animation. Set to 
negative to make delay.*/
+    uint16_t playback_pause;     /**< Wait before play back*/
+    uint16_t repeat_pause;       /**< Wait before repeat*/
+#if LV_USE_USER_DATA
+    lv_anim_user_data_t user_data; /**< Custom user data*/
+#endif
+
+    uint8_t playback : 1; /**< When the animation is ready play it back*/
+    uint8_t repeat : 1;   /**< Repeat the animation infinitely*/
+    /*Animation system use these - user shouldn't set*/
+    uint8_t playback_now : 1; /**< Play back is in progress*/
+    uint32_t has_run : 1;     /**< Indicates the animation has run in this 
round*/
+} lv_anim_t;
+
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Init. the animation module
+ */
+void lv_anim_core_init(void);
+
+/**
+ * Initialize an animation variable.
+ * E.g.:
+ * lv_anim_t a;
+ * lv_anim_init(&a);
+ * lv_anim_set_...(&a);
+ * lv_anim_create(&a);
+ * @param a pointer to an `lv_anim_t` variable to initialize
+ */
+void lv_anim_init(lv_anim_t * a);
+
+/**
+ * Set a variable to animate function to execute on `var`
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @param var pointer to a variable to animate
+ * @param exec_cb a function to execute.
+ *                LittelvGL's built-in functions can be used.
+ *                E.g. lv_obj_set_x
+ */
+static inline void lv_anim_set_exec_cb(lv_anim_t * a, void * var, 
lv_anim_exec_xcb_t exec_cb)
+{
+    a->var     = var;
+    a->exec_cb = exec_cb;
+}
+
+/**
+ * Set the duration and delay of an animation
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @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, int16_t 
delay)
+{
+    a->time     = duration;
+    a->act_time = (int16_t)(-delay);
+}
+
+/**
+ * Set the start and end values of an animation
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @param start the start value
+ * @param end the end value
+ */
+static inline void lv_anim_set_values(lv_anim_t * a, lv_anim_value_t start, 
lv_anim_value_t end)
+{
+    a->start = start;
+    a->end   = end;
+}
+
+/**
+ * Similar to `lv_anim_set_var_and_cb` but `lv_anim_custom_exec_cb_t` receives
+ * `lv_anim_t * ` as its first parameter instead of `void *`.
+ * This function might be used when LittlevGL is binded to other languages 
because
+ * it's more consistent to have `lv_anim_t *` as first parameter.
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @param exec_cb a function to execute.
+ */
+static inline void lv_anim_set_custom_exec_cb(lv_anim_t * a, 
lv_anim_custom_exec_cb_t exec_cb)
+{
+    a->var     = a;
+    a->exec_cb = (lv_anim_exec_xcb_t)exec_cb;
+}
+
+/**
+ * Set the path (curve) of the animation.
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @param path_cb a function the get the current value of the animation.
+ *                The built in functions starts with `lv_anim_path_...`
+ */
+static inline void lv_anim_set_path_cb(lv_anim_t * a, lv_anim_path_cb_t 
path_cb)
+{
+    a->path_cb = path_cb;
+}
+
+/**
+ * Set a function call when the animation is ready
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @param ready_cb a function call when the animation is ready
+ */
+static inline void lv_anim_set_ready_cb(lv_anim_t * a, lv_anim_ready_cb_t 
ready_cb)
+{
+    a->ready_cb = ready_cb;
+}
+
+/**
+ * Make the animation to play back to when the forward direction is ready
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @param wait_time time in milliseconds to wait before starting the back 
direction
+ */
+static inline void lv_anim_set_playback(lv_anim_t * a, uint16_t wait_time)
+{
+    a->playback       = 1;
+    a->playback_pause = wait_time;
+}
+
+/**
+ * Disable playback. (Disabled after `lv_anim_init()`)
+ * @param a pointer to an initialized `lv_anim_t` variable
+ */
+static inline void lv_anim_clear_playback(lv_anim_t * a)
+{
+    a->playback = 0;
+}
+
+/**
+ * Make the animation to start again when ready.
+ * @param a pointer to an initialized `lv_anim_t` variable
+ * @param wait_time time in milliseconds to wait before starting the animation 
again
+ */
+static inline void lv_anim_set_repeat(lv_anim_t * a, uint16_t wait_time)
+{
+    a->repeat       = 1;
+    a->repeat_pause = wait_time;
+}
+
+/**
+ * Disable repeat. (Disabled after `lv_anim_init()`)
+ * @param a pointer to an initialized `lv_anim_t` variable
+ */
+static inline void lv_anim_clear_repeat(lv_anim_t * a)
+{
+    a->repeat = 0;
+}
+
+/**
+ * Create an animation
+ * @param a an initialized 'anim_t' variable. Not required after call.
+ */
+void lv_anim_create(lv_anim_t * a);
+
+/**
+ * Delete an animation of a variable with a given animator function
+ * @param var pointer to variable
+ * @param exec_cb a function pointer which is animating 'var',
+ *           or NULL to ignore it and delete all the animations of 'var
+ * @return true: at least 1 animation is deleted, false: no animation is 
deleted
+ */
+bool lv_anim_del(void * var, lv_anim_exec_xcb_t exec_cb);
+
+/**
+ * Delete an aniamation by getting the animated variable from `a`.
+ * Only animations with `exec_cb` will be deleted.
+ * This function exist becasue it's logical that all anim functions receives an
+ * `lv_anim_t` as their first parameter. It's not practical in C but might 
makes
+ * the API more conequent and makes easier to genrate bindings.
+ * @param a pointer to an animation.
+ * @param exec_cb a function pointer which is animating 'var',
+ *           or NULL to ignore it and delete all the animations of 'var
+ * @return true: at least 1 animation is deleted, false: no animation is 
deleted
+ */
+static inline bool lv_anim_custom_del(lv_anim_t * a, lv_anim_custom_exec_cb_t 
exec_cb)
+{
+    return lv_anim_del(a->var, (lv_anim_exec_xcb_t)exec_cb);
+}
+
+/**
+ * Get the number of currently running animations
+ * @return the number of running animations
+ */
+uint16_t lv_anim_count_running(void);
+
+/**
+ * Calculate the time of an animation with a given speed and the start and end 
values
+ * @param speed speed of animation in unit/sec
+ * @param start start value of the animation
+ * @param end end value of the animation
+ * @return the required time [ms] for the animation with the given parameters
+ */
+uint16_t lv_anim_speed_to_time(uint16_t speed, lv_anim_value_t start, 
lv_anim_value_t end);
+
+/**
+ * Calculate the current value of an animation applying linear characteristic
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_linear(const lv_anim_t * a);
+
+/**
+ * Calculate the current value of an animation slowing down the start phase
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_ease_in(const lv_anim_t * a);
+
+/**
+ * Calculate the current value of an animation slowing down the end phase
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_ease_out(const lv_anim_t * a);
+
+/**
+ * Calculate the current value of an animation applying an "S" characteristic 
(cosine)
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_ease_in_out(const lv_anim_t * a);
+
+/**
+ * Calculate the current value of an animation with overshoot at the end
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_overshoot(const lv_anim_t * a);
+
+/**
+ * Calculate the current value of an animation with 3 bounces
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_bounce(const lv_anim_t * a);
+
+/**
+ * Calculate the current value of an animation applying step characteristic.
+ * (Set end value on the end of the animation)
+ * @param a pointer to an animation
+ * @return the current value to set
+ */
+lv_anim_value_t lv_anim_path_step(const lv_anim_t * a);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_ANIMATION == 0*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_ANIM_H*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_area.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_area.c
new file mode 100755
index 0000000..de649c5
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_area.c
@@ -0,0 +1,210 @@
+/**
+ * @file lv_area.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include "lv_area.h"
+#include "lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize an area
+ * @param area_p pointer to an area
+ * @param x1 left coordinate of the area
+ * @param y1 top coordinate of the area
+ * @param x2 right coordinate of the area
+ * @param y2 bottom coordinate of the area
+ */
+void lv_area_set(lv_area_t * area_p, lv_coord_t x1, lv_coord_t y1, lv_coord_t 
x2, lv_coord_t y2)
+{
+    area_p->x1 = x1;
+    area_p->y1 = y1;
+    area_p->x2 = x2;
+    area_p->y2 = y2;
+}
+
+/**
+ * Set the width of an area
+ * @param area_p pointer to an area
+ * @param w the new width of the area (w == 1 makes x1 == x2)
+ */
+void lv_area_set_width(lv_area_t * area_p, lv_coord_t w)
+{
+    area_p->x2 = area_p->x1 + w - 1;
+}
+
+/**
+ * Set the height of an area
+ * @param area_p pointer to an area
+ * @param h the new height of the area (h == 1 makes y1 == y2)
+ */
+void lv_area_set_height(lv_area_t * area_p, lv_coord_t h)
+{
+    area_p->y2 = area_p->y1 + h - 1;
+}
+
+/**
+ * Set the position of an area (width and height will be kept)
+ * @param area_p pointer to an area
+ * @param x the new x coordinate of the area
+ * @param y the new y coordinate of the area
+ */
+void lv_area_set_pos(lv_area_t * area_p, lv_coord_t x, lv_coord_t y)
+{
+    lv_coord_t w = lv_area_get_width(area_p);
+    lv_coord_t h = lv_area_get_height(area_p);
+    area_p->x1   = x;
+    area_p->y1   = y;
+    lv_area_set_width(area_p, w);
+    lv_area_set_height(area_p, h);
+}
+
+/**
+ * Return with area of an area (x * y)
+ * @param area_p pointer to an area
+ * @return size of area
+ */
+uint32_t lv_area_get_size(const lv_area_t * area_p)
+{
+    uint32_t size;
+
+    size = (uint32_t)(area_p->x2 - area_p->x1 + 1) * (area_p->y2 - area_p->y1 
+ 1);
+
+    return size;
+}
+
+/**
+ * Get the common parts of two areas
+ * @param res_p pointer to an area, the result will be stored here
+ * @param a1_p pointer to the first area
+ * @param a2_p pointer to the second area
+ * @return false: the two area has NO common parts, res_p is invalid
+ */
+bool lv_area_intersect(lv_area_t * res_p, const lv_area_t * a1_p, const 
lv_area_t * a2_p)
+{
+    /* Get the smaller area from 'a1_p' and 'a2_p' */
+    res_p->x1 = LV_MATH_MAX(a1_p->x1, a2_p->x1);
+    res_p->y1 = LV_MATH_MAX(a1_p->y1, a2_p->y1);
+    res_p->x2 = LV_MATH_MIN(a1_p->x2, a2_p->x2);
+    res_p->y2 = LV_MATH_MIN(a1_p->y2, a2_p->y2);
+
+    /*If x1 or y1 greater then x2 or y2 then the areas union is empty*/
+    bool union_ok = true;
+    if((res_p->x1 > res_p->x2) || (res_p->y1 > res_p->y2)) {
+        union_ok = false;
+    }
+
+    return union_ok;
+}
+/**
+ * Join two areas into a third which involves the other two
+ * @param res_p pointer to an area, the result will be stored here
+ * @param a1_p pointer to the first area
+ * @param a2_p pointer to the second area
+ */
+void lv_area_join(lv_area_t * a_res_p, const lv_area_t * a1_p, const lv_area_t 
* a2_p)
+{
+    a_res_p->x1 = LV_MATH_MIN(a1_p->x1, a2_p->x1);
+    a_res_p->y1 = LV_MATH_MIN(a1_p->y1, a2_p->y1);
+    a_res_p->x2 = LV_MATH_MAX(a1_p->x2, a2_p->x2);
+    a_res_p->y2 = LV_MATH_MAX(a1_p->y2, a2_p->y2);
+}
+
+/**
+ * Check if a point is on an area
+ * @param a_p pointer to an area
+ * @param p_p pointer to a point
+ * @return false:the point is out of the area
+ */
+bool lv_area_is_point_on(const lv_area_t * a_p, const lv_point_t * p_p)
+{
+    bool is_on = false;
+
+    if((p_p->x >= a_p->x1 && p_p->x <= a_p->x2) && ((p_p->y >= a_p->y1 && 
p_p->y <= a_p->y2))) {
+        is_on = true;
+    }
+
+    return is_on;
+}
+
+/**
+ * Check if two area has common parts
+ * @param a1_p pointer to an area.
+ * @param a2_p pointer to an other area
+ * @return false: a1_p and a2_p has no common parts
+ */
+bool lv_area_is_on(const lv_area_t * a1_p, const lv_area_t * a2_p)
+{
+    if((a1_p->x1 <= a2_p->x2) && (a1_p->x2 >= a2_p->x1) && (a1_p->y1 <= 
a2_p->y2) && (a1_p->y2 >= a2_p->y1)) {
+        return true;
+    } else {
+        return false;
+    }
+}
+
+/**
+ * Check if an area is fully on an other
+ * @param ain_p pointer to an area which could be in 'aholder_p'
+ * @param aholder pointer to an area which could involve 'ain_p'
+ * @return
+ */
+bool lv_area_is_in(const lv_area_t * ain_p, const lv_area_t * aholder_p)
+{
+    bool is_in = false;
+
+    if(ain_p->x1 >= aholder_p->x1 && ain_p->y1 >= aholder_p->y1 && ain_p->x2 
<= aholder_p->x2 &&
+       ain_p->y2 <= aholder_p->y2) {
+        is_in = true;
+    }
+
+    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/scriptsrcs/lvgl/src/lv_misc/lv_area.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_area.h
new file mode 100755
index 0000000..211bebd
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_area.h
@@ -0,0 +1,186 @@
+/**
+ * @file lv_area.h
+ *
+ */
+
+#ifndef LV_AREA_H
+#define LV_AREA_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <string.h>
+#include <stdbool.h>
+#include <stdint.h>
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+/*********************
+ *      DEFINES
+ *********************/
+/*To avoid overflow don't let the max ranges (reduce with 1000) */
+#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
+ **********************/
+
+/**
+ * Represents a point on the screen.
+ */
+typedef struct
+{
+    lv_coord_t x;
+    lv_coord_t y;
+} lv_point_t;
+
+/** Represents an area of the screen. */
+typedef struct
+{
+    lv_coord_t x1;
+    lv_coord_t y1;
+    lv_coord_t x2;
+    lv_coord_t y2;
+} lv_area_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize an area
+ * @param area_p pointer to an area
+ * @param x1 left coordinate of the area
+ * @param y1 top coordinate of the area
+ * @param x2 right coordinate of the area
+ * @param y2 bottom coordinate of the area
+ */
+void lv_area_set(lv_area_t * area_p, lv_coord_t x1, lv_coord_t y1, lv_coord_t 
x2, lv_coord_t y2);
+
+/**
+ * Copy an area
+ * @param dest pointer to the destination area
+ * @param src pointer to the source area
+ */
+inline static void lv_area_copy(lv_area_t * dest, const lv_area_t * src)
+{
+    memcpy(dest, src, sizeof(lv_area_t));
+}
+
+/**
+ * Get the width of an area
+ * @param area_p pointer to an area
+ * @return the width of the area (if x1 == x2 -> width = 1)
+ */
+static inline lv_coord_t lv_area_get_width(const lv_area_t * area_p)
+{
+    return (lv_coord_t)(area_p->x2 - area_p->x1 + 1);
+}
+
+/**
+ * Get the height of an area
+ * @param area_p pointer to an area
+ * @return the height of the area (if y1 == y2 -> height = 1)
+ */
+static inline lv_coord_t lv_area_get_height(const lv_area_t * area_p)
+{
+    return (lv_coord_t)(area_p->y2 - area_p->y1 + 1);
+}
+
+/**
+ * Set the width of an area
+ * @param area_p pointer to an area
+ * @param w the new width of the area (w == 1 makes x1 == x2)
+ */
+void lv_area_set_width(lv_area_t * area_p, lv_coord_t w);
+
+/**
+ * Set the height of an area
+ * @param area_p pointer to an area
+ * @param h the new height of the area (h == 1 makes y1 == y2)
+ */
+void lv_area_set_height(lv_area_t * area_p, lv_coord_t h);
+
+/**
+ * Set the position of an area (width and height will be kept)
+ * @param area_p pointer to an area
+ * @param x the new x coordinate of the area
+ * @param y the new y coordinate of the area
+ */
+void lv_area_set_pos(lv_area_t * area_p, lv_coord_t x, lv_coord_t y);
+
+/**
+ * Return with area of an area (x * y)
+ * @param area_p pointer to an area
+ * @return size of area
+ */
+uint32_t lv_area_get_size(const lv_area_t * area_p);
+
+/**
+ * Get the common parts of two areas
+ * @param res_p pointer to an area, the result will be stored her
+ * @param a1_p pointer to the first area
+ * @param a2_p pointer to the second area
+ * @return false: the two area has NO common parts, res_p is invalid
+ */
+bool lv_area_intersect(lv_area_t * res_p, const lv_area_t * a1_p, const 
lv_area_t * a2_p);
+
+/**
+ * Join two areas into a third which involves the other two
+ * @param res_p pointer to an area, the result will be stored here
+ * @param a1_p pointer to the first area
+ * @param a2_p pointer to the second area
+ */
+void lv_area_join(lv_area_t * a_res_p, const lv_area_t * a1_p, const lv_area_t 
* a2_p);
+
+/**
+ * Check if a point is on an area
+ * @param a_p pointer to an area
+ * @param p_p pointer to a point
+ * @return false:the point is out of the area
+ */
+bool lv_area_is_point_on(const lv_area_t * a_p, const lv_point_t * p_p);
+
+/**
+ * Check if two area has common parts
+ * @param a1_p pointer to an area.
+ * @param a2_p pointer to an other area
+ * @return false: a1_p and a2_p has no common parts
+ */
+bool lv_area_is_on(const lv_area_t * a1_p, const lv_area_t * a2_p);
+
+/**
+ * Check if an area is fully on an other
+ * @param ain_p pointer to an area which could be on aholder_p
+ * @param aholder pointer to an area which could involve ain_p
+ * @return
+ */
+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
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_async.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_async.c
new file mode 100755
index 0000000..2a83643
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_async.c
@@ -0,0 +1,75 @@
+/**
+ * @file lv_async.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+
+#include "lv_async.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+static void lv_async_task_cb(lv_task_t *task);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+lv_res_t lv_async_call(lv_async_cb_t async_xcb, void * user_data)
+{
+    /*Allocate an info structure */
+    lv_async_info_t *info = lv_mem_alloc(sizeof(lv_async_info_t));
+    
+    if(info == NULL)
+        return LV_RES_INV;
+    
+    /* Create a new task */
+    /* Use highest priority so that it will run before a refresh */
+    lv_task_t *task = lv_task_create(lv_async_task_cb, 0, 
LV_TASK_PRIO_HIGHEST, info);
+    
+    if(task == NULL) {
+        lv_mem_free(info);
+        return LV_RES_INV;
+    }
+    
+    info->cb = async_xcb;
+    info->user_data = user_data;
+
+    /* Set the task's user data */
+    task->user_data = info;
+    lv_task_once(task);
+    return LV_RES_OK;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+static void lv_async_task_cb(lv_task_t *task)
+{
+    lv_async_info_t *info = (lv_async_info_t *)task->user_data;
+    
+    info->cb(info->user_data);
+    
+    lv_mem_free(info);
+}
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_async.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_async.h
new file mode 100755
index 0000000..9423cd8
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_async.h
@@ -0,0 +1,62 @@
+/**
+ * @file lv_async.h
+ *
+ */
+
+#ifndef LV_ASYNC_H
+#define LV_ASYNC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+
+#include "lv_task.h"
+#include "lv_types.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**
+ * Type for async callback.
+ */
+typedef void (*lv_async_cb_t)(void *);
+
+typedef struct _lv_async_info_t {
+    lv_async_cb_t cb;
+    void *user_data;
+} lv_async_info_t;
+
+struct _lv_obj_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Call an asynchronous function the next time lv_task_handler() is run. This 
function is likely to return
+ * **before** the call actually happens!
+ * @param task_xcb a callback which is the task itself.
+ *                 (the 'x' in the argument name indicates that its not a 
fully generic function because it not follows
+ *                  the `func_name(object, callback, ...)` convention)
+ * @param user_data custom parameter
+ */
+lv_res_t lv_async_call(lv_async_cb_t async_xcb, void * user_data);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_TEMPL_H*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_bidi.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_bidi.c
new file mode 100755
index 0000000..bde7520
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_bidi.c
@@ -0,0 +1,540 @@
+/**
+ * @file lv_bidi.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stddef.h>
+#include "lv_bidi.h"
+#include "lv_txt.h"
+#include "../lv_draw/lv_draw.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
+ **********************/
+
+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';
+}
+
+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;
+}
+
+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;
+}
+
+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;
+}
+
+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*/
+//    if(letter >= 'a' && letter <= 'z') return true;
+
+    return 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;
+}
+
+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_draw_get_buf(len + pos_conv_len * sizeof(uint16_t));
+    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]);
+    return GET_POS(pos_conv_buf[visual_pos]);
+}
+
+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_draw_get_buf(len + pos_conv_len * sizeof(uint16_t));
+    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]);
+            return i;
+        }
+    }
+    return (uint16_t) -1;
+}
+
+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;
+    }
+}
+
+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/scriptsrcs/lvgl/src/lv_misc/lv_bidi.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_bidi.h
new file mode 100755
index 0000000..215727a
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_bidi.h
@@ -0,0 +1,76 @@
+/**
+ * @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 <stdbool.h>
+#include <stdint.h>
+
+/*********************
+ *      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
+
+void lv_bidi_process(const char * str_in, char * str_out, lv_bidi_dir_t 
base_dir);
+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 lv_bidi_get_next_paragraph(const char * txt);
+lv_bidi_dir_t lv_bidi_detect_base_dir(const char * txt);
+lv_bidi_dir_t lv_bidi_get_letter_dir(uint32_t letter);
+bool lv_bidi_letter_is_weak(uint32_t letter);
+bool lv_bidi_letter_is_rtl(uint32_t letter);
+bool lv_bidi_letter_is_neutral(uint32_t letter);
+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);
+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);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_BIDI*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_BIDI_H*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_circ.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_circ.c
new file mode 100755
index 0000000..fc0e3e2
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_circ.c
@@ -0,0 +1,79 @@
+/**
+ * @file lv_circ.c
+ * Circle drawing algorithm (with Bresenham)
+ * Only a 1/8 circle is calculated. Use CIRC_OCT1_X, CIRC_OCT1_Y macros to get
+ * the other octets.
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_circ.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the circle drawing
+ * @param c pointer to a point. The coordinates will be calculated here
+ * @param tmp point to a variable. It will store temporary data
+ * @param radius radius of the circle
+ */
+void lv_circ_init(lv_point_t * c, lv_coord_t * tmp, lv_coord_t radius)
+{
+    c->x = radius;
+    c->y = 0;
+    *tmp = 1 - radius;
+}
+
+/**
+ * Test the circle drawing is ready or not
+ * @param c same as in circ_init
+ * @return true if the circle is not ready yet
+ */
+bool lv_circ_cont(lv_point_t * c)
+{
+    return c->y <= c->x ? true : false;
+}
+
+/**
+ * Get the next point from the circle
+ * @param c same as in circ_init. The next point stored here.
+ * @param tmp same as in circ_init.
+ */
+void lv_circ_next(lv_point_t * c, lv_coord_t * tmp)
+{
+    c->y++;
+
+    if(*tmp <= 0) {
+        (*tmp) += 2 * c->y + 1; /*Change in decision criterion for y -> y+1*/
+    } else {
+        c->x--;
+        (*tmp) += 2 * (c->y - c->x) + 1; /*Change for y -> y+1, x -> x-1*/
+    }
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_circ.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_circ.h
new file mode 100755
index 0000000..405a4b6
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_circ.h
@@ -0,0 +1,77 @@
+/**
+ * @file lv_circ.h
+ *
+ */
+
+#ifndef LV_CIRC_H
+#define LV_CIRC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stddef.h>
+#include "lv_area.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_CIRC_OCT1_X(p) (p.x)
+#define LV_CIRC_OCT1_Y(p) (p.y)
+#define LV_CIRC_OCT2_X(p) (p.y)
+#define LV_CIRC_OCT2_Y(p) (p.x)
+#define LV_CIRC_OCT3_X(p) (-p.y)
+#define LV_CIRC_OCT3_Y(p) (p.x)
+#define LV_CIRC_OCT4_X(p) (-p.x)
+#define LV_CIRC_OCT4_Y(p) (p.y)
+#define LV_CIRC_OCT5_X(p) (-p.x)
+#define LV_CIRC_OCT5_Y(p) (-p.y)
+#define LV_CIRC_OCT6_X(p) (-p.y)
+#define LV_CIRC_OCT6_Y(p) (-p.x)
+#define LV_CIRC_OCT7_X(p) (p.y)
+#define LV_CIRC_OCT7_Y(p) (-p.x)
+#define LV_CIRC_OCT8_X(p) (p.x)
+#define LV_CIRC_OCT8_Y(p) (-p.y)
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the circle drawing
+ * @param c pointer to a point. The coordinates will be calculated here
+ * @param tmp point to a variable. It will store temporary data
+ * @param radius radius of the circle
+ */
+void lv_circ_init(lv_point_t * c, lv_coord_t * tmp, lv_coord_t radius);
+
+/**
+ * Test the circle drawing is ready or not
+ * @param c same as in circ_init
+ * @return true if the circle is not ready yet
+ */
+bool lv_circ_cont(lv_point_t * c);
+
+/**
+ * Get the next point from the circle
+ * @param c same as in circ_init. The next point stored here.
+ * @param tmp same as in circ_init.
+ */
+void lv_circ_next(lv_point_t * c, lv_coord_t * tmp);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_color.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_color.c
new file mode 100755
index 0000000..cd4825d
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_color.c
@@ -0,0 +1,171 @@
+/**
+ * @file lv_color.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_color.h"
+#include "lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Convert a HSV color to RGB
+ * @param h hue [0..359]
+ * @param s saturation [0..100]
+ * @param v value [0..100]
+ * @return the given RGB color in RGB (with LV_COLOR_DEPTH depth)
+ */
+lv_color_t lv_color_hsv_to_rgb(uint16_t h, uint8_t s, uint8_t v)
+{
+    h = (uint32_t)((uint32_t)h * 255) / 360;
+    s = (uint16_t)((uint16_t)s * 255) / 100;
+    v = (uint16_t)((uint16_t)v * 255) / 100;
+
+    uint8_t r, g, b;
+
+    uint8_t region, remainder, p, q, t;
+
+    if(s == 0) {
+        r = v;
+        g = v;
+        b = v;
+        return lv_color_make(v, v, v);
+    }
+
+    region    = h / 43;
+    remainder = (h - (region * 43)) * 6;
+
+    p = (v * (255 - s)) >> 8;
+    q = (v * (255 - ((s * remainder) >> 8))) >> 8;
+    t = (v * (255 - ((s * (255 - remainder)) >> 8))) >> 8;
+
+    switch(region) {
+        case 0:
+            r = v;
+            g = t;
+            b = p;
+            break;
+        case 1:
+            r = q;
+            g = v;
+            b = p;
+            break;
+        case 2:
+            r = p;
+            g = v;
+            b = t;
+            break;
+        case 3:
+            r = p;
+            g = q;
+            b = v;
+            break;
+        case 4:
+            r = t;
+            g = p;
+            b = v;
+            break;
+        default:
+            r = v;
+            g = p;
+            b = q;
+            break;
+    }
+
+    lv_color_t result = lv_color_make(r, g, b);
+    return result;
+}
+
+/**
+ * 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 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;
+
+    // https://en.wikipedia.org/wiki/HSL_and_HSV#Lightness
+    hsv.v = (100 * rgbMax) >> 10;
+
+    int32_t delta = rgbMax - rgbMin;
+    if (LV_MATH_ABS(delta) < 3) {
+        hsv.h = 0;
+        hsv.s = 0;
+        return hsv;
+    }
+
+    // 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)
+        h = (((g - b) << 10) / delta) + (g < b ? (6 << 10) : 0); // between 
yellow & magenta
+    else if(rgbMax == g)
+        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
+        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/scriptsrcs/lvgl/src/lv_misc/lv_color.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_color.h
new file mode 100755
index 0000000..b98ec0b
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_color.h
@@ -0,0 +1,529 @@
+/**
+ * @file lv_color.h
+ *
+ */
+
+#ifndef LV_COLOR_H
+#define LV_COLOR_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+/*Error checking*/
+#if LV_COLOR_DEPTH == 24
+#error "LV_COLOR_DEPTH  24 is deprecated. Use LV_COLOR_DEPTH  32 instead 
(lv_conf.h)"
+#endif
+
+#if LV_COLOR_DEPTH != 32 && LV_COLOR_SCREEN_TRANSP != 0
+#error "LV_COLOR_SCREEN_TRANSP requires LV_COLOR_DEPTH == 32. Set it in 
lv_conf.h"
+#endif
+
+#if LV_COLOR_DEPTH != 16 && LV_COLOR_16_SWAP != 0
+#error "LV_COLOR_16_SWAP requires LV_COLOR_DEPTH == 16. Set it in lv_conf.h"
+#endif
+
+#include <stdint.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_COLOR_WHITE LV_COLOR_MAKE(0xFF, 0xFF, 0xFF)
+#define LV_COLOR_SILVER LV_COLOR_MAKE(0xC0, 0xC0, 0xC0)
+#define LV_COLOR_GRAY LV_COLOR_MAKE(0x80, 0x80, 0x80)
+#define LV_COLOR_BLACK LV_COLOR_MAKE(0x00, 0x00, 0x00)
+#define LV_COLOR_RED LV_COLOR_MAKE(0xFF, 0x00, 0x00)
+#define LV_COLOR_MAROON LV_COLOR_MAKE(0x80, 0x00, 0x00)
+#define LV_COLOR_YELLOW LV_COLOR_MAKE(0xFF, 0xFF, 0x00)
+#define LV_COLOR_OLIVE LV_COLOR_MAKE(0x80, 0x80, 0x00)
+#define LV_COLOR_LIME LV_COLOR_MAKE(0x00, 0xFF, 0x00)
+#define LV_COLOR_GREEN LV_COLOR_MAKE(0x00, 0x80, 0x00)
+#define LV_COLOR_CYAN LV_COLOR_MAKE(0x00, 0xFF, 0xFF)
+#define LV_COLOR_AQUA LV_COLOR_CYAN
+#define LV_COLOR_TEAL LV_COLOR_MAKE(0x00, 0x80, 0x80)
+#define LV_COLOR_BLUE LV_COLOR_MAKE(0x00, 0x00, 0xFF)
+#define LV_COLOR_NAVY LV_COLOR_MAKE(0x00, 0x00, 0x80)
+#define LV_COLOR_MAGENTA LV_COLOR_MAKE(0xFF, 0x00, 0xFF)
+#define LV_COLOR_PURPLE LV_COLOR_MAKE(0x80, 0x00, 0x80)
+#define LV_COLOR_ORANGE LV_COLOR_MAKE(0xFF, 0xA5, 0x00)
+
+/**
+ * Opacity percentages.
+ */
+enum {
+    LV_OPA_TRANSP = 0,
+    LV_OPA_0      = 0,
+    LV_OPA_10     = 25,
+    LV_OPA_20     = 51,
+    LV_OPA_30     = 76,
+    LV_OPA_40     = 102,
+    LV_OPA_50     = 127,
+    LV_OPA_60     = 153,
+    LV_OPA_70     = 178,
+    LV_OPA_80     = 204,
+    LV_OPA_90     = 229,
+    LV_OPA_100    = 255,
+    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*/
+
+#if LV_COLOR_DEPTH == 1
+#define LV_COLOR_SIZE 8
+#elif LV_COLOR_DEPTH == 8
+#define LV_COLOR_SIZE 8
+#elif LV_COLOR_DEPTH == 16
+#define LV_COLOR_SIZE 16
+#elif LV_COLOR_DEPTH == 32
+#define LV_COLOR_SIZE 32
+#else
+#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) & 0x7U;
+# define LV_COLOR_SET_G8(c, v) (c).ch.green = (uint8_t)(v) & 0x7U;
+# define LV_COLOR_SET_B8(c, v) (c).ch.blue = (uint8_t)(v) & 0x3U;
+# 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)(v) & 0x1FU;
+# define LV_COLOR_SET_G16(c, v) (c).ch.green = (uint8_t)(v) & 0x3FU;
+# 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) & 0x1FU;
+# 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
+{
+    struct
+    {
+        uint8_t blue : 1;
+        uint8_t green : 1;
+        uint8_t red : 1;
+    } ch;
+    uint8_t full;
+} lv_color1_t;
+
+typedef union
+{
+    struct
+    {
+        uint8_t blue : 2;
+        uint8_t green : 3;
+        uint8_t red : 3;
+    } ch;
+    uint8_t full;
+} lv_color8_t;
+
+typedef union
+{
+    struct
+    {
+#if LV_COLOR_16_SWAP == 0
+        uint16_t blue : 5;
+        uint16_t green : 6;
+        uint16_t red : 5;
+#else
+        uint16_t green_h : 3;
+        uint16_t red : 5;
+        uint16_t blue : 5;
+        uint16_t green_l : 3;
+#endif
+    } ch;
+    uint16_t full;
+} lv_color16_t;
+
+typedef union
+{
+    struct
+    {
+        uint8_t blue;
+        uint8_t green;
+        uint8_t red;
+        uint8_t alpha;
+    } ch;
+    uint32_t full;
+} lv_color32_t;
+
+#if LV_COLOR_DEPTH == 1
+typedef uint8_t lv_color_int_t;
+typedef lv_color1_t lv_color_t;
+#elif LV_COLOR_DEPTH == 8
+typedef uint8_t lv_color_int_t;
+typedef lv_color8_t lv_color_t;
+#elif LV_COLOR_DEPTH == 16
+typedef uint16_t lv_color_int_t;
+typedef lv_color16_t lv_color_t;
+#elif LV_COLOR_DEPTH == 32
+typedef uint32_t lv_color_int_t;
+typedef lv_color32_t lv_color_t;
+#else
+#error "Invalid LV_COLOR_DEPTH in lv_conf.h! Set it to 1, 8, 16 or 32!"
+#endif
+
+typedef uint8_t lv_opa_t;
+
+typedef struct
+{
+    uint16_t h;
+    uint8_t s;
+    uint8_t v;
+} lv_color_hsv_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/*In color conversations:
+ * - When converting to bigger color type the LSB weight of 1 LSB is calculated
+ *   E.g. 16 bit Red has 5 bits
+ *         8 bit Red has 2 bits
+ *        ----------------------
+ *        8 bit red LSB = (2^5 - 1) / (2^2 - 1) = 31 / 3 = 10
+ *
+ * - When calculating to smaller color type simply shift out the LSBs
+ *   E.g.  8 bit Red has 2 bits
+ *        16 bit Red has 5 bits
+ *        ----------------------
+ *         Shift right with 5 - 3 = 2
+ */
+
+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((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_GET_R(color) & 0x10) || (LV_COLOR_GET_G(color) & 0x20) || 
(LV_COLOR_GET_B(color) & 0x10)) {
+        return 1;
+    } else {
+        return 0;
+    }
+#elif LV_COLOR_DEPTH == 32
+    if((LV_COLOR_GET_R(color) & 0x80) || (LV_COLOR_GET_G(color) & 0x80) || 
(LV_COLOR_GET_B(color) & 0x80)) {
+        return 1;
+    } else {
+        return 0;
+    }
+#endif
+}
+
+static inline uint8_t lv_color_to8(lv_color_t color)
+{
+#if LV_COLOR_DEPTH == 1
+    if(color.full == 0)
+        return 0;
+    else
+        return 0xFF;
+#elif LV_COLOR_DEPTH == 8
+    return color.full;
+#elif LV_COLOR_DEPTH == 16
+    lv_color8_t ret;
+    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;
+#elif LV_COLOR_DEPTH == 32
+    lv_color8_t ret;
+    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;
+    else
+        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
+    LV_COLOR_SET_G16(ret,  LV_COLOR_GET_G(color) * 9); /*(2^6 - 1)/(2^3 - 1) = 
63/7 = 9*/
+#else
+    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
+    LV_COLOR_SET_G16(ret, LV_COLOR_GET_G(color) >> 2); /* 8 - 6  = 2*/
+#else
+    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)
+{
+#if LV_COLOR_DEPTH == 1
+    if(color.full == 0)
+        return 0;
+    else
+        return 0xFFFFFFFF;
+#elif LV_COLOR_DEPTH == 8
+    lv_color32_t ret;
+    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
+    /**
+     * 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;
+    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;
+#elif LV_COLOR_DEPTH == 32
+    return color.full;
+#endif
+}
+
+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*/
+    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;
+#endif
+
+    return ret;
+}
+
+/**
+ * Get the brightness of a color
+ * @param color a color
+ * @return the brightness [0..255]
+ */
+static inline uint8_t lv_color_brightness(lv_color_t color)
+{
+    lv_color32_t c32;
+    c32.full        = lv_color_to32(color);
+    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){.full = ((b8 >> 7) | (g8 >> 7) 
| (r8 >> 7))})
+#elif LV_COLOR_DEPTH == 8
+#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{(b8 >> 6) & 0x3U, (g8 >> 5) & 
0x7U, (r8 >> 5) & 0x7U}})
+#elif LV_COLOR_DEPTH == 16
+#if LV_COLOR_16_SWAP == 0
+#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{(b8 >> 3) & 0x1FU, (g8 >> 2) 
& 0x3FU, (r8 >> 3) & 0x1FU}})
+#else
+#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{(g8 >> 5) & 0x7U, (r8 >> 3) & 
0x1FU, (b8 >> 3) & 0x1FU, (g8 >> 2) & 0x7U}})
+#endif
+#elif LV_COLOR_DEPTH == 32
+#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{b8, g8, r8, 0xff}}) /*Fix 
0xff alpha*/
+#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));
+}
+
+static inline lv_color_t lv_color_hex3(uint32_t c)
+{
+    return lv_color_make((uint8_t)(((c >> 4) & 0xF0) | ((c >> 8) & 0xF)), 
(uint8_t)((c & 0xF0) | ((c & 0xF0) >> 4)),
+                         (uint8_t)((c & 0xF) | ((c & 0xF) << 4)));
+}
+
+/**
+ * Convert a HSV color to RGB
+ * @param h hue [0..359]
+ * @param s saturation [0..100]
+ * @param v value [0..100]
+ * @return the given RGB color in RGB (with LV_COLOR_DEPTH depth)
+ */
+lv_color_t lv_color_hsv_to_rgb(uint16_t h, uint8_t s, uint8_t v);
+
+/**
+ * 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 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
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*USE_COLOR*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_fs.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_fs.c
new file mode 100755
index 0000000..a23081c
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_fs.c
@@ -0,0 +1,642 @@
+/**
+ * @file lv_fs.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_fs.h"
+#if LV_USE_FILESYSTEM
+
+#include "../lv_core/lv_debug.h"
+#include "lv_ll.h"
+#include <string.h>
+#include "lv_gc.h"
+
+#if defined(LV_GC_INCLUDE)
+#include LV_GC_INCLUDE
+#endif /* LV_ENABLE_GC */
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/* "free" is used as a function pointer (in lv_fs_drv_t).
+ * We must make sure "free" was not defined to a platform specific
+ * free function, otherwise compilation would fail.
+ */
+#ifdef free
+#undef free
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static const char * lv_fs_get_real_path(const char * path);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the File system interface
+ */
+void lv_fs_init(void)
+{
+    lv_ll_init(&LV_GC_ROOT(_lv_drv_ll), sizeof(lv_fs_drv_t));
+}
+
+/**
+ * Test if a drive is rady or not. If the `ready` function was not initialized 
`true` will be
+ * returned.
+ * @param letter letter of the drive
+ * @return true: drive is ready; false: drive is not ready
+ */
+bool lv_fs_is_ready(char letter)
+{
+    lv_fs_drv_t * drv = lv_fs_get_drv(letter);
+
+    if(drv == NULL) return false; /*An unknown driver in not ready*/
+
+    if(drv->ready_cb == NULL) return true; /*Assume the driver is always ready 
if no handler provided*/
+
+    return drv->ready_cb(drv);
+}
+
+/**
+ * Open a file
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @param path path to the file beginning with the driver letter (e.g. 
S:/folder/file.txt)
+ * @param mode read: FS_MODE_RD, write: FS_MODE_WR, both: FS_MODE_RD | 
FS_MODE_WR
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_mode_t 
mode)
+{
+    file_p->drv    = NULL;
+    file_p->file_d = NULL;
+
+    if(path == NULL) return LV_FS_RES_INV_PARAM;
+
+    char letter = path[0];
+
+    file_p->drv = lv_fs_get_drv(letter);
+
+    if(file_p->drv == NULL) {
+        file_p->file_d = NULL;
+        return LV_FS_RES_NOT_EX;
+    }
+
+    if(file_p->drv->ready_cb != NULL) {
+        if(file_p->drv->ready_cb(file_p->drv) == false) {
+            file_p->drv    = NULL;
+            file_p->file_d = NULL;
+            return LV_FS_RES_HW_ERR;
+        }
+    }
+
+    file_p->file_d = lv_mem_alloc(file_p->drv->file_size);
+    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 */
+    }
+
+    if(file_p->drv->open_cb == NULL) {
+        return LV_FS_RES_NOT_IMP;
+    }
+
+    const char * real_path = lv_fs_get_real_path(path);
+    lv_fs_res_t res        = file_p->drv->open_cb(file_p->drv, file_p->file_d, 
real_path, mode);
+
+    if(res != LV_FS_RES_OK) {
+        lv_mem_free(file_p->file_d);
+        file_p->file_d = NULL;
+        file_p->drv    = NULL;
+    }
+
+    return res;
+}
+
+/**
+ * Close an already opened file
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @return  LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_close(lv_fs_file_t * file_p)
+{
+    if(file_p->drv == NULL) {
+        return LV_FS_RES_INV_PARAM;
+    }
+
+    if(file_p->drv->close_cb == NULL) {
+        return LV_FS_RES_NOT_IMP;
+    }
+
+    lv_fs_res_t res = file_p->drv->close_cb(file_p->drv, file_p->file_d);
+
+    lv_mem_free(file_p->file_d); /*Clean up*/
+    file_p->file_d = NULL;
+    file_p->drv    = NULL;
+    file_p->file_d = NULL;
+
+    return res;
+}
+
+/**
+ * Delete a file
+ * @param path path of the file to delete
+ * @return  LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_remove(const char * path)
+{
+    if(path == NULL) return LV_FS_RES_INV_PARAM;
+    lv_fs_drv_t * drv = NULL;
+
+    char letter = path[0];
+
+    drv = lv_fs_get_drv(letter);
+    if(drv == NULL) return LV_FS_RES_NOT_EX;
+    if(drv->ready_cb != NULL) {
+        if(drv->ready_cb(drv) == false) return LV_FS_RES_HW_ERR;
+    }
+
+    if(drv->remove_cb == NULL) return LV_FS_RES_NOT_IMP;
+
+    const char * real_path = lv_fs_get_real_path(path);
+    lv_fs_res_t res        = drv->remove_cb(drv, real_path);
+
+    return res;
+}
+
+/**
+ * Read from a file
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @param buf pointer to a buffer where the read bytes are stored
+ * @param btr Bytes To Read
+ * @param br the number of real read bytes (Bytes Read). NULL if unused.
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_read(lv_fs_file_t * file_p, void * buf, uint32_t btr, 
uint32_t * br)
+{
+    if(br != NULL) *br = 0;
+    if(file_p->drv == NULL) return LV_FS_RES_INV_PARAM;
+    if(file_p->drv->read_cb == NULL) return LV_FS_RES_NOT_IMP;
+
+    uint32_t br_tmp = 0;
+    lv_fs_res_t res = file_p->drv->read_cb(file_p->drv, file_p->file_d, buf, 
btr, &br_tmp);
+    if(br != NULL) *br = br_tmp;
+
+    return res;
+}
+
+/**
+ * Write into a file
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @param buf pointer to a buffer with the bytes to write
+ * @param btr Bytes To Write
+ * @param br the number of real written bytes (Bytes Written). NULL if unused.
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_write(lv_fs_file_t * file_p, const void * buf, uint32_t btw, 
uint32_t * bw)
+{
+    if(bw != NULL) *bw = 0;
+
+    if(file_p->drv == NULL) {
+        return LV_FS_RES_INV_PARAM;
+    }
+
+    if(file_p->drv->write_cb == NULL) {
+        return LV_FS_RES_NOT_IMP;
+    }
+
+    uint32_t bw_tmp = 0;
+    lv_fs_res_t res = file_p->drv->write_cb(file_p->drv, file_p->file_d, buf, 
btw, &bw_tmp);
+    if(bw != NULL) *bw = bw_tmp;
+
+    return res;
+}
+
+/**
+ * Set the position of the 'cursor' (read write pointer) in a file
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @param pos the new position expressed in bytes index (0: start of file)
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_seek(lv_fs_file_t * file_p, uint32_t pos)
+{
+    if(file_p->drv == NULL) {
+        return LV_FS_RES_INV_PARAM;
+    }
+
+    if(file_p->drv->seek_cb == NULL) {
+        return LV_FS_RES_NOT_IMP;
+    }
+
+    lv_fs_res_t res = file_p->drv->seek_cb(file_p->drv, file_p->file_d, pos);
+
+    return res;
+}
+
+/**
+ * Give the position of the read write pointer
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @param pos_p pointer to store the position of the read write pointer
+ * @return LV_FS_RES_OK or any error from 'fs_res_t'
+ */
+lv_fs_res_t lv_fs_tell(lv_fs_file_t * file_p, uint32_t * pos)
+{
+    if(file_p->drv == NULL) {
+        pos = 0;
+        return LV_FS_RES_INV_PARAM;
+    }
+
+    if(file_p->drv->tell_cb == NULL) {
+        pos = 0;
+        return LV_FS_RES_NOT_IMP;
+    }
+
+    lv_fs_res_t res = file_p->drv->tell_cb(file_p->drv, file_p->file_d, pos);
+
+    return res;
+}
+
+/**
+ * Truncate the file size to the current position of the read write pointer
+ * @param file_p pointer to an 'ufs_file_t' variable. (opened with lv_fs_open )
+ * @return LV_FS_RES_OK: no error, the file is read
+ *         any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_trunc(lv_fs_file_t * file_p)
+{
+    if(file_p->drv == NULL) {
+        return LV_FS_RES_INV_PARAM;
+    }
+
+    if(file_p->drv->tell_cb == NULL) {
+        return LV_FS_RES_NOT_IMP;
+    }
+
+    lv_fs_res_t res = file_p->drv->trunc_cb(file_p->drv, file_p->file_d);
+
+    return res;
+}
+/**
+ * Give the size of a file bytes
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @param size pointer to a variable to store the size
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_size(lv_fs_file_t * file_p, uint32_t * size)
+{
+    if(file_p->drv == NULL) {
+        return LV_FS_RES_INV_PARAM;
+    }
+
+    if(file_p->drv->size_cb == NULL) return LV_FS_RES_NOT_IMP;
+
+    if(size == NULL) return LV_FS_RES_INV_PARAM;
+
+    lv_fs_res_t res = file_p->drv->size_cb(file_p->drv, file_p->file_d, size);
+
+    return res;
+}
+
+/**
+ * Rename a file
+ * @param oldname path to the file
+ * @param newname path with the new name
+ * @return LV_FS_RES_OK or any error from 'fs_res_t'
+ */
+lv_fs_res_t lv_fs_rename(const char * oldname, const char * newname)
+{
+    if(!oldname || !newname) return LV_FS_RES_INV_PARAM;
+
+    char letter = oldname[0];
+
+    lv_fs_drv_t * drv = lv_fs_get_drv(letter);
+
+    if(!drv) {
+        return LV_FS_RES_NOT_EX;
+    }
+
+    if(drv->ready_cb != NULL) {
+        if(drv->ready_cb(drv) == false) {
+            return LV_FS_RES_HW_ERR;
+        }
+    }
+
+    if(drv->rename_cb == NULL) return LV_FS_RES_NOT_IMP;
+
+    const char * old_real = lv_fs_get_real_path(oldname);
+    const char * new_real = lv_fs_get_real_path(newname);
+
+    lv_fs_res_t res = drv->rename_cb(drv, old_real, new_real);
+
+    return res;
+}
+
+/**
+ * Initialize a 'fs_read_dir_t' variable for directory reading
+ * @param rddir_p pointer to a 'fs_read_dir_t' variable
+ * @param path path to a directory
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_dir_open(lv_fs_dir_t * rddir_p, const char * path)
+{
+    if(path == NULL) return LV_FS_RES_INV_PARAM;
+
+    char letter = path[0];
+
+    rddir_p->drv = lv_fs_get_drv(letter);
+
+    if(rddir_p->drv == NULL) {
+        rddir_p->dir_d = NULL;
+        return LV_FS_RES_NOT_EX;
+    }
+
+    rddir_p->dir_d = lv_mem_alloc(rddir_p->drv->rddir_size);
+    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 */
+    }
+
+    if(rddir_p->drv->dir_open_cb == NULL) {
+        return LV_FS_RES_NOT_IMP;
+    }
+
+    const char * real_path = lv_fs_get_real_path(path);
+
+    lv_fs_res_t res = rddir_p->drv->dir_open_cb(rddir_p->drv, rddir_p->dir_d, 
real_path);
+
+    return res;
+}
+
+/**
+ * Read the next filename form a directory.
+ * The name of the directories will begin with '/'
+ * @param rddir_p pointer to an initialized 'fs_read_dir_t' variable
+ * @param fn pointer to a buffer to store the filename
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_dir_read(lv_fs_dir_t * rddir_p, char * fn)
+{
+    if(rddir_p->drv == NULL || rddir_p->dir_d == NULL) {
+        fn[0] = '\0';
+        return LV_FS_RES_INV_PARAM;
+    }
+
+    if(rddir_p->drv->dir_read_cb == NULL) {
+        return LV_FS_RES_NOT_IMP;
+    }
+
+    lv_fs_res_t res = rddir_p->drv->dir_read_cb(rddir_p->drv, rddir_p->dir_d, 
fn);
+
+    return res;
+}
+
+/**
+ * Close the directory reading
+ * @param rddir_p pointer to an initialized 'fs_read_dir_t' variable
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_dir_close(lv_fs_dir_t * rddir_p)
+{
+    if(rddir_p->drv == NULL || rddir_p->dir_d == NULL) {
+        return LV_FS_RES_INV_PARAM;
+    }
+
+    lv_fs_res_t res;
+
+    if(rddir_p->drv->dir_close_cb == NULL) {
+        res = LV_FS_RES_NOT_IMP;
+    } else {
+        res = rddir_p->drv->dir_close_cb(rddir_p->drv, rddir_p->dir_d);
+    }
+
+    lv_mem_free(rddir_p->dir_d); /*Clean up*/
+    rddir_p->dir_d = NULL;
+    rddir_p->drv   = NULL;
+    rddir_p->dir_d = NULL;
+
+    return res;
+}
+
+/**
+ * Get the free and total size of a driver in kB
+ * @param letter the driver letter
+ * @param total_p pointer to store the total size [kB]
+ * @param free_p pointer to store the free size_cb [kB]
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_free_space(char letter, uint32_t * total_p, uint32_t * 
free_p)
+{
+    lv_fs_drv_t * drv = lv_fs_get_drv(letter);
+
+    if(drv == NULL) {
+        return LV_FS_RES_INV_PARAM;
+    }
+
+    lv_fs_res_t res;
+
+    if(drv->free_space_cb == NULL) {
+        res = LV_FS_RES_NOT_IMP;
+    } else {
+        uint32_t total_tmp = 0;
+        uint32_t free_tmp  = 0;
+        res                = drv->free_space_cb(drv, &total_tmp, &free_tmp);
+
+        if(total_p != NULL) *total_p = total_tmp;
+        if(free_p != NULL) *free_p = free_tmp;
+    }
+
+    return res;
+}
+
+/**
+ * Initialize a file system driver with default values.
+ * It is used to surly have known values in the fields ant not memory junk.
+ * After it you can set the fields.
+ * @param drv pointer to driver variable to initialize
+ */
+void lv_fs_drv_init(lv_fs_drv_t * drv)
+{
+    memset(drv, 0, sizeof(lv_fs_drv_t));
+}
+
+/**
+ * Add a new drive
+ * @param drv_p pointer to an lv_fs_drv_t structure which is inited with the
+ * corresponding function pointers. The data will be copied so the variable 
can be local.
+ */
+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_ASSERT_MEM(new_drv);
+    if(new_drv == NULL) return;
+
+    memcpy(new_drv, drv_p, sizeof(lv_fs_drv_t));
+}
+
+/**
+ * Give a pointer to a driver from its letter
+ * @param letter the driver letter
+ * @return pointer to a driver or NULL if not found
+ */
+lv_fs_drv_t * lv_fs_get_drv(char letter)
+{
+    lv_fs_drv_t * drv;
+
+    LV_LL_READ(LV_GC_ROOT(_lv_drv_ll), drv)
+    {
+        if(drv->letter == letter) {
+            return drv;
+        }
+    }
+
+    return NULL;
+}
+/**
+ * Fill a buffer with the letters of existing drivers
+ * @param buf buffer to store the letters ('\0' added after the last letter)
+ * @return the buffer
+ */
+char * lv_fs_get_letters(char * buf)
+{
+    lv_fs_drv_t * drv;
+    uint8_t i = 0;
+
+    LV_LL_READ(LV_GC_ROOT(_lv_drv_ll), drv)
+    {
+        buf[i] = drv->letter;
+        i++;
+    }
+
+    buf[i] = '\0';
+
+    return buf;
+}
+
+/**
+ * Return with the extension of the filename
+ * @param fn string with a filename
+ * @return pointer to the beginning extension or empty string if no extension
+ */
+const char * lv_fs_get_ext(const char * fn)
+{
+    size_t i;
+    for(i = strlen(fn); i > 0; i--) {
+        if(fn[i] == '.') {
+            return &fn[i + 1];
+        } else if(fn[i] == '/' || fn[i] == '\\') {
+            return ""; /*No extension if a '\' or '/' found*/
+        }
+    }
+
+    return ""; /*Empty string if no '.' in the file name. */
+}
+
+/**
+ * Step up one level
+ * @param path pointer to a file name
+ * @return the truncated file name
+ */
+char * lv_fs_up(char * path)
+{
+    size_t len = strlen(path);
+    if(len == 0) return path;
+
+    len--; /*Go before the trailing '\0'*/
+
+    /*Ignore trailing '/' or '\'*/
+    while(path[len] == '/' || path[len] == '\\') {
+        path[len] = '\0';
+        if(len > 0)
+            len--;
+        else
+            return path;
+    }
+
+    size_t i;
+    for(i = len; i > 0; i--) {
+        if(path[i] == '/' || path[i] == '\\') break;
+    }
+
+    if(i > 0) path[i] = '\0';
+
+    return path;
+}
+
+/**
+ * Get the last element of a path (e.g. U:/folder/file -> file)
+ * @param path a character sting with the path to search in
+ * @return pointer to the beginning of the last element in the path
+ */
+const char * lv_fs_get_last(const char * path)
+{
+    size_t len = strlen(path);
+    if(len == 0) return path;
+
+    len--; /*Go before the trailing '\0'*/
+
+    /*Ignore trailing '/' or '\'*/
+    while(path[len] == '/' || path[len] == '\\') {
+        if(len > 0)
+            len--;
+        else
+            return path;
+    }
+
+    size_t i;
+    for(i = len; i > 0; i--) {
+        if(path[i] == '/' || path[i] == '\\') break;
+    }
+
+    /*No '/' or '\' in the path so return with path itself*/
+    if(i == 0) return path;
+
+    return &path[i + 1];
+}
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Leave the driver letters and / or \ letters from beginning of the path
+ * @param path path string (E.g. S:/folder/file.txt)
+ * @return pointer to the beginning of the real path (E.g. folder/file.txt)
+ */
+static const char * lv_fs_get_real_path(const char * path)
+{
+    /* Example path: "S:/folder/file.txt"
+     * Leave the letter and the : / \ characters*/
+
+    path++; /*Ignore the driver letter*/
+
+    while(*path != '\0') {
+        if(*path == ':' || *path == '\\' || *path == '/') {
+            path++;
+        } else {
+            break;
+        }
+    }
+
+    return path;
+}
+
+#endif /*LV_USE_FILESYSTEM*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_fs.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_fs.h
new file mode 100755
index 0000000..f182428
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_fs.h
@@ -0,0 +1,299 @@
+/**
+ * @file lv_fs.h
+ *
+ */
+
+#ifndef LV_FS_H
+#define LV_FS_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_FILESYSTEM
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "lv_mem.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_FS_MAX_FN_LENGTH 64
+#define LV_FS_MAX_PATH_LENGTH 256
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+/**
+ * Errors in the filesystem module.
+ */
+enum {
+    LV_FS_RES_OK = 0,
+    LV_FS_RES_HW_ERR,     /*Low level hardware error*/
+    LV_FS_RES_FS_ERR,     /*Error in the file system structure */
+    LV_FS_RES_NOT_EX,     /*Driver, file or directory is not exists*/
+    LV_FS_RES_FULL,       /*Disk full*/
+    LV_FS_RES_LOCKED,     /*The file is already opened*/
+    LV_FS_RES_DENIED,     /*Access denied. Check 'fs_open' modes and write 
protect*/
+    LV_FS_RES_BUSY,       /*The file system now can't handle it, try later*/
+    LV_FS_RES_TOUT,       /*Process time outed*/
+    LV_FS_RES_NOT_IMP,    /*Requested function is not implemented*/
+    LV_FS_RES_OUT_OF_MEM, /*Not enough memory for an internal operation*/
+    LV_FS_RES_INV_PARAM,  /*Invalid parameter among arguments*/
+    LV_FS_RES_UNKNOWN,    /*Other unknown error*/
+};
+typedef uint8_t lv_fs_res_t;
+
+/**
+ * Filesystem mode.
+ */
+enum {
+    LV_FS_MODE_WR = 0x01,
+    LV_FS_MODE_RD = 0x02,
+};
+typedef uint8_t lv_fs_mode_t;
+
+typedef struct _lv_fs_drv_t
+{
+    char letter;
+    uint16_t file_size;
+    uint16_t rddir_size;
+    bool (*ready_cb)(struct _lv_fs_drv_t * drv);
+
+    lv_fs_res_t (*open_cb)(struct _lv_fs_drv_t * drv, void * file_p, const 
char * path, lv_fs_mode_t mode);
+    lv_fs_res_t (*close_cb)(struct _lv_fs_drv_t * drv, void * file_p);
+    lv_fs_res_t (*remove_cb)(struct _lv_fs_drv_t * drv, const char * fn);
+    lv_fs_res_t (*read_cb)(struct _lv_fs_drv_t * drv, void * file_p, void * 
buf, uint32_t btr, uint32_t * br);
+    lv_fs_res_t (*write_cb)(struct _lv_fs_drv_t * drv, void * file_p, const 
void * buf, uint32_t btw, uint32_t * bw);
+    lv_fs_res_t (*seek_cb)(struct _lv_fs_drv_t * drv, void * file_p, uint32_t 
pos);
+    lv_fs_res_t (*tell_cb)(struct _lv_fs_drv_t * drv, void * file_p, uint32_t 
* pos_p);
+    lv_fs_res_t (*trunc_cb)(struct _lv_fs_drv_t * drv, void * file_p);
+    lv_fs_res_t (*size_cb)(struct _lv_fs_drv_t * drv, void * file_p, uint32_t 
* size_p);
+    lv_fs_res_t (*rename_cb)(struct _lv_fs_drv_t * drv, const char * oldname, 
const char * newname);
+    lv_fs_res_t (*free_space_cb)(struct _lv_fs_drv_t * drv, uint32_t * 
total_p, uint32_t * free_p);
+
+    lv_fs_res_t (*dir_open_cb)(struct _lv_fs_drv_t * drv, void * rddir_p, 
const char * path);
+    lv_fs_res_t (*dir_read_cb)(struct _lv_fs_drv_t * drv, void * rddir_p, char 
* fn);
+    lv_fs_res_t (*dir_close_cb)(struct _lv_fs_drv_t * drv, void * rddir_p);
+
+#if LV_USE_USER_DATA
+    lv_fs_drv_user_data_t user_data; /**< Custom file user data */
+#endif
+} lv_fs_drv_t;
+
+typedef struct
+{
+    void * file_d;
+    lv_fs_drv_t * drv;
+} lv_fs_file_t;
+
+typedef struct
+{
+    void * dir_d;
+    lv_fs_drv_t * drv;
+} lv_fs_dir_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the File system interface
+ */
+void lv_fs_init(void);
+
+/**
+ * Initialize a file system driver with default values.
+ * It is used to surly have known values in the fields ant not memory junk.
+ * After it you can set the fields.
+ * @param drv pointer to driver variable to initialize
+ */
+void lv_fs_drv_init(lv_fs_drv_t * drv);
+
+/**
+ * Add a new drive
+ * @param drv_p pointer to an lv_fs_drv_t structure which is inited with the
+ * corresponding function pointers. The data will be copied so the variable 
can be local.
+ */
+void lv_fs_drv_register(lv_fs_drv_t * drv_p);
+
+/**
+ * Give a pointer to a driver from its letter
+ * @param letter the driver letter
+ * @return pointer to a driver or NULL if not found
+ */
+lv_fs_drv_t * lv_fs_get_drv(char letter);
+
+/**
+ * Test if a drive is rady or not. If the `ready` function was not initialized 
`true` will be
+ * returned.
+ * @param letter letter of the drive
+ * @return true: drive is ready; false: drive is not ready
+ */
+bool lv_fs_is_ready(char letter);
+
+/**
+ * Open a file
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @param path path to the file beginning with the driver letter (e.g. 
S:/folder/file.txt)
+ * @param mode read: FS_MODE_RD, write: FS_MODE_WR, both: FS_MODE_RD | 
FS_MODE_WR
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_mode_t 
mode);
+
+/**
+ * Close an already opened file
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @return  LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_close(lv_fs_file_t * file_p);
+
+/**
+ * Delete a file
+ * @param path path of the file to delete
+ * @return  LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_remove(const char * path);
+
+/**
+ * Read from a file
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @param buf pointer to a buffer where the read bytes are stored
+ * @param btr Bytes To Read
+ * @param br the number of real read bytes (Bytes Read). NULL if unused.
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_read(lv_fs_file_t * file_p, void * buf, uint32_t btr, 
uint32_t * br);
+
+/**
+ * Write into a file
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @param buf pointer to a buffer with the bytes to write
+ * @param btr Bytes To Write
+ * @param br the number of real written bytes (Bytes Written). NULL if unused.
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_write(lv_fs_file_t * file_p, const void * buf, uint32_t btw, 
uint32_t * bw);
+
+/**
+ * Set the position of the 'cursor' (read write pointer) in a file
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @param pos the new position expressed in bytes index (0: start of file)
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_seek(lv_fs_file_t * file_p, uint32_t pos);
+
+/**
+ * Give the position of the read write pointer
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @param pos_p pointer to store the position of the read write pointer
+ * @return LV_FS_RES_OK or any error from 'fs_res_t'
+ */
+lv_fs_res_t lv_fs_tell(lv_fs_file_t * file_p, uint32_t * pos);
+
+/**
+ * Truncate the file size to the current position of the read write pointer
+ * @param file_p pointer to an 'ufs_file_t' variable. (opened with lv_fs_open )
+ * @return LV_FS_RES_OK: no error, the file is read
+ *         any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_trunc(lv_fs_file_t * file_p);
+
+/**
+ * Give the size of a file bytes
+ * @param file_p pointer to a lv_fs_file_t variable
+ * @param size pointer to a variable to store the size
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_size(lv_fs_file_t * file_p, uint32_t * size);
+
+/**
+ * Rename a file
+ * @param oldname path to the file
+ * @param newname path with the new name
+ * @return LV_FS_RES_OK or any error from 'fs_res_t'
+ */
+lv_fs_res_t lv_fs_rename(const char * oldname, const char * newname);
+
+/**
+ * Initialize a 'fs_dir_t' variable for directory reading
+ * @param rddir_p pointer to a 'fs_read_dir_t' variable
+ * @param path path to a directory
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_dir_open(lv_fs_dir_t * rddir_p, const char * path);
+
+/**
+ * Read the next filename form a directory.
+ * The name of the directories will begin with '/'
+ * @param rddir_p pointer to an initialized 'fs_rdir_t' variable
+ * @param fn pointer to a buffer to store the filename
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_dir_read(lv_fs_dir_t * rddir_p, char * fn);
+
+/**
+ * Close the directory reading
+ * @param rddir_p pointer to an initialized 'fs_dir_t' variable
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_dir_close(lv_fs_dir_t * rddir_p);
+
+/**
+ * Get the free and total size of a driver in kB
+ * @param letter the driver letter
+ * @param total_p pointer to store the total size [kB]
+ * @param free_p pointer to store the free size [kB]
+ * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
+ */
+lv_fs_res_t lv_fs_free_space(char letter, uint32_t * total_p, uint32_t * 
free_p);
+
+/**
+ * Fill a buffer with the letters of existing drivers
+ * @param buf buffer to store the letters ('\0' added after the last letter)
+ * @return the buffer
+ */
+char * lv_fs_get_letters(char * buf);
+
+/**
+ * Return with the extension of the filename
+ * @param fn string with a filename
+ * @return pointer to the beginning extension or empty string if no extension
+ */
+const char * lv_fs_get_ext(const char * fn);
+
+/**
+ * Step up one level
+ * @param path pointer to a file name
+ * @return the truncated file name
+ */
+char * lv_fs_up(char * path);
+
+/**
+ * Get the last element of a path (e.g. U:/folder/file -> file)
+ * @param buf buffer to store the letters ('\0' added after the last letter)
+ * @return pointer to the beginning of the last element in the path
+ */
+const char * lv_fs_get_last(const char * path);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_FILESYSTEM*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_FS_H*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_gc.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_gc.c
new file mode 100755
index 0000000..70dfc9a
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_gc.c
@@ -0,0 +1,40 @@
+/**
+ * @file lv_gc.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+
+#include "lv_gc.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+#if(!defined(LV_ENABLE_GC)) || LV_ENABLE_GC == 0
+LV_ROOTS
+#endif /* LV_ENABLE_GC */
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_gc.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_gc.h
new file mode 100755
index 0000000..0db9f5c
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_gc.h
@@ -0,0 +1,74 @@
+/**
+ * @file lv_gc.h
+ *
+ */
+
+#ifndef LV_GC_H
+#define LV_GC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "lv_mem.h"
+#include "lv_ll.h"
+#include "../lv_draw/lv_img_cache.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+#define LV_GC_ROOTS(prefix)                                                    
                                        \
+    prefix lv_ll_t _lv_task_ll;  /*Linked list to store the lv_tasks*/         
                                        \
+    prefix lv_ll_t _lv_disp_ll;  /*Linked list of screens*/                    
                                        \
+    prefix lv_ll_t _lv_indev_ll; /*Linked list of screens*/                    
                                        \
+    prefix lv_ll_t _lv_drv_ll;                                                 
                                        \
+    prefix lv_ll_t _lv_file_ll;                                                
                                        \
+    prefix lv_ll_t _lv_anim_ll;                                                
                                        \
+    prefix lv_ll_t _lv_group_ll;                                               
                                        \
+    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; 
+
+#define LV_NO_PREFIX
+#define LV_ROOTS LV_GC_ROOTS(LV_NO_PREFIX)
+
+#if LV_ENABLE_GC == 1
+#if LV_MEM_CUSTOM != 1
+#error "GC requires CUSTOM_MEM"
+#endif /* LV_MEM_CUSTOM */
+#else  /* LV_ENABLE_GC */
+#define LV_GC_ROOT(x) x
+LV_GC_ROOTS(extern)
+#endif /* LV_ENABLE_GC */
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_GC_H*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_ll.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_ll.c
new file mode 100755
index 0000000..9952665
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_ll.c
@@ -0,0 +1,422 @@
+/**
+ * @file lv_ll.c
+ * Handle linked lists.
+ * The nodes are dynamically allocated by the 'lv_mem' module,
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stdint.h>
+#include <string.h>
+
+#include "lv_ll.h"
+#include "lv_mem.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LL_NODE_META_SIZE (sizeof(lv_ll_node_t *) + sizeof(lv_ll_node_t *))
+#define LL_PREV_P_OFFSET(ll_p) (ll_p->n_size)
+#define LL_NEXT_P_OFFSET(ll_p) (ll_p->n_size + sizeof(lv_ll_node_t *))
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static void node_set_prev(lv_ll_t * ll_p, lv_ll_node_t * act, lv_ll_node_t * 
prev);
+static void node_set_next(lv_ll_t * ll_p, lv_ll_node_t * act, lv_ll_node_t * 
next);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize linked list
+ * @param ll_dsc pointer to ll_dsc variable
+ * @param node_size the size of 1 node in bytes
+ */
+void lv_ll_init(lv_ll_t * ll_p, uint32_t node_size)
+{
+    ll_p->head = NULL;
+    ll_p->tail = NULL;
+#ifdef LV_MEM_ENV64
+    /*Round the size up to 8*/
+    if(node_size & 0x7) {
+        node_size = node_size & (~0x7);
+        node_size += 8;
+    }
+#else
+    /*Round the size up to 4*/
+    if(node_size & 0x3) {
+        node_size = node_size & (~0x3);
+        node_size += 4;
+    }
+#endif
+
+    ll_p->n_size = node_size;
+}
+
+/**
+ * Add a new head to a linked list
+ * @param ll_p pointer to linked list
+ * @return pointer to the new head
+ */
+void * lv_ll_ins_head(lv_ll_t * ll_p)
+{
+    lv_ll_node_t * n_new;
+
+    n_new = lv_mem_alloc(ll_p->n_size + LL_NODE_META_SIZE);
+
+    if(n_new != NULL) {
+        node_set_prev(ll_p, n_new, NULL);       /*No prev. before the new 
head*/
+        node_set_next(ll_p, n_new, ll_p->head); /*After new comes the old 
head*/
+
+        if(ll_p->head != NULL) { /*If there is old head then before it goes 
the new*/
+            node_set_prev(ll_p, ll_p->head, n_new);
+        }
+
+        ll_p->head = n_new;      /*Set the new head in the dsc.*/
+        if(ll_p->tail == NULL) { /*If there is no tail (1. node) set the tail 
too*/
+            ll_p->tail = n_new;
+        }
+    }
+
+    return n_new;
+}
+
+/**
+ * Insert a new node in front of the n_act node
+ * @param ll_p pointer to linked list
+ * @param n_act pointer a node
+ * @return pointer to the new head
+ */
+void * lv_ll_ins_prev(lv_ll_t * ll_p, void * n_act)
+{
+    lv_ll_node_t * n_new;
+    lv_ll_node_t * n_prev;
+
+    if(NULL == ll_p || NULL == n_act) return NULL;
+
+    if(lv_ll_get_head(ll_p) == n_act) {
+        n_new = lv_ll_ins_head(ll_p);
+        if(n_new == NULL) return NULL;
+    } else {
+        n_new = lv_mem_alloc(ll_p->n_size + LL_NODE_META_SIZE);
+        if(n_new == NULL) return NULL;
+
+        n_prev = lv_ll_get_prev(ll_p, n_act);
+        node_set_next(ll_p, n_prev, n_new);
+        node_set_prev(ll_p, n_new, n_prev);
+        node_set_prev(ll_p, n_act, n_new);
+        node_set_next(ll_p, n_new, n_act);
+    }
+
+    return n_new;
+}
+
+/**
+ * Add a new tail to a linked list
+ * @param ll_p pointer to linked list
+ * @return pointer to the new tail
+ */
+void * lv_ll_ins_tail(lv_ll_t * ll_p)
+{
+    lv_ll_node_t * n_new;
+
+    n_new = lv_mem_alloc(ll_p->n_size + LL_NODE_META_SIZE);
+    if(n_new == NULL) return NULL;
+
+    if(n_new != NULL) {
+        node_set_next(ll_p, n_new, NULL);       /*No next after the new tail*/
+        node_set_prev(ll_p, n_new, ll_p->tail); /*The prev. before new is tho 
old tail*/
+        if(ll_p->tail != NULL) {                /*If there is old tail then 
the new comes after it*/
+            node_set_next(ll_p, ll_p->tail, n_new);
+        }
+
+        ll_p->tail = n_new;      /*Set the new tail in the dsc.*/
+        if(ll_p->head == NULL) { /*If there is no head (1. node) set the head 
too*/
+            ll_p->head = n_new;
+        }
+    }
+
+    return n_new;
+}
+
+/**
+ * Remove the node 'node_p' from 'll_p' linked list.
+ * It does not free the the memory of node.
+ * @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)
+{
+    if(lv_ll_get_head(ll_p) == node_p) {
+        /*The new head will be the node after 'n_act'*/
+        ll_p->head = lv_ll_get_next(ll_p, node_p);
+        if(ll_p->head == NULL) {
+            ll_p->tail = NULL;
+        } else {
+            node_set_prev(ll_p, ll_p->head, NULL);
+        }
+    } else if(lv_ll_get_tail(ll_p) == node_p) {
+        /*The new tail will be the  node before 'n_act'*/
+        ll_p->tail = lv_ll_get_prev(ll_p, node_p);
+        if(ll_p->tail == NULL) {
+            ll_p->head = NULL;
+        } else {
+            node_set_next(ll_p, ll_p->tail, NULL);
+        }
+    } else {
+        lv_ll_node_t * n_prev = lv_ll_get_prev(ll_p, node_p);
+        lv_ll_node_t * n_next = lv_ll_get_next(ll_p, node_p);
+
+        node_set_next(ll_p, n_prev, n_next);
+        node_set_prev(ll_p, n_next, n_prev);
+    }
+}
+
+/**
+ * Remove and free all elements from a linked list. The list remain valid but 
become empty.
+ * @param ll_p pointer to linked list
+ */
+void lv_ll_clear(lv_ll_t * ll_p)
+{
+    void * i;
+    void * i_next;
+
+    i      = lv_ll_get_head(ll_p);
+    i_next = NULL;
+
+    while(i != NULL) {
+        i_next = lv_ll_get_next(ll_p, i);
+
+        lv_ll_rem(ll_p, i);
+        lv_mem_free(i);
+
+        i = i_next;
+    }
+}
+
+/**
+ * Move a node to a new linked list
+ * @param ll_ori_p pointer to the original (old) linked list
+ * @param ll_new_p pointer to the new linked list
+ * @param node pointer to a node
+ * @param head true: be the head in the new list
+ *             false be the head in the new list
+ */
+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);
+
+    if(head) {
+        /*Set node as head*/
+        node_set_prev(ll_new_p, node, NULL);
+        node_set_next(ll_new_p, node, ll_new_p->head);
+
+        if(ll_new_p->head != NULL) { /*If there is old head then before it 
goes the new*/
+            node_set_prev(ll_new_p, ll_new_p->head, node);
+        }
+
+        ll_new_p->head = node;       /*Set the new head in the dsc.*/
+        if(ll_new_p->tail == NULL) { /*If there is no tail (first node) set 
the tail too*/
+            ll_new_p->tail = node;
+        }
+    } else {
+        /*Set node as tail*/
+        node_set_prev(ll_new_p, node, ll_new_p->tail);
+        node_set_next(ll_new_p, node, NULL);
+
+        if(ll_new_p->tail != NULL) { /*If there is old tail then after it goes 
the new*/
+            node_set_next(ll_new_p, ll_new_p->tail, node);
+        }
+
+        ll_new_p->tail = node;       /*Set the new tail in the dsc.*/
+        if(ll_new_p->head == NULL) { /*If there is no head (first node) set 
the head too*/
+            ll_new_p->head = node;
+        }
+    }
+}
+
+/**
+ * Return with head node of the linked list
+ * @param ll_p pointer to linked list
+ * @return pointer to the head of 'll_p'
+ */
+void * lv_ll_get_head(const lv_ll_t * ll_p)
+{
+    void * head = NULL;
+
+    if(ll_p != NULL) {
+        head = ll_p->head;
+    }
+
+    return head;
+}
+
+/**
+ * Return with tail node of the linked list
+ * @param ll_p pointer to linked list
+ * @return pointer to the head of 'll_p'
+ */
+void * lv_ll_get_tail(const lv_ll_t * ll_p)
+{
+    void * tail = NULL;
+
+    if(ll_p != NULL) {
+        tail = ll_p->tail;
+    }
+
+    return tail;
+}
+
+/**
+ * Return with the pointer of the next node after 'n_act'
+ * @param ll_p pointer to linked list
+ * @param n_act pointer a node
+ * @return pointer to the next node
+ */
+void * lv_ll_get_next(const lv_ll_t * ll_p, const void * n_act)
+{
+    void * next = NULL;
+
+    if(ll_p != NULL) {
+        const lv_ll_node_t * n_act_d = n_act;
+        memcpy(&next, n_act_d + LL_NEXT_P_OFFSET(ll_p), sizeof(void *));
+    }
+
+    return next;
+}
+
+/**
+ * Return with the pointer of the previous node after 'n_act'
+ * @param ll_p pointer to linked list
+ * @param n_act pointer a node
+ * @return pointer to the previous node
+ */
+void * lv_ll_get_prev(const lv_ll_t * ll_p, const void * n_act)
+{
+    void * prev = NULL;
+
+    if(ll_p != NULL) {
+        const lv_ll_node_t * n_act_d = n_act;
+        memcpy(&prev, n_act_d + LL_PREV_P_OFFSET(ll_p), sizeof(void *));
+    }
+
+    return prev;
+}
+
+/**
+ * Return the length of the linked list.
+ * @param ll_p pointer to linked list
+ * @return length of the linked list
+ */
+uint32_t lv_ll_get_len(const lv_ll_t * ll_p)
+{
+    uint32_t len = 0;
+    void * node;
+
+    for(node = lv_ll_get_head(ll_p); node != NULL; node = lv_ll_get_next(ll_p, 
node)) {
+        len++;
+    }
+
+    return len;
+}
+
+/**
+ * Move a nodw before an other node in the same linked list
+ * @param ll_p pointer to a linked list
+ * @param n_act pointer to node to move
+ * @param n_after pointer to a node which should be after `n_act`
+ */
+void lv_ll_move_before(lv_ll_t * ll_p, void * n_act, void * n_after)
+{
+    if(n_act == n_after) return; /*Can't move before itself*/
+
+    void * n_before;
+    if(n_after != NULL)
+        n_before = lv_ll_get_prev(ll_p, n_after);
+    else
+        n_before = lv_ll_get_tail(ll_p); /*if `n_after` is NULL `n_act` should 
be the new tail*/
+
+    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);
+
+    /*Add again by setting the prev. and next nodes*/
+    node_set_next(ll_p, n_before, n_act);
+    node_set_prev(ll_p, n_act, n_before);
+    node_set_prev(ll_p, n_after, n_act);
+    node_set_next(ll_p, n_act, n_after);
+
+    /*If `n_act` was moved before NULL then it become the new tail*/
+    if(n_after == NULL) ll_p->tail = n_act;
+
+    /*If `n_act` was moved before `NULL` then it's the new head*/
+    if(n_before == NULL) ll_p->head = n_act;
+}
+
+/**
+ * Check if a linked list is empty
+ * @param ll_p pointer to a linked list
+ * @return true: the linked list is empty; false: not empty
+ */
+bool lv_ll_is_empty(lv_ll_t * ll_p)
+{
+    if(ll_p == NULL) return true;
+
+    if(ll_p->head == NULL && ll_p->tail == NULL) return true;
+
+    return false;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Set the 'pervious node pointer' of a node
+ * @param ll_p pointer to linked list
+ * @param act pointer to a node which prev. node pointer should be set
+ * @param prev pointer to a node which should be the previous node before 'act'
+ */
+static void node_set_prev(lv_ll_t * ll_p, lv_ll_node_t * act, lv_ll_node_t * 
prev)
+{
+    if(act == NULL) return; /*Can't set the prev node of `NULL`*/
+
+    uint32_t node_p_size = sizeof(lv_ll_node_t *);
+    if(prev)
+        memcpy(act + LL_PREV_P_OFFSET(ll_p), &prev, node_p_size);
+    else
+        memset(act + LL_PREV_P_OFFSET(ll_p), 0, node_p_size);
+}
+
+/**
+ * Set the 'next node pointer' of a node
+ * @param ll_p pointer to linked list
+ * @param act pointer to a node which next node pointer should be set
+ * @param next pointer to a node which should be the next node before 'act'
+ */
+static void node_set_next(lv_ll_t * ll_p, lv_ll_node_t * act, lv_ll_node_t * 
next)
+{
+    if(act == NULL) return; /*Can't set the next node of `NULL`*/
+
+    uint32_t node_p_size = sizeof(lv_ll_node_t *);
+    if(next)
+        memcpy(act + LL_NEXT_P_OFFSET(ll_p), &next, node_p_size);
+    else
+        memset(act + LL_NEXT_P_OFFSET(ll_p), 0, node_p_size);
+}
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_ll.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_ll.h
new file mode 100755
index 0000000..2c02eb4
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_ll.h
@@ -0,0 +1,160 @@
+/**
+ * @file lv_ll.c
+ * Handle linked lists. The nodes are dynamically allocated by the 'lv_mem' 
module.
+ */
+
+#ifndef LV_LL_H
+#define LV_LL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_mem.h"
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/** Dummy type to make handling easier*/
+typedef uint8_t lv_ll_node_t;
+
+/** Description of a linked list*/
+typedef struct
+{
+    uint32_t n_size;
+    lv_ll_node_t * head;
+    lv_ll_node_t * tail;
+} lv_ll_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize linked list
+ * @param ll_dsc pointer to ll_dsc variable
+ * @param node_size the size of 1 node in bytes
+ */
+void lv_ll_init(lv_ll_t * ll_p, uint32_t node_size);
+
+/**
+ * Add a new head to a linked list
+ * @param ll_p pointer to linked list
+ * @return pointer to the new head
+ */
+void * lv_ll_ins_head(lv_ll_t * ll_p);
+
+/**
+ * Insert a new node in front of the n_act node
+ * @param ll_p pointer to linked list
+ * @param n_act pointer a node
+ * @return pointer to the new head
+ */
+void * lv_ll_ins_prev(lv_ll_t * ll_p, void * n_act);
+
+/**
+ * Add a new tail to a linked list
+ * @param ll_p pointer to linked list
+ * @return pointer to the new tail
+ */
+void * lv_ll_ins_tail(lv_ll_t * ll_p);
+
+/**
+ * Remove the node 'node_p' from 'll_p' linked list.
+ * It does not free the the memory of node.
+ * @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);
+
+/**
+ * Remove and free all elements from a linked list. The list remain valid but 
become empty.
+ * @param ll_p pointer to linked list
+ */
+void lv_ll_clear(lv_ll_t * ll_p);
+
+/**
+ * Move a node to a new linked list
+ * @param ll_ori_p pointer to the original (old) linked list
+ * @param ll_new_p pointer to the new linked list
+ * @param node pointer to a node
+ * @param head true: be the head in the new list
+ *             false be the head in the new list
+ */
+void lv_ll_chg_list(lv_ll_t * ll_ori_p, lv_ll_t * ll_new_p, void * node, bool 
head);
+
+/**
+ * Return with head node of the linked list
+ * @param ll_p pointer to linked list
+ * @return pointer to the head of 'll_p'
+ */
+void * lv_ll_get_head(const lv_ll_t * ll_p);
+
+/**
+ * Return with tail node of the linked list
+ * @param ll_p pointer to linked list
+ * @return pointer to the head of 'll_p'
+ */
+void * lv_ll_get_tail(const lv_ll_t * ll_p);
+
+/**
+ * Return with the pointer of the next node after 'n_act'
+ * @param ll_p pointer to linked list
+ * @param n_act pointer a node
+ * @return pointer to the next node
+ */
+void * lv_ll_get_next(const lv_ll_t * ll_p, const void * n_act);
+
+/**
+ * Return with the pointer of the previous node after 'n_act'
+ * @param ll_p pointer to linked list
+ * @param n_act pointer a node
+ * @return pointer to the previous node
+ */
+void * lv_ll_get_prev(const lv_ll_t * ll_p, const void * n_act);
+
+/**
+ * Return the length of the linked list.
+ * @param ll_p pointer to linked list
+ * @return length of the linked list
+ */
+uint32_t lv_ll_get_len(const lv_ll_t * ll_p);
+
+/**
+ * Move a nodw before an other node in the same linked list
+ * @param ll_p pointer to a linked list
+ * @param n_act pointer to node to move
+ * @param n_after pointer to a node which should be after `n_act`
+ */
+void lv_ll_move_before(lv_ll_t * ll_p, void * n_act, void * n_after);
+
+/**
+ * Check if a linked list is empty
+ * @param ll_p pointer to a linked list
+ * @return true: the linked list is empty; false: not empty
+ */
+bool lv_ll_is_empty(lv_ll_t * ll_p);
+/**********************
+ *      MACROS
+ **********************/
+
+#define LV_LL_READ(list, i) for(i = lv_ll_get_head(&list); i != NULL; i = 
lv_ll_get_next(&list, i))
+
+#define LV_LL_READ_BACK(list, i) for(i = lv_ll_get_tail(&list); i != NULL; i = 
lv_ll_get_prev(&list, i))
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_log.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_log.c
new file mode 100755
index 0000000..acbdfb7
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_log.c
@@ -0,0 +1,78 @@
+/**
+ * @file lv_log.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_log.h"
+#if LV_USE_LOG
+
+#if LV_LOG_PRINTF
+#include <stdio.h>
+#endif
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_log_print_g_cb_t custom_print_cb;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Register custom print/write function to call when a log is added.
+ * It can format its "File path", "Line number" and "Description" as required
+ * and send the formatted log message to a consol or serial port.
+ * @param print_cb a function pointer to print a log
+ */
+void lv_log_register_print_cb(lv_log_print_g_cb_t print_cb)
+{
+    custom_print_cb = print_cb;
+}
+
+/**
+ * Add a log
+ * @param level the level of log. (From `lv_log_level_t` enum)
+ * @param file name of the file when the log added
+ * @param line line number in the source code where the log added
+ * @param dsc description of the log
+ */
+void lv_log_add(lv_log_level_t level, const char * file, int line, const char 
* dsc)
+{
+    if(level >= _LV_LOG_LEVEL_NUM) return; /*Invalid level*/
+
+    if(level >= LV_LOG_LEVEL) {
+
+#if LV_LOG_PRINTF
+        static const char * lvl_prefix[] = {"Trace", "Info", "Warn", "Error"};
+        printf("%s: %s \t(%s #%d)\n", lvl_prefix[level], dsc, file, line);
+#else
+        if(custom_print_cb) custom_print_cb(level, file, line, dsc);
+#endif
+    }
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#endif /*LV_USE_LOG*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_log.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_log.h
new file mode 100755
index 0000000..62c613b
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_log.h
@@ -0,0 +1,144 @@
+/**
+ * @file lv_log.h
+ *
+ */
+
+#ifndef LV_LOG_H
+#define LV_LOG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+#include <stdint.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/*Possible log level. For compatibility declare it independently from 
`LV_USE_LOG`*/
+
+#define LV_LOG_LEVEL_TRACE 0 /**< A lot of logs to give detailed information*/
+#define LV_LOG_LEVEL_INFO 1  /**< Log important events*/
+#define LV_LOG_LEVEL_WARN 2  /**< Log if something unwanted happened but 
didn't caused problem*/
+#define LV_LOG_LEVEL_ERROR 3 /**< Only critical issue, when the system may 
fail*/
+#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
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**
+ * Log print function. Receives "Log Level", "File path", "Line number" and 
"Description".
+ */
+typedef void (*lv_log_print_g_cb_t)(lv_log_level_t level, const char *, 
uint32_t, const char *);
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Register custom print/write function to call when a log is added.
+ * It can format its "File path", "Line number" and "Description" as required
+ * and send the formatted log message to a consol or serial port.
+ * @param print_cb a function pointer to print a log
+ */
+void lv_log_register_print_cb(lv_log_print_g_cb_t print_cb);
+
+/**
+ * Add a log
+ * @param level the level of log. (From `lv_log_level_t` enum)
+ * @param file name of the file when the log added
+ * @param line line number in the source code where the log added
+ * @param dsc description of the log
+ */
+void lv_log_add(lv_log_level_t level, const char * file, int line, const char 
* dsc);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#if LV_LOG_LEVEL <= LV_LOG_LEVEL_TRACE
+#define LV_LOG_TRACE(dsc) lv_log_add(LV_LOG_LEVEL_TRACE, __FILE__, __LINE__, 
dsc);
+#else
+#define LV_LOG_TRACE(dsc)                                                      
                                        \
+    {                                                                          
                                        \
+        ;                                                                      
                                        \
+    }
+#endif
+
+#if LV_LOG_LEVEL <= LV_LOG_LEVEL_INFO
+#define LV_LOG_INFO(dsc) lv_log_add(LV_LOG_LEVEL_INFO, __FILE__, __LINE__, 
dsc);
+#else
+#define LV_LOG_INFO(dsc)                                                       
                                        \
+    {                                                                          
                                        \
+        ;                                                                      
                                        \
+    }
+#endif
+
+#if LV_LOG_LEVEL <= LV_LOG_LEVEL_WARN
+#define LV_LOG_WARN(dsc) lv_log_add(LV_LOG_LEVEL_WARN, __FILE__, __LINE__, 
dsc);
+#else
+#define LV_LOG_WARN(dsc)                                                       
                                        \
+    {                                                                          
                                        \
+        ;                                                                      
                                        \
+    }
+#endif
+
+#if LV_LOG_LEVEL <= LV_LOG_LEVEL_ERROR
+#define LV_LOG_ERROR(dsc) lv_log_add(LV_LOG_LEVEL_ERROR, __FILE__, __LINE__, 
dsc);
+#else
+#define LV_LOG_ERROR(dsc)                                                      
                                        \
+    {                                                                          
                                        \
+        ;                                                                      
                                        \
+    }
+#endif
+
+#else /*LV_USE_LOG*/
+
+/*Do nothing if `LV_USE_LOG  0`*/
+#define lv_log_add(level, file, line, dsc)                                     
                                        \
+    {                                                                          
                                        \
+        ;                                                                      
                                        \
+    }
+#define LV_LOG_TRACE(dsc)                                                      
                                        \
+    {                                                                          
                                        \
+        ;                                                                      
                                        \
+    }
+#define LV_LOG_INFO(dsc)                                                       
                                        \
+    {                                                                          
                                        \
+        ;                                                                      
                                        \
+    }
+#define LV_LOG_WARN(dsc)                                                       
                                        \
+    {                                                                          
                                        \
+        ;                                                                      
                                        \
+    }
+#define LV_LOG_ERROR(dsc)                                                      
                                        \
+    {                                                                          
                                        \
+        ;                                                                      
                                        \
+    }
+#endif /*LV_USE_LOG*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_LOG_H*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_math.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_math.c
new file mode 100755
index 0000000..f015456
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_math.c
@@ -0,0 +1,203 @@
+/**
+ * @file lv_math.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_math.h"
+#include <stdbool.h>
+#include <stdlib.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static const int16_t sin0_90_table[] = {
+    0,     572,   1144,  1715,  2286,  2856,  3425,  3993,  4560,  5126,  
5690,  6252,  6813,  7371,  7927,  8481,
+    9032,  9580,  10126, 10668, 11207, 11743, 12275, 12803, 13328, 13848, 
14364, 14876, 15383, 15886, 16383, 16876,
+    17364, 17846, 18323, 18794, 19260, 19720, 20173, 20621, 21062, 21497, 
21925, 22347, 22762, 23170, 23571, 23964,
+    24351, 24730, 25101, 25465, 25821, 26169, 26509, 26841, 27165, 27481, 
27788, 28087, 28377, 28659, 28932, 29196,
+    29451, 29697, 29934, 30162, 30381, 30591, 30791, 30982, 31163, 31335, 
31498, 31650, 31794, 31927, 32051, 32165,
+    32269, 32364, 32448, 32523, 32587, 32642, 32687, 32722, 32747, 32762, 
32767};
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Return with sinus of an angle
+ * @param angle
+ * @return sinus of 'angle'. sin(-90) = -32767, sin(90) = 32767
+ */
+int16_t lv_trigo_sin(int16_t angle)
+{
+    int16_t ret = 0;
+    angle       = angle % 360;
+
+    if(angle < 0) angle = 360 + angle;
+
+    if(angle < 90) {
+        ret = sin0_90_table[angle];
+    } else if(angle >= 90 && angle < 180) {
+        angle = 180 - angle;
+        ret   = sin0_90_table[angle];
+    } else if(angle >= 180 && angle < 270) {
+        angle = angle - 180;
+        ret   = -sin0_90_table[angle];
+    } else { /*angle >=270*/
+        angle = 360 - angle;
+        ret   = -sin0_90_table[angle];
+    }
+
+    return ret;
+}
+
+/**
+ * Calculate a value of a Cubic Bezier function.
+ * @param t time in range of [0..LV_BEZIER_VAL_MAX]
+ * @param u0 start values in range of [0..LV_BEZIER_VAL_MAX]
+ * @param u1 control value 1 values in range of [0..LV_BEZIER_VAL_MAX]
+ * @param u2 control value 2 in range of [0..LV_BEZIER_VAL_MAX]
+ * @param u3 end values in range of [0..LV_BEZIER_VAL_MAX]
+ * @return the value calculated from the given parameters in range of 
[0..LV_BEZIER_VAL_MAX]
+ */
+int32_t lv_bezier3(uint32_t t, int32_t u0, int32_t u1, int32_t u2, int32_t u3)
+{
+    uint32_t t_rem  = 1024 - t;
+    uint32_t t_rem2 = (t_rem * t_rem) >> 10;
+    uint32_t t_rem3 = (t_rem2 * t_rem) >> 10;
+    uint32_t t2     = (t * t) >> 10;
+    uint32_t t3     = (t2 * t) >> 10;
+
+    uint32_t v1 = ((uint32_t)t_rem3 * u0) >> 10;
+    uint32_t v2 = ((uint32_t)3 * t_rem2 * t * u1) >> 20;
+    uint32_t v3 = ((uint32_t)3 * t_rem * t2 * u2) >> 20;
+    uint32_t v4 = ((uint32_t)t3 * u3) >> 10;
+
+    return v1 + v2 + v3 + v4;
+}
+
+/**
+ * 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;
+}
+
+/**
+ * Calculate the integer square root of a number.
+ * @param num
+ * @return square root of 'num'
+ */
+uint32_t lv_sqrt(uint32_t num)
+{
+    // http://www.codecodex.com/wiki/Calculate_an_integer_square_root#C
+    uint32_t root  = 0;
+    uint32_t place = 0x40000000;
+
+    while(place > num) place >>= 2;
+    while(place) {
+        if(num >= root + place) {
+            num -= root + place;
+            root += (place << 1);
+        }
+        root >>= 1;
+        place >>= 2;
+    }
+    return root;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_math.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_math.h
new file mode 100755
index 0000000..dc2c547
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_math.h
@@ -0,0 +1,80 @@
+/**
+ * @file math_base.h
+ *
+ */
+
+#ifndef LV_MATH_H
+#define LV_MATH_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stdint.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_MATH_MIN(a, b) ((a) < (b) ? (a) : (b))
+#define LV_MATH_MAX(a, b) ((a) > (b) ? (a) : (b))
+#define LV_MATH_ABS(x) ((x) > 0 ? (x) : (-(x)))
+
+#define LV_TRIGO_SIN_MAX 32767
+#define LV_TRIGO_SHIFT 15 /**<  >> LV_TRIGO_SHIFT to normalize*/
+
+#define LV_BEZIER_VAL_MAX 1024 /**< Max time in Bezier functions (not [0..1] 
to use integers) */
+#define LV_BEZIER_VAL_SHIFT 10 /**< log2(LV_BEZIER_VAL_MAX): used to normalize 
up scaled values*/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Return with sinus of an angle
+ * @param angle
+ * @return sinus of 'angle'. sin(-90) = -32767, sin(90) = 32767
+ */
+int16_t lv_trigo_sin(int16_t angle);
+
+/**
+ * Calculate a value of a Cubic Bezier function.
+ * @param t time in range of [0..LV_BEZIER_VAL_MAX]
+ * @param u0 start values in range of [0..LV_BEZIER_VAL_MAX]
+ * @param u1 control value 1 values in range of [0..LV_BEZIER_VAL_MAX]
+ * @param u2 control value 2 in range of [0..LV_BEZIER_VAL_MAX]
+ * @param u3 end values in range of [0..LV_BEZIER_VAL_MAX]
+ * @return the value calculated from the given parameters in range of 
[0..LV_BEZIER_VAL_MAX]
+ */
+int32_t lv_bezier3(uint32_t t, int32_t u0, int32_t u1, int32_t u2, int32_t u3);
+
+/**
+ * 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);
+
+/**
+ * Calculate the integer square root of a number.
+ * @param num
+ * @return square root of 'num'
+ */
+uint32_t lv_sqrt(uint32_t num);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_mem.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_mem.c
new file mode 100755
index 0000000..da38554
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_mem.c
@@ -0,0 +1,466 @@
+/**
+ * @file lv_mem.c
+ * General and portable implementation of malloc and free.
+ * The dynamic memory monitoring is also supported.
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_mem.h"
+#include "lv_math.h"
+#include <string.h>
+
+#if LV_MEM_CUSTOM != 0
+#include LV_MEM_CUSTOM_INCLUDE
+#endif
+
+/*********************
+ *      DEFINES
+ *********************/
+/*Add memory junk on alloc (0xaa) and free(0xbb) (just for testing purposes)*/
+#ifndef LV_MEM_ADD_JUNK
+#define LV_MEM_ADD_JUNK 0
+#endif
+
+#ifdef LV_MEM_ENV64
+#define MEM_UNIT uint64_t
+#else
+#define MEM_UNIT uint32_t
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+#if LV_ENABLE_GC == 0 /*gc custom allocations must not include header*/
+
+/*The size of this union must be 4 bytes (uint32_t)*/
+typedef union
+{
+    struct
+    {
+        MEM_UNIT used : 1;    /* 1: if the entry is used*/
+        MEM_UNIT d_size : 31; /* Size off the data (1 means 4 bytes)*/
+    } s;
+    MEM_UNIT header; /* The header (used + d_size)*/
+} lv_mem_header_t;
+
+typedef struct
+{
+    lv_mem_header_t header;
+    uint8_t first_data; /*First data byte in the allocated data (Just for 
easily create a pointer)*/
+} lv_mem_ent_t;
+
+#endif /* LV_ENABLE_GC */
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+#if LV_MEM_CUSTOM == 0
+static lv_mem_ent_t * ent_get_next(lv_mem_ent_t * act_e);
+static void * ent_alloc(lv_mem_ent_t * e, size_t size);
+static void ent_trunc(lv_mem_ent_t * e, size_t size);
+#endif
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+#if LV_MEM_CUSTOM == 0
+static uint8_t * work_mem;
+#endif
+
+static uint32_t zero_mem; /*Give the address of this variable if 0 byte should 
be allocated*/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initiaiize the dyn_mem module (work memory and other variables)
+ */
+void lv_mem_init(void)
+{
+#if LV_MEM_CUSTOM == 0
+
+#if LV_MEM_ADR == 0
+    /*Allocate a large array to store the dynamically allocated data*/
+    static LV_MEM_ATTR MEM_UNIT work_mem_int[LV_MEM_SIZE / sizeof(MEM_UNIT)];
+    work_mem = (uint8_t *)work_mem_int;
+#else
+    work_mem = (uint8_t *)LV_MEM_ADR;
+#endif
+
+    lv_mem_ent_t * full = (lv_mem_ent_t *)work_mem;
+    full->header.s.used = 0;
+    /*The total mem size id reduced by the first header and the close patterns 
*/
+    full->header.s.d_size = LV_MEM_SIZE - sizeof(lv_mem_header_t);
+#endif
+}
+
+/**
+ * Allocate a memory dynamically
+ * @param size size of the memory to allocate in bytes
+ * @return pointer to the allocated memory
+ */
+void * lv_mem_alloc(size_t size)
+{
+    if(size == 0) {
+        return &zero_mem;
+    }
+
+#ifdef LV_MEM_ENV64
+    /*Round the size up to 8*/
+    if(size & 0x7) {
+        size = size & (~0x7);
+        size += 8;
+    }
+#else
+    /*Round the size up to 4*/
+    if(size & 0x3) {
+        size = size & (~0x3);
+        size += 4;
+    }
+#endif
+    void * alloc = NULL;
+
+#if LV_MEM_CUSTOM == 0
+    /*Use the built-in allocators*/
+    lv_mem_ent_t * e = NULL;
+
+    /* Search for a appropriate entry*/
+    do {
+        /* Get the next entry*/
+        e = ent_get_next(e);
+
+        /*If there is next entry then try to allocate there*/
+        if(e != NULL) {
+            alloc = ent_alloc(e, size);
+        }
+        /* End if there is not next entry OR the alloc. is successful*/
+    } while(e != NULL && alloc == NULL);
+
+#else
+/*Use custom, user defined malloc function*/
+#if LV_ENABLE_GC == 1 /*gc must not include header*/
+    alloc = LV_MEM_CUSTOM_ALLOC(size);
+#else                 /* LV_ENABLE_GC */
+    /*Allocate a header too to store the size*/
+    alloc = LV_MEM_CUSTOM_ALLOC(size + sizeof(lv_mem_header_t));
+    if(alloc != NULL) {
+        ((lv_mem_ent_t *)alloc)->header.s.d_size = size;
+        ((lv_mem_ent_t *)alloc)->header.s.used   = 1;
+
+        alloc = &((lv_mem_ent_t *)alloc)->first_data;
+    }
+#endif                /* LV_ENABLE_GC */
+#endif                /* LV_MEM_CUSTOM */
+
+#if LV_MEM_ADD_JUNK
+    if(alloc != NULL) memset(alloc, 0xaa, size);
+#endif
+
+    if(alloc == NULL) LV_LOG_WARN("Couldn't allocate memory");
+
+    return alloc;
+}
+
+/**
+ * Free an allocated data
+ * @param data pointer to an allocated memory
+ */
+void lv_mem_free(const void * data)
+{
+    if(data == &zero_mem) return;
+    if(data == NULL) return;
+
+#if LV_MEM_ADD_JUNK
+    memset((void *)data, 0xbb, lv_mem_get_size(data));
+#endif
+
+#if LV_ENABLE_GC == 0
+    /*e points to the header*/
+    lv_mem_ent_t * e = (lv_mem_ent_t *)((uint8_t *)data - 
sizeof(lv_mem_header_t));
+    e->header.s.used = 0;
+#endif
+
+#if LV_MEM_CUSTOM == 0
+#if LV_MEM_AUTO_DEFRAG
+    /* Make a simple defrag.
+     * Join the following free entries after this*/
+    lv_mem_ent_t * e_next;
+    e_next = ent_get_next(e);
+    while(e_next != NULL) {
+        if(e_next->header.s.used == 0) {
+            e->header.s.d_size += e_next->header.s.d_size + sizeof(e->header);
+        } else {
+            break;
+        }
+        e_next = ent_get_next(e_next);
+    }
+#endif
+#else /*Use custom, user defined free function*/
+#if LV_ENABLE_GC == 0
+    LV_MEM_CUSTOM_FREE(e);
+#else
+    LV_MEM_CUSTOM_FREE((void *)data);
+#endif /*LV_ENABLE_GC*/
+#endif
+}
+
+/**
+ * Reallocate a memory with a new size. The old content will be kept.
+ * @param data pointer to an allocated memory.
+ * Its content will be copied to the new memory block and freed
+ * @param new_size the desired new size in byte
+ * @return pointer to the new memory
+ */
+
+#if LV_ENABLE_GC == 0
+
+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) {
+        lv_mem_ent_t * e = (lv_mem_ent_t *)((uint8_t *)data_p - 
sizeof(lv_mem_header_t));
+        if(e->header.s.used == 0) {
+            data_p = NULL;
+        }
+    }
+
+    uint32_t old_size = lv_mem_get_size(data_p);
+    if(old_size == new_size) return data_p; /*Also avoid reallocating the same 
memory*/
+
+#if LV_MEM_CUSTOM == 0
+    /* Truncate the memory if the new size is smaller. */
+    if(new_size < old_size) {
+        lv_mem_ent_t * e = (lv_mem_ent_t *)((uint8_t *)data_p - 
sizeof(lv_mem_header_t));
+        ent_trunc(e, new_size);
+        return &e->first_data;
+    }
+#endif
+
+    void * new_p;
+    new_p = lv_mem_alloc(new_size);
+
+    if(new_p != NULL && 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));
+            lv_mem_free(data_p);
+        }
+    }
+
+    if(new_p == NULL) LV_LOG_WARN("Couldn't allocate memory");
+
+    return new_p;
+}
+
+#else /* LV_ENABLE_GC */
+
+void * lv_mem_realloc(void * data_p, size_t new_size)
+{
+    void * new_p = LV_MEM_CUSTOM_REALLOC(data_p, new_size);
+    if(new_p == NULL) LV_LOG_WARN("Couldn't allocate memory");
+    return new_p;
+}
+
+#endif /* lv_enable_gc */
+
+/**
+ * Join the adjacent free memory blocks
+ */
+void lv_mem_defrag(void)
+{
+#if LV_MEM_CUSTOM == 0
+    lv_mem_ent_t * e_free;
+    lv_mem_ent_t * e_next;
+    e_free = ent_get_next(NULL);
+
+    while(1) {
+        /*Search the next free entry*/
+        while(e_free != NULL) {
+            if(e_free->header.s.used != 0) {
+                e_free = ent_get_next(e_free);
+            } else {
+                break;
+            }
+        }
+
+        if(e_free == NULL) return;
+
+        /*Joint the following free entries to the free*/
+        e_next = ent_get_next(e_free);
+        while(e_next != NULL) {
+            if(e_next->header.s.used == 0) {
+                e_free->header.s.d_size += e_next->header.s.d_size + 
sizeof(e_next->header);
+            } else {
+                break;
+            }
+
+            e_next = ent_get_next(e_next);
+        }
+
+        if(e_next == NULL) return;
+
+        /*Continue from the lastly checked entry*/
+        e_free = e_next;
+    }
+#endif
+}
+
+/**
+ * Give information about the work memory of dynamic allocation
+ * @param mon_p pointer to a dm_mon_p variable,
+ *              the result of the analysis will be stored here
+ */
+void lv_mem_monitor(lv_mem_monitor_t * mon_p)
+{
+    /*Init the data*/
+    memset(mon_p, 0, sizeof(lv_mem_monitor_t));
+#if LV_MEM_CUSTOM == 0
+    lv_mem_ent_t * e;
+    e = NULL;
+
+    e = ent_get_next(e);
+
+    while(e != NULL) {
+        if(e->header.s.used == 0) {
+            mon_p->free_cnt++;
+            mon_p->free_size += e->header.s.d_size;
+            if(e->header.s.d_size > mon_p->free_biggest_size) {
+                mon_p->free_biggest_size = e->header.s.d_size;
+            }
+        } else {
+            mon_p->used_cnt++;
+        }
+
+        e = ent_get_next(e);
+    }
+    mon_p->total_size = LV_MEM_SIZE;
+    mon_p->used_pct   = 100 - (100U * mon_p->free_size) / mon_p->total_size;
+    mon_p->frag_pct   = (uint32_t)mon_p->free_biggest_size * 100U / 
mon_p->free_size;
+    mon_p->frag_pct   = 100 - mon_p->frag_pct;
+#endif
+}
+
+/**
+ * Give the size of an allocated memory
+ * @param data pointer to an allocated memory
+ * @return the size of data memory in bytes
+ */
+
+#if LV_ENABLE_GC == 0
+
+uint32_t lv_mem_get_size(const void * data)
+{
+    if(data == NULL) return 0;
+    if(data == &zero_mem) return 0;
+
+    lv_mem_ent_t * e = (lv_mem_ent_t *)((uint8_t *)data - 
sizeof(lv_mem_header_t));
+
+    return e->header.s.d_size;
+}
+
+#else /* LV_ENABLE_GC */
+
+uint32_t lv_mem_get_size(const void * data)
+{
+    return LV_MEM_CUSTOM_GET_SIZE(data);
+}
+
+#endif /*LV_ENABLE_GC*/
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#if LV_MEM_CUSTOM == 0
+/**
+ * Give the next entry after 'act_e'
+ * @param act_e pointer to an entry
+ * @return pointer to an entry after 'act_e'
+ */
+static lv_mem_ent_t * ent_get_next(lv_mem_ent_t * act_e)
+{
+    lv_mem_ent_t * next_e = NULL;
+
+    if(act_e == NULL) { /*NULL means: get the first entry*/
+        next_e = (lv_mem_ent_t *)work_mem;
+    } else { /*Get the next entry */
+        uint8_t * data = &act_e->first_data;
+        next_e         = (lv_mem_ent_t *)&data[act_e->header.s.d_size];
+
+        if(&next_e->first_data >= &work_mem[LV_MEM_SIZE]) next_e = NULL;
+    }
+
+    return next_e;
+}
+
+/**
+ * Try to do the real allocation with a given size
+ * @param e try to allocate to this entry
+ * @param size size of the new memory in bytes
+ * @return pointer to the allocated memory or NULL if not enough memory in the 
entry
+ */
+static void * ent_alloc(lv_mem_ent_t * e, size_t size)
+{
+    void * alloc = NULL;
+
+    /*If the memory is free and big enough then use it */
+    if(e->header.s.used == 0 && e->header.s.d_size >= size) {
+        /*Truncate the entry to the desired size */
+        ent_trunc(e, size),
+
+            e->header.s.used = 1;
+
+        /*Save the allocated data*/
+        alloc = &e->first_data;
+    }
+
+    return alloc;
+}
+
+/**
+ * Truncate the data of entry to the given size
+ * @param e Pointer to an entry
+ * @param size new size in bytes
+ */
+static void ent_trunc(lv_mem_ent_t * e, size_t size)
+{
+#ifdef LV_MEM_ENV64
+    /*Round the size up to 8*/
+    if(size & 0x7) {
+        size = size & (~0x7);
+        size += 8;
+    }
+#else
+    /*Round the size up to 4*/
+    if(size & 0x3) {
+        size = size & (~0x3);
+        size += 4;
+    }
+#endif
+
+    /*Don't let empty space only for a header without data*/
+    if(e->header.s.d_size == size + sizeof(lv_mem_header_t)) {
+        size = e->header.s.d_size;
+    }
+
+    /* Create the new entry after the current if there is space for it */
+    if(e->header.s.d_size != size) {
+        uint8_t * e_data             = &e->first_data;
+        lv_mem_ent_t * after_new_e   = (lv_mem_ent_t *)&e_data[size];
+        after_new_e->header.s.used   = 0;
+        after_new_e->header.s.d_size = (uint32_t)e->header.s.d_size - size - 
sizeof(lv_mem_header_t);
+    }
+
+    /* Set the new size for the original entry */
+    e->header.s.d_size = (uint32_t)size;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_mem.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_mem.h
new file mode 100755
index 0000000..34ca3e9
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_mem.h
@@ -0,0 +1,107 @@
+/**
+ * @file lv_mem.h
+ *
+ */
+
+#ifndef LV_MEM_H
+#define LV_MEM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include <stdint.h>
+#include <stddef.h>
+#include "lv_log.h"
+#include "lv_types.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**
+ * Heap information structure.
+ */
+typedef struct
+{
+    uint32_t total_size; /**< Total heap size */
+    uint32_t free_cnt;
+    uint32_t free_size; /**< Size of available memory */
+    uint32_t free_biggest_size;
+    uint32_t used_cnt;
+    uint8_t used_pct; /**< Percentage used */
+    uint8_t frag_pct; /**< Amount of fragmentation */
+} lv_mem_monitor_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initiaize the dyn_mem module (work memory and other variables)
+ */
+void lv_mem_init(void);
+
+/**
+ * Allocate a memory dynamically
+ * @param size size of the memory to allocate in bytes
+ * @return pointer to the allocated memory
+ */
+void * lv_mem_alloc(size_t size);
+
+/**
+ * Free an allocated data
+ * @param data pointer to an allocated memory
+ */
+void lv_mem_free(const void * data);
+
+/**
+ * Reallocate a memory with a new size. The old content will be kept.
+ * @param data pointer to an allocated memory.
+ * Its content will be copied to the new memory block and freed
+ * @param new_size the desired new size in byte
+ * @return pointer to the new memory
+ */
+void * lv_mem_realloc(void * data_p, size_t new_size);
+
+/**
+ * Join the adjacent free memory blocks
+ */
+void lv_mem_defrag(void);
+
+/**
+ * Give information about the work memory of dynamic allocation
+ * @param mon_p pointer to a dm_mon_p variable,
+ *              the result of the analysis will be stored here
+ */
+void lv_mem_monitor(lv_mem_monitor_t * mon_p);
+
+/**
+ * Give the size of an allocated memory
+ * @param data pointer to an allocated memory
+ * @return the size of data memory in bytes
+ */
+uint32_t lv_mem_get_size(const void * data);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_MEM_H*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_misc.mk 
b/scriptsrcs/lvgl/src/lv_misc/lv_misc.mk
new file mode 100755
index 0000000..67f496b
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_misc.mk
@@ -0,0 +1,22 @@
+CSRCS += lv_circ.c
+CSRCS += lv_area.c
+CSRCS += lv_task.c
+CSRCS += lv_fs.c
+CSRCS += lv_anim.c
+CSRCS += lv_mem.c
+CSRCS += lv_ll.c
+CSRCS += lv_color.c
+CSRCS += lv_txt.c
+CSRCS += lv_math.c
+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
+
+CFLAGS += "-I$(LVGL_DIR)/lvgl/src/lv_misc"
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_printf.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_printf.c
new file mode 100755
index 0000000..e05f35b
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_printf.c
@@ -0,0 +1,852 @@
+///////////////////////////////////////////////////////////////////////////////
+// \author (c) Marco Paland (info@xxxxxxxxxx)
+//             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 <stdbool.h>
+#include <stdint.h>
+
+
+// '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 <stddef.h> 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 <float.h>
+#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 <m.jasperse@xxxxxxxxx>
+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/scriptsrcs/lvgl/src/lv_misc/lv_printf.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_printf.h
new file mode 100755
index 0000000..b3b8598
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_printf.h
@@ -0,0 +1,75 @@
+///////////////////////////////////////////////////////////////////////////////
+// \author (c) Marco Paland (info@xxxxxxxxxx)
+//             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 <stdarg.h>
+#include <stddef.h>
+
+/**
+ * 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/scriptsrcs/lvgl/src/lv_misc/lv_task.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_task.c
new file mode 100755
index 0000000..5ac36ed
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_task.c
@@ -0,0 +1,382 @@
+/**
+ * @file lv_task.c
+ * An 'lv_task'  is a void (*fp) (void* param) type function which will be 
called periodically.
+ * A priority (5 levels + disable) can be assigned to lv_tasks.
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stddef.h>
+#include "lv_task.h"
+#include "../lv_core/lv_debug.h"
+#include "../lv_hal/lv_hal_tick.h"
+#include "lv_gc.h"
+
+#if defined(LV_GC_INCLUDE)
+#include LV_GC_INCLUDE
+#endif /* LV_ENABLE_GC */
+
+/*********************
+ *      DEFINES
+ *********************/
+#define IDLE_MEAS_PERIOD 500 /*[ms]*/
+#define DEF_PRIO LV_TASK_PRIO_MID
+#define DEF_PERIOD 500
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_task_exec(lv_task_t * task);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static bool lv_task_run  = false;
+static uint8_t idle_last = 0;
+static bool task_deleted;
+static bool task_created;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Init the lv_task module
+ */
+void lv_task_core_init(void)
+{
+    lv_ll_init(&LV_GC_ROOT(_lv_task_ll), sizeof(lv_task_t));
+
+    /*Initially enable the lv_task handling*/
+    lv_task_enable(true);
+}
+
+/**
+ * Call it  periodically to handle lv_tasks.
+ */
+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 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) {
+        already_running = false; /*Release mutex*/
+        return;
+    }
+
+    handler_start = lv_tick_get();
+
+    /* Run all task from the highest to the lowest priority
+     * If a lower priority task is executed check task again from the highest 
priority
+     * but on the priority of executed tasks don't run tasks before the 
executed*/
+    lv_task_t * task_interrupter = NULL;
+    lv_task_t * next;
+    bool end_flag;
+    do {
+        end_flag                 = true;
+        task_deleted             = false;
+        task_created             = false;
+        LV_GC_ROOT(_lv_task_act) = lv_ll_get_head(&LV_GC_ROOT(_lv_task_ll));
+        while(LV_GC_ROOT(_lv_task_act)) {
+            /* The task might be deleted if it runs only once ('once = 1')
+             * So get next element until the current is surely valid*/
+            next = lv_ll_get_next(&LV_GC_ROOT(_lv_task_ll), 
LV_GC_ROOT(_lv_task_act));
+
+            /*We reach priority of the turned off task. There is nothing more 
to do.*/
+            if(((lv_task_t *)LV_GC_ROOT(_lv_task_act))->prio == 
LV_TASK_PRIO_OFF) {
+                break;
+            }
+
+            /*Here is the interrupter task. Don't execute it again.*/
+            if(LV_GC_ROOT(_lv_task_act) == task_interrupter) {
+                task_interrupter = NULL; /*From this point only task after the 
interrupter comes, so
+                                            the interrupter is not interesting 
anymore*/
+                LV_GC_ROOT(_lv_task_act) = next;
+                continue; /*Load the next task*/
+            }
+
+            /*Just try to run the tasks with highest priority.*/
+            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 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))) {
+                        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;
+                        }
+                    }
+                }
+            }
+            /* It is no interrupter task or we already reached it earlier.
+             * Just run the remaining tasks*/
+            else {
+                if(lv_task_exec(LV_GC_ROOT(_lv_task_act))) {
+                    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 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*/
+        }
+    } while(!end_flag);
+
+    busy_time += lv_tick_elaps(handler_start);
+    uint32_t idle_period_time = lv_tick_elaps(idle_period_start);
+    if(idle_period_time >= IDLE_MEAS_PERIOD) {
+
+        idle_last         = (uint32_t)((uint32_t)busy_time * 100) / 
IDLE_MEAS_PERIOD; /*Calculate the busy percentage*/
+        idle_last         = idle_last > 100 ? 0 : 100 - idle_last;             
       /*But we need idle time*/
+        busy_time         = 0;
+        idle_period_start = lv_tick_get();
+    }
+
+    already_running = false; /*Release the mutex*/
+
+    LV_LOG_TRACE("lv_task_handler ready");
+}
+/**
+ * Create an "empty" task. It needs to initialzed with at least
+ * `lv_task_set_cb` and `lv_task_set_period`
+ * @return pointer to the craeted task
+ */
+lv_task_t * lv_task_create_basic(void)
+{
+    lv_task_t * new_task = NULL;
+    lv_task_t * tmp;
+
+    /*Create task lists in order of priority from high to low*/
+    tmp = lv_ll_get_head(&LV_GC_ROOT(_lv_task_ll));
+
+    /*It's the first task*/
+    if(NULL == tmp) {
+        new_task = lv_ll_ins_head(&LV_GC_ROOT(_lv_task_ll));
+        LV_ASSERT_MEM(new_task);
+        if(new_task == NULL) return NULL;
+    }
+    /*Insert the new task to proper place according to its priority*/
+    else {
+        do {
+            if(tmp->prio <= DEF_PRIO) {
+                new_task = lv_ll_ins_prev(&LV_GC_ROOT(_lv_task_ll), tmp);
+                LV_ASSERT_MEM(new_task);
+                if(new_task == NULL) return NULL;
+                break;
+            }
+            tmp = lv_ll_get_next(&LV_GC_ROOT(_lv_task_ll), tmp);
+        } while(tmp != NULL);
+
+        /*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_ASSERT_MEM(new_task);
+            if(new_task == NULL) return NULL;
+        }
+    }
+
+    new_task->period  = DEF_PERIOD;
+    new_task->task_cb = NULL;
+    new_task->prio    = DEF_PRIO;
+
+    new_task->once     = 0;
+    new_task->last_run = lv_tick_get();
+
+    new_task->user_data = NULL;
+
+    task_created = true;
+
+    return new_task;
+}
+
+/**
+ * Create a new lv_task
+ * @param task_xcb a callback which is the task itself. It will be called 
periodically.
+ *                 (the 'x' in the argument name indicates that its not a 
fully generic function because it not follows
+ *                  the `func_name(object, callback, ...)` convention)
+ * @param period call period in ms unit
+ * @param prio priority of the task (LV_TASK_PRIO_OFF means the task is 
stopped)
+ * @param user_data custom parameter
+ * @return pointer to the new task
+ */
+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_ASSERT_MEM(new_task);
+    if(new_task == NULL) return NULL;
+
+    lv_task_set_cb(new_task, task_cb);
+    lv_task_set_period(new_task, period);
+    lv_task_set_prio(new_task, prio);
+    new_task->user_data = user_data;
+
+    return new_task;
+}
+
+/**
+ * Set the callback the task (the function to call periodically)
+ * @param task pointer to a task
+ * @param task_cb teh function to call periodically
+ */
+void lv_task_set_cb(lv_task_t * task, lv_task_cb_t task_cb)
+{
+    task->task_cb = task_cb;
+}
+
+/**
+ * Delete a lv_task
+ * @param task pointer to task created by task
+ */
+void lv_task_del(lv_task_t * task)
+{
+    lv_ll_rem(&LV_GC_ROOT(_lv_task_ll), task);
+
+    lv_mem_free(task);
+
+    if(LV_GC_ROOT(_lv_task_act) == task) task_deleted = true; /*The active 
task was deleted*/
+}
+
+/**
+ * Set new priority for a lv_task
+ * @param task pointer to a lv_task
+ * @param prio the new priority
+ */
+void lv_task_set_prio(lv_task_t * task, lv_task_prio_t prio)
+{
+    if(task->prio == prio) return;
+
+    /*Find the tasks with new priority*/
+    lv_task_t * i;
+    LV_LL_READ(LV_GC_ROOT(_lv_task_ll), i)
+    {
+        if(i->prio <= prio) {
+            if(i != task) lv_ll_move_before(&LV_GC_ROOT(_lv_task_ll), task, i);
+            break;
+        }
+    }
+
+    /*There was no such a low priority so far then add the node to the tail*/
+    if(i == NULL) {
+        lv_ll_move_before(&LV_GC_ROOT(_lv_task_ll), task, NULL);
+    }
+
+    task->prio = prio;
+}
+
+/**
+ * Set new period for a lv_task
+ * @param task pointer to a lv_task
+ * @param period the new period
+ */
+void lv_task_set_period(lv_task_t * task, uint32_t period)
+{
+    task->period = period;
+}
+
+/**
+ * Make a lv_task ready. It will not wait its period.
+ * @param task pointer to a lv_task.
+ */
+void lv_task_ready(lv_task_t * task)
+{
+    task->last_run = lv_tick_get() - task->period - 1;
+}
+
+/**
+ * Delete the lv_task after one call
+ * @param task pointer to a lv_task.
+ */
+void lv_task_once(lv_task_t * task)
+{
+    task->once = 1;
+}
+
+/**
+ * Reset a lv_task.
+ * It will be called the previously set period milliseconds later.
+ * @param task pointer to a lv_task.
+ */
+void lv_task_reset(lv_task_t * task)
+{
+    task->last_run = lv_tick_get();
+}
+
+/**
+ * Enable or disable the whole lv_task handling
+ * @param en: true: lv_task handling is running, false: lv_task handling is 
suspended
+ */
+void lv_task_enable(bool en)
+{
+    lv_task_run = en;
+}
+
+/**
+ * Get idle percentage
+ * @return the lv_task idle in percentage
+ */
+uint8_t lv_task_get_idle(void)
+{
+    return idle_last;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Execute task if its the priority is appropriate
+ * @param task pointer to lv_task
+ * @return true: execute, false: not executed
+ */
+static bool lv_task_exec(lv_task_t * task)
+{
+    bool exec = false;
+
+    /*Execute if at least 'period' time elapsed*/
+    uint32_t elp = lv_tick_elaps(task->last_run);
+    if(elp >= task->period) {
+        task->last_run = lv_tick_get();
+        task_deleted   = false;
+        task_created   = false;
+        if(task->task_cb) task->task_cb(task);
+
+        /*Delete if it was a one shot lv_task*/
+        if(task_deleted == false) { /*The task might be deleted by itself as 
well*/
+            if(task->once != 0) {
+                lv_task_del(task);
+            }
+        }
+        exec = true;
+    }
+
+    return exec;
+}
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_task.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_task.h
new file mode 100755
index 0000000..05ff02b
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_task.h
@@ -0,0 +1,177 @@
+/**
+ * @file lv_task.c
+ * An 'lv_task'  is a void (*fp) (void* param) type function which will be 
called periodically.
+ * A priority (5 levels + disable) can be assigned to lv_tasks.
+ */
+
+#ifndef LV_TASK_H
+#define LV_TASK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "lv_mem.h"
+#include "lv_ll.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#ifndef LV_ATTRIBUTE_TASK_HANDLER
+#define LV_ATTRIBUTE_TASK_HANDLER
+#endif
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+struct _lv_task_t;
+
+/**
+ * Tasks execute this type type of functions.
+ */
+typedef void (*lv_task_cb_t)(struct _lv_task_t *);
+
+/**
+ * Possible priorities for lv_tasks
+ */
+enum {
+    LV_TASK_PRIO_OFF = 0,
+    LV_TASK_PRIO_LOWEST,
+    LV_TASK_PRIO_LOW,
+    LV_TASK_PRIO_MID,
+    LV_TASK_PRIO_HIGH,
+    LV_TASK_PRIO_HIGHEST,
+    _LV_TASK_PRIO_NUM,
+};
+typedef uint8_t lv_task_prio_t;
+
+/**
+ * Descriptor of a lv_task
+ */
+typedef struct _lv_task_t
+{
+    uint32_t period; /**< How often the task should run */
+    uint32_t last_run; /**< Last time the task ran */
+    lv_task_cb_t task_cb; /**< Task function */
+
+    void * user_data; /**< Custom user data */
+
+    uint8_t prio : 3; /**< Task priority */
+    uint8_t once : 1; /**< 1: one shot task */
+} lv_task_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Init the lv_task module
+ */
+void lv_task_core_init(void);
+
+//! @cond Doxygen_Suppress
+
+/**
+ * Call it  periodically to handle lv_tasks.
+ */
+LV_ATTRIBUTE_TASK_HANDLER void lv_task_handler(void);
+
+//! @endcond
+
+/**
+ * Create an "empty" task. It needs to initialzed with at least
+ * `lv_task_set_cb` and `lv_task_set_period`
+ * @return pointer to the craeted task
+ */
+lv_task_t * lv_task_create_basic(void);
+
+/**
+ * Create a new lv_task
+ * @param task_xcb a callback which is the task itself. It will be called 
periodically.
+ *                 (the 'x' in the argument name indicates that its not a 
fully generic function because it not follows
+ *                  the `func_name(object, callback, ...)` convention)
+ * @param period call period in ms unit
+ * @param prio priority of the task (LV_TASK_PRIO_OFF means the task is 
stopped)
+ * @param user_data custom parameter
+ * @return pointer to the new task
+ */
+lv_task_t * lv_task_create(lv_task_cb_t task_xcb, uint32_t period, 
lv_task_prio_t prio, void * user_data);
+
+/**
+ * Delete a lv_task
+ * @param task pointer to task_cb created by task
+ */
+void lv_task_del(lv_task_t * task);
+
+/**
+ * Set the callback the task (the function to call periodically)
+ * @param task pointer to a task
+ * @param task_cb the function to call periodically
+ */
+void lv_task_set_cb(lv_task_t * task, lv_task_cb_t task_cb);
+
+/**
+ * Set new priority for a lv_task
+ * @param task pointer to a lv_task
+ * @param prio the new priority
+ */
+void lv_task_set_prio(lv_task_t * task, lv_task_prio_t prio);
+
+/**
+ * Set new period for a lv_task
+ * @param task pointer to a lv_task
+ * @param period the new period
+ */
+void lv_task_set_period(lv_task_t * task, uint32_t period);
+
+/**
+ * Make a lv_task ready. It will not wait its period.
+ * @param task pointer to a lv_task.
+ */
+void lv_task_ready(lv_task_t * task);
+
+/**
+ * Delete the lv_task after one call
+ * @param task pointer to a lv_task.
+ */
+void lv_task_once(lv_task_t * task);
+
+/**
+ * Reset a lv_task.
+ * It will be called the previously set period milliseconds later.
+ * @param task pointer to a lv_task.
+ */
+void lv_task_reset(lv_task_t * task);
+
+/**
+ * Enable or disable the whole  lv_task handling
+ * @param en: true: lv_task handling is running, false: lv_task handling is 
suspended
+ */
+void lv_task_enable(bool en);
+
+/**
+ * Get idle percentage
+ * @return the lv_task idle in percentage
+ */
+uint8_t lv_task_get_idle(void);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_templ.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_templ.c
new file mode 100755
index 0000000..c5bb68c
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_templ.c
@@ -0,0 +1,40 @@
+/**
+ * @file lv_templ.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/* This typedef exists purely to keep -Wpedantic happy when the file is empty. 
*/
+/* It can be removed. */
+typedef int keep_pedantic_happy;
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_templ.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_templ.h
new file mode 100755
index 0000000..1f1b92d
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_templ.h
@@ -0,0 +1,37 @@
+/**
+ * @file lv_templ.h
+ *
+ */
+
+#ifndef LV_TEMPL_H
+#define LV_TEMPL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_TEMPL_H*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_txt.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_txt.c
new file mode 100755
index 0000000..23c05b9
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_txt.c
@@ -0,0 +1,838 @@
+/**
+ * @file lv_text.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_txt.h"
+#include "lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define NO_BREAK_FOUND UINT32_MAX
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static inline bool is_break_char(uint32_t letter);
+
+#if LV_TXT_ENC == LV_TXT_ENC_UTF8
+static uint8_t lv_txt_utf8_size(const char * str);
+static uint32_t lv_txt_unicode_to_utf8(uint32_t letter_uni);
+static uint32_t lv_txt_utf8_conv_wc(uint32_t c);
+static uint32_t lv_txt_utf8_next(const char * txt, uint32_t * i);
+static uint32_t lv_txt_utf8_prev(const char * txt, uint32_t * i_start);
+static uint32_t lv_txt_utf8_get_byte_id(const char * txt, uint32_t utf8_id);
+static uint32_t lv_txt_utf8_get_char_id(const char * txt, uint32_t byte_id);
+static uint32_t lv_txt_utf8_get_length(const char * txt);
+#elif LV_TXT_ENC == LV_TXT_ENC_ASCII
+static uint8_t lv_txt_iso8859_1_size(const char * str);
+static uint32_t lv_txt_unicode_to_iso8859_1(uint32_t letter_uni);
+static uint32_t lv_txt_iso8859_1_conv_wc(uint32_t c);
+static uint32_t lv_txt_iso8859_1_next(const char * txt, uint32_t * i);
+static uint32_t lv_txt_iso8859_1_prev(const char * txt, uint32_t * i_start);
+static uint32_t lv_txt_iso8859_1_get_byte_id(const char * txt, uint32_t 
utf8_id);
+static uint32_t lv_txt_iso8859_1_get_char_id(const char * txt, uint32_t 
byte_id);
+static uint32_t lv_txt_iso8859_1_get_length(const char * txt);
+#endif
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *  GLOBAL VARIABLES
+ **********************/
+#if LV_TXT_ENC == LV_TXT_ENC_UTF8
+uint8_t (*lv_txt_encoded_size)(const char *)                   = 
lv_txt_utf8_size;
+uint32_t (*lv_txt_unicode_to_encoded)(uint32_t)                = 
lv_txt_unicode_to_utf8;
+uint32_t (*lv_txt_encoded_conv_wc)(uint32_t)                   = 
lv_txt_utf8_conv_wc;
+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_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;
+uint32_t (*lv_txt_unicode_to_encoded)(uint32_t)                = 
lv_txt_unicode_to_iso8859_1;
+uint32_t (*lv_txt_encoded_conv_wc)(uint32_t)                   = 
lv_txt_iso8859_1_conv_wc;
+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_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
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Get size of a text
+ * @param size_res pointer to a 'point_t' variable to store the result
+ * @param text pointer to a text
+ * @param font pinter to font of the text
+ * @param letter_space letter space of the text
+ * @param txt.line_space line space of the text
+ * @param flags settings for the text from 'txt_flag_t' enum
+ * @param max_width max with of the text (break the lines to fit this size) 
Set CORD_MAX to avoid
+ * line breaks
+ */
+void lv_txt_get_size(lv_point_t * size_res, const char * text, const lv_font_t 
* font, lv_coord_t letter_space,
+                     lv_coord_t line_space, lv_coord_t max_width, 
lv_txt_flag_t flag)
+{
+    size_res->x = 0;
+    size_res->y = 0;
+
+    if(text == NULL) return;
+    if(font == NULL) return;
+
+    if(flag & LV_TXT_FLAG_EXPAND) max_width = LV_COORD_MAX;
+
+    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);
+
+    /*Calc. the height and longest line*/
+    while(text[line_start] != '\0') {
+        new_line_start += lv_txt_get_next_line(&text[line_start], font, 
letter_space, max_width, flag);
+        size_res->y += letter_height;
+        size_res->y += line_space;
+
+        /*Calculate the the longest line*/
+        act_line_length = lv_txt_get_width(&text[line_start], new_line_start - 
line_start, font, letter_space, flag);
+
+        size_res->x = LV_MATH_MAX(act_line_length, size_res->x);
+        line_start  = new_line_start;
+    }
+
+    /*Ma ke the text one line taller if the last character is '\n' or '\r'*/
+    if((line_start != 0) && (text[line_start - 1] == '\n' || text[line_start - 
1] == '\r')) {
+        size_res->y += letter_height + line_space;
+    }
+
+    /*Correction with the last line space or set the height manually if the 
text is empty*/
+    if(size_res->y == 0)
+        size_res->y = letter_height;
+    else
+        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;
+
+        if(letter_w > 0) {
+            cur_w += letter_space;
+        }
+
+        /* Test if this character fits within max_width */
+        if(break_index == NO_BREAK_FOUND && (cur_w - letter_space) > 
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;
+
+
+        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
+ * @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
+ * @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)
+{
+    if(txt == NULL) return 0;
+    if(font == NULL) return 0;
+
+    if(flag & LV_TXT_FLAG_EXPAND) max_width = LV_COORD_MAX;
+    lv_txt_cmd_state_t cmd_state = LV_TXT_CMD_STATE_WAIT;
+    uint32_t i = 0;                                        /* Iterating index 
into txt */
+
+    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;
+
+        if( advance == 0 ){
+            if(i == 0) lv_txt_encoded_next(txt, &i); // prevent inf loops
+            break;
+        }
+
+        i += advance;
+
+        if(txt[0] == '\n' || txt[0] == '\r') break;
+
+        if(txt[i] == '\n' || txt[i] == '\r'){
+            i++;  /* Include the following newline in the current line */
+            break;
+        }
+
+    }
+
+    /* Always step at least one to avoid infinite loops */
+    if(i == 0) {
+        lv_txt_encoded_next(txt, &i);
+    }
+
+    return i;
+}
+
+/**
+ * Give the length of a text with a given font
+ * @param txt a '\0' terminate string
+ * @param length length of 'txt' in byte count and not characters (Á is 1 
character but 2 bytes in
+ * UTF-8)
+ * @param font pointer to a font
+ * @param letter_space letter space
+ * @param flags settings for the text from 'txt_flag_t' enum
+ * @return length of a char_num long text
+ */
+lv_coord_t lv_txt_get_width(const char * txt, uint16_t length, const lv_font_t 
* font, lv_coord_t letter_space,
+                            lv_txt_flag_t flag)
+{
+    if(txt == NULL) return 0;
+    if(font == NULL) return 0;
+
+    uint32_t i                   = 0;
+    lv_coord_t width             = 0;
+    lv_txt_cmd_state_t cmd_state = LV_TXT_CMD_STATE_WAIT;
+    uint32_t letter;
+    uint32_t letter_next;
+
+    if(length != 0) {
+        while(i < length) {
+            letter      = lv_txt_encoded_next(txt, &i);
+            letter_next = lv_txt_encoded_next(&txt[i], NULL);
+            if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
+                if(lv_txt_is_cmd(&cmd_state, letter) != false) {
+                    continue;
+                }
+            }
+
+            lv_coord_t char_width = lv_font_get_glyph_width(font, letter, 
letter_next);
+            if(char_width > 0) {
+                width += char_width;
+                width += letter_space;
+            }
+        }
+
+        if(width > 0) {
+            width -= letter_space; /*Trim the last letter space. Important if 
the text is center
+                                      aligned */
+        }
+    }
+
+    return width;
+}
+
+/**
+ * Check next character in a string and decide if the character is part of the 
command or not
+ * @param state pointer to a txt_cmd_state_t variable which stores the current 
state of command
+ * processing (Initied. to TXT_CMD_STATE_WAIT )
+ * @param c the current character
+ * @return true: the character is part of a command and should not be written,
+ *         false: the character should be written
+ */
+bool lv_txt_is_cmd(lv_txt_cmd_state_t * state, uint32_t c)
+{
+    bool ret = false;
+
+    if(c == (uint32_t)LV_TXT_COLOR_CMD[0]) {
+        if(*state == LV_TXT_CMD_STATE_WAIT) { /*Start char*/
+            *state = LV_TXT_CMD_STATE_PAR;
+            ret    = true;
+        }
+        /*Other start char in parameter is escaped cmd. char */
+        else if(*state == LV_TXT_CMD_STATE_PAR) {
+            *state = LV_TXT_CMD_STATE_WAIT;
+        }
+        /*Command end */
+        else if(*state == LV_TXT_CMD_STATE_IN) {
+            *state = LV_TXT_CMD_STATE_WAIT;
+            ret    = true;
+        }
+    }
+
+    /*Skip the color parameter and wait the space after it*/
+    if(*state == LV_TXT_CMD_STATE_PAR) {
+        if(c == ' ') {
+            *state = LV_TXT_CMD_STATE_IN; /*After the parameter the text is in 
the command*/
+        }
+        ret = true;
+    }
+
+    return ret;
+}
+
+/**
+ * Insert a string into an other
+ * @param txt_buf the original text (must be big enough for the result text)
+ * @param pos position to insert. Expressed in character index and not byte 
index (Different in
+ * UTF-8) 0: before the original text, 1: after the first char etc.
+ * @param ins_txt text to insert
+ */
+void lv_txt_ins(char * txt_buf, uint32_t pos, const char * ins_txt)
+{
+    size_t old_len = strlen(txt_buf);
+    size_t ins_len = strlen(ins_txt);
+    size_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*/
+
+    /*Copy the second part into the end to make place to text to insert*/
+    size_t i;
+    for(i = new_len; i >= pos + ins_len; i--) {
+        txt_buf[i] = txt_buf[i - ins_len];
+    }
+
+    /* Copy the text into the new space*/
+    memcpy(txt_buf + pos, ins_txt, ins_len);
+}
+
+/**
+ * Delete a part of a string
+ * @param txt string to modify
+ * @param pos position where to start the deleting (0: before the first char, 
1: after the first
+ * char etc.)
+ * @param len number of characters to delete
+ */
+void lv_txt_cut(char * txt, uint32_t pos, uint32_t len)
+{
+
+    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);
+
+    /*Copy the second part into the end to make place to text to insert*/
+    uint32_t i;
+    for(i = pos; i <= old_len - len; i++) {
+        txt[i] = txt[i + len];
+    }
+}
+
+#if LV_TXT_ENC == LV_TXT_ENC_UTF8
+/*******************************
+ *   UTF-8 ENCODER/DECOER
+ ******************************/
+
+/**
+ * Give the size of an UTF-8 coded character
+ * @param str pointer to a character in a string
+ * @return length of the UTF-8 character (1,2,3 or 4). O on invalid code
+ */
+static uint8_t lv_txt_utf8_size(const char * str)
+{
+    if((str[0] & 0x80) == 0)
+        return 1;
+    else if((str[0] & 0xE0) == 0xC0)
+        return 2;
+    else if((str[0] & 0xF0) == 0xE0)
+        return 3;
+    else if((str[0] & 0xF8) == 0xF0)
+        return 4;
+    return 0; /*If the char was invalid tell it's 1 byte long*/
+}
+
+/**
+ * Convert an Unicode letter to UTF-8.
+ * @param letter_uni an Unicode letter
+ * @return UTF-8 coded character in Little Endian to be compatible with C 
chars (e.g. 'Á', 'Ű')
+ */
+static uint32_t lv_txt_unicode_to_utf8(uint32_t letter_uni)
+{
+    if(letter_uni < 128) return letter_uni;
+    uint8_t bytes[4];
+
+    if(letter_uni < 0x0800) {
+        bytes[0] = ((letter_uni >> 6) & 0x1F) | 0xC0;
+        bytes[1] = ((letter_uni >> 0) & 0x3F) | 0x80;
+        bytes[2] = 0;
+        bytes[3] = 0;
+    } else if(letter_uni < 0x010000) {
+        bytes[0] = ((letter_uni >> 12) & 0x0F) | 0xE0;
+        bytes[1] = ((letter_uni >> 6) & 0x3F) | 0x80;
+        bytes[2] = ((letter_uni >> 0) & 0x3F) | 0x80;
+        bytes[3] = 0;
+    } else if(letter_uni < 0x110000) {
+        bytes[0] = ((letter_uni >> 18) & 0x07) | 0xF0;
+        bytes[1] = ((letter_uni >> 12) & 0x3F) | 0x80;
+        bytes[2] = ((letter_uni >> 6) & 0x3F) | 0x80;
+        bytes[3] = ((letter_uni >> 0) & 0x3F) | 0x80;
+    }
+
+    uint32_t * res_p = (uint32_t *)bytes;
+    return *res_p;
+}
+
+/**
+ * Convert a wide character, e.g. 'Á' little endian to be UTF-8 compatible
+ * @param c a wide character or a  Little endian number
+ * @return `c` in big endian
+ */
+static uint32_t lv_txt_utf8_conv_wc(uint32_t c)
+{
+    /*Swap the bytes (UTF-8 is big endian, but the MCUs are little endian)*/
+    if((c & 0x80) != 0) {
+        uint32_t swapped;
+        uint8_t c8[4];
+        memcpy(c8, &c, 4);
+        swapped = (c8[0] << 24) + (c8[1] << 16) + (c8[2] << 8) + (c8[3]);
+        uint8_t i;
+        for(i = 0; i < 4; i++) {
+            if((swapped & 0xFF) == 0)
+                swapped = (swapped >> 8); /*Ignore leading zeros (they were in 
the end originally)*/
+        }
+        c = swapped;
+    }
+
+    return c;
+}
+
+/**
+ * Decode an UTF-8 character from a string.
+ * @param txt pointer to '\0' terminated string
+ * @param i start byte index in 'txt' where to start.
+ *          After call it will point to the next UTF-8 char in 'txt'.
+ *          NULL to use txt[0] as index
+ * @return the decoded Unicode character or 0 on invalid UTF-8 code
+ */
+static uint32_t lv_txt_utf8_next(const char * txt, uint32_t * i)
+{
+    /* Unicode to UTF-8
+     * 00000000 00000000 00000000 0xxxxxxx -> 0xxxxxxx
+     * 00000000 00000000 00000yyy yyxxxxxx -> 110yyyyy 10xxxxxx
+     * 00000000 00000000 zzzzyyyy yyxxxxxx -> 1110zzzz 10yyyyyy 10xxxxxx
+     * 00000000 000wwwzz zzzzyyyy yyxxxxxx -> 11110www 10zzzzzz 10yyyyyy 
10xxxxxx
+     * */
+
+    uint32_t result = 0;
+
+    /*Dummy 'i' pointer is required*/
+    uint32_t i_tmp = 0;
+    if(i == NULL) i = &i_tmp;
+
+    /*Normal ASCII*/
+    if((txt[*i] & 0x80) == 0) {
+        result = txt[*i];
+        (*i)++;
+    }
+    /*Real UTF-8 decode*/
+    else {
+        /*2 bytes UTF-8 code*/
+        if((txt[*i] & 0xE0) == 0xC0) {
+            result = (uint32_t)(txt[*i] & 0x1F) << 6;
+            (*i)++;
+            if((txt[*i] & 0xC0) != 0x80) return 0; /*Invalid UTF-8 code*/
+            result += (txt[*i] & 0x3F);
+            (*i)++;
+        }
+        /*3 bytes UTF-8 code*/
+        else if((txt[*i] & 0xF0) == 0xE0) {
+            result = (uint32_t)(txt[*i] & 0x0F) << 12;
+            (*i)++;
+
+            if((txt[*i] & 0xC0) != 0x80) return 0; /*Invalid UTF-8 code*/
+            result += (uint32_t)(txt[*i] & 0x3F) << 6;
+            (*i)++;
+
+            if((txt[*i] & 0xC0) != 0x80) return 0; /*Invalid UTF-8 code*/
+            result += (txt[*i] & 0x3F);
+            (*i)++;
+        }
+        /*4 bytes UTF-8 code*/
+        else if((txt[*i] & 0xF8) == 0xF0) {
+            result = (uint32_t)(txt[*i] & 0x07) << 18;
+            (*i)++;
+
+            if((txt[*i] & 0xC0) != 0x80) return 0; /*Invalid UTF-8 code*/
+            result += (uint32_t)(txt[*i] & 0x3F) << 12;
+            (*i)++;
+
+            if((txt[*i] & 0xC0) != 0x80) return 0; /*Invalid UTF-8 code*/
+            result += (uint32_t)(txt[*i] & 0x3F) << 6;
+            (*i)++;
+
+            if((txt[*i] & 0xC0) != 0x80) return 0; /*Invalid UTF-8 code*/
+            result += txt[*i] & 0x3F;
+            (*i)++;
+        } else {
+            (*i)++; /*Not UTF-8 char. Go the next.*/
+        }
+    }
+    return result;
+}
+
+/**
+ * Get previous UTF-8 character form a string.
+ * @param txt pointer to '\0' terminated string
+ * @param i start byte index in 'txt' where to start. After the call it will 
point to the previous
+ * UTF-8 char in 'txt'.
+ * @return the decoded Unicode character or 0 on invalid UTF-8 code
+ */
+static uint32_t lv_txt_utf8_prev(const char * txt, uint32_t * i)
+{
+    uint8_t c_size;
+    uint8_t cnt = 0;
+
+    /*Try to find a !0 long UTF-8 char by stepping one character back*/
+    (*i)--;
+    do {
+        if(cnt >= 4) return 0; /*No UTF-8 char found before the initial*/
+
+        c_size = lv_txt_encoded_size(&txt[*i]);
+        if(c_size == 0) {
+            if(*i != 0)
+                (*i)--;
+            else
+                return 0;
+        }
+        cnt++;
+    } while(c_size == 0);
+
+    uint32_t i_tmp  = *i;
+    uint32_t letter = lv_txt_encoded_next(txt, &i_tmp); /*Character found, get 
it*/
+
+    return letter;
+}
+
+/**
+ * Convert a character index (in an UTF-8 text) to byte index.
+ * E.g. in "AÁRT" index of 'R' is 2th char but start at byte 3 because 'Á' is 
2 bytes long
+ * @param txt a '\0' terminated UTF-8 string
+ * @param utf8_id character index
+ * @return byte index of the 'utf8_id'th letter
+ */
+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++) {
+        uint8_t c_size = lv_txt_encoded_size(&txt[byte_cnt]);
+        byte_cnt += c_size > 0 ? c_size : 1;
+    }
+
+    return byte_cnt;
+}
+
+/**
+ * Convert a byte index (in an UTF-8 text) to character index.
+ * E.g. in "AÁRT" index of 'R' is 2th char but start at byte 3 because 'Á' is 
2 bytes long
+ * @param txt a '\0' terminated UTF-8 string
+ * @param byte_id byte index
+ * @return character index of the letter at 'byte_id'th position
+ */
+static uint32_t lv_txt_utf8_get_char_id(const char * txt, uint32_t byte_id)
+{
+    uint32_t i        = 0;
+    uint32_t char_cnt = 0;
+
+    while(i < byte_id) {
+        lv_txt_encoded_next(txt, &i); /*'i' points to the next letter so use 
the prev. value*/
+        char_cnt++;
+    }
+
+    return char_cnt;
+}
+
+/**
+ * Get the number of characters (and NOT bytes) in a string. Decode it with 
UTF-8 if enabled.
+ * E.g.: "ÁBC" is 3 characters (but 4 bytes)
+ * @param txt a '\0' terminated char string
+ * @return number of characters
+ */
+static uint32_t lv_txt_utf8_get_length(const char * txt)
+{
+    uint32_t len = 0;
+    uint32_t i   = 0;
+
+    while(txt[i] != '\0') {
+        lv_txt_encoded_next(txt, &i);
+        len++;
+    }
+
+    return len;
+}
+
+#elif LV_TXT_ENC == LV_TXT_ENC_ASCII
+/*******************************
+ *  ASCII ENCODER/DECOER
+ ******************************/
+
+/**
+ * Give the size of an ISO8859-1 coded character
+ * @param str pointer to a character in a string
+ * @return length of the UTF-8 character (1,2,3 or 4). O on invalid code
+ */
+static uint8_t lv_txt_iso8859_1_size(const char * str)
+{
+    (void)str; /*Unused*/
+    return 1;
+}
+
+/**
+ * Convert an Unicode letter to ISO8859-1.
+ * @param letter_uni an Unicode letter
+ * @return ISO8859-1 coded character in Little Endian to be compatible with C 
chars (e.g. 'Á', 'Ű')
+ */
+static uint32_t lv_txt_unicode_to_iso8859_1(uint32_t letter_uni)
+{
+    if(letter_uni < 128)
+        return letter_uni;
+    else
+        return ' ';
+}
+
+/**
+ * Convert wide characters to ASCII, however wide characters in ASCII range 
(e.g. 'A') are ASCII compatible by default.
+ * So this function does nothing just returns with `c`.
+ * @param c a character, e.g. 'A'
+ * @return same as `c`
+ */
+static uint32_t lv_txt_iso8859_1_conv_wc(uint32_t c)
+{
+    return c;
+}
+
+/**
+ * Decode an ISO8859-1 character from a string.
+ * @param txt pointer to '\0' terminated string
+ * @param i start byte index in 'txt' where to start.
+ *          After call it will point to the next UTF-8 char in 'txt'.
+ *          NULL to use txt[0] as index
+ * @return the decoded Unicode character or 0 on invalid UTF-8 code
+ */
+static uint32_t lv_txt_iso8859_1_next(const char * txt, uint32_t * i)
+{
+    if(i == NULL) return txt[1]; /*Get the next char */
+
+    uint8_t letter = txt[*i];
+    (*i)++;
+    return letter;
+}
+
+/**
+ * Get previous ISO8859-1 character form a string.
+ * @param txt pointer to '\0' terminated string
+ * @param i start byte index in 'txt' where to start. After the call it will 
point to the previous UTF-8 char in 'txt'.
+ * @return the decoded Unicode character or 0 on invalid UTF-8 code
+ */
+static uint32_t lv_txt_iso8859_1_prev(const char * txt, uint32_t * i)
+{
+    if(i == NULL) return *(txt - 1); /*Get the prev. char */
+
+    (*i)--;
+    uint8_t letter = txt[*i];
+
+    return letter;
+}
+
+/**
+ * Convert a character index (in an ISO8859-1 text) to byte index.
+ * E.g. in "AÁRT" index of 'R' is 2th char but start at byte 3 because 'Á' is 
2 bytes long
+ * @param txt a '\0' terminated UTF-8 string
+ * @param utf8_id character index
+ * @return byte index of the 'utf8_id'th letter
+ */
+static uint32_t lv_txt_iso8859_1_get_byte_id(const char * txt, uint32_t 
utf8_id)
+{
+    (void)txt;      /*Unused*/
+    return utf8_id; /*In Non encoded no difference*/
+}
+
+/**
+ * Convert a byte index (in an ISO8859-1 text) to character index.
+ * E.g. in "AÁRT" index of 'R' is 2th char but start at byte 3 because 'Á' is 
2 bytes long
+ * @param txt a '\0' terminated UTF-8 string
+ * @param byte_id byte index
+ * @return character index of the letter at 'byte_id'th position
+ */
+static uint32_t lv_txt_iso8859_1_get_char_id(const char * txt, uint32_t 
byte_id)
+{
+    (void)txt;      /*Unused*/
+    return byte_id; /*In Non encoded no difference*/
+}
+
+/**
+ * Get the number of characters (and NOT bytes) in a string. Decode it with 
UTF-8 if enabled.
+ * E.g.: "ÁBC" is 3 characters (but 4 bytes)
+ * @param txt a '\0' terminated char string
+ * @return number of characters
+ */
+static uint32_t lv_txt_iso8859_1_get_length(const char * txt)
+{
+    return strlen(txt);
+}
+#else
+
+#error "Invalid character encoding. See `LV_TXT_ENC` in `lv_conf.h`"
+
+#endif
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Test if char is break char or not (a text can broken here or not)
+ * @param letter a letter
+ * @return false: 'letter' is not break char
+ */
+static inline bool is_break_char(uint32_t letter)
+{
+    uint8_t i;
+    bool ret = false;
+
+    /*Compare the letter to TXT_BREAK_CHARS*/
+    for(i = 0; LV_TXT_BREAK_CHARS[i] != '\0'; i++) {
+        if(letter == (uint32_t)LV_TXT_BREAK_CHARS[i]) {
+            ret = true; /*If match then it is break char*/
+            break;
+        }
+    }
+
+    return ret;
+}
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_txt.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_txt.h
new file mode 100755
index 0000000..6dbce5d
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_txt.h
@@ -0,0 +1,211 @@
+/**
+ * @file lv_text.h
+ *
+ */
+
+#ifndef LV_TXT_H
+#define LV_TXT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include <stdbool.h>
+#include "lv_area.h"
+#include "lv_area.h"
+#include "../lv_font/lv_font.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#ifndef LV_TXT_COLOR_CMD
+#define LV_TXT_COLOR_CMD "#"
+#endif
+
+#define LV_TXT_ENC_UTF8 1
+#define LV_TXT_ENC_ASCII 2
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+/**
+ * Options for text rendering.
+ */
+enum {
+    LV_TXT_FLAG_NONE    = 0x00,
+    LV_TXT_FLAG_RECOLOR = 0x01, /**< Enable parsing of recolor command*/
+    LV_TXT_FLAG_EXPAND  = 0x02, /**< Ignore width to avoid automatic word 
wrapping*/
+    LV_TXT_FLAG_CENTER  = 0x04, /**< Align the text to the middle*/
+    LV_TXT_FLAG_RIGHT   = 0x08, /**< Align the text to the right*/
+};
+typedef uint8_t lv_txt_flag_t;
+
+/**
+ * State machine for text renderer. */
+enum {
+    LV_TXT_CMD_STATE_WAIT, /**< Waiting for command*/
+    LV_TXT_CMD_STATE_PAR,  /**< Processing the parameter*/
+    LV_TXT_CMD_STATE_IN,   /**< Processing the command*/
+};
+typedef uint8_t lv_txt_cmd_state_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Get size of a text
+ * @param size_res pointer to a 'point_t' variable to store the result
+ * @param text pointer to a text
+ * @param font pinter to font of the text
+ * @param letter_space letter space of the text
+ * @param line_space line space of the text
+ * @param flags settings for the text from 'txt_flag_t' enum
+ * @param max_width max with of the text (break the lines to fit this size) 
Set CORD_MAX to avoid
+ * line breaks
+ */
+void lv_txt_get_size(lv_point_t * size_res, const char * text, const lv_font_t 
* font, lv_coord_t letter_space,
+                     lv_coord_t line_space, lv_coord_t max_width, 
lv_txt_flag_t flag);
+
+/**
+ * Get the next line of text. Check line length and break chars too.
+ * @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
+ * @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);
+
+/**
+ * Give the length of a text with a given font
+ * @param txt a '\0' terminate string
+ * @param length length of 'txt' in byte count and not characters (Á is 1 
character but 2 bytes in
+ * UTF-8)
+ * @param font pointer to a font
+ * @param letter_space letter space
+ * @param flags settings for the text from 'txt_flag_t' enum
+ * @return length of a char_num long text
+ */
+lv_coord_t lv_txt_get_width(const char * txt, uint16_t length, const lv_font_t 
* font, lv_coord_t letter_space,
+                            lv_txt_flag_t flag);
+
+/**
+ * Check next character in a string and decide if te character is part of the 
command or not
+ * @param state pointer to a txt_cmd_state_t variable which stores the current 
state of command
+ * processing
+ * @param c the current character
+ * @return true: the character is part of a command and should not be written,
+ *         false: the character should be written
+ */
+bool lv_txt_is_cmd(lv_txt_cmd_state_t * state, uint32_t c);
+
+/**
+ * Insert a string into an other
+ * @param txt_buf the original text (must be big enough for the result text)
+ * @param pos position to insert (0: before the original text, 1: after the 
first char etc.)
+ * @param ins_txt text to insert
+ */
+void lv_txt_ins(char * txt_buf, uint32_t pos, const char * ins_txt);
+
+/**
+ * Delete a part of a string
+ * @param txt string to modify
+ * @param pos position where to start the deleting (0: before the first char, 
1: after the first
+ * char etc.)
+ * @param len number of characters to delete
+ */
+void lv_txt_cut(char * txt, uint32_t pos, uint32_t len);
+
+/***************************************************************
+ *  GLOBAL FUNCTION POINTERS FOR CAHRACTER ENCODING INTERFACE
+ ***************************************************************/
+
+/**
+ * Give the size of an encoded character
+ * @param str pointer to a character in a string
+ * @return length of the encoded character (1,2,3 ...). O in invalid
+ */
+extern uint8_t (*lv_txt_encoded_size)(const char *);
+
+/**
+ * Convert an Unicode letter to encoded
+ * @param letter_uni an Unicode letter
+ * @return Encoded character in Little Endian to be compatible with C chars 
(e.g. 'Á', 'Ü')
+ */
+extern uint32_t (*lv_txt_unicode_to_encoded)(uint32_t);
+
+/**
+ * Convert a wide character, e.g. 'Á' little endian to be compatible with the 
encoded format.
+ * @param c a wide character
+ * @return `c` in the encoded format
+ */
+extern uint32_t (*lv_txt_encoded_conv_wc)(uint32_t c);
+
+/**
+ * Decode the next encoded character from a string.
+ * @param txt pointer to '\0' terminated string
+ * @param i start index in 'txt' where to start.
+ *                After the call it will point to the next encoded char in 
'txt'.
+ *                NULL to use txt[0] as index
+ * @return the decoded Unicode character or 0 on invalid data code
+ */
+extern uint32_t (*lv_txt_encoded_next)(const char *, uint32_t *);
+
+/**
+ * Get the previous encoded character form a string.
+ * @param txt pointer to '\0' terminated string
+ * @param i_start index in 'txt' where to start. After the call it will point 
to the previous
+ * encoded char in 'txt'.
+ * @return the decoded Unicode character or 0 on invalid data
+ */
+extern uint32_t (*lv_txt_encoded_prev)(const char *, uint32_t *);
+
+/**
+ * Convert a letter index (in an the encoded text) to byte index.
+ * E.g. in UTF-8 "AÁRT" index of 'R' is 2 but start at byte 3 because 'Á' is 2 
bytes long
+ * @param txt a '\0' terminated UTF-8 string
+ * @param enc_id letter index
+ * @return byte index of the 'enc_id'th letter
+ */
+extern uint32_t (*lv_txt_encoded_get_byte_id)(const char *, uint32_t);
+
+/**
+ * Convert a byte index (in an encoded text) to character index.
+ * E.g. in UTF-8 "AÁRT" index of 'R' is 2 but start at byte 3 because 'Á' is 2 
bytes long
+ * @param txt a '\0' terminated UTF-8 string
+ * @param byte_id byte index
+ * @return character index of the letter at 'byte_id'th position
+ */
+extern uint32_t (*lv_txt_encoded_get_char_id)(const char *, uint32_t);
+
+/**
+ * Get the number of characters (and NOT bytes) in a string.
+ * E.g. in UTF-8 "ÁBC" is 3 characters (but 4 bytes)
+ * @param txt a '\0' terminated char string
+ * @return number of characters
+ */
+extern uint32_t (*lv_txt_get_encoded_length)(const char *);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*USE_TXT*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_types.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_types.h
new file mode 100755
index 0000000..2c28bca
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_types.h
@@ -0,0 +1,64 @@
+/**
+ * @file lv_types.h
+ *
+ */
+
+#ifndef LV_TYPES_H
+#define LV_TYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+
+/*********************
+ *      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
+ **********************/
+
+/**
+ * LittlevGL error codes.
+ */
+enum {
+    LV_RES_INV = 0, /*Typically indicates that the object is deleted (become 
invalid) in the action
+                       function or an operation was failed*/
+    LV_RES_OK,      /*The object is valid (no deleted) after the action*/
+};
+typedef uint8_t lv_res_t;
+
+#ifdef LV_ARCH_64
+typedef uint64_t lv_uintptr_t;
+#else
+typedef uint32_t lv_uintptr_t;
+#endif
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_TYPES_H*/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_utils.c 
b/scriptsrcs/lvgl/src/lv_misc/lv_utils.c
new file mode 100755
index 0000000..3f18956
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_utils.c
@@ -0,0 +1,115 @@
+/**
+ * @file lv_utils.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stdbool.h>
+
+#include "lv_utils.h"
+#include "lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Convert a number to string
+ * @param num a number
+ * @param buf pointer to a `char` buffer. The result will be stored here (max 
10 elements)
+ * @return same as `buf` (just for convenience)
+ */
+char * lv_utils_num_to_str(int32_t num, char * buf)
+{
+    if(num == 0) {
+        buf[0] = '0';
+        buf[1] = '\0';
+        return buf;
+    }
+    int8_t digitCount = 0;
+    int8_t i          = 0;
+    if(num < 0) {
+        buf[digitCount++] = '-';
+        num               = LV_MATH_ABS(num);
+        ++i;
+    }
+    while(num) {
+        char digit        = num % 10;
+        buf[digitCount++] = digit + 48;
+        num /= 10;
+    }
+    buf[digitCount] = '\0';
+    digitCount--;
+    while(digitCount > i) {
+        char temp       = buf[i];
+        buf[i]          = buf[digitCount];
+        buf[digitCount] = temp;
+        digitCount--;
+        i++;
+    }
+    return buf;
+}
+
+/** Searches base[0] to base[n - 1] for an item that matches *key.
+ *
+ * @note The function cmp must return negative if its first
+ *  argument (the search key) is less that its second (a table entry),
+ *  zero if equal, and positive if greater.
+ *
+ *  @note Items in the array must be in ascending order.
+ *
+ * @param key    Pointer to item being searched for
+ * @param base   Pointer to first element to search
+ * @param n      Number of elements
+ * @param size   Size of each element
+ * @param cmp    Pointer to comparison function (see #lv_font_codeCompare as a 
comparison function
+ * example)
+ *
+ * @return a pointer to a matching item, or NULL if none exists.
+ */
+void * lv_utils_bsearch(const void * key, const void * base, uint32_t n, 
uint32_t size,
+                        int32_t (*cmp)(const void * pRef, const void * 
pElement))
+{
+    const char * middle;
+    int32_t c;
+
+    for(middle = base; n != 0;) {
+        middle += (n / 2) * size;
+        if((c = (*cmp)(key, middle)) > 0) {
+            n    = (n / 2) - ((n & 1) == 0);
+            base = (middle += size);
+        } else if(c < 0) {
+            n /= 2;
+            middle = base;
+        } else {
+            return (char *)middle;
+        }
+    }
+    return NULL;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
diff --git a/scriptsrcs/lvgl/src/lv_misc/lv_utils.h 
b/scriptsrcs/lvgl/src/lv_misc/lv_utils.h
new file mode 100755
index 0000000..6eed795
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_misc/lv_utils.h
@@ -0,0 +1,66 @@
+/**
+ * @file lv_utils.h
+ *
+ */
+
+#ifndef LV_UTILS_H
+#define LV_UTILS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stdint.h>
+#include <stddef.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+/**
+ * Convert a number to string
+ * @param num a number
+ * @param buf pointer to a `char` buffer. The result will be stored here (max 
10 elements)
+ * @return same as `buf` (just for convenience)
+ */
+char * lv_utils_num_to_str(int32_t num, char * buf);
+
+/** Searches base[0] to base[n - 1] for an item that matches *key.
+ *
+ * @note The function cmp must return negative if its first
+ *  argument (the search key) is less that its second (a table entry),
+ *  zero if equal, and positive if greater.
+ *
+ *  @note Items in the array must be in ascending order.
+ *
+ * @param key    Pointer to item being searched for
+ * @param base   Pointer to first element to search
+ * @param n      Number of elements
+ * @param size   Size of each element
+ * @param cmp    Pointer to comparison function (see #lv_font_codeCompare as a 
comparison function
+ * example)
+ *
+ * @return a pointer to a matching item, or NULL if none exists.
+ */
+void * lv_utils_bsearch(const void * key, const void * base, uint32_t n, 
uint32_t size,
+                        int32_t (*cmp)(const void * pRef, const void * 
pElement));
+
+/**********************
+ *      MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_arc.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_arc.c
new file mode 100755
index 0000000..e2146a8
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_arc.c
@@ -0,0 +1,305 @@
+/**
+ * @file lv_arc.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_arc"
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_arc_design(lv_obj_t * arc, const lv_area_t * mask, 
lv_design_mode_t mode);
+static lv_res_t lv_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * param);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_design_cb_t ancestor_design;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a arc object
+ * @param par pointer to an object, it will be the parent of the new arc
+ * @param copy pointer to a arc object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created arc
+ */
+lv_obj_t * lv_arc_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+
+    LV_LOG_TRACE("arc create started");
+
+    /*Create the ancestor of arc*/
+    lv_obj_t * new_arc = lv_obj_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) 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);
+
+    /*Initialize the allocated 'ext' */
+    ext->angle_start = 45;
+    ext->angle_end   = 315;
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_arc, lv_arc_signal);
+    lv_obj_set_design_cb(new_arc, lv_arc_design);
+
+    /*Init the new arc arc*/
+    if(copy == NULL) {
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_arc_set_style(new_arc, LV_ARC_STYLE_MAIN, th->style.arc);
+        } else {
+            lv_arc_set_style(new_arc, LV_ARC_STYLE_MAIN, 
&lv_style_plain_color);
+        }
+
+    }
+    /*Copy an existing arc*/
+    else {
+        lv_arc_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->angle_start        = copy_ext->angle_start;
+        ext->angle_end          = copy_ext->angle_end;
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_arc);
+    }
+
+    LV_LOG_INFO("arc created");
+
+    return new_arc;
+}
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/*
+ * New object specific "add" or "remove" functions come here
+ */
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the start and end angles of an arc. 0 deg: bottom, 90 deg: 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)
+{
+    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;
+
+    ext->angle_start = start;
+    ext->angle_end   = end;
+
+    lv_obj_invalidate(arc);
+}
+
+/**
+ * Set a style of a arc.
+ * @param arc pointer to arc object
+ * @param type which style should be set
+ * @param style pointer to a style
+ *  */
+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;
+    }
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the start angle of an arc.
+ * @param arc pointer to an arc object
+ * @return the start angle [0..360]
+ */
+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;
+}
+
+/**
+ * Get the end angle of an arc.
+ * @param arc pointer to an arc object
+ * @return the end angle [0..360]
+ */
+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;
+}
+
+/**
+ * Get style of a arc.
+ * @param arc pointer to arc object
+ * @param type which style should be get
+ * @return style pointer to the style
+ *  */
+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) {
+        case LV_ARC_STYLE_MAIN: style = lv_obj_get_style(arc); break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/*
+ * New object specific "other" functions come here
+ */
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_arc_design(lv_obj_t * arc, const lv_area_t * mask, 
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;
+    }
+    /*Draw the object*/
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+        lv_arc_ext_t * ext       = lv_obj_get_ext_attr(arc);
+        const lv_style_t * style = lv_arc_get_style(arc, LV_ARC_STYLE_MAIN);
+
+        lv_coord_t r       = (LV_MATH_MIN(lv_obj_get_width(arc), 
lv_obj_get_height(arc))) / 2;
+        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);
+        }
+
+    }
+    /*Post draw when the children are drawn*/
+    else if(mode == LV_DESIGN_DRAW_POST) {
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the arc
+ * @param arc pointer to a arc 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_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* Include the ancient signal function */
+    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')*/
+    }
+
+    return res;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_arc.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_arc.h
new file mode 100755
index 0000000..8cc34d5
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_arc.h
@@ -0,0 +1,123 @@
+/**
+ * @file lv_arc.h
+ *
+ */
+
+#ifndef LV_ARC_H
+#define LV_ARC_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_ARC != 0
+
+#include "../lv_core/lv_obj.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+/*Data of arc*/
+typedef struct
+{
+    /*New data for this type */
+    lv_coord_t angle_start;
+    lv_coord_t angle_end;
+} lv_arc_ext_t;
+
+/*Styles*/
+enum {
+    LV_ARC_STYLE_MAIN,
+};
+typedef uint8_t lv_arc_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a arc objects
+ * @param par pointer to an object, it will be the parent of the new arc
+ * @param copy pointer to a arc object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created arc
+ */
+lv_obj_t * lv_arc_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the start and end angles of an arc. 0 deg: bottom, 90 deg: 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);
+
+/**
+ * Set a style of a arc.
+ * @param arc pointer to arc object
+ * @param type which style should be set
+ * @param style pointer to a style
+ *  */
+void lv_arc_set_style(lv_obj_t * arc, lv_arc_style_t type, const lv_style_t * 
style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the start angle of an arc.
+ * @param arc pointer to an arc object
+ * @return the start angle [0..360]
+ */
+uint16_t lv_arc_get_angle_start(lv_obj_t * arc);
+
+/**
+ * Get the end angle of an arc.
+ * @param arc pointer to an arc object
+ * @return the end angle [0..360]
+ */
+uint16_t lv_arc_get_angle_end(lv_obj_t * arc);
+
+/**
+ * Get style of a arc.
+ * @param arc pointer to arc object
+ * @param type which style should be get
+ * @return style pointer to the style
+ *  */
+const lv_style_t * lv_arc_get_style(const lv_obj_t * arc, lv_arc_style_t type);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_ARC*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_ARC_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_bar.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_bar.c
new file mode 100755
index 0000000..5faab91
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_bar.c
@@ -0,0 +1,548 @@
+
+
+/**
+ * @file lv_bar.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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 <stdio.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_bar"
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_bar_design(lv_obj_t * bar, const lv_area_t * mask, 
lv_design_mode_t mode);
+static lv_res_t lv_bar_signal(lv_obj_t * bar, lv_signal_t sign, void * param);
+
+#if LV_USE_ANIMATION
+static void lv_bar_anim(void * bar, lv_anim_value_t value);
+static void lv_bar_anim_ready(lv_anim_t * a);
+#endif
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_design_cb_t ancestor_design_f;
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a bar objects
+ * @param par pointer to an object, it will be the parent of the new bar
+ * @param copy pointer to a bar object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created bar
+ */
+lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("lv_bar create started");
+
+    /*Create the ancestor basic object*/
+    lv_obj_t * new_bar = lv_obj_create(par, copy);
+    LV_ASSERT_MEM(new_bar);
+    if(new_bar == NULL) return NULL;
+
+    if(ancestor_signal == NULL) ancestor_signal = 
lv_obj_get_signal_cb(new_bar);
+    if(ancestor_design_f == NULL) ancestor_design_f = 
lv_obj_get_design_cb(new_bar);
+
+    /*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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    ext->min_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;
+#endif
+    ext->sym         = 0;
+    ext->style_indic = &lv_style_pretty_color;
+
+    lv_obj_set_signal_cb(new_bar, lv_bar_signal);
+    lv_obj_set_design_cb(new_bar, lv_bar_design);
+
+    /*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_bar_set_value(new_bar, ext->cur_value, false);
+
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_bar_set_style(new_bar, LV_BAR_STYLE_BG, th->style.bar.bg);
+            lv_bar_set_style(new_bar, LV_BAR_STYLE_INDIC, th->style.bar.indic);
+        } else {
+            lv_obj_set_style(new_bar, &lv_style_pretty);
+        }
+    } else {
+        lv_bar_ext_t * ext_copy = lv_obj_get_ext_attr(copy);
+        ext->min_value          = ext_copy->min_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;
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_bar);
+
+        lv_bar_set_value(new_bar, ext->cur_value, false);
+    }
+
+    LV_LOG_INFO("bar created");
+
+    return new_bar;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new value on the bar
+ * @param bar pointer to a bar object
+ * @param value new value
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: 
change the value immediatelly
+ */
+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
+    lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
+    if(ext->cur_value == value) return;
+
+    int16_t new_value;
+    new_value = value > ext->max_value ? ext->max_value : value;
+    new_value = new_value < ext->min_value ? ext->min_value : new_value;
+
+    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_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);
+#endif
+    }
+}
+
+/**
+ * Set minimum and the maximum values of a bar
+ * @param bar pointer to the bar object
+ * @param min minimum value
+ * @param max maximum value
+ */
+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(ext->cur_value > max) {
+        ext->cur_value = max;
+        lv_bar_set_value(bar, ext->cur_value, false);
+    }
+    if(ext->cur_value < min) {
+        ext->cur_value = min;
+        lv_bar_set_value(bar, ext->cur_value, false);
+    }
+    lv_obj_invalidate(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
+ */
+void lv_bar_set_sym(lv_obj_t * bar, bool en)
+{
+    LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
+    lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
+    ext->sym           = en ? 1 : 0;
+}
+
+/**
+ * Set the animation time of the bar
+ * @param bar pointer to a bar object
+ * @param anim_time the animation time in milliseconds.
+ */
+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;
+#else
+    (void)bar;       /*Unused*/
+    (void)anim_time; /*Unused*/
+#endif
+}
+
+/**
+ * Set a style of a bar
+ * @param bar pointer to a bar object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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) {
+        case LV_BAR_STYLE_BG: lv_obj_set_style(bar, style); break;
+        case LV_BAR_STYLE_INDIC:
+            ext->style_indic = style;
+            lv_obj_refresh_ext_draw_pad(bar);
+            break;
+    }
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the value of a bar
+ * @param bar pointer to a bar object
+ * @return the value of the bar
+ */
+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;
+#endif
+    /*No animation, simple return the current value*/
+    return ext->cur_value;
+}
+
+/**
+ * Get the minimum value of a bar
+ * @param bar pointer to a bar object
+ * @return the minimum value of the 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;
+}
+
+/**
+ * Get the maximum value of a bar
+ * @param bar pointer to a bar object
+ * @return the maximum value of the 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
+ */
+bool lv_bar_get_sym(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;
+}
+
+/**
+ * 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)
+{
+    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;
+#else
+    (void)bar;       /*Unused*/
+    return 0;
+#endif
+}
+
+/**
+ * Get a style of a bar
+ * @param bar pointer to a bar object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+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);
+
+    switch(type) {
+        case LV_BAR_STYLE_BG: style = lv_obj_get_style(bar); break;
+        case LV_BAR_STYLE_INDIC: style = ext->style_indic; break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_bar_design(lv_obj_t * bar, const lv_area_t * mask, 
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);
+    } 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);
+
+        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);
+        }
+#endif
+    }
+    return true;
+}
+
+/**
+ * Signal function of the bar
+ * @param bar pointer to a bar 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_bar_signal(lv_obj_t * bar, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* 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);
+        if(style_indic->body.shadow.width > bar->ext_draw_pad) 
bar->ext_draw_pad = style_indic->body.shadow.width;
+    }
+
+    return res;
+}
+
+#if LV_USE_ANIMATION
+static void lv_bar_anim(void * bar, lv_anim_value_t value)
+{
+    lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
+    ext->anim_state    = value;
+    lv_obj_invalidate(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);
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_bar.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_bar.h
new file mode 100755
index 0000000..9ffdbdd
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_bar.h
@@ -0,0 +1,193 @@
+/**
+ * @file lv_bar.h
+ *
+ */
+
+#ifndef LV_BAR_H
+#define LV_BAR_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_BAR != 0
+
+#include "../lv_core/lv_obj.h"
+#include "../lv_misc/lv_anim.h"
+#include "lv_cont.h"
+#include "lv_btn.h"
+#include "lv_label.h"
+
+/*********************
+ *      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
+
+LV_EXPORT_CONST_INT(LV_BAR_ANIM_STATE_START);
+LV_EXPORT_CONST_INT(LV_BAR_ANIM_STATE_END);
+LV_EXPORT_CONST_INT(LV_BAR_ANIM_STATE_INV);
+LV_EXPORT_CONST_INT(LV_BAR_ANIM_STATE_NORM);
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/** Data of bar*/
+typedef struct
+{
+    /*No inherited ext, derived from the base object */
+
+    /*New data for this type */
+    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*/
+#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;
+#endif
+    uint8_t sym : 1;                /*Symmetric: means the center is around 
zero value*/
+    const lv_style_t * style_indic; /*Style of the indicator*/
+} lv_bar_ext_t;
+
+/** Bar styles. */
+enum {
+    LV_BAR_STYLE_BG, /** Bar background style. */
+    LV_BAR_STYLE_INDIC, /** Bar fill area style. */
+};
+typedef uint8_t lv_bar_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a bar objects
+ * @param par pointer to an object, it will be the parent of the new bar
+ * @param copy pointer to a bar object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created bar
+ */
+lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new value on the bar
+ * @param bar pointer to a bar object
+ * @param value new value
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: 
change the value immediately
+ */
+void lv_bar_set_value(lv_obj_t * bar, int16_t value, lv_anim_enable_t anim);
+
+/**
+ * Set minimum and the maximum values of a bar
+ * @param bar pointer to the bar object
+ * @param min minimum value
+ * @param max maximum value
+ */
+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
+ */
+void lv_bar_set_sym(lv_obj_t * bar, bool en);
+
+/**
+ * Set the animation time of the bar
+ * @param bar pointer to a bar object
+ * @param anim_time the animation time in milliseconds.
+ */
+void lv_bar_set_anim_time(lv_obj_t * bar, uint16_t anim_time);
+
+/**
+ * Set a style of a bar
+ * @param bar pointer to a bar object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_bar_set_style(lv_obj_t * bar, lv_bar_style_t type, const lv_style_t * 
style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the value of a bar
+ * @param bar pointer to a bar object
+ * @return the value of the bar
+ */
+int16_t lv_bar_get_value(const lv_obj_t * bar);
+
+/**
+ * Get the minimum value of a bar
+ * @param bar pointer to a bar object
+ * @return the minimum value of the bar
+ */
+int16_t lv_bar_get_min_value(const lv_obj_t * bar);
+
+/**
+ * Get the maximum value of a bar
+ * @param bar pointer to a bar object
+ * @return the maximum value of the 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
+ */
+bool lv_bar_get_sym(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);
+
+/**
+ * Get a style of a bar
+ * @param bar pointer to a bar object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+const lv_style_t * lv_bar_get_style(const lv_obj_t * bar, lv_bar_style_t type);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_BAR*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_BAR_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_btn.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_btn.c
new file mode 100755
index 0000000..4cfe952
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_btn.c
@@ -0,0 +1,723 @@
+/**
+ * @file lv_btn.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+
+#include "lv_btn.h"
+#if LV_USE_BTN != 0
+
+#include <string.h>
+#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"
+#include "../lv_misc/lv_color.h"
+#include "../lv_misc/lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_btn"
+#define LV_BTN_INK_VALUE_MAX 256
+#define LV_BTN_INK_VALUE_MAX_SHIFT 8
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_btn_design(lv_obj_t * btn, const lv_area_t * mask, 
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
+static void lv_btn_ink_effect_anim(lv_obj_t * btn, lv_anim_value_t val);
+static void lv_btn_ink_effect_anim_ready(lv_anim_t * a);
+#endif
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_design_cb_t ancestor_design;
+
+#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
+static lv_coord_t ink_act_value;
+static lv_obj_t * ink_obj;
+static lv_btn_state_t ink_bg_state;
+static lv_btn_state_t ink_top_state;
+static bool ink_ready;
+static bool ink_playback;
+static lv_point_t ink_point;
+#endif
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a button object
+ * @param par pointer to an object, it will be the parent of the new button
+ * @param copy pointer to a button object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created button
+ */
+lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("button create started");
+
+    lv_obj_t * new_btn;
+
+    new_btn = lv_cont_create(par, copy);
+    LV_ASSERT_MEM(new_btn);
+    if(new_btn == NULL) return NULL;
+
+    if(ancestor_signal == NULL) ancestor_signal = 
lv_obj_get_signal_cb(new_btn);
+    if(ancestor_design == NULL) ancestor_design = 
lv_obj_get_design_cb(new_btn);
+
+    /*Allocate the extended data*/
+    lv_btn_ext_t * ext = lv_obj_allocate_ext_attr(new_btn, 
sizeof(lv_btn_ext_t));
+    LV_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    ext->state = LV_BTN_STATE_REL;
+
+    ext->styles[LV_BTN_STATE_REL]     = &lv_style_btn_rel;
+    ext->styles[LV_BTN_STATE_PR]      = &lv_style_btn_pr;
+    ext->styles[LV_BTN_STATE_TGL_REL] = &lv_style_btn_tgl_rel;
+    ext->styles[LV_BTN_STATE_TGL_PR]  = &lv_style_btn_tgl_pr;
+    ext->styles[LV_BTN_STATE_INA]     = &lv_style_btn_ina;
+
+    ext->toggle = 0;
+#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
+    ext->ink_in_time   = 0;
+    ext->ink_wait_time = 0;
+    ext->ink_out_time  = 0;
+#endif
+
+    lv_obj_set_signal_cb(new_btn, lv_btn_signal);
+    lv_obj_set_design_cb(new_btn, lv_btn_design);
+
+    /*If no copy do the basic initialization*/
+    if(copy == NULL) {
+        /*Set layout if the button is not a screen*/
+        if(par != NULL) {
+            lv_btn_set_layout(new_btn, LV_LAYOUT_CENTER);
+        }
+
+        lv_obj_set_click(new_btn, true); /*Be sure the button is clickable*/
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_btn_set_style(new_btn, LV_BTN_STYLE_REL, th->style.btn.rel);
+            lv_btn_set_style(new_btn, LV_BTN_STYLE_PR, th->style.btn.pr);
+            lv_btn_set_style(new_btn, LV_BTN_STYLE_TGL_REL, 
th->style.btn.tgl_rel);
+            lv_btn_set_style(new_btn, LV_BTN_STYLE_TGL_PR, 
th->style.btn.tgl_pr);
+            lv_btn_set_style(new_btn, LV_BTN_STYLE_INA, th->style.btn.ina);
+        } else {
+            lv_obj_set_style(new_btn, ext->styles[LV_BTN_STATE_REL]);
+        }
+    }
+    /*Copy 'copy'*/
+    else {
+        lv_btn_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->state              = copy_ext->state;
+        ext->toggle             = copy_ext->toggle;
+#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
+        ext->ink_in_time   = copy_ext->ink_in_time;
+        ext->ink_wait_time = copy_ext->ink_wait_time;
+        ext->ink_out_time  = copy_ext->ink_out_time;
+#endif
+        memcpy((void*) ext->styles, copy_ext->styles, sizeof(ext->styles));
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_btn);
+    }
+
+    LV_LOG_INFO("button created");
+
+    return new_btn;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Enable the toggled states
+ * @param btn pointer to a button object
+ * @param tgl true: enable toggled states, false: disable
+ */
+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;
+}
+
+/**
+ * Set the state of the button
+ * @param btn pointer to a button object
+ * @param state the new state of the button (from lv_btn_state_t enum)
+ */
+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;
+        lv_obj_set_style(btn, ext->styles[state]);
+    }
+}
+
+/**
+ * Toggle the state of the button (ON->OFF, OFF->ON)
+ * @param btn pointer to a button object
+ */
+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;
+        case LV_BTN_STATE_PR: lv_btn_set_state(btn, LV_BTN_STATE_TGL_PR); 
break;
+        case LV_BTN_STATE_TGL_REL: lv_btn_set_state(btn, LV_BTN_STATE_REL); 
break;
+        case LV_BTN_STATE_TGL_PR: lv_btn_set_state(btn, LV_BTN_STATE_PR); 
break;
+        default: break;
+    }
+}
+
+/**
+ * Set time of the ink effect (draw a circle on click to animate in the new 
state)
+ * @param btn pointer to a button object
+ * @param time the time of the ink animation
+ */
+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;
+#else
+    (void)btn;  /*Unused*/
+    (void)time; /*Unused*/
+    LV_LOG_WARN("`lv_btn_set_ink_ink_time` has no effect if LV_BTN_INK_EFEFCT 
or LV_USE_ANIMATION "
+                "is disabled")
+#endif
+}
+
+/**
+ * Set the wait time before the ink disappears
+ * @param btn pointer to a button object
+ * @param time the time of the ink animation
+ */
+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);
+    ext->ink_wait_time = time;
+#else
+    (void)btn;  /*Unused*/
+    (void)time; /*Unused*/
+    LV_LOG_WARN("`lv_btn_set_ink_wait_time` has no effect if LV_BTN_INK_EFEFCT 
or LV_USE_ANIMATION "
+                "is disabled")
+#endif
+}
+
+/**
+ * Set time of the ink out effect (animate to the released state)
+ * @param btn pointer to a button object
+ * @param time the time of the ink animation
+ */
+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;
+#else
+    (void)btn;  /*Unused*/
+    (void)time; /*Unused*/
+    LV_LOG_WARN("`lv_btn_set_ink_out_time` has no effect if LV_BTN_INK_EFEFCT 
or LV_USE_ANIMATION "
+                "is disabled")
+#endif
+}
+
+/**
+ * Set a style of a button
+ * @param btn pointer to a button object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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) {
+        case LV_BTN_STYLE_REL: ext->styles[LV_BTN_STATE_REL] = style; break;
+        case LV_BTN_STYLE_PR: ext->styles[LV_BTN_STATE_PR] = style; break;
+        case LV_BTN_STYLE_TGL_REL: ext->styles[LV_BTN_STATE_TGL_REL] = style; 
break;
+        case LV_BTN_STYLE_TGL_PR: ext->styles[LV_BTN_STATE_TGL_PR] = style; 
break;
+        case LV_BTN_STYLE_INA: ext->styles[LV_BTN_STATE_INA] = style; break;
+    }
+
+    /*Refresh the object with the new style*/
+    lv_obj_set_style(btn, ext->styles[ext->state]);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the current state of the button
+ * @param btn pointer to a button object
+ * @return the state of the button (from lv_btn_state_t enum)
+ */
+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;
+}
+
+/**
+ * Get the toggle enable attribute of the button
+ * @param btn pointer to a button object
+ * @return true: toggle enabled, false: disabled
+ */
+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;
+}
+
+/**
+ * Get time of the ink in effect (draw a circle on click to animate in the new 
state)
+ * @param btn pointer to a button object
+ * @return the time of the ink animation
+ */
+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;
+#else
+    (void)btn; /*Unused*/
+    return 0;
+#endif
+}
+
+/**
+ * Get the wait time before the ink disappears
+ * @param btn pointer to a button object
+ * @return the time of the ink animation
+ */
+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;
+#else
+    (void)btn; /*Unused*/
+    return 0;
+#endif
+}
+/**
+ * Get time of the ink out effect (animate to the releases state)
+ * @param btn pointer to a button object
+ * @return the time of the ink animation
+ */
+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_out_time;
+#else
+    (void)btn; /*Unused*/
+    return 0;
+#endif
+}
+
+/**
+ * Get a style of a button
+ * @param btn pointer to a button object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+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);
+
+    /* If the style of the current state is asked then return object style.
+     * If the button is focused then this style is updated by the group's
+     * `style_mod_cb` function */
+    if((type == LV_BTN_STYLE_REL && state == LV_BTN_STATE_REL) ||
+       (type == LV_BTN_STYLE_PR && state == LV_BTN_STATE_PR) ||
+       (type == LV_BTN_STYLE_TGL_REL && state == LV_BTN_STATE_TGL_REL) ||
+       (type == LV_BTN_STYLE_TGL_PR && state == LV_BTN_STATE_TGL_PR) ||
+       (type == LV_BTN_STYLE_INA && state == LV_BTN_STATE_INA)) {
+
+        style = lv_obj_get_style(btn);
+    } else {
+        switch(type) {
+            case LV_BTN_STYLE_REL: style = ext->styles[LV_BTN_STATE_REL]; 
break;
+            case LV_BTN_STYLE_PR: style = ext->styles[LV_BTN_STATE_PR]; break;
+            case LV_BTN_STYLE_TGL_REL: style = 
ext->styles[LV_BTN_STATE_TGL_REL]; break;
+            case LV_BTN_STYLE_TGL_PR: style = 
ext->styles[LV_BTN_STATE_TGL_PR]; break;
+            case LV_BTN_STYLE_INA: style = ext->styles[LV_BTN_STATE_INA]; 
break;
+            default: style = NULL; break;
+        }
+    }
+
+    return style;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Handle the drawing related tasks of the drop down lists
+ * @param btn 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
+ * @param return true/false, depends on 'mode'
+ */
+static bool lv_btn_design(lv_obj_t * btn, const lv_area_t * mask, 
lv_design_mode_t mode)
+{
+    if(mode == LV_DESIGN_COVER_CHK) {
+        return false;
+    } else if(mode == LV_DESIGN_DRAW_MAIN) {
+
+#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
+        if(btn != ink_obj) {
+            ancestor_design(btn, mask, mode);
+        } else {
+            lv_opa_t opa_scale = lv_obj_get_opa_scale(btn);
+            lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
+
+            /*Draw the normal button*/
+            if(ink_playback == false) {
+                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_coord_t w     = lv_obj_get_width(btn);
+                lv_coord_t h     = lv_obj_get_height(btn);
+                lv_coord_t r_max = LV_MATH_MIN(w, h) / 2;
+
+                /*In the first part of the animation increase the size of the 
circle (ink effect) */
+                lv_area_t cir_area;
+
+                lv_coord_t coord_state =
+                    ink_act_value < LV_BTN_INK_VALUE_MAX / 2 ? ink_act_value : 
LV_BTN_INK_VALUE_MAX / 2;
+                lv_point_t p_act;
+                p_act.x          = ink_point.x;
+                p_act.y          = ink_point.y;
+                lv_coord_t x_err = (btn->coords.x1 + w / 2) - p_act.x;
+                lv_coord_t y_err = (btn->coords.y1 + h / 2) - p_act.y;
+
+                p_act.x += (x_err * coord_state) >> 
(LV_BTN_INK_VALUE_MAX_SHIFT - 1);
+                p_act.y += (y_err * coord_state) >> 
(LV_BTN_INK_VALUE_MAX_SHIFT - 1);
+
+                lv_coord_t half_side = LV_MATH_MAX(w, h) / 2;
+                cir_area.x1          = p_act.x - ((half_side * coord_state) >> 
(LV_BTN_INK_VALUE_MAX_SHIFT - 1));
+                cir_area.y1          = p_act.y - ((half_side * coord_state) >> 
(LV_BTN_INK_VALUE_MAX_SHIFT - 1));
+                cir_area.x2          = p_act.x + ((half_side * coord_state) >> 
(LV_BTN_INK_VALUE_MAX_SHIFT - 1));
+                cir_area.y2          = p_act.y + ((half_side * coord_state) >> 
(LV_BTN_INK_VALUE_MAX_SHIFT - 1));
+
+                lv_area_intersect(&cir_area, &btn->coords,
+                                  &cir_area); /*Limit the area. (It might be 
too big on the smaller side)*/
+
+                /*In the second part animate the radius. Circle -> 
body.radius*/
+                lv_coord_t r_state =
+                    ink_act_value > LV_BTN_INK_VALUE_MAX / 2 ? ink_act_value - 
LV_BTN_INK_VALUE_MAX / 2 : 0;
+
+                lv_style_copy(&style_tmp, ext->styles[ink_top_state]);
+                style_tmp.body.radius       = r_max + 
(((ext->styles[ink_bg_state]->body.radius - r_max) * r_state) >>
+                                                 (LV_BTN_INK_VALUE_MAX_SHIFT - 
1));
+                style_tmp.body.border.width = 0;
+
+                /*Draw the circle*/
+                lv_draw_rect(&cir_area, mask, &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);
+            }
+        }
+#else
+        ancestor_design(btn, mask, mode);
+#endif
+    } else if(mode == LV_DESIGN_DRAW_POST) {
+        ancestor_design(btn, mask, mode);
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the button
+ * @param btn pointer to a button 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_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* 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);
+
+    if(sign == LV_SIGNAL_PRESSED) {
+        /*Refresh the state*/
+        if(ext->state == LV_BTN_STATE_REL) {
+            lv_btn_set_state(btn, LV_BTN_STATE_PR);
+#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
+            ink_bg_state  = LV_BTN_STATE_REL;
+            ink_top_state = LV_BTN_STATE_PR;
+#endif
+        } else if(ext->state == LV_BTN_STATE_TGL_REL) {
+            lv_btn_set_state(btn, LV_BTN_STATE_TGL_PR);
+#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
+            ink_bg_state  = LV_BTN_STATE_TGL_REL;
+            ink_top_state = LV_BTN_STATE_TGL_PR;
+#endif
+        }
+
+#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
+        /*Forget the old inked button*/
+        if(ink_obj != NULL && ink_obj != btn) {
+            lv_anim_del(ink_obj, (lv_anim_exec_xcb_t)lv_btn_ink_effect_anim);
+            lv_obj_invalidate(ink_obj);
+            ink_obj = NULL;
+        }
+        /*Save the new data for inking and start it's animation if enabled*/
+        if(ext->ink_in_time > 0) {
+            ink_obj      = btn;
+            ink_playback = false;
+            ink_ready    = false;
+            lv_indev_get_point(lv_indev_get_act(), &ink_point);
+
+            lv_anim_t a;
+            a.var            = btn;
+            a.start          = 0;
+            a.end            = LV_BTN_INK_VALUE_MAX;
+            a.exec_cb        = (lv_anim_exec_xcb_t)lv_btn_ink_effect_anim;
+            a.path_cb        = lv_anim_path_linear;
+            a.ready_cb       = lv_btn_ink_effect_anim_ready;
+            a.act_time       = 0;
+            a.time           = ext->ink_in_time;
+            a.playback       = 0;
+            a.playback_pause = 0;
+            a.repeat         = 0;
+            a.repeat_pause   = 0;
+            lv_anim_create(&a);
+        }
+#endif
+    } else if(sign == LV_SIGNAL_PRESS_LOST) {
+        /*Refresh the state*/
+        if(ext->state == LV_BTN_STATE_PR)
+            lv_btn_set_state(btn, LV_BTN_STATE_REL);
+        else if(ext->state == LV_BTN_STATE_TGL_PR)
+            lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
+    } else if(sign == LV_SIGNAL_PRESSING) {
+        /*When the button begins to drag revert pressed states to released*/
+        if(lv_indev_is_dragging(param) != false) {
+            if(ext->state == LV_BTN_STATE_PR)
+                lv_btn_set_state(btn, LV_BTN_STATE_REL);
+            else if(ext->state == LV_BTN_STATE_TGL_PR)
+                lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
+        }
+    } else if(sign == LV_SIGNAL_RELEASED) {
+        /*If not dragged and it was not long press action then
+         *change state and run the action*/
+        if(lv_indev_is_dragging(param) == false) {
+            uint32_t toggled = 0;
+            if(ext->state == LV_BTN_STATE_PR && tgl == false) {
+                lv_btn_set_state(btn, LV_BTN_STATE_REL);
+                toggled = 0;
+            } else if(ext->state == LV_BTN_STATE_TGL_PR && tgl == false) {
+                lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
+                toggled = 1;
+            } else if(ext->state == LV_BTN_STATE_PR && tgl == true) {
+                lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
+                toggled = 1;
+            } else if(ext->state == LV_BTN_STATE_TGL_PR && tgl == true) {
+                lv_btn_set_state(btn, LV_BTN_STATE_REL);
+                toggled = 0;
+            }
+
+            if(tgl) {
+                res = lv_event_send(btn, LV_EVENT_VALUE_CHANGED, &toggled);
+                if(res != LV_RES_OK) return res;
+            }
+
+        } else { /*If dragged change back the state*/
+            if(ext->state == LV_BTN_STATE_PR) {
+                lv_btn_set_state(btn, LV_BTN_STATE_REL);
+            } else if(ext->state == LV_BTN_STATE_TGL_PR) {
+                lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
+            }
+        }
+
+#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
+        /*Draw the toggled state in the inking instead*/
+        if(ext->toggle) {
+            ink_top_state = ext->state;
+        }
+        /*If not a toggle button and the "IN" inking is ready then start an 
"OUT" inking*/
+        else if(ink_ready && ext->ink_out_time > 0) {
+            ink_obj      = btn;
+            ink_playback = true; /*It is the playback. If not set 
`lv_btn_ink_effect_anim_ready`
+                                    will start its own playback*/
+            lv_indev_get_point(lv_indev_get_act(), &ink_point);
+
+            lv_anim_t a;
+            a.var            = ink_obj;
+            a.start          = LV_BTN_INK_VALUE_MAX;
+            a.end            = 0;
+            a.exec_cb        = (lv_anim_exec_xcb_t)lv_btn_ink_effect_anim;
+            a.path_cb        = lv_anim_path_linear;
+            a.ready_cb       = lv_btn_ink_effect_anim_ready;
+            a.act_time       = 0;
+            a.time           = ext->ink_out_time;
+            a.playback       = 0;
+            a.playback_pause = 0;
+            a.repeat         = 0;
+            a.repeat_pause   = 0;
+            lv_anim_create(&a);
+        }
+#endif
+    } else if(sign == LV_SIGNAL_CONTROL) {
+        char c = *((char *)param);
+        if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
+            if(lv_btn_get_toggle(btn)) {
+                lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
+
+                uint32_t state = 1;
+                res            = lv_event_send(btn, LV_EVENT_VALUE_CHANGED, 
&state);
+                if(res != LV_RES_OK) return res;
+            }
+
+        } else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
+            if(lv_btn_get_toggle(btn)) {
+                lv_btn_set_state(btn, LV_BTN_STATE_REL);
+
+                uint32_t state = 0;
+                res            = lv_event_send(btn, LV_EVENT_VALUE_CHANGED, 
&state);
+                if(res != LV_RES_OK) return res;
+            }
+        }
+    } else if(sign == LV_SIGNAL_CLEANUP) {
+#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
+        if(btn == ink_obj) {
+            lv_anim_del(ink_obj, (lv_anim_exec_xcb_t)lv_btn_ink_effect_anim);
+            ink_obj = NULL;
+        }
+#endif
+    }
+
+    return res;
+}
+
+#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
+
+/**
+ * The animator function of inking. CAlled to increase the radius of ink
+ * @param btn pointer to the animated button
+ * @param val the new radius
+ */
+static void lv_btn_ink_effect_anim(lv_obj_t * btn, lv_anim_value_t val)
+{
+    if(btn) {
+        ink_act_value = val;
+        lv_obj_invalidate(btn);
+    }
+}
+
+/**
+ * Called to clean up when the ink animation is ready
+ * @param a unused
+ */
+static void lv_btn_ink_effect_anim_ready(lv_anim_t * a)
+{
+    (void)a; /*Unused*/
+
+    lv_btn_ext_t * ext   = lv_obj_get_ext_attr(ink_obj);
+    lv_btn_state_t state = lv_btn_get_state(ink_obj);
+
+    lv_obj_invalidate(ink_obj);
+    ink_ready = true;
+
+    if((state == LV_BTN_STATE_REL || state == LV_BTN_STATE_TGL_REL) && 
ext->toggle == 0 && ink_playback == false) {
+        lv_anim_t new_a;
+        new_a.var            = ink_obj;
+        new_a.start          = LV_BTN_INK_VALUE_MAX;
+        new_a.end            = 0;
+        new_a.exec_cb        = (lv_anim_exec_xcb_t)lv_btn_ink_effect_anim;
+        new_a.path_cb        = lv_anim_path_linear;
+        new_a.ready_cb       = lv_btn_ink_effect_anim_ready;
+        new_a.act_time       = -ext->ink_wait_time;
+        new_a.time           = ext->ink_out_time;
+        new_a.playback       = 0;
+        new_a.playback_pause = 0;
+        new_a.repeat         = 0;
+        new_a.repeat_pause   = 0;
+        lv_anim_create(&new_a);
+
+        ink_playback = true;
+    } else {
+        ink_obj = NULL;
+    }
+}
+#endif /*LV_USE_ANIMATION*/
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_btn.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_btn.h
new file mode 100755
index 0000000..f7bd85f
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_btn.h
@@ -0,0 +1,329 @@
+/**
+ * @file lv_btn.h
+ *
+ */
+
+#ifndef LV_BTN_H
+#define LV_BTN_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_BTN != 0
+
+/*Testing of dependencies*/
+#if LV_USE_CONT == 0
+#error "lv_btn: lv_cont is required. Enable it in lv_conf.h (LV_USE_CONT  1) "
+#endif
+
+#include "lv_cont.h"
+#include "../lv_core/lv_indev.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/** Possible states of a button.
+ * It can be used not only by buttons but other button-like objects too*/
+enum {
+    /**Released*/
+    LV_BTN_STATE_REL,
+
+    /**Pressed*/
+    LV_BTN_STATE_PR,
+
+    /**Toggled released*/
+    LV_BTN_STATE_TGL_REL,
+
+    /**Toggled pressed*/
+    LV_BTN_STATE_TGL_PR,
+
+    /**Inactive*/
+    LV_BTN_STATE_INA,
+
+    /**Number of states*/
+    _LV_BTN_STATE_NUM,
+};
+typedef uint8_t lv_btn_state_t;
+
+/** Extended data of button*/
+typedef struct
+{
+    /** Ext. of ancestor*/
+    lv_cont_ext_t cont;
+
+    /*New data for this type */
+
+    /**Styles in each state*/
+    const lv_style_t * styles[_LV_BTN_STATE_NUM];
+#if LV_BTN_INK_EFFECT
+    /** [ms] Time of ink fill effect (0: disable ink effect)*/
+    uint16_t ink_in_time;
+
+    /** [ms] Wait before the ink disappears */
+    uint16_t ink_wait_time;
+
+    /** [ms] Time of ink disappearing*/
+    uint16_t ink_out_time;
+#endif
+
+    /** Current state of the button from 'lv_btn_state_t' enum*/
+    lv_btn_state_t state : 3;
+
+    /** 1: Toggle enabled*/
+    uint8_t toggle : 1;
+} lv_btn_ext_t;
+
+/**Styles*/
+enum {
+    /** Release style */
+    LV_BTN_STYLE_REL,
+
+    /**Pressed style*/
+    LV_BTN_STYLE_PR,
+
+    /** Toggle released style*/
+    LV_BTN_STYLE_TGL_REL,
+
+    /** Toggle pressed style */
+    LV_BTN_STYLE_TGL_PR,
+
+    /** Inactive style*/
+    LV_BTN_STYLE_INA,
+};
+typedef uint8_t lv_btn_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a button object
+ * @param par pointer to an object, it will be the parent of the new button
+ * @param copy pointer to a button object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created button
+ */
+lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Enable the toggled states. On release the button will change from/to 
toggled state.
+ * @param btn pointer to a button object
+ * @param tgl true: enable toggled states, false: disable
+ */
+void lv_btn_set_toggle(lv_obj_t * btn, bool tgl);
+
+/**
+ * Set the state of the button
+ * @param btn pointer to a button object
+ * @param state the new state of the button (from lv_btn_state_t enum)
+ */
+void lv_btn_set_state(lv_obj_t * btn, lv_btn_state_t state);
+
+/**
+ * Toggle the state of the button (ON->OFF, OFF->ON)
+ * @param btn pointer to a button object
+ */
+void lv_btn_toggle(lv_obj_t * btn);
+
+/**
+ * Set the layout on a button
+ * @param btn pointer to a button object
+ * @param layout a layout from 'lv_cont_layout_t'
+ */
+static inline void lv_btn_set_layout(lv_obj_t * btn, lv_layout_t layout)
+{
+    lv_cont_set_layout(btn, layout);
+}
+
+/**
+ * Set the fit policy in all 4 directions separately.
+ * It tells how to change the button size automatically.
+ * @param btn pointer to a button object
+ * @param left left fit policy from `lv_fit_t`
+ * @param right right fit policy from `lv_fit_t`
+ * @param top top fit policy from `lv_fit_t`
+ * @param bottom bottom fit policy from `lv_fit_t`
+ */
+static inline void lv_btn_set_fit4(lv_obj_t * btn, lv_fit_t left, lv_fit_t 
right, lv_fit_t top, lv_fit_t bottom)
+{
+    lv_cont_set_fit4(btn, left, right, top, bottom);
+}
+
+/**
+ * Set the fit policy horizontally and vertically separately.
+ * It tells how to change the button size automatically.
+ * @param btn pointer to a button object
+ * @param hor horizontal fit policy from `lv_fit_t`
+ * @param ver vertical fit policy from `lv_fit_t`
+ */
+static inline void lv_btn_set_fit2(lv_obj_t * btn, lv_fit_t hor, lv_fit_t ver)
+{
+    lv_cont_set_fit2(btn, hor, ver);
+}
+
+/**
+ * Set the fit policy in all 4 direction at once.
+ * It tells how to change the button size automatically.
+ * @param btn pointer to a button object
+ * @param fit fit policy from `lv_fit_t`
+ */
+static inline void lv_btn_set_fit(lv_obj_t * btn, lv_fit_t fit)
+{
+    lv_cont_set_fit(btn, fit);
+}
+
+/**
+ * Set time of the ink effect (draw a circle on click to animate in the new 
state)
+ * @param btn pointer to a button object
+ * @param time the time of the ink animation
+ */
+void lv_btn_set_ink_in_time(lv_obj_t * btn, uint16_t time);
+
+/**
+ * Set the wait time before the ink disappears
+ * @param btn pointer to a button object
+ * @param time the time of the ink animation
+ */
+void lv_btn_set_ink_wait_time(lv_obj_t * btn, uint16_t time);
+
+/**
+ * Set time of the ink out effect (animate to the released state)
+ * @param btn pointer to a button object
+ * @param time the time of the ink animation
+ */
+void lv_btn_set_ink_out_time(lv_obj_t * btn, uint16_t time);
+
+/**
+ * Set a style of a button.
+ * @param btn pointer to button object
+ * @param type which style should be set
+ * @param style pointer to a style
+ *  */
+void lv_btn_set_style(lv_obj_t * btn, lv_btn_style_t type, const lv_style_t * 
style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the current state of the button
+ * @param btn pointer to a button object
+ * @return the state of the button (from lv_btn_state_t enum)
+ */
+lv_btn_state_t lv_btn_get_state(const lv_obj_t * btn);
+
+/**
+ * Get the toggle enable attribute of the button
+ * @param btn pointer to a button object
+ * @return true: toggle enabled, false: disabled
+ */
+bool lv_btn_get_toggle(const lv_obj_t * btn);
+
+/**
+ * Get the layout of a button
+ * @param btn pointer to button object
+ * @return the layout from 'lv_cont_layout_t'
+ */
+static inline lv_layout_t lv_btn_get_layout(const lv_obj_t * btn)
+{
+    return lv_cont_get_layout(btn);
+}
+
+/**
+ * Get the left fit mode
+ * @param btn pointer to a button object
+ * @return an element of `lv_fit_t`
+ */
+static inline lv_fit_t lv_btn_get_fit_left(const lv_obj_t * btn)
+{
+    return lv_cont_get_fit_left(btn);
+}
+
+/**
+ * Get the right fit mode
+ * @param btn pointer to a button object
+ * @return an element of `lv_fit_t`
+ */
+static inline lv_fit_t lv_btn_get_fit_right(const lv_obj_t * btn)
+{
+    return lv_cont_get_fit_right(btn);
+}
+
+/**
+ * Get the top fit mode
+ * @param btn pointer to a button object
+ * @return an element of `lv_fit_t`
+ */
+static inline lv_fit_t lv_btn_get_fit_top(const lv_obj_t * btn)
+{
+    return lv_cont_get_fit_top(btn);
+}
+
+/**
+ * Get the bottom fit mode
+ * @param btn pointer to a button object
+ * @return an element of `lv_fit_t`
+ */
+static inline lv_fit_t lv_btn_get_fit_bottom(const lv_obj_t * btn)
+{
+    return lv_cont_get_fit_bottom(btn);
+}
+
+/**
+ * Get time of the ink in effect (draw a circle on click to animate in the new 
state)
+ * @param btn pointer to a button object
+ * @return the time of the ink animation
+ */
+uint16_t lv_btn_get_ink_in_time(const lv_obj_t * btn);
+
+/**
+ * Get the wait time before the ink disappears
+ * @param btn pointer to a button object
+ * @return the time of the ink animation
+ */
+uint16_t lv_btn_get_ink_wait_time(const lv_obj_t * btn);
+
+/**
+ * Get time of the ink out effect (animate to the releases state)
+ * @param btn pointer to a button object
+ * @return the time of the ink animation
+ */
+uint16_t lv_btn_get_ink_out_time(const lv_obj_t * btn);
+
+/**
+ * Get style of a button.
+ * @param btn pointer to button object
+ * @param type which style should be get
+ * @return style pointer to the style
+ *  */
+const lv_style_t * lv_btn_get_style(const lv_obj_t * btn, lv_btn_style_t type);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_BUTTON*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_BTN_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_btnm.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_btnm.c
new file mode 100755
index 0000000..b54436d
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_btnm.c
@@ -0,0 +1,1123 @@
+/**
+ * @file lv_btnm.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+#include "../lv_themes/lv_theme.h"
+#include "../lv_misc/lv_txt.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_btnm"
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  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 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);
+static bool button_is_inactive(lv_btnm_ctrl_t ctrl_bits);
+static bool button_is_click_trig(lv_btnm_ctrl_t ctrl_bits);
+static bool button_is_tgl_enabled(lv_btnm_ctrl_t ctrl_bits);
+static bool button_get_tgl_state(lv_btnm_ctrl_t ctrl_bits);
+static uint16_t get_button_from_point(lv_obj_t * btnm, lv_point_t * p);
+static void allocate_btn_areas_and_controls(const lv_obj_t * btnm, const char 
** map);
+static void invalidate_button_area(const lv_obj_t * btnm, uint16_t btn_idx);
+static bool maps_are_identical(const char ** map1, const char ** map2);
+static void make_one_button_toggled(lv_obj_t * btnm, uint16_t btn_idx);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static const char * lv_btnm_def_map[] = {"Btn1", "Btn2", "Btn3", "\n", "Btn4", 
"Btn5", ""};
+
+static lv_design_cb_t ancestor_design_f;
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a button matrix objects
+ * @param par pointer to an object, it will be the parent of the new button 
matrix
+ * @param copy pointer to a button matrix object, if not NULL then the new 
object will be copied
+ * from it
+ * @return pointer to the created button matrix
+ */
+lv_obj_t * lv_btnm_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("button matrix create started");
+
+    /*Create the ancestor object*/
+    lv_obj_t * new_btnm = lv_obj_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    ext->btn_cnt                          = 0;
+    ext->btn_id_pr                        = LV_BTNM_BTN_NONE;
+    ext->btn_id_act                       = LV_BTNM_BTN_NONE;
+    ext->button_areas                     = NULL;
+    ext->ctrl_bits                        = NULL;
+    ext->map_p                            = NULL;
+    ext->recolor                          = 0;
+    ext->one_toggle                       = 0;
+    ext->styles_btn[LV_BTN_STATE_REL]     = &lv_style_btn_rel;
+    ext->styles_btn[LV_BTN_STATE_PR]      = &lv_style_btn_pr;
+    ext->styles_btn[LV_BTN_STATE_TGL_REL] = &lv_style_btn_tgl_rel;
+    ext->styles_btn[LV_BTN_STATE_TGL_PR]  = &lv_style_btn_tgl_pr;
+    ext->styles_btn[LV_BTN_STATE_INA]     = &lv_style_btn_ina;
+
+    if(ancestor_design_f == NULL) ancestor_design_f = 
lv_obj_get_design_cb(new_btnm);
+
+    lv_obj_set_signal_cb(new_btnm, lv_btnm_signal);
+    lv_obj_set_design_cb(new_btnm, lv_btnm_design);
+
+    /*Init the new button matrix object*/
+    if(copy == NULL) {
+        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();
+        if(th) {
+            lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BG, th->style.btnm.bg);
+            lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_REL, 
th->style.btnm.btn.rel);
+            lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_PR, 
th->style.btnm.btn.pr);
+            lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_TGL_REL, 
th->style.btnm.btn.tgl_rel);
+            lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_TGL_PR, 
th->style.btnm.btn.tgl_pr);
+            lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_INA, 
th->style.btnm.btn.ina);
+        } else {
+            lv_obj_set_style(new_btnm, &lv_style_pretty);
+        }
+    }
+    /*Copy an existing object*/
+    else {
+        lv_btnm_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        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));
+    }
+
+    LV_LOG_INFO("button matrix created");
+
+    return new_btnm;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new map. Buttons will be created/deleted according to the map. The
+ * button matrix keeps a reference to the map and so the string array must not
+ * be deallocated during the life of the matrix.
+ * @param btnm pointer to a button matrix object
+ * @param map pointer a string array. The last string has to be: "". Use "\n" 
to make a line break.
+ */
+void lv_btnm_set_map(const lv_obj_t * btnm, const char * map[])
+{
+    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+    LV_ASSERT_NULL(map);
+
+    /*
+     * lv_btnm_set_map is called on receipt of signals such as
+     * LV_SIGNAL_CORD_CHG regardless of whether the map has changed (e.g.
+     * calling lv_obj_align on the map will trigger this).
+     *
+     * We check if the map has changed here to avoid overwriting changes made
+     * to hidden/longpress/disabled states after the map was originally set.
+     *
+     * TODO: separate all map set/allocation from layout code below and skip
+     * set/allocation when map hasn't changed.
+     */
+    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
+    if(!maps_are_identical(ext->map_p, map)) {
+
+        /*Analyze the map and create the required number of buttons*/
+        allocate_btn_areas_and_controls(btnm, map);
+    }
+    ext->map_p = map;
+
+    /*Set size and positions of the buttons*/
+    const lv_style_t * style_bg = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BG);
+    lv_coord_t max_w            = lv_obj_get_width(btnm) - 
style_bg->body.padding.left - style_bg->body.padding.right;
+    lv_coord_t max_h            = lv_obj_get_height(btnm) - 
style_bg->body.padding.top - style_bg->body.padding.bottom;
+    lv_coord_t act_y            = style_bg->body.padding.top;
+
+    /*Count the lines to calculate button height*/
+    uint8_t line_cnt = 1;
+    uint8_t li;
+    for(li = 0; strlen(map[li]) != 0; li++) {
+        if(strcmp(map[li], "\n") == 0) line_cnt++;
+    }
+
+    lv_coord_t btn_h = max_h - ((line_cnt - 1) * style_bg->body.padding.inner);
+    btn_h            = btn_h / line_cnt;
+    btn_h--; /*-1 because e.g. height = 100 means 101 pixels (0..100)*/
+
+    /* Count the units and the buttons in a line
+     * (A button can be 1,2,3... unit wide)*/
+    uint16_t unit_cnt;           /*Number of units in a row*/
+    uint16_t unit_act_cnt;       /*Number of units currently put in a row*/
+    uint16_t btn_cnt;            /*Number of buttons in a row*/
+    uint16_t i_tot          = 0; /*Act. index in the str map*/
+    uint16_t btn_i          = 0; /*Act. index of button areas*/
+    const char ** map_p_tmp = map;
+
+    /*Count the units and the buttons in a line*/
+    while(1) {
+        unit_cnt = 0;
+        btn_cnt  = 0;
+        /*Count the buttons in a line*/
+        while(strcmp(map_p_tmp[btn_cnt], "\n") != 0 && 
strlen(map_p_tmp[btn_cnt]) != 0) { /*Check a line*/
+            unit_cnt += get_button_width(ext->ctrl_bits[btn_i + btn_cnt]);
+            btn_cnt++;
+        }
+
+        /*Make sure the last row is at the bottom of 'btnm'*/
+        if(map_p_tmp[btn_cnt][0] == '\0') { /*Last row?*/
+            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*/
+            lv_coord_t all_unit_w = max_w - ((btn_cnt - 1) * 
style_bg->body.padding.inner);
+
+            /*Set the button size and positions and set the texts*/
+            uint16_t i;
+            lv_coord_t act_x;
+
+            lv_coord_t act_unit_w;
+            unit_act_cnt = 0;
+            for(i = 0; i < btn_cnt; i++) {
+                /* one_unit_w = all_unit_w / unit_cnt
+                 * act_unit_w = one_unit_w * button_width
+                 * do this two operations but the multiply first to divide a 
greater number */
+                act_unit_w = (all_unit_w * 
get_button_width(ext->ctrl_bits[btn_i])) / unit_cnt;
+                act_unit_w--; /*-1 because e.g. width = 100 means 101 pixels 
(0..100)*/
+
+                /*Always recalculate act_x because of rounding errors */
+                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*/
+                if(style_bg->body.padding.inner == 0 && act_x != 
style_bg->body.padding.left) {
+                    lv_area_set(&ext->button_areas[btn_i], 
ext->button_areas[btn_i - 1].x2, act_y, act_x + act_unit_w,
+                                act_y + btn_h);
+                } else {
+                    lv_area_set(&ext->button_areas[btn_i], act_x, act_y, act_x 
+ act_unit_w, act_y + btn_h);
+                }
+
+                unit_act_cnt += get_button_width(ext->ctrl_bits[btn_i]);
+
+                i_tot++;
+                btn_i++;
+            }
+        }
+        act_y += btn_h + style_bg->body.padding.inner + 1;
+
+        if(strlen(map_p_tmp[btn_cnt]) == 0) break; /*Break on end of map*/
+        map_p_tmp = &map_p_tmp[btn_cnt + 1];       /*Set the map to the next 
line*/
+        i_tot++;                                   /*Skip the '\n'*/
+    }
+
+    lv_obj_invalidate(btnm);
+}
+
+/**
+ * Set the button control map (hidden, disabled etc.) for a button matrix. The
+ * control map array will be copied and so may be deallocated after this
+ * function returns.
+ * @param btnm pointer to a button matrix object
+ * @param ctrl_map pointer to an array of `lv_btn_ctrl_t` control bytes. The
+ *                 length of the array and position of the elements must match
+ *                 the number and order of the individual buttons (i.e. 
excludes
+ *                 newline entries).
+ *                 An element of the map should look like e.g.:
+ *                 `ctrl_map[0] = width | LV_BTNM_CTRL_NO_REPEAT |  
LV_BTNM_CTRL_TGL_ENABLE`
+ */
+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);
+
+    lv_btnm_set_map(btnm, ext->map_p);
+}
+
+/**
+ * Set the pressed button i.e. visually highlight it.
+ * Mainly used a when the btnm is in a group to show the selected button
+ * @param btnm pointer to button matrix object
+ * @param id index of the currently pressed button (`LV_BTNM_BTN_NONE` to 
unpress)
+ */
+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;
+
+    if(id == ext->btn_id_pr) return;
+
+    ext->btn_id_pr = id;
+    lv_obj_invalidate(btnm);
+}
+
+/**
+ * Set a style of a button matrix
+ * @param btnm pointer to a button matrix object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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) {
+        case LV_BTNM_STYLE_BG: lv_obj_set_style(btnm, style); break;
+        case LV_BTNM_STYLE_BTN_REL:
+            ext->styles_btn[LV_BTN_STATE_REL] = style;
+            lv_obj_invalidate(btnm);
+            break;
+        case LV_BTNM_STYLE_BTN_PR:
+            ext->styles_btn[LV_BTN_STATE_PR] = style;
+            lv_obj_invalidate(btnm);
+            break;
+        case LV_BTNM_STYLE_BTN_TGL_REL:
+            ext->styles_btn[LV_BTN_STATE_TGL_REL] = style;
+            lv_obj_invalidate(btnm);
+            break;
+        case LV_BTNM_STYLE_BTN_TGL_PR:
+            ext->styles_btn[LV_BTN_STATE_TGL_PR] = style;
+            lv_obj_invalidate(btnm);
+            break;
+        case LV_BTNM_STYLE_BTN_INA:
+            ext->styles_btn[LV_BTN_STATE_INA] = style;
+            lv_obj_invalidate(btnm);
+            break;
+    }
+}
+
+/**
+ * Enable recoloring of button's texts
+ * @param btnm pointer to button matrix object
+ * @param en true: enable recoloring; false: disable
+ */
+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;
+    lv_obj_invalidate(btnm);
+}
+
+/**
+ * Set the attributes of a button of the button matrix
+ * @param btnm pointer to button matrix object
+ * @param btn_id 0 based index of the button to modify. (Not counting new 
lines)
+ */
+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;
+
+    ext->ctrl_bits[btn_id] |= ctrl;
+    invalidate_button_area(btnm, btn_id);
+}
+
+/**
+ * Clear the attributes of a button of the button matrix
+ * @param btnm pointer to button matrix object
+ * @param btn_id 0 based index of the button to modify. (Not counting new 
lines)
+ */
+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;
+
+    ext->ctrl_bits[btn_id] &= (~ctrl);
+    invalidate_button_area(btnm, btn_id);
+}
+
+/**
+ * Set the attributes of all buttons of a button matrix
+ * @param btnm pointer to a button matrix object
+ * @param ctrl attribute(s) to set from `lv_btnm_ctrl_t`. Values can be ORed.
+ */
+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++) {
+        lv_btnm_set_btn_ctrl(btnm, i, ctrl);
+    }
+}
+
+/**
+ * Clear the attributes of all buttons of a button matrix
+ * @param btnm pointer to a button matrix object
+ * @param ctrl attribute(s) to set from `lv_btnm_ctrl_t`. Values can be ORed.
+ * @param en true: set the attributes; false: clear the attributes
+ */
+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++) {
+        lv_btnm_clear_btn_ctrl(btnm, i, ctrl);
+    }
+}
+
+/**
+ * Set a single buttons relative width.
+ * This method will cause the matrix be regenerated and is a relatively
+ * expensive operation. It is recommended that initial width be specified using
+ * `lv_btnm_set_ctrl_map` and this method only be used for dynamic changes.
+ * @param btnm pointer to button matrix object
+ * @param btn_id 0 based index of the button to modify.
+ * @param width Relative width compared to the buttons in the same row. [1..7]
+ */
+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;
+    ext->ctrl_bits[btn_id] &= (~LV_BTNM_WIDTH_MASK);
+    ext->ctrl_bits[btn_id] |= (LV_BTNM_WIDTH_MASK & width);
+
+    lv_btnm_set_map(btnm, ext->map_p);
+}
+
+/**
+ * Make the button matrix like a selector widget (only one button may be 
toggled at a time).
+ *
+ * Toggling must be enabled on the buttons you want to be selected with 
`lv_btnm_set_ctrl` or
+ * `lv_btnm_set_btn_ctrl_all`.
+ *
+ * @param btnm Button matrix object
+ * @param one_toggle Whether "one toggle" mode is enabled
+ */
+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;
+
+    /*If more than one button is toggled only the first one should be*/
+    make_one_button_toggled(btnm, 0);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the current map of a button matrix
+ * @param btnm pointer to a button matrix object
+ * @return the current map
+ */
+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;
+}
+
+/**
+ * Check whether the button's text can use recolor or not
+ * @param btnm pointer to button matrix object
+ * @return true: text recolor enable; false: disabled
+ */
+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;
+}
+
+/**
+ * Get the index of the lastly "activated" button by the user (pressed, 
released etc)
+ * Useful in the the `event_cb` to get the text of the button, check if hidden 
etc.
+ * @param btnm pointer to button matrix object
+ * @return  index of the last released button (LV_BTNM_BTN_NONE: if unset)
+ */
+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;
+}
+
+/**
+ * Get the text of the lastly "activated" button by the user (pressed, 
released etc)
+ * Useful in the the `event_cb`
+ * @param btnm pointer to button matrix object
+ * @return text of the last released button (NULL: if unset)
+ */
+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);
+    } else {
+        return NULL;
+    }
+}
+
+/**
+ * Get the pressed button's index.
+ * The button be really pressed by the user or manually set to pressed with 
`lv_btnm_set_pressed`
+ * @param btnm pointer to button matrix object
+ * @return  index of the pressed button (LV_BTNM_BTN_NONE: if unset)
+ */
+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;
+}
+
+/**
+ * Get the button's text
+ * @param btnm pointer to button matrix object
+ * @param btn_id the index a button not counting new line characters. (The 
return value of
+ * lv_btnm_get_pressed/released)
+ * @return  text of btn_index` button
+ */
+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;
+
+    uint16_t txt_i = 0;
+    uint16_t btn_i = 0;
+
+    /* Search the text of ext->btn_pr the buttons text in the map
+     * Skip "\n"-s*/
+    while(btn_i != btn_id) {
+        btn_i++;
+        txt_i++;
+        if(strcmp(ext->map_p[txt_i], "\n") == 0) txt_i++;
+    }
+
+    if(btn_i == ext->btn_cnt) return NULL;
+
+    return ext->map_p[txt_i];
+}
+
+/**
+ * Get the whether a control value is enabled or disabled for button of a 
button matrix
+ * @param btnm pointer to a button matrix object
+ * @param btn_id the index a button not counting new line characters. (E.g. 
the return value of
+ * lv_btnm_get_pressed/released)
+ * @param ctrl control values to check (ORed value can be used)
+ * @return true: long press repeat is disabled; false: long press repeat 
enabled
+ */
+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;
+
+    return ext->ctrl_bits[btn_id] & ctrl ? true : false;
+}
+
+/**
+ * Get a style of a button matrix
+ * @param btnm pointer to a button matrix object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+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);
+
+    switch(type) {
+        case LV_BTNM_STYLE_BG: style = lv_obj_get_style(btnm); break;
+        case LV_BTNM_STYLE_BTN_REL: style = ext->styles_btn[LV_BTN_STATE_REL]; 
break;
+        case LV_BTNM_STYLE_BTN_PR: style = ext->styles_btn[LV_BTN_STATE_PR]; 
break;
+        case LV_BTNM_STYLE_BTN_TGL_REL: style = 
ext->styles_btn[LV_BTN_STATE_TGL_REL]; break;
+        case LV_BTNM_STYLE_BTN_TGL_PR: style = 
ext->styles_btn[LV_BTN_STATE_TGL_PR]; break;
+        case LV_BTNM_STYLE_BTN_INA: style = ext->styles_btn[LV_BTN_STATE_INA]; 
break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/**
+ * Find whether "one toggle" mode is enabled.
+ * @param btnm Button matrix object
+ * @return whether "one toggle" mode is enabled
+ */
+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;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, 
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*/
+    }
+    /*Draw the object*/
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+        ancestor_design_f(btnm, mask, mode);
+
+        lv_btnm_ext_t * ext         = lv_obj_get_ext_attr(btnm);
+        const lv_style_t * bg_style = lv_obj_get_style(btnm);
+        const lv_style_t * btn_style;
+        lv_opa_t opa_scale = lv_obj_get_opa_scale(btnm);
+
+        lv_area_t area_btnm;
+        lv_obj_get_coords(btnm, &area_btnm);
+
+        lv_area_t area_tmp;
+        lv_coord_t btn_w;
+        lv_coord_t btn_h;
+
+        uint16_t btn_i = 0;
+        uint16_t txt_i = 0;
+        lv_style_t style_tmp;
+        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) {
+                txt_i++;
+            }
+
+            /*Skip hidden buttons*/
+            if(button_is_hidden(ext->ctrl_bits[btn_i])) continue;
+
+            lv_area_copy(&area_tmp, &ext->button_areas[btn_i]);
+            area_tmp.x1 += area_btnm.x1;
+            area_tmp.y1 += area_btnm.y1;
+            area_tmp.x2 += area_btnm.x1;
+            area_tmp.y2 += area_btnm.y1;
+
+            btn_w = lv_area_get_width(&area_tmp);
+            btn_h = lv_area_get_height(&area_tmp);
+
+            /*Load the style*/
+            bool tgl_state = button_get_tgl_state(ext->ctrl_bits[btn_i]);
+            if(button_is_inactive(ext->ctrl_bits[btn_i]))
+                btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_INA);
+            else if(btn_i != ext->btn_id_pr && tgl_state == false)
+                btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_REL);
+            else if(btn_i == ext->btn_id_pr && tgl_state == false)
+                btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_PR);
+            else if(btn_i != ext->btn_id_pr && tgl_state == true)
+                btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_TGL_REL);
+            else if(btn_i == ext->btn_id_pr && tgl_state == true)
+                btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_TGL_PR);
+            else
+                btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_REL); 
/*Not possible option, just to be sure*/
+
+            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(area_tmp.y1 == btnm->coords.y1 + 
bg_style->body.padding.top) {
+                    style_tmp.body.border.part &= ~LV_BORDER_TOP;
+                }
+                if(area_tmp.y2 == btnm->coords.y2 - 
bg_style->body.padding.bottom) {
+                    style_tmp.body.border.part &= ~LV_BORDER_BOTTOM;
+                }
+
+                if(txt_i == 0) {
+                    style_tmp.body.border.part &= ~LV_BORDER_LEFT;
+                } else if(strcmp(ext->map_p[txt_i - 1], "\n") == 0) {
+                    style_tmp.body.border.part &= ~LV_BORDER_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;
+                }
+            }
+            lv_draw_rect(&area_tmp, mask, &style_tmp, opa_scale);
+
+            /*Calculate the size of the text*/
+            if(btn_style->glass) btn_style = bg_style;
+            const lv_font_t * font = btn_style->text.font;
+            lv_point_t txt_size;
+            lv_txt_get_size(&txt_size, ext->map_p[txt_i], font, 
btn_style->text.letter_space,
+                            btn_style->text.line_space, 
lv_area_get_width(&area_btnm), txt_flag);
+
+            area_tmp.x1 += (btn_w - txt_size.x) / 2;
+            area_tmp.y1 += (btn_h - txt_size.y) / 2;
+            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, NULL, NULL, lv_obj_get_base_dir(btnm));
+        }
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the button matrix
+ * @param btnm pointer to a button matrix 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_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* 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;
+    if(sign == LV_SIGNAL_CLEANUP) {
+        lv_mem_free(ext->button_areas);
+        lv_mem_free(ext->ctrl_bits);
+    } else if(sign == LV_SIGNAL_STYLE_CHG || sign == LV_SIGNAL_CORD_CHG) {
+        lv_btnm_set_map(btnm, ext->map_p);
+    } else if(sign == LV_SIGNAL_PRESSED) {
+        lv_indev_t * indev = lv_indev_get_act();
+        if(lv_indev_get_type(indev) == LV_INDEV_TYPE_POINTER || 
lv_indev_get_type(indev) == LV_INDEV_TYPE_BUTTON) {
+            uint16_t btn_pr;
+            /*Search the pressed area*/
+            lv_indev_get_point(param, &p);
+            btn_pr = get_button_from_point(btnm, &p);
+
+            invalidate_button_area(btnm, ext->btn_id_pr) /*Invalidate the old 
area*/;
+            ext->btn_id_pr  = btn_pr;
+            ext->btn_id_act = btn_pr;
+            invalidate_button_area(btnm, ext->btn_id_pr); /*Invalidate the new 
area*/
+        }
+        if(ext->btn_id_act != LV_BTNM_BTN_NONE) {
+            if(button_is_click_trig(ext->ctrl_bits[ext->btn_id_act]) == false 
&&
+               button_is_inactive(ext->ctrl_bits[ext->btn_id_act]) == false &&
+               button_is_hidden(ext->ctrl_bits[ext->btn_id_act]) == false) {
+                uint32_t b = ext->btn_id_act;
+                res        = lv_event_send(btnm, LV_EVENT_VALUE_CHANGED, &b);
+            }
+        }
+    } else if(sign == LV_SIGNAL_PRESSING) {
+        uint16_t btn_pr;
+        /*Search the pressed area*/
+        lv_indev_get_point(param, &p);
+        btn_pr = get_button_from_point(btnm, &p);
+        /*Invalidate to old and the new areas*/;
+        if(btn_pr != ext->btn_id_pr) {
+            lv_indev_reset_long_press(param); /*Start the log press time again 
on the new button*/
+            if(ext->btn_id_pr != LV_BTNM_BTN_NONE) {
+                invalidate_button_area(btnm, ext->btn_id_pr);
+            }
+            if(btn_pr != LV_BTNM_BTN_NONE) {
+                uint32_t b = ext->btn_id_act;
+                res        = lv_event_send(btnm, LV_EVENT_VALUE_CHANGED, &b);
+                if(res == LV_RES_OK) {
+                    invalidate_button_area(btnm, btn_pr);
+                }
+            }
+        }
+
+        ext->btn_id_pr  = btn_pr;
+        ext->btn_id_act = btn_pr;
+    } else if(sign == LV_SIGNAL_RELEASED) {
+        if(ext->btn_id_pr != LV_BTNM_BTN_NONE) {
+            /*Toggle the button if enabled*/
+            if(button_is_tgl_enabled(ext->ctrl_bits[ext->btn_id_pr])) {
+                if(button_get_tgl_state(ext->ctrl_bits[ext->btn_id_pr])) {
+                    ext->ctrl_bits[ext->btn_id_pr] &= 
(~LV_BTNM_CTRL_TGL_STATE);
+                } else {
+                    ext->ctrl_bits[ext->btn_id_pr] |= LV_BTNM_CTRL_TGL_STATE;
+                }
+                if(ext->one_toggle) make_one_button_toggled(btnm, 
ext->btn_id_pr);
+            }
+
+            /*Invalidate to old pressed area*/;
+            invalidate_button_area(btnm, ext->btn_id_pr);
+
+#if LV_USE_GROUP
+            /*Leave the clicked button when releases if this not the focused 
object in a group*/
+            lv_group_t * g = lv_obj_get_group(btnm);
+            if(lv_group_get_focused(g) != btnm) {
+                ext->btn_id_pr = LV_BTNM_BTN_NONE;
+            }
+#else
+            ext->btn_id_pr = LV_BTNM_BTN_NONE;
+#endif
+
+            if(button_is_click_trig(ext->ctrl_bits[ext->btn_id_act]) == true &&
+               button_is_inactive(ext->ctrl_bits[ext->btn_id_act]) == false &&
+               button_is_hidden(ext->ctrl_bits[ext->btn_id_act]) == false) {
+                uint32_t b = ext->btn_id_act;
+                res        = lv_event_send(btnm, LV_EVENT_VALUE_CHANGED, &b);
+            }
+        }
+    } else if(sign == LV_SIGNAL_LONG_PRESS_REP) {
+        if(ext->btn_id_act != LV_BTNM_BTN_NONE) {
+            if(button_is_repeat_disabled(ext->ctrl_bits[ext->btn_id_act]) == 
false &&
+               button_is_inactive(ext->ctrl_bits[ext->btn_id_act]) == false &&
+               button_is_hidden(ext->ctrl_bits[ext->btn_id_act]) == false) {
+                uint32_t b = ext->btn_id_act;
+                res        = lv_event_send(btnm, LV_EVENT_VALUE_CHANGED, &b);
+            }
+        }
+    } else if(sign == LV_SIGNAL_PRESS_LOST || sign == LV_SIGNAL_DEFOCUS) {
+        ext->btn_id_pr  = LV_BTNM_BTN_NONE;
+        ext->btn_id_act = LV_BTNM_BTN_NONE;
+        lv_obj_invalidate(btnm);
+    } else if(sign == LV_SIGNAL_FOCUS) {
+#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;
+            lv_indev_get_point(indev, &p1);
+            uint16_t btn_i = get_button_from_point(btnm, &p1);
+            ext->btn_id_pr = btn_i;
+
+        } else if(indev_type == LV_INDEV_TYPE_ENCODER) {
+            /*In navigation mode don't select any button but in edit mode 
select the fist*/
+            if(lv_group_get_editing(lv_obj_get_group(btnm)))
+                ext->btn_id_pr = 0;
+            else
+                ext->btn_id_pr = LV_BTNM_BTN_NONE;
+        } else {
+            ext->btn_id_pr = 0;
+        }
+#else
+        ext->btn_id_pr = 0;
+#endif
+
+        ext->btn_id_act = ext->btn_id_pr;
+        lv_obj_invalidate(btnm);
+    } else if(sign == LV_SIGNAL_CONTROL) {
+        char c = *((char *)param);
+        if(c == LV_KEY_RIGHT) {
+            if(ext->btn_id_pr == LV_BTNM_BTN_NONE)
+                ext->btn_id_pr = 0;
+            else
+                ext->btn_id_pr++;
+            if(ext->btn_id_pr >= ext->btn_cnt - 1) ext->btn_id_pr = 
ext->btn_cnt - 1;
+            ext->btn_id_act = ext->btn_id_pr;
+            lv_obj_invalidate(btnm);
+        } else if(c == LV_KEY_LEFT) {
+            if(ext->btn_id_pr == LV_BTNM_BTN_NONE) ext->btn_id_pr = 0;
+            if(ext->btn_id_pr > 0) ext->btn_id_pr--;
+            ext->btn_id_act = ext->btn_id_pr;
+            lv_obj_invalidate(btnm);
+        } else if(c == LV_KEY_DOWN) {
+            const lv_style_t * style = lv_btnm_get_style(btnm, 
LV_BTNM_STYLE_BG);
+            /*Find the area below the the current*/
+            if(ext->btn_id_pr == LV_BTNM_BTN_NONE) {
+                ext->btn_id_pr = 0;
+            } else {
+                uint16_t area_below;
+                lv_coord_t pr_center =
+                    ext->button_areas[ext->btn_id_pr].x1 + 
(lv_area_get_width(&ext->button_areas[ext->btn_id_pr]) >> 1);
+
+                for(area_below = ext->btn_id_pr; area_below < ext->btn_cnt; 
area_below++) {
+                    if(ext->button_areas[area_below].y1 > 
ext->button_areas[ext->btn_id_pr].y1 &&
+                       pr_center >= ext->button_areas[area_below].x1 &&
+                       pr_center <= ext->button_areas[area_below].x2 + 
style->body.padding.inner) {
+                        break;
+                    }
+                }
+
+                if(area_below < ext->btn_cnt) ext->btn_id_pr = area_below;
+            }
+            ext->btn_id_act = ext->btn_id_pr;
+            lv_obj_invalidate(btnm);
+        } else if(c == LV_KEY_UP) {
+            const lv_style_t * style = lv_btnm_get_style(btnm, 
LV_BTNM_STYLE_BG);
+            /*Find the area below the the current*/
+            if(ext->btn_id_pr == LV_BTNM_BTN_NONE) {
+                ext->btn_id_pr = 0;
+            } else {
+                int16_t area_above;
+                lv_coord_t pr_center =
+                    ext->button_areas[ext->btn_id_pr].x1 + 
(lv_area_get_width(&ext->button_areas[ext->btn_id_pr]) >> 1);
+
+                for(area_above = ext->btn_id_pr; area_above >= 0; 
area_above--) {
+                    if(ext->button_areas[area_above].y1 < 
ext->button_areas[ext->btn_id_pr].y1 &&
+                       pr_center >= ext->button_areas[area_above].x1 - 
style->body.padding.inner &&
+                       pr_center <= ext->button_areas[area_above].x2) {
+                        break;
+                    }
+                }
+                if(area_above >= 0) ext->btn_id_pr = area_above;
+            }
+            ext->btn_id_act = ext->btn_id_pr;
+            lv_obj_invalidate(btnm);
+        }
+    } else if(sign == LV_SIGNAL_GET_EDITABLE) {
+        bool * editable = (bool *)param;
+        *editable       = true;
+    }
+    return res;
+}
+
+/**
+ * Create the required number of buttons and control bytes according to a map
+ * @param btnm pointer to button matrix object
+ * @param map_p pointer to a string array
+ */
+static void allocate_btn_areas_and_controls(const lv_obj_t * btnm, const char 
** map)
+{
+    /*Count the buttons in the map*/
+    uint16_t btn_cnt = 0;
+    uint16_t i       = 0;
+    while(strlen(map[i]) != 0) {
+        if(strcmp(map[i], "\n") != 0) { /*Do not count line breaks*/
+            btn_cnt++;
+        }
+        i++;
+    }
+
+    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
+
+    if(ext->button_areas != NULL) {
+        lv_mem_free(ext->button_areas);
+        ext->button_areas = NULL;
+    }
+    if(ext->ctrl_bits != NULL) {
+        lv_mem_free(ext->ctrl_bits);
+        ext->ctrl_bits = NULL;
+    }
+
+    ext->button_areas = lv_mem_alloc(sizeof(lv_area_t) * btn_cnt);
+    LV_ASSERT_MEM(ext->button_areas);
+    ext->ctrl_bits = lv_mem_alloc(sizeof(lv_btnm_ctrl_t) * btn_cnt);
+    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);
+
+    ext->btn_cnt = btn_cnt;
+}
+
+/**
+ * Get the width of a button in units (default is 1).
+ * @param ctrl_bits least significant 3 bits used (1..7 valid values)
+ * @return the width of the button in units
+ */
+static uint8_t get_button_width(lv_btnm_ctrl_t ctrl_bits)
+{
+    uint8_t w = ctrl_bits & LV_BTNM_WIDTH_MASK;
+    return w != 0 ? w : 1;
+}
+
+static bool button_is_hidden(lv_btnm_ctrl_t ctrl_bits)
+{
+    return ctrl_bits & LV_BTNM_CTRL_HIDDEN ? true : false;
+}
+
+static bool button_is_repeat_disabled(lv_btnm_ctrl_t ctrl_bits)
+{
+    return ctrl_bits & LV_BTNM_CTRL_NO_REPEAT ? true : false;
+}
+
+static bool button_is_inactive(lv_btnm_ctrl_t ctrl_bits)
+{
+    return ctrl_bits & LV_BTNM_CTRL_INACTIVE ? true : false;
+}
+
+static bool button_is_click_trig(lv_btnm_ctrl_t ctrl_bits)
+{
+    return ctrl_bits & LV_BTNM_CTRL_CLICK_TRIG ? true : false;
+}
+
+static bool button_is_tgl_enabled(lv_btnm_ctrl_t ctrl_bits)
+{
+    return ctrl_bits & LV_BTNM_CTRL_TGL_ENABLE ? true : false;
+}
+
+static bool button_get_tgl_state(lv_btnm_ctrl_t ctrl_bits)
+{
+    return ctrl_bits & LV_BTNM_CTRL_TGL_STATE ? true : false;
+}
+
+/**
+ * Gives the button id of a button under a given point
+ * @param btnm pointer to a button matrix object
+ * @param p a point with absolute coordinates
+ * @return the id of the button or LV_BTNM_BTN_NONE.
+ */
+static uint16_t get_button_from_point(lv_obj_t * btnm, lv_point_t * p)
+{
+    lv_area_t btnm_cords;
+    lv_area_t btn_area;
+    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
+    uint16_t i;
+    lv_obj_get_coords(btnm, &btnm_cords);
+
+    for(i = 0; i < ext->btn_cnt; i++) {
+        lv_area_copy(&btn_area, &ext->button_areas[i]);
+        btn_area.x1 += btnm_cords.x1;
+        btn_area.y1 += btnm_cords.y1;
+        btn_area.x2 += btnm_cords.x1;
+        btn_area.y2 += btnm_cords.y1;
+        if(lv_area_is_point_on(&btn_area, p) != false) {
+            break;
+        }
+    }
+
+    if(i == ext->btn_cnt) i = LV_BTNM_BTN_NONE;
+
+    return i;
+}
+
+static void invalidate_button_area(const lv_obj_t * btnm, uint16_t btn_idx)
+{
+    if(btn_idx == LV_BTNM_BTN_NONE) return;
+
+    lv_area_t btn_area;
+    lv_area_t btnm_area;
+
+    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
+    lv_area_copy(&btn_area, &ext->button_areas[btn_idx]);
+    lv_obj_get_coords(btnm, &btnm_area);
+
+    /* Convert relative coordinates to absolute */
+    btn_area.x1 += btnm_area.x1;
+    btn_area.y1 += btnm_area.y1;
+    btn_area.x2 += btnm_area.x1;
+    btn_area.y2 += btnm_area.y1;
+
+    lv_inv_area(lv_obj_get_disp(btnm), &btn_area);
+}
+
+/**
+ * Compares two button matrix maps for equality
+ * @param map1 map to compare
+ * @param map2 map to compare
+ * @return true if maps are identical in length and content
+ */
+static bool maps_are_identical(const char ** map1, const char ** map2)
+{
+    if(map1 == map2) return true;
+    if(map1 == NULL || map2 == NULL) return map1 == map2;
+
+    uint16_t i = 0;
+    while(map1[i][0] != '\0' && map2[i][0] != '\0') {
+        if(strcmp(map1[i], map2[i]) != 0) return false;
+        i++;
+    }
+    return map1[i][0] == '\0' && map2[i][0] == '\0';
+}
+
+/**
+ * Enforces a single button being toggled on the button matrix.
+ * It simply clears the toggle flag on other buttons.
+ * @param btnm Button matrix object
+ * @param btn_idx Button that should remain toggled
+ */
+static void make_one_button_toggled(lv_obj_t * btnm, uint16_t btn_idx)
+{
+    /*Save whether the button was toggled*/
+    bool was_toggled = lv_btnm_get_btn_ctrl(btnm, btn_idx, 
LV_BTNM_CTRL_TGL_STATE);
+
+    lv_btnm_clear_btn_ctrl_all(btnm, LV_BTNM_CTRL_TGL_STATE);
+
+    if(was_toggled) lv_btnm_set_btn_ctrl(btnm, btn_idx, 
LV_BTNM_CTRL_TGL_STATE);
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_btnm.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_btnm.h
new file mode 100755
index 0000000..44bc4ef
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_btnm.h
@@ -0,0 +1,276 @@
+/**
+ * @file lv_btnm.h
+ *
+ */
+
+#ifndef LV_BTNM_H
+#define LV_BTNM_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_BTNM != 0
+
+#include "../lv_core/lv_obj.h"
+#include "lv_label.h"
+#include "lv_btn.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_BTNM_WIDTH_MASK 0x0007
+#define LV_BTNM_BTN_NONE 0xFFFF
+
+LV_EXPORT_CONST_INT(LV_BTNM_BTN_NONE);
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/** Type to store button control bits (disabled, hidden etc.) */
+enum {
+    LV_BTNM_CTRL_HIDDEN     = 0x0008, /**< Button hidden */
+    LV_BTNM_CTRL_NO_REPEAT  = 0x0010, /**< Do not repeat press this button. */
+    LV_BTNM_CTRL_INACTIVE   = 0x0020, /**< Disable this button. */
+    LV_BTNM_CTRL_TGL_ENABLE = 0x0040, /**< Button *can* be toggled. */
+    LV_BTNM_CTRL_TGL_STATE  = 0x0080, /**< Button is currently toggled (e.g. 
checked). */
+    LV_BTNM_CTRL_CLICK_TRIG = 0x0100, /**< 1: Send LV_EVENT_SELECTED on CLICK, 
0: Send LV_EVENT_SELECTED on PRESS*/
+};
+typedef uint16_t lv_btnm_ctrl_t;
+
+/*Data of button matrix*/
+typedef struct
+{
+    /*No inherited ext.*/ /*Ext. of ancestor*/
+    /*New data for this type */
+    const char ** map_p;                              /*Pointer to the current 
map*/
+    lv_area_t * button_areas;                         /*Array of areas of 
buttons*/
+    lv_btnm_ctrl_t * ctrl_bits;                       /*Array of control 
bytes*/
+    const lv_style_t * styles_btn[_LV_BTN_STATE_NUM]; /*Styles of buttons in 
each state*/
+    uint16_t btn_cnt;                                 /*Number of button in 
'map_p'(Handled by the library)*/
+    uint16_t btn_id_pr;                               /*Index of the currently 
pressed button or LV_BTNM_BTN_NONE*/
+    uint16_t btn_id_act;    /*Index of the active button (being 
pressed/released etc) or LV_BTNM_BTN_NONE */
+    uint8_t recolor : 1;    /*Enable button recoloring*/
+    uint8_t one_toggle : 1; /*Single button toggled at once*/
+} lv_btnm_ext_t;
+
+enum {
+    LV_BTNM_STYLE_BG,
+    LV_BTNM_STYLE_BTN_REL,
+    LV_BTNM_STYLE_BTN_PR,
+    LV_BTNM_STYLE_BTN_TGL_REL,
+    LV_BTNM_STYLE_BTN_TGL_PR,
+    LV_BTNM_STYLE_BTN_INA,
+};
+typedef uint8_t lv_btnm_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a button matrix objects
+ * @param par pointer to an object, it will be the parent of the new button 
matrix
+ * @param copy pointer to a button matrix object, if not NULL then the new 
object will be copied
+ * from it
+ * @return pointer to the created button matrix
+ */
+lv_obj_t * lv_btnm_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new map. Buttons will be created/deleted according to the map. The
+ * button matrix keeps a reference to the map and so the string array must not
+ * be deallocated during the life of the matrix.
+ * @param btnm pointer to a button matrix object
+ * @param map pointer a string array. The last string has to be: "". Use "\n" 
to make a line break.
+ */
+void lv_btnm_set_map(const lv_obj_t * btnm, const char * map[]);
+
+/**
+ * Set the button control map (hidden, disabled etc.) for a button matrix. The
+ * control map array will be copied and so may be deallocated after this
+ * function returns.
+ * @param btnm pointer to a button matrix object
+ * @param ctrl_map pointer to an array of `lv_btn_ctrl_t` control bytes. The
+ *                 length of the array and position of the elements must match
+ *                 the number and order of the individual buttons (i.e. 
excludes
+ *                 newline entries).
+ *                 An element of the map should look like e.g.:
+ *                 `ctrl_map[0] = width | LV_BTNM_CTRL_NO_REPEAT |  
LV_BTNM_CTRL_TGL_ENABLE`
+ */
+void lv_btnm_set_ctrl_map(const lv_obj_t * btnm, const lv_btnm_ctrl_t 
ctrl_map[]);
+
+/**
+ * Set the pressed button i.e. visually highlight it.
+ * Mainly used a when the btnm is in a group to show the selected button
+ * @param btnm pointer to button matrix object
+ * @param id index of the currently pressed button (`LV_BTNM_BTN_NONE` to 
unpress)
+ */
+void lv_btnm_set_pressed(const lv_obj_t * btnm, uint16_t id);
+
+/**
+ * Set a style of a button matrix
+ * @param btnm pointer to a button matrix object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_btnm_set_style(lv_obj_t * btnm, lv_btnm_style_t type, const lv_style_t 
* style);
+
+/**
+ * Enable recoloring of button's texts
+ * @param btnm pointer to button matrix object
+ * @param en true: enable recoloring; false: disable
+ */
+void lv_btnm_set_recolor(const lv_obj_t * btnm, bool en);
+
+/**
+ * Set the attributes of a button of the button matrix
+ * @param btnm pointer to button matrix object
+ * @param btn_id 0 based index of the button to modify. (Not counting new 
lines)
+ */
+void lv_btnm_set_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, 
lv_btnm_ctrl_t ctrl);
+
+/**
+ * Clear the attributes of a button of the button matrix
+ * @param btnm pointer to button matrix object
+ * @param btn_id 0 based index of the button to modify. (Not counting new 
lines)
+ */
+void lv_btnm_clear_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, 
lv_btnm_ctrl_t ctrl);
+
+/**
+ * Set the attributes of all buttons of a button matrix
+ * @param btnm pointer to a button matrix object
+ * @param ctrl attribute(s) to set from `lv_btnm_ctrl_t`. Values can be ORed.
+ */
+void lv_btnm_set_btn_ctrl_all(lv_obj_t * btnm, lv_btnm_ctrl_t ctrl);
+
+/**
+ * Clear the attributes of all buttons of a button matrix
+ * @param btnm pointer to a button matrix object
+ * @param ctrl attribute(s) to set from `lv_btnm_ctrl_t`. Values can be ORed.
+ * @param en true: set the attributes; false: clear the attributes
+ */
+void lv_btnm_clear_btn_ctrl_all(lv_obj_t * btnm, lv_btnm_ctrl_t ctrl);
+
+/**
+ * Set a single buttons relative width.
+ * This method will cause the matrix be regenerated and is a relatively
+ * expensive operation. It is recommended that initial width be specified using
+ * `lv_btnm_set_ctrl_map` and this method only be used for dynamic changes.
+ * @param btnm pointer to button matrix object
+ * @param btn_id 0 based index of the button to modify.
+ * @param width Relative width compared to the buttons in the same row. [1..7]
+ */
+void lv_btnm_set_btn_width(const lv_obj_t * btnm, uint16_t btn_id, uint8_t 
width);
+
+/**
+ * Make the button matrix like a selector widget (only one button may be 
toggled at a time).
+ *
+ * Toggling must be enabled on the buttons you want to be selected with 
`lv_btnm_set_ctrl` or
+ * `lv_btnm_set_btn_ctrl_all`.
+ *
+ * @param btnm Button matrix object
+ * @param one_toggle Whether "one toggle" mode is enabled
+ */
+void lv_btnm_set_one_toggle(lv_obj_t * btnm, bool one_toggle);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the current map of a button matrix
+ * @param btnm pointer to a button matrix object
+ * @return the current map
+ */
+const char ** lv_btnm_get_map_array(const lv_obj_t * btnm);
+
+/**
+ * Check whether the button's text can use recolor or not
+ * @param btnm pointer to button matrix object
+ * @return true: text recolor enable; false: disabled
+ */
+bool lv_btnm_get_recolor(const lv_obj_t * btnm);
+
+/**
+ * Get the index of the lastly "activated" button by the user (pressed, 
released etc)
+ * Useful in the the `event_cb` to get the text of the button, check if hidden 
etc.
+ * @param btnm pointer to button matrix object
+ * @return  index of the last released button (LV_BTNM_BTN_NONE: if unset)
+ */
+uint16_t lv_btnm_get_active_btn(const lv_obj_t * btnm);
+
+/**
+ * Get the text of the lastly "activated" button by the user (pressed, 
released etc)
+ * Useful in the the `event_cb`
+ * @param btnm pointer to button matrix object
+ * @return text of the last released button (NULL: if unset)
+ */
+const char * lv_btnm_get_active_btn_text(const lv_obj_t * btnm);
+
+/**
+ * Get the pressed button's index.
+ * The button be really pressed by the user or manually set to pressed with 
`lv_btnm_set_pressed`
+ * @param btnm pointer to button matrix object
+ * @return  index of the pressed button (LV_BTNM_BTN_NONE: if unset)
+ */
+uint16_t lv_btnm_get_pressed_btn(const lv_obj_t * btnm);
+
+/**
+ * Get the button's text
+ * @param btnm pointer to button matrix object
+ * @param btn_id the index a button not counting new line characters. (The 
return value of
+ * lv_btnm_get_pressed/released)
+ * @return  text of btn_index` button
+ */
+const char * lv_btnm_get_btn_text(const lv_obj_t * btnm, uint16_t btn_id);
+
+/**
+ * Get the whether a control value is enabled or disabled for button of a 
button matrix
+ * @param btnm pointer to a button matrix object
+ * @param btn_id the index a button not counting new line characters. (E.g. 
the return value of
+ * lv_btnm_get_pressed/released)
+ * @param ctrl control values to check (ORed value can be used)
+ * @return true: long press repeat is disabled; false: long press repeat 
enabled
+ */
+bool lv_btnm_get_btn_ctrl(lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t 
ctrl);
+
+/**
+ * Get a style of a button matrix
+ * @param btnm pointer to a button matrix object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+const lv_style_t * lv_btnm_get_style(const lv_obj_t * btnm, lv_btnm_style_t 
type);
+
+/**
+ * Find whether "one toggle" mode is enabled.
+ * @param btnm Button matrix object
+ * @return whether "one toggle" mode is enabled
+ */
+bool lv_btnm_get_one_toggle(const lv_obj_t * btnm);
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_BTNM*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_BTNM_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_calendar.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_calendar.c
new file mode 100755
index 0000000..53f32a2
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_calendar.c
@@ -0,0 +1,983 @@
+/**
+ * @file lv_calendar.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+#include "../lv_core/lv_indev.h"
+#include "../lv_themes/lv_theme.h"
+#include <string.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_calendar"
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+enum {
+    DAY_DRAW_PREV_MONTH,
+    DAY_DRAW_ACT_MONTH,
+    DAY_DRAW_NEXT_MONTH,
+};
+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_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);
+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);
+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);
+static uint8_t get_day_of_week(uint32_t year, uint32_t month, uint32_t day);
+static bool is_highlighted(lv_obj_t * calendar, int32_t year, int32_t month, 
int32_t day);
+static const char * get_day_name(lv_obj_t * calendar, uint8_t day);
+static const char * get_month_name(lv_obj_t * calendar, int32_t month);
+static uint8_t get_month_length(int32_t year, int32_t month);
+static uint8_t is_leap_year(uint32_t year);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_design_cb_t ancestor_design;
+static const char * day_name[7]    = {"Su", "Mo", "Tu", "We", "Th", "Fr", 
"Sa"};
+static const char * month_name[12] = {"January", "February", "March",     
"April",   "May",      "June",
+                                      "July",    "August",   "September", 
"October", "November", "December"};
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a calendar object
+ * @param par pointer to an object, it will be the parent of the new calendar
+ * @param copy pointer to a calendar object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created calendar
+ */
+lv_obj_t * lv_calendar_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("calendar create started");
+
+    /*Create the ancestor of calendar*/
+    lv_obj_t * new_calendar = lv_obj_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) 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);
+
+    /*Initialize the allocated 'ext' */
+    ext->today.year  = 2018;
+    ext->today.month = 1;
+    ext->today.day   = 1;
+
+    ext->showed_date.year  = 2018;
+    ext->showed_date.month = 1;
+    ext->showed_date.day   = 1;
+
+    ext->pressed_date.year  = 0;
+    ext->pressed_date.month = 0;
+    ext->pressed_date.day   = 0;
+
+    ext->highlighted_dates      = NULL;
+    ext->highlighted_dates_num  = 0;
+    ext->day_names              = NULL;
+    ext->month_names            = NULL;
+    ext->style_header           = &lv_style_plain_color;
+    ext->style_header_pr        = &lv_style_pretty_color;
+    ext->style_highlighted_days = &lv_style_plain_color;
+    ext->style_inactive_days    = &lv_style_btn_ina;
+    ext->style_week_box         = &lv_style_plain_color;
+    ext->style_today_box        = &lv_style_pretty_color;
+    ext->style_day_names        = &lv_style_pretty;
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_calendar, lv_calendar_signal);
+    lv_obj_set_design_cb(new_calendar, lv_calendar_design);
+
+    /*Init the new calendar calendar*/
+    if(copy == NULL) {
+        lv_obj_set_size(new_calendar, LV_DPI * 2, LV_DPI * 2);
+        lv_obj_set_style(new_calendar, &lv_style_pretty);
+
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_BG, 
th->style.calendar.bg);
+            lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER, 
th->style.calendar.header);
+            lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER_PR, 
th->style.calendar.header_pr);
+            lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_DAY_NAMES, 
th->style.calendar.day_names);
+            lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_WEEK_BOX, 
th->style.calendar.week_box);
+            lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_TODAY_BOX, 
th->style.calendar.today_box);
+            lv_calendar_set_style(new_calendar, 
LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS,
+                                  th->style.calendar.highlighted_days);
+            lv_calendar_set_style(new_calendar, 
LV_CALENDAR_STYLE_INACTIVE_DAYS, th->style.calendar.inactive_days);
+        } else {
+            lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_BG, 
&lv_style_pretty);
+            lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER, 
ext->style_header);
+            lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER_PR, 
ext->style_header_pr);
+            lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_DAY_NAMES, 
ext->style_day_names);
+            lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_WEEK_BOX, 
ext->style_week_box);
+            lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_TODAY_BOX, 
ext->style_today_box);
+            lv_calendar_set_style(new_calendar, 
LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS, ext->style_highlighted_days);
+            lv_calendar_set_style(new_calendar, 
LV_CALENDAR_STYLE_INACTIVE_DAYS, ext->style_inactive_days);
+        }
+    }
+    /*Copy an existing calendar*/
+    else {
+        lv_calendar_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->today.year              = copy_ext->today.year;
+        ext->today.month             = copy_ext->today.month;
+        ext->today.day               = copy_ext->today.day;
+
+        ext->showed_date.year  = copy_ext->showed_date.year;
+        ext->showed_date.month = copy_ext->showed_date.month;
+        ext->showed_date.day   = copy_ext->showed_date.day;
+
+        ext->highlighted_dates     = copy_ext->highlighted_dates;
+        ext->highlighted_dates_num = copy_ext->highlighted_dates_num;
+        ext->day_names             = copy_ext->day_names;
+
+        ext->month_names            = copy_ext->month_names;
+        ext->style_header           = copy_ext->style_header;
+        ext->style_header_pr        = copy_ext->style_header_pr;
+        ext->style_highlighted_days = copy_ext->style_highlighted_days;
+        ext->style_inactive_days    = copy_ext->style_inactive_days;
+        ext->style_week_box         = copy_ext->style_week_box;
+        ext->style_today_box        = copy_ext->style_today_box;
+        ext->style_day_names        = copy_ext->style_day_names;
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_calendar);
+    }
+
+    LV_LOG_INFO("calendar created");
+
+    return new_calendar;
+}
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/*
+ * New object specific "add" or "remove" functions come here
+ */
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the today's date
+ * @param calendar pointer to a calendar object
+ * @param today pointer to an `lv_calendar_date_t` variable containing the 
date of today. The value
+ * will be saved it can be local variable too.
+ */
+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;
+    ext->today.day          = today->day;
+
+    lv_obj_invalidate(calendar);
+}
+
+/**
+ * Set the currently showed
+ * @param calendar pointer to a calendar object
+ * @param showed pointer to an `lv_calendar_date_t` variable containing the 
date to show. The value
+ * will be saved it can be local variable too.
+ */
+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;
+    ext->showed_date.day    = showed->day;
+
+    lv_obj_invalidate(calendar);
+}
+
+/**
+ * Set the the highlighted dates
+ * @param calendar pointer to a calendar object
+ * @param highlighted pointer to an `lv_calendar_date_t` array containing the 
dates. ONLY A POINTER
+ * 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)
+{
+    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;
+
+    lv_obj_invalidate(calendar);
+}
+
+/**
+ * Set the name of the days
+ * @param calendar pointer to a calendar object
+ * @param day_names pointer to an array with the names. E.g. `const char * 
days[7] = {"Sun", "Mon",
+ * ...}` Only the pointer will be saved so this variable can't be local which 
will be destroyed
+ * later.
+ */
+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);
+}
+
+/**
+ * Set the name of the month
+ * @param calendar pointer to a calendar object
+ * @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 ** 
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        = month_names;
+    lv_obj_invalidate(calendar);
+}
+
+/**
+ * Set a style of a calendar.
+ * @param calendar pointer to calendar object
+ * @param type which style should be set
+ * @param style pointer to a style
+ *  */
+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) {
+        case LV_CALENDAR_STYLE_BG: lv_obj_set_style(calendar, style); break;
+        case LV_CALENDAR_STYLE_DAY_NAMES: ext->style_day_names = style; break;
+        case LV_CALENDAR_STYLE_HEADER: ext->style_header = style; break;
+        case LV_CALENDAR_STYLE_HEADER_PR: ext->style_header_pr = style; break;
+        case LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS: ext->style_highlighted_days = 
style; break;
+        case LV_CALENDAR_STYLE_INACTIVE_DAYS: ext->style_inactive_days = 
style; break;
+        case LV_CALENDAR_STYLE_TODAY_BOX: ext->style_today_box = style; break;
+        case LV_CALENDAR_STYLE_WEEK_BOX: ext->style_week_box = style; break;
+    }
+
+    lv_obj_invalidate(calendar);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the today's date
+ * @param calendar pointer to a calendar object
+ * @return return pointer to an `lv_calendar_date_t` variable containing the 
date of today.
+ */
+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;
+}
+
+/**
+ * Get the currently showed
+ * @param calendar pointer to a calendar object
+ * @return pointer to an `lv_calendar_date_t` variable containing the date is 
being shown.
+ */
+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;
+}
+
+/**
+ * Get the the pressed date.
+ * @param calendar pointer to a calendar object
+ * @return pointer to an `lv_calendar_date_t` variable containing the pressed 
date.
+ * `NULL` if not date pressed (e.g. the header)
+ */
+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;
+}
+
+/**
+ * Get the the highlighted dates
+ * @param calendar pointer to a calendar object
+ * @return pointer to an `lv_calendar_date_t` array containing the dates.
+ */
+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;
+}
+
+/**
+ * Get the number of the highlighted dates
+ * @param calendar pointer to a calendar object
+ * @return number of highlighted days
+ */
+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;
+}
+
+/**
+ * Get the name of the days
+ * @param calendar pointer to a calendar object
+ * @return pointer to the array of day names
+ */
+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;
+}
+
+/**
+ * Get the name of the month
+ * @param calendar pointer to a calendar object
+ * @return pointer to the array of month names
+ */
+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;
+}
+
+/**
+ * Get style of a calendar.
+ * @param calendar pointer to calendar object
+ * @param type which style should be get
+ * @return style pointer to the style
+ *  */
+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);
+
+    switch(type) {
+        case LV_CALENDAR_STYLE_BG: style = lv_obj_get_style(calendar); break;
+        case LV_CALENDAR_STYLE_HEADER: style = ext->style_header; break;
+        case LV_CALENDAR_STYLE_HEADER_PR: style = ext->style_header_pr; break;
+        case LV_CALENDAR_STYLE_DAY_NAMES: style = ext->style_day_names; break;
+        case LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS: style = 
ext->style_highlighted_days; break;
+        case LV_CALENDAR_STYLE_INACTIVE_DAYS: style = 
ext->style_inactive_days; break;
+        case LV_CALENDAR_STYLE_WEEK_BOX: style = ext->style_week_box; break;
+        case LV_CALENDAR_STYLE_TODAY_BOX: style = ext->style_today_box; break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/*
+ * New object specific "other" functions come here
+ */
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_calendar_design(lv_obj_t * calendar, const lv_area_t * mask, 
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);
+    }
+    /*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);
+
+        draw_header(calendar, mask);
+        draw_day_names(calendar, mask);
+        draw_days(calendar, mask);
+
+    }
+    /*Post draw when the children are drawn*/
+    else if(mode == LV_DESIGN_DRAW_POST) {
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the calendar
+ * @param calendar pointer to a calendar 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_calendar_signal(lv_obj_t * calendar, lv_signal_t sign, void 
* param)
+{
+    lv_res_t res;
+
+    /* 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')*/
+    } else if(sign == LV_SIGNAL_PRESSING) {
+        lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+        lv_area_t header_area;
+        lv_area_copy(&header_area, &calendar->coords);
+        header_area.y2 = header_area.y1 + get_header_height(calendar);
+
+        lv_indev_t * indev = lv_indev_get_act();
+        lv_point_t p;
+        lv_indev_get_point(indev, &p);
+
+        /*If the header is pressed mark an arrow as pressed*/
+        if(lv_area_is_point_on(&header_area, &p)) {
+            if(p.x < header_area.x1 + lv_area_get_width(&header_area) / 2) {
+                if(ext->btn_pressing != -1) lv_obj_invalidate(calendar);
+                ext->btn_pressing = -1;
+            } else {
+                if(ext->btn_pressing != 1) lv_obj_invalidate(calendar);
+                ext->btn_pressing = 1;
+            }
+
+            ext->pressed_date.year  = 0;
+            ext->pressed_date.month = 0;
+            ext->pressed_date.day   = 0;
+        }
+        /*If a day is pressed save it*/
+        else if(calculate_touched_day(calendar, &p)) {
+            if(ext->btn_pressing != 0) lv_obj_invalidate(calendar);
+            ext->btn_pressing = 0;
+        }
+        /*ELse set a deafault state*/
+        else {
+            if(ext->btn_pressing != 0) lv_obj_invalidate(calendar);
+            ext->btn_pressing       = 0;
+            ext->pressed_date.year  = 0;
+            ext->pressed_date.month = 0;
+            ext->pressed_date.day   = 0;
+        }
+    } else if(sign == LV_SIGNAL_PRESS_LOST) {
+        lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+        ext->btn_pressing       = 0;
+        lv_obj_invalidate(calendar);
+
+    } else if(sign == LV_SIGNAL_RELEASED) {
+        lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+        if(ext->btn_pressing < 0) {
+            if(ext->showed_date.month <= 1) {
+                ext->showed_date.month = 12;
+                ext->showed_date.year--;
+            } else {
+                ext->showed_date.month--;
+            }
+        } else if(ext->btn_pressing > 0) {
+            if(ext->showed_date.month >= 12) {
+                ext->showed_date.month = 1;
+                ext->showed_date.year++;
+            } else {
+                ext->showed_date.month++;
+            }
+        } else if(ext->pressed_date.year != 0) {
+            res = lv_event_send(calendar, LV_EVENT_VALUE_CHANGED, NULL);
+            if(res != LV_RES_OK) return res;
+        }
+
+        ext->btn_pressing = 0;
+        lv_obj_invalidate(calendar);
+    } else if(sign == LV_SIGNAL_CONTROL) {
+        uint8_t c               = *((uint8_t *)param);
+        lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+        if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
+            if(ext->showed_date.month >= 12) {
+                ext->showed_date.month = 1;
+                ext->showed_date.year++;
+            } else {
+                ext->showed_date.month++;
+            }
+            lv_obj_invalidate(calendar);
+        } else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
+            if(ext->showed_date.month <= 1) {
+                ext->showed_date.month = 12;
+                ext->showed_date.year--;
+            } else {
+                ext->showed_date.month--;
+            }
+            lv_obj_invalidate(calendar);
+        }
+    }
+
+    return res;
+}
+
+/**
+ * It will check if the days part of calendar is touched
+ * and if it is, it will calculate the day and put it in pressed_date of 
calendar object.
+ * @param calendar pointer to a calendar object
+ * @param pointer to a point
+ * @return true: days part of calendar is touched and its related date is put 
in pressed date
+ * false: the point is out of days part area.
+ */
+static bool calculate_touched_day(lv_obj_t * calendar, const lv_point_t * 
touched_point)
+{
+    lv_area_t days_area;
+    lv_area_copy(&days_area, &calendar->coords);
+    const lv_style_t * style_bg = lv_calendar_get_style(calendar, 
LV_CALENDAR_STYLE_BG);
+    days_area.x1 += style_bg->body.padding.left;
+    days_area.x2 -= style_bg->body.padding.right;
+    days_area.y1 =
+        calendar->coords.y1 + get_header_height(calendar) + 
get_day_names_height(calendar) - style_bg->body.padding.top;
+
+    if(lv_area_is_point_on(&days_area, touched_point)) {
+        lv_coord_t w  = (days_area.x2 - days_area.x1 + 1) / 7;
+        lv_coord_t h  = (days_area.y2 - days_area.y1 + 1) / 6;
+        uint8_t x_pos = 0;
+        x_pos         = (touched_point->x - days_area.x1) / w;
+        if(x_pos > 6) x_pos = 6;
+        uint8_t y_pos = 0;
+        y_pos         = (touched_point->y - days_area.y1) / h;
+        if(y_pos > 5) y_pos = 5;
+
+        uint8_t i_pos           = 0;
+        i_pos                   = (y_pos * 7) + x_pos;
+        lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+        if(i_pos < get_day_of_week(ext->showed_date.year, 
ext->showed_date.month, 1)) {
+            ext->pressed_date.year  = ext->showed_date.year - 
(ext->showed_date.month == 1 ? 1 : 0);
+            ext->pressed_date.month = ext->showed_date.month == 1 ? 12 : 
(ext->showed_date.month - 1);
+            ext->pressed_date.day   = get_month_length(ext->pressed_date.year, 
ext->pressed_date.month) -
+                                    get_day_of_week(ext->showed_date.year, 
ext->showed_date.month, 1) + 1 + i_pos;
+        } else if(i_pos < (get_day_of_week(ext->showed_date.year, 
ext->showed_date.month, 1) +
+                           get_month_length(ext->showed_date.year, 
ext->showed_date.month))) {
+            ext->pressed_date.year  = ext->showed_date.year;
+            ext->pressed_date.month = ext->showed_date.month;
+            ext->pressed_date.day   = i_pos + 1 - 
get_day_of_week(ext->showed_date.year, ext->showed_date.month, 1);
+        } else if(i_pos < 42) {
+            ext->pressed_date.year  = ext->showed_date.year + 
(ext->showed_date.month == 12 ? 1 : 0);
+            ext->pressed_date.month = ext->showed_date.month == 12 ? 1 : 
(ext->showed_date.month + 1);
+            ext->pressed_date.day   = i_pos + 1 - 
get_day_of_week(ext->showed_date.year, ext->showed_date.month, 1) -
+                                    get_month_length(ext->showed_date.year, 
ext->showed_date.month);
+        }
+        return true;
+    } else {
+        return false;
+    }
+}
+
+/**
+ * Get the height of a calendar's header based on it's style
+ * @param calendar point to a calendar
+ * @return the header's height
+ */
+static lv_coord_t get_header_height(lv_obj_t * calendar)
+{
+    lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+
+    return lv_font_get_line_height(ext->style_header->text.font) + 
ext->style_header->body.padding.top +
+           ext->style_header->body.padding.bottom;
+}
+
+/**
+ * Get the height of a calendar's day_names based on it's style
+ * @param calendar point to a calendar
+ * @return the day_names's height
+ */
+static lv_coord_t get_day_names_height(lv_obj_t * calendar)
+{
+    lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+
+    return lv_font_get_line_height(ext->style_day_names->text.font) + 
ext->style_day_names->body.padding.top +
+           ext->style_day_names->body.padding.bottom;
+}
+
+/**
+ * Draw the calendar header with month name and arrows
+ * @param calendar point to a calendar
+ * @param mask a mask for drawing
+ */
+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;
+    header_area.x1 = calendar->coords.x1;
+    header_area.x2 = calendar->coords.x2;
+    header_area.y1 = calendar->coords.y1;
+    header_area.y2 = calendar->coords.y1 + get_header_height(calendar);
+
+    lv_draw_rect(&header_area, mask, ext->style_header, opa_scale);
+
+    /*Add the year + month name*/
+    char txt_buf[64];
+    lv_utils_num_to_str(ext->showed_date.year, txt_buf);
+    txt_buf[4] = ' ';
+    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, 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, 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, 
(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, NULL, NULL, bidi_dir);
+}
+
+/**
+ * Draw the day's name below the header
+ * @param calendar point to a calendar
+ * @param mask a mask for drawing
+ */
+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;
+    lv_coord_t w =
+        lv_obj_get_width(calendar) - ext->style_day_names->body.padding.left - 
ext->style_day_names->body.padding.right;
+    lv_coord_t box_w = w / 7;
+    lv_area_t label_area;
+    label_area.y1 = calendar->coords.y1 + get_header_height(calendar) + 
ext->style_day_names->body.padding.top;
+    label_area.y2 = label_area.y1 + 
lv_font_get_line_height(ext->style_day_names->text.font);
+    uint32_t i;
+    for(i = 0; i < 7; i++) {
+        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, NULL, NULL, bidi_dir);
+    }
+}
+
+/**
+ * Draw the date numbers in a matrix
+ * @param calendar point to a calendar
+ * @param mask a mask for drawing
+ */
+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);
+    label_area.y1      = calendar->coords.y1 + get_header_height(calendar) + 
ext->style_day_names->body.padding.top +
+                    lv_font_get_line_height(ext->style_day_names->text.font) +
+                    ext->style_day_names->body.padding.bottom;
+    label_area.y2 = label_area.y1 + 
lv_font_get_line_height(style_bg->text.font);
+
+    lv_coord_t w          = lv_obj_get_width(calendar) - 
style_bg->body.padding.left - style_bg->body.padding.right;
+    lv_coord_t h          = calendar->coords.y2 - label_area.y1 - 
style_bg->body.padding.bottom;
+    lv_coord_t box_w      = w / 7;
+    lv_coord_t vert_space = (h - (6 * 
lv_font_get_line_height(style_bg->text.font))) / 5;
+
+    uint32_t week;
+    uint8_t day_cnt;
+    uint8_t month_start_day = get_day_of_week(ext->showed_date.year, 
ext->showed_date.month, 1);
+    day_draw_state_t draw_state; /*true: Not the prev. or next month is drawn*/
+    const lv_style_t * act_style;
+
+    /*If starting with the first day of the week then the previous month is 
not visible*/
+    if(month_start_day == 0) {
+        day_cnt    = 1;
+        draw_state = DAY_DRAW_ACT_MONTH;
+        act_style  = style_bg;
+    } else {
+        draw_state = DAY_DRAW_PREV_MONTH;
+        day_cnt = get_month_length(ext->showed_date.year, 
ext->showed_date.month - 1); /*Length of the previous month*/
+        day_cnt -= month_start_day - 1; /*First visible number of the previous 
month*/
+        act_style = ext->style_inactive_days;
+    }
+
+    bool month_of_today_shown = false;
+    if(ext->showed_date.year == ext->today.year && ext->showed_date.month == 
ext->today.month) {
+        month_of_today_shown = true;
+    }
+
+    char buf[3];
+    bool in_week_box = false;
+
+    /*Draw 6 weeks*/
+    for(week = 0; week < 6; week++) {
+
+        /*Draw the "week box"*/
+        if(month_of_today_shown &&
+           ((draw_state == DAY_DRAW_ACT_MONTH && ext->today.day >= day_cnt && 
ext->today.day < day_cnt + 7) ||
+            (draw_state == DAY_DRAW_PREV_MONTH && ext->today.day <= 7 - 
month_start_day && week == 0))) {
+            lv_area_t week_box_area;
+            lv_area_copy(&week_box_area, &label_area); /*'label_area' is 
already set for this row*/
+            week_box_area.x1 =
+                calendar->coords.x1 + style_bg->body.padding.left - 
ext->style_week_box->body.padding.left;
+            week_box_area.x2 =
+                calendar->coords.x2 - style_bg->body.padding.right + 
ext->style_week_box->body.padding.right;
+
+            week_box_area.y1 -= ext->style_week_box->body.padding.top;
+            week_box_area.y2 += ext->style_week_box->body.padding.bottom;
+            lv_draw_rect(&week_box_area, mask, ext->style_week_box, opa_scale);
+
+            in_week_box = true;
+        } else {
+            in_week_box = false;
+        }
+
+        /*Draw the 7 days of a week*/
+        uint32_t day;
+        for(day = 0; day < 7; day++) {
+            /*The previous month is over*/
+            if(draw_state == DAY_DRAW_PREV_MONTH && day == month_start_day) {
+                draw_state = DAY_DRAW_ACT_MONTH;
+                day_cnt    = 1;
+                act_style  = style_bg;
+            }
+            /*The current month is over*/
+            if(draw_state == DAY_DRAW_ACT_MONTH &&
+               day_cnt > get_month_length(ext->showed_date.year, 
ext->showed_date.month)) {
+                draw_state = DAY_DRAW_NEXT_MONTH;
+                day_cnt    = 1;
+                act_style  = ext->style_inactive_days;
+            }
+
+            label_area.x1 =
+                calendar->coords.x1 + (w * day) / 7 + 
style_bg->body.padding.left;
+            label_area.x2 = label_area.x1 + box_w - 1;
+
+            /*Draw the "today box"*/
+            if(draw_state == DAY_DRAW_ACT_MONTH && month_of_today_shown && 
ext->today.day == day_cnt) {
+                lv_area_t today_box_area;
+                lv_area_copy(&today_box_area, &label_area);
+                today_box_area.x1 = label_area.x1;
+                today_box_area.x2 = label_area.x2;
+
+                today_box_area.y1 = label_area.y1 - 
ext->style_today_box->body.padding.top;
+                today_box_area.y2 = label_area.y2 + 
ext->style_today_box->body.padding.bottom;
+                lv_draw_rect(&today_box_area, mask, ext->style_today_box, 
opa_scale);
+            }
+
+            /*Get the final style : highlighted/week box/today box/normal*/
+            const lv_style_t * final_style;
+            if(draw_state == DAY_DRAW_PREV_MONTH &&
+               is_highlighted(calendar, ext->showed_date.year - 
(ext->showed_date.month == 1 ? 1 : 0),
+                              ext->showed_date.month == 1 ? 12 : 
ext->showed_date.month - 1, day_cnt)) {
+                final_style = ext->style_highlighted_days;
+            } else if(draw_state == DAY_DRAW_ACT_MONTH &&
+                      is_highlighted(calendar, ext->showed_date.year, 
ext->showed_date.month, day_cnt)) {
+                final_style = ext->style_highlighted_days;
+            } else if(draw_state == DAY_DRAW_NEXT_MONTH &&
+                      is_highlighted(calendar, ext->showed_date.year + 
(ext->showed_date.month == 12 ? 1 : 0),
+                                     ext->showed_date.month == 12 ? 1 : 
ext->showed_date.month + 1, day_cnt)) {
+                final_style = ext->style_highlighted_days;
+            } else if(month_of_today_shown && day_cnt == ext->today.day && 
draw_state == DAY_DRAW_ACT_MONTH)
+                final_style = ext->style_today_box;
+            else if(in_week_box && draw_state == DAY_DRAW_ACT_MONTH)
+                final_style = ext->style_week_box;
+            else
+                final_style = act_style;
+
+            /*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, NULL, NULL, bidi_dir);
+
+            /*Go to the next day*/
+            day_cnt++;
+        }
+
+        /*Got to the next weeks row*/
+        label_area.y1 += vert_space + 
lv_font_get_line_height(style_bg->text.font);
+        label_area.y2 += vert_space + 
lv_font_get_line_height(style_bg->text.font);
+    }
+}
+
+/**
+ * Check weather a date is highlighted or not
+ * @param calendar pointer to a calendar object
+ * @param year a year
+ * @param month a  month [1..12]
+ * @param day a day [1..31]
+ * @return true: highlighted
+ */
+static bool is_highlighted(lv_obj_t * calendar, int32_t year, int32_t month, 
int32_t day)
+{
+    lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+
+    if(ext->highlighted_dates == NULL || ext->highlighted_dates_num == 0) 
return false;
+
+    uint32_t i;
+    for(i = 0; i < ext->highlighted_dates_num; i++) {
+        if(ext->highlighted_dates[i].year == year && 
ext->highlighted_dates[i].month == month &&
+           ext->highlighted_dates[i].day == day) {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+/**
+ * Get the day name
+ * @param calendar pointer to a calendar object
+ * @param day a day in [0..6]
+ * @return
+ */
+static const char * get_day_name(lv_obj_t * calendar, uint8_t day)
+{
+
+    lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+    if(ext->day_names)
+        return ext->day_names[day];
+    else
+        return day_name[day];
+}
+
+/**
+ * Get the month name
+ * @param calendar pointer to a calendar object
+ * @param month a month. The range is basically [1..12] but [-11..1] is also 
supported to handle
+ * previous year
+ * @return
+ */
+static const char * get_month_name(lv_obj_t * calendar, int32_t month)
+{
+    month--; /*Range of months id [1..12] but range of indexes is [0..11]*/
+    if(month < 0) month = 12 + month;
+
+    lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+    if(ext->month_names)
+        return ext->month_names[month];
+    else
+        return month_name[month];
+}
+
+/**
+ * Get the number of days in a month
+ * @param year a year
+ * @param month a month. The range is basically [1..12] but [-11..1] is also 
supported to handle
+ * previous year
+ * @return [28..31]
+ */
+static uint8_t get_month_length(int32_t year, int32_t month)
+{
+    month--; /*Range of months id [1..12] but range of indexes is [0..11]*/
+    if(month < 0) {
+        year--;             /*Already in the previous year (won't be less then 
-12 to skip a whole year)*/
+        month = 12 + month; /*`month` is negative, the result will be < 12*/
+    }
+    if(month >= 12) {
+        year++;
+        month -= 12;
+    }
+
+    /*month == 1 is february*/
+    return (month == 1) ? (28 + is_leap_year(year)) : 31 - month % 7 % 2;
+}
+
+/**
+ * Tells whether a year is leap year or not
+ * @param year a year
+ * @return 0: not leap year; 1: leap year
+ */
+static uint8_t is_leap_year(uint32_t year)
+{
+    return (year % 4) || ((year % 100 == 0) && (year % 400)) ? 0 : 1;
+}
+
+/**
+ * Get the day of the week
+ * @param year a year
+ * @param month a  month
+ * @param day a day
+ * @return [0..6] which means [Sun..Sat]
+ */
+static uint8_t get_day_of_week(uint32_t year, uint32_t month, uint32_t day)
+{
+    uint32_t a = month < 3 ? 1 : 0;
+    uint32_t b = year - a;
+
+    uint32_t day_of_week = (day + (31 * (month - 2 + 12 * a) / 12) + b + (b / 
4) - (b / 100) + (b / 400)) % 7;
+
+    return day_of_week;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_calendar.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_calendar.h
new file mode 100755
index 0000000..21317bb
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_calendar.h
@@ -0,0 +1,229 @@
+/**
+ * @file lv_calendar.h
+ *
+ */
+
+#ifndef LV_CALENDAR_H
+#define LV_CALENDAR_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_CALENDAR != 0
+
+#include "../lv_core/lv_obj.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**
+ * Represents a date on the calendar object (platform-agnostic).
+ */
+typedef struct
+{
+    uint16_t year;
+    int8_t month;
+    int8_t day;
+} lv_calendar_date_t;
+
+/*Data of calendar*/
+typedef struct
+{
+    /*None*/ /*Ext. of ancestor*/
+    /*New data for this type */
+    lv_calendar_date_t today;               /*Date of today*/
+    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)*/
+    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)*/
+
+    /*Styles*/
+    const lv_style_t * style_header;
+    const lv_style_t * style_header_pr;
+    const lv_style_t * style_day_names;
+    const lv_style_t * style_highlighted_days;
+    const lv_style_t * style_inactive_days;
+    const lv_style_t * style_week_box;
+    const lv_style_t * style_today_box;
+} lv_calendar_ext_t;
+
+/** Calendar styles*/
+enum {
+    LV_CALENDAR_STYLE_BG, /**< Background and "normal" date numbers style */
+    LV_CALENDAR_STYLE_HEADER, /** Calendar header style */
+    LV_CALENDAR_STYLE_HEADER_PR, /** Calendar header style (when pressed) */
+    LV_CALENDAR_STYLE_DAY_NAMES, /** Day name style */
+    LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS, /** Highlighted day style */ 
+    LV_CALENDAR_STYLE_INACTIVE_DAYS, /** Inactive day style */
+    LV_CALENDAR_STYLE_WEEK_BOX, /** Week highlight style */
+    LV_CALENDAR_STYLE_TODAY_BOX, /** Today highlight style */
+};
+typedef uint8_t lv_calendar_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a calendar objects
+ * @param par pointer to an object, it will be the parent of the new calendar
+ * @param copy pointer to a calendar object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created calendar
+ */
+lv_obj_t * lv_calendar_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the today's date
+ * @param calendar pointer to a calendar object
+ * @param today pointer to an `lv_calendar_date_t` variable containing the 
date of today. The value
+ * will be saved it can be local variable too.
+ */
+void lv_calendar_set_today_date(lv_obj_t * calendar, lv_calendar_date_t * 
today);
+
+/**
+ * Set the currently showed
+ * @param calendar pointer to a calendar object
+ * @param showed pointer to an `lv_calendar_date_t` variable containing the 
date to show. The value
+ * will be saved it can be local variable too.
+ */
+void lv_calendar_set_showed_date(lv_obj_t * calendar, lv_calendar_date_t * 
showed);
+
+/**
+ * Set the the highlighted dates
+ * @param calendar pointer to a calendar object
+ * @param highlighted pointer to an `lv_calendar_date_t` array containing the 
dates. ONLY A POINTER
+ * 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);
+
+/**
+ * Set the name of the days
+ * @param calendar pointer to a calendar object
+ * @param day_names pointer to an array with the names. E.g. `const char * 
days[7] = {"Sun", "Mon",
+ * ...}` Only the pointer will be saved so this variable can't be local which 
will be destroyed
+ * later.
+ */
+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 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 ** 
month_names);
+
+/**
+ * Set a style of a calendar.
+ * @param calendar pointer to calendar object
+ * @param type which style should be set
+ * @param style pointer to a style
+ *  */
+void lv_calendar_set_style(lv_obj_t * calendar, lv_calendar_style_t type, 
const lv_style_t * style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the today's date
+ * @param calendar pointer to a calendar object
+ * @return return pointer to an `lv_calendar_date_t` variable containing the 
date of today.
+ */
+lv_calendar_date_t * lv_calendar_get_today_date(const lv_obj_t * calendar);
+
+/**
+ * Get the currently showed
+ * @param calendar pointer to a calendar object
+ * @return pointer to an `lv_calendar_date_t` variable containing the date is 
being shown.
+ */
+lv_calendar_date_t * lv_calendar_get_showed_date(const lv_obj_t * calendar);
+
+/**
+ * Get the the pressed date.
+ * @param calendar pointer to a calendar object
+ * @return pointer to an `lv_calendar_date_t` variable containing the pressed 
date.
+ *         `NULL` if not date pressed (e.g. the header)
+ */
+lv_calendar_date_t * lv_calendar_get_pressed_date(const lv_obj_t * calendar);
+
+/**
+ * Get the the highlighted dates
+ * @param calendar pointer to a calendar object
+ * @return pointer to an `lv_calendar_date_t` array containing the dates.
+ */
+lv_calendar_date_t * lv_calendar_get_highlighted_dates(const lv_obj_t * 
calendar);
+
+/**
+ * Get the number of the highlighted dates
+ * @param calendar pointer to a calendar object
+ * @return number of highlighted days
+ */
+uint16_t lv_calendar_get_highlighted_dates_num(const lv_obj_t * calendar);
+
+/**
+ * Get the name of the days
+ * @param calendar pointer to a calendar object
+ * @return pointer to the array of day names
+ */
+const char ** lv_calendar_get_day_names(const lv_obj_t * calendar);
+
+/**
+ * Get the name of the month
+ * @param calendar pointer to a calendar object
+ * @return pointer to the array of month names
+ */
+const char ** lv_calendar_get_month_names(const lv_obj_t * calendar);
+
+/**
+ * Get style of a calendar.
+ * @param calendar pointer to calendar object
+ * @param type which style should be get
+ * @return style pointer to the style
+ *  */
+const lv_style_t * lv_calendar_get_style(const lv_obj_t * calendar, 
lv_calendar_style_t type);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_CALENDAR*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_CALENDAR_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_canvas.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_canvas.c
new file mode 100755
index 0000000..8d2275a
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_canvas.c
@@ -0,0 +1,870 @@
+/**
+ * @file lv_canvas.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stdlib.h>
+#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"
+
+#if LV_USE_CANVAS != 0
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_canvas"
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static lv_res_t lv_canvas_signal(lv_obj_t * canvas, lv_signal_t sign, void * 
param);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_design_cb_t ancestor_design;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a canvas object
+ * @param par pointer to an object, it will be the parent of the new canvas
+ * @param copy pointer to a canvas object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created canvas
+ */
+lv_obj_t * lv_canvas_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("canvas create started");
+
+    /*Create the ancestor of canvas*/
+    lv_obj_t * new_canvas = lv_img_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) 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);
+
+    /*Initialize the allocated 'ext' */
+    ext->dsc.header.always_zero = 0;
+    ext->dsc.header.cf          = LV_IMG_CF_TRUE_COLOR;
+    ext->dsc.header.h           = 0;
+    ext->dsc.header.w           = 0;
+    ext->dsc.data_size          = 0;
+    ext->dsc.data               = NULL;
+
+    lv_img_set_src(new_canvas, &ext->dsc);
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_canvas, lv_canvas_signal);
+
+    /*Init the new canvas canvas*/
+    if(copy == NULL) {
+
+    }
+    /*Copy an existing canvas*/
+    else {
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_canvas);
+    }
+
+    LV_LOG_INFO("canvas created");
+
+    return new_canvas;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a buffer for the canvas.
+ * @param buf a buffer where the content of the canvas will be.
+ * The required size is (lv_img_color_format_get_px_size(cf) * w * h) / 8)
+ * It can be allocated with `lv_mem_alloc()` or
+ * it can be statically allocated array (e.g. static lv_color_t buf[100*50]) or
+ * it can be an address in RAM or external SRAM
+ * @param canvas pointer to a canvas object
+ * @param w width of the canvas
+ * @param h height of the canvas
+ * @param cf color format. The following formats are supported:
+ *      LV_IMG_CF_TRUE_COLOR, LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED, 
LV_IMG_CF_INDEXES_1/2/4/8BIT
+ *
+ */
+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;
+
+    lv_img_set_src(canvas, &ext->dsc);
+}
+
+/**
+ * Set the color of a pixel on the canvas
+ * @param canvas pointer to canvas object
+ * @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_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);
+    lv_obj_invalidate(canvas);
+}
+
+/**
+ * Set the palette color of a canvas with index format. Valid only for 
`LV_IMG_CF_INDEXED1/2/4/8`
+ * @param canvas pointer to canvas object
+ * @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_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);
+    lv_obj_invalidate(canvas);
+}
+
+/**
+ * Set a style of a canvas.
+ * @param canvas pointer to canvas object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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;
+    }
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the color of a pixel on the canvas
+ * @param canvas
+ * @param x x coordinate of the point to set
+ * @param y x coordinate of the point to set
+ * @return color of the point
+ */
+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);
+}
+
+/**
+ * Get the image of the canvas as a pointer to an `lv_img_dsc_t` variable.
+ * @param canvas pointer to a canvas object
+ * @return pointer to the image descriptor.
+ */
+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;
+}
+
+/**
+ * Get style of a canvas.
+ * @param canvas pointer to canvas object
+ * @param type which style should be get
+ * @return style pointer to the style
+ */
+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) {
+        case LV_CANVAS_STYLE_MAIN: style = lv_img_get_style(canvas, 
LV_IMG_STYLE_MAIN); break;
+        default: style = NULL;
+    }
+
+    return style;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Copy a buffer to the canvas
+ * @param canvas pointer to a canvas object
+ * @param to_copy buffer to copy. The color format has to match with the 
canvas's buffer color
+ * format
+ * @param w width of the buffer to copy
+ * @param h height of the buffer to copy
+ * @param x left side of the destination position
+ * @param y top side of the destination position
+ */
+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 >= (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        = ext->dsc.header.w * y * px_size + x * px_size;
+    uint8_t * to_copy8 = (uint8_t *)to_copy;
+    lv_coord_t i;
+    for(i = 0; i < h; i++) {
+        memcpy((void *)&ext->dsc.data[px], to_copy8, w * px_size);
+        px += ext->dsc.header.w * px_size;
+        to_copy8 += w * px_size;
+    }
+}
+
+/**
+ * Rotate 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 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
+ */
+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)
+{
+    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;
+
+            /*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;
+
+            /*Get the integer part of the source pixel*/
+            int xs_int = xs >> 8;
+            int ys_int = ys >> 8;
+
+            if(xs_int >= img_width)
+                continue;
+            else if(xs_int < 0)
+                continue;
+
+            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(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);
+                } 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);
+
+                    /*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);
+                    }
+                    /*Both the image and canvas has alpha channel. Some extra 
calculation is
+                       required*/
+                    else {
+                        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);
+                        }
+                        /*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));
+                        }
+                        /*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);
+                            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_img_buf_set_px_color(&ext_dst->dsc, x + 
offset_x, y + offset_y,
+                                                    lv_color_mix(color_res, 
bg_color, ratio));
+                            lv_img_buf_set_px_alpha(&ext_dst->dsc, x + 
offset_x, y + offset_y, opa_res_2);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    lv_obj_invalidate(canvas);
+}
+
+/**
+ * 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)
+{
+    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;
+    uint32_t y;
+    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);
+        }
+    }
+}
+
+/**
+ * Draw a rectangle on the canvas
+ * @param canvas pointer to a canvas object
+ * @param x left coordinate of the rectangle
+ * @param y top coordinate of the rectangle
+ * @param w width of the rectangle
+ * @param h height of the rectangle
+ * @param style style of the rectangle (`body` properties are used except 
`padding`)
+ */
+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);
+
+    /* Create a dummy display to fool the lv_draw function.
+     * It will think it draws to real screen. */
+    lv_area_t mask;
+    mask.x1 = 0;
+    mask.x2 = dsc->header.w - 1;
+    mask.y1 = 0;
+    mask.y2 = dsc->header.h - 1;
+
+    lv_area_t coords;
+    coords.x1 = x;
+    coords.y1 = y;
+    coords.x2 = x + w - 1;
+    coords.y2 = y + h - 1;
+
+    lv_disp_t disp;
+    memset(&disp, 0, sizeof(lv_disp_t));
+
+    lv_disp_buf_t disp_buf;
+    lv_disp_buf_init(&disp_buf, (void *)dsc->data, NULL, dsc->header.w * 
dsc->header.h);
+    lv_area_copy(&disp_buf.area, &mask);
+
+    lv_disp_drv_init(&disp.driver);
+
+    disp.driver.buffer  = &disp_buf;
+    disp.driver.hor_res = dsc->header.w;
+    disp.driver.ver_res = dsc->header.h;
+
+#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 &&
+        style->body.main_color.full == ctransp.full &&
+        style->body.grad_color.full == ctransp.full)
+    {
+        disp.driver.antialiasing = 0;
+    }
+#endif
+
+    lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
+    lv_refr_set_disp_refreshing(&disp);
+
+    lv_draw_rect(&coords, &mask, style, LV_OPA_COVER);
+
+    lv_refr_set_disp_refreshing(refr_ori);
+}
+
+/**
+ * Draw a text on the canvas.
+ * @param canvas pointer to a canvas object
+ * @param x left coordinate of the text
+ * @param y top coordinate of the text
+ * @param max_w max width of the text. The text will be wrapped to fit into 
this size
+ * @param style style of the text (`text` properties are used)
+ * @param txt text to display
+ * @param align align of the text (`LV_LABEL_ALIGN_LEFT/RIGHT/CENTER`)
+ */
+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);
+
+    /* Create a dummy display to fool the lv_draw function.
+     * It will think it draws to real screen. */
+    lv_area_t mask;
+    mask.x1 = 0;
+    mask.x2 = dsc->header.w - 1;
+    mask.y1 = 0;
+    mask.y2 = dsc->header.h - 1;
+
+    lv_area_t coords;
+    coords.x1 = x;
+    coords.y1 = y;
+    coords.x2 = x + max_w - 1;
+    coords.y2 = dsc->header.h - 1;
+
+    lv_disp_t disp;
+    memset(&disp, 0, sizeof(lv_disp_t));
+
+    lv_disp_buf_t disp_buf;
+    lv_disp_buf_init(&disp_buf, (void *)dsc->data, NULL, dsc->header.w * 
dsc->header.h);
+    lv_area_copy(&disp_buf.area, &mask);
+
+    lv_disp_drv_init(&disp.driver);
+
+    disp.driver.buffer  = &disp_buf;
+    disp.driver.hor_res = dsc->header.w;
+    disp.driver.ver_res = dsc->header.h;
+
+    lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
+    lv_refr_set_disp_refreshing(&disp);
+
+    lv_txt_flag_t flag;
+    switch(align) {
+        case LV_LABEL_ALIGN_LEFT: flag = LV_TXT_FLAG_NONE; break;
+        case LV_LABEL_ALIGN_RIGHT: flag = LV_TXT_FLAG_RIGHT; break;
+        case LV_LABEL_ALIGN_CENTER: flag = LV_TXT_FLAG_CENTER; break;
+        default: flag = LV_TXT_FLAG_NONE; break;
+    }
+
+    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);
+}
+
+/**
+ * Draw an image on the canvas
+ * @param canvas pointer to a canvas object
+ * @param src image source. Can be a pointer an `lv_img_dsc_t` variable or a 
path an image.
+ * @param style style of the image (`image` properties are used)
+ */
+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);
+
+    /* Create a dummy display to fool the lv_draw function.
+     * It will think it draws to real screen. */
+    lv_area_t mask;
+    mask.x1 = 0;
+    mask.x2 = dsc->header.w - 1;
+    mask.y1 = 0;
+    mask.y2 = dsc->header.h - 1;
+
+    lv_img_header_t header;
+    lv_res_t res = lv_img_decoder_get_info(src, &header);
+    if(res != LV_RES_OK) {
+        LV_LOG_WARN("lv_canvas_draw_img: Couldn't get the image data.");
+        return;
+    }
+
+    lv_area_t coords;
+    coords.x1 = x;
+    coords.y1 = y;
+    coords.x2 = x + header.w - 1;
+    coords.y2 = y + header.h - 1;
+
+    lv_disp_t disp;
+    memset(&disp, 0, sizeof(lv_disp_t));
+
+    lv_disp_buf_t disp_buf;
+    lv_disp_buf_init(&disp_buf, (void *)dsc->data, NULL, dsc->header.w * 
dsc->header.h);
+    lv_area_copy(&disp_buf.area, &mask);
+
+    lv_disp_drv_init(&disp.driver);
+
+    disp.driver.buffer  = &disp_buf;
+    disp.driver.hor_res = dsc->header.w;
+    disp.driver.ver_res = dsc->header.h;
+
+    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_refr_set_disp_refreshing(refr_ori);
+}
+
+/**
+ * Draw a line on the canvas
+ * @param canvas pointer to a canvas object
+ * @param points point of the line
+ * @param point_cnt number of points
+ * @param style style of the line (`line` properties are used)
+ */
+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);
+
+    /* Create a dummy display to fool the lv_draw function.
+     * It will think it draws to real screen. */
+    lv_area_t mask;
+    mask.x1 = 0;
+    mask.x2 = dsc->header.w - 1;
+    mask.y1 = 0;
+    mask.y2 = dsc->header.h - 1;
+
+    lv_disp_t disp;
+    memset(&disp, 0, sizeof(lv_disp_t));
+
+    lv_disp_buf_t disp_buf;
+    lv_disp_buf_init(&disp_buf, (void *)dsc->data, NULL, dsc->header.w * 
dsc->header.h);
+    lv_area_copy(&disp_buf.area, &mask);
+
+    lv_disp_drv_init(&disp.driver);
+
+    disp.driver.buffer  = &disp_buf;
+    disp.driver.hor_res = dsc->header.w;
+    disp.driver.ver_res = dsc->header.h;
+
+#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 &&
+        style->body.main_color.full == ctransp.full &&
+        style->body.grad_color.full == ctransp.full)
+    {
+        disp.driver.antialiasing = 0;
+    }
+#endif
+
+    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);
+}
+
+/**
+ * Draw a polygon on the canvas
+ * @param canvas pointer to a canvas object
+ * @param points point of the polygon
+ * @param point_cnt number of points
+ * @param style style of the polygon (`body.main_color` and `body.opa` is used)
+ */
+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);
+
+    /* Create a dummy display to fool the lv_draw function.
+     * It will think it draws to real screen. */
+    lv_area_t mask;
+    mask.x1 = 0;
+    mask.x2 = dsc->header.w - 1;
+    mask.y1 = 0;
+    mask.y2 = dsc->header.h - 1;
+
+    lv_disp_t disp;
+    memset(&disp, 0, sizeof(lv_disp_t));
+
+    lv_disp_buf_t disp_buf;
+    lv_disp_buf_init(&disp_buf, (void *)dsc->data, NULL, dsc->header.w * 
dsc->header.h);
+    lv_area_copy(&disp_buf.area, &mask);
+
+    lv_disp_drv_init(&disp.driver);
+
+    disp.driver.buffer  = &disp_buf;
+    disp.driver.hor_res = dsc->header.w;
+    disp.driver.ver_res = dsc->header.h;
+
+#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 &&
+        style->body.main_color.full == ctransp.full &&
+        style->body.grad_color.full == ctransp.full)
+    {
+        disp.driver.antialiasing = 0;
+    }
+#endif
+
+    lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
+    lv_refr_set_disp_refreshing(&disp);
+
+    lv_draw_polygon(points, point_cnt, &mask, style, LV_OPA_COVER);
+
+    lv_refr_set_disp_refreshing(refr_ori);
+}
+
+/**
+ * Draw an arc on the canvas
+ * @param canvas pointer to a canvas object
+ * @param x origo x  of the arc
+ * @param y origo y of the arc
+ * @param r radius of the arc
+ * @param start_angle start angle in degrees
+ * @param end_angle end angle in degrees
+ * @param style style of the polygon (`body.main_color` and `body.opa` is used)
+ */
+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);
+
+    /* Create a dummy display to fool the lv_draw function.
+     * It will think it draws to real screen. */
+    lv_area_t mask;
+    mask.x1 = 0;
+    mask.x2 = dsc->header.w - 1;
+    mask.y1 = 0;
+    mask.y2 = dsc->header.h - 1;
+
+    lv_disp_t disp;
+    memset(&disp, 0, sizeof(lv_disp_t));
+
+    lv_disp_buf_t disp_buf;
+    lv_disp_buf_init(&disp_buf, (void *)dsc->data, NULL, dsc->header.w * 
dsc->header.h);
+    lv_area_copy(&disp_buf.area, &mask);
+
+    lv_disp_drv_init(&disp.driver);
+
+    disp.driver.buffer  = &disp_buf;
+    disp.driver.hor_res = dsc->header.w;
+    disp.driver.ver_res = dsc->header.h;
+
+#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 &&
+        style->body.main_color.full == ctransp.full &&
+        style->body.grad_color.full == ctransp.full)
+    {
+        disp.driver.antialiasing = 0;
+    }
+#endif
+
+    lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
+    lv_refr_set_disp_refreshing(&disp);
+
+    lv_draw_arc(x, y, r, &mask, start_angle, end_angle, style, LV_OPA_COVER);
+
+    lv_refr_set_disp_refreshing(refr_ori);
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Signal function of the canvas
+ * @param canvas pointer to a canvas 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_canvas_signal(lv_obj_t * canvas, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res;
+
+    /* 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')*/
+    }
+
+    return res;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_canvas.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_canvas.h
new file mode 100755
index 0000000..9f9cf03
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_canvas.h
@@ -0,0 +1,265 @@
+/**
+ * @file lv_canvas.h
+ *
+ */
+
+#ifndef LV_CANVAS_H
+#define LV_CANVAS_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_CANVAS != 0
+
+#include "../lv_core/lv_obj.h"
+#include "../lv_objx/lv_img.h"
+#include "../lv_draw/lv_draw_img.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+/*Data of canvas*/
+typedef struct
+{
+    lv_img_ext_t img; /*Ext. of ancestor*/
+    /*New data for this type */
+    lv_img_dsc_t dsc;
+} lv_canvas_ext_t;
+
+/*Styles*/
+enum {
+    LV_CANVAS_STYLE_MAIN,
+};
+typedef uint8_t lv_canvas_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a canvas object
+ * @param par pointer to an object, it will be the parent of the new canvas
+ * @param copy pointer to a canvas object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created canvas
+ */
+lv_obj_t * lv_canvas_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a buffer for the canvas.
+ * @param buf a buffer where the content of the canvas will be.
+ * The required size is (lv_img_color_format_get_px_size(cf) * w * h) / 8)
+ * It can be allocated with `lv_mem_alloc()` or
+ * it can be statically allocated array (e.g. static lv_color_t buf[100*50]) or
+ * it can be an address in RAM or external SRAM
+ * @param canvas pointer to a canvas object
+ * @param w width of the canvas
+ * @param h height of the canvas
+ * @param cf color format. `LV_IMG_CF_...`
+ */
+void lv_canvas_set_buffer(lv_obj_t * canvas, void * buf, lv_coord_t w, 
lv_coord_t h, lv_img_cf_t cf);
+
+/**
+ * Set the color of a pixel on the canvas
+ * @param canvas
+ * @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_canvas_set_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, 
lv_color_t c);
+
+/**
+ * Set the palette color of a canvas with index format. Valid only for 
`LV_IMG_CF_INDEXED1/2/4/8`
+ * @param canvas pointer to canvas object
+ * @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_canvas_set_palette(lv_obj_t * canvas, uint8_t id, lv_color_t c);
+
+/**
+ * Set a style of a canvas.
+ * @param canvas pointer to canvas object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_canvas_set_style(lv_obj_t * canvas, lv_canvas_style_t type, const 
lv_style_t * style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the color of a pixel on the canvas
+ * @param canvas
+ * @param x x coordinate of the point to set
+ * @param y x coordinate of the point to set
+ * @return color of the point
+ */
+lv_color_t lv_canvas_get_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y);
+
+/**
+ * Get the image of the canvas as a pointer to an `lv_img_dsc_t` variable.
+ * @param canvas pointer to a canvas object
+ * @return pointer to the image descriptor.
+ */
+lv_img_dsc_t * lv_canvas_get_img(lv_obj_t * canvas);
+
+/**
+ * Get style of a canvas.
+ * @param canvas pointer to canvas object
+ * @param type which style should be get
+ * @return style pointer to the style
+ */
+const lv_style_t * lv_canvas_get_style(const lv_obj_t * canvas, 
lv_canvas_style_t type);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Copy a buffer to the canvas
+ * @param canvas pointer to a canvas object
+ * @param to_copy buffer to copy. The color format has to match with the 
canvas's buffer color
+ * format
+ * @param x left side of the destination position
+ * @param y top side of the destination position
+ * @param w width of the buffer to copy
+ * @param h height of the buffer to copy
+ */
+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);
+
+/**
+ * Rotate 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 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
+ */
+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);
+
+/**
+ * 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);
+
+/**
+ * Draw a rectangle on the canvas
+ * @param canvas pointer to a canvas object
+ * @param x left coordinate of the rectangle
+ * @param y top coordinate of the rectangle
+ * @param w width of the rectangle
+ * @param h height of the rectangle
+ * @param style style of the rectangle (`body` properties are used except 
`padding`)
+ */
+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);
+
+/**
+ * Draw a text on the canvas.
+ * @param canvas pointer to a canvas object
+ * @param x left coordinate of the text
+ * @param y top coordinate of the text
+ * @param max_w max width of the text. The text will be wrapped to fit into 
this size
+ * @param style style of the text (`text` properties are used)
+ * @param txt text to display
+ * @param align align of the text (`LV_LABEL_ALIGN_LEFT/RIGHT/CENTER`)
+ */
+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);
+
+/**
+ * Draw an image on the canvas
+ * @param canvas pointer to a canvas object
+ * @param src image source. Can be a pointer an `lv_img_dsc_t` variable or a 
path an image.
+ * @param style style of the image (`image` properties are used)
+ */
+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);
+
+/**
+ * Draw a line on the canvas
+ * @param canvas pointer to a canvas object
+ * @param points point of the line
+ * @param point_cnt number of points
+ * @param style style of the line (`line` properties are used)
+ */
+void lv_canvas_draw_line(lv_obj_t * canvas, const lv_point_t * points, 
uint32_t point_cnt, const lv_style_t * style);
+
+/**
+ * Draw a polygon on the canvas
+ * @param canvas pointer to a canvas object
+ * @param points point of the polygon
+ * @param point_cnt number of points
+ * @param style style of the polygon (`body.main_color` and `body.opa` is used)
+ */
+void lv_canvas_draw_polygon(lv_obj_t * canvas, const lv_point_t * points, 
uint32_t point_cnt, const lv_style_t * style);
+
+/**
+ * Draw an arc on the canvas
+ * @param canvas pointer to a canvas object
+ * @param x origo x  of the arc
+ * @param y origo y of the arc
+ * @param r radius of the arc
+ * @param start_angle start angle in degrees
+ * @param end_angle end angle in degrees
+ * @param style style of the polygon (`body.main_color` and `body.opa` is used)
+ */
+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);
+
+/**********************
+ *      MACROS
+ **********************/
+#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) 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_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*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_CANVAS_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_cb.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_cb.c
new file mode 100755
index 0000000..c54adf4
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_cb.c
@@ -0,0 +1,338 @@
+/**
+ * @file lv_cb.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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
+ **********************/
+
+/**********************
+ *  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_res_t lv_cb_signal(lv_obj_t * cb, lv_signal_t sign, void * param);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_design_cb_t ancestor_bg_design;
+static lv_design_cb_t ancestor_bullet_design;
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a check box objects
+ * @param par pointer to an object, it will be the parent of the new check box
+ * @param copy pointer to a check box object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created check box
+ */
+lv_obj_t * lv_cb_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+
+    LV_LOG_TRACE("check box create started");
+
+    /*Create the ancestor basic object*/
+    lv_obj_t * new_cb = lv_btn_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    ext->bullet = NULL;
+    ext->label  = NULL;
+
+    lv_obj_set_signal_cb(new_cb, lv_cb_signal);
+    lv_obj_set_design_cb(new_cb, lv_cb_design);
+
+    /*Init the new checkbox object*/
+    if(copy == NULL) {
+        ext->bullet = lv_btn_create(new_cb, NULL);
+        if(ancestor_bullet_design == NULL) ancestor_bullet_design = 
lv_obj_get_design_cb(ext->bullet);
+        lv_obj_set_click(ext->bullet, false);
+
+        ext->label = lv_label_create(new_cb, NULL);
+
+        lv_cb_set_text(new_cb, "Check box");
+        lv_btn_set_layout(new_cb, LV_LAYOUT_ROW_M);
+        lv_btn_set_fit(new_cb, LV_FIT_TIGHT);
+        lv_btn_set_toggle(new_cb, true);
+        lv_obj_set_protect(new_cb, LV_PROTECT_PRESS_LOST);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_cb_set_style(new_cb, LV_CB_STYLE_BG, th->style.cb.bg);
+            lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_REL, th->style.cb.box.rel);
+            lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_PR, th->style.cb.box.pr);
+            lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_TGL_REL, 
th->style.cb.box.tgl_rel);
+            lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_TGL_PR, 
th->style.cb.box.tgl_pr);
+            lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_INA, th->style.cb.box.ina);
+        } else {
+            lv_cb_set_style(new_cb, LV_CB_STYLE_BG, &lv_style_transp);
+            lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_REL, &lv_style_pretty);
+        }
+    } else {
+        lv_cb_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->bullet            = lv_btn_create(new_cb, copy_ext->bullet);
+        ext->label             = lv_label_create(new_cb, copy_ext->label);
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_cb);
+    }
+
+    lv_obj_set_design_cb(ext->bullet, lv_bullet_design);
+
+    LV_LOG_INFO("check box created");
+
+    return new_cb;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the text of a check box. `txt` will be copied and may be deallocated
+ * after this function returns.
+ * @param cb pointer to a check box
+ * @param txt the text of the check box. NULL to refresh with the current text.
+ */
+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);
+}
+
+/**
+ * Set the text of a check box. `txt` must not be deallocated during the life
+ * of this checkbox.
+ * @param cb pointer to a check box
+ * @param txt the text of the check box. NULL to refresh with the current text.
+ */
+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);
+}
+
+/**
+ * Set a style of a check box
+ * @param cb pointer to check box object
+ * @param type which style should be set
+ * @param style pointer to a style
+ *  */
+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) {
+        case LV_CB_STYLE_BG:
+            lv_btn_set_style(cb, LV_BTN_STYLE_REL, style);
+            lv_btn_set_style(cb, LV_BTN_STYLE_PR, style);
+            lv_btn_set_style(cb, LV_BTN_STYLE_TGL_REL, style);
+            lv_btn_set_style(cb, LV_BTN_STYLE_TGL_PR, style);
+            lv_btn_set_style(cb, LV_BTN_STYLE_INA, style);
+            break;
+        case LV_CB_STYLE_BOX_REL: lv_btn_set_style(ext->bullet, 
LV_BTN_STYLE_REL, style); break;
+        case LV_CB_STYLE_BOX_PR: lv_btn_set_style(ext->bullet, 
LV_BTN_STYLE_PR, style); break;
+        case LV_CB_STYLE_BOX_TGL_REL: lv_btn_set_style(ext->bullet, 
LV_BTN_STYLE_TGL_REL, style); break;
+        case LV_CB_STYLE_BOX_TGL_PR: lv_btn_set_style(ext->bullet, 
LV_BTN_STYLE_TGL_PR, style); break;
+        case LV_CB_STYLE_BOX_INA: lv_btn_set_style(ext->bullet, 
LV_BTN_STYLE_INA, style); break;
+    }
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the text of a check box
+ * @param cb pointer to check box object
+ * @return pointer to the text of the check box
+ */
+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);
+}
+
+/**
+ * Get a style of a button
+ * @param cb pointer to check box object
+ * @param type which style should be get
+ * @return style pointer to the style
+ *  */
+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;
+        case LV_CB_STYLE_BOX_TGL_PR: style = lv_btn_get_style(ext->bullet, 
LV_BTN_STYLE_TGL_PR); break;
+        case LV_CB_STYLE_BOX_INA: style = lv_btn_get_style(ext->bullet, 
LV_BTN_STYLE_INA); break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_cb_design(lv_obj_t * cb, const lv_area_t * mask, 
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);
+    } 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);
+
+        /*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);
+
+    } else {
+        result = ancestor_bg_design(cb, mask, mode);
+    }
+
+    return result;
+}
+
+/**
+ * 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 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'
+ */
+static bool lv_bullet_design(lv_obj_t * bullet, const lv_area_t * mask, 
lv_design_mode_t mode)
+{
+    if(mode == LV_DESIGN_COVER_CHK) {
+        return ancestor_bullet_design(bullet, mask, mode);
+    } else if(mode == LV_DESIGN_DRAW_MAIN) {
+#if LV_USE_GROUP
+        /* If the check box is the active in a group and
+         * the background is not visible (transparent)
+         * then activate the style of the bullet*/
+        const lv_style_t * style_ori  = lv_obj_get_style(bullet);
+        lv_obj_t * bg                 = lv_obj_get_parent(bullet);
+        const lv_style_t * style_page = lv_obj_get_style(bg);
+        lv_group_t * g                = lv_obj_get_group(bg);
+        if(style_page->body.opa == LV_OPA_TRANSP) { /*Is the Background 
visible?*/
+            if(lv_group_get_focused(g) == bg) {
+                lv_style_t * style_mod;
+                style_mod       = lv_group_mod_style(g, style_ori);
+                bullet->style_p = style_mod; /*Temporally change the style to 
the activated */
+            }
+        }
+#endif
+        ancestor_bullet_design(bullet, mask, 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);
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the check box
+ * @param cb pointer to a check box 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_cb_signal(lv_obj_t * cb, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* 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);
+
+    if(sign == LV_SIGNAL_STYLE_CHG) {
+        const lv_style_t * label_style = lv_label_get_style(ext->label, 
LV_LABEL_STYLE_MAIN);
+        lv_obj_set_size(ext->bullet, 
lv_font_get_line_height(label_style->text.font),
+                        lv_font_get_line_height(label_style->text.font));
+        lv_btn_set_state(ext->bullet, lv_btn_get_state(cb));
+    } else if(sign == LV_SIGNAL_PRESSED || sign == LV_SIGNAL_RELEASED || sign 
== LV_SIGNAL_PRESS_LOST) {
+        lv_btn_set_state(ext->bullet, lv_btn_get_state(cb));
+    } else if(sign == LV_SIGNAL_CONTROL) {
+        char c = *((char *)param);
+        if(c == LV_KEY_RIGHT || c == LV_KEY_DOWN || c == LV_KEY_LEFT || c == 
LV_KEY_UP) {
+            /*Follow the backgrounds state with the bullet*/
+            lv_btn_set_state(ext->bullet, lv_btn_get_state(cb));
+        }
+    }
+
+    return res;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_cb.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_cb.h
new file mode 100755
index 0000000..a6b1e74
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_cb.h
@@ -0,0 +1,173 @@
+/**
+ * @file lv_cb.h
+ *
+ */
+
+#ifndef LV_CB_H
+#define LV_CB_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_CB != 0
+
+/*Testing of dependencies*/
+#if LV_USE_BTN == 0
+#error "lv_cb: lv_btn is required. Enable it in lv_conf.h (LV_USE_BTN  1) "
+#endif
+
+#if LV_USE_LABEL == 0
+#error "lv_cb: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL  1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "lv_btn.h"
+#include "lv_label.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/*Data of check box*/
+typedef struct
+{
+    lv_btn_ext_t bg_btn; /*Ext. of ancestor*/
+    /*New data for this type */
+    lv_obj_t * bullet; /*Pointer to button*/
+    lv_obj_t * label;  /*Pointer to label*/
+} lv_cb_ext_t;
+
+/** Checkbox styles. */
+enum {
+    LV_CB_STYLE_BG, /**< Style of object background. */
+    LV_CB_STYLE_BOX_REL, /**< Style of box (released). */
+    LV_CB_STYLE_BOX_PR, /**< Style of box (pressed). */
+    LV_CB_STYLE_BOX_TGL_REL, /**< Style of box (released but checked). */
+    LV_CB_STYLE_BOX_TGL_PR, /**< Style of box (pressed and checked). */
+    LV_CB_STYLE_BOX_INA, /**< Style of disabled box */
+};
+typedef uint8_t lv_cb_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a check box objects
+ * @param par pointer to an object, it will be the parent of the new check box
+ * @param copy pointer to a check box object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created check box
+ */
+lv_obj_t * lv_cb_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the text of a check box. `txt` will be copied and may be deallocated
+ * after this function returns.
+ * @param cb pointer to a check box
+ * @param txt the text of the check box. NULL to refresh with the current text.
+ */
+void lv_cb_set_text(lv_obj_t * cb, const char * txt);
+
+/**
+ * Set the text of a check box. `txt` must not be deallocated during the life
+ * of this checkbox.
+ * @param cb pointer to a check box
+ * @param txt the text of the check box. NULL to refresh with the current text.
+ */
+void lv_cb_set_static_text(lv_obj_t * cb, const char * txt);
+
+/**
+ * Set the state of the check box
+ * @param cb pointer to a check box object
+ * @param checked true: make the check box checked; false: make it unchecked
+ */
+static inline void lv_cb_set_checked(lv_obj_t * cb, bool checked)
+{
+    lv_btn_set_state(cb, checked ? LV_BTN_STATE_TGL_REL : LV_BTN_STATE_REL);
+}
+
+/**
+ * Make the check box inactive (disabled)
+ * @param cb pointer to a check box object
+ */
+static inline void lv_cb_set_inactive(lv_obj_t * cb)
+{
+    lv_btn_set_state(cb, LV_BTN_STATE_INA);
+}
+
+/**
+ * Set a style of a check box
+ * @param cb pointer to check box object
+ * @param type which style should be set
+ * @param style pointer to a style
+ *  */
+void lv_cb_set_style(lv_obj_t * cb, lv_cb_style_t type, const lv_style_t * 
style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the text of a check box
+ * @param cb pointer to check box object
+ * @return pointer to the text of the check box
+ */
+const char * lv_cb_get_text(const lv_obj_t * cb);
+
+/**
+ * Get the current state of the check box
+ * @param cb pointer to a check box object
+ * @return true: checked; false: not checked
+ */
+static inline bool lv_cb_is_checked(const lv_obj_t * cb)
+{
+    return lv_btn_get_state(cb) == LV_BTN_STATE_REL ? false : true;
+}
+
+/**
+ * Get whether the check box is inactive or not.
+ * @param cb pointer to a check box object
+ * @return true: inactive; false: not inactive
+ */
+static inline bool lv_cb_is_inactive(const lv_obj_t * cb)
+{
+    return lv_btn_get_state(cb) == LV_BTN_STATE_INA ? true :false;
+}
+
+/**
+ * Get a style of a button
+ * @param cb pointer to check box object
+ * @param type which style should be get
+ * @return style pointer to the style
+ *  */
+const lv_style_t * lv_cb_get_style(const lv_obj_t * cb, lv_cb_style_t type);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_CB*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_CB_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_chart.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_chart.c
new file mode 100755
index 0000000..5da3b84
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_chart.c
@@ -0,0 +1,1557 @@
+/**
+ * @file lv_chart.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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_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
+#define LV_CHART_VDIV_DEF 5
+#define LV_CHART_PNUM_DEF 10
+#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_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);
+static void lv_chart_draw_points(lv_obj_t * chart, const lv_area_t * mask);
+static void lv_chart_draw_cols(lv_obj_t * chart, const lv_area_t * mask);
+static void lv_chart_draw_vertical_lines(lv_obj_t * chart, const lv_area_t * 
mask);
+static void lv_chart_draw_areas(lv_obj_t * chart, const lv_area_t * mask);
+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
+ **********************/
+static lv_design_cb_t ancestor_design_f;
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a chart background objects
+ * @param par pointer to an object, it will be the parent of the new chart 
background
+ * @param copy pointer to a chart background object, if not NULL then the new 
object will be copied
+ * from it
+ * @return pointer to the created chart background
+ */
+lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("chart create started");
+
+    /*Create the ancestor basic object*/
+    lv_obj_t * new_chart = lv_obj_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    lv_ll_init(&ext->series_ll, sizeof(lv_chart_series_t));
+
+    ext->series.num            = 0;
+    ext->ymin                  = LV_CHART_YMIN_DEF;
+    ext->ymax                  = LV_CHART_YMAX_DEF;
+    ext->hdiv_cnt              = LV_CHART_HDIV_DEF;
+    ext->vdiv_cnt              = LV_CHART_VDIV_DEF;
+    ext->point_cnt             = LV_CHART_PNUM_DEF;
+    ext->type                  = LV_CHART_TYPE_LINE;
+    ext->update_mode           = LV_CHART_UPDATE_MODE_SHIFT;
+    ext->series.opa            = LV_OPA_COVER;
+    ext->series.dark           = LV_OPA_50;
+    ext->series.width          = 2;
+    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);
+
+    lv_obj_set_signal_cb(new_chart, lv_chart_signal);
+    lv_obj_set_design_cb(new_chart, lv_chart_design);
+
+    /*Init the new chart background object*/
+    if(copy == NULL) {
+        lv_obj_set_size(new_chart, LV_DPI * 3, LV_DPI * 2);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_chart_set_style(new_chart, LV_CHART_STYLE_MAIN, 
th->style.chart);
+        } else {
+            lv_chart_set_style(new_chart, LV_CHART_STYLE_MAIN, 
&lv_style_pretty);
+        }
+
+    } else {
+        lv_chart_ext_t * ext_copy = lv_obj_get_ext_attr(copy);
+
+        ext->type       = ext_copy->type;
+        ext->ymin       = ext_copy->ymin;
+        ext->ymax       = ext_copy->ymax;
+        ext->hdiv_cnt   = ext_copy->hdiv_cnt;
+        ext->vdiv_cnt   = ext_copy->vdiv_cnt;
+        ext->point_cnt  = ext_copy->point_cnt;
+        ext->series.opa = ext_copy->series.opa;
+        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);
+    }
+
+    LV_LOG_INFO("chart created");
+
+    return new_chart;
+}
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Allocate and add a data series to the chart
+ * @param chart pointer to a chart object
+ * @param color color of the data series
+ * @return pointer to the allocated data series
+ */
+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_ASSERT_MEM(ser);
+    if(ser == NULL) return NULL;
+
+    lv_coord_t def = LV_CHART_POINT_DEF;
+
+    if(ser == NULL) return NULL;
+
+    ser->color  = color;
+    ser->points = lv_mem_alloc(sizeof(lv_coord_t) * ext->point_cnt);
+    LV_ASSERT_MEM(ser->points);
+    if(ser->points == NULL) {
+        lv_ll_rem(&ext->series_ll, ser);
+        lv_mem_free(ser);
+        return NULL;
+    }
+
+    ser->start_point = 0;
+
+    uint16_t i;
+    lv_coord_t * p_tmp = ser->points;
+    for(i = 0; i < ext->point_cnt; i++) {
+        *p_tmp = def;
+        p_tmp++;
+    }
+
+    ext->series.num++;
+
+    return ser;
+}
+
+/**
+ * Clear the point of a serie
+ * @param chart pointer to a chart object
+ * @param serie pointer to the chart's serie to clear
+ */
+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;
+
+    uint32_t i;
+    for(i = 0; i < ext->point_cnt; i++) {
+        serie->points[i] = LV_CHART_POINT_DEF;
+    }
+
+    serie->start_point = 0;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the number of horizontal and vertical division lines
+ * @param chart pointer to a graph background object
+ * @param hdiv number of horizontal division lines
+ * @param vdiv number of vertical division lines
+ */
+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;
+
+    ext->hdiv_cnt = hdiv;
+    ext->vdiv_cnt = vdiv;
+
+    lv_obj_invalidate(chart);
+}
+
+/**
+ * Set the minimal and maximal y values
+ * @param chart pointer to a graph background object
+ * @param ymin y minimum value
+ * @param ymax y maximum value
+ */
+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;
+
+    ext->ymin = ymin;
+    ext->ymax = ymax;
+
+    lv_chart_refresh(chart);
+}
+
+/**
+ * Set a new type for a chart
+ * @param chart pointer to a chart object
+ * @param type new type of the chart (from 'lv_chart_type_t' enum)
+ */
+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;
+
+    ext->type = type;
+
+    lv_chart_refresh(chart);
+}
+
+/**
+ * Set the number of points on a data line on a chart
+ * @param chart pointer r to chart object
+ * @param point_cnt new number of points on the data lines
+ */
+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;
+
+    lv_chart_series_t * ser;
+    uint16_t point_cnt_old = ext->point_cnt;
+    uint16_t i;
+    lv_coord_t def = LV_CHART_POINT_DEF;
+
+    if(point_cnt < 1) point_cnt = 1;
+
+    LV_LL_READ_BACK(ext->series_ll, ser)
+    {
+        if(ser->start_point != 0) {
+            lv_coord_t * new_points = lv_mem_alloc(sizeof(lv_coord_t) * 
point_cnt);
+            LV_ASSERT_MEM(new_points);
+            if(new_points == NULL) return;
+
+            if(point_cnt >= point_cnt_old) {
+                for(i = 0; i < point_cnt_old; i++) {
+                    new_points[i] =
+                        ser->points[(i + ser->start_point) % point_cnt_old]; 
/*Copy old contents to new array*/
+                }
+                for(i = point_cnt_old; i < point_cnt; i++) {
+                    new_points[i] = def; /*Fill up the rest with default 
value*/
+                }
+            } else {
+                for(i = 0; i < point_cnt; i++) {
+                    new_points[i] =
+                        ser->points[(i + ser->start_point) % point_cnt_old]; 
/*Copy old contents to new array*/
+                }
+            }
+
+            /*Switch over pointer from old to new*/
+            lv_mem_free(ser->points);
+            ser->points = new_points;
+        } else {
+            ser->points = lv_mem_realloc(ser->points, sizeof(lv_coord_t) * 
point_cnt);
+            LV_ASSERT_MEM(ser->points);
+            if(ser->points == NULL) return;
+            /*Initialize the new points*/
+            if(point_cnt > point_cnt_old) {
+                for(i = point_cnt_old - 1; i < point_cnt; i++) {
+                    ser->points[i] = def;
+                }
+            }
+        }
+
+        ser->start_point = 0;
+    }
+
+    ext->point_cnt = point_cnt;
+
+    lv_chart_refresh(chart);
+}
+
+/**
+ * Set the opacity of the data series
+ * @param chart pointer to a chart object
+ * @param opa opacity of the data series
+ */
+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;
+
+    ext->series.opa = opa;
+    lv_obj_invalidate(chart);
+}
+
+/**
+ * Set the line width or point radius of the data series
+ * @param chart pointer to a chart object
+ * @param width the new width
+ */
+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;
+
+    ext->series.width = width;
+    lv_obj_invalidate(chart);
+}
+/**
+ * Set the dark effect on the bottom of the points or columns
+ * @param chart pointer to a chart object
+ * @param dark_eff dark effect level (LV_OPA_TRANSP to turn off)
+ */
+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;
+
+    ext->series.dark = dark_eff;
+    lv_obj_invalidate(chart);
+}
+
+/**
+ * Initialize all data points with a value
+ * @param chart pointer to chart object
+ * @param ser pointer to a data series on 'chart'
+ * @param y the new value  for all points
+ */
+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++) {
+        ser->points[i] = y;
+    }
+    ser->start_point = 0;
+    lv_chart_refresh(chart);
+}
+
+/**
+ * Set the value of points from an array
+ * @param chart pointer to chart object
+ * @param ser pointer to a data series on 'chart'
+ * @param y_array array of 'lv_coord_t' points (with 'points count' elements )
+ */
+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;
+    lv_chart_refresh(chart);
+}
+
+/**
+ * Shift all data left and set the rightmost data on a data line
+ * @param chart pointer to chart object
+ * @param ser pointer to a data series on 'chart'
+ * @param y the new value of the rightmost data
+ */
+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] =
+            y; /*This was the place of the former left most value, after 
shifting it is the rightmost*/
+        ser->start_point = (ser->start_point + 1) % ext->point_cnt;
+        lv_chart_refresh(chart);
+    } else if(ext->update_mode == LV_CHART_UPDATE_MODE_CIRCULAR) {
+        ser->points[ser->start_point] = y;
+
+        if(ext->type & LV_CHART_TYPE_LINE) lv_chart_inv_lines(chart, 
ser->start_point);
+        if(ext->type & LV_CHART_TYPE_COLUMN) lv_chart_inv_cols(chart, 
ser->start_point);
+        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);
+
+        ser->start_point = (ser->start_point + 1) % ext->point_cnt; /*update 
the x for next incoming y*/
+    }
+}
+
+/**
+ * Set update mode of the chart object.
+ * @param chart pointer to a chart object
+ * @param update mode
+ */
+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;
+
+    ext->update_mode = update_mode;
+    lv_obj_invalidate(chart);
+}
+
+/**
+ * Set the length of the tick marks on the x 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_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;
+}
+
+/**
+ * Set the length of the tick marks on the 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_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
+ * @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_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;
+    ext->x_axis.options        = options;
+}
+
+/**
+ * Set the 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_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
+ * @param margin    value of the margin [px]
+ */
+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);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the type of a chart
+ * @param chart pointer to chart object
+ * @return type of the chart (from 'lv_chart_t' enum)
+ */
+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;
+}
+
+/**
+ * Get the data point number per data line on 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)
+{
+    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
+    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+    return ext->point_cnt;
+}
+
+/**
+ * Get the opacity of the data series
+ * @param chart pointer to chart object
+ * @return the opacity of the data series
+ */
+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;
+}
+
+/**
+ * Get the data series width
+ * @param chart pointer to chart object
+ * @return the width the data series (lines or points)
+ */
+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;
+}
+
+/**
+ * Get the dark effect level on the bottom of the points or columns
+ * @param chart pointer to chart object
+ * @return dark effect level (LV_OPA_TRANSP to turn off)
+ */
+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;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Refresh a chart if its data line has changed
+ * @param chart pointer to chart object
+ */
+void lv_chart_refresh(lv_obj_t * chart)
+{
+    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
+    lv_obj_invalidate(chart);
+}
+
+/**
+ * Get the margin around the chart, used for axes value and labels
+ * @param chart pointer to an chart object
+ * @param return value of the margin
+ */
+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;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_chart_design(lv_obj_t * chart, const lv_area_t * mask, 
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);
+    } 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_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+
+        lv_chart_draw_div(chart, mask);
+
+        /* 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);
+
+        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);
+        }
+
+        lv_chart_draw_axes(chart, mask);
+    }
+    return true;
+}
+
+/**
+ * Signal function of the chart background
+ * @param chart pointer to a chart background object
+ * @param sign a signal type from lv_signal_t enum
+ * @param param pointer to a signal specific variable
+ */
+static lv_res_t lv_chart_signal(lv_obj_t * chart, lv_signal_t sign, void * 
param)
+{
+    /* 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;
+        LV_LL_READ(ext->series_ll, datal)
+        {
+            lv_mem_free(*datal);
+        }
+        lv_ll_clear(&ext->series_ll);
+    } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
+        /*Provide extra px draw area around the chart*/
+        chart->ext_draw_pad = ext->margin;
+    }
+
+    return res;
+}
+
+/**
+ * Draw the division lines on chart background
+ * @param chart pointer to chart object
+ * @param mask mask, inherited from the design function
+ */
+static void lv_chart_draw_div(lv_obj_t * chart, const lv_area_t * mask)
+{
+    lv_chart_ext_t * ext     = lv_obj_get_ext_attr(chart);
+    const lv_style_t * style = lv_obj_get_style(chart);
+    lv_opa_t opa_scale       = lv_obj_get_opa_scale(chart);
+
+    uint8_t div_i;
+    uint8_t div_i_end;
+    uint8_t div_i_start;
+    lv_point_t p1;
+    lv_point_t p2;
+    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;
+
+    if(ext->hdiv_cnt != 0) {
+        /*Draw side lines if no border*/
+        if(style->body.border.width != 0) {
+            div_i_start = 1;
+            div_i_end   = ext->hdiv_cnt;
+        } else {
+            div_i_start = 0;
+            div_i_end   = ext->hdiv_cnt + 1;
+        }
+
+        p1.x = 0 + x_ofs;
+        p2.x = w + x_ofs;
+        for(div_i = div_i_start; div_i <= div_i_end; div_i++) {
+            p1.y = (int32_t)((int32_t)(h - style->line.width) * div_i) / 
(ext->hdiv_cnt + 1);
+            p1.y += y_ofs;
+            p2.y = p1.y;
+            lv_draw_line(&p1, &p2, mask, style, opa_scale);
+        }
+    }
+
+    if(ext->vdiv_cnt != 0) {
+        /*Draw side lines if no border*/
+        if(style->body.border.width != 0) {
+            div_i_start = 1;
+            div_i_end   = ext->vdiv_cnt;
+        } else {
+            div_i_start = 0;
+            div_i_end   = ext->vdiv_cnt + 1;
+        }
+
+        p1.y = 0 + y_ofs;
+        p2.y = h + y_ofs;
+        for(div_i = div_i_start; div_i <= div_i_end; div_i++) {
+            p1.x = (int32_t)((int32_t)(w - style->line.width) * div_i) / 
(ext->vdiv_cnt + 1);
+            p1.x += x_ofs;
+            p2.x = p1.x;
+            lv_draw_line(&p1, &p2, mask, style, opa_scale);
+        }
+    }
+}
+
+/**
+ * Draw the data lines as lines on a chart
+ * @param obj pointer to chart object
+ */
+static void lv_chart_draw_lines(lv_obj_t * chart, const lv_area_t * mask)
+{
+    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+
+    uint16_t i;
+    lv_point_t p1;
+    lv_point_t p2;
+    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;
+    int32_t y_tmp;
+    lv_coord_t p_prev;
+    lv_coord_t p_act;
+    lv_chart_series_t * ser;
+    lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
+    lv_style_t style;
+    lv_style_copy(&style, &lv_style_plain);
+    style.line.opa   = ext->series.opa;
+    style.line.width = ext->series.width;
+
+    /*Go through all data lines*/
+    LV_LL_READ_BACK(ext->series_ll, ser)
+    {
+        style.line.color = ser->color;
+
+        lv_coord_t start_point = ext->update_mode == 
LV_CHART_UPDATE_MODE_SHIFT ? ser->start_point : 0;
+
+        p1.x = 0 + x_ofs;
+        p2.x = 0 + x_ofs;
+
+        p_prev = start_point;
+        y_tmp  = (int32_t)((int32_t)ser->points[p_prev] - ext->ymin) * h;
+        y_tmp  = y_tmp / (ext->ymax - ext->ymin);
+        p2.y   = h - y_tmp + y_ofs;
+
+        for(i = 1; i < ext->point_cnt; i++) {
+            p1.x = p2.x;
+            p1.y = p2.y;
+
+            p2.x = ((w * i) / (ext->point_cnt - 1)) + x_ofs;
+
+            p_act = (start_point + i) % ext->point_cnt;
+
+            y_tmp = (int32_t)((int32_t)ser->points[p_act] - ext->ymin) * h;
+            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_draw_line(&p1, &p2, mask, &style, opa_scale);
+
+            p_prev = p_act;
+        }
+    }
+}
+
+/**
+ * Draw the data lines as points on a chart
+ * @param chart pointer to chart object
+ * @param mask mask, inherited from the design function
+ */
+static void lv_chart_draw_points(lv_obj_t * chart, const lv_area_t * mask)
+{
+    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+
+    uint16_t i;
+    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;
+    int32_t y_tmp;
+    lv_coord_t p_act;
+    lv_chart_series_t * ser;
+    uint8_t series_cnt = 0;
+    lv_style_t style_point;
+    lv_style_copy(&style_point, &lv_style_plain);
+
+    style_point.body.border.width = 0;
+    style_point.body.radius       = LV_RADIUS_CIRCLE;
+    style_point.body.opa          = ext->series.opa;
+    style_point.body.radius       = ext->series.width;
+
+    /*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_point.body.main_color = ser->color;
+        style_point.body.grad_color = lv_color_mix(LV_COLOR_BLACK, ser->color, 
ext->series.dark);
+
+        for(i = 0; i < ext->point_cnt; i++) {
+            cir_a.x1 = ((w * i) / (ext->point_cnt - 1)) + x_ofs;
+            cir_a.x2 = cir_a.x1 + style_point.body.radius;
+            cir_a.x1 -= style_point.body.radius;
+
+            p_act = (start_point + i) % ext->point_cnt;
+            y_tmp = (int32_t)((int32_t)ser->points[p_act] - ext->ymin) * h;
+            y_tmp = y_tmp / (ext->ymax - ext->ymin);
+
+            cir_a.y1 = h - y_tmp + y_ofs;
+            cir_a.y2 = cir_a.y1 + style_point.body.radius;
+            cir_a.y1 -= style_point.body.radius;
+
+            if(ser->points[p_act] != LV_CHART_POINT_DEF)
+                lv_draw_rect(&cir_a, mask, &style_point, 
lv_obj_get_opa_scale(chart));
+        }
+        series_cnt++;
+    }
+}
+
+/**
+ * Draw the data lines as columns on a chart
+ * @param chart pointer to chart object
+ * @param mask mask, inherited from the design function
+ */
+static void lv_chart_draw_cols(lv_obj_t * chart, const lv_area_t * mask)
+{
+    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+
+    uint16_t i;
+    lv_area_t col_a;
+    lv_area_t col_mask;
+    bool mask_ret;
+    lv_coord_t w = lv_obj_get_width(chart);
+    lv_coord_t h = lv_obj_get_height(chart);
+    int32_t y_tmp;
+    lv_chart_series_t * ser;
+    lv_style_t rects;
+    lv_coord_t col_w = w / ((ext->series.num + 1) * ext->point_cnt); /* 
Suppose + 1 series as separator*/
+    lv_coord_t x_ofs = col_w / 2;                                    /*Shift 
with a half col.*/
+
+    lv_style_copy(&rects, &lv_style_plain);
+    rects.body.border.width = 0;
+    rects.body.radius       = 0;
+    rects.body.opa          = ext->series.opa;
+
+    col_a.y2 = chart->coords.y2;
+
+    lv_coord_t x_act;
+
+    /*Go through all points*/
+    for(i = 0; i < ext->point_cnt; i++) {
+        x_act = (int32_t)((int32_t)w * i) / ext->point_cnt;
+        x_act += chart->coords.x1 + x_ofs;
+
+        /*Draw the current point of all data line*/
+        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;
+
+            col_a.x1 = x_act;
+            col_a.x2 = col_a.x1 + col_w;
+            x_act += col_w;
+
+            if(col_a.x2 < mask->x1) continue;
+            if(col_a.x1 > mask->x2) break;
+
+            rects.body.main_color = ser->color;
+            rects.body.grad_color = lv_color_mix(LV_COLOR_BLACK, ser->color, 
ext->series.dark);
+
+            lv_coord_t p_act = (start_point + i) % ext->point_cnt;
+            y_tmp            = (int32_t)((int32_t)ser->points[p_act] - 
ext->ymin) * h;
+            y_tmp            = y_tmp / (ext->ymax - ext->ymin);
+            col_a.y1         = h - y_tmp + chart->coords.y1;
+
+            mask_ret = lv_area_intersect(&col_mask, mask, &col_a);
+            if(mask_ret != false && ser->points[p_act] != LV_CHART_POINT_DEF) {
+                lv_draw_rect(&chart->coords, &col_mask, &rects, 
lv_obj_get_opa_scale(chart));
+            }
+        }
+    }
+}
+
+/**
+ * Draw the data lines as vertical lines on a chart if there is only 1px 
between point
+ * @param obj pointer to chart object
+ */
+static void lv_chart_draw_vertical_lines(lv_obj_t * chart, const lv_area_t * 
mask)
+{
+
+    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+    lv_coord_t w         = lv_obj_get_width(chart);
+    /*Vertical lines works only if the width == point count. Else use the 
normal line type*/
+    if(ext->point_cnt != w) {
+        lv_chart_draw_lines(chart, mask);
+        return;
+    }
+
+    uint16_t i;
+    lv_point_t p1;
+    lv_point_t p2;
+    lv_coord_t p_act;
+    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;
+    int32_t y_tmp;
+    lv_chart_series_t * ser;
+    lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
+    lv_style_t style;
+    lv_style_copy(&style, &lv_style_plain);
+    style.line.opa   = ext->series.opa;
+    style.line.width = ext->series.width;
+
+    /*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.line.color       = ser->color;
+
+        p1.x  = 0 + x_ofs;
+        p2.x  = 0 + x_ofs;
+        y_tmp = (int32_t)((int32_t)ser->points[0] - ext->ymin) * h;
+        y_tmp = y_tmp / (ext->ymax - ext->ymin);
+        p2.y  = h - y_tmp + y_ofs;
+        p1.y  = p2.y;
+
+        for(i = 0; i < ext->point_cnt; i++) {
+            p_act = (start_point + i) % ext->point_cnt;
+
+            y_tmp = (int32_t)((int32_t)ser->points[p_act] - ext->ymin) * h;
+            y_tmp = y_tmp / (ext->ymax - ext->ymin);
+            p2.y  = h - y_tmp + y_ofs;
+
+            if(p1.y == p2.y) {
+                p2.x++;
+            }
+
+            if(ser->points[p_act] != LV_CHART_POINT_DEF) {
+                lv_draw_line(&p1, &p2, mask, &style, opa_scale);
+            }
+
+            p2.x = ((w * p_act) / (ext->point_cnt - 1)) + x_ofs;
+            p1.x = p2.x;
+            p1.y = p2.y;
+        }
+    }
+}
+
+/**
+ * Draw the data lines as areas on a chart
+ * @param obj pointer to chart object
+ */
+static void lv_chart_draw_areas(lv_obj_t * chart, const lv_area_t * mask)
+{
+    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+
+    uint16_t i;
+    lv_point_t p1;
+    lv_point_t p2;
+    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;
+    int32_t y_tmp;
+    lv_coord_t p_prev;
+    lv_coord_t p_act;
+    lv_chart_series_t * ser;
+    lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
+    lv_style_t style;
+    lv_style_copy(&style, &lv_style_plain);
+
+    /*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.opa         = ext->series.opa;
+
+        p2.x = 0 + x_ofs;
+
+        p_prev = start_point;
+        y_tmp  = (int32_t)((int32_t)ser->points[p_prev] - ext->ymin) * h;
+        y_tmp  = y_tmp / (ext->ymax - ext->ymin);
+        p2.y   = h - y_tmp + y_ofs;
+
+        for(i = 1; i < ext->point_cnt; i++) {
+            p1.x = p2.x;
+            p1.y = p2.y;
+
+            p_act = (start_point + i) % ext->point_cnt;
+            p2.x  = ((w * i) / (ext->point_cnt - 1)) + x_ofs;
+
+            y_tmp = (int32_t)((int32_t)ser->points[p_act] - ext->ymin) * h;
+            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);
+            }
+            p_prev = p_act;
+        }
+    }
+}
+
+/**
+ * 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(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;
+        uint8_t num_of_labels;
+        uint8_t num_scale_ticks;
+        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;
+        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(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 = y_axis->major_tick_len;
+
+        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 = y_axis->minor_tick_len;
+
+        /* 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(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 = y_axis->num_tick_marks;
+        else
+            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;
+
+            /* 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 % 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 */
+
+            /* draw a line at moving y position */
+            p2.y = p1.y =
+                y_ofs + (int32_t)((int32_t)(h - style->line.width) * i) / 
num_scale_ticks;
+
+            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(lv_chart_is_tick_with_label(i, y_axis)) {
+
+                    lv_chart_get_next_label(&iter, buf);
+
+                    /* reserve appropriate area */
+                    lv_point_t size;
+                    lv_txt_get_size(&size, buf, style->text.font, 
style->text.letter_space, style->text.line_space,
+                                    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 = {.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));
+                }
+            }
+
+        }
+    }
+}
+
+static void lv_chart_draw_x_ticks(lv_obj_t * chart, const lv_area_t * mask)
+{
+    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+
+    if(ext->x_axis.list_of_values != NULL || ext->x_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;
+        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;
+        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 */
+
+        /* calculate the size of tick marks */
+        if(ext->x_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->x_axis.major_tick_len;
+
+        if(ext->x_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->x_axis.minor_tick_len;
+
+        /*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;
+
+        /* calculate total number of marks */
+        if(num_of_labels < 2)
+            num_scale_ticks = ext->x_axis.num_tick_marks;
+        else
+            num_scale_ticks = (ext->x_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.y = h + y_ofs;
+
+            /* second point of the tick */
+            if((num_of_labels != 0) && (i == 0 || i % 
ext->x_axis.num_tick_marks == 0))
+                p2.y = p1.y + major_tick_len; /* major tick */
+            else
+                p2.y = p1.y + minor_tick_len; /* minor tick */
+
+            /* draw a line at moving x position */
+            p2.x = p1.x = x_ofs + (int32_t)((int32_t)(w - style->line.width) * 
i) / num_scale_ticks;
+
+            if(i != num_scale_ticks)
+                lv_draw_line(&p1, &p2, mask, style, opa_scale);
+            else if((ext->x_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(lv_chart_is_tick_with_label(i, &(ext->x_axis))) {
+                    lv_chart_get_next_label(&iter, buf);
+
+                    /* reserve appropriate area */
+                    lv_point_t size;
+                    lv_txt_get_size(&size, buf, style->text.font, 
style->text.letter_space, style->text.line_space,
+                                    LV_COORD_MAX, LV_TXT_FLAG_CENTER);
+
+                    /* 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, NULL, NULL, lv_obj_get_base_dir(chart));
+                }
+            }
+        }
+    }
+}
+
+static void lv_chart_draw_axes(lv_obj_t * chart, const lv_area_t * 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);
+}
+
+/**
+ * invalid area of the new line data lines on a chart
+ * @param obj pointer to chart object
+ */
+static void lv_chart_inv_lines(lv_obj_t * chart, uint16_t i)
+{
+    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+
+    lv_coord_t w     = lv_obj_get_width(chart);
+    lv_coord_t x_ofs = chart->coords.x1;
+
+    if(i < ext->point_cnt) {
+        lv_area_t coords;
+        lv_obj_get_coords(chart, &coords);
+        if(i < ext->point_cnt - 1) {
+            coords.x1 = ((w * i) / (ext->point_cnt - 1)) + x_ofs - 
ext->series.width;
+            coords.x2 = ((w * (i + 1)) / (ext->point_cnt - 1)) + x_ofs + 
ext->series.width;
+            lv_inv_area(lv_obj_get_disp(chart), &coords);
+        }
+
+        if(i > 0) {
+            coords.x1 = ((w * (i - 1)) / (ext->point_cnt - 1)) + x_ofs - 
ext->series.width;
+            coords.x2 = ((w * i) / (ext->point_cnt - 1)) + x_ofs + 
ext->series.width;
+            lv_inv_area(lv_obj_get_disp(chart), &coords);
+        }
+    }
+}
+
+/**
+ * invalid area of the new point data lines on a chart
+ * @param chart pointer to chart object
+ * @param mask mask, inherited from the design function
+ */
+static void lv_chart_inv_points(lv_obj_t * chart, uint16_t i)
+{
+    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+
+    lv_area_t cir_a;
+    lv_coord_t w     = lv_obj_get_width(chart);
+    lv_coord_t x_ofs = chart->coords.x1;
+
+    lv_obj_get_coords(chart, &cir_a);
+    cir_a.x1 = ((w * i) / (ext->point_cnt - 1)) + x_ofs;
+    cir_a.x2 = cir_a.x1 + ext->series.width;
+    cir_a.x1 -= ext->series.width;
+
+    lv_inv_area(lv_obj_get_disp(chart), &cir_a);
+}
+
+/**
+ * invalid area of the new column data lines on a chart
+ * @param chart pointer to chart object
+ * @param mask mask, inherited from the design function
+ */
+static void lv_chart_inv_cols(lv_obj_t * chart, uint16_t i)
+{
+    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+
+    lv_area_t col_a;
+    lv_coord_t w     = lv_obj_get_width(chart);
+    lv_coord_t col_w = w / ((ext->series.num + 1) * ext->point_cnt); /* 
Suppose + 1 series as separator*/
+    lv_coord_t x_ofs = col_w / 2;                                    /*Shift 
with a half col.*/
+
+    lv_coord_t x_act;
+
+    x_act = (int32_t)((int32_t)w * i) / ext->point_cnt;
+    x_act += chart->coords.x1 + x_ofs;
+
+    lv_obj_get_coords(chart, &col_a);
+    col_a.x1 = x_act;
+    col_a.x2 = col_a.x1 + col_w;
+
+    lv_inv_area(lv_obj_get_disp(chart), &col_a);
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_chart.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_chart.h
new file mode 100755
index 0000000..55fb929
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_chart.h
@@ -0,0 +1,395 @@
+/**
+ * @file lv_chart.h
+ *
+ */
+
+#ifndef LV_CHART_H
+#define LV_CHART_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_CHART != 0
+
+#include "../lv_core/lv_obj.h"
+#include "lv_line.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**Default value of points. Can be used to not draw a point*/
+#define LV_CHART_POINT_DEF (LV_COORD_MIN)
+
+/**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
+ **********************/
+
+/** Chart types*/
+enum {
+    LV_CHART_TYPE_NONE           = 0x00, /**< Don't draw the series*/
+    LV_CHART_TYPE_LINE          = 0x01, /**< Connect the points with lines*/
+    LV_CHART_TYPE_COLUMN        = 0x02, /**< Draw columns*/
+    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*/
+};
+typedef uint8_t lv_chart_type_t;
+
+/** Chart update mode for `lv_chart_set_next`*/
+enum {
+    LV_CHART_UPDATE_MODE_SHIFT,     /**< Shift old data to the left and add 
the new one o the right*/
+    LV_CHART_UPDATE_MODE_CIRCULAR,  /**< Add the new data in a circular way*/
+};
+typedef uint8_t lv_chart_update_mode_t;
+
+typedef struct
+{
+    lv_coord_t * points;
+    lv_color_t color;
+    uint16_t start_point;
+} lv_chart_series_t;
+
+/** 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_INVERSE_LABELS_ORDER = 0x02       /**< draw tick labels in 
an inversed order*/
+};
+typedef uint8_t lv_chart_axis_options_t;
+
+typedef struct
+{
+    const char * list_of_values;
+    lv_chart_axis_options_t options;
+    uint8_t num_tick_marks;
+    uint8_t major_tick_len;
+    uint8_t minor_tick_len;
+} lv_chart_axis_cfg_t;
+
+/*Data of chart */
+typedef struct
+{
+    /*No inherited ext*/ /*Ext. of ancestor*/
+    /*New data for this type */
+    lv_ll_t series_ll;    /*Linked list for the data line pointers (stores 
lv_chart_dl_t)*/
+    lv_coord_t ymin;      /*y min value (used to scale the data)*/
+    lv_coord_t ymax;      /*y max value (used to scale the data)*/
+    uint8_t hdiv_cnt;     /*Number of horizontal division lines*/
+    uint8_t vdiv_cnt;     /*Number of vertical division lines*/
+    uint16_t point_cnt;   /*Point number in a data line*/
+    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
+    {
+        lv_coord_t width; /*Line width or point radius*/
+        uint8_t num;      /*Number of data lines in dl_ll*/
+        lv_opa_t opa;     /*Opacity of data lines*/
+        lv_opa_t dark;    /*Dark level of the point/column bottoms*/
+    } series;
+} lv_chart_ext_t;
+
+enum {
+    LV_CHART_STYLE_MAIN,
+};
+typedef uint8_t lv_chart_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a chart background objects
+ * @param par pointer to an object, it will be the parent of the new chart 
background
+ * @param copy pointer to a chart background object, if not NULL then the new 
object will be copied
+ * from it
+ * @return pointer to the created chart background
+ */
+lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Allocate and add a data series to the chart
+ * @param chart pointer to a chart object
+ * @param color color of the data series
+ * @return pointer to the allocated data series
+ */
+lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color);
+
+/**
+ * Clear the point of a serie
+ * @param chart pointer to a chart object
+ * @param serie pointer to the chart's serie to clear
+ */
+void lv_chart_clear_serie(lv_obj_t * chart, lv_chart_series_t * serie);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the number of horizontal and vertical division lines
+ * @param chart pointer to a graph background object
+ * @param hdiv number of horizontal division lines
+ * @param vdiv number of vertical division lines
+ */
+void lv_chart_set_div_line_count(lv_obj_t * chart, uint8_t hdiv, uint8_t vdiv);
+
+/**
+ * Set the minimal and maximal y values
+ * @param chart pointer to a graph background object
+ * @param ymin y minimum value
+ * @param ymax y maximum value
+ */
+void lv_chart_set_range(lv_obj_t * chart, lv_coord_t ymin, lv_coord_t ymax);
+
+/**
+ * Set a new type for a chart
+ * @param chart pointer to a chart object
+ * @param type new type of the chart (from 'lv_chart_type_t' enum)
+ */
+void lv_chart_set_type(lv_obj_t * chart, lv_chart_type_t type);
+
+/**
+ * Set the number of points on a data line on a chart
+ * @param chart pointer r to chart object
+ * @param point_cnt new number of points on the data lines
+ */
+void lv_chart_set_point_count(lv_obj_t * chart, uint16_t point_cnt);
+
+/**
+ * Set the opacity of the data series
+ * @param chart pointer to a chart object
+ * @param opa opacity of the data series
+ */
+void lv_chart_set_series_opa(lv_obj_t * chart, lv_opa_t opa);
+
+/**
+ * Set the line width or point radius of the data series
+ * @param chart pointer to a chart object
+ * @param width the new width
+ */
+void lv_chart_set_series_width(lv_obj_t * chart, lv_coord_t width);
+
+/**
+ * Set the dark effect on the bottom of the points or columns
+ * @param chart pointer to a chart object
+ * @param dark_eff dark effect level (LV_OPA_TRANSP to turn off)
+ */
+void lv_chart_set_series_darking(lv_obj_t * chart, lv_opa_t dark_eff);
+
+/**
+ * Initialize all data points with a value
+ * @param chart pointer to chart object
+ * @param ser pointer to a data series on 'chart'
+ * @param y the new value  for all points
+ */
+void lv_chart_init_points(lv_obj_t * chart, lv_chart_series_t * ser, 
lv_coord_t y);
+
+/**
+ * Set the value of points from an array
+ * @param chart pointer to chart object
+ * @param ser pointer to a data series on 'chart'
+ * @param y_array array of 'lv_coord_t' points (with 'points count' elements )
+ */
+void lv_chart_set_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t 
y_array[]);
+
+/**
+ * Shift all data right and set the most right data on a data line
+ * @param chart pointer to chart object
+ * @param ser pointer to a data series on 'chart'
+ * @param y the new value of the most right data
+ */
+void lv_chart_set_next(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t 
y);
+
+/**
+ * Set update mode of the chart object.
+ * @param chart pointer to a chart object
+ * @param update mode
+ */
+void lv_chart_set_update_mode(lv_obj_t * chart, lv_chart_update_mode_t 
update_mode);
+
+/**
+ * Set the style of a chart
+ * @param chart pointer to a chart object
+ * @param type which style should be set (can be only `LV_CHART_STYLE_MAIN`)
+ * @param style pointer to a style
+ */
+static inline void lv_chart_set_style(lv_obj_t * chart, lv_chart_style_t type, 
const lv_style_t * style)
+{
+    (void)type; /*Unused*/
+    lv_obj_set_style(chart, style);
+}
+
+/**
+ * Set the length of the tick marks on the x 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_x_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 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_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
+ * @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_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
+ * @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_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 margin around the chart, used for axes value and ticks
+ * @param chart     pointer to an chart object
+ * @param margin    value of the margin [px]
+ */
+void lv_chart_set_margin(lv_obj_t * chart, uint16_t margin);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the type of a chart
+ * @param chart pointer to chart object
+ * @return type of the chart (from 'lv_chart_t' enum)
+ */
+lv_chart_type_t lv_chart_get_type(const lv_obj_t * chart);
+
+/**
+ * Get the data point number per data line on 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);
+
+/**
+ * Get the opacity of the data series
+ * @param chart pointer to chart object
+ * @return the opacity of the data series
+ */
+lv_opa_t lv_chart_get_series_opa(const lv_obj_t * chart);
+
+/**
+ * Get the data series width
+ * @param chart pointer to chart object
+ * @return the width the data series (lines or points)
+ */
+lv_coord_t lv_chart_get_series_width(const lv_obj_t * chart);
+
+/**
+ * Get the dark effect level on the bottom of the points or columns
+ * @param chart pointer to chart object
+ * @return dark effect level (LV_OPA_TRANSP to turn off)
+ */
+lv_opa_t lv_chart_get_series_darking(const lv_obj_t * chart);
+
+/**
+ * Get the style of an chart object
+ * @param chart pointer to an chart object
+ * @param type which style should be get (can be only `LV_CHART_STYLE_MAIN`)
+ * @return pointer to the chart's style
+ */
+static inline const lv_style_t * lv_chart_get_style(const lv_obj_t * chart, 
lv_chart_style_t type)
+{
+    (void)type; /*Unused*/
+    return lv_obj_get_style(chart);
+}
+
+/**
+ * Get the margin around the chart, used for axes value and labels
+ * @param chart pointer to an chart object
+ * @param return value of the margin
+ */
+uint16_t lv_chart_get_margin(lv_obj_t * chart);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Refresh a chart if its data line has changed
+ * @param chart pointer to chart object
+ */
+void lv_chart_refresh(lv_obj_t * chart);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_CHART*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_CHART_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_cont.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_cont.c
new file mode 100755
index 0000000..22e9f51
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_cont.c
@@ -0,0 +1,710 @@
+/**
+ * @file lv_cont.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+
+#include "lv_cont.h"
+#if LV_USE_CONT != 0
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "../lv_core/lv_debug.h"
+#include "../lv_draw/lv_draw.h"
+#include "../lv_draw/lv_draw_basic.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
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static lv_res_t lv_cont_signal(lv_obj_t * cont, lv_signal_t sign, void * 
param);
+static void lv_cont_refr_layout(lv_obj_t * cont);
+static void lv_cont_layout_col(lv_obj_t * cont);
+static void lv_cont_layout_row(lv_obj_t * cont);
+static void lv_cont_layout_center(lv_obj_t * cont);
+static void lv_cont_layout_pretty(lv_obj_t * cont);
+static void lv_cont_layout_grid(lv_obj_t * cont);
+static void lv_cont_refr_autofit(lv_obj_t * cont);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a container objects
+ * @param par pointer to an object, it will be the parent of the new container
+ * @param copy pointer to a container object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created container
+ */
+lv_obj_t * lv_cont_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+
+    LV_LOG_TRACE("container create started");
+
+    /*Create a basic object*/
+    lv_obj_t * new_cont = lv_obj_create(par, copy);
+    LV_ASSERT_MEM(new_cont);
+    if(new_cont == NULL) return NULL;
+
+    if(ancestor_signal == NULL) ancestor_signal = 
lv_obj_get_signal_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;
+
+    LV_ASSERT_MEM(ext);
+    ext->fit_left   = LV_FIT_NONE;
+    ext->fit_right  = LV_FIT_NONE;
+    ext->fit_top    = LV_FIT_NONE;
+    ext->fit_bottom = LV_FIT_NONE;
+    ext->layout     = LV_LAYOUT_OFF;
+
+    lv_obj_set_signal_cb(new_cont, lv_cont_signal);
+
+    /*Init the new container*/
+    if(copy == NULL) {
+        /*Set the default styles if it's not screen*/
+        if(par != NULL) {
+            lv_theme_t * th = lv_theme_get_current();
+            if(th) {
+                lv_cont_set_style(new_cont, LV_CONT_STYLE_MAIN, 
th->style.cont);
+            } else {
+                lv_cont_set_style(new_cont, LV_CONT_STYLE_MAIN, 
&lv_style_pretty);
+            }
+        }
+    }
+    /*Copy an existing object*/
+    else {
+        lv_cont_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->fit_left            = copy_ext->fit_left;
+        ext->fit_right           = copy_ext->fit_right;
+        ext->fit_top             = copy_ext->fit_top;
+        ext->fit_bottom          = copy_ext->fit_bottom;
+        ext->layout              = copy_ext->layout;
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_cont);
+    }
+
+    LV_LOG_INFO("container created");
+
+    return new_cont;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a layout on a container
+ * @param cont pointer to a container object
+ * @param layout a layout from 'lv_cont_layout_t'
+ */
+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;
+
+    ext->layout = layout;
+
+    /*Send a signal to refresh the layout*/
+    cont->signal_cb(cont, LV_SIGNAL_CHILD_CHG, NULL);
+}
+
+/**
+ * Set the fit policy in all 4 directions separately.
+ * It tell how to change the container's size automatically.
+ * @param cont pointer to a container object
+ * @param left left fit policy from `lv_fit_t`
+ * @param right right fit policy from `lv_fit_t`
+ * @param top bottom fit policy from `lv_fit_t`
+ * @param bottom bottom fit policy from `lv_fit_t`
+ */
+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) {
+        return;
+    }
+
+    ext->fit_left   = left;
+    ext->fit_right  = right;
+    ext->fit_top    = top;
+    ext->fit_bottom = bottom;
+
+    /*Send a signal to refresh the layout*/
+    cont->signal_cb(cont, LV_SIGNAL_CHILD_CHG, NULL);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the layout of a container
+ * @param cont pointer to container object
+ * @return the layout from 'lv_cont_layout_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;
+}
+
+/**
+ * Get left fit mode of a container
+ * @param cont pointer to a container object
+ * @return an element of `lv_fit_t`
+ */
+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;
+}
+
+/**
+ * Get right fit mode of a container
+ * @param cont pointer to a container object
+ * @return an element of `lv_fit_t`
+ */
+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;
+}
+
+/**
+ * Get top fit mode of a container
+ * @param cont pointer to a container object
+ * @return an element of `lv_fit_t`
+ */
+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;
+}
+
+/**
+ * Get bottom fit mode of a container
+ * @param cont pointer to a container object
+ * @return an element of `lv_fit_t`
+ */
+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;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Signal function of the container
+ * @param cont pointer to a container 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_cont_signal(lv_obj_t * cont, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* 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);
+        lv_cont_refr_autofit(cont);
+    } else if(sign == LV_SIGNAL_CHILD_CHG) {
+        lv_cont_refr_layout(cont);
+        lv_cont_refr_autofit(cont);
+    } else if(sign == LV_SIGNAL_CORD_CHG) {
+        if(lv_obj_get_width(cont) != lv_area_get_width(param) || 
lv_obj_get_height(cont) != lv_area_get_height(param)) {
+            lv_cont_refr_layout(cont);
+            lv_cont_refr_autofit(cont);
+        }
+    } else if(sign == LV_SIGNAL_PARENT_SIZE_CHG) {
+        /*FLOOD and FILL fit needs to be refreshed if the parent size has 
changed*/
+        lv_cont_refr_autofit(cont);
+
+    }
+
+    return res;
+}
+
+/**
+ * Refresh the layout of a container
+ * @param cont pointer to an object which layout should be refreshed
+ */
+static void lv_cont_refr_layout(lv_obj_t * cont)
+{
+    lv_layout_t type = lv_cont_get_layout(cont);
+
+    /*'cont' has to be at least 1 child*/
+    if(lv_obj_get_child(cont, NULL) == NULL) return;
+
+    if(type == LV_LAYOUT_OFF) return;
+
+    if(type == LV_LAYOUT_CENTER) {
+        lv_cont_layout_center(cont);
+    } else if(type == LV_LAYOUT_COL_L || type == LV_LAYOUT_COL_M || type == 
LV_LAYOUT_COL_R) {
+        lv_cont_layout_col(cont);
+    } else if(type == LV_LAYOUT_ROW_T || type == LV_LAYOUT_ROW_M || type == 
LV_LAYOUT_ROW_B) {
+        lv_cont_layout_row(cont);
+    } else if(type == LV_LAYOUT_PRETTY) {
+        lv_cont_layout_pretty(cont);
+    } else if(type == LV_LAYOUT_GRID) {
+        lv_cont_layout_grid(cont);
+    }
+}
+
+/**
+ * Handle column type layouts
+ * @param cont pointer to an object which layout should be handled
+ */
+static void lv_cont_layout_col(lv_obj_t * cont)
+{
+    lv_layout_t type = lv_cont_get_layout(cont);
+    lv_obj_t * child;
+
+    /*Adjust margin and get the alignment type*/
+    lv_align_t align;
+    const lv_style_t * style = lv_obj_get_style(cont);
+    lv_coord_t hpad_corr;
+
+    switch(type) {
+        case LV_LAYOUT_COL_L:
+            hpad_corr = style->body.padding.left;
+            align     = LV_ALIGN_IN_TOP_LEFT;
+            break;
+        case LV_LAYOUT_COL_M:
+            hpad_corr = 0;
+            align     = LV_ALIGN_IN_TOP_MID;
+            break;
+        case LV_LAYOUT_COL_R:
+            hpad_corr = -style->body.padding.right;
+            align     = LV_ALIGN_IN_TOP_RIGHT;
+            break;
+        default:
+            hpad_corr = 0;
+            align     = LV_ALIGN_IN_TOP_LEFT;
+            break;
+    }
+
+    /* Disable child change action because the children will be moved a lot
+     * an unnecessary child change signals could be sent*/
+    lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG);
+    /* Align the children */
+    lv_coord_t last_cord = style->body.padding.top;
+    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, hpad_corr, last_cord);
+        last_cord += lv_obj_get_height(child) + style->body.padding.inner;
+    }
+
+    lv_obj_clear_protect(cont, LV_PROTECT_CHILD_CHG);
+}
+
+/**
+ * Handle row type layouts
+ * @param cont pointer to an object which layout should be handled
+ */
+static void lv_cont_layout_row(lv_obj_t * cont)
+{
+    lv_layout_t type = lv_cont_get_layout(cont);
+    lv_obj_t * child;
+
+    /*Adjust margin and get the alignment type*/
+    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     = 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     = 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     = base_dir == LV_BIDI_DIR_RTL ? 
LV_ALIGN_IN_BOTTOM_RIGHT: LV_ALIGN_IN_BOTTOM_LEFT;
+            break;
+        default:
+            vpad_corr = 0;
+            align     = base_dir == LV_BIDI_DIR_RTL ? LV_ALIGN_IN_TOP_RIGHT : 
LV_ALIGN_IN_TOP_LEFT;
+            break;
+    }
+
+    /* Disable child change action because the children will be moved a lot
+     * an unnecessary child change signals could be sent*/
+    lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG);
+
+    /* Align the children */
+    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;
+
+//        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;
+    }
+
+    lv_obj_clear_protect(cont, LV_PROTECT_CHILD_CHG);
+}
+
+/**
+ * Handle the center layout
+ * @param cont pointer to an object which layout should be handled
+ */
+static void lv_cont_layout_center(lv_obj_t * cont)
+{
+    lv_obj_t * child;
+    const lv_style_t * style = lv_obj_get_style(cont);
+    uint32_t obj_num         = 0;
+    lv_coord_t h_tot         = 0;
+
+    LV_LL_READ(cont->child_ll, child)
+    {
+        if(lv_obj_get_hidden(child) != false || lv_obj_is_protected(child, 
LV_PROTECT_POS) != false) continue;
+        h_tot += lv_obj_get_height(child) + style->body.padding.inner;
+        obj_num++;
+    }
+
+    if(obj_num == 0) return;
+
+    h_tot -= style->body.padding.inner;
+
+    /* Disable child change action because the children will be moved a lot
+     * an unnecessary child change signals could be sent*/
+    lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG);
+
+    /* Align the children */
+    lv_coord_t last_cord = -(h_tot / 2);
+    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, LV_ALIGN_CENTER, 0, last_cord + 
lv_obj_get_height(child) / 2);
+        last_cord += lv_obj_get_height(child) + style->body.padding.inner;
+    }
+
+    lv_obj_clear_protect(cont, LV_PROTECT_CHILD_CHG);
+}
+
+/**
+ * Handle the pretty layout. Put as many object as possible in row
+ * then begin a new row
+ * @param cont pointer to an object which layout should be handled
+ */
+static void lv_cont_layout_pretty(lv_obj_t * cont)
+{
+    lv_obj_t * child_rs;  /* Row starter child */
+    lv_obj_t * child_rc;  /* Row closer child */
+    lv_obj_t * child_tmp; /* Temporary child */
+    const lv_style_t * style = lv_obj_get_style(cont);
+    lv_coord_t w_obj         = lv_obj_get_width(cont);
+    lv_coord_t act_y         = style->body.padding.top;
+    /* Disable child change action because the children will be moved a lot
+     * an unnecessary child change signals could be sent*/
+
+    child_rs = lv_ll_get_tail(&cont->child_ll); /*Set the row starter child*/
+    if(child_rs == NULL) return;                /*Return if no child*/
+
+    lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG);
+
+    child_rc = child_rs; /*Initially the the row starter and closer is the 
same*/
+    while(child_rs != NULL) {
+        lv_coord_t h_row = 0;
+        lv_coord_t w_row =
+            style->body.padding.left + style->body.padding.right; /*The width 
is at least the left+right hpad*/
+        uint32_t obj_num = 0;
+
+        /*Find the row closer object and collect some data*/
+        do {
+            if(lv_obj_get_hidden(child_rc) == false && 
lv_obj_is_protected(child_rc, LV_PROTECT_POS) == false) {
+                /*If this object is already not fit then break*/
+                if(w_row + lv_obj_get_width(child_rc) > w_obj) {
+                    /*Step back one child because the last already not fit, so 
the previous is the
+                     * closer*/
+                    if(child_rc != NULL && obj_num != 0) {
+                        child_rc = lv_ll_get_next(&cont->child_ll, child_rc);
+                    }
+                    break;
+                }
+                w_row += lv_obj_get_width(child_rc) + 
style->body.padding.inner; /*Add the object width + opad*/
+                h_row = LV_MATH_MAX(h_row, lv_obj_get_height(child_rc));       
  /*Search the highest object*/
+                obj_num++;
+                if(lv_obj_is_protected(child_rc, LV_PROTECT_FOLLOW))
+                    break; /*If can not be followed by an other object then 
break here*/
+            }
+            child_rc = lv_ll_get_prev(&cont->child_ll, child_rc); /*Load the 
next object*/
+            if(obj_num == 0)
+                child_rs = child_rc; /*If the first object was hidden (or too 
long) then set the
+                                        next as first */
+        } while(child_rc != NULL);
+
+        /*If the object is too long  then align it to the middle*/
+        if(obj_num == 0) {
+            if(child_rc != NULL) {
+                lv_obj_align(child_rc, cont, LV_ALIGN_IN_TOP_MID, 0, act_y);
+                h_row = lv_obj_get_height(child_rc); /*Not set previously 
because of the early break*/
+            }
+        }
+        /*If there is only one object in the row then align it to the middle*/
+        else if(obj_num == 1) {
+            lv_obj_align(child_rs, cont, LV_ALIGN_IN_TOP_MID, 0, act_y);
+        }
+        /*If there are two object in the row then align them proportionally*/
+        else if(obj_num == 2) {
+            lv_obj_t * obj1 = child_rs;
+            lv_obj_t * obj2 = lv_ll_get_prev(&cont->child_ll, child_rs);
+            w_row           = lv_obj_get_width(obj1) + lv_obj_get_width(obj2);
+            lv_coord_t pad  = (w_obj - w_row) / 3;
+            lv_obj_align(obj1, cont, LV_ALIGN_IN_TOP_LEFT, pad, act_y + (h_row 
- lv_obj_get_height(obj1)) / 2);
+            lv_obj_align(obj2, cont, LV_ALIGN_IN_TOP_RIGHT, -pad, act_y + 
(h_row - lv_obj_get_height(obj2)) / 2);
+        }
+        /* Align the children (from child_rs to child_rc)*/
+        else {
+            w_row -= style->body.padding.inner * obj_num;
+            lv_coord_t new_opad = (w_obj - w_row) / (obj_num - 1);
+            lv_coord_t act_x    = style->body.padding.left; /*x init*/
+            child_tmp           = child_rs;
+            while(child_tmp != NULL) {
+                if(lv_obj_get_hidden(child_tmp) == false && 
lv_obj_is_protected(child_tmp, LV_PROTECT_POS) == false) {
+                    lv_obj_align(child_tmp, cont, LV_ALIGN_IN_TOP_LEFT, act_x,
+                                 act_y + (h_row - 
lv_obj_get_height(child_tmp)) / 2);
+                    act_x += lv_obj_get_width(child_tmp) + new_opad;
+                }
+                if(child_tmp == child_rc) break;
+                child_tmp = lv_ll_get_prev(&cont->child_ll, child_tmp);
+            }
+        }
+
+        if(child_rc == NULL) break;
+        act_y += style->body.padding.inner + h_row;           /*y increment*/
+        child_rs = lv_ll_get_prev(&cont->child_ll, child_rc); /*Go to the next 
object*/
+        child_rc = child_rs;
+    }
+    lv_obj_clear_protect(cont, LV_PROTECT_CHILD_CHG);
+}
+
+/**
+ * Handle the grid layout. Align same-sized objects in a grid
+ * @param cont pointer to an object which layout should be handled
+ */
+static void lv_cont_layout_grid(lv_obj_t * cont)
+{
+    lv_obj_t * child;
+    const lv_style_t * style = lv_obj_get_style(cont);
+    lv_coord_t w_tot         = lv_obj_get_width(cont);
+    lv_coord_t w_obj         = lv_obj_get_width(lv_obj_get_child(cont, NULL));
+    lv_coord_t w_fit         =  lv_obj_get_width_fit(cont);
+    lv_coord_t h_obj         = lv_obj_get_height(lv_obj_get_child(cont, NULL));
+    uint16_t obj_row         = (w_fit) / (w_obj + style->body.padding.inner); 
/*Obj. num. in a row*/
+    lv_coord_t x_ofs;
+    if(obj_row > 1) {
+        x_ofs = w_obj + (w_fit - (obj_row * w_obj)) / (obj_row - 1);
+    } else {
+        x_ofs = w_tot / 2 - w_obj / 2;
+    }
+    lv_coord_t y_ofs = h_obj + style->body.padding.inner;
+
+    /* Disable child change action because the children will be moved a lot
+     * an unnecessary child change signals could be sent*/
+    lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG);
+
+    /* Align the children */
+    lv_coord_t act_x = style->body.padding.left;
+    lv_coord_t act_y = style->body.padding.top;
+    uint16_t obj_cnt = 0;
+    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;
+
+        if(obj_row > 1) {
+            lv_obj_set_pos(child, act_x, act_y);
+            act_x += x_ofs;
+        } else {
+            lv_obj_set_pos(child, x_ofs, act_y);
+        }
+        obj_cnt++;
+
+        if(obj_cnt >= obj_row) {
+            obj_cnt = 0;
+            act_x   = style->body.padding.left;
+            act_y += y_ofs;
+        }
+    }
+
+    lv_obj_clear_protect(cont, LV_PROTECT_CHILD_CHG);
+}
+
+/**
+ * Handle auto fit. Set the size of the object to involve all children.
+ * @param cont pointer to an object which size will be modified
+ */
+static void lv_cont_refr_autofit(lv_obj_t * cont)
+{
+    lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
+
+    if(ext->fit_left == LV_FIT_NONE && ext->fit_right == LV_FIT_NONE && 
ext->fit_top == LV_FIT_NONE &&
+       ext->fit_bottom == LV_FIT_NONE) {
+        return;
+    }
+
+    lv_area_t tight_area;
+    lv_area_t ori;
+    const lv_style_t * style = lv_obj_get_style(cont);
+    lv_obj_t * child_i;
+
+    lv_obj_t * par               = lv_obj_get_parent(cont);
+    const lv_style_t * par_style = lv_obj_get_style(par);
+    lv_area_t flood_area;
+    lv_area_copy(&flood_area, &par->coords);
+    flood_area.x1 += par_style->body.padding.left;
+    flood_area.x2 -= par_style->body.padding.right;
+    flood_area.y1 += par_style->body.padding.top;
+    flood_area.y2 -= par_style->body.padding.bottom;
+
+    /*Search the side coordinates of the children*/
+    lv_obj_get_coords(cont, &ori);
+    lv_obj_get_coords(cont, &tight_area);
+
+    bool has_children = lv_ll_is_empty(&cont->child_ll) ? false : true;
+
+    if(has_children) {
+        tight_area.x1 = LV_COORD_MAX;
+        tight_area.y1 = LV_COORD_MAX;
+        tight_area.x2 = LV_COORD_MIN;
+        tight_area.y2 = LV_COORD_MIN;
+
+        LV_LL_READ(cont->child_ll, child_i)
+        {
+            if(lv_obj_get_hidden(child_i) != false) continue;
+            tight_area.x1 = LV_MATH_MIN(tight_area.x1, child_i->coords.x1);
+            tight_area.y1 = LV_MATH_MIN(tight_area.y1, child_i->coords.y1);
+            tight_area.x2 = LV_MATH_MAX(tight_area.x2, child_i->coords.x2);
+            tight_area.y2 = LV_MATH_MAX(tight_area.y2, child_i->coords.y2);
+        }
+
+        tight_area.x1 -= style->body.padding.left;
+        tight_area.x2 += style->body.padding.right;
+        tight_area.y1 -= style->body.padding.top;
+        tight_area.y2 += style->body.padding.bottom;
+    }
+
+    lv_area_t new_area;
+    lv_area_copy(&new_area, &ori);
+
+    switch(ext->fit_left) {
+        case LV_FIT_TIGHT: new_area.x1 = tight_area.x1; break;
+        case LV_FIT_FLOOD: new_area.x1 = flood_area.x1; break;
+        case LV_FIT_FILL: new_area.x1 = has_children ? 
LV_MATH_MIN(tight_area.x1, flood_area.x1) : flood_area.x1; break;
+        default: break;
+    }
+
+    switch(ext->fit_right) {
+        case LV_FIT_TIGHT: new_area.x2 = tight_area.x2; break;
+        case LV_FIT_FLOOD: new_area.x2 = flood_area.x2; break;
+        case LV_FIT_FILL: new_area.x2 = has_children ? 
LV_MATH_MAX(tight_area.x2, flood_area.x2) : flood_area.x2; break;
+        default: break;
+    }
+
+    switch(ext->fit_top) {
+        case LV_FIT_TIGHT: new_area.y1 = tight_area.y1; break;
+        case LV_FIT_FLOOD: new_area.y1 = flood_area.y1; break;
+        case LV_FIT_FILL: new_area.y1 = has_children ? 
LV_MATH_MIN(tight_area.y1, flood_area.y1) : flood_area.y1; break;
+        default: break;
+    }
+
+    switch(ext->fit_bottom) {
+        case LV_FIT_TIGHT: new_area.y2 = tight_area.y2; break;
+        case LV_FIT_FLOOD: new_area.y2 = flood_area.y2; break;
+        case LV_FIT_FILL: new_area.y2 = has_children ? 
LV_MATH_MAX(tight_area.y2, flood_area.y2) : flood_area.y2; break;
+        default: break;
+    }
+
+    /*Do nothing if the coordinates are not changed*/
+    if(cont->coords.x1 != new_area.x1 || cont->coords.y1 != new_area.y1 || 
cont->coords.x2 != new_area.x2 ||
+       cont->coords.y2 != new_area.y2) {
+
+        lv_obj_invalidate(cont);
+        lv_area_copy(&cont->coords, &new_area);
+        lv_obj_invalidate(cont);
+
+        /*Notify the object about its new coordinates*/
+        cont->signal_cb(cont, LV_SIGNAL_CORD_CHG, &ori);
+
+        /*Inform the parent about the new coordinates*/
+        par->signal_cb(par, LV_SIGNAL_CHILD_CHG, cont);
+
+        if(lv_obj_get_auto_realign(cont)) {
+            lv_obj_realign(cont);
+        }
+
+        /*Tell the children the parent's size has changed*/
+        LV_LL_READ(cont->child_ll, child_i)
+        {
+            child_i->signal_cb(child_i, LV_SIGNAL_PARENT_SIZE_CHG, NULL);
+        }
+    }
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_cont.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_cont.h
new file mode 100755
index 0000000..d4ed19f
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_cont.h
@@ -0,0 +1,210 @@
+/**
+ * @file lv_cont.h
+ *
+ */
+
+#ifndef LV_CONT_H
+#define LV_CONT_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_CONT != 0
+
+#include "../lv_core/lv_obj.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/** Container layout options*/
+enum {
+    LV_LAYOUT_OFF = 0, /**< No layout */
+    LV_LAYOUT_CENTER, /**< Center objects */
+    LV_LAYOUT_COL_L,  /**< Column left align*/
+    LV_LAYOUT_COL_M,  /**< Column middle align*/
+    LV_LAYOUT_COL_R,  /**< Column right align*/
+    LV_LAYOUT_ROW_T,  /**< Row top align*/
+    LV_LAYOUT_ROW_M,  /**< Row middle align*/
+    LV_LAYOUT_ROW_B,  /**< Row bottom align*/
+    LV_LAYOUT_PRETTY, /**< Put as many object as possible in row and begin a 
new row*/
+    LV_LAYOUT_GRID,   /**< Align same-sized object into a grid*/
+    _LV_LAYOUT_NUM
+};
+typedef uint8_t lv_layout_t;
+
+/**
+ * How to resize the container around the children.
+ */
+enum {
+    LV_FIT_NONE,  /**< Do not change the size automatically*/
+    LV_FIT_TIGHT, /**< Shrink wrap around the children */
+    LV_FIT_FLOOD, /**< Align the size to the parent's edge*/
+    LV_FIT_FILL,  /**< Align the size to the parent's edge first but if there 
is an object out of it
+                     then get larger */
+    _LV_FIT_NUM
+};
+typedef uint8_t lv_fit_t;
+
+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_cont_ext_t;
+
+/*Styles*/
+enum {
+    LV_CONT_STYLE_MAIN,
+};
+typedef uint8_t lv_cont_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a container objects
+ * @param par pointer to an object, it will be the parent of the new container
+ * @param copy pointer to a container object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created container
+ */
+lv_obj_t * lv_cont_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a layout on a container
+ * @param cont pointer to a container object
+ * @param layout a layout from 'lv_cont_layout_t'
+ */
+void lv_cont_set_layout(lv_obj_t * cont, lv_layout_t layout);
+
+/**
+ * Set the fit policy in all 4 directions separately.
+ * It tell how to change the container's size automatically.
+ * @param cont pointer to a container object
+ * @param left left fit policy from `lv_fit_t`
+ * @param right right fit policy from `lv_fit_t`
+ * @param top top fit policy from `lv_fit_t`
+ * @param bottom bottom fit policy from `lv_fit_t`
+ */
+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);
+
+/**
+ * Set the fit policy horizontally and vertically separately.
+ * It tells how to change the container's size automatically.
+ * @param cont pointer to a container object
+ * @param hor horizontal fit policy from `lv_fit_t`
+ * @param ver vertical fit policy from `lv_fit_t`
+ */
+static inline void lv_cont_set_fit2(lv_obj_t * cont, lv_fit_t hor, lv_fit_t 
ver)
+{
+    lv_cont_set_fit4(cont, hor, hor, ver, ver);
+}
+
+/**
+ * Set the fit policy in all 4 direction at once.
+ * It tells how to change the container's size automatically.
+ * @param cont pointer to a container object
+ * @param fit fit policy from `lv_fit_t`
+ */
+static inline void lv_cont_set_fit(lv_obj_t * cont, lv_fit_t fit)
+{
+    lv_cont_set_fit4(cont, fit, fit, fit, fit);
+}
+
+/**
+ * Set the style of a container
+ * @param cont 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_cont_set_style(lv_obj_t * cont, lv_cont_style_t type, 
const lv_style_t * style)
+{
+    (void)type; /*Unused*/
+    lv_obj_set_style(cont, style);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the layout of a container
+ * @param cont pointer to container object
+ * @return the layout from 'lv_cont_layout_t'
+ */
+lv_layout_t lv_cont_get_layout(const lv_obj_t * cont);
+
+/**
+ * Get left fit mode of a container
+ * @param cont pointer to a container object
+ * @return an element of `lv_fit_t`
+ */
+lv_fit_t lv_cont_get_fit_left(const lv_obj_t * cont);
+
+/**
+ * Get right fit mode of a container
+ * @param cont pointer to a container object
+ * @return an element of `lv_fit_t`
+ */
+lv_fit_t lv_cont_get_fit_right(const lv_obj_t * cont);
+
+/**
+ * Get top fit mode of a container
+ * @param cont pointer to a container object
+ * @return an element of `lv_fit_t`
+ */
+lv_fit_t lv_cont_get_fit_top(const lv_obj_t * cont);
+
+/**
+ * Get bottom fit mode of a container
+ * @param cont pointer to a container object
+ * @return an element of `lv_fit_t`
+ */
+lv_fit_t lv_cont_get_fit_bottom(const lv_obj_t * cont);
+
+/**
+ * Get the style of a container
+ * @param cont 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_cont_get_style(const lv_obj_t * cont, 
lv_cont_style_t type)
+{
+    (void)type; /*Unused*/
+    return lv_obj_get_style(cont);
+}
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_CONT*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_CONT_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_cpicker.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_cpicker.c
new file mode 100755
index 0000000..fa574bf
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_cpicker.c
@@ -0,0 +1,1068 @@
+/**
+ * @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 bool lv_cpicker_design(lv_obj_t * cpicker, const lv_area_t * mask, 
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) 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_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);
+
+    switch(type) {
+    case LV_CPICKER_STYLE_MAIN:
+        return lv_obj_get_style(cpicker);
+    case LV_CPICKER_STYLE_INDICATOR:
+        return ext->indic.style;
+    default:
+        return NULL;
+    }
+
+    /*To avoid warning*/
+    return NULL;
+}
+
+/**
+ * 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 true/false, depends on 'mode'
+ */
+static bool lv_cpicker_design(lv_obj_t * cpicker, const lv_area_t * mask, 
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;
+    }
+    /*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, mask, opa_scale);
+        } else if(ext->type == LV_CPICKER_TYPE_RECT) {
+            draw_rect_grad(cpicker, mask, opa_scale);
+        }
+
+        draw_indic(cpicker, mask, opa_scale);
+    }
+    /*Post draw when the children are drawn*/
+    else if(mode == LV_DESIGN_DRAW_POST) {
+    }
+
+    return true;
+}
+
+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);
+    int16_t start_angle = 0; /*Default*/
+    int16_t end_angle = 360 - LV_CPICKER_DEF_QF; /*Default*/
+
+    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;
+
+    /*if the mask does not include the center of the object
+    * redrawing all the wheel is not necessary;
+    * only a given angular range
+    */
+    lv_point_t center = {cx, cy};
+    if(!lv_area_is_point_on(mask, &center))
+    {
+        /*get angle from center of object to each corners of the area*/
+        int16_t dr, ur, ul, dl;
+        dr = lv_atan2(mask->x2 - cx, mask->y2 - cy);
+        ur = lv_atan2(mask->x2 - cx, mask->y1 - cy);
+        ul = lv_atan2(mask->x1 - cx, mask->y1 - cy);
+        dl = lv_atan2(mask->x1 - cx, mask->y2 - cy);
+
+        /*check area position from object axis*/
+        bool left = (mask->x2 < cx && mask->x1 < cx) ? true : false;
+        bool onYaxis = (mask->x2 > cx && mask->x1 < cx) ? true : false;
+        bool right = (mask->x2 > cx && mask->x1 > cx) ? true : false;
+        bool top = (mask->y2 < cy && mask->y1 < cy) ? true : false;
+        bool onXaxis = (mask->y2 > cy && mask->y1 < cy) ? true : false;
+        bool bottom = (mask->y2 > cy && mask->y1 > cy) ? true : false;
+
+        /*store angular range*/
+        if(right && bottom) {
+            start_angle = dl;
+            end_angle = ur;
+        } else if(right && onXaxis) {
+            start_angle = dl;
+            end_angle = ul;
+        } else if(right && top)  {
+            start_angle = dr;
+            end_angle = ul;
+        } else if(onYaxis && top) {
+            start_angle = dr;
+            end_angle = dl;
+        } else if(left && top)  {
+            start_angle = ur;
+            end_angle = dl;
+        } else if(left && onXaxis) {
+            start_angle = ur;
+            end_angle = dr;
+        } else if(left && bottom) {
+            start_angle = ul;
+            end_angle = dr;
+        } else if(onYaxis && bottom) {
+            start_angle = ul;
+            end_angle = ur;
+        }
+
+        /*rollover angle*/
+        if(start_angle > end_angle) end_angle += 360;
+
+        /*round to QF factor*/
+        start_angle = (start_angle/LV_CPICKER_DEF_QF) * LV_CPICKER_DEF_QF;
+        end_angle = (end_angle / LV_CPICKER_DEF_QF) * LV_CPICKER_DEF_QF;
+
+        /*shift angle if necessary before adding offset*/
+        if((start_angle - LV_CPICKER_DEF_QF) < 0) {
+            start_angle += 360;
+            end_angle += 360;
+        }
+
+        /*ensure overlapping by adding offset*/
+        start_angle -= LV_CPICKER_DEF_QF;
+        end_angle += LV_CPICKER_DEF_QF;
+    }
+
+    lv_point_t triangle_points[3];
+    lv_style_t style;
+    lv_style_copy(&style, &lv_style_plain);
+    uint16_t i;
+    for(i = start_angle; i <= end_angle; i+= LV_CPICKER_DEF_QF) {
+        style.body.main_color = angle_to_mode_color(cpicker, i);
+        style.body.grad_color = style.body.main_color;
+
+        triangle_points[0].x = cx;
+        triangle_points[0].y = cy;
+
+        triangle_points[1].x = cx + (r * lv_trigo_sin(i) >> LV_TRIGO_SHIFT);
+        triangle_points[1].y = cy + (r * lv_trigo_sin(i + 90) >> 
LV_TRIGO_SHIFT);
+
+        if(i == end_angle || i == (360 - LV_CPICKER_DEF_QF)) {
+            /*the last triangle is drawn without additional overlapping 
pixels*/
+            triangle_points[2].x = cx + (r * lv_trigo_sin(i + 
LV_CPICKER_DEF_QF) >> LV_TRIGO_SHIFT);
+            triangle_points[2].y = cy + (r * lv_trigo_sin(i + 
LV_CPICKER_DEF_QF + 90) >> LV_TRIGO_SHIFT);
+        } else {
+            triangle_points[2].x = cx + (r * lv_trigo_sin(i + 
LV_CPICKER_DEF_QF + TRI_OFFSET) >> LV_TRIGO_SHIFT);
+            triangle_points[2].y = cy + (r * lv_trigo_sin(i + 
LV_CPICKER_DEF_QF + TRI_OFFSET + 90) >> LV_TRIGO_SHIFT);
+        }
+
+        lv_draw_triangle(triangle_points, mask, &style, LV_OPA_COVER);
+    }
+
+    /*Mask out the center area*/
+    const lv_style_t * style_main = lv_cpicker_get_style(cpicker, 
LV_CPICKER_STYLE_MAIN);
+    lv_style_copy(&style, style_main);
+    style.body.radius = LV_RADIUS_CIRCLE;
+    lv_area_t area_mid;
+    lv_area_copy(&area_mid, &cpicker->coords);
+    lv_area_increment(&area_mid, -style_main->line.width);
+
+    lv_draw_rect(&area_mid, mask, &style, opa_scale);
+
+    if(ext->preview) {
+        lv_color_t color = lv_cpicker_get_color(cpicker);
+        style.body.main_color = color;
+        style.body.grad_color = color;
+        lv_area_increment(&area_mid, -style_main->line.width / 2);
+
+        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;
+            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 the inner area is being pressed, go to the next color mode on 
long press*/
+            if(p.x * p.x + p.y * p.y < r_in * r_in) {
+                uint32_t diff = lv_tick_elaps(ext->last_change_time);
+                if(diff > indev->driver.long_press_time && 
!ext->color_mode_fixed) {
+                    next_color_mode(cpicker);
+                    lv_indev_wait_release(lv_indev_get_act());
+                }
+                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;
+        }
+
+        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/scriptsrcs/lvgl/src/lv_objx/lv_cpicker.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_cpicker.h
new file mode 100755
index 0000000..a9feee5
--- /dev/null
+++ b/scriptsrcs/lvgl/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/scriptsrcs/lvgl/src/lv_objx/lv_ddlist.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_ddlist.c
new file mode 100755
index 0000000..22ff7fd
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_ddlist.c
@@ -0,0 +1,1028 @@
+/**
+ * @file lv_ddlist.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+#include "../lv_themes/lv_theme.h"
+#include "../lv_font/lv_symbol_def.h"
+#include "../lv_misc/lv_anim.h"
+#include "../lv_misc/lv_math.h"
+#include <string.h>
+
+/*********************
+ *      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*/
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, 
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);
+static void lv_ddlist_refr_size(lv_obj_t * ddlist, lv_anim_enable_t anim);
+static void lv_ddlist_pos_current_option(lv_obj_t * ddlist);
+static void lv_ddlist_refr_width(lv_obj_t * ddlist);
+#if LV_USE_ANIMATION
+static void lv_ddlist_anim_ready_cb(lv_anim_t * a);
+static void lv_ddlist_anim_finish(lv_obj_t * ddlist);
+static void lv_ddlist_adjust_height(lv_obj_t * ddlist, lv_anim_value_t height);
+#endif
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_signal_cb_t ancestor_scrl_signal;
+static lv_design_cb_t ancestor_design;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a drop down list objects
+ * @param par pointer to an object, it will be the parent of the new drop down 
list
+ * @param copy pointer to a drop down list object, if not NULL then the new 
object will be copied
+ * from it
+ * @return pointer to the created drop down list
+ */
+lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("drop down list create started");
+
+    /*Create the ancestor drop down list*/
+    lv_obj_t * new_ddlist = lv_page_create(par, copy);
+    LV_ASSERT_MEM(new_ddlist);
+    if(new_ddlist == NULL) return NULL;
+
+    if(ancestor_signal == NULL) ancestor_signal = 
lv_obj_get_signal_cb(new_ddlist);
+    if(ancestor_scrl_signal == NULL) ancestor_scrl_signal = 
lv_obj_get_signal_cb(lv_page_get_scrl(new_ddlist));
+    if(ancestor_design == NULL) ancestor_design = 
lv_obj_get_design_cb(new_ddlist);
+
+    /*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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    /*Initialize the allocated 'ext' */
+    ext->label          = 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*/
+    lv_obj_set_signal_cb(new_ddlist, lv_ddlist_signal);
+    lv_obj_set_signal_cb(lv_page_get_scrl(new_ddlist), lv_ddlist_scrl_signal);
+    lv_obj_set_design_cb(new_ddlist, lv_ddlist_design);
+
+    /*Init the new drop down list drop down list*/
+    if(copy == NULL) {
+        lv_page_set_anim_time(new_ddlist, LV_DDLIST_DEF_ANIM_TIME);
+
+        lv_obj_t * scrl = lv_page_get_scrl(new_ddlist);
+        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);
+        lv_page_set_style(new_ddlist, LV_PAGE_STYLE_SCRL, 
&lv_style_transp_tight);
+
+        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) {
+            lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_BG, 
th->style.ddlist.bg);
+            lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SEL, 
th->style.ddlist.sel);
+            lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SB, 
th->style.ddlist.sb);
+        } else {
+            lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_BG, 
&lv_style_pretty);
+            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 {
+        lv_ddlist_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->label                 = lv_label_create(new_ddlist, 
copy_ext->label);
+        lv_label_set_text(ext->label, lv_label_get_text(copy_ext->label));
+        ext->sel_opt_id     = copy_ext->sel_opt_id;
+        ext->sel_opt_id_ori = copy_ext->sel_opt_id;
+        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->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));
+        lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SB, 
lv_ddlist_get_style(copy, LV_DDLIST_STYLE_SB));
+        lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SEL, 
lv_ddlist_get_style(copy, LV_DDLIST_STYLE_SEL));
+
+    }
+
+    LV_LOG_INFO("drop down list created");
+
+    return new_ddlist;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the options in a drop down list from a string
+ * @param ddlist pointer to drop down list object
+ * @param options a string with '\n' separated options. E.g. "One\nTwo\nThree"
+ */
+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*/
+    ext->option_cnt = 0;
+    uint16_t i;
+    for(i = 0; options[i] != '\0'; i++) {
+        if(options[i] == '\n') ext->option_cnt++;
+    }
+    ext->option_cnt++; /*Last option has no `\n`*/
+    ext->sel_opt_id     = 0;
+    ext->sel_opt_id_ori = 0;
+
+    lv_label_set_text(ext->label, options);
+
+    lv_ddlist_refr_width(ddlist);
+
+    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, false);
+}
+
+/**
+ * Set the selected option
+ * @param ddlist pointer to drop down list object
+ * @param sel_opt id of the selected option (0 ... number of option - 1);
+ */
+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;
+
+    ext->sel_opt_id     = sel_opt < ext->option_cnt ? sel_opt : 
ext->option_cnt - 1;
+    ext->sel_opt_id_ori = ext->sel_opt_id;
+    /*Move the list to show the current option*/
+    if(ext->opened == 0) {
+        lv_ddlist_pos_current_option(ddlist);
+    } else {
+        lv_obj_invalidate(ddlist);
+    }
+}
+
+/**
+ * Set a fix height for the drop down list
+ * If 0 then the opened ddlist will be auto. sized else the set height will be 
applied.
+ * @param ddlist pointer to a drop down list
+ * @param h the height when the list is opened (0: auto size)
+ */
+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;
+
+    ext->fix_height = h;
+
+    lv_ddlist_refr_size(ddlist, false);
+}
+
+/**
+ * Set a fix width for the drop down list
+ * @param ddlist pointer to a drop down list
+ * @param w the width when the list is opened (0: auto size)
+ */
+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));
+    } else {
+        lv_cont_set_fit2(ddlist, LV_FIT_NONE, lv_cont_get_fit_bottom(ddlist));
+        lv_obj_set_width(ddlist, w);
+    }
+
+    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;
+    }
+
+    lv_ddlist_refr_size(ddlist, false);
+}
+
+/**
+ * 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)
+{
+    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
+    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+
+    /*Set the flag*/
+    ext->draw_arrow = en ? 1 : 0;
+}
+
+/**
+ * Leave the list opened when a new value is selected
+ * @param ddlist pointer to drop down list object
+ * @param en enable/disable "stay open" feature
+ */
+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*/
+    ext->stay_open = en ? 1 : 0;
+}
+
+/**
+ * Set a style of a drop down list
+ * @param ddlist pointer to a drop down list object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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) {
+        case LV_DDLIST_STYLE_BG:
+            lv_page_set_style(ddlist, LV_PAGE_STYLE_BG, style);
+            lv_ddlist_refr_width(ddlist);
+            break;
+        case LV_DDLIST_STYLE_SB: lv_page_set_style(ddlist, LV_PAGE_STYLE_SB, 
style); break;
+        case LV_DDLIST_STYLE_SEL:
+            ext->sel_style  = style;
+            lv_obj_t * scrl = lv_page_get_scrl(ddlist);
+            lv_obj_refresh_ext_draw_pad(scrl); /*Because of the wider selected 
rectangle*/
+            break;
+    }
+}
+
+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);
+    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;
+    }
+}
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the options of a drop down list
+ * @param ddlist pointer to drop down list object
+ * @return the options separated by '\n'-s (E.g. "Option1\nOption2\nOption3")
+ */
+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);
+}
+
+/**
+ * Get the selected option
+ * @param ddlist pointer to drop down list object
+ * @return id of the selected option (0 ... number of option - 1);
+ */
+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;
+}
+
+/**
+ * Get the current selected option as a string
+ * @param ddlist pointer to ddlist object
+ * @param buf pointer to an array to store the string
+ * @param buf_size size of `buf` in bytes. 0: to ignore it.
+ */
+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);
+    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++;
+    }
+
+    uint16_t c;
+    for(c = 0; opt_txt[i] != '\n' && i < txt_len; c++, i++) {
+        if(buf_size && c >= buf_size - 1) {
+            LV_LOG_WARN("lv_ddlist_get_selected_str: the buffer was too small")
+            break;
+        }
+        buf[c] = opt_txt[i];
+    }
+
+    buf[c] = '\0';
+}
+
+/**
+ * Get the fix height value.
+ * @param ddlist pointer to a drop down list object
+ * @return the height if the ddlist is opened (0: auto size)
+ */
+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
+ * @param ddlist pointer to drop down list object
+ */
+bool lv_ddlist_get_draw_arrow(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;
+}
+
+/**
+ * Get whether the drop down list stay open after selecting a  value or not
+ * @param ddlist pointer to drop down list object
+ */
+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;
+}
+
+/**
+ * Get a style of a drop down list
+ * @param ddlist pointer to a drop down list object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+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);
+
+    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;
+    }
+
+    /*To avoid warning*/
+    return NULL;
+}
+
+lv_label_align_t lv_ddlist_get_align(const lv_obj_t * ddlist)
+{
+    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+
+    return lv_label_get_align(ext->label);
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Open the drop down list with or without animation
+ * @param ddlist pointer to drop down list object
+ * @param anim_en LV_ANIM_EN: use animation; LV_ANIM_OFF: not use animations
+ */
+void lv_ddlist_open(lv_obj_t * ddlist, lv_anim_enable_t anim)
+{
+#if LV_USE_ANIMATION == 0
+    anim = false;
+#endif
+    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+    ext->opened           = 1;
+    lv_obj_set_drag(lv_page_get_scrl(ddlist), true);
+    lv_ddlist_refr_size(ddlist, anim);
+}
+
+/**
+ * Close (Collapse) the drop down list
+ * @param ddlist pointer to drop down list object
+ * @param anim_en LV_ANIM_ON: use animation; LV_ANIM_OFF: not use animations
+ */
+void lv_ddlist_close(lv_obj_t * ddlist, lv_anim_enable_t anim)
+{
+#if LV_USE_ANIMATION == 0
+    anim = false;
+#endif
+    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+    ext->opened           = 0;
+    lv_obj_set_drag(lv_page_get_scrl(ddlist), false);
+    lv_ddlist_refr_size(ddlist, anim);
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Get the text alignment flag for a drop down list.
+ * @param ddlist drop down list
+ * @return text alignment flag
+ */
+static lv_txt_flag_t lv_ddlist_get_txt_flag(const lv_obj_t * ddlist)
+{
+    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+
+    /*The label might be already deleted so just return with some value*/
+    if(!ext->label) return LV_TXT_FLAG_CENTER;
+
+    lv_label_align_t align = lv_label_get_align(ext->label);
+
+    switch(align) {
+        default:
+        case LV_LABEL_ALIGN_LEFT: return LV_TXT_FLAG_NONE;
+        case LV_LABEL_ALIGN_CENTER: return LV_TXT_FLAG_CENTER;
+        case LV_LABEL_ALIGN_RIGHT: return LV_TXT_FLAG_RIGHT;
+    }
+}
+
+/**
+ * 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 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'
+ */
+static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, 
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);
+    }
+    /*Draw the object*/
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+        ancestor_design(ddlist, mask, mode);
+
+        lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+        lv_opa_t opa_scale    = lv_obj_get_opa_scale(ddlist);
+        /*If the list is opened draw a rectangle under the selected item*/
+        if(ext->opened != 0 || ext->force_sel) {
+            const lv_style_t * style = lv_ddlist_get_style(ddlist, 
LV_DDLIST_STYLE_BG);
+            const lv_font_t * font   = style->text.font;
+            lv_coord_t font_h        = lv_font_get_line_height(font);
+
+            /*Draw the selected*/
+            lv_area_t rect_area;
+            rect_area.y1 = ext->label->coords.y1;
+            rect_area.y1 += ext->sel_opt_id * (font_h + 
style->text.line_space);
+            rect_area.y1 -= style->text.line_space / 2;
+
+            rect_area.y2 = rect_area.y1 + font_h + style->text.line_space - 1;
+            rect_area.x1 = ddlist->coords.x1;
+            rect_area.x2 = ddlist->coords.x2;
+
+            lv_draw_rect(&rect_area, mask, ext->sel_style, opa_scale);
+        }
+    }
+    /*Post draw when the children are drawn*/
+    else if(mode == LV_DESIGN_DRAW_POST) {
+        /*Redraw the text on the selected area with a different color*/
+        lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+        lv_opa_t opa_scale    = lv_obj_get_opa_scale(ddlist);
+
+        /*Redraw only in opened state*/
+        if(ext->opened || ext->force_sel) {
+            const lv_style_t * style = lv_ddlist_get_style(ddlist, 
LV_DDLIST_STYLE_BG);
+            const lv_font_t * font   = style->text.font;
+            lv_coord_t font_h        = lv_font_get_line_height(font);
+
+            lv_area_t area_sel;
+            area_sel.y1 = ext->label->coords.y1;
+            area_sel.y1 += ext->sel_opt_id * (font_h + style->text.line_space);
+            area_sel.y1 -= style->text.line_space / 2;
+
+            area_sel.y2 = area_sel.y1 + font_h + style->text.line_space - 1;
+            area_sel.x1 = ddlist->coords.x1;
+            area_sel.x2 = ddlist->coords.x2;
+            lv_area_t mask_sel;
+            bool area_ok;
+            area_ok = lv_area_intersect(&mask_sel, mask, &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;
+                lv_style_copy(&new_style, style);
+                new_style.text.color = sel_style->text.color;
+                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, NULL, NULL, 
lv_obj_get_base_dir(ddlist));
+            }
+        }
+
+        /*Add a down symbol in ddlist when closed*/
+        else {
+            /*Draw a arrow in ddlist if enabled*/
+            if(ext->draw_arrow) {
+                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);
+                lv_coord_t font_h            = lv_font_get_line_height(font);
+                lv_style_t new_style;
+                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;
+                lv_coord_t arrow_width = lv_txt_get_width(LV_SYMBOL_DOWN, 
(uint16_t)strlen(LV_SYMBOL_DOWN), sel_style->text.font, 0, 0);
+                if(lv_label_get_align(ext->label) != LV_LABEL_ALIGN_RIGHT) {
+                    area_arrow.x2 = ddlist->coords.x2 - 
style->body.padding.right;
+                    area_arrow.x1 = area_arrow.x2 - arrow_width;
+                } else {
+                    area_arrow.x1 = ddlist->coords.x1 + 
style->body.padding.left;
+                    area_arrow.x2 = area_arrow.x1 + arrow_width;
+                }
+
+                area_arrow.y1 = ddlist->coords.y1 + style->text.line_space;
+                area_arrow.y2 = area_arrow.y1 + font_h;
+
+                lv_area_t mask_arrow;
+                bool area_ok;
+                area_ok = lv_area_intersect(&mask_arrow, mask, &area_arrow);
+                if(area_ok) {
+                    /*Use a down arrow in ddlist, you can replace it with 
yourcustom symbol*/
+                    lv_draw_label(&area_arrow, &mask_arrow, &new_style, 
opa_scale, LV_SYMBOL_DOWN, 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);
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the drop down list
+ * @param ddlist pointer to a drop down list 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_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res;
+    /* 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;
+    } else if(sign == LV_SIGNAL_FOCUS) {
+#if LV_USE_GROUP
+        lv_group_t * g             = lv_obj_get_group(ddlist);
+        bool editing               = lv_group_get_editing(g);
+        lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
+
+        /*Encoders need special handling*/
+        if(indev_type == LV_INDEV_TYPE_ENCODER) {
+            /*Open the list if editing*/
+            if(editing) {
+                ext->opened         = true;
+                ext->sel_opt_id_ori = ext->sel_opt_id;
+                lv_ddlist_refr_size(ddlist, true);
+            }
+            /*Close the lift if navigating*/
+            else {
+                ext->opened     = false;
+                ext->sel_opt_id = ext->sel_opt_id_ori;
+                lv_ddlist_refr_size(ddlist, true);
+            }
+        } else {
+            /*Open the list if closed*/
+            if(!ext->opened) {
+                ext->opened         = true;
+                ext->sel_opt_id_ori = ext->sel_opt_id; /*Save the current 
value. Used to revert this
+                                                          state if ENER wont't 
be pressed*/
+                lv_ddlist_refr_size(ddlist, true);
+            }
+        }
+#endif
+    } else if(sign == LV_SIGNAL_RELEASED) {
+        release_handler(ddlist);
+    } else if(sign == LV_SIGNAL_DEFOCUS) {
+        if(ext->opened) {
+            ext->opened     = false;
+            ext->sel_opt_id = ext->sel_opt_id_ori;
+            lv_ddlist_refr_size(ddlist, true);
+        }
+    } else if(sign == LV_SIGNAL_CONTROL) {
+        char c = *((char *)param);
+        if(c == LV_KEY_RIGHT || c == LV_KEY_DOWN) {
+            if(!ext->opened) {
+                ext->opened = 1;
+                lv_ddlist_refr_size(ddlist, true);
+            }
+
+            if(ext->sel_opt_id + 1 < ext->option_cnt) {
+                ext->sel_opt_id++;
+                lv_ddlist_pos_current_option(ddlist);
+                lv_obj_invalidate(ddlist);
+            }
+        } else if(c == LV_KEY_LEFT || c == LV_KEY_UP) {
+            if(!ext->opened) {
+                ext->opened = 1;
+                lv_ddlist_refr_size(ddlist, true);
+            }
+            if(ext->sel_opt_id > 0) {
+                ext->sel_opt_id--;
+                lv_ddlist_pos_current_option(ddlist);
+                lv_obj_invalidate(ddlist);
+            }
+        } else if(c == LV_KEY_ESC) {
+            if(ext->opened) {
+                ext->opened     = 0;
+                ext->sel_opt_id = ext->sel_opt_id_ori;
+                lv_ddlist_refr_size(ddlist, true);
+            }
+        }
+    } else if(sign == LV_SIGNAL_GET_EDITABLE) {
+        bool * editable = (bool *)param;
+        *editable       = true;
+    }
+
+    return res;
+}
+
+/**
+ * Signal function of the drop down list's scrollable part
+ * @param scrl pointer to a drop down list's scrollable part
+ * @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_ddlist_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void 
* param)
+{
+    lv_res_t res;
+
+    /* Include the ancient signal function */
+    res = ancestor_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 * ddlist = lv_obj_get_parent(scrl);
+
+    if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
+        /*TODO review this*/
+        /* Because of the wider selected rectangle ext. size
+         * In this way by dragging the scrollable part the wider rectangle 
area can be redrawn too*/
+        const lv_style_t * style = lv_ddlist_get_style(ddlist, 
LV_DDLIST_STYLE_BG);
+        lv_coord_t hpad          = LV_MATH_MAX(style->body.padding.left, 
style->body.padding.right);
+        if(scrl->ext_draw_pad < hpad) scrl->ext_draw_pad = hpad;
+    } else if(sign == LV_SIGNAL_RELEASED) {
+        if(lv_indev_is_dragging(lv_indev_get_act()) == false) {
+            release_handler(ddlist);
+        }
+    } else if(sign == LV_SIGNAL_CLEANUP) {
+        lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+        ext->label            = NULL; /*The label is already deleted*/
+    }
+
+    return res;
+}
+
+/**
+ * Called when a drop down list is released to open it or set new option
+ * @param ddlist pointer to a drop down list object
+ * @return LV_ACTION_RES_INV if the ddlist it deleted in the user callback 
else LV_ACTION_RES_OK
+ */
+static lv_res_t release_handler(lv_obj_t * ddlist)
+{
+    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+
+    if(ext->opened == 0) { /*Open the list*/
+        ext->opened = 1;
+        lv_obj_set_drag(lv_page_get_scrl(ddlist), true);
+        lv_ddlist_refr_size(ddlist, true);
+    } else {
+
+        lv_indev_t * indev = lv_indev_get_act();
+#if LV_USE_GROUP
+        /*Leave edit mode once a new item is selected*/
+        if(lv_indev_get_type(indev) == LV_INDEV_TYPE_ENCODER) {
+            ext->sel_opt_id_ori = ext->sel_opt_id;
+            lv_group_t * g      = lv_obj_get_group(ddlist);
+            if(lv_group_get_editing(g)) {
+                lv_group_set_editing(g, false);
+            }
+        }
+#endif
+
+        /*Search the clicked option (For KEYPAD and ENCODER the new value 
should be already set)*/
+        if(lv_indev_get_type(indev) == LV_INDEV_TYPE_POINTER || 
lv_indev_get_type(indev) == LV_INDEV_TYPE_BUTTON) {
+            lv_point_t p;
+            lv_indev_get_point(indev, &p);
+            p.y -= ext->label->coords.y1;
+            p.x -= ext->label->coords.x1;
+            uint16_t letter_i;
+            letter_i = lv_label_get_letter_on(ext->label, &p);
+
+            uint16_t new_opt  = 0;
+            const char * txt  = lv_label_get_text(ext->label);
+            uint32_t i        = 0;
+            uint32_t i_prev   = 0;
+
+            uint32_t letter_cnt = 0;
+            uint32_t letter;
+            for(letter_cnt = 0; letter_cnt < letter_i; letter_cnt++) {
+                letter = lv_txt_encoded_next(txt, &i);
+                /*Count he lines to reach the clicked letter. But ignore the 
last '\n' because it
+                 * still belongs to the clicked line*/
+                if(letter == '\n' && i_prev != letter_i) new_opt++;
+                i_prev = i;
+            }
+
+            ext->sel_opt_id     = new_opt;
+            ext->sel_opt_id_ori = ext->sel_opt_id;
+        }
+
+        uint32_t id  = ext->sel_opt_id; /*Just to use uint32_t in event data*/
+        lv_res_t res = lv_event_send(ddlist, LV_EVENT_VALUE_CHANGED, &id);
+        if(res != LV_RES_OK) return res;
+
+        if(ext->stay_open == 0) {
+            ext->opened = 0;
+            lv_obj_set_drag(lv_page_get_scrl(ddlist), false);
+            lv_ddlist_refr_size(ddlist, true);
+        } else {
+            lv_obj_invalidate(ddlist);
+        }
+    }
+
+    return LV_RES_OK;
+}
+
+/**
+ * Refresh the size of drop down list according to its status (open or closed)
+ * @param ddlist pointer to a drop down list object
+ * @param anim Change the size (open/close) with or without animation 
(true/false)
+ */
+static void lv_ddlist_refr_size(lv_obj_t * ddlist, lv_anim_enable_t anim)
+{
+#if LV_USE_ANIMATION == 0
+    anim = false;
+#endif
+    lv_ddlist_ext_t * ext    = lv_obj_get_ext_attr(ddlist);
+    const lv_style_t * style = lv_obj_get_style(ddlist);
+    lv_coord_t new_height;
+
+    /*Open the list*/
+    if(ext->opened) {
+        if(ext->fix_height == 0) {
+            new_height =
+                lv_obj_get_height(lv_page_get_scrl(ddlist)) + 
style->body.padding.top + style->body.padding.bottom;
+        } else {
+            new_height = ext->fix_height;
+        }
+
+    }
+    /*Close the list*/
+    else {
+        const lv_font_t * font         = style->text.font;
+        const lv_style_t * label_style = lv_obj_get_style(ext->label);
+        lv_coord_t font_h              = lv_font_get_line_height(font);
+        new_height                     = font_h + 2 * 
label_style->text.line_space;
+
+        lv_page_set_sb_mode(ddlist, LV_SB_MODE_HIDE);
+    }
+
+    if(anim == LV_ANIM_OFF) {
+        lv_obj_set_height(ddlist, new_height);
+        lv_ddlist_pos_current_option(ddlist);
+        if(ext->opened) lv_page_set_sb_mode(ddlist, LV_SB_MODE_UNHIDE);
+#if LV_USE_ANIMATION
+        lv_anim_del(ddlist, (lv_anim_exec_xcb_t)lv_ddlist_adjust_height); /*If 
an animation is in progress then
+                                                                 it will 
overwrite this changes*/
+
+        /*Force animation complete to fix highlight selection*/
+        lv_ddlist_anim_finish(ddlist);
+    } else {
+        /*Run the animation only if the the size will be different*/
+        if(lv_obj_get_height(ddlist) != new_height) {
+            lv_anim_t a;
+            a.var            = ddlist;
+            a.start          = lv_obj_get_height(ddlist);
+            a.end            = new_height;
+            a.exec_cb        = (lv_anim_exec_xcb_t)lv_ddlist_adjust_height;
+            a.path_cb        = lv_anim_path_linear;
+            a.ready_cb       = lv_ddlist_anim_ready_cb;
+            a.act_time       = 0;
+            a.time           = lv_ddlist_get_anim_time(ddlist);
+            a.playback       = 0;
+            a.playback_pause = 0;
+            a.repeat         = 0;
+            a.repeat_pause   = 0;
+
+            ext->force_sel = 1; /*Keep the list item selected*/
+            lv_anim_create(&a);
+        }
+#endif
+    }
+}
+
+#if LV_USE_ANIMATION
+/**
+ * Position the list and remove the selection highlight if it's closed.
+ * Called at end of list animation.
+ * @param a pointer to the animation
+ */
+static void lv_ddlist_anim_ready_cb(lv_anim_t * a)
+{
+    lv_obj_t * ddlist = a->var;
+    lv_ddlist_anim_finish(ddlist);
+}
+
+/**
+ * Clean up after the open animation
+ * @param ddlist
+ */
+static void lv_ddlist_anim_finish(lv_obj_t * ddlist)
+{
+    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+
+    lv_ddlist_pos_current_option(ddlist);
+    ext->force_sel = 0; /*Turn off drawing of selection*/
+    if(ext->opened) lv_page_set_sb_mode(ddlist, LV_SB_MODE_UNHIDE);
+}
+
+/**
+ * Adjusts the ddlist's height and then positions the option within it's new 
height.
+ * This keeps the option visible during animation.
+ * @param ddlist Drop down list object
+ * @param height New drop down list height
+ */
+static void lv_ddlist_adjust_height(lv_obj_t * ddlist, lv_anim_value_t height)
+{
+    lv_obj_set_height(ddlist, height);
+    lv_ddlist_pos_current_option(ddlist);
+}
+#endif
+
+/**
+ * Set the position of list when it is closed to show the selected item
+ * @param ddlist pointer to a drop down list
+ */
+static void lv_ddlist_pos_current_option(lv_obj_t * ddlist)
+{
+    lv_ddlist_ext_t * ext          = lv_obj_get_ext_attr(ddlist);
+    const lv_style_t * style       = lv_obj_get_style(ddlist);
+    const lv_font_t * font         = style->text.font;
+    lv_coord_t font_h              = lv_font_get_line_height(font);
+    const lv_style_t * label_style = lv_obj_get_style(ext->label);
+    lv_obj_t * scrl                = lv_page_get_scrl(ddlist);
+
+    lv_coord_t h = lv_obj_get_height(ddlist);
+    lv_coord_t line_y1 =
+        ext->sel_opt_id * (font_h + label_style->text.line_space) + 
ext->label->coords.y1 - scrl->coords.y1;
+
+    lv_obj_set_y(scrl, -line_y1 + (h - font_h) / 2);
+    lv_obj_invalidate(ddlist);
+}
+
+/**
+ * Be sure the width of the scrollable exactly fits the ddlist
+ * @param ddlist pointer to a ddlist
+ */
+static void lv_ddlist_refr_width(lv_obj_t * ddlist)
+{
+    lv_ddlist_ext_t * ext          = lv_obj_get_ext_attr(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);
+
+    /*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/scriptsrcs/lvgl/src/lv_objx/lv_ddlist.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_ddlist.h
new file mode 100755
index 0000000..ee6c1f7
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_ddlist.h
@@ -0,0 +1,269 @@
+/**
+ * @file lv_ddlist.h
+ *
+ */
+
+#ifndef LV_DDLIST_H
+#define LV_DDLIST_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_DDLIST != 0
+
+/*Testing of dependencies*/
+#if LV_USE_PAGE == 0
+#error "lv_ddlist: lv_page is required. Enable it in lv_conf.h (LV_USE_PAGE  
1) "
+#endif
+
+#if LV_USE_LABEL == 0
+#error "lv_ddlist: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL  
1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "../lv_objx/lv_page.h"
+#include "../lv_objx/lv_label.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+/*Data of drop down list*/
+typedef struct
+{
+    lv_page_ext_t page; /*Ext. of ancestor*/
+    /*New data for this type */
+    lv_obj_t * label;             /*Label for the options*/
+    const lv_style_t * sel_style; /*Style of the selected option*/
+    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;
+
+enum {
+    LV_DDLIST_STYLE_BG,
+    LV_DDLIST_STYLE_SEL,
+    LV_DDLIST_STYLE_SB,
+};
+typedef uint8_t lv_ddlist_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+/**
+ * Create a drop down list objects
+ * @param par pointer to an object, it will be the parent of the new drop down 
list
+ * @param copy pointer to a drop down list object, if not NULL then the new 
object will be copied
+ * from it
+ * @return pointer to the created drop down list
+ */
+lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the options in a drop down list from a string
+ * @param ddlist pointer to drop down list object
+ * @param options a string with '\n' separated options. E.g. "One\nTwo\nThree"
+ */
+void lv_ddlist_set_options(lv_obj_t * ddlist, const char * options);
+
+/**
+ * Set the selected option
+ * @param ddlist pointer to drop down list object
+ * @param sel_opt id of the selected option (0 ... number of option - 1);
+ */
+void lv_ddlist_set_selected(lv_obj_t * ddlist, uint16_t sel_opt);
+
+/**
+ * Set a fix height for the drop down list
+ * If 0 then the opened ddlist will be auto. sized else the set height will be 
applied.
+ * @param ddlist pointer to a drop down list
+ * @param h the height when the list is opened (0: auto size)
+ */
+void lv_ddlist_set_fix_height(lv_obj_t * ddlist, lv_coord_t h);
+
+/**
+ * Set a fix width for the drop down list
+ * @param ddlist pointer to a drop down list
+ * @param w the width when the list is opened (0: auto size)
+ */
+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);
+
+/**
+ * Leave the list opened when a new value is selected
+ * @param ddlist pointer to drop down list object
+ * @param en enable/disable "stay open" feature
+ */
+void lv_ddlist_set_stay_open(lv_obj_t * ddlist, bool en);
+
+/**
+ * Set the scroll bar mode of a drop down list
+ * @param ddlist pointer to a drop down list object
+ * @param sb_mode the new mode from 'lv_page_sb_mode_t' enum
+ */
+static inline void lv_ddlist_set_sb_mode(lv_obj_t * ddlist, lv_sb_mode_t mode)
+{
+    lv_page_set_sb_mode(ddlist, mode);
+}
+/**
+ * Set the open/close animation time.
+ * @param ddlist pointer to a drop down list
+ * @param anim_time: open/close animation time [ms]
+ */
+static inline void lv_ddlist_set_anim_time(lv_obj_t * ddlist, uint16_t 
anim_time)
+{
+    lv_page_set_anim_time(ddlist, anim_time);
+}
+
+/**
+ * Set a style of a drop down list
+ * @param ddlist pointer to a drop down list object
+ * @param type which style should be set
+ * @param style pointer to a style
+ *  */
+void lv_ddlist_set_style(lv_obj_t * ddlist, lv_ddlist_style_t type, const 
lv_style_t * style);
+
+/**
+ * Set the alignment of the labels in a drop down list
+ * @param ddlist pointer to a drop down list object
+ * @param align alignment of labels
+ */
+void lv_ddlist_set_align(lv_obj_t * ddlist, lv_label_align_t align);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the options of a drop down list
+ * @param ddlist pointer to drop down list object
+ * @return the options separated by '\n'-s (E.g. "Option1\nOption2\nOption3")
+ */
+const char * lv_ddlist_get_options(const lv_obj_t * ddlist);
+
+/**
+ * Get the selected option
+ * @param ddlist pointer to drop down list object
+ * @return id of the selected option (0 ... number of option - 1);
+ */
+uint16_t lv_ddlist_get_selected(const lv_obj_t * ddlist);
+
+/**
+ * Get the current selected option as a string
+ * @param ddlist pointer to ddlist object
+ * @param buf pointer to an array to store the string
+ * @param buf_size size of `buf` in bytes. 0: to ignore it.
+ */
+void lv_ddlist_get_selected_str(const lv_obj_t * ddlist, char * buf, uint16_t 
buf_size);
+
+/**
+ * Get the fix height value.
+ * @param ddlist pointer to a drop down list object
+ * @return the height if the ddlist is opened (0: auto size)
+ */
+lv_coord_t lv_ddlist_get_fix_height(const lv_obj_t * ddlist);
+
+/**
+ * Get arrow draw in a drop down list
+ * @param ddlist pointer to drop down list object
+ */
+bool lv_ddlist_get_draw_arrow(lv_obj_t * ddlist);
+
+/**
+ * Get whether the drop down list stay open after selecting a  value or not
+ * @param ddlist pointer to drop down list object
+ */
+bool lv_ddlist_get_stay_open(lv_obj_t * ddlist);
+
+/**
+ * Get the scroll bar mode of a drop down list
+ * @param ddlist pointer to a  drop down list object
+ * @return scrollbar mode from 'lv_page_sb_mode_t' enum
+ */
+static inline lv_sb_mode_t lv_ddlist_get_sb_mode(const lv_obj_t * ddlist)
+{
+    return lv_page_get_sb_mode(ddlist);
+}
+
+/**
+ * Get the open/close animation time.
+ * @param ddlist pointer to a drop down list
+ * @return open/close animation time [ms]
+ */
+static inline uint16_t lv_ddlist_get_anim_time(const lv_obj_t * ddlist)
+{
+    return lv_page_get_anim_time(ddlist);
+}
+
+/**
+ * Get a style of a drop down list
+ * @param ddlist pointer to a drop down list object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+const lv_style_t * lv_ddlist_get_style(const lv_obj_t * ddlist, 
lv_ddlist_style_t type);
+
+/**
+ * Get the alignment of the labels in a drop down list
+ * @param ddlist pointer to a drop down list object
+ * @return alignment of labels
+ */
+lv_label_align_t lv_ddlist_get_align(const lv_obj_t * ddlist);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Open the drop down list with or without animation
+ * @param ddlist pointer to drop down list object
+ * @param anim_en LV_ANIM_ON: use animation; LV_ANOM_OFF: not use animations
+ */
+void lv_ddlist_open(lv_obj_t * ddlist, lv_anim_enable_t anim);
+
+/**
+ * Close (Collapse) the drop down list
+ * @param ddlist pointer to drop down list object
+ * @param anim_en LV_ANIM_ON: use animation; LV_ANOM_OFF: not use animations
+ */
+void lv_ddlist_close(lv_obj_t * ddlist, lv_anim_enable_t anim);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_DDLIST*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_DDLIST_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_gauge.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_gauge.c
new file mode 100755
index 0000000..7191d83
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_gauge.c
@@ -0,0 +1,473 @@
+/**
+ * @file lv_gauge.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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 <stdio.h>
+#include <string.h>
+
+/*********************
+ *      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
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_gauge_design(lv_obj_t * gauge, const lv_area_t * mask, 
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 VARIABLES
+ **********************/
+static lv_design_cb_t ancestor_design;
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a gauge objects
+ * @param par pointer to an object, it will be the parent of the new gauge
+ * @param copy pointer to a gauge object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created gauge
+ */
+lv_obj_t * lv_gauge_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("gauge create started");
+
+    /*Create the ancestor gauge*/
+    lv_obj_t * new_gauge = lv_lmeter_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) 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;
+    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);
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_gauge, lv_gauge_signal);
+    lv_obj_set_design_cb(new_gauge, lv_gauge_design);
+
+    /*Init the new gauge gauge*/
+    if(copy == NULL) {
+        lv_gauge_set_scale(new_gauge, LV_GAUGE_DEF_ANGLE, 
LV_GAUGE_DEF_LINE_COUNT, LV_GAUGE_DEF_LABEL_COUNT);
+        lv_gauge_set_needle_count(new_gauge, 1, NULL);
+        lv_gauge_set_critical_value(new_gauge, 80);
+        lv_obj_set_size(new_gauge, 2 * LV_DPI, 2 * LV_DPI);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_gauge_set_style(new_gauge, LV_GAUGE_STYLE_MAIN, 
th->style.gauge);
+        } else {
+            lv_gauge_set_style(new_gauge, LV_GAUGE_STYLE_MAIN, 
&lv_style_pretty_color);
+        }
+    }
+    /*Copy an existing gauge*/
+    else {
+        lv_gauge_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        lv_gauge_set_needle_count(new_gauge, copy_ext->needle_count, 
copy_ext->needle_colors);
+
+        uint8_t i;
+        for(i = 0; i < ext->needle_count; i++) {
+            ext->values[i] = copy_ext->values[i];
+        }
+        ext->label_count = copy_ext->label_count;
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_gauge);
+    }
+
+    LV_LOG_INFO("gauge created");
+
+    return new_gauge;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the number of needles
+ * @param gauge pointer to gauge object
+ * @param needle_cnt new count of needles
+ * @param colors an array of colors for needles (with 'num' elements)
+ */
+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) {
+        if(ext->values != NULL) {
+            lv_mem_free(ext->values);
+            ext->values = NULL;
+        }
+
+        ext->values = lv_mem_realloc(ext->values, needle_cnt * 
sizeof(int16_t));
+        LV_ASSERT_MEM(ext->values);
+        if(ext->values == NULL) return;
+
+        int16_t min = lv_gauge_get_min_value(gauge);
+        uint8_t n;
+        for(n = ext->needle_count; n < needle_cnt; n++) {
+            ext->values[n] = min;
+        }
+
+        ext->needle_count = needle_cnt;
+    }
+
+    ext->needle_colors = colors;
+    lv_obj_invalidate(gauge);
+}
+
+/**
+ * Set the value of a needle
+ * @param gauge pointer to a gauge
+ * @param needle_id the id of the needle
+ * @param value the new value
+ */
+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;
+    if(ext->values[needle_id] == value) return;
+
+    int16_t min = lv_gauge_get_min_value(gauge);
+    int16_t max = lv_gauge_get_max_value(gauge);
+
+    if(value > max)
+        value = max;
+    else if(value < min)
+        value = min;
+
+    ext->values[needle_id] = value;
+
+    lv_obj_invalidate(gauge);
+}
+
+/**
+ * Set the scale settings of a gauge
+ * @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
+ * @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);
+    ext->label_count     = label_cnt;
+    lv_obj_invalidate(gauge);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the value of a needle
+ * @param gauge pointer to gauge object
+ * @param needle the id of the needle
+ * @return the value of the needle [min,max]
+ */
+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);
+
+    if(needle >= ext->needle_count) return min;
+
+    return ext->values[needle];
+}
+
+/**
+ * Get the count of needles on a gauge
+ * @param gauge pointer to gauge
+ * @return count of needles
+ */
+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;
+}
+
+/**
+ * Set the number of labels (and the thicker lines too)
+ * @param gauge pointer to a gauge object
+ * @return count of labels
+ */
+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;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_gauge_design(lv_obj_t * gauge, const lv_area_t * mask, 
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;
+    }
+    /*Draw the object*/
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+
+        /* Store the real pointer because of 'lv_group'
+         * If the object is in focus 'lv_obj_get_style()' will give a pointer 
to tmp style
+         * and to the real object style. It is important because of style 
change tricks below*/
+        const lv_style_t * style_ori_p = gauge->style_p;
+        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);
+
+        /*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*/
+
+        /*Temporally modify the line meter to draw longer lines where labels 
are*/
+        lv_style_t style_tmp;
+        lv_style_copy(&style_tmp, style);
+        ext->lmeter.line_cnt         = ext->label_count;                 
/*Only to labels*/
+        style_tmp.body.padding.left  = style_tmp.body.padding.left * 2;  
/*Longer lines*/
+        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*/
+
+        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);
+
+    }
+    /*Post draw when the children are drawn*/
+    else if(mode == LV_DESIGN_DRAW_POST) {
+        ancestor_design(gauge, mask, mode);
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the gauge
+ * @param gauge pointer to a gauge 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_gauge_signal(lv_obj_t * gauge, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res;
+
+    /* 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;
+    }
+
+    return res;
+}
+
+/**
+ * Draw the scale on a gauge
+ * @param gauge pointer to gauge object
+ * @param mask mask of drawing
+ */
+static void lv_gauge_draw_scale(lv_obj_t * gauge, const lv_area_t * mask)
+{
+    char scale_txt[16];
+
+    lv_gauge_ext_t * ext     = lv_obj_get_ext_attr(gauge);
+    const lv_style_t * style = lv_obj_get_style(gauge);
+    lv_opa_t opa_scale       = lv_obj_get_opa_scale(gauge);
+    lv_coord_t r             = lv_obj_get_width(gauge) / 2 - (3 * 
style->body.padding.left) - style->body.padding.inner;
+    lv_coord_t x_ofs         = lv_obj_get_width(gauge) / 2 + gauge->coords.x1;
+    lv_coord_t y_ofs         = lv_obj_get_height(gauge) / 2 + gauge->coords.y1;
+    int16_t scale_angle      = lv_lmeter_get_scale_angle(gauge);
+    uint16_t label_num       = ext->label_count;
+    int16_t angle_ofs        = 90 + (360 - scale_angle) / 2;
+    int16_t min              = lv_gauge_get_min_value(gauge);
+    int16_t max              = lv_gauge_get_max_value(gauge);
+
+    uint8_t i;
+    for(i = 0; i < label_num; i++) {
+        /*Calculate the position a scale label*/
+        int16_t angle = (i * scale_angle) / (label_num - 1) + angle_ofs;
+
+        lv_coord_t y = (int32_t)((int32_t)lv_trigo_sin(angle) * r) / 
LV_TRIGO_SIN_MAX;
+        y += y_ofs;
+
+        lv_coord_t x = (int32_t)((int32_t)lv_trigo_sin(angle + 90) * r) / 
LV_TRIGO_SIN_MAX;
+        x += x_ofs;
+
+        int16_t scale_act = (int32_t)((int32_t)(max - min) * i) / (label_num - 
1);
+        scale_act += min;
+        lv_utils_num_to_str(scale_act, scale_txt);
+
+        lv_area_t label_cord;
+        lv_point_t label_size;
+        lv_txt_get_size(&label_size, scale_txt, style->text.font, 
style->text.letter_space, style->text.line_space,
+                        LV_COORD_MAX, LV_TXT_FLAG_NONE);
+
+        /*Draw the label*/
+        label_cord.x1 = x - label_size.x / 2;
+        label_cord.y1 = y - label_size.y / 2;
+        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, NULL, NULL, lv_obj_get_base_dir(gauge));
+    }
+}
+/**
+ * Draw the needles of a gauge
+ * @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)
+{
+    lv_style_t style_needle;
+    lv_gauge_ext_t * ext     = lv_obj_get_ext_attr(gauge);
+    const lv_style_t * style = lv_gauge_get_style(gauge, LV_GAUGE_STYLE_MAIN);
+    lv_opa_t opa_scale       = lv_obj_get_opa_scale(gauge);
+
+    lv_coord_t r      = lv_obj_get_width(gauge) / 2 - style->body.padding.left;
+    lv_coord_t x_ofs  = lv_obj_get_width(gauge) / 2 + gauge->coords.x1;
+    lv_coord_t y_ofs  = lv_obj_get_height(gauge) / 2 + gauge->coords.y1;
+    uint16_t angle    = lv_lmeter_get_scale_angle(gauge);
+    int16_t angle_ofs = 90 + (360 - angle) / 2;
+    int16_t min       = lv_gauge_get_min_value(gauge);
+    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);
+
+    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);
+
+        int16_t needle_angle_low  = (needle_angle >> 
LV_GAUGE_INTERPOLATE_SHIFT) + angle_ofs;
+        int16_t needle_angle_high = needle_angle_low + 1;
+
+        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;
+
+        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;
+
+        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;
+
+        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;
+
+        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);
+    }
+
+    /*Draw the needle middle area*/
+    lv_style_t style_neddle_mid;
+    lv_style_copy(&style_neddle_mid, &lv_style_plain);
+    style_neddle_mid.body.main_color = style->body.border.color;
+    style_neddle_mid.body.grad_color = style->body.border.color;
+    style_neddle_mid.body.radius     = LV_RADIUS_CIRCLE;
+
+    lv_area_t nm_cord;
+    nm_cord.x1 = x_ofs - style->body.radius;
+    nm_cord.y1 = y_ofs - style->body.radius;
+    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));
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_gauge.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_gauge.h
new file mode 100755
index 0000000..408c112
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_gauge.h
@@ -0,0 +1,233 @@
+/**
+ * @file lv_gauge.h
+ *
+ */
+
+#ifndef LV_GAUGE_H
+#define LV_GAUGE_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_GAUGE != 0
+
+/*Testing of dependencies*/
+#if LV_USE_LMETER == 0
+#error "lv_gauge: lv_lmeter is required. Enable it in lv_conf.h (LV_USE_LMETER 
 1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "lv_lmeter.h"
+#include "lv_label.h"
+#include "lv_line.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/*Data of gauge*/
+typedef struct
+{
+    lv_lmeter_ext_t lmeter; /*Ext. of ancestor*/
+    /*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])*/
+    uint8_t needle_count;             /*Number of needles*/
+    uint8_t label_count;              /*Number of labels on the scale*/
+} lv_gauge_ext_t;
+
+/*Styles*/
+enum {
+    LV_GAUGE_STYLE_MAIN,
+};
+typedef uint8_t lv_gauge_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a gauge objects
+ * @param par pointer to an object, it will be the parent of the new gauge
+ * @param copy pointer to a gauge object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created gauge
+ */
+lv_obj_t * lv_gauge_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the number of needles
+ * @param gauge pointer to gauge object
+ * @param needle_cnt new count of needles
+ * @param colors an array of colors for needles (with 'num' elements)
+ */
+void lv_gauge_set_needle_count(lv_obj_t * gauge, uint8_t needle_cnt, const 
lv_color_t colors[]);
+
+/**
+ * Set the value of a needle
+ * @param gauge pointer to a gauge
+ * @param needle_id the id of the needle
+ * @param value the new value
+ */
+void lv_gauge_set_value(lv_obj_t * gauge, uint8_t needle_id, int16_t value);
+
+/**
+ * Set minimum and the maximum values of a gauge
+ * @param gauge pointer to he gauge object
+ * @param min minimum value
+ * @param max maximum value
+ */
+static inline void lv_gauge_set_range(lv_obj_t * gauge, int16_t min, int16_t 
max)
+{
+    lv_lmeter_set_range(gauge, min, max);
+}
+
+/**
+ * Set a critical value on the scale. After this value 'line.color' scale 
lines will be drawn
+ * @param gauge pointer to a gauge object
+ * @param value the critical value
+ */
+static inline void lv_gauge_set_critical_value(lv_obj_t * gauge, int16_t value)
+{
+    lv_lmeter_set_value(gauge, value);
+}
+
+/**
+ * Set the scale settings of a gauge
+ * @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
+ * @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 the styles of a gauge
+ * @param gauge pointer to a gauge object
+ * @param type which style should be set (can be only `LV_GAUGE_STYLE_MAIN`)
+ * @param style set the style of the gauge
+ *  */
+static inline void lv_gauge_set_style(lv_obj_t * gauge, lv_gauge_style_t type, 
lv_style_t * style)
+{
+    (void)type; /*Unused*/
+    lv_obj_set_style(gauge, style);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the value of a needle
+ * @param gauge pointer to gauge object
+ * @param needle the id of the needle
+ * @return the value of the needle [min,max]
+ */
+int16_t lv_gauge_get_value(const lv_obj_t * gauge, uint8_t needle);
+
+/**
+ * Get the count of needles on a gauge
+ * @param gauge pointer to gauge
+ * @return count of needles
+ */
+uint8_t lv_gauge_get_needle_count(const lv_obj_t * gauge);
+
+/**
+ * Get the minimum value of a gauge
+ * @param gauge pointer to a gauge object
+ * @return the minimum value of the gauge
+ */
+static inline int16_t lv_gauge_get_min_value(const lv_obj_t * lmeter)
+{
+    return lv_lmeter_get_min_value(lmeter);
+}
+
+/**
+ * Get the maximum value of a gauge
+ * @param gauge pointer to a gauge object
+ * @return the maximum value of the gauge
+ */
+static inline int16_t lv_gauge_get_max_value(const lv_obj_t * lmeter)
+{
+    return lv_lmeter_get_max_value(lmeter);
+}
+
+/**
+ * Get a critical value on the scale.
+ * @param gauge pointer to a gauge object
+ * @return the critical value
+ */
+static inline int16_t lv_gauge_get_critical_value(const lv_obj_t * gauge)
+{
+    return lv_lmeter_get_value(gauge);
+}
+
+/**
+ * Set the number of labels (and the thicker lines too)
+ * @param gauge pointer to a gauge object
+ * @return count of labels
+ */
+uint8_t lv_gauge_get_label_count(const lv_obj_t * gauge);
+
+/**
+ * Get the scale number of a gauge
+ * @param gauge pointer to a gauge object
+ * @return number of the scale units
+ */
+static inline uint16_t lv_gauge_get_line_count(const lv_obj_t * gauge)
+{
+    return lv_lmeter_get_line_count(gauge);
+}
+
+/**
+ * Get the scale angle of a gauge
+ * @param gauge pointer to a gauge object
+ * @return angle of the scale
+ */
+static inline uint16_t lv_gauge_get_scale_angle(const lv_obj_t * gauge)
+{
+    return lv_lmeter_get_scale_angle(gauge);
+}
+
+/**
+ * Get the style of a gauge
+ * @param gauge pointer to a gauge object
+ * @param type which style should be get (can be only `LV_GAUGE_STYLE_MAIN`)
+ * @return pointer to the gauge's style
+ */
+static inline const lv_style_t * lv_gauge_get_style(const lv_obj_t * gauge, 
lv_gauge_style_t type)
+{
+    (void)type; /*Unused*/
+    return lv_obj_get_style(gauge);
+}
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_GAUGE*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_GAUGE_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_img.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_img.c
new file mode 100755
index 0000000..55e64e8
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_img.c
@@ -0,0 +1,432 @@
+/**
+ * @file lv_img.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_img.h"
+#if LV_USE_IMG != 0
+
+/*Testing of dependencies*/
+#if LV_USE_LABEL == 0
+#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_log.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_img"
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_img_design(lv_obj_t * img, const lv_area_t * mask, 
lv_design_mode_t mode);
+static lv_res_t lv_img_signal(lv_obj_t * img, lv_signal_t sign, void * param);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create an image objects
+ * @param par pointer to an object, it will be the parent of the new button
+ * @param copy pointer to a image object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created image
+ */
+lv_obj_t * lv_img_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("image create started");
+
+    lv_obj_t * new_img = NULL;
+
+    /*Create a basic object*/
+    new_img = lv_obj_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) 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->auto_size = 1;
+    ext->offset.x  = 0;
+    ext->offset.y  = 0;
+
+    /*Init the new object*/
+    lv_obj_set_signal_cb(new_img, lv_img_signal);
+    lv_obj_set_design_cb(new_img, lv_img_design);
+
+    if(copy == NULL) {
+        lv_obj_set_click(new_img, false);
+        /* Enable auto size for non screens
+         * because image screens are wallpapers
+         * and must be screen sized*/
+        if(par != NULL) {
+            ext->auto_size = 1;
+            lv_obj_set_style(new_img, NULL); /*Inherit the style  by default*/
+        } else {
+            ext->auto_size = 0;
+            lv_obj_set_style(new_img, &lv_style_plain); /*Set a style for 
screens*/
+        }
+    } else {
+        lv_img_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->auto_size          = copy_ext->auto_size;
+        lv_img_set_src(new_img, copy_ext->src);
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_img);
+    }
+
+    LV_LOG_INFO("image created");
+
+    return new_img;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the pixel map to display by the image
+ * @param img pointer to an image object
+ * @param data the image data
+ */
+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);
+
+#if LV_USE_LOG && LV_LOG_LEVEL >= LV_LOG_LEVEL_INFO
+    switch(src_type) {
+        case LV_IMG_SRC_FILE: LV_LOG_TRACE("lv_img_set_src: `LV_IMG_SRC_FILE` 
type found"); break;
+        case LV_IMG_SRC_VARIABLE: LV_LOG_TRACE("lv_img_set_src: 
`LV_IMG_SRC_VARIABLE` type found"); break;
+        case LV_IMG_SRC_SYMBOL: LV_LOG_TRACE("lv_img_set_src: 
`LV_IMG_SRC_SYMBOL` type found"); break;
+        default: LV_LOG_WARN("lv_img_set_src: unknown type");
+    }
+#endif
+
+    /*If the new source type is unknown free the memories of the old source*/
+    if(src_type == LV_IMG_SRC_UNKNOWN) {
+        LV_LOG_WARN("lv_img_set_src: unknown image type");
+        if(ext->src_type == LV_IMG_SRC_SYMBOL || ext->src_type == 
LV_IMG_SRC_FILE) {
+            lv_mem_free(ext->src);
+        }
+        ext->src      = NULL;
+        ext->src_type = LV_IMG_SRC_UNKNOWN;
+        return;
+    }
+
+    lv_img_header_t header;
+    lv_img_decoder_get_info(src_img, &header);
+
+    /*Save the source*/
+    if(src_type == LV_IMG_SRC_VARIABLE) {
+        LV_LOG_INFO("lv_img_set_src:  `LV_IMG_SRC_VARIABLE` type found");
+
+        /*If memory was allocated because of the previous `src_type` then free 
it*/
+        if(ext->src_type == LV_IMG_SRC_FILE || ext->src_type == 
LV_IMG_SRC_SYMBOL) {
+            lv_mem_free(ext->src);
+        }
+        ext->src = 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) {
+            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) {
+                old_src = ext->src;
+            }
+            char * new_str = lv_mem_alloc(strlen(src_img) + 1);
+            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);
+        }
+    }
+
+    if(src_type == LV_IMG_SRC_SYMBOL) {
+        /*`lv_img_dsc_get_info` couldn't set the with and height of a font so 
set it here*/
+        const lv_style_t * style = lv_img_get_style(img, LV_IMG_STYLE_MAIN);
+        lv_point_t size;
+        lv_txt_get_size(&size, src_img, style->text.font, 
style->text.letter_space, style->text.line_space,
+                        LV_COORD_MAX, LV_TXT_FLAG_NONE);
+        header.w = size.x;
+        header.h = size.y;
+    }
+
+    ext->src_type = src_type;
+    ext->w        = header.w;
+    ext->h        = header.h;
+    ext->cf       = header.cf;
+
+    if(lv_img_get_auto_size(img) != false) {
+        lv_obj_set_size(img, ext->w, ext->h);
+    }
+
+    lv_obj_invalidate(img);
+}
+
+/**
+ * Enable the auto size feature.
+ * If enabled the object size will be same as the picture size.
+ * @param img pointer to an image
+ * @param en true: auto size enable, false: auto size disable
+ */
+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);
+}
+
+/**
+ * Set an offset for the source of an image.
+ * so the image will be displayed from the new origin.
+ * @param img pointer to an image
+ * @param x: the new offset along x axis.
+ */
+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);
+    }
+}
+
+/**
+ * Set an offset for the source of an image.
+ * so the image will be displayed from the new origin.
+ * @param img pointer to an image
+ * @param y: the new offset along y axis.
+ */
+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);
+    }
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the source of the image
+ * @param img pointer to an image object
+ * @return the image source (symbol, file name or C array)
+ */
+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;
+}
+
+/**
+ * Get the name of the file set for an image
+ * @param img pointer to an image
+ * @return file name
+ */
+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)
+        return ext->src;
+    else
+        return "";
+}
+
+/**
+ * Get the auto size enable attribute
+ * @param img pointer to an image
+ * @return true: auto size is enabled, false: auto size is disabled
+ */
+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;
+}
+
+/**
+ * Get the offset.x attribute of the img object.
+ * @param img pointer to an image
+ * @return offset.x value.
+ */
+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;
+}
+
+/**
+ * Get the offset.y attribute of the img object.
+ * @param img pointer to an image
+ * @return offset.y value.
+ */
+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;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_img_design(lv_obj_t * img, const lv_area_t * mask, 
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;
+
+        if(ext->cf == LV_IMG_CF_TRUE_COLOR || ext->cf == LV_IMG_CF_RAW) cover 
= lv_area_is_in(mask, &img->coords);
+
+        return cover;
+    } else if(mode == LV_DESIGN_DRAW_MAIN) {
+        if(ext->h == 0 || ext->w == 0) return true;
+        lv_area_t coords;
+        lv_opa_t opa_scale = lv_obj_get_opa_scale(img);
+
+        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;
+
+            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) {
+                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);
+                }
+            }
+        } else if(ext->src_type == LV_IMG_SRC_SYMBOL) {
+            LV_LOG_TRACE("lv_img_design: start to draw symbol");
+            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, 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);
+        }
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the image
+ * @param img pointer to an image 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_img_signal(lv_obj_t * img, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* Include the ancient signal function */
+    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) {
+            lv_mem_free(ext->src);
+            ext->src      = NULL;
+            ext->src_type = LV_IMG_SRC_UNKNOWN;
+        }
+    } else if(sign == LV_SIGNAL_STYLE_CHG) {
+        /*Refresh the file name to refresh the symbol text size*/
+        if(ext->src_type == LV_IMG_SRC_SYMBOL) {
+            lv_img_set_src(img, ext->src);
+        }
+    }
+
+    return res;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_img.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_img.h
new file mode 100755
index 0000000..d1e14d2
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_img.h
@@ -0,0 +1,179 @@
+/**
+ * @file lv_img.h
+ *
+ */
+
+#ifndef LV_IMG_H
+#define LV_IMG_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_IMG != 0
+
+#include "../lv_core/lv_obj.h"
+#include "../lv_misc/lv_fs.h"
+#include "lv_label.h"
+#include "../lv_draw/lv_draw.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+/*Data of image*/
+typedef struct
+{
+    /*No inherited ext. because inherited from the base object*/ /*Ext. of 
ancestor*/
+    /*New data for this type */
+    const void * src; /*Image source: Pointer to an array or a file or a 
symbol*/
+    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)*/
+    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`*/
+} lv_img_ext_t;
+
+/*Styles*/
+enum {
+    LV_IMG_STYLE_MAIN,
+};
+typedef uint8_t lv_img_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create an image objects
+ * @param par pointer to an object, it will be the parent of the new button
+ * @param copy pointer to a image object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created image
+ */
+lv_obj_t * lv_img_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the pixel map to display by the image
+ * @param img pointer to an image object
+ * @param data the image data
+ */
+void lv_img_set_src(lv_obj_t * img, const void * src_img);
+
+/**
+ * Enable the auto size feature.
+ * If enabled the object size will be same as the picture size.
+ * @param img pointer to an image
+ * @param en true: auto size enable, false: auto size disable
+ */
+void lv_img_set_auto_size(lv_obj_t * img, bool autosize_en);
+
+/**
+ * Set an offset for the source of an image.
+ * so the image will be displayed from the new origin.
+ * @param img pointer to an image
+ * @param x: the new offset along x axis.
+ */
+void lv_img_set_offset_x(lv_obj_t * img, lv_coord_t x);
+
+/**
+ * Set an offset for the source of an image.
+ * so the image will be displayed from the new origin.
+ * @param img pointer to an image
+ * @param y: the new offset along y axis.
+ */
+void lv_img_set_offset_y(lv_obj_t * img, lv_coord_t y);
+
+/**
+ * Set the style of an image
+ * @param img pointer to an image object
+ * @param type which style should be set (can be only `LV_IMG_STYLE_MAIN`)
+ * @param style pointer to a style
+ */
+static inline void lv_img_set_style(lv_obj_t * img, lv_img_style_t type, const 
lv_style_t * style)
+{
+    (void)type; /*Unused*/
+    lv_obj_set_style(img, style);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the source of the image
+ * @param img pointer to an image object
+ * @return the image source (symbol, file name or C array)
+ */
+const void * lv_img_get_src(lv_obj_t * img);
+
+/**
+ * Get the name of the file set for an image
+ * @param img pointer to an image
+ * @return file name
+ */
+const char * lv_img_get_file_name(const lv_obj_t * img);
+
+/**
+ * Get the auto size enable attribute
+ * @param img pointer to an image
+ * @return true: auto size is enabled, false: auto size is disabled
+ */
+bool lv_img_get_auto_size(const lv_obj_t * img);
+
+/**
+ * Get the offset.x attribute of the img object.
+ * @param img pointer to an image
+ * @return offset.x value.
+ */
+lv_coord_t lv_img_get_offset_x(lv_obj_t * img);
+
+/**
+ * Get the offset.y attribute of the img object.
+ * @param img pointer to an image
+ * @return offset.y value.
+ */
+lv_coord_t lv_img_get_offset_y(lv_obj_t * img);
+
+/**
+ * Get the style of an image object
+ * @param img pointer to an image object
+ * @param type which style should be get (can be only `LV_IMG_STYLE_MAIN`)
+ * @return pointer to the image's style
+ */
+static inline const lv_style_t * lv_img_get_style(const lv_obj_t * img, 
lv_img_style_t type)
+{
+    (void)type; /*Unused*/
+    return lv_obj_get_style(img);
+}
+
+/**********************
+ *      MACROS
+ **********************/
+
+/*Use this macro to declare an image in a c file*/
+#define LV_IMG_DECLARE(var_name) extern const lv_img_dsc_t var_name;
+
+#endif /*LV_USE_IMG*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_IMG_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_imgbtn.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_imgbtn.c
new file mode 100755
index 0000000..522df30
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_imgbtn.c
@@ -0,0 +1,437 @@
+/**
+ * @file lv_imgbtn.c
+ *
+ */
+
+/*********************
+ *      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
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * mask, 
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);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_design_cb_t ancestor_design;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a image button object
+ * @param par pointer to an object, it will be the parent of the new image 
button
+ * @param copy pointer to a image button object, if not NULL then the new 
object will be copied from
+ * it
+ * @return pointer to the created image button
+ */
+lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("image button create started");
+
+    /*Create the ancestor of image button*/
+    lv_obj_t * new_imgbtn = lv_btn_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) 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((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));
+    memset(ext->img_src_right, 0, sizeof(ext->img_src_right));
+#endif
+
+    ext->act_cf = LV_IMG_CF_UNKNOWN;
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_imgbtn, lv_imgbtn_signal);
+    lv_obj_set_design_cb(new_imgbtn, lv_imgbtn_design);
+
+    /*Init the new image button image button*/
+    if(copy == NULL) {
+
+    }
+    /*Copy an existing image button*/
+    else {
+        lv_imgbtn_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+#if LV_IMGBTN_TILED == 0
+        memcpy((void*)ext->img_src, copy_ext->img_src, sizeof(ext->img_src));
+#else
+        memcpy((void*)ext->img_src_left, copy_ext->img_src_left, 
sizeof(ext->img_src_left));
+        memcpy((void*)ext->img_src_mid, copy_ext->img_src_mid, 
sizeof(ext->img_src_mid));
+        memcpy((void*)ext->img_src_right, copy_ext->img_src_right, 
sizeof(ext->img_src_right));
+#endif
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_imgbtn);
+    }
+
+    LV_LOG_INFO("image button created");
+
+    return new_imgbtn;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+#if LV_IMGBTN_TILED == 0
+/**
+ * Set images for a state of the image button
+ * @param imgbtn pointer to an image button object
+ * @param state for which state set the new image (from `lv_btn_state_t`) `
+ * @param src pointer to an image source (a C array or path to a file)
+ */
+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;
+
+    refr_img(imgbtn);
+}
+
+#else
+/**
+ * Set images for a state of the image button
+ * @param imgbtn pointer to an image button object
+ * @param state for which state set the new image (from `lv_btn_state_t`) `
+ * @param src_left pointer to an image source for the left side of the button 
(a C array or path to
+ * a file)
+ * @param src_mid pointer to an image source for the middle of the button 
(ideally 1px wide) (a C
+ * array or path to a file)
+ * @param src_right pointer to an image source for the right side of the 
button (a C array or path
+ * to a file)
+ */
+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;
+    ext->img_src_mid[state] = src_mid;
+    ext->img_src_right[state] = src_right;
+
+    refr_img(imgbtn);
+}
+
+#endif
+
+/**
+ * Set a style of a image button.
+ * @param imgbtn pointer to image button object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+#if LV_IMGBTN_TILED == 0
+/**
+ * Get the images in a  given state
+ * @param imgbtn pointer to an image button object
+ * @param state the state where to get the image (from `lv_btn_state_t`) `
+ * @return pointer to an image source (a C array or path to a file)
+ */
+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];
+}
+#else
+
+/**
+ * Get the left image in a given state
+ * @param imgbtn pointer to an image button object
+ * @param state the state where to get the image (from `lv_btn_state_t`) `
+ * @return pointer to the left image source (a C array or path to a file)
+ */
+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];
+}
+
+/**
+ * Get the middle image in a given state
+ * @param imgbtn pointer to an image button object
+ * @param state the state where to get the image (from `lv_btn_state_t`) `
+ * @return pointer to the middle image source (a C array or path to a file)
+ */
+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];
+}
+
+/**
+ * Get the right image in a given state
+ * @param imgbtn pointer to an image button object
+ * @param state the state where to get the image (from `lv_btn_state_t`) `
+ * @return pointer to the left image source (a C array or path to a file)
+ */
+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];
+}
+
+#endif
+
+/**
+ * Get style of a image button.
+ * @param imgbtn pointer to image button object
+ * @param type which style should be get
+ * @return style pointer to the style
+ */
+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);
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/*
+ * New object specific "other" functions come here
+ */
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * mask, 
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;
+        if(ext->act_cf == LV_IMG_CF_TRUE_COLOR || ext->act_cf == 
LV_IMG_CF_RAW) {
+            cover = lv_area_is_in(mask, &imgbtn->coords);
+        }
+
+        return cover;
+    }
+    /*Draw the object*/
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+        /*Just draw an image*/
+        lv_imgbtn_ext_t * ext    = lv_obj_get_ext_attr(imgbtn);
+        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];
+        if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
+            lv_draw_label(&imgbtn->coords, mask, style, opa_scale, src, 
LV_TXT_FLAG_NONE, NULL, NULL, NULL, lv_obj_get_base_dir(imgbtn));
+        } else {
+            lv_draw_img(&imgbtn->coords, mask, src, style, opa_scale);
+        }
+#else
+        const void * src;
+        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 true;
+        }
+
+        lv_img_header_t header;
+        lv_area_t coords;
+        lv_coord_t left_w = 0;
+        lv_coord_t right_w = 0;
+
+        if(src) {
+            lv_img_decoder_get_info(src, &header);
+            left_w = header.w;
+            coords.x1 = imgbtn->coords.x1;
+            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);
+        }
+
+        src = ext->img_src_right[state];
+        if(src) {
+            lv_img_decoder_get_info(src, &header);
+            right_w = header.w;
+            coords.x1 = imgbtn->coords.x2 - header.w + 1;
+            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);
+        }
+
+        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);
+
+            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, mask, src, style, opa_scale);
+                coords.x1 = coords.x2 + 1;
+                coords.x2 += header.w;
+            }
+        }
+
+#endif
+
+    }
+    /*Post draw when the children are drawn*/
+    else if(mode == LV_DESIGN_DRAW_POST) {
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the image button
+ * @param imgbtn pointer to a image button 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_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res;
+
+    /* 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
+         * changed as well Set the new image for the new state.*/
+        refr_img(imgbtn);
+    } else if(sign == LV_SIGNAL_CLEANUP) {
+        /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
+    }
+
+    return res;
+}
+
+static void refr_img(lv_obj_t * imgbtn)
+{
+    lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
+    lv_btn_state_t state  = lv_imgbtn_get_state(imgbtn);
+    lv_img_header_t header;
+
+#if LV_IMGBTN_TILED == 0
+    const void * src = ext->img_src[state];
+#else
+    const void * src = ext->img_src_mid[state];
+#endif
+
+    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
+        lv_obj_set_size(imgbtn, header.w, header.h);
+#else
+        lv_obj_set_height(imgbtn, header.h);
+#endif
+    } else {
+        ext->act_cf = LV_IMG_CF_UNKNOWN;
+    }
+
+    lv_obj_invalidate(imgbtn);
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_imgbtn.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_imgbtn.h
new file mode 100755
index 0000000..b28b74f
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_imgbtn.h
@@ -0,0 +1,230 @@
+/**
+ * @file lv_imgbtn.h
+ *
+ */
+
+#ifndef LV_IMGBTN_H
+#define LV_IMGBTN_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_IMGBTN != 0
+
+/*Testing of dependencies*/
+#if LV_USE_BTN == 0
+#error "lv_imgbtn: lv_btn is required. Enable it in lv_conf.h (LV_USE_BTN  1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "lv_btn.h"
+#include "../lv_draw/lv_draw_img.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+/*Data of image button*/
+typedef struct
+{
+    lv_btn_ext_t btn; /*Ext. of ancestor*/
+    /*New data for this type */
+#if LV_IMGBTN_TILED == 0
+    const void * img_src[_LV_BTN_STATE_NUM]; /*Store images to each state*/
+#else
+    const void * img_src_left[_LV_BTN_STATE_NUM];  /*Store left side images to 
each state*/
+    const void * img_src_mid[_LV_BTN_STATE_NUM];   /*Store center images to 
each state*/
+    const void * img_src_right[_LV_BTN_STATE_NUM]; /*Store right side images 
to each state*/
+#endif
+    lv_img_cf_t act_cf; /*Color format of the currently active image*/
+} lv_imgbtn_ext_t;
+
+/*Styles*/
+enum {
+    LV_IMGBTN_STYLE_REL, /**< Same meaning as ordinary button styles. */
+    LV_IMGBTN_STYLE_PR,
+    LV_IMGBTN_STYLE_TGL_REL,
+    LV_IMGBTN_STYLE_TGL_PR,
+    LV_IMGBTN_STYLE_INA,
+};
+typedef uint8_t lv_imgbtn_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a image button objects
+ * @param par pointer to an object, it will be the parent of the new image 
button
+ * @param copy pointer to a image button object, if not NULL then the new 
object will be copied from
+ * it
+ * @return pointer to the created image button
+ */
+lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+#if LV_IMGBTN_TILED == 0
+/**
+ * Set images for a state of the image button
+ * @param imgbtn pointer to an image button object
+ * @param state for which state set the new image (from `lv_btn_state_t`) `
+ * @param src pointer to an image source (a C array or path to a file)
+ */
+void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * 
src);
+#else
+/**
+ * Set images for a state of the image button
+ * @param imgbtn pointer to an image button object
+ * @param state for which state set the new image (from `lv_btn_state_t`) `
+ * @param src_left pointer to an image source for the left side of the button 
(a C array or path to
+ * a file)
+ * @param src_mid pointer to an image source for the middle of the button 
(ideally 1px wide) (a C
+ * array or path to a file)
+ * @param src_right pointer to an image source for the right side of the 
button (a C array or path
+ * to a file)
+ */
+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);
+
+#endif
+
+/**
+ * Enable the toggled states. On release the button will change from/to 
toggled state.
+ * @param imgbtn pointer to an image button object
+ * @param tgl true: enable toggled states, false: disable
+ */
+static inline void lv_imgbtn_set_toggle(lv_obj_t * imgbtn, bool tgl)
+{
+    lv_btn_set_toggle(imgbtn, tgl);
+}
+
+/**
+ * Set the state of the image button
+ * @param imgbtn pointer to an image button object
+ * @param state the new state of the button (from lv_btn_state_t enum)
+ */
+static inline void lv_imgbtn_set_state(lv_obj_t * imgbtn, lv_btn_state_t state)
+{
+    lv_btn_set_state(imgbtn, state);
+}
+
+/**
+ * Toggle the state of the image button (ON->OFF, OFF->ON)
+ * @param imgbtn pointer to a image button object
+ */
+static inline void lv_imgbtn_toggle(lv_obj_t * imgbtn)
+{
+    lv_btn_toggle(imgbtn);
+}
+
+/**
+ * Set a style of a image button.
+ * @param imgbtn pointer to image button object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_imgbtn_set_style(lv_obj_t * imgbtn, lv_imgbtn_style_t type, const 
lv_style_t * style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+#if LV_IMGBTN_TILED == 0
+/**
+ * Get the images in a  given state
+ * @param imgbtn pointer to an image button object
+ * @param state the state where to get the image (from `lv_btn_state_t`) `
+ * @return pointer to an image source (a C array or path to a file)
+ */
+const void * lv_imgbtn_get_src(lv_obj_t * imgbtn, lv_btn_state_t state);
+
+#else
+
+/**
+ * Get the left image in a given state
+ * @param imgbtn pointer to an image button object
+ * @param state the state where to get the image (from `lv_btn_state_t`) `
+ * @return pointer to the left image source (a C array or path to a file)
+ */
+const void * lv_imgbtn_get_src_left(lv_obj_t * imgbtn, lv_btn_state_t state);
+
+/**
+ * Get the middle image in a given state
+ * @param imgbtn pointer to an image button object
+ * @param state the state where to get the image (from `lv_btn_state_t`) `
+ * @return pointer to the middle image source (a C array or path to a file)
+ */
+const void * lv_imgbtn_get_src_middle(lv_obj_t * imgbtn, lv_btn_state_t state);
+
+/**
+ * Get the right image in a given state
+ * @param imgbtn pointer to an image button object
+ * @param state the state where to get the image (from `lv_btn_state_t`) `
+ * @return pointer to the left image source (a C array or path to a file)
+ */
+const void * lv_imgbtn_get_src_right(lv_obj_t * imgbtn, lv_btn_state_t state);
+
+#endif
+/**
+ * Get the current state of the image button
+ * @param imgbtn pointer to a image button object
+ * @return the state of the button (from lv_btn_state_t enum)
+ */
+static inline lv_btn_state_t lv_imgbtn_get_state(const lv_obj_t * imgbtn)
+{
+    return lv_btn_get_state(imgbtn);
+}
+
+/**
+ * Get the toggle enable attribute of the image button
+ * @param imgbtn pointer to a image button object
+ * @return ture: toggle enabled, false: disabled
+ */
+static inline bool lv_imgbtn_get_toggle(const lv_obj_t * imgbtn)
+{
+    return lv_btn_get_toggle(imgbtn);
+}
+
+/**
+ * Get style of a image button.
+ * @param imgbtn pointer to image button object
+ * @param type which style should be get
+ * @return style pointer to the style
+ */
+const lv_style_t * lv_imgbtn_get_style(const lv_obj_t * imgbtn, 
lv_imgbtn_style_t type);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_IMGBTN*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_IMGBTN_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_kb.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_kb.c
new file mode 100755
index 0000000..1913316
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_kb.c
@@ -0,0 +1,471 @@
+
+/**
+ * @file lv_kb.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_kb.h"
+#if LV_USE_KB != 0
+
+#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)
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static lv_res_t lv_kb_signal(lv_obj_t * kb, lv_signal_t sign, void * param);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+/* clang-format off */
+static const char * 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, ""};
+
+static const lv_btnm_ctrl_t kb_ctrl_lc_map[] = {
+    LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
+    LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
+    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 * 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, ""};
+
+static const lv_btnm_ctrl_t kb_ctrl_uc_map[] = {
+    LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
+    LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
+    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 * kb_map_spec[] = {"0", "1", "2", "3", "4" ,"5", "6", "7", 
"8", "9", LV_SYMBOL_BACKSPACE, "\n",
+                                     "abc", "+", "-", "/", "*", "=", "%", "!", 
"?", "#", "<", ">", "\n",
+                                     "\\",  "@", "$", "(", ")", "{", "}", "[", 
"]", ";", "\"", "'", "\n",
+                                     LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", 
LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
+
+static const lv_btnm_ctrl_t kb_ctrl_spec_map[] = {
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
+    LV_KB_CTRL_BTN_FLAGS | 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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 * kb_map_num[] = {"1", "2", "3", LV_SYMBOL_CLOSE, "\n",
+                                    "4", "5", "6", LV_SYMBOL_OK, "\n",
+                                    "7", "8", "9", LV_SYMBOL_BACKSPACE, "\n",
+                                    "+/-", "0", ".", LV_SYMBOL_LEFT, 
LV_SYMBOL_RIGHT, ""};
+
+static const lv_btnm_ctrl_t kb_ctrl_num_map[] = {
+        1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
+        1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
+        1, 1, 1, 2,
+        1, 1, 1, 1, 1};
+/* clang-format on */
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a keyboard objects
+ * @param par pointer to an object, it will be the parent of the new keyboard
+ * @param copy pointer to a keyboard object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created keyboard
+ */
+lv_obj_t * lv_kb_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("keyboard create started");
+
+    /*Create the ancestor of keyboard*/
+    lv_obj_t * new_kb = lv_btnm_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    /*Initialize the allocated 'ext' */
+
+    ext->ta         = NULL;
+    ext->mode       = LV_KB_MODE_TEXT;
+    ext->cursor_mng = 0;
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_kb, lv_kb_signal);
+
+    /*Init the new keyboard keyboard*/
+    if(copy == NULL) {
+        /* Set a size which fits into the parent.
+         * Don't use `par` directly because if the window is created on a page 
it is moved to the
+         * scrollable so the parent has changed */
+        lv_obj_set_size(new_kb, 
lv_obj_get_width_fit(lv_obj_get_parent(new_kb)),
+                        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_lc);
+        lv_btnm_set_ctrl_map(new_kb, kb_ctrl_lc_map);
+        lv_obj_set_base_dir(new_kb, LV_BIDI_DIR_LTR);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_kb_set_style(new_kb, LV_KB_STYLE_BG, th->style.kb.bg);
+            lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_REL, th->style.kb.btn.rel);
+            lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_PR, th->style.kb.btn.pr);
+            lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_TGL_REL, 
th->style.kb.btn.tgl_rel);
+            lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_TGL_PR, 
th->style.kb.btn.tgl_pr);
+            lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_INA, th->style.kb.btn.ina);
+        } else {
+            /*Let the button matrix's styles*/
+        }
+    }
+    /*Copy an existing keyboard*/
+    else {
+        lv_kb_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->ta                = NULL;
+        ext->ta                = copy_ext->ta;
+        ext->mode              = copy_ext->mode;
+        ext->cursor_mng        = copy_ext->cursor_mng;
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_kb);
+    }
+
+    LV_LOG_INFO("keyboard created");
+
+    return new_kb;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Assign a Text Area to the Keyboard. The pressed characters will be put 
there.
+ * @param kb pointer to a Keyboard object
+ * @param ta pointer to a Text Area object to write there
+ */
+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;
+
+    /*Hide the cursor of the old Text area if cursor management is enabled*/
+    if(ext->ta && ext->cursor_mng) {
+        cur_type = lv_ta_get_cursor_type(ext->ta);
+        lv_ta_set_cursor_type(ext->ta, cur_type | LV_CURSOR_HIDDEN);
+    }
+
+    ext->ta = ta;
+
+    /*Show the cursor of the new Text area if cursor management is enabled*/
+    if(ext->ta && ext->cursor_mng) {
+        cur_type = lv_ta_get_cursor_type(ext->ta);
+        lv_ta_set_cursor_type(ext->ta, cur_type & (~LV_CURSOR_HIDDEN));
+    }
+}
+
+/**
+ * Set a new a mode (text or number map)
+ * @param kb pointer to a Keyboard object
+ * @param mode the mode from 'lv_kb_mode_t'
+ */
+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;
+
+    ext->mode = mode;
+    if(mode == LV_KB_MODE_TEXT) {
+        lv_btnm_set_map(kb, kb_map_lc);
+        lv_btnm_set_ctrl_map(kb, kb_ctrl_lc_map);
+    } else if(mode == LV_KB_MODE_NUM) {
+        lv_btnm_set_map(kb, kb_map_num);
+        lv_btnm_set_ctrl_map(kb, kb_ctrl_num_map);
+    } else if(mode == LV_KB_MODE_TEXT_UPPER) {
+        lv_btnm_set_map(kb, kb_map_uc);
+        lv_btnm_set_ctrl_map(kb, kb_ctrl_uc_map);
+    }
+}
+
+/**
+ * Automatically hide or show the cursor of Text Area
+ * @param kb pointer to a Keyboard object
+ * @param en true: show cursor on the current text area, false: hide cursor
+ */
+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;
+
+    ext->cursor_mng = en == false ? 0 : 1;
+
+    if(ext->ta) {
+        lv_cursor_type_t cur_type;
+        cur_type = lv_ta_get_cursor_type(ext->ta);
+
+        if(ext->cursor_mng) {
+            lv_ta_set_cursor_type(ext->ta, cur_type & (~LV_CURSOR_HIDDEN));
+        } else {
+            lv_ta_set_cursor_type(ext->ta, cur_type | LV_CURSOR_HIDDEN);
+        }
+    }
+}
+
+/**
+ * Set a style of a keyboard
+ * @param kb pointer to a keyboard object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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;
+        case LV_KB_STYLE_BTN_PR: lv_btnm_set_style(kb, LV_BTNM_STYLE_BTN_PR, 
style); break;
+        case LV_KB_STYLE_BTN_TGL_REL: lv_btnm_set_style(kb, 
LV_BTNM_STYLE_BTN_TGL_REL, style); break;
+        case LV_KB_STYLE_BTN_TGL_PR: lv_btnm_set_style(kb, 
LV_BTNM_STYLE_BTN_TGL_PR, style); break;
+        case LV_KB_STYLE_BTN_INA: lv_btnm_set_style(kb, LV_BTNM_STYLE_BTN_INA, 
style); break;
+    }
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Assign a Text Area to the Keyboard. The pressed characters will be put 
there.
+ * @param kb pointer to a Keyboard object
+ * @return pointer to the assigned Text Area object
+ */
+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;
+}
+
+/**
+ * Set a new a mode (text or number map)
+ * @param kb pointer to a Keyboard object
+ * @return the current mode from 'lv_kb_mode_t'
+ */
+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;
+}
+
+/**
+ * Get the current cursor manage mode.
+ * @param kb pointer to a Keyboard object
+ * @return true: show cursor on the current text area, false: hide cursor
+ */
+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;
+}
+
+/**
+ * Get a style of a keyboard
+ * @param kb pointer to a keyboard object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+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) {
+        case LV_KB_STYLE_BG: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BG); 
break;
+        case LV_KB_STYLE_BTN_REL: style = lv_btnm_get_style(kb, 
LV_BTNM_STYLE_BTN_REL); break;
+        case LV_KB_STYLE_BTN_PR: style = lv_btnm_get_style(kb, 
LV_BTNM_STYLE_BTN_PR); break;
+        case LV_KB_STYLE_BTN_TGL_REL: style = lv_btnm_get_style(kb, 
LV_BTNM_STYLE_BTN_TGL_REL); break;
+        case LV_KB_STYLE_BTN_TGL_PR: style = lv_btnm_get_style(kb, 
LV_BTNM_STYLE_BTN_TGL_PR); break;
+        case LV_KB_STYLE_BTN_INA: style = lv_btnm_get_style(kb, 
LV_BTNM_STYLE_BTN_INA); break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Default keyboard event to add characters to the Text area and change the 
map.
+ * If a custom `event_cb` is added to the keyboard this function be called 
from it to handle the
+ * button clicks
+ * @param kb pointer to a  keyboard
+ * @param event the triggering event
+ */
+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);
+    uint16_t btn_id   = lv_btnm_get_active_btn(kb);
+    if(btn_id == LV_BTNM_BTN_NONE) return;
+    if(lv_btnm_get_btn_ctrl(kb, btn_id, LV_BTNM_CTRL_HIDDEN | 
LV_BTNM_CTRL_INACTIVE)) return;
+    if(lv_btnm_get_btn_ctrl(kb, btn_id, LV_BTNM_CTRL_NO_REPEAT) && event == 
LV_EVENT_LONG_PRESSED_REPEAT) return;
+
+    const char * txt = lv_btnm_get_active_btn_text(kb);
+    if(txt == NULL) return;
+
+    /*Do the corresponding action according to the text of the button*/
+    if(strcmp(txt, "abc") == 0) {
+        lv_btnm_set_map(kb, kb_map_lc);
+        lv_btnm_set_ctrl_map(kb, kb_ctrl_lc_map);
+        return;
+    } else if(strcmp(txt, "ABC") == 0) {
+        lv_btnm_set_map(kb, kb_map_uc);
+        lv_btnm_set_ctrl_map(kb, kb_ctrl_uc_map);
+        return;
+    } else if(strcmp(txt, "1#") == 0) {
+        lv_btnm_set_map(kb, kb_map_spec);
+        lv_btnm_set_ctrl_map(kb, kb_ctrl_spec_map);
+        return;
+    } else if(strcmp(txt, LV_SYMBOL_CLOSE) == 0) {
+        if(kb->event_cb != lv_kb_def_event_cb) {
+            lv_res_t res = lv_event_send(kb, LV_EVENT_CANCEL, NULL);
+            if(res != LV_RES_OK) return;
+        } else {
+            lv_kb_set_ta(kb, NULL); /*De-assign the text area  to hide it 
cursor if needed*/
+            lv_obj_del(kb);
+            return;
+        }
+        return;
+    } else if(strcmp(txt, LV_SYMBOL_OK) == 0) {
+        if(kb->event_cb != lv_kb_def_event_cb) {
+            lv_res_t res = lv_event_send(kb, LV_EVENT_APPLY, NULL);
+            if(res != LV_RES_OK) return;
+        } else {
+            lv_kb_set_ta(kb, NULL); /*De-assign the text area to hide it 
cursor if needed*/
+        }
+        return;
+    }
+
+    /*Add the characters to the text area if set*/
+    if(ext->ta == NULL) return;
+
+    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, 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);
+        const char * ta_txt = lv_ta_get_text(ext->ta);
+        if(ta_txt[0] == '-') {
+            lv_ta_set_cursor_pos(ext->ta, 1);
+            lv_ta_del_char(ext->ta);
+            lv_ta_add_char(ext->ta, '+');
+            lv_ta_set_cursor_pos(ext->ta, cur);
+        } else if(ta_txt[0] == '+') {
+            lv_ta_set_cursor_pos(ext->ta, 1);
+            lv_ta_del_char(ext->ta);
+            lv_ta_add_char(ext->ta, '-');
+            lv_ta_set_cursor_pos(ext->ta, cur);
+        } else {
+            lv_ta_set_cursor_pos(ext->ta, 0);
+            lv_ta_add_char(ext->ta, '-');
+            lv_ta_set_cursor_pos(ext->ta, cur + 1);
+        }
+    } else {
+        lv_ta_add_text(ext->ta, txt);
+    }
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Signal function of the keyboard
+ * @param kb pointer to a keyboard 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_kb_signal(lv_obj_t * kb, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* 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')*/
+    } else if(sign == LV_SIGNAL_FOCUS) {
+        lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
+        /*Show the cursor of the new Text area if cursor management is 
enabled*/
+        if(ext->ta && ext->cursor_mng) {
+            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_DEFOCUS) {
+        lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
+        /*Show the cursor of the new Text area if cursor management is 
enabled*/
+        if(ext->ta && ext->cursor_mng) {
+            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);
+        }
+    }
+
+    return res;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_kb.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_kb.h
new file mode 100755
index 0000000..74d9c1f
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_kb.h
@@ -0,0 +1,207 @@
+/**
+ * @file lv_kb.h
+ *
+ */
+
+#ifndef LV_KB_H
+#define LV_KB_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_KB != 0
+
+/*Testing of dependencies*/
+#if LV_USE_BTNM == 0
+#error "lv_kb: lv_btnm is required. Enable it in lv_conf.h (LV_USE_BTNM  1) "
+#endif
+
+#if LV_USE_TA == 0
+#error "lv_kb: lv_ta is required. Enable it in lv_conf.h (LV_USE_TA  1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "lv_btnm.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/** Current keyboard mode. */
+enum {
+    LV_KB_MODE_TEXT,
+    LV_KB_MODE_NUM,
+    LV_KB_MODE_TEXT_UPPER,
+};
+typedef uint8_t lv_kb_mode_t;
+
+/*Data of keyboard*/
+typedef struct
+{
+    lv_btnm_ext_t btnm; /*Ext. of ancestor*/
+    /*New data for this type */
+    lv_obj_t * ta;          /*Pointer to the assigned text area*/
+    lv_kb_mode_t mode;      /*Key map type*/
+    uint8_t cursor_mng : 1; /*1: automatically show/hide cursor when a text 
area is assigned or left*/
+} lv_kb_ext_t;
+
+enum {
+    LV_KB_STYLE_BG,
+    LV_KB_STYLE_BTN_REL,
+    LV_KB_STYLE_BTN_PR,
+    LV_KB_STYLE_BTN_TGL_REL,
+    LV_KB_STYLE_BTN_TGL_PR,
+    LV_KB_STYLE_BTN_INA,
+};
+typedef uint8_t lv_kb_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a keyboard objects
+ * @param par pointer to an object, it will be the parent of the new keyboard
+ * @param copy pointer to a keyboard object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created keyboard
+ */
+lv_obj_t * lv_kb_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Assign a Text Area to the Keyboard. The pressed characters will be put 
there.
+ * @param kb pointer to a Keyboard object
+ * @param ta pointer to a Text Area object to write there
+ */
+void lv_kb_set_ta(lv_obj_t * kb, lv_obj_t * ta);
+
+/**
+ * Set a new a mode (text or number map)
+ * @param kb pointer to a Keyboard object
+ * @param mode the mode from 'lv_kb_mode_t'
+ */
+void lv_kb_set_mode(lv_obj_t * kb, lv_kb_mode_t mode);
+
+/**
+ * Automatically hide or show the cursor of the current Text Area
+ * @param kb pointer to a Keyboard object
+ * @param en true: show cursor on the current text area, false: hide cursor
+ */
+void lv_kb_set_cursor_manage(lv_obj_t * kb, bool en);
+
+/**
+ * Set a new map for the keyboard
+ * @param kb pointer to a Keyboard object
+ * @param map pointer to a string array to describe the map.
+ *            See 'lv_btnm_set_map()' for more info.
+ */
+static inline void lv_kb_set_map(lv_obj_t * kb, const char * map[])
+{
+    lv_btnm_set_map(kb, map);
+}
+
+/**
+ * Set the button control map (hidden, disabled etc.) for the keyboard. The
+ * control map array will be copied and so may be deallocated after this
+ * function returns.
+ * @param kb pointer to a keyboard object
+ * @param ctrl_map pointer to an array of `lv_btn_ctrl_t` control bytes.
+ *                 See: `lv_btnm_set_ctrl_map` for more details.
+ */
+static inline void lv_kb_set_ctrl_map(lv_obj_t * kb, const lv_btnm_ctrl_t 
ctrl_map[])
+{
+    lv_btnm_set_ctrl_map(kb, ctrl_map);
+}
+
+/**
+ * Set a style of a keyboard
+ * @param kb pointer to a keyboard object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_kb_set_style(lv_obj_t * kb, lv_kb_style_t type, const lv_style_t * 
style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Assign a Text Area to the Keyboard. The pressed characters will be put 
there.
+ * @param kb pointer to a Keyboard object
+ * @return pointer to the assigned Text Area object
+ */
+lv_obj_t * lv_kb_get_ta(const lv_obj_t * kb);
+
+/**
+ * Set a new a mode (text or number map)
+ * @param kb pointer to a Keyboard object
+ * @return the current mode from 'lv_kb_mode_t'
+ */
+lv_kb_mode_t lv_kb_get_mode(const lv_obj_t * kb);
+
+/**
+ * Get the current cursor manage mode.
+ * @param kb pointer to a Keyboard object
+ * @return true: show cursor on the current text area, false: hide cursor
+ */
+bool lv_kb_get_cursor_manage(const lv_obj_t * kb);
+
+/**
+ * Get the current map of a keyboard
+ * @param kb pointer to a keyboard object
+ * @return the current map
+ */
+static inline const char ** lv_kb_get_map_array(const lv_obj_t * kb)
+{
+    return lv_btnm_get_map_array(kb);
+}
+
+/**
+ * Get a style of a keyboard
+ * @param kb pointer to a keyboard object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+const lv_style_t * lv_kb_get_style(const lv_obj_t * kb, lv_kb_style_t type);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Default keyboard event to add characters to the Text area and change the 
map.
+ * If a custom `event_cb` is added to the keyboard this function be called 
from it to handle the
+ * button clicks
+ * @param kb pointer to a  keyboard
+ * @param event the triggering event
+ */
+void lv_kb_def_event_cb(lv_obj_t * kb, lv_event_t event);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_KB*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_KB_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_label.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_label.c
new file mode 100755
index 0000000..aa677b0
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_label.c
@@ -0,0 +1,1434 @@
+/**
+ * @file lv_rect.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_label.h"
+#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_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)
+#endif
+
+#define LV_LABEL_DOT_END_INV 0xFFFF
+#define LV_LABEL_HINT_HEIGHT_LIMIT                                             
                                        \
+    1024 /*Enable "hint" to buffer info about labels larger than this. (Speed 
up their drawing)*/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  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 void lv_label_refr_text(lv_obj_t * label);
+static void lv_label_revert_dots(lv_obj_t * label);
+
+#if LV_USE_ANIMATION
+static void lv_label_set_offset_x(lv_obj_t * label, lv_coord_t x);
+static void lv_label_set_offset_y(lv_obj_t * label, lv_coord_t y);
+#endif
+
+static bool lv_label_set_dot_tmp(lv_obj_t * label, char * data, uint16_t len);
+static char * lv_label_get_dot_tmp(lv_obj_t * label);
+static void lv_label_dot_tmp_free(lv_obj_t * label);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a label objects
+ * @param par pointer to an object, it will be the parent of the new label
+ * @param copy pointer to a button object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created button
+ */
+lv_obj_t * lv_label_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("label create started");
+
+    /*Create a basic object*/
+    lv_obj_t * new_label = lv_obj_create(par, copy);
+    LV_ASSERT_MEM(new_label);
+    if(new_label == NULL) return NULL;
+
+    if(ancestor_signal == NULL) ancestor_signal = 
lv_obj_get_signal_cb(new_label);
+
+    /*Extend the basic object to a label object*/
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    ext->text       = NULL;
+    ext->static_txt = 0;
+    ext->recolor    = 0;
+    ext->body_draw  = 0;
+    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
+    ext->anim_speed = LV_LABEL_DEF_SCROLL_SPEED;
+#endif
+    ext->offset.x = 0;
+    ext->offset.y = 0;
+
+#if LV_LABEL_LONG_TXT_HINT
+    ext->hint.line_start = -1;
+    ext->hint.coord_y    = 0;
+    ext->hint.y          = 0;
+#endif
+
+#if LV_LABEL_TEXT_SEL
+    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;
+
+    lv_obj_set_design_cb(new_label, lv_label_design);
+    lv_obj_set_signal_cb(new_label, lv_label_signal);
+
+    /*Init the new label*/
+    if(copy == NULL) {
+        lv_obj_set_click(new_label, false);
+        lv_label_set_long_mode(new_label, LV_LABEL_LONG_EXPAND);
+        lv_label_set_text(new_label, "Text");
+        lv_label_set_style(new_label, LV_LABEL_STYLE_MAIN, NULL); /*Inherit 
parent's style*/
+    }
+    /*Copy 'copy' if not NULL*/
+    else {
+        lv_label_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        lv_label_set_long_mode(new_label, lv_label_get_long_mode(copy));
+        lv_label_set_recolor(new_label, lv_label_get_recolor(copy));
+        lv_label_set_body_draw(new_label, lv_label_get_body_draw(copy));
+        lv_label_set_align(new_label, lv_label_get_align(copy));
+        if(copy_ext->static_txt == 0)
+            lv_label_set_text(new_label, lv_label_get_text(copy));
+        else
+            lv_label_set_static_text(new_label, lv_label_get_text(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_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) {
+            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));
+        }
+        ext->dot_tmp_alloc = copy_ext->dot_tmp_alloc;
+        ext->dot_end       = copy_ext->dot_end;
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_label);
+    }
+
+    LV_LOG_INFO("label created");
+
+    return new_label;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new text for a label. Memory will be allocated to store the text by 
the label.
+ * @param label pointer to a label object
+ * @param text '\0' terminated character string. NULL to refresh with the 
current text.
+ */
+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);
+
+    /*If text is NULL then refresh */
+    if(text == NULL) {
+        lv_label_refr_text(label);
+        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_ASSERT_MEM(ext->text);
+        if(ext->text == NULL) return;
+    } else {
+        /*Allocate space for the new text*/
+        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_ASSERT_MEM(ext->text);
+        if(ext->text == NULL) return;
+
+        strcpy(ext->text, text);
+
+        /*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.
+ * @param label pointer to a label object
+ * @param array array of characters or NULL to refresh the label
+ * @param size the size of 'array' in bytes
+ */
+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);
+
+    /*If trying to set its own text or the array is NULL then refresh */
+    if(array == ext->text || array == NULL) {
+        lv_label_refr_text(label);
+        return;
+    }
+
+    /*Allocate space for the new text*/
+    if(ext->text != NULL && ext->static_txt == 0) {
+        lv_mem_free(ext->text);
+        ext->text = NULL;
+    }
+    ext->text = lv_mem_alloc(size + 1);
+    LV_ASSERT_MEM(ext->text);
+    if(ext->text == NULL) return;
+
+    memcpy(ext->text, array, size);
+    ext->text[size] = '\0';
+    ext->static_txt = 0; /*Now the text is dynamically allocated*/
+
+    lv_label_refr_text(label);
+}
+
+/**
+ * Set a static text. It will not be saved by the label so the 'text' variable
+ * has to be 'alive' while the label exist.
+ * @param label pointer to a label object
+ * @param text pointer to a text. NULL to refresh with the current text.
+ */
+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);
+        ext->text = NULL;
+    }
+
+    if(text != NULL) {
+        ext->static_txt = 1;
+        ext->text       = (char *)text;
+    }
+
+    lv_label_refr_text(label);
+}
+
+/**
+ * Set the behavior of the label with longer text then the object size
+ * @param label pointer to a label object
+ * @param long_mode the new mode from 'lv_label_long_mode' enum.
+ *                  In LV_LONG_BREAK/LONG/ROLL the size of the label should be 
set AFTER this
+ * function
+ */
+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
+    /*Delete the old animation (if exists)*/
+    lv_anim_del(label, (lv_anim_exec_xcb_t)lv_obj_set_x);
+    lv_anim_del(label, (lv_anim_exec_xcb_t)lv_obj_set_y);
+    lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_x);
+    lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_y);
+#endif
+    ext->offset.x = 0;
+    ext->offset.y = 0;
+
+    if(long_mode == LV_LABEL_LONG_SROLL || long_mode == 
LV_LABEL_LONG_SROLL_CIRC || long_mode == LV_LABEL_LONG_CROP)
+        ext->expand = 1;
+    else
+        ext->expand = 0;
+
+    /*Restore the character under the dots*/
+    if(ext->long_mode == LV_LABEL_LONG_DOT && ext->dot_end != 
LV_LABEL_DOT_END_INV) {
+        lv_label_revert_dots(label);
+    }
+
+    ext->long_mode = long_mode;
+    lv_label_refr_text(label);
+}
+
+/**
+ * Set the align of the label (left or center)
+ * @param label pointer to a label object
+ * @param align 'LV_LABEL_ALIGN_LEFT' or 'LV_LABEL_ALIGN_LEFT'
+ */
+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;
+
+    ext->align = align;
+
+    lv_obj_invalidate(label); /*Enough to invalidate because alignment is only 
drawing related
+                                 (lv_refr_label_text() not required)*/
+}
+
+/**
+ * Enable the recoloring by in-line commands
+ * @param label pointer to a label object
+ * @param en true: enable recoloring, false: disable
+ */
+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;
+
+    ext->recolor = en == false ? 0 : 1;
+
+    lv_label_refr_text(label); /*Refresh the text because the potential colo 
codes in text needs to
+                                  be hided or revealed*/
+}
+
+/**
+ * Set the label to draw (or not draw) background specified in its style's body
+ * @param label pointer to a label object
+ * @param en true: draw body; false: don't draw body
+ */
+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;
+
+    ext->body_draw = en == false ? 0 : 1;
+
+    lv_obj_refresh_ext_draw_pad(label);
+
+    lv_obj_invalidate(label);
+}
+
+/**
+ * Set the label's animation speed in LV_LABEL_LONG_SROLL/SCROLL_CIRC modes
+ * @param label pointer to a label object
+ * @param anim_speed speed of animation in px/sec unit
+ */
+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;
+
+    ext->anim_speed = anim_speed;
+
+    if(ext->long_mode == LV_LABEL_LONG_SROLL || ext->long_mode == 
LV_LABEL_LONG_SROLL_CIRC) {
+        lv_label_refr_text(label);
+    }
+#else
+    (void)label;      /*Unused*/
+    (void)anim_speed; /*Unused*/
+#endif
+}
+
+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;
+    lv_obj_invalidate(label);
+#else
+    (void)label;    /*Unused*/
+    (void)index;    /*Unused*/
+#endif
+}
+
+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;
+    lv_obj_invalidate(label);
+#else
+    (void)label;    /*Unused*/
+    (void)index;    /*Unused*/
+#endif
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the text of a label
+ * @param label pointer to a label object
+ * @return the text of the label
+ */
+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;
+}
+
+/**
+ * Get the long mode of a label
+ * @param label pointer to a label object
+ * @return the long mode
+ */
+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;
+}
+
+/**
+ * Get the align attribute
+ * @param label pointer to a label object
+ * @return LV_LABEL_ALIGN_LEFT or LV_LABEL_ALIGN_CENTER
+ */
+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);
+
+    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;
+}
+
+/**
+ * Get the recoloring attribute
+ * @param label pointer to a label object
+ * @return true: recoloring is enabled, false: disable
+ */
+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;
+}
+
+/**
+ * Get the body draw attribute
+ * @param label pointer to a label object
+ * @return true: draw body; false: don't draw body
+ */
+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;
+}
+
+/**
+ * Get the label's animation speed in LV_LABEL_LONG_ROLL and SCROLL modes
+ * @param label pointer to a label object
+ * @return speed of animation in px/sec unit
+ */
+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;
+#else
+    (void)label;      /*Unused*/
+    return 0;
+#endif
+}
+
+/**
+ * Get the relative x and y coordinates of a letter
+ * @param label pointer to a label object
+ * @param index index of the letter [0 ... text length]. Expressed in 
character index, not byte
+ * 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 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;
+    uint32_t new_line_start  = 0;
+    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 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;
+
+    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;
+    }
+
+    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(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;
+        line_start = new_line_start;
+    }
+
+    /*If the last character is line break then go to the next line*/
+    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 = byte_id;
+        }
+    }
+
+    const char *bidi_txt;
+    uint16_t visual_byte_pos;
+#if LV_USE_BIDI
+    /*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;
+        char *mutable_bidi_txt;
+        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(bidi_txt, visual_byte_pos, font, 
style->text.letter_space, flag);
+
+    if(char_id != line_start) x += style->text.letter_space;
+
+    if(align == LV_LABEL_ALIGN_CENTER) {
+        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) / 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;
+    }
+    pos->x = x;
+    pos->y = y;
+}
+
+/**
+ * Get the index of letter on a relative point of a label
+ * @param label pointer to label object
+ * @param pos pointer to point with coordinates on a the label
+ * @return the index of the letter on the 'pos_p' point (E.g. on 0;0 is the 0. 
letter)
+ * Expressed in character index and not byte index (different in UTF-8)
+ */
+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;
+    uint32_t new_line_start  = 0;
+    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 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;
+
+    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) {
+        max_w = LV_COORD_MAX;
+    }
+
+    /*Search the line of the index letter */;
+    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) {
+            /*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_draw_get_buf(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(align == LV_LABEL_ALIGN_CENTER) {
+        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) / 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 = 0;
+    uint32_t i_act = i;
+    uint32_t letter;
+    uint32_t letter_next;
+
+    if(new_line_start > 0) {
+        while(i + line_start < new_line_start) {
+            /* Get the current letter.*/
+            letter = lv_txt_encoded_next(bidi_txt, &i);
+
+            /*Get the next letter too for kerning*/
+            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, bidi_txt[i]) != false) {
+                    continue; /*Skip the letter is it is part of a command*/
+                }
+            }
+
+            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 + line_start == new_line_start) {
+                i = i_act;
+                break;
+            }
+            x += style->text.letter_space;
+            i_act = i;
+        }
+    }
+
+#if LV_USE_BIDI
+    /*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);
+}
+
+/**
+ * @brief Get the selection start index.
+ * @param label pointer to a label object.
+ * @return selection start index. `LV_LABEL_TXT_SEL_OFF` if nothing is 
selected.
+ */
+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;
+
+#else
+    (void)label;    /*Unused*/
+    return LV_LABEL_TEXT_SEL_OFF;
+#endif
+}
+
+/**
+ * @brief Get the selection end index.
+ * @param label pointer to a label object.
+ * @return selection end index. `LV_LABEL_TXT_SEL_OFF` if nothing is selected.
+ */
+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;
+#else
+    (void)label; /*Unused*/
+    return LV_LABEL_TEXT_SEL_OFF;
+#endif
+}
+
+/**
+ * Check if a character is drawn under a point.
+ * @param label Label object
+ * @param pos Point to check for characte under
+ * @return whether a character is drawn under the point
+ */
+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;
+    uint32_t new_line_start  = 0;
+    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 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(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) {
+        max_w = LV_COORD_MAX;
+    }
+
+    /*Search the line of the index letter */;
+    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')*/
+        y += letter_height + style->text.line_space;
+
+        line_start = new_line_start;
+    }
+
+    /*Calculate the x coordinate*/
+    lv_coord_t x      = 0;
+    lv_coord_t last_x = 0;
+    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;
+
+    uint32_t i           = line_start;
+    uint32_t i_current   = i;
+    uint32_t letter      = '\0';
+    uint32_t letter_next = '\0';
+
+    if(new_line_start > 0) {
+        while(i <= new_line_start - 1) {
+            /* Get the current letter
+             * Be careful 'i' already points to the next character */
+            letter = lv_txt_encoded_next(txt, &i);
+
+            /*Get the next letter for kerning*/
+            letter_next = lv_txt_encoded_next(&txt[i], NULL);
+
+            /*Handle the recolor command*/
+            if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
+                if(lv_txt_is_cmd(&cmd_state, txt[i]) != false) {
+                    continue; /*Skip the letter is it is part of a command*/
+                }
+            }
+            last_x = x;
+            x += lv_font_get_glyph_width(font, letter, letter_next);
+            if(pos->x < x) {
+                i = i_current;
+                break;
+            }
+            x += style->text.letter_space;
+            i_current = i;
+        }
+    }
+
+    int32_t max_diff = lv_font_get_glyph_width(font, letter, letter_next) + 
style->text.letter_space + 1;
+    return (pos->x >= (last_x - style->text.letter_space) && pos->x <= (last_x 
+ max_diff));
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Insert a text to the label. The label text can not be static.
+ * @param label pointer to a label object
+ * @param pos character index to insert. Expressed in character index and not 
byte index (Different
+ * in UTF-8) 0: before first char. LV_LABEL_POS_LAST: after last char.
+ * @param txt pointer to the text to insert
+ */
+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*/
+    if(ext->static_txt != 0) return;
+
+    lv_obj_invalidate(label);
+
+    /*Allocate space for the new text*/
+    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_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);
+    lv_label_refr_text(label);
+}
+
+/**
+ * Delete characters from a label. The label text can not be static.
+ * @param label pointer to a label object
+ * @param pos character index to insert. Expressed in character index and not 
byte index (Different
+ * in UTF-8) 0: before first char.
+ * @param cnt number of characters to cut
+ */
+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*/
+    if(ext->static_txt != 0) return;
+
+    lv_obj_invalidate(label);
+
+    char * label_txt = lv_label_get_text(label);
+    /*Delete the characters*/
+    lv_txt_cut(label_txt, pos, cnt);
+
+    /*Refresh the label*/
+    lv_label_refr_text(label);
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, 
lv_design_mode_t mode)
+{
+    /* A label never covers an area */
+    if(mode == LV_DESIGN_COVER_CHK)
+        return false;
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+        lv_area_t coords;
+        const lv_style_t * style = lv_obj_get_style(label);
+        lv_opa_t opa_scale       = lv_obj_get_opa_scale(label);
+        lv_obj_get_coords(label, &coords);
+
+#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);
+        }
+#endif
+
+        lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
+
+        if(ext->body_draw) {
+            lv_area_t bg;
+            lv_obj_get_coords(label, &bg);
+            bg.x1 -= style->body.padding.left;
+            bg.x2 += style->body.padding.right;
+            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_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(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)*/
+        if((ext->long_mode == LV_LABEL_LONG_SROLL || ext->long_mode == 
LV_LABEL_LONG_SROLL_CIRC) &&
+           (ext->align == LV_LABEL_ALIGN_CENTER || ext->align == 
LV_LABEL_ALIGN_RIGHT)) {
+            lv_point_t size;
+            lv_txt_get_size(&size, ext->text, style->text.font, 
style->text.letter_space, style->text.line_space,
+                            LV_COORD_MAX, flag);
+            if(size.x > lv_obj_get_width(label)) {
+                flag &= ~LV_TXT_FLAG_RIGHT;
+                flag &= ~LV_TXT_FLAG_CENTER;
+            }
+        }
+#if LV_LABEL_LONG_TXT_HINT
+        lv_draw_label_hint_t * hint = &ext->hint;
+        if(ext->long_mode == LV_LABEL_LONG_SROLL_CIRC || 
lv_obj_get_height(label) < LV_LABEL_HINT_HEIGHT_LIMIT)
+            hint = NULL;
+
+#else
+        /*Just for compatibility*/
+        lv_draw_label_hint_t * hint = NULL;
+#endif
+        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, mask, 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;
+            lv_txt_get_size(&size, ext->text, style->text.font, 
style->text.letter_space, style->text.line_space,
+                            LV_COORD_MAX, flag);
+
+            lv_point_t ofs;
+
+            /*Draw the text again next to the original to make an circular 
effect */
+            if(size.x > lv_obj_get_width(label)) {
+                ofs.x = ext->offset.x + size.x +
+                        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, &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, &sel, NULL, lv_obj_get_base_dir(label));
+            }
+        }
+    }
+    return true;
+}
+
+/**
+ * Signal function of the label
+ * @param label pointer to a label 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_label_signal(lv_obj_t * label, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res;
+
+    /* 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) {
+        if(ext->static_txt == 0) {
+            lv_mem_free(ext->text);
+            ext->text = NULL;
+        }
+        lv_label_dot_tmp_free(label);
+    } else if(sign == LV_SIGNAL_STYLE_CHG) {
+        /*Revert dots for proper refresh*/
+        lv_label_revert_dots(label);
+
+        lv_label_refr_text(label);
+    } else if(sign == LV_SIGNAL_CORD_CHG) {
+        if(lv_area_get_width(&label->coords) != lv_area_get_width(param) ||
+           lv_area_get_height(&label->coords) != lv_area_get_height(param)) {
+            lv_label_revert_dots(label);
+            lv_label_refr_text(label);
+        }
+    } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
+        if(ext->body_draw) {
+            const lv_style_t * style = lv_label_get_style(label, 
LV_LABEL_STYLE_MAIN);
+
+            label->ext_draw_pad = LV_MATH_MAX(label->ext_draw_pad, 
style->body.padding.left);
+            label->ext_draw_pad = LV_MATH_MAX(label->ext_draw_pad, 
style->body.padding.right);
+            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;
+        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_label";
+    }
+
+    return res;
+}
+
+/**
+ * Refresh the label with its text stored in its extended data
+ * @param label pointer to a label object
+ */
+static void lv_label_refr_text(lv_obj_t * label)
+{
+    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
+
+    if(ext->text == NULL) return;
+#if LV_LABEL_LONG_TXT_HINT
+    ext->hint.line_start = -1; /*The hint is invalid if the text changes*/
+#endif
+
+    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;
+
+    /*If the width will be expanded set the max length to very big */
+    if(ext->long_mode == LV_LABEL_LONG_EXPAND) {
+        max_w = LV_COORD_MAX;
+    }
+
+    /*Calc. the height and longest line*/
+    lv_point_t size;
+    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;
+    lv_txt_get_size(&size, ext->text, font, style->text.letter_space, 
style->text.line_space, max_w, flag);
+
+    /*Set the full size in expand mode*/
+    if(ext->long_mode == LV_LABEL_LONG_EXPAND) {
+        lv_obj_set_size(label, size.x, size.y);
+    }
+    /*In roll mode keep the size but start offset animations*/
+    else if(ext->long_mode == LV_LABEL_LONG_SROLL) {
+#if LV_USE_ANIMATION
+        lv_anim_t anim;
+        anim.var      = label;
+        anim.repeat   = 1;
+        anim.playback = 1;
+        anim.start    = 0;
+        anim.ready_cb = NULL;
+        anim.path_cb  = lv_anim_path_linear;
+        anim.playback_pause =
+            (((lv_font_get_glyph_width(style->text.font, ' ', ' ') + 
style->text.letter_space) * 1000) /
+             ext->anim_speed) *
+            LV_LABEL_WAIT_CHAR_COUNT;
+        anim.repeat_pause = anim.playback_pause;
+        anim.act_time     = -anim.playback_pause;
+
+        bool hor_anim = false;
+        if(size.x > lv_obj_get_width(label)) {
+            anim.end     = lv_obj_get_width(label) - size.x;
+            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);
+            hor_anim = true;
+        } else {
+            /*Delete the offset animation if not required*/
+            lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_x);
+            ext->offset.x = 0;
+        }
+
+        if(size.y > lv_obj_get_height(label) && hor_anim == false) {
+            anim.end     = lv_obj_get_height(label) - 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);
+        } else {
+            /*Delete the offset animation if not required*/
+            lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_y);
+            ext->offset.y = 0;
+        }
+#endif
+    }
+    /*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.act_time = -(((lv_font_get_glyph_width(style->text.font, ' ', ' 
') + style->text.letter_space) * 1000) /
+                          ext->anim_speed) *
+                        LV_LABEL_WAIT_CHAR_COUNT;
+        anim.ready_cb       = NULL;
+        anim.path_cb        = lv_anim_path_linear;
+        anim.playback_pause = 0;
+        anim.repeat_pause   = 0;
+
+        bool hor_anim = false;
+        if(size.x > lv_obj_get_width(label)) {
+            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);
+            hor_anim = true;
+        } else {
+            /*Delete the offset animation if not required*/
+            lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_x);
+            ext->offset.x = 0;
+        }
+
+        if(size.y > lv_obj_get_height(label) && hor_anim == false) {
+            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);
+        } else {
+            /*Delete the offset animation if not required*/
+            lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_y);
+            ext->offset.y = 0;
+        }
+#endif
+    } else if(ext->long_mode == LV_LABEL_LONG_DOT) {
+        if(size.y <= lv_obj_get_height(label)) { /*No dots are required, the 
text is short enough*/
+            ext->dot_end = LV_LABEL_DOT_END_INV;
+        } else if(lv_txt_get_encoded_length(ext->text) <= LV_LABEL_DOT_NUM) { 
/*Don't turn to dots all the characters*/
+            ext->dot_end = LV_LABEL_DOT_END_INV;
+        } else {
+            lv_point_t p;
+            p.x = lv_obj_get_width(label) -
+                  (lv_font_get_glyph_width(style->text.font, '.', '.') + 
style->text.letter_space) *
+                      LV_LABEL_DOT_NUM; /*Shrink with dots*/
+            p.y = lv_obj_get_height(label);
+            p.y -= p.y %
+                   (lv_font_get_line_height(style->text.font) + 
style->text.line_space); /*Round down to the last line*/
+            p.y -= style->text.line_space;                                     
          /*Trim the last line space*/
+            uint32_t letter_id = lv_label_get_letter_on(label, &p);
+
+            /*Save letters under the dots and replace them with dots*/
+            uint32_t i;
+            uint32_t byte_id     = lv_txt_encoded_get_byte_id(ext->text, 
letter_id);
+            uint32_t byte_id_ori = byte_id;
+            uint8_t len          = 0;
+            for(i = 0; i <= LV_LABEL_DOT_NUM; i++) {
+                len += lv_txt_encoded_size(&ext->text[byte_id]);
+                lv_txt_encoded_next(ext->text, &byte_id);
+            }
+
+            if(lv_label_set_dot_tmp(label, &ext->text[byte_id_ori], len)) {
+                for(i = 0; i < LV_LABEL_DOT_NUM; i++) {
+                    ext->text[byte_id_ori + i] = '.';
+                }
+                ext->text[byte_id_ori + LV_LABEL_DOT_NUM] = '\0';
+                ext->dot_end                              = letter_id + 
LV_LABEL_DOT_NUM;
+            }
+        }
+    }
+    /*In break mode only the height can change*/
+    else if(ext->long_mode == LV_LABEL_LONG_BREAK) {
+        lv_obj_set_height(label, size.y);
+    }
+    /*Do not set the size in Clip mode*/
+    else if(ext->long_mode == LV_LABEL_LONG_CROP) {
+        /*Do nothing*/
+    }
+
+    lv_obj_invalidate(label);
+}
+
+static void lv_label_revert_dots(lv_obj_t * label)
+{
+    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
+    if(ext->long_mode != LV_LABEL_LONG_DOT) return;
+    if(ext->dot_end == LV_LABEL_DOT_END_INV) return;
+    uint32_t letter_i = ext->dot_end - LV_LABEL_DOT_NUM;
+    uint32_t byte_i   = lv_txt_encoded_get_byte_id(ext->text, letter_i);
+
+    /*Restore the characters*/
+    uint8_t i      = 0;
+    char * dot_tmp = lv_label_get_dot_tmp(label);
+    while(ext->text[byte_i + i] != '\0') {
+        ext->text[byte_i + i] = dot_tmp[i];
+        i++;
+    }
+    ext->text[byte_i + i] = dot_tmp[i];
+    lv_label_dot_tmp_free(label);
+
+    ext->dot_end = LV_LABEL_DOT_END_INV;
+}
+
+#if LV_USE_ANIMATION
+static void lv_label_set_offset_x(lv_obj_t * label, lv_coord_t x)
+{
+    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
+    ext->offset.x        = x;
+    lv_obj_invalidate(label);
+}
+
+static void lv_label_set_offset_y(lv_obj_t * label, lv_coord_t y)
+{
+    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
+    ext->offset.y        = y;
+    lv_obj_invalidate(label);
+}
+#endif
+
+/**
+ * Store `len` characters from `data`. Allocates space if necessary.
+ *
+ * @param label pointer to label object
+ * @param len Number of characters to store.
+ * @return true on success.
+ */
+static bool lv_label_set_dot_tmp(lv_obj_t * label, char * data, uint16_t len)
+{
+    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
+    lv_label_dot_tmp_free(label); /* Deallocate any existing space */
+    if(len > sizeof(char *)) {
+        /* Memory needs to be allocated. Allocates an additional byte
+         * for a NULL-terminator so it can be copied. */
+        ext->dot.tmp_ptr = lv_mem_alloc(len + 1);
+        if(ext->dot.tmp_ptr == NULL) {
+            LV_LOG_ERROR("Failed to allocate memory for dot_tmp_ptr");
+            return false;
+        }
+        memcpy(ext->dot.tmp_ptr, data, len);
+        ext->dot.tmp_ptr[len] = '\0';
+        ext->dot_tmp_alloc    = true;
+    } else {
+        /* Characters can be directly stored in object */
+        ext->dot_tmp_alloc = false;
+        memcpy(ext->dot.tmp, data, len);
+    }
+    return true;
+}
+
+/**
+ * Get the stored dot_tmp characters
+ * @param label pointer to label object
+ * @return char pointer to a stored characters. Is *not* necessarily 
NULL-terminated.
+ */
+static char * lv_label_get_dot_tmp(lv_obj_t * label)
+{
+    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
+    if(ext->dot_tmp_alloc) {
+        return ext->dot.tmp_ptr;
+    } else {
+        return ext->dot.tmp;
+    }
+}
+
+/**
+ * Free the dot_tmp_ptr field if it was previously allocated.
+ * Always clears the field
+ * @param label pointer to label object.
+ */
+static void lv_label_dot_tmp_free(lv_obj_t * label)
+{
+    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
+    if(ext->dot_tmp_alloc && ext->dot.tmp_ptr) {
+        lv_mem_free(ext->dot.tmp_ptr);
+    }
+    ext->dot_tmp_alloc = false;
+    ext->dot.tmp_ptr   = NULL;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_label.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_label.h
new file mode 100755
index 0000000..faa2168
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_label.h
@@ -0,0 +1,351 @@
+/**
+ * @file lv_rect.h
+ *
+ */
+
+#ifndef LV_LABEL_H
+#define LV_LABEL_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_LABEL != 0
+
+#include <stdarg.h>
+#include "../lv_core/lv_obj.h"
+#include "../lv_font/lv_font.h"
+#include "../lv_font/lv_symbol_def.h"
+#include "../lv_misc/lv_txt.h"
+#include "../lv_draw/lv_draw.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_LABEL_DOT_NUM 3
+#define LV_LABEL_POS_LAST 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
+ **********************/
+
+/** Long mode behaviors. Used in 'lv_label_ext_t' */
+enum {
+    LV_LABEL_LONG_EXPAND,    /**< Expand the object size to the text size*/
+    LV_LABEL_LONG_BREAK,     /**< Keep the object width, break the too long 
lines and expand the object
+                                height*/
+    LV_LABEL_LONG_DOT,       /**< Keep the size and write dots at the end if 
the text is too long*/
+    LV_LABEL_LONG_SROLL,      /**< Keep the size and roll the text back and 
forth*/
+    LV_LABEL_LONG_SROLL_CIRC, /**< Keep the size and roll the text circularly*/
+    LV_LABEL_LONG_CROP,      /**< Keep the size and crop the text out of it*/
+};
+typedef uint8_t lv_label_long_mode_t;
+
+/** Label align policy*/
+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;
+
+/** Data of label*/
+typedef struct
+{
+    /*Inherited from 'base_obj' so no inherited ext.*/ /*Ext. of ancestor*/
+    /*New data for this type */
+    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[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
+
+#if LV_LABEL_TEXT_SEL
+    uint16_t txt_sel_start; /*Left-most selection character*/
+    uint16_t txt_sel_end;   /*Right-most selection character*/
+#endif
+
+    lv_label_long_mode_t long_mode : 3; /*Determinate what to do with the long 
texts*/
+    uint8_t static_txt : 1;             /*Flag to indicate the text is static*/
+    uint8_t align : 2;                  /*Align type from 'lv_label_align_t'*/
+    uint8_t recolor : 1;                /*Enable in-line letter re-coloring*/
+    uint8_t expand : 1;                 /*Ignore real width (used by the 
library with LV_LABEL_LONG_ROLL)*/
+    uint8_t body_draw : 1;              /*Draw background body*/
+    uint8_t dot_tmp_alloc : 1; /*True if dot_tmp has been allocated. False if 
dot_tmp directly holds up to 4 bytes of
+                                  characters */
+} lv_label_ext_t;
+
+/** Label styles*/
+enum {
+    LV_LABEL_STYLE_MAIN,
+};
+typedef uint8_t lv_label_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a label objects
+ * @param par pointer to an object, it will be the parent of the new label
+ * @param copy pointer to a button object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created button
+ */
+lv_obj_t * lv_label_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new text for a label. Memory will be allocated to store the text by 
the label.
+ * @param label pointer to a label object
+ * @param text '\0' terminated character string. NULL to refresh with the 
current text.
+ */
+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.
+ * @param label pointer to a label object
+ * @param array array of characters or NULL to refresh the label
+ * @param size the size of 'array' in bytes
+ */
+void lv_label_set_array_text(lv_obj_t * label, const char * array, uint16_t 
size);
+
+/**
+ * Set a static text. It will not be saved by the label so the 'text' variable
+ * has to be 'alive' while the label exist.
+ * @param label pointer to a label object
+ * @param text pointer to a text. NULL to refresh with the current text.
+ */
+void lv_label_set_static_text(lv_obj_t * label, const char * text);
+
+/**
+ * Set the behavior of the label with longer text then the object size
+ * @param label pointer to a label object
+ * @param long_mode the new mode from 'lv_label_long_mode' enum.
+ *                  In LV_LONG_BREAK/LONG/ROLL the size of the label should be 
set AFTER this
+ * function
+ */
+void lv_label_set_long_mode(lv_obj_t * label, lv_label_long_mode_t long_mode);
+
+/**
+ * Set the align of the label (left or center)
+ * @param label pointer to a label object
+ * @param align 'LV_LABEL_ALIGN_LEFT' or 'LV_LABEL_ALIGN_LEFT'
+ */
+void lv_label_set_align(lv_obj_t * label, lv_label_align_t align);
+
+/**
+ * Enable the recoloring by in-line commands
+ * @param label pointer to a label object
+ * @param en true: enable recoloring, false: disable
+ */
+void lv_label_set_recolor(lv_obj_t * label, bool en);
+
+/**
+ * Set the label to draw (or not draw) background specified in its style's body
+ * @param label pointer to a label object
+ * @param en true: draw body; false: don't draw body
+ */
+void lv_label_set_body_draw(lv_obj_t * label, bool en);
+
+/**
+ * Set the label's animation speed in LV_LABEL_LONG_SROLL/SCROLL_CIRC modes
+ * @param label pointer to a label object
+ * @param anim_speed speed of animation in px/sec unit
+ */
+void lv_label_set_anim_speed(lv_obj_t * label, uint16_t anim_speed);
+
+/**
+ * Set the style of an label
+ * @param label pointer to an label object
+ * @param type which style should be get (can be only `LV_LABEL_STYLE_MAIN`)
+ * @param style pointer to a style
+ */
+static inline void lv_label_set_style(lv_obj_t * label, lv_label_style_t type, 
const lv_style_t * style)
+{
+    (void)type; /*Unused*/
+    lv_obj_set_style(label, style);
+}
+
+/**
+ * @brief Set the selection start index.
+ * @param label pointer to a label object.
+ * @param index index to set. `LV_LABEL_TXT_SEL_OFF` to select nothing.
+ */
+void lv_label_set_text_sel_start(lv_obj_t * label, uint16_t index);
+
+/**
+ * @brief Set the selection end index.
+ * @param label pointer to a label object.
+ * @param index index to set. `LV_LABEL_TXT_SEL_OFF` to select nothing.
+ */
+void lv_label_set_text_sel_end(lv_obj_t * label, uint16_t index);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the text of a label
+ * @param label pointer to a label object
+ * @return the text of the label
+ */
+char * lv_label_get_text(const lv_obj_t * label);
+
+/**
+ * Get the long mode of a label
+ * @param label pointer to a label object
+ * @return the long mode
+ */
+lv_label_long_mode_t lv_label_get_long_mode(const lv_obj_t * label);
+
+/**
+ * Get the align attribute
+ * @param label pointer to a label object
+ * @return LV_LABEL_ALIGN_LEFT or LV_LABEL_ALIGN_CENTER
+ */
+lv_label_align_t lv_label_get_align(const lv_obj_t * label);
+
+/**
+ * Get the recoloring attribute
+ * @param label pointer to a label object
+ * @return true: recoloring is enabled, false: disable
+ */
+bool lv_label_get_recolor(const lv_obj_t * label);
+
+/**
+ * Get the body draw attribute
+ * @param label pointer to a label object
+ * @return true: draw body; false: don't draw body
+ */
+bool lv_label_get_body_draw(const lv_obj_t * label);
+
+/**
+ * Get the label's animation speed in LV_LABEL_LONG_ROLL and SCROLL modes
+ * @param label pointer to a label object
+ * @return speed of animation in px/sec unit
+ */
+uint16_t lv_label_get_anim_speed(const lv_obj_t * label);
+
+/**
+ * Get the relative x and y coordinates of a letter
+ * @param label pointer to a label object
+ * @param index index of the letter [0 ... text length]. Expressed in 
character index, not byte
+ * 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);
+
+/**
+ * Get the index of letter on a relative point of a label
+ * @param label pointer to label object
+ * @param pos pointer to point with coordinates on a the label
+ * @return the index of the letter on the 'pos_p' point (E.g. on 0;0 is the 0. 
letter)
+ * Expressed in character index and not byte index (different in UTF-8)
+ */
+uint16_t lv_label_get_letter_on(const lv_obj_t * label, lv_point_t * pos);
+
+/**
+ * Check if a character is drawn under a point.
+ * @param label Label object
+ * @param pos Point to check for characte under
+ * @return whether a character is drawn under the point
+ */
+bool lv_label_is_char_under_pos(const lv_obj_t * label, lv_point_t * pos);
+
+/**
+ * Get the style of an label object
+ * @param label pointer to an label object
+ * @param type which style should be get (can be only `LV_LABEL_STYLE_MAIN`)
+ * @return pointer to the label's style
+ */
+static inline const lv_style_t * lv_label_get_style(const lv_obj_t * label, 
lv_label_style_t type)
+{
+    (void)type; /*Unused*/
+    return lv_obj_get_style(label);
+}
+
+/**
+ * @brief Get the selection start index.
+ * @param label pointer to a label object.
+ * @return selection start index. `LV_LABEL_TXT_SEL_OFF` if nothing is 
selected.
+ */
+uint16_t lv_label_get_text_sel_start(const lv_obj_t * label);
+
+/**
+ * @brief Get the selection end index.
+ * @param label pointer to a label object.
+ * @return selection end index. `LV_LABEL_TXT_SEL_OFF` if nothing is selected.
+ */
+uint16_t lv_label_get_text_sel_end(const lv_obj_t * label);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Insert a text to the label. The label text can not be static.
+ * @param label pointer to a label object
+ * @param pos character index to insert. Expressed in character index and not 
byte index (Different
+ * in UTF-8) 0: before first char. LV_LABEL_POS_LAST: after last char.
+ * @param txt pointer to the text to insert
+ */
+void lv_label_ins_text(lv_obj_t * label, uint32_t pos, const char * txt);
+
+/**
+ * Delete characters from a label. The label text can not be static.
+ * @param label pointer to a label object
+ * @param pos character index to insert. Expressed in character index and not 
byte index (Different
+ * in UTF-8) 0: before first char.
+ * @param cnt number of characters to cut
+ */
+void lv_label_cut_text(lv_obj_t * label, uint32_t pos, uint32_t cnt);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_LABEL*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_LABEL_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_led.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_led.c
new file mode 100755
index 0000000..133ccc8
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_led.c
@@ -0,0 +1,258 @@
+/**
+ * @file lv_led.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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
+#define LV_LED_BRIGHT_ON 255
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_led_design(lv_obj_t * led, const lv_area_t * mask, 
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_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a led objects
+ * @param par pointer to an object, it will be the parent of the new led
+ * @param copy pointer to a led object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created led
+ */
+lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("led create started");
+
+    /*Create the ancestor basic object*/
+    lv_obj_t * new_led = lv_obj_create(par, copy);
+    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);
+
+    /*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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    ext->bright = LV_LED_BRIGHT_ON;
+
+    lv_obj_set_signal_cb(new_led, lv_led_signal);
+    lv_obj_set_design_cb(new_led, lv_led_design);
+
+    /*Init the new led object*/
+    if(copy == NULL) {
+        lv_obj_set_size(new_led, LV_LED_WIDTH_DEF, LV_LED_HEIGHT_DEF);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_led_set_style(new_led, LV_LED_STYLE_MAIN, th->style.led);
+        } else {
+            lv_led_set_style(new_led, LV_LED_STYLE_MAIN, 
&lv_style_pretty_color);
+        }
+    }
+    /*Copy an existing object*/
+    else {
+        lv_led_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->bright             = copy_ext->bright;
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_led);
+    }
+
+    LV_LOG_INFO("led created");
+
+    return new_led;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the brightness of a LED object
+ * @param led pointer to a LED object
+ * @param bright 0 (max. dark) ... 255 (max. light)
+ */
+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;
+
+    ext->bright = bright;
+
+    /*Invalidate the object there fore it will be redrawn*/
+    lv_obj_invalidate(led);
+}
+
+/**
+ * Light on a LED
+ * @param led pointer to a LED object
+ */
+void lv_led_on(lv_obj_t * led)
+{
+    LV_ASSERT_OBJ(led, LV_OBJX_NAME);
+
+    lv_led_set_bright(led, LV_LED_BRIGHT_ON);
+}
+
+/**
+ * Light off a LED
+ * @param led pointer to a LED object
+ */
+void lv_led_off(lv_obj_t * led)
+{
+    LV_ASSERT_OBJ(led, LV_OBJX_NAME);
+
+    lv_led_set_bright(led, LV_LED_BRIGHT_OFF);
+}
+
+/**
+ * Toggle the state of a LED
+ * @param led pointer to a LED object
+ */
+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);
+    else
+        lv_led_on(led);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the brightness of a LEd object
+ * @param led pointer to LED object
+ * @return bright 0 (max. dark) ... 255 (max. light)
+ */
+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;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_led_design(lv_obj_t * led, const lv_area_t * mask, 
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);
+    } 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);
+        const lv_style_t * style = lv_obj_get_style(led);
+
+        /* Store the real pointer because of 'lv_group'
+         * If the object is in focus 'lv_obj_get_style()' will give a pointer 
to tmp style
+         * and to the real object style. It is important because of style 
change tricks below*/
+        const lv_style_t * style_ori_p = led->style_p;
+
+        /*Create a temporal style*/
+        lv_style_t leds_tmp;
+        memcpy(&leds_tmp, style, sizeof(leds_tmp));
+
+        /*Mix. the color with black proportionally with brightness*/
+        leds_tmp.body.main_color   = lv_color_mix(leds_tmp.body.main_color, 
LV_COLOR_BLACK, ext->bright);
+        leds_tmp.body.grad_color   = lv_color_mix(leds_tmp.body.grad_color, 
LV_COLOR_BLACK, ext->bright);
+        leds_tmp.body.border.color = lv_color_mix(leds_tmp.body.border.color, 
LV_COLOR_BLACK, ext->bright);
+
+        /*Set the current swidth according to brightness proportionally 
between LV_LED_BRIGHT_OFF
+         * and LV_LED_BRIGHT_ON*/
+        uint16_t bright_tmp = ext->bright;
+        leds_tmp.body.shadow.width =
+            ((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);
+        led->style_p = style_ori_p; /*Restore the ORIGINAL style pointer*/
+    }
+    return true;
+}
+
+/**
+ * Signal function of the led
+ * @param led pointer to a led 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_led_signal(lv_obj_t * led, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* Include the ancient signal function */
+    res = ancestor_signal(led, sign, param);
+    if(res != LV_RES_OK) return res;
+
+    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_led";
+    }
+
+    return res;
+}
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_led.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_led.h
new file mode 100755
index 0000000..a0c9125
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_led.h
@@ -0,0 +1,126 @@
+/**
+ * @file lv_led.h
+ *
+ */
+
+#ifndef LV_LED_H
+#define LV_LED_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_LED != 0
+
+#include "../lv_core/lv_obj.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/*Data of led*/
+typedef struct
+{
+    /*No inherited ext.*/
+    /*New data for this type */
+    uint8_t bright; /*Current brightness of the LED (0..255)*/
+} lv_led_ext_t;
+
+/*Styles*/
+enum {
+    LV_LED_STYLE_MAIN,
+};
+typedef uint8_t lv_led_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a led objects
+ * @param par pointer to an object, it will be the parent of the new led
+ * @param copy pointer to a led object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created led
+ */
+lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/**
+ * Set the brightness of a LED object
+ * @param led pointer to a LED object
+ * @param bright 0 (max. dark) ... 255 (max. light)
+ */
+void lv_led_set_bright(lv_obj_t * led, uint8_t bright);
+
+/**
+ * Light on a LED
+ * @param led pointer to a LED object
+ */
+void lv_led_on(lv_obj_t * led);
+
+/**
+ * Light off a LED
+ * @param led pointer to a LED object
+ */
+void lv_led_off(lv_obj_t * led);
+
+/**
+ * Toggle the state of a LED
+ * @param led pointer to a LED object
+ */
+void lv_led_toggle(lv_obj_t * led);
+
+/**
+ * Set the style of a led
+ * @param led pointer to a led object
+ * @param type which style should be set (can be only `LV_LED_STYLE_MAIN`)
+ * @param style pointer to a style
+ */
+static inline void lv_led_set_style(lv_obj_t * led, lv_led_style_t type, const 
lv_style_t * style)
+{
+    (void)type; /*Unused*/
+    lv_obj_set_style(led, style);
+}
+
+/**
+ * Get the brightness of a LEd object
+ * @param led pointer to LED object
+ * @return bright 0 (max. dark) ... 255 (max. light)
+ */
+uint8_t lv_led_get_bright(const lv_obj_t * led);
+
+/**
+ * Get the style of an led object
+ * @param led pointer to an led object
+ * @param type which style should be get (can be only `LV_CHART_STYLE_MAIN`)
+ * @return pointer to the led's style
+ */
+static inline const lv_style_t * lv_led_get_style(const lv_obj_t * led, 
lv_led_style_t type)
+{
+    (void)type; /*Unused*/
+    return lv_obj_get_style(led);
+}
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_LED*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_LED_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_line.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_line.c
new file mode 100755
index 0000000..ec9e35d
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_line.c
@@ -0,0 +1,308 @@
+/**
+ * @file lv_line.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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 <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_line"
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_line_design(lv_obj_t * line, const lv_area_t * mask, 
lv_design_mode_t mode);
+static lv_res_t lv_line_signal(lv_obj_t * line, lv_signal_t sign, void * 
param);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a line objects
+ * @param par pointer to an object, it will be the parent of the new line
+ * @return pointer to the created line
+ */
+lv_obj_t * lv_line_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("line create started");
+
+    /*Create a basic object*/
+    lv_obj_t * new_line = lv_obj_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    ext->point_num   = 0;
+    ext->point_array = NULL;
+    ext->auto_size   = 1;
+    ext->y_inv       = 0;
+
+    lv_obj_set_design_cb(new_line, lv_line_design);
+    lv_obj_set_signal_cb(new_line, lv_line_signal);
+
+    /*Init the new line*/
+    if(copy == NULL) {
+        lv_obj_set_size(new_line, LV_DPI,
+                        LV_DPI);          /*Auto size is enables, but set 
default size until no points are added*/
+        lv_obj_set_style(new_line, NULL); /*Inherit parent's style*/
+        lv_obj_set_click(new_line, false);
+    }
+    /*Copy an existing object*/
+    else {
+        lv_line_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        lv_line_set_auto_size(new_line, lv_line_get_auto_size(copy));
+        lv_line_set_y_invert(new_line, lv_line_get_y_invert(copy));
+        lv_line_set_auto_size(new_line, lv_line_get_auto_size(copy));
+        lv_line_set_points(new_line, copy_ext->point_array, 
copy_ext->point_num);
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_line);
+    }
+
+    LV_LOG_INFO("line created");
+
+    return new_line;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set an array of points. The line object will connect these points.
+ * @param line pointer to a line object
+ * @param point_a an array of points. Only the address is saved,
+ * so the array can NOT be a local variable which will be destroyed
+ * @param point_num number of points in 'point_a'
+ */
+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;
+
+    if(point_num > 0 && ext->auto_size != 0) {
+        uint16_t i;
+        lv_coord_t xmax = LV_COORD_MIN;
+        lv_coord_t ymax = LV_COORD_MIN;
+        for(i = 0; i < point_num; i++) {
+            xmax = LV_MATH_MAX(point_a[i].x, xmax);
+            ymax = LV_MATH_MAX(point_a[i].y, ymax);
+        }
+
+        const lv_style_t * style = lv_line_get_style(line, LV_LINE_STYLE_MAIN);
+        lv_obj_set_size(line, xmax + style->line.width, ymax + 
style->line.width);
+    }
+
+    lv_obj_invalidate(line);
+}
+
+/**
+ * Enable (or disable) the auto-size option. The size of the object will fit 
to its points.
+ * (set width to x max and height to y max)
+ * @param line pointer to a line object
+ * @param en true: auto size is enabled, false: auto size is disabled
+ */
+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;
+
+    ext->auto_size = en == false ? 0 : 1;
+
+    /*Refresh the object*/
+    if(en) lv_line_set_points(line, ext->point_array, ext->point_num);
+}
+
+/**
+ * Enable (or disable) the y coordinate inversion.
+ * If enabled then y will be subtracted from the height of the object,
+ * therefore the y=0 coordinate will be on the bottom.
+ * @param line pointer to a line object
+ * @param en true: enable the y inversion, false:disable the y inversion
+ */
+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;
+
+    ext->y_inv = en == false ? 0 : 1;
+
+    lv_obj_invalidate(line);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the auto size attribute
+ * @param line pointer to a line object
+ * @return true: auto size is enabled, false: disabled
+ */
+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;
+}
+
+/**
+ * Get the y inversion attribute
+ * @param line pointer to a line object
+ * @return true: y inversion is enabled, false: disabled
+ */
+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;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_line_design(lv_obj_t * line, const lv_area_t * mask, 
lv_design_mode_t mode)
+{
+    /*A line never covers an area*/
+    if(mode == LV_DESIGN_COVER_CHK)
+        return false;
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+        lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
+
+        if(ext->point_num == 0 || ext->point_array == NULL) return false;
+
+        const lv_style_t * style = lv_obj_get_style(line);
+        lv_opa_t opa_scale       = lv_obj_get_opa_scale(line);
+        lv_area_t area;
+        lv_obj_get_coords(line, &area);
+        lv_coord_t x_ofs = area.x1;
+        lv_coord_t y_ofs = area.y1;
+        lv_point_t p1;
+        lv_point_t p2;
+        lv_coord_t h = lv_obj_get_height(line);
+        uint16_t i;
+
+        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;
+
+        /*Read all points and draw the lines*/
+        for(i = 0; i < ext->point_num - 1; i++) {
+
+            p1.x = ext->point_array[i].x + x_ofs;
+            p2.x = ext->point_array[i + 1].x + x_ofs;
+
+            if(ext->y_inv == 0) {
+                p1.y = ext->point_array[i].y + y_ofs;
+                p2.y = ext->point_array[i + 1].y + y_ofs;
+            } else {
+                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);
+
+            /*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);
+            }
+        }
+
+        /*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);
+        }
+    }
+    return true;
+}
+
+/**
+ * Signal function of the line
+ * @param line pointer to a line object
+ * @param sign a signal type from lv_signal_t enum
+ * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: 
the object is deleted
+ */
+static lv_res_t lv_line_signal(lv_obj_t * line, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* 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_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;
+    }
+
+    return res;
+}
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_line.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_line.h
new file mode 100755
index 0000000..cfea736
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_line.h
@@ -0,0 +1,147 @@
+/**
+ * @file lv_line.h
+ *
+ */
+
+#ifndef LV_LINE_H
+#define LV_LINE_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_LINE != 0
+
+#include "../lv_core/lv_obj.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/*Data of line*/
+typedef struct
+{
+    /*Inherited from 'base_obj' so no inherited ext.*/ /*Ext. of ancestor*/
+    const lv_point_t * point_array;                    /*Pointer to an array 
with the points of the line*/
+    uint16_t point_num;                                /*Number of points in 
'point_array' */
+    uint8_t auto_size : 1;                             /*1: set obj. width to 
x max and obj. height to y max */
+    uint8_t y_inv : 1;                                 /*1: y == 0 will be on 
the bottom*/
+} lv_line_ext_t;
+
+/*Styles*/
+enum {
+    LV_LINE_STYLE_MAIN,
+};
+typedef uint8_t lv_line_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a line objects
+ * @param par pointer to an object, it will be the parent of the new line
+ * @return pointer to the created line
+ */
+lv_obj_t * lv_line_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set an array of points. The line object will connect these points.
+ * @param line pointer to a line object
+ * @param point_a an array of points. Only the address is saved,
+ * so the array can NOT be a local variable which will be destroyed
+ * @param point_num number of points in 'point_a'
+ */
+void lv_line_set_points(lv_obj_t * line, const lv_point_t point_a[], uint16_t 
point_num);
+
+/**
+ * Enable (or disable) the auto-size option. The size of the object will fit 
to its points.
+ * (set width to x max and height to y max)
+ * @param line pointer to a line object
+ * @param en true: auto size is enabled, false: auto size is disabled
+ */
+void lv_line_set_auto_size(lv_obj_t * line, bool en);
+
+/**
+ * Enable (or disable) the y coordinate inversion.
+ * If enabled then y will be subtracted from the height of the object,
+ * therefore the y=0 coordinate will be on the bottom.
+ * @param line pointer to a line object
+ * @param en true: enable the y inversion, false:disable the y inversion
+ */
+void lv_line_set_y_invert(lv_obj_t * line, bool en);
+
+#define lv_line_set_y_inv                                                      
                                        \
+    lv_line_set_y_invert /*The name was inconsistent. In v.6.0 only 
`lv_line_set_y_invert`will                         \
+                            work */
+
+/**
+ * Set the style of a line
+ * @param line pointer to a line object
+ * @param type which style should be set (can be only `LV_LINE_STYLE_MAIN`)
+ * @param style pointer to a style
+ */
+static inline void lv_line_set_style(lv_obj_t * line, lv_line_style_t type, 
const lv_style_t * style)
+{
+    (void)type; /*Unused*/
+    lv_obj_set_style(line, style);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the auto size attribute
+ * @param line pointer to a line object
+ * @return true: auto size is enabled, false: disabled
+ */
+bool lv_line_get_auto_size(const lv_obj_t * line);
+
+/**
+ * Get the y inversion attribute
+ * @param line pointer to a line object
+ * @return true: y inversion is enabled, false: disabled
+ */
+bool lv_line_get_y_invert(const lv_obj_t * line);
+
+/**
+ * Get the style of an line object
+ * @param line pointer to an line object
+ * @param type which style should be get (can be only `LV_LINE_STYLE_MAIN`)
+ * @return pointer to the line's style
+ */
+static inline const lv_style_t * lv_line_get_style(const lv_obj_t * line, 
lv_line_style_t type)
+{
+    (void)type; /*Unused*/
+    return lv_obj_get_style(line);
+}
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_LINE*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_LINE_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_list.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_list.c
new file mode 100755
index 0000000..cf18e73
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_list.c
@@ -0,0 +1,1036 @@
+/**
+ * @file lv_list.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+#include "../lv_misc/lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_list"
+
+#define LV_LIST_LAYOUT_DEF LV_LAYOUT_COL_M
+
+#if LV_USE_ANIMATION == 0
+#undef LV_LIST_DEF_ANIM_TIME
+#define LV_LIST_DEF_ANIM_TIME 0
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static lv_res_t lv_list_signal(lv_obj_t * list, lv_signal_t sign, void * 
param);
+static lv_res_t lv_list_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * 
param);
+static void lv_list_btn_single_select(lv_obj_t * btn);
+static bool lv_list_is_list_btn(lv_obj_t * list_btn);
+static bool lv_list_is_list_img(lv_obj_t * list_btn);
+static bool lv_list_is_list_label(lv_obj_t * list_btn);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+#if LV_USE_IMG
+static lv_signal_cb_t img_signal;
+#endif
+static lv_signal_cb_t label_signal;
+static lv_signal_cb_t ancestor_page_signal;
+static lv_signal_cb_t ancestor_btn_signal;
+
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a list objects
+ * @param par pointer to an object, it will be the parent of the new list
+ * @param copy pointer to a list object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created list
+ */
+lv_obj_t * lv_list_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("list create started");
+
+    /*Create the ancestor basic object*/
+    lv_obj_t * new_list = lv_page_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    ext->style_img                        = NULL;
+    ext->styles_btn[LV_BTN_STATE_REL]     = &lv_style_btn_rel;
+    ext->styles_btn[LV_BTN_STATE_PR]      = &lv_style_btn_pr;
+    ext->styles_btn[LV_BTN_STATE_TGL_REL] = &lv_style_btn_tgl_rel;
+    ext->styles_btn[LV_BTN_STATE_TGL_PR]  = &lv_style_btn_tgl_pr;
+    ext->styles_btn[LV_BTN_STATE_INA]     = &lv_style_btn_ina;
+    ext->single_mode                      = false;
+    ext->size                             = 0;
+
+#if LV_USE_GROUP
+    ext->last_sel     = NULL;
+    ext->selected_btn = NULL;
+    ext->last_clicked_btn = NULL;
+#endif
+
+    lv_obj_set_signal_cb(new_list, lv_list_signal);
+
+    /*Init the new list object*/
+    if(copy == NULL) {
+        lv_page_set_anim_time(new_list, LV_LIST_DEF_ANIM_TIME);
+        lv_page_set_scrl_fit2(new_list, LV_FIT_FLOOD, LV_FIT_TIGHT);
+        lv_obj_set_size(new_list, 2 * LV_DPI, 3 * LV_DPI);
+        lv_page_set_scrl_layout(new_list, LV_LIST_LAYOUT_DEF);
+        lv_list_set_sb_mode(new_list, LV_SB_MODE_DRAG);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_list_set_style(new_list, LV_LIST_STYLE_BG, th->style.list.bg);
+            lv_list_set_style(new_list, LV_LIST_STYLE_SCRL, 
th->style.list.scrl);
+            lv_list_set_style(new_list, LV_LIST_STYLE_SB, th->style.list.sb);
+            lv_list_set_style(new_list, LV_LIST_STYLE_BTN_REL, 
th->style.list.btn.rel);
+            lv_list_set_style(new_list, LV_LIST_STYLE_BTN_PR, 
th->style.list.btn.pr);
+            lv_list_set_style(new_list, LV_LIST_STYLE_BTN_TGL_REL, 
th->style.list.btn.tgl_rel);
+            lv_list_set_style(new_list, LV_LIST_STYLE_BTN_TGL_PR, 
th->style.list.btn.tgl_pr);
+            lv_list_set_style(new_list, LV_LIST_STYLE_BTN_INA, 
th->style.list.btn.ina);
+        } else {
+            lv_list_set_style(new_list, LV_LIST_STYLE_BG, 
&lv_style_transp_fit);
+            lv_list_set_style(new_list, LV_LIST_STYLE_SCRL, &lv_style_pretty);
+        }
+    } else {
+        lv_list_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+
+        lv_obj_t * copy_btn = lv_list_get_next_btn(copy, NULL);
+        while(copy_btn) {
+            const void * img_src = NULL;
+#if LV_USE_IMG
+            lv_obj_t * copy_img = lv_list_get_btn_img(copy_btn);
+            if(copy_img) img_src = lv_img_get_src(copy_img);
+#endif
+            lv_list_add_btn(new_list, img_src, lv_list_get_btn_text(copy_btn));
+            copy_btn = lv_list_get_next_btn(copy, copy_btn);
+        }
+
+        lv_list_set_style(new_list, LV_LIST_STYLE_BTN_REL, 
copy_ext->styles_btn[LV_BTN_STATE_REL]);
+        lv_list_set_style(new_list, LV_LIST_STYLE_BTN_PR, 
copy_ext->styles_btn[LV_BTN_STATE_PR]);
+        lv_list_set_style(new_list, LV_LIST_STYLE_BTN_TGL_REL, 
copy_ext->styles_btn[LV_BTN_STATE_TGL_REL]);
+        lv_list_set_style(new_list, LV_LIST_STYLE_BTN_TGL_PR, 
copy_ext->styles_btn[LV_BTN_STATE_TGL_REL]);
+        lv_list_set_style(new_list, LV_LIST_STYLE_BTN_INA, 
copy_ext->styles_btn[LV_BTN_STATE_INA]);
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_list);
+    }
+
+    LV_LOG_INFO("list created");
+
+    return new_list;
+}
+
+/**
+ * Delete all children of the scrl object, without deleting scrl child.
+ * @param list pointer to an object
+ */
+void lv_list_clean(lv_obj_t * list)
+{
+    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(list);
+    ext->size           = 0;
+}
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Add a list element to the list
+ * @param list pointer to list object
+ * @param img_fn file name of an image before the text (NULL if unused)
+ * @param txt text of the list element (NULL if unused)
+ * @return pointer to the new list element which can be customized (a button)
+ */
+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*/
+    lv_obj_t * liste;
+    liste = lv_btn_create(list, NULL);
+
+    /*Save the original signal function because it will be required in 
`lv_list_btn_signal`*/
+    if(ancestor_btn_signal == NULL) ancestor_btn_signal = 
lv_obj_get_signal_cb(liste);
+
+    /*Set the default styles*/
+    lv_btn_set_style(liste, LV_BTN_STYLE_REL, 
ext->styles_btn[LV_BTN_STATE_REL]);
+    lv_btn_set_style(liste, LV_BTN_STYLE_PR, ext->styles_btn[LV_BTN_STATE_PR]);
+    lv_btn_set_style(liste, LV_BTN_STYLE_TGL_REL, 
ext->styles_btn[LV_BTN_STATE_TGL_REL]);
+    lv_btn_set_style(liste, LV_BTN_STYLE_TGL_PR, 
ext->styles_btn[LV_BTN_STATE_TGL_PR]);
+    lv_btn_set_style(liste, LV_BTN_STYLE_INA, 
ext->styles_btn[LV_BTN_STATE_INA]);
+
+    lv_page_glue_obj(liste, true);
+    lv_btn_set_layout(liste, LV_LAYOUT_ROW_M);
+    lv_btn_set_fit2(liste, LV_FIT_FLOOD, LV_FIT_TIGHT);
+    lv_obj_set_protect(liste, LV_PROTECT_PRESS_LOST);
+    lv_obj_set_signal_cb(liste, lv_list_btn_signal);
+
+#if LV_USE_IMG != 0
+    lv_obj_t * img = NULL;
+    if(img_src) {
+        img = lv_img_create(liste, NULL);
+        lv_img_set_src(img, img_src);
+        lv_obj_set_style(img, ext->style_img);
+        lv_obj_set_click(img, false);
+        if(img_signal == NULL) img_signal = lv_obj_get_signal_cb(img);
+    }
+#endif
+    if(txt != NULL) {
+        lv_coord_t btn_hor_pad = 
ext->styles_btn[LV_BTN_STYLE_REL]->body.padding.left -
+                                 
ext->styles_btn[LV_BTN_STYLE_REL]->body.padding.right;
+        lv_obj_t * label = lv_label_create(liste, NULL);
+        lv_label_set_text(label, txt);
+        lv_obj_set_click(label, false);
+        lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL_CIRC);
+        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
+    /* If this is the first item to be added to the list and the list is
+     * focused, select it */
+    {
+        lv_group_t * g = lv_obj_get_group(list);
+        if(ext->size == 1 && lv_group_get_focused(g) == list) {
+            lv_list_set_btn_selected(list, liste);
+        }
+    }
+#endif
+
+    return liste;
+}
+
+/**
+ * Remove the index of the button in the list
+ * @param list pointer to a list object
+ * @param index pointer to a the button's index in the list, index must be 0 
<= index <
+ * lv_list_ext_t.size
+ * @return true: successfully deleted
+ */
+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;
+    lv_obj_t * e   = lv_list_get_next_btn(list, NULL);
+    while(e != NULL) {
+        if(count == index) {
+            lv_obj_del(e);
+            ext->size--;
+            return true;
+        }
+        e = lv_list_get_next_btn(list, e);
+        count++;
+    }
+    return false;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set single button selected mode, only one button will be selected if 
enabled.
+ * @param list pointer to the currently pressed list object
+ * @param mode, enable(true)/disable(false) single selected mode.
+ */
+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;
+}
+
+#if LV_USE_GROUP
+
+/**
+ * Make a button selected
+ * @param list pointer to a list object
+ * @param btn pointer to a button to select
+ *            NULL to not select any buttons
+ */
+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) {
+        lv_btn_state_t s = lv_btn_get_state(ext->selected_btn);
+        if(s == LV_BTN_STATE_PR)
+            lv_btn_set_state(ext->selected_btn, LV_BTN_STATE_REL);
+        else if(s == LV_BTN_STATE_TGL_PR)
+            lv_btn_set_state(ext->selected_btn, LV_BTN_STATE_TGL_REL);
+    }
+
+    ext->selected_btn = btn;
+
+    /*Don't forget which button was selected.
+     * It will be restored when the list is focused.*/
+    if(btn != NULL) {
+        ext->last_sel = btn;
+    }
+
+    if(ext->selected_btn) {
+        lv_btn_state_t s = lv_btn_get_state(ext->selected_btn);
+        if(s == LV_BTN_STATE_REL)
+            lv_btn_set_state(ext->selected_btn, LV_BTN_STATE_PR);
+        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_ANIM_ON);
+    }
+}
+
+#endif
+
+/**
+ * Set a style of a list
+ * @param list pointer to a list object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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;
+
+    switch(type) {
+        case LV_LIST_STYLE_BG:
+            lv_page_set_style(list, LV_PAGE_STYLE_BG, style);
+            /*style change signal will call 'refr_btn_width' */
+            break;
+        case LV_LIST_STYLE_SCRL: lv_page_set_style(list, LV_PAGE_STYLE_SCRL, 
style); break;
+        case LV_LIST_STYLE_SB: lv_page_set_style(list, LV_PAGE_STYLE_SB, 
style); break;
+        case LV_LIST_STYLE_EDGE_FLASH: lv_page_set_style(list, 
LV_PAGE_STYLE_EDGE_FLASH, style); break;
+        case LV_LIST_STYLE_BTN_REL:
+            ext->styles_btn[LV_BTN_STATE_REL] = style;
+            btn_style_refr                    = LV_BTN_STYLE_REL;
+            break;
+        case LV_LIST_STYLE_BTN_PR:
+            ext->styles_btn[LV_BTN_STATE_PR] = style;
+            btn_style_refr                   = LV_BTN_STYLE_PR;
+            break;
+        case LV_LIST_STYLE_BTN_TGL_REL:
+            ext->styles_btn[LV_BTN_STATE_TGL_REL] = style;
+            btn_style_refr                        = LV_BTN_STYLE_TGL_REL;
+            break;
+        case LV_LIST_STYLE_BTN_TGL_PR:
+            ext->styles_btn[LV_BTN_STATE_TGL_PR] = style;
+            btn_style_refr                       = LV_BTN_STYLE_TGL_PR;
+            break;
+        case LV_LIST_STYLE_BTN_INA:
+            ext->styles_btn[LV_BTN_STATE_INA] = style;
+            btn_style_refr                    = LV_BTN_STYLE_INA;
+            break;
+    }
+
+    /*Refresh existing buttons' style*/
+    if(type == LV_LIST_STYLE_BTN_PR || type == LV_LIST_STYLE_BTN_REL || type 
== LV_LIST_STYLE_BTN_TGL_REL ||
+       type == LV_LIST_STYLE_BTN_TGL_PR || type == LV_LIST_STYLE_BTN_INA) {
+        btn = lv_list_get_prev_btn(list, NULL);
+        while(btn != NULL) {
+            lv_btn_set_style(btn, btn_style_refr, 
ext->styles_btn[btn_style_refr]);
+            btn = lv_list_get_prev_btn(list, btn);
+        }
+    }
+}
+
+/**
+ * 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
+ *====================*/
+
+/**
+ * Get single button selected mode.
+ * @param list pointer to the currently pressed list object.
+ */
+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);
+}
+
+/**
+ * Get the text of a list element
+ * @param btn pointer to list element
+ * @return pointer to the text
+ */
+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);
+}
+
+/**
+ * Get the label object from a list element
+ * @param btn pointer to a list element (button)
+ * @return pointer to the label from the list element or NULL if not found
+ */
+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;
+
+    while(lv_list_is_list_label(label) == false) {
+        label = lv_obj_get_child(btn, label);
+        if(label == NULL) break;
+    }
+
+    return label;
+}
+
+/**
+ * Get the image object from a list element
+ * @param btn pointer to a list element (button)
+ * @return pointer to the image from the list element or NULL if not found
+ */
+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;
+
+    while(lv_list_is_list_img(img) == false) {
+        img = lv_obj_get_child(btn, img);
+        if(img == NULL) break;
+    }
+
+    return img;
+#else
+    return NULL;
+#endif
+}
+
+/**
+ * Get the previous button from list. (Starts from the bottom button)
+ * @param list pointer to a list object
+ * @param prev_btn pointer to button. Search the previous before it.
+ * @return pointer to the previous button or NULL when no more buttons
+ */
+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 */
+
+    lv_obj_t * btn;
+    lv_obj_t * scrl = lv_page_get_scrl(list);
+
+    btn = lv_obj_get_child(scrl, prev_btn);
+    if(btn == NULL) return NULL;
+
+    while(lv_list_is_list_btn(btn) == false) {
+        btn = lv_obj_get_child(scrl, btn);
+        if(btn == NULL) break;
+    }
+
+    return btn;
+}
+
+/**
+ * Get the next button from list. (Starts from the top button)
+ * @param list pointer to a list object
+ * @param prev_btn pointer to button. Search the next after it.
+ * @return pointer to the next button or NULL when no more buttons
+ */
+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 */
+
+    lv_obj_t * btn;
+    lv_obj_t * scrl = lv_page_get_scrl(list);
+
+    btn = lv_obj_get_child_back(scrl, prev_btn);
+    if(btn == NULL) return NULL;
+
+    while(lv_list_is_list_btn(btn) == false) {
+        btn = lv_obj_get_child_back(scrl, btn);
+        if(btn == NULL) break;
+    }
+
+    return btn;
+}
+
+/**
+ * Get the index of the button in the list
+ * @param list pointer to a list object. If NULL, assumes btn is part of a 
list.
+ * @param btn pointer to a list element (button)
+ * @return the index of the button in the list, or -1 of the button not in 
this list
+ */
+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 */
+        list = lv_obj_get_parent(lv_obj_get_parent(btn));
+    }
+    lv_obj_t * e = lv_list_get_next_btn(list, NULL);
+    while(e != NULL) {
+        if(e == btn) {
+            return index;
+        }
+        index++;
+        e = lv_list_get_next_btn(list, e);
+    }
+    return -1;
+}
+
+/**
+ * Get the number of buttons in the list
+ * @param list pointer to a list object
+ * @return the number of buttons in the list
+ */
+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;
+}
+
+#if LV_USE_GROUP
+/**
+ * Get the currently selected button
+ * @param list pointer to a list object
+ * @return pointer to the selected button
+ */
+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);
+
+    switch(type) {
+        case LV_LIST_STYLE_BG: style = lv_page_get_style(list, 
LV_PAGE_STYLE_BG); break;
+        case LV_LIST_STYLE_SCRL: style = lv_page_get_style(list, 
LV_PAGE_STYLE_SCRL); break;
+        case LV_LIST_STYLE_SB: style = lv_page_get_style(list, 
LV_PAGE_STYLE_SB); break;
+        case LV_LIST_STYLE_EDGE_FLASH: style = lv_page_get_style(list, 
LV_PAGE_STYLE_EDGE_FLASH); break;
+        case LV_LIST_STYLE_BTN_REL: style = ext->styles_btn[LV_BTN_STATE_REL]; 
break;
+        case LV_LIST_STYLE_BTN_PR: style = ext->styles_btn[LV_BTN_STATE_PR]; 
break;
+        case LV_LIST_STYLE_BTN_TGL_REL: style = 
ext->styles_btn[LV_BTN_STATE_TGL_REL]; break;
+        case LV_LIST_STYLE_BTN_TGL_PR: style = 
ext->styles_btn[LV_BTN_STATE_TGL_PR]; break;
+        case LV_LIST_STYLE_BTN_INA: style = ext->styles_btn[LV_BTN_STATE_INA]; 
break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Move the list elements up by one
+ * @param list pointer a to list object
+ */
+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);
+    lv_obj_t * e;
+    lv_obj_t * e_prev = NULL;
+
+    e                 = lv_list_get_prev_btn(list, NULL);
+    while(e != NULL) {
+        if(e->coords.y2 <= list->coords.y2) {
+            if(e_prev != NULL) {
+                lv_coord_t new_y = lv_obj_get_height(list) - 
(lv_obj_get_y(e_prev) + lv_obj_get_height(e_prev));
+                if(lv_list_get_anim_time(list) == 0) {
+                    lv_obj_set_y(scrl, new_y);
+                } else {
+#if LV_USE_ANIMATION
+                    lv_anim_t a;
+                    a.var            = scrl;
+                    a.start          = lv_obj_get_y(scrl);
+                    a.end            = new_y;
+                    a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_y;
+                    a.path_cb        = lv_anim_path_linear;
+                    a.ready_cb       = NULL;
+                    a.act_time       = 0;
+                    a.time           = LV_LIST_DEF_ANIM_TIME;
+                    a.playback       = 0;
+                    a.playback_pause = 0;
+                    a.repeat         = 0;
+                    a.repeat_pause   = 0;
+                    lv_anim_create(&a);
+#endif
+                }
+            }
+            break;
+        }
+        e_prev = e;
+        e      = lv_list_get_prev_btn(list, e);
+    }
+}
+
+/**
+ * Move the list elements down by one
+ * @param list pointer to a list object
+ */
+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);
+    lv_obj_t * e;
+    e = lv_list_get_prev_btn(list, NULL);
+    while(e != NULL) {
+        if(e->coords.y1 < list->coords.y1) {
+            lv_coord_t new_y = -lv_obj_get_y(e);
+            if(lv_list_get_anim_time(list) == 0) {
+                lv_obj_set_y(scrl, new_y);
+            } else {
+#if LV_USE_ANIMATION
+                lv_anim_t a;
+                a.var            = scrl;
+                a.start          = lv_obj_get_y(scrl);
+                a.end            = new_y;
+                a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_y;
+                a.path_cb        = lv_anim_path_linear;
+                a.ready_cb       = NULL;
+                a.act_time       = 0;
+                a.time           = LV_LIST_DEF_ANIM_TIME;
+                a.playback       = 0;
+                a.playback_pause = 0;
+                a.repeat         = 0;
+                a.repeat_pause   = 0;
+                lv_anim_create(&a);
+#endif
+            }
+            break;
+        }
+        e = lv_list_get_prev_btn(list, e);
+    }
+}
+
+/**
+ * Focus on a list button. It ensures that the button will be visible on the 
list.
+ * @param btn pointer to a list button to focus
+ * @param anim_en LV_ANIM_ON: scroll with animation, LV_ANOM_OFF: without 
animation
+ */
+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;
+#endif
+
+    lv_obj_t * list = lv_obj_get_parent(lv_obj_get_parent(btn));
+
+    lv_page_focus(list, btn, anim == LV_ANIM_OFF ? 0 : 
lv_list_get_anim_time(list));
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Signal function of the list
+ * @param list pointer to a list 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_list_signal(lv_obj_t * list, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* 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) {
+#if LV_USE_GROUP
+        /*If pressed/released etc by a KEYPAD or ENCODER delegate signal to 
the button*/
+        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(list)))) {
+            /*Get the 'pressed' button*/
+            lv_obj_t * btn = NULL;
+            btn            = lv_list_get_prev_btn(list, btn);
+            while(btn != NULL) {
+                if(lv_btn_get_state(btn) == LV_BTN_STATE_PR) break;
+                btn = lv_list_get_prev_btn(list, btn);
+            }
+            lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
+
+            /*The page receives the key presses so the events should be 
propagated to the selected
+             * button*/
+            if(btn) {
+                if(sign == LV_SIGNAL_PRESSED) {
+                    res = lv_event_send(btn, LV_EVENT_PRESSED, NULL);
+                } else if(sign == LV_SIGNAL_PRESSING) {
+                    res = lv_event_send(btn, LV_EVENT_PRESSING, NULL);
+                } else if(sign == LV_SIGNAL_LONG_PRESS) {
+                    res = lv_event_send(btn, LV_EVENT_LONG_PRESSED, NULL);
+                } else if(sign == LV_SIGNAL_LONG_PRESS_REP) {
+                    res = lv_event_send(btn, LV_EVENT_LONG_PRESSED_REPEAT, 
NULL);
+                } else if(sign == LV_SIGNAL_RELEASED) {
+#if LV_USE_GROUP
+                    ext->last_sel = btn;
+#endif
+                    if(indev->proc.long_pr_sent == 0) {
+                        res = lv_event_send(btn, LV_EVENT_SHORT_CLICKED, NULL);
+                    }
+                    if(lv_indev_is_dragging(indev) == false && res == 
LV_RES_OK) {
+                        res = lv_event_send(btn, LV_EVENT_CLICKED, NULL);
+                    }
+                    if(res == LV_RES_OK) {
+                        res = lv_event_send(btn, LV_EVENT_RELEASED, NULL);
+                    }
+                }
+            }
+        }
+#endif
+    } else if(sign == LV_SIGNAL_FOCUS) {
+
+#if LV_USE_GROUP
+        lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
+        /*With ENCODER select the first button only in edit mode*/
+        if(indev_type == LV_INDEV_TYPE_ENCODER) {
+            lv_group_t * g = lv_obj_get_group(list);
+            if(lv_group_get_editing(g)) {
+                lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
+                if(ext->last_sel) {
+                    /* Select the    last used button */
+                    lv_list_set_btn_selected(list, ext->last_sel);
+                } else {
+                    /*Get the first button and mark it as selected*/
+                    lv_list_set_btn_selected(list, lv_list_get_next_btn(list, 
NULL));
+                }
+            } else {
+                lv_list_set_btn_selected(list, NULL);
+            }
+        }
+        /*Else select the clicked button*/
+        else {
+            /*Mark the last clicked button (if any) as selected because it 
triggered the focus*/
+            lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
+            if(ext->last_clicked_btn) {
+                lv_list_set_btn_selected(list, ext->last_clicked_btn);
+                ext->last_clicked_btn = NULL;
+
+            } else {
+                if(ext->last_sel) {
+                    /* Select the last used button */
+                    lv_list_set_btn_selected(list, ext->last_sel);
+                } else {
+                    /*Get the first button and mark it as selected*/
+                    lv_list_set_btn_selected(list, lv_list_get_next_btn(list, 
NULL));
+                }
+            }
+        }
+#endif
+    } else if(sign == LV_SIGNAL_DEFOCUS) {
+
+#if LV_USE_GROUP
+        /*De-select the selected btn*/
+        lv_list_set_btn_selected(list, NULL);
+        lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
+        ext->last_clicked_btn    = NULL; /*button click will be set if click 
happens before focus*/
+        ext->selected_btn   = NULL;
+#endif
+    } else if(sign == LV_SIGNAL_GET_EDITABLE) {
+        bool * editable = (bool *)param;
+        *editable       = true;
+    } else if(sign == LV_SIGNAL_CONTROL) {
+
+#if LV_USE_GROUP
+        char c = *((char *)param);
+        if(c == LV_KEY_RIGHT || c == LV_KEY_DOWN) {
+            lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
+            /*If there is a valid selected button the make the previous 
selected*/
+            if(ext->selected_btn) {
+                lv_obj_t * btn_prev = lv_list_get_next_btn(list, 
ext->selected_btn);
+                if(btn_prev) lv_list_set_btn_selected(list, btn_prev);
+            }
+            /*If there is no selected button the make the first selected*/
+            else {
+                lv_obj_t * btn = lv_list_get_next_btn(list, NULL);
+                if(btn)
+                    lv_list_set_btn_selected(list,
+                                             btn); /*If there are no buttons 
on the list then there is no first button*/
+            }
+        } else if(c == LV_KEY_LEFT || c == LV_KEY_UP) {
+            lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
+            /*If there is a valid selected button the make the next selected*/
+            if(ext->selected_btn != NULL) {
+                lv_obj_t * btn_next = lv_list_get_prev_btn(list, 
ext->selected_btn);
+                if(btn_next) lv_list_set_btn_selected(list, btn_next);
+            }
+            /*If there is no selected button the make the first selected*/
+            else {
+                lv_obj_t * btn = lv_list_get_next_btn(list, NULL);
+                if(btn) lv_list_set_btn_selected(list, btn);
+            }
+        }
+#endif
+    }
+    return res;
+}
+
+/**
+ * Signal function of the list buttons
+ * @param btn pointer to a button on the list
+ * @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_list_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res;
+
+    /* 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);
+        if(lv_group_get_focused(g) == list && 
lv_indev_is_dragging(lv_indev_get_act()) == false) {
+            /* Is the list is focused then be sure only the button being 
released
+             * has a pressed state to indicate the selected state on the list*/
+            lv_obj_t * btn_i = lv_list_get_prev_btn(list, NULL);
+            while(btn_i) {
+                lv_btn_state_t s = lv_btn_get_state(btn_i);
+                if(s == LV_BTN_STATE_PR)
+                    lv_btn_set_state(btn_i, LV_BTN_STATE_REL);
+                else if(s == LV_BTN_STATE_TGL_PR)
+                    lv_btn_set_state(btn_i, LV_BTN_STATE_TGL_REL);
+                btn_i = lv_list_get_prev_btn(list, btn_i);
+            }
+
+            /*Make the released button "selected"*/
+            lv_list_set_btn_selected(list, btn);
+        }
+
+        /* If `click_focus == 1` then LV_SIGNAL_FOCUS need to know which 
button triggered the focus
+         * to mark it as selected (pressed state)*/
+        ext->last_clicked_btn = btn;
+#endif
+        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
+        lv_obj_t * list = lv_obj_get_parent(lv_obj_get_parent(btn));
+        lv_obj_t * sel  = lv_list_get_btn_selected(list);
+        if(sel == btn) lv_list_set_btn_selected(list, 
lv_list_get_next_btn(list, btn));
+#endif
+    }
+
+    return res;
+}
+
+/**
+ * Make a single button selected in the list, deselect others.
+ * @param btn pointer to the currently pressed list btn object
+ */
+static void lv_list_btn_single_select(lv_obj_t * btn)
+{
+    lv_obj_t * list = lv_obj_get_parent(lv_obj_get_parent(btn));
+
+    lv_obj_t * e = lv_list_get_next_btn(list, NULL);
+    do {
+        if(e == btn) {
+            lv_btn_set_state(e, LV_BTN_STATE_TGL_REL);
+        } else {
+            lv_btn_set_state(e, LV_BTN_STATE_REL);
+        }
+        e = lv_list_get_next_btn(list, e);
+    } while(e != NULL);
+}
+
+/**
+ * Check if this is really a list button or another object.
+ * @param list_btn List button
+ */
+static bool lv_list_is_list_btn(lv_obj_t * list_btn)
+{
+    lv_obj_type_t type;
+
+    lv_obj_get_type(list_btn, &type);
+    uint8_t cnt;
+    for(cnt = 0; cnt < LV_MAX_ANCESTOR_NUM; cnt++) {
+        if(type.type[cnt] == NULL) break;
+        if(!strcmp(type.type[cnt], "lv_btn")) return true;
+    }
+    return false;
+}
+
+/**
+ * Check if this is really a list label or another object.
+ * @param list_label List label
+ */
+static bool lv_list_is_list_label(lv_obj_t * list_label)
+{
+    lv_obj_type_t type;
+
+    lv_obj_get_type(list_label, &type);
+    uint8_t cnt;
+    for(cnt = 0; cnt < LV_MAX_ANCESTOR_NUM; cnt++) {
+        if(type.type[cnt] == NULL) break;
+        if(!strcmp(type.type[cnt], "lv_label")) return true;
+    }
+    return false;
+}
+
+/**
+ * Check if this is really a list image or another object.
+ * @param list_image List image
+ */
+static bool lv_list_is_list_img(lv_obj_t * list_img)
+{
+    lv_obj_type_t type;
+
+    lv_obj_get_type(list_img, &type);
+    uint8_t cnt;
+    for(cnt = 0; cnt < LV_MAX_ANCESTOR_NUM; cnt++) {
+        if(type.type[cnt] == NULL) break;
+        if(!strcmp(type.type[cnt], "lv_img")) return true;
+    }
+    return false;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_list.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_list.h
new file mode 100755
index 0000000..e17bc87
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_list.h
@@ -0,0 +1,359 @@
+/**
+ * @file lv_list.h
+ *
+ */
+
+#ifndef LV_LIST_H
+#define LV_LIST_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_LIST != 0
+
+/*Testing of dependencies*/
+#if LV_USE_PAGE == 0
+#error "lv_list: lv_page is required. Enable it in lv_conf.h (LV_USE_PAGE  1) "
+#endif
+
+#if LV_USE_BTN == 0
+#error "lv_list: lv_btn is required. Enable it in lv_conf.h (LV_USE_BTN  1) "
+#endif
+
+#if LV_USE_LABEL == 0
+#error "lv_list: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL  
1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "lv_page.h"
+#include "lv_btn.h"
+#include "lv_label.h"
+#include "lv_img.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+/*Data of list*/
+typedef struct
+{
+    lv_page_ext_t page; /*Ext. of ancestor*/
+    /*New data for this type */
+    const lv_style_t * styles_btn[_LV_BTN_STATE_NUM]; /*Styles of the list 
element buttons*/
+    const lv_style_t * style_img;                     /*Style of the list 
element images on buttons*/
+    uint16_t size;                                    /*the number of 
items(buttons) in the list*/
+
+    uint8_t single_mode : 1; /* whether single selected mode is enabled */
+
+#if LV_USE_GROUP
+    lv_obj_t * last_sel;     /* The last selected button. It will be reverted 
when the list is focused again */
+    lv_obj_t * selected_btn; /* The button is currently being selected*/
+    /*Used to make the last clicked button pressed (selected) when the list 
become focused and
+     * `click_focus == 1`*/
+    lv_obj_t * last_clicked_btn;
+#endif
+} lv_list_ext_t;
+
+/** List styles. */
+enum {
+    LV_LIST_STYLE_BG, /**< List background style */
+    LV_LIST_STYLE_SCRL, /**< List scrollable area style. */
+    LV_LIST_STYLE_SB, /**< List scrollbar style. */
+    LV_LIST_STYLE_EDGE_FLASH, /**< List edge flash style. */
+    LV_LIST_STYLE_BTN_REL, /**< Same meaning as the ordinary button styles. */
+    LV_LIST_STYLE_BTN_PR,
+    LV_LIST_STYLE_BTN_TGL_REL,
+    LV_LIST_STYLE_BTN_TGL_PR,
+    LV_LIST_STYLE_BTN_INA,
+};
+typedef uint8_t lv_list_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a list objects
+ * @param par pointer to an object, it will be the parent of the new list
+ * @param copy pointer to a list object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created list
+ */
+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 list pointer to an object
+ */
+void lv_list_clean(lv_obj_t * list);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Add a list element to the list
+ * @param list pointer to list object
+ * @param img_fn file name of an image before the text (NULL if unused)
+ * @param txt text of the list element (NULL if unused)
+ * @return pointer to the new list element which can be customized (a button)
+ */
+lv_obj_t * lv_list_add_btn(lv_obj_t * list, const void * img_src, const char * 
txt);
+
+/**
+ * Remove the index of the button in the list
+ * @param list pointer to a list object
+ * @param index pointer to a the button's index in the list, index must be 0 
<= index <
+ * lv_list_ext_t.size
+ * @return true: successfully deleted
+ */
+bool lv_list_remove(const lv_obj_t * list, uint16_t index);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set single button selected mode, only one button will be selected if 
enabled.
+ * @param list pointer to the currently pressed list object
+ * @param mode enable(true)/disable(false) single selected mode.
+ */
+void lv_list_set_single_mode(lv_obj_t * list, bool mode);
+
+#if LV_USE_GROUP
+
+/**
+ * Make a button selected
+ * @param list pointer to a list object
+ * @param btn pointer to a button to select
+ *            NULL to not select any buttons
+ */
+void lv_list_set_btn_selected(lv_obj_t * list, lv_obj_t * btn);
+#endif
+
+/**
+ * Set the scroll bar mode of a list
+ * @param list pointer to a list object
+ * @param sb_mode the new mode from 'lv_page_sb_mode_t' enum
+ */
+static inline void lv_list_set_sb_mode(lv_obj_t * list, lv_sb_mode_t mode)
+{
+    lv_page_set_sb_mode(list, mode);
+}
+
+/**
+ * Enable the scroll propagation feature. If enabled then the List will move 
its parent if there is
+ * no more space to scroll.
+ * @param list pointer to a List
+ * @param en true or false to enable/disable scroll propagation
+ */
+static inline void lv_list_set_scroll_propagation(lv_obj_t * list, bool en)
+{
+    lv_page_set_scroll_propagation(list, en);
+}
+
+/**
+ * Enable the edge flash effect. (Show an arc when the an edge is reached)
+ * @param list pointer to a List
+ * @param en true or false to enable/disable end flash
+ */
+static inline void lv_list_set_edge_flash(lv_obj_t * list, bool en)
+{
+    lv_page_set_edge_flash(list, en);
+}
+
+/**
+ * Set scroll animation duration on 'list_up()' 'list_down()' 'list_focus()'
+ * @param list pointer to a list object
+ * @param anim_time duration of animation [ms]
+ */
+static inline void lv_list_set_anim_time(lv_obj_t * list, uint16_t anim_time)
+{
+    lv_page_set_anim_time(list, anim_time);
+}
+
+/**
+ * Set a style of a list
+ * @param list pointer to a list object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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
+ *====================*/
+
+/**
+ * Get single button selected mode.
+ * @param list pointer to the currently pressed list object.
+ */
+bool lv_list_get_single_mode(lv_obj_t * list);
+
+/**
+ * Get the text of a list element
+ * @param btn pointer to list element
+ * @return pointer to the text
+ */
+const char * lv_list_get_btn_text(const lv_obj_t * btn);
+/**
+ * Get the label object from a list element
+ * @param btn pointer to a list element (button)
+ * @return pointer to the label from the list element or NULL if not found
+ */
+lv_obj_t * lv_list_get_btn_label(const lv_obj_t * btn);
+
+/**
+ * Get the image object from a list element
+ * @param btn pointer to a list element (button)
+ * @return pointer to the image from the list element or NULL if not found
+ */
+lv_obj_t * lv_list_get_btn_img(const lv_obj_t * btn);
+
+/**
+ * Get the next button from list. (Starts from the bottom button)
+ * @param list pointer to a list object
+ * @param prev_btn pointer to button. Search the next after it.
+ * @return pointer to the next button or NULL when no more buttons
+ */
+lv_obj_t * lv_list_get_prev_btn(const lv_obj_t * list, lv_obj_t * prev_btn);
+
+/**
+ * Get the previous button from list. (Starts from the top button)
+ * @param list pointer to a list object
+ * @param prev_btn pointer to button. Search the previous before it.
+ * @return pointer to the previous button or NULL when no more buttons
+ */
+lv_obj_t * lv_list_get_next_btn(const lv_obj_t * list, lv_obj_t * prev_btn);
+
+/**
+ * Get the index of the button in the list
+ * @param list pointer to a list object. If NULL, assumes btn is part of a 
list.
+ * @param btn pointer to a list element (button)
+ * @return the index of the button in the list, or -1 of the button not in 
this list
+ */
+int32_t lv_list_get_btn_index(const lv_obj_t * list, const lv_obj_t * btn);
+
+/**
+ * Get the number of buttons in the list
+ * @param list pointer to a list object
+ * @return the number of buttons in the list
+ */
+uint16_t lv_list_get_size(const lv_obj_t * list);
+
+#if LV_USE_GROUP
+/**
+ * Get the currently selected button. Can be used while navigating in the list 
with a keypad.
+ * @param list pointer to a list object
+ * @return pointer to the selected button
+ */
+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
+ * @return scrollbar mode from 'lv_page_sb_mode_t' enum
+ */
+static inline lv_sb_mode_t lv_list_get_sb_mode(const lv_obj_t * list)
+{
+    return lv_page_get_sb_mode(list);
+}
+
+/**
+ * Get the scroll propagation property
+ * @param list pointer to a List
+ * @return true or false
+ */
+static inline bool lv_list_get_scroll_propagation(lv_obj_t * list)
+{
+    return lv_page_get_scroll_propagation(list);
+}
+
+/**
+ * Get the scroll propagation property
+ * @param list pointer to a List
+ * @return true or false
+ */
+static inline bool lv_list_get_edge_flash(lv_obj_t * list)
+{
+    return lv_page_get_edge_flash(list);
+}
+
+/**
+ * Get scroll animation duration
+ * @param list pointer to a list object
+ * @return duration of animation [ms]
+ */
+static inline uint16_t lv_list_get_anim_time(const lv_obj_t * list)
+{
+    return lv_page_get_anim_time(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);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Move the list elements up by one
+ * @param list pointer a to list object
+ */
+void lv_list_up(const lv_obj_t * list);
+/**
+ * Move the list elements down by one
+ * @param list pointer to a list object
+ */
+void lv_list_down(const lv_obj_t * list);
+
+/**
+ * Focus on a list button. It ensures that the button will be visible on the 
list.
+ * @param btn pointer to a list button to focus
+ * @param anim LV_ANOM_ON: scroll with animation, LV_ANIM_OFF: without 
animation
+ */
+void lv_list_focus(const lv_obj_t * btn, lv_anim_enable_t anim);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_LIST*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_LIST_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_lmeter.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_lmeter.c
new file mode 100755
index 0000000..d1f2101
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_lmeter.c
@@ -0,0 +1,422 @@
+/**
+ * @file lv_lmeter.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+#include "../lv_misc/lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_lmeter"
+
+#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)
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_lmeter_design(lv_obj_t * lmeter, const lv_area_t * mask, 
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
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a line meter objects
+ * @param par pointer to an object, it will be the parent of the new line meter
+ * @param copy pointer to a line meter object, if not NULL then the new object 
will be copied from
+ * it
+ * @return pointer to the created line meter
+ */
+lv_obj_t * lv_lmeter_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("line meter create started");
+
+    /*Create the ancestor of line meter*/
+    lv_obj_t * new_lmeter = lv_obj_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    /*Initialize the allocated 'ext' */
+    ext->min_value   = 0;
+    ext->max_value   = 100;
+    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);
+    lv_obj_set_design_cb(new_lmeter, lv_lmeter_design);
+
+    /*Init the new line meter line meter*/
+    if(copy == NULL) {
+        lv_obj_set_size(new_lmeter, LV_DPI, LV_DPI);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_lmeter_set_style(new_lmeter, LV_LMETER_STYLE_MAIN, 
th->style.lmeter);
+        } else {
+            lv_lmeter_set_style(new_lmeter, LV_LMETER_STYLE_MAIN, 
&lv_style_pretty_color);
+        }
+    }
+    /*Copy an existing line meter*/
+    else {
+        lv_lmeter_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->scale_angle           = copy_ext->scale_angle;
+        ext->line_cnt              = copy_ext->line_cnt;
+        ext->min_value             = copy_ext->min_value;
+        ext->max_value             = copy_ext->max_value;
+        ext->cur_value             = copy_ext->cur_value;
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_lmeter);
+    }
+
+    LV_LOG_INFO("line meter created");
+
+    return new_lmeter;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new value on the line meter
+ * @param lmeter pointer to a line meter object
+ * @param value new value
+ */
+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;
+
+    ext->cur_value = value > ext->max_value ? ext->max_value : value;
+    ext->cur_value = ext->cur_value < ext->min_value ? ext->min_value : 
ext->cur_value;
+    lv_obj_invalidate(lmeter);
+}
+
+/**
+ * Set minimum and the maximum values of a line meter
+ * @param lmeter pointer to he line meter object
+ * @param min minimum value
+ * @param max maximum 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;
+
+    ext->max_value = max;
+    ext->min_value = min;
+    if(ext->cur_value > max) {
+        ext->cur_value = max;
+        lv_lmeter_set_value(lmeter, ext->cur_value);
+    }
+    if(ext->cur_value < min) {
+        ext->cur_value = min;
+        lv_lmeter_set_value(lmeter, ext->cur_value);
+    }
+    lv_obj_invalidate(lmeter);
+}
+
+/**
+ * Set the scale settings of a line meter
+ * @param lmeter pointer to a line meter object
+ * @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, 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;
+
+    ext->scale_angle = angle;
+    ext->line_cnt    = 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
+ *====================*/
+
+/**
+ * Get the value of a line meter
+ * @param lmeter pointer to a line meter object
+ * @return the value of the line meter
+ */
+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;
+}
+
+/**
+ * Get the minimum value of a line meter
+ * @param lmeter pointer to a line meter object
+ * @return the minimum value of the line meter
+ */
+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;
+}
+
+/**
+ * Get the maximum value of a line meter
+ * @param lmeter pointer to a line meter object
+ * @return the maximum value of the line meter
+ */
+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;
+}
+
+/**
+ * Get the scale number of a line meter
+ * @param lmeter pointer to a line meter object
+ * @return number of the scale units
+ */
+uint16_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;
+}
+
+/**
+ * Get the scale angle of a line meter
+ * @param lmeter pointer to a line meter object
+ * @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
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_lmeter_design(lv_obj_t * lmeter, const lv_area_t * mask, 
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;
+    }
+    /*Draw the object*/
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+        lv_lmeter_ext_t * ext    = lv_obj_get_ext_attr(lmeter);
+        const lv_style_t * style = lv_obj_get_style(lmeter);
+        lv_opa_t opa_scale       = lv_obj_get_opa_scale(lmeter);
+        lv_style_t style_tmp;
+        lv_style_copy(&style_tmp, style);
+
+#if LV_USE_GROUP
+        lv_group_t * g = lv_obj_get_group(lmeter);
+        if(lv_group_get_focused(g) == lmeter) {
+            style_tmp.line.width += 1;
+        }
+#endif
+
+        lv_coord_t r_out = lv_obj_get_width(lmeter) / 2;
+        lv_coord_t r_in  = r_out - style->body.padding.left;
+        if(r_in < 1) r_in = 1;
+
+        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 = 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;
+
+            /*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);
+
+            lv_point_t p1;
+            lv_point_t p2;
+
+            p2.x = x_in + x_ofs;
+            p2.y = y_in + y_ofs;
+
+            p1.x = x_out + x_ofs;
+            p1.y = y_out + y_ofs;
+
+            if(i >= level)
+                style_tmp.line.color = style->line.color;
+            else {
+                style_tmp.line.color =
+                    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);
+        }
+
+    }
+    /*Post draw when the children are drawn*/
+    else if(mode == LV_DESIGN_DRAW_POST) {
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the line meter
+ * @param lmeter pointer to a line meter 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_lmeter_signal(lv_obj_t * lmeter, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res;
+
+    /* 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')*/
+    } else if(sign == LV_SIGNAL_STYLE_CHG) {
+        lv_obj_refresh_ext_draw_pad(lmeter);
+    } 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);
+    }
+
+    return res;
+}
+
+/**
+ * Round a coordinate which is upscaled  (>=x.5 -> x + 1;   <x.5 -> 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/scriptsrcs/lvgl/src/lv_objx/lv_lmeter.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_lmeter.h
new file mode 100755
index 0000000..6deac8c
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_lmeter.h
@@ -0,0 +1,179 @@
+/**
+ * @file lv_lmeter.h
+ *
+ */
+
+#ifndef LV_LMETER_H
+#define LV_LMETER_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_LMETER != 0
+
+#include "../lv_core/lv_obj.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+/*Data of line meter*/
+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)*/
+    uint16_t angle_ofs;
+    uint16_t line_cnt;     /*Count of lines */
+    int16_t cur_value;
+    int16_t min_value;
+    int16_t max_value;
+} lv_lmeter_ext_t;
+
+/*Styles*/
+enum {
+    LV_LMETER_STYLE_MAIN,
+};
+typedef uint8_t lv_lmeter_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a line meter objects
+ * @param par pointer to an object, it will be the parent of the new line meter
+ * @param copy pointer to a line meter object, if not NULL then the new object 
will be copied from
+ * it
+ * @return pointer to the created line meter
+ */
+lv_obj_t * lv_lmeter_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new value on the line meter
+ * @param lmeter pointer to a line meter object
+ * @param value new value
+ */
+void lv_lmeter_set_value(lv_obj_t * lmeter, int16_t value);
+
+/**
+ * Set minimum and the maximum values of a line meter
+ * @param lmeter pointer to he line meter object
+ * @param min minimum value
+ * @param max maximum value
+ */
+void lv_lmeter_set_range(lv_obj_t * lmeter, int16_t min, int16_t max);
+
+/**
+ * Set the scale settings of a line meter
+ * @param lmeter pointer to a line meter object
+ * @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, 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
+ * @param lmeter pointer to a line meter object
+ * @param type which style should be set (can be only `LV_LMETER_STYLE_MAIN`)
+ * @param style set the style of the line meter
+ */
+static inline void lv_lmeter_set_style(lv_obj_t * lmeter, lv_lmeter_style_t 
type, lv_style_t * style)
+{
+    (void)type; /*Unused*/
+    lv_obj_set_style(lmeter, style);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the value of a line meter
+ * @param lmeter pointer to a line meter object
+ * @return the value of the line meter
+ */
+int16_t lv_lmeter_get_value(const lv_obj_t * lmeter);
+
+/**
+ * Get the minimum value of a line meter
+ * @param lmeter pointer to a line meter object
+ * @return the minimum value of the line meter
+ */
+int16_t lv_lmeter_get_min_value(const lv_obj_t * lmeter);
+
+/**
+ * Get the maximum value of a line meter
+ * @param lmeter pointer to a line meter object
+ * @return the maximum value of the line meter
+ */
+int16_t lv_lmeter_get_max_value(const lv_obj_t * lmeter);
+
+/**
+ * Get the scale number of a line meter
+ * @param lmeter pointer to a line meter object
+ * @return number of the scale units
+ */
+uint16_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
+ */
+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
+ * @param type which style should be get (can be only `LV_LMETER_STYLE_MAIN`)
+ * @return pointer to the line meter's style
+ */
+static inline const lv_style_t * lv_lmeter_get_style(const lv_obj_t * lmeter, 
lv_lmeter_style_t type)
+{
+    (void)type; /*Unused*/
+    return lv_obj_get_style(lmeter);
+}
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_LMETER*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_LMETER_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_mbox.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_mbox.c
new file mode 100755
index 0000000..f56904c
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_mbox.c
@@ -0,0 +1,573 @@
+/**
+ * @file lv_mbox.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+#include "../lv_misc/lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_mbos"
+
+#if LV_USE_ANIMATION
+#ifndef LV_MBOX_CLOSE_ANIM_TIME
+#define LV_MBOX_CLOSE_ANIM_TIME 200 /*List close animation time)  */
+#endif
+#else
+#undef LV_MBOX_CLOSE_ANIM_TIME
+#define LV_MBOX_CLOSE_ANIM_TIME 0 /*No animations*/
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static lv_res_t lv_mbox_signal(lv_obj_t * mbox, lv_signal_t sign, void * 
param);
+static void mbox_realign(lv_obj_t * mbox);
+#if LV_USE_ANIMATION
+static void lv_mbox_close_ready_cb(lv_anim_t * a);
+#endif
+static void lv_mbox_default_event_cb(lv_obj_t * mbox, lv_event_t event);
+static void lv_mbox_btnm_event_cb(lv_obj_t * btnm, lv_event_t event);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a message box objects
+ * @param par pointer to an object, it will be the parent of the new message 
box
+ * @param copy pointer to a message box object, if not NULL then the new 
object will be copied from
+ * it
+ * @return pointer to the created message box
+ */
+lv_obj_t * lv_mbox_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("mesasge box create started");
+
+    /*Create the ancestor message box*/
+    lv_obj_t * new_mbox = lv_cont_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    ext->text = NULL;
+    ext->btnm = NULL;
+#if LV_USE_ANIMATION
+    ext->anim_time = LV_MBOX_CLOSE_ANIM_TIME;
+#endif
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_mbox, lv_mbox_signal);
+
+    /*Init the new message box message box*/
+    if(copy == NULL) {
+        ext->text = lv_label_create(new_mbox, NULL);
+        lv_label_set_align(ext->text, LV_LABEL_ALIGN_CENTER);
+        lv_label_set_long_mode(ext->text, LV_LABEL_LONG_BREAK);
+        lv_label_set_text(ext->text, "Message");
+
+        lv_cont_set_layout(new_mbox, LV_LAYOUT_COL_M);
+        lv_cont_set_fit2(new_mbox, LV_FIT_NONE, LV_FIT_TIGHT);
+        lv_obj_set_width(new_mbox, LV_DPI * 2);
+        lv_obj_align(new_mbox, NULL, LV_ALIGN_CENTER, 0, 0);
+        lv_obj_set_event_cb(new_mbox, lv_mbox_default_event_cb);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_mbox_set_style(new_mbox, LV_MBOX_STYLE_BG, th->style.mbox.bg);
+        } else {
+            lv_mbox_set_style(new_mbox, LV_MBOX_STYLE_BG, &lv_style_pretty);
+        }
+
+    }
+    /*Copy an existing message box*/
+    else {
+        lv_mbox_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+
+        ext->text = lv_label_create(new_mbox, copy_ext->text);
+
+        /*Copy the buttons and the label on them*/
+        if(copy_ext->btnm) ext->btnm = lv_btnm_create(new_mbox, 
copy_ext->btnm);
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_mbox);
+    }
+
+    LV_LOG_INFO("mesasge box created");
+
+    return new_mbox;
+}
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Add button to the message box
+ * @param mbox pointer to message box object
+ * @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[])
+{
+    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*/
+    if(ext->btnm == NULL) {
+        ext->btnm = lv_btnm_create(mbox, NULL);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_BG, 
th->style.mbox.btn.bg);
+            lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_REL, 
th->style.mbox.btn.rel);
+            lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_PR, 
th->style.mbox.btn.pr);
+        } else {
+            lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BG, 
&lv_style_transp_fit);
+        }
+    }
+
+    lv_btnm_set_map(ext->btnm, btn_map);
+    lv_btnm_set_btn_ctrl_all(ext->btnm, LV_BTNM_CTRL_CLICK_TRIG | 
LV_BTNM_CTRL_NO_REPEAT);
+    lv_obj_set_event_cb(ext->btnm, lv_mbox_btnm_event_cb);
+
+    mbox_realign(mbox);
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the text of the message box
+ * @param mbox pointer to a message box
+ * @param txt a '\0' terminated character string which will be the message box 
text
+ */
+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);
+
+    mbox_realign(mbox);
+}
+
+/**
+ * Set animation duration
+ * @param mbox pointer to a message box object
+ * @param anim_time animation length in  milliseconds (0: no animation)
+ */
+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;
+    ext->anim_time      = anim_time;
+#else
+    (void)mbox;
+    (void)anim_time;
+#endif
+}
+
+/**
+ * Automatically delete the message box after a given time
+ * @param mbox pointer to a message box object
+ * @param delay a time (in milliseconds) to wait before delete the message box
+ */
+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*/
+        lv_anim_t a;
+        a.var            = mbox;
+        a.start          = lv_obj_get_height(mbox);
+        a.end            = 0;
+        a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_height;
+        a.path_cb        = lv_anim_path_linear;
+        a.ready_cb       = NULL;
+        a.act_time       = -delay;
+        a.time           = lv_mbox_get_anim_time(mbox);
+        a.playback       = 0;
+        a.playback_pause = 0;
+        a.repeat         = 0;
+        a.repeat_pause   = 0;
+        lv_anim_create(&a);
+
+        a.start    = lv_obj_get_width(mbox);
+        a.exec_cb  = (lv_anim_exec_xcb_t)lv_obj_set_width;
+        a.ready_cb = lv_mbox_close_ready_cb;
+        lv_anim_create(&a);
+
+        /*Disable fit to let shrinking work*/
+        lv_cont_set_fit(mbox, LV_FIT_NONE);
+    } else {
+        /*Create an animation to delete the mbox `delay` ms later*/
+        lv_anim_t a;
+        a.var            = mbox;
+        a.start          = 0;
+        a.end            = 1;
+        a.exec_cb        = (lv_anim_exec_xcb_t)NULL;
+        a.path_cb        = lv_anim_path_linear;
+        a.ready_cb       = lv_mbox_close_ready_cb;
+        a.act_time       = -delay;
+        a.time           = 0;
+        a.playback       = 0;
+        a.playback_pause = 0;
+        a.repeat         = 0;
+        a.repeat_pause   = 0;
+        lv_anim_create(&a);
+    }
+#else
+    (void)delay; /*Unused*/
+    lv_obj_del(mbox);
+#endif
+}
+
+/**
+ * Stop the auto. closing of message box
+ * @param mbox pointer to a message box object
+ */
+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
+    (void)mbox; /*Unused*/
+#endif
+}
+
+/**
+ * Set a style of a message box
+ * @param mbox pointer to a message box object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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) {
+        case LV_MBOX_STYLE_BG: lv_obj_set_style(mbox, style); break;
+        case LV_MBOX_STYLE_BTN_BG: lv_btnm_set_style(ext->btnm, 
LV_BTNM_STYLE_BG, style); break;
+        case LV_MBOX_STYLE_BTN_REL: lv_btnm_set_style(ext->btnm, 
LV_BTNM_STYLE_BTN_REL, style); break;
+        case LV_MBOX_STYLE_BTN_PR: lv_btnm_set_style(ext->btnm, 
LV_BTNM_STYLE_BTN_PR, style); break;
+        case LV_MBOX_STYLE_BTN_TGL_REL: lv_btnm_set_style(ext->btnm, 
LV_BTNM_STYLE_BTN_TGL_REL, style); break;
+        case LV_MBOX_STYLE_BTN_TGL_PR: lv_btnm_set_style(ext->btnm, 
LV_BTNM_STYLE_BTN_TGL_PR, style); break;
+        case LV_MBOX_STYLE_BTN_INA: lv_btnm_set_style(ext->btnm, 
LV_BTNM_STYLE_BTN_INA, style); break;
+    }
+
+    mbox_realign(mbox);
+}
+
+/**
+ * Set whether recoloring is enabled
+ * @param btnm pointer to button matrix object
+ * @param en whether recoloring is enabled
+ */
+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);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the text of the message box
+ * @param mbox pointer to a message box object
+ * @return pointer to the text of the message box
+ */
+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);
+}
+
+/**
+ * Get the index of the lastly "activated" button by the user (pressed, 
released etc)
+ * Useful in the the `event_cb`.
+ * @param btnm pointer to button matrix object
+ * @return  index of the last released button (LV_BTNM_BTN_NONE: if unset)
+ */
+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);
+    else
+        return LV_BTNM_BTN_NONE;
+}
+
+/**
+ * Get the text of the lastly "activated" button by the user (pressed, 
released etc)
+ * Useful in the the `event_cb`.
+ * @param btnm pointer to button matrix object
+ * @return text of the last released button (NULL: if unset)
+ */
+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);
+    else
+        return NULL;
+}
+
+/**
+ * Get the animation duration (close animation time)
+ * @param mbox pointer to a message box object
+ * @return animation length in  milliseconds (0: no animation)
+ */
+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;
+#else
+    (void)mbox;
+    return 0;
+#endif
+}
+
+/**
+ * Get a style of a message box
+ * @param mbox pointer to a message box object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+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);
+
+    switch(type) {
+        case LV_MBOX_STYLE_BG: style = lv_obj_get_style(mbox); break;
+        case LV_MBOX_STYLE_BTN_BG: style = lv_btnm_get_style(ext->btnm, 
LV_BTNM_STYLE_BG); break;
+        case LV_MBOX_STYLE_BTN_REL: style = lv_btnm_get_style(ext->btnm, 
LV_BTNM_STYLE_BTN_REL); break;
+        case LV_MBOX_STYLE_BTN_PR: style = lv_btnm_get_style(ext->btnm, 
LV_BTNM_STYLE_BTN_PR); break;
+        case LV_MBOX_STYLE_BTN_TGL_REL: style = lv_btnm_get_style(ext->btnm, 
LV_BTNM_STYLE_BTN_TGL_REL); break;
+        case LV_MBOX_STYLE_BTN_TGL_PR: style = lv_btnm_get_style(ext->btnm, 
LV_BTNM_STYLE_BTN_TGL_PR); break;
+        case LV_MBOX_STYLE_BTN_INA: style = lv_btnm_get_style(ext->btnm, 
LV_BTNM_STYLE_BTN_INA); break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/**
+ * Get whether recoloring is enabled
+ * @param mbox pointer to a message box object
+ * @return whether recoloring is enabled
+ */
+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;
+
+    return lv_btnm_get_recolor(ext->btnm);
+}
+
+/**
+ * Get message box button matrix
+ * @param mbox pointer to a message box object
+ * @return pointer to button matrix object
+ * @remarks return value will be NULL unless `lv_mbox_add_btns` has been 
already called
+ */
+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;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Signal function of the message box
+ * @param mbox pointer to a message box 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_mbox_signal(lv_obj_t * mbox, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /*Translate LV_KEY_UP/DOWN to LV_KEY_LEFT/RIGHT */
+    char c_trans = 0;
+    if(sign == LV_SIGNAL_CONTROL) {
+        c_trans = *((char *)param);
+        if(c_trans == LV_KEY_DOWN) c_trans = LV_KEY_LEFT;
+        if(c_trans == LV_KEY_UP) c_trans = LV_KEY_RIGHT;
+
+        param = &c_trans;
+    }
+
+    /* 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) {
+        if(lv_obj_get_width(mbox) != lv_area_get_width(param)) {
+            mbox_realign(mbox);
+        }
+    } else if(sign == LV_SIGNAL_STYLE_CHG) {
+        mbox_realign(mbox);
+    } else if(sign == LV_SIGNAL_RELEASED) {
+        if(ext->btnm) {
+            uint32_t btn_id = lv_btnm_get_active_btn(ext->btnm);
+            if(btn_id != LV_BTNM_BTN_NONE) lv_event_send(mbox, 
LV_EVENT_VALUE_CHANGED, &btn_id);
+        }
+    } else if(sign == LV_SIGNAL_FOCUS || sign == LV_SIGNAL_DEFOCUS || sign == 
LV_SIGNAL_CONTROL ||
+              sign == LV_SIGNAL_GET_EDITABLE) {
+        if(ext->btnm) {
+            ext->btnm->signal_cb(ext->btnm, sign, param);
+        }
+
+        /* The button matrix with ENCODER input supposes it's in a group but 
in this case it isn't
+         * (Only the message box's container) So so some actions here instead*/
+        if(sign == LV_SIGNAL_FOCUS) {
+#if LV_USE_GROUP
+            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_ENCODER) {
+                /*In navigation mode don't select any button but in edit mode 
select the fist*/
+                lv_btnm_ext_t * btnm_ext = lv_obj_get_ext_attr(ext->btnm);
+                if(lv_group_get_editing(lv_obj_get_group(mbox)))
+                    btnm_ext->btn_id_pr = 0;
+                else
+                    btnm_ext->btn_id_pr = LV_BTNM_BTN_NONE;
+            }
+#endif
+        }
+    }
+
+    return res;
+}
+
+/**
+ * Resize the button holder to fit
+ * @param mbox pointer to message box object
+ */
+static void mbox_realign(lv_obj_t * mbox)
+{
+    lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
+
+    const lv_style_t * style = lv_mbox_get_style(mbox, LV_MBOX_STYLE_BG);
+    lv_coord_t w             = lv_obj_get_width(mbox) - 
style->body.padding.left - style->body.padding.right;
+
+    if(ext->text) {
+        lv_obj_set_width(ext->text, w);
+    }
+
+    if(ext->btnm) {
+        const lv_style_t * btn_bg_style  = lv_mbox_get_style(mbox, 
LV_MBOX_STYLE_BTN_BG);
+        const lv_style_t * btn_rel_style = lv_mbox_get_style(mbox, 
LV_MBOX_STYLE_BTN_REL);
+        lv_coord_t font_h                = 
lv_font_get_line_height(btn_rel_style->text.font);
+        lv_obj_set_size(ext->btnm, w,
+                        font_h + btn_rel_style->body.padding.top + 
btn_rel_style->body.padding.bottom +
+                            btn_bg_style->body.padding.top + 
btn_bg_style->body.padding.bottom);
+    }
+}
+
+#if LV_USE_ANIMATION
+static void lv_mbox_close_ready_cb(lv_anim_t * a)
+{
+    lv_obj_del(a->var);
+}
+#endif
+
+static void lv_mbox_default_event_cb(lv_obj_t * mbox, lv_event_t event)
+{
+    if(event != LV_EVENT_VALUE_CHANGED) return;
+
+    uint32_t btn_id = lv_mbox_get_active_btn(mbox);
+    if(btn_id == LV_BTNM_BTN_NONE) return;
+
+    lv_mbox_start_auto_close(mbox, 0);
+}
+
+static void lv_mbox_btnm_event_cb(lv_obj_t * btnm, lv_event_t event)
+{
+    lv_obj_t * mbox = lv_obj_get_parent(btnm);
+
+    /*clang-format off*/
+    if(event == LV_EVENT_PRESSED || event == LV_EVENT_PRESSING || event == 
LV_EVENT_PRESS_LOST ||
+       event == LV_EVENT_RELEASED || event == LV_EVENT_SHORT_CLICKED || event 
== LV_EVENT_CLICKED ||
+       event == LV_EVENT_LONG_PRESSED || event == LV_EVENT_LONG_PRESSED_REPEAT 
||
+       event == LV_EVENT_VALUE_CHANGED) {
+        lv_event_send(mbox, event, lv_event_get_data());
+    }
+    /*clang-format on*/
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_mbox.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_mbox.h
new file mode 100755
index 0000000..2068b37
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_mbox.h
@@ -0,0 +1,212 @@
+/**
+ * @file lv_mbox.h
+ *
+ */
+
+#ifndef LV_MBOX_H
+#define LV_MBOX_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_MBOX != 0
+
+/*Testing of dependencies*/
+#if LV_USE_CONT == 0
+#error "lv_mbox: lv_cont is required. Enable it in lv_conf.h (LV_USE_CONT  1) "
+#endif
+
+#if LV_USE_BTNM == 0
+#error "lv_mbox: lv_btnm is required. Enable it in lv_conf.h (LV_USE_BTNM  1) "
+#endif
+
+#if LV_USE_LABEL == 0
+#error "lv_mbox: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL  
1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "lv_cont.h"
+#include "lv_btnm.h"
+#include "lv_label.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/*Data of message box*/
+typedef struct
+{
+    lv_cont_ext_t bg; /*Ext. of ancestor*/
+    /*New data for this type */
+    lv_obj_t * text; /*Text of the message box*/
+    lv_obj_t * btnm; /*Button matrix for the buttons*/
+#if LV_USE_ANIMATION
+    uint16_t anim_time; /*Duration of close animation [ms] (0: no animation)*/
+#endif
+} lv_mbox_ext_t;
+
+/** Message box styles. */
+enum {
+    LV_MBOX_STYLE_BG,
+    LV_MBOX_STYLE_BTN_BG, /**< Same meaning as ordinary button styles. */
+    LV_MBOX_STYLE_BTN_REL,
+    LV_MBOX_STYLE_BTN_PR,
+    LV_MBOX_STYLE_BTN_TGL_REL,
+    LV_MBOX_STYLE_BTN_TGL_PR,
+    LV_MBOX_STYLE_BTN_INA,
+};
+typedef uint8_t lv_mbox_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a message box objects
+ * @param par pointer to an object, it will be the parent of the new message 
box
+ * @param copy pointer to a message box object, if not NULL then the new 
object will be copied from
+ * it
+ * @return pointer to the created message box
+ */
+lv_obj_t * lv_mbox_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Add button to the message box
+ * @param mbox pointer to message box object
+ * @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[]);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the text of the message box
+ * @param mbox pointer to a message box
+ * @param txt a '\0' terminated character string which will be the message box 
text
+ */
+void lv_mbox_set_text(lv_obj_t * mbox, const char * txt);
+
+/**
+ * Set animation duration
+ * @param mbox pointer to a message box object
+ * @param anim_time animation length in  milliseconds (0: no animation)
+ */
+void lv_mbox_set_anim_time(lv_obj_t * mbox, uint16_t anim_time);
+
+/**
+ * Automatically delete the message box after a given time
+ * @param mbox pointer to a message box object
+ * @param delay a time (in milliseconds) to wait before delete the message box
+ */
+void lv_mbox_start_auto_close(lv_obj_t * mbox, uint16_t delay);
+
+/**
+ * Stop the auto. closing of message box
+ * @param mbox pointer to a message box object
+ */
+void lv_mbox_stop_auto_close(lv_obj_t * mbox);
+
+/**
+ * Set a style of a message box
+ * @param mbox pointer to a message box object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_mbox_set_style(lv_obj_t * mbox, lv_mbox_style_t type, const lv_style_t 
* style);
+
+/**
+ * Set whether recoloring is enabled. Must be called after `lv_mbox_add_btns`.
+ * @param btnm pointer to button matrix object
+ * @param en whether recoloring is enabled
+ */
+void lv_mbox_set_recolor(lv_obj_t * mbox, bool en);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the text of the message box
+ * @param mbox pointer to a message box object
+ * @return pointer to the text of the message box
+ */
+const char * lv_mbox_get_text(const lv_obj_t * mbox);
+
+/**
+ * Get the index of the lastly "activated" button by the user (pressed, 
released etc)
+ * Useful in the the `event_cb`.
+ * @param btnm pointer to button matrix object
+ * @return  index of the last released button (LV_BTNM_BTN_NONE: if unset)
+ */
+uint16_t lv_mbox_get_active_btn(lv_obj_t * mbox);
+
+/**
+ * Get the text of the lastly "activated" button by the user (pressed, 
released etc)
+ * Useful in the the `event_cb`.
+ * @param btnm pointer to button matrix object
+ * @return text of the last released button (NULL: if unset)
+ */
+const char * lv_mbox_get_active_btn_text(lv_obj_t * mbox);
+
+/**
+ * Get the animation duration (close animation time)
+ * @param mbox pointer to a message box object
+ * @return animation length in  milliseconds (0: no animation)
+ */
+uint16_t lv_mbox_get_anim_time(const lv_obj_t * mbox);
+
+/**
+ * Get a style of a message box
+ * @param mbox pointer to a message box object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+const lv_style_t * lv_mbox_get_style(const lv_obj_t * mbox, lv_mbox_style_t 
type);
+
+/**
+ * Get whether recoloring is enabled
+ * @param mbox pointer to a message box object
+ * @return whether recoloring is enabled
+ */
+bool lv_mbox_get_recolor(const lv_obj_t * mbox);
+
+/**
+ * Get message box button matrix
+ * @param mbox pointer to a message box object
+ * @return pointer to button matrix object
+ * @remarks return value will be NULL unless `lv_mbox_add_btns` has been 
already called
+ */
+lv_obj_t * lv_mbox_get_btnm(lv_obj_t * mbox);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_MBOX*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_MBOX_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_objx.mk 
b/scriptsrcs/lvgl/src/lv_objx/lv_objx.mk
new file mode 100755
index 0000000..fde2ac7
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_objx.mk
@@ -0,0 +1,37 @@
+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
+CSRCS += lv_mbox.c
+CSRCS += lv_preload.c
+CSRCS += lv_roller.c
+CSRCS += lv_table.c
+CSRCS += lv_tabview.c
+CSRCS += lv_tileview.c
+CSRCS += lv_btn.c
+CSRCS += lv_calendar.c
+CSRCS += lv_chart.c
+CSRCS += lv_canvas.c
+CSRCS += lv_gauge.c
+CSRCS += lv_label.c
+CSRCS += lv_list.c
+CSRCS += lv_slider.c
+CSRCS += lv_ta.c
+CSRCS += lv_spinbox.c
+CSRCS += lv_btnm.c
+CSRCS += lv_cont.c
+CSRCS += lv_img.c
+CSRCS += lv_imgbtn.c
+CSRCS += lv_led.c
+CSRCS += lv_lmeter.c
+CSRCS += lv_page.c
+CSRCS += lv_sw.c
+CSRCS += lv_win.c
+
+DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_objx
+VPATH += :$(LVGL_DIR)/lvgl/src/lv_objx
+
+CFLAGS += "-I$(LVGL_DIR)/lvgl/src/lv_objx"
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_objx_templ.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_objx_templ.c
new file mode 100755
index 0000000..d23dcb4
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_objx_templ.c
@@ -0,0 +1,229 @@
+/**
+ * @file lv_templ.c
+ *
+ */
+
+/* TODO Remove these instructions
+ * Search an replace: template -> object normal name with lower case (e.g. 
button, label etc.)
+ *                    templ -> object short name with lower case(e.g. btn, 
label etc)
+ *                    TEMPL -> object short name with upper case (e.g. BTN, 
LABEL etc.)
+ *
+ * You can remove the defined() clause from the #if statement below. This 
exists because
+ * LV_USE_TEMPL is not in lv_conf.h or lv_conf_templ.h by default.
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "../lv_core/lv_debug.h"
+//#include "lv_templ.h" /*TODO uncomment this*/
+
+#if defined(LV_USE_TEMPL) && LV_USE_TEMPL != 0
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_templ"
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_templ_design(lv_obj_t * templ, const lv_area_t * mask, 
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;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a template object
+ * @param par pointer to an object, it will be the parent of the new template
+ * @param copy pointer to a template object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created template
+ */
+lv_obj_t * lv_templ_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("template create started");
+
+    /*Create the ancestor of template*/
+    /*TODO modify it to the ancestor create function */
+    lv_obj_t * new_templ = lv_ANCESTOR_create(par, copy);
+    lv_mem_assert(new_templ);
+    if(new_templ == NULL) return NULL;
+
+    /*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);
+
+    /*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);
+
+    /*Init the new template template*/
+    if(copy == NULL) {
+
+    }
+    /*Copy an existing template*/
+    else {
+        lv_templ_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_templ);
+    }
+
+    LV_LOG_INFO("template created");
+
+    return new_templ;
+}
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/*
+ * New object specific "add" or "remove" functions come here
+ */
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/*
+ * New object specific "set" functions come here
+ */
+
+/**
+ * Set a style of a template.
+ * @param templ pointer to template object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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) {
+        case LV_TEMPL_STYLE_X: break;
+        case LV_TEMPL_STYLE_Y: break;
+    }
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/*
+ * New object specific "get" functions come here
+ */
+
+/**
+ * Get style of a template.
+ * @param templ pointer to template object
+ * @param type which style should be get
+ * @return style pointer to the 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;
+
+    switch(type) {
+        case LV_TEMPL_STYLE_X: style = NULL; /*Replace NULL with a pointer to 
the style*/
+        case LV_TEMPL_STYLE_Y: style = NULL; /*Replace NULL with a pointer to 
the style*/
+        default: style = NULL;
+    }
+
+    return style;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/*
+ * New object specific "other" functions come here
+ */
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Handle the drawing related tasks of the templates
+ * @param templ 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
+ * @param return true/false, depends on 'mode'
+ */
+static bool lv_templ_design(lv_obj_t * templ, const lv_area_t * mask, 
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;
+    }
+    /*Draw the object*/
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+
+    }
+    /*Post draw when the children are drawn*/
+    else if(mode == LV_DESIGN_DRAW_POST) {
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the template
+ * @param templ pointer to a template 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_templ_signal(lv_obj_t * templ, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res;
+
+    /* 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')*/
+    }
+
+    return res;
+}
+
+#else /* Enable this file at the top */
+
+/* This dummy typedef exists purely to silence -Wpedantic. */
+typedef int keep_pedantic_happy;
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_objx_templ.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_objx_templ.h
new file mode 100755
index 0000000..8291825
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_objx_templ.h
@@ -0,0 +1,108 @@
+/**
+ * @file lv_templ.h
+ *
+ */
+
+/* TODO Remove these instructions
+ * Search an replace: template -> object normal name with lower case (e.g. 
button, label etc.)
+ *                    templ -> object short name with lower case(e.g. btn, 
label etc)
+ *                    TEMPL -> object short name with upper case (e.g. BTN, 
LABEL etc.)
+ *
+ */
+
+#ifndef LV_TEMPL_H
+#define LV_TEMPL_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_TEMPL != 0
+
+#include "../lv_core/lv_obj.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+/*Data of template*/
+typedef struct
+{
+    lv_ANCESTOR_ext_t ANCESTOR; /*Ext. of ancestor*/
+    /*New data for this type */
+} lv_templ_ext_t;
+
+/*Styles*/
+enum {
+    LV_TEMPL_STYLE_X,
+    LV_TEMPL_STYLE_Y,
+};
+typedef uint8_t lv_templ_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a template objects
+ * @param par pointer to an object, it will be the parent of the new template
+ * @param copy pointer to a template object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created template
+ */
+lv_obj_t * lv_templ_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a style of a template.
+ * @param templ pointer to template object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_templ_set_style(lv_obj_t * templ, lv_templ_style_t type, const 
lv_style_t * style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get style of a template.
+ * @param templ pointer to template object
+ * @param type which style should be get
+ * @return style pointer to the style
+ */
+lv_style_t * lv_templ_get_style(const lv_obj_t * templ, lv_templ_style_t type);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_TEMPL*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_TEMPL_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_page.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_page.c
new file mode 100755
index 0000000..e9a21a2
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_page.c
@@ -0,0 +1,1262 @@
+/**
+ * @file lv_page.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+#include "../lv_core/lv_refr.h"
+#include "../lv_misc/lv_anim.h"
+#include "../lv_misc/lv_math.h"
+
+/*********************
+ *      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`*/
+#define LV_PAGE_SCROLL_ANIM_TIME 200
+
+#define LV_PAGE_END_FLASH_SIZE (LV_DPI / 4)
+#define LV_PAGE_END_ANIM_TIME 300
+#define LV_PAGE_END_ANIM_WAIT_TIME 300
+
+#if LV_USE_ANIMATION == 0
+#undef LV_PAGE_DEF_ANIM_TIME
+#define LV_PAGE_DEF_ANIM_TIME 0 /*No animation*/
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  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_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);
+#if LV_USE_ANIMATION
+static void edge_flash_anim(void * page, lv_anim_value_t v);
+static void edge_flash_anim_end(lv_anim_t * a);
+#endif
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_design_cb_t ancestor_design;
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a page objects
+ * @param par pointer to an object, it will be the parent of the new page
+ * @param copy pointer to a page object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created page
+ */
+lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("page create started");
+
+    /*Create the ancestor object*/
+    lv_obj_t * new_page = lv_cont_create(par, copy);
+    LV_ASSERT_MEM(new_page);
+    if(new_page == NULL) return NULL;
+
+    if(ancestor_signal == NULL) ancestor_signal = 
lv_obj_get_signal_cb(new_page);
+    if(ancestor_design == NULL) ancestor_design = 
lv_obj_get_design_cb(new_page);
+
+    /*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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    ext->scrl        = NULL;
+    ext->sb.hor_draw = 0;
+    ext->sb.ver_draw = 0;
+    ext->sb.style    = &lv_style_pretty;
+    ext->sb.mode     = LV_SB_MODE_AUTO;
+#if LV_USE_ANIMATION
+    ext->edge_flash.enabled   = 0;
+    ext->edge_flash.bottom_ip = 0;
+    ext->edge_flash.top_ip    = 0;
+    ext->edge_flash.left_ip   = 0;
+    ext->edge_flash.right_ip  = 0;
+    ext->edge_flash.state     = 0;
+    ext->edge_flash.style     = &lv_style_plain_color;
+    ext->anim_time            = LV_PAGE_DEF_ANIM_TIME;
+#endif
+    ext->scroll_prop    = 0;
+    ext->scroll_prop_ip = 0;
+
+    /*Init the new page object*/
+    if(copy == NULL) {
+        ext->scrl = lv_cont_create(new_page, NULL);
+        lv_obj_set_signal_cb(ext->scrl, lv_page_scrollable_signal);
+        lv_obj_set_design_cb(ext->scrl, lv_scrl_design);
+        lv_obj_set_drag(ext->scrl, true);
+        lv_obj_set_drag_throw(ext->scrl, true);
+        lv_obj_set_protect(ext->scrl, LV_PROTECT_PARENT | 
LV_PROTECT_PRESS_LOST);
+        lv_cont_set_fit4(ext->scrl, LV_FIT_FILL, LV_FIT_FILL, LV_FIT_FILL, 
LV_FIT_FILL);
+        lv_obj_set_event_cb(ext->scrl, scrl_def_event_cb); /*Propagate some 
event to the background
+                                                              object by 
default for convenience */
+
+        /* Add the signal function only if 'scrolling' is created
+         * because everything has to be ready before any signal is received*/
+        lv_obj_set_signal_cb(new_page, lv_page_signal);
+        lv_obj_set_design_cb(new_page, lv_page_design);
+
+        lv_page_set_sb_mode(new_page, ext->sb.mode);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            if(par == NULL) { /*Different styles if it is screen*/
+                lv_page_set_style(new_page, LV_PAGE_STYLE_BG, th->style.bg);
+                lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, 
&lv_style_transp);
+            } else {
+                lv_page_set_style(new_page, LV_PAGE_STYLE_BG, 
th->style.page.bg);
+                lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, 
th->style.page.scrl);
+            }
+            lv_page_set_style(new_page, LV_PAGE_STYLE_SB, th->style.page.sb);
+        } else {
+            lv_page_set_style(new_page, LV_PAGE_STYLE_BG, 
&lv_style_pretty_color);
+            lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, &lv_style_pretty);
+            lv_page_set_style(new_page, LV_PAGE_STYLE_SB, 
&lv_style_pretty_color);
+        }
+
+    } else {
+        lv_page_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->scrl                = lv_cont_create(new_page, copy_ext->scrl);
+        lv_obj_set_signal_cb(ext->scrl, lv_page_scrollable_signal);
+
+        /* Add the signal function only if 'scrolling' is created
+         * because everything has to be ready before any signal is received*/
+        lv_obj_set_signal_cb(new_page, lv_page_signal);
+        lv_obj_set_design_cb(new_page, lv_page_design);
+
+        lv_page_set_style(new_page, LV_PAGE_STYLE_BG, lv_page_get_style(copy, 
LV_PAGE_STYLE_BG));
+        lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, 
lv_page_get_style(copy, LV_PAGE_STYLE_SCRL));
+        lv_page_set_style(new_page, LV_PAGE_STYLE_SB, lv_page_get_style(copy, 
LV_PAGE_STYLE_SB));
+
+        lv_page_set_sb_mode(new_page, copy_ext->sb.mode);
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_page);
+    }
+
+    lv_page_sb_refresh(new_page);
+
+    LV_LOG_INFO("page created");
+
+    return new_page;
+}
+
+/**
+ * Delete all children of the scrl object, without deleting scrl child.
+ * @param page pointer to an object
+ */
+void lv_page_clean(lv_obj_t * page)
+{
+    LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
+    lv_obj_t * scrl = lv_page_get_scrl(page);
+    lv_obj_clean(scrl);
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the scroll bar mode on a page
+ * @param page pointer to a page object
+ * @param sb_mode the new mode from 'lv_page_sb.mode_t' enum
+ */
+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;
+
+    if(sb_mode == LV_SB_MODE_HIDE)
+        ext->sb.mode |= LV_SB_MODE_HIDE; /*Set the hidden flag*/
+    else if(sb_mode == LV_SB_MODE_UNHIDE)
+        ext->sb.mode &= (~LV_SB_MODE_HIDE); /*Clear the hidden flag*/
+    else {
+        if(ext->sb.mode & LV_SB_MODE_HIDE) sb_mode |= LV_SB_MODE_HIDE;
+        ext->sb.mode = sb_mode;
+    }
+
+    ext->sb.hor_draw = 0;
+    ext->sb.ver_draw = 0;
+
+    lv_page_sb_refresh(page);
+    lv_obj_invalidate(page);
+}
+
+/**
+ * Set the animation time for the page
+ * @param page pointer to a page object
+ * @param anim_time animation time in milliseconds
+ */
+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;
+#else
+    (void)page;      /*Unused*/
+    (void)anim_time; /*Unused*/
+#endif
+}
+
+/**
+ * Enable the scroll propagation feature. If enabled then the page will move 
its parent if there is
+ * no more space to scroll.
+ * @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);
+    ext->scroll_prop    = en ? 1 : 0;
+}
+
+/**
+ * Enable the edge flash effect. (Show an arc when the an edge is reached)
+ * @param page pointer to a Page
+ * @param en true or false to enable/disable end flash
+ */
+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;
+#else
+    (void)page;
+    (void)en;
+#endif
+}
+
+/**
+ * Set a style of a page
+ * @param page pointer to a page object
+ * @param type which style should be set
+ * @param style pointer to a style
+ *  */
+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) {
+        case LV_PAGE_STYLE_BG: lv_obj_set_style(page, style); break;
+        case LV_PAGE_STYLE_SCRL: lv_obj_set_style(ext->scrl, style); break;
+        case LV_PAGE_STYLE_SB:
+            ext->sb.style = style;
+            lv_area_set_height(&ext->sb.hor_area, 
ext->sb.style->body.padding.inner);
+            lv_area_set_width(&ext->sb.ver_area, 
ext->sb.style->body.padding.inner);
+            lv_page_sb_refresh(page);
+            lv_obj_refresh_ext_draw_pad(page);
+            lv_obj_invalidate(page);
+            break;
+#if LV_USE_ANIMATION
+        case LV_PAGE_STYLE_EDGE_FLASH: ext->edge_flash.style = style; break;
+#endif
+    }
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the scrollable object of a page
+ * @param page pointer to a page object
+ * @return pointer to a container which is the scrollable part of the page
+ */
+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;
+}
+
+/**
+ * Get the animation time
+ * @param page pointer to a page object
+ * @return the animation time in milliseconds
+ */
+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;
+#else
+    (void)page; /*Unused*/
+    return 0;
+#endif
+}
+
+/**
+ * Set the scroll bar mode on a page
+ * @param page pointer to a page object
+ * @return the mode from 'lv_page_sb.mode_t' enum
+ */
+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;
+}
+
+/**
+ * Get the scroll propagation property
+ * @param page pointer to a Page
+ * @return true or false
+ */
+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;
+}
+
+/**
+ * Get the edge flash effect property.
+ * @param page pointer to a Page
+ * return true or false
+ */
+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;
+#else
+    (void)page;
+    return false;
+#endif
+}
+
+/**
+ * Get that width which can be set to the children to still not cause overflow 
(show scrollbars)
+ * @param page pointer to a page object
+ * @return the width which still fits into the 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);
+
+    return lv_obj_get_width(page) - bg_style->body.padding.left - 
bg_style->body.padding.right -
+           scrl_style->body.padding.left - scrl_style->body.padding.right;
+}
+
+/**
+ * Get that height which can be set to the children to still not cause 
overflow (show scrollbars)
+ * @param page pointer to a page object
+ * @return the height which still fits into the 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);
+
+    return lv_obj_get_height(page) - bg_style->body.padding.top - 
bg_style->body.padding.bottom -
+           scrl_style->body.padding.top - scrl_style->body.padding.bottom;
+}
+
+/**
+ * Get a style of a page
+ * @param page pointer to page object
+ * @param type which style should be get
+ * @return style pointer to a style
+ *  */
+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);
+
+    switch(type) {
+        case LV_PAGE_STYLE_BG: style = lv_obj_get_style(page); break;
+        case LV_PAGE_STYLE_SCRL: style = lv_obj_get_style(ext->scrl); break;
+        case LV_PAGE_STYLE_SB: style = ext->sb.style; break;
+#if LV_USE_ANIMATION
+        case LV_PAGE_STYLE_EDGE_FLASH: style = ext->edge_flash.style; break;
+#endif
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Find whether the page has been scrolled to a certain edge.
+ * @param page Page object
+ * @param edge Edge to check
+ * @return true if the page is on the specified edge
+ */
+bool lv_page_on_edge(lv_obj_t * page, lv_page_edge_t edge)
+{
+    const lv_style_t * page_style = lv_obj_get_style(page);
+    lv_obj_t * scrl               = lv_page_get_scrl(page);
+    lv_area_t page_coords;
+    lv_area_t scrl_coords;
+
+    lv_obj_get_coords(scrl, &scrl_coords);
+    lv_obj_get_coords(page, &page_coords);
+
+    if((edge & LV_PAGE_EDGE_TOP) && scrl_coords.y1 == page_coords.y1 + 
page_style->body.padding.top) return true;
+    if((edge & LV_PAGE_EDGE_BOTTOM) && scrl_coords.y2 == page_coords.y2 - 
page_style->body.padding.bottom) return true;
+    if((edge & LV_PAGE_EDGE_LEFT) && scrl_coords.x1 == page_coords.x1 + 
page_style->body.padding.left) return true;
+    if((edge & LV_PAGE_EDGE_RIGHT) && scrl_coords.x2 == page_coords.x2 - 
page_style->body.padding.right) return true;
+
+    return false;
+}
+
+/**
+ * Glue the object to the page. After it the page can be moved (dragged) with 
this object too.
+ * @param obj pointer to an object on a page
+ * @param glue true: enable glue, false: disable glue
+ */
+void lv_page_glue_obj(lv_obj_t * obj, bool glue)
+{
+    lv_obj_set_drag_parent(obj, glue);
+    lv_obj_set_drag(obj, glue);
+}
+
+/**
+ * Focus on an object. It ensures that the object will be visible on the page.
+ * @param page pointer to a page object
+ * @param obj pointer to an object to focus (must be on the page)
+ * @param anim_en LV_ANIM_ON to focus with animation; LV_ANIM_OFF to focus 
without animation
+ */
+void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, lv_anim_enable_t 
anim_en)
+{
+    lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
+
+#if LV_USE_ANIMATION
+    /* Be sure there is no position changing animation in progress
+     * because it can overide the current changes*/
+    lv_anim_del(page, (lv_anim_exec_xcb_t)lv_obj_set_x);
+    lv_anim_del(page, (lv_anim_exec_xcb_t)lv_obj_set_y);
+    lv_anim_del(ext->scrl, (lv_anim_exec_xcb_t)lv_obj_set_x);
+    lv_anim_del(ext->scrl, (lv_anim_exec_xcb_t)lv_obj_set_y);
+#endif
+
+    const lv_style_t * style      = lv_page_get_style(page, LV_PAGE_STYLE_BG);
+    const lv_style_t * style_scrl = lv_page_get_style(page, 
LV_PAGE_STYLE_SCRL);
+
+    /*If obj is higher then the page focus where the "error" is smaller*/
+    lv_coord_t obj_y      = obj->coords.y1 - ext->scrl->coords.y1;
+    lv_coord_t obj_h      = lv_obj_get_height(obj);
+    lv_coord_t scrlable_y = lv_obj_get_y(ext->scrl);
+    lv_coord_t page_h     = lv_obj_get_height(page);
+
+    lv_coord_t top_err = -(scrlable_y + obj_y);
+    lv_coord_t bot_err = scrlable_y + obj_y + obj_h - page_h;
+
+    /*Out of the page on the top*/
+    if((obj_h <= page_h && top_err > 0) || (obj_h > page_h && top_err < 
bot_err)) {
+        /*Calculate a new position and let some space above*/
+        scrlable_y = -(obj_y - style_scrl->body.padding.top - 
style->body.padding.top);
+        scrlable_y += style_scrl->body.padding.top;
+    }
+    /*Out of the page on the bottom*/
+    else if((obj_h <= page_h && bot_err > 0) || (obj_h > page_h && top_err >= 
bot_err)) {
+        /*Calculate a new position and let some space below*/
+        scrlable_y = -(obj_y + style_scrl->body.padding.bottom + 
style->body.padding.bottom);
+        scrlable_y -= style_scrl->body.padding.bottom;
+        scrlable_y += page_h - obj_h;
+    }
+
+    /*If obj is wider then the page focus where the "error" is smaller*/
+    lv_coord_t obj_x      = obj->coords.x1 - ext->scrl->coords.x1;
+    lv_coord_t obj_w      = lv_obj_get_width(obj);
+    lv_coord_t scrlable_x = lv_obj_get_x(ext->scrl);
+    lv_coord_t page_w     = lv_obj_get_width(page);
+
+    lv_coord_t left_err  = -(scrlable_x + obj_x);
+    lv_coord_t right_err = scrlable_x + obj_x + obj_w - page_w;
+
+    /*Out of the page on the left*/
+    if((obj_w <= page_w && left_err > 0) || (obj_w > page_w && left_err < 
right_err)) {
+        /*Calculate a new position and let some space above*/
+        scrlable_x = -(obj_x - style_scrl->body.padding.left - 
style->body.padding.left);
+        scrlable_x += style_scrl->body.padding.left;
+    }
+    /*Out of the page on the rigth*/
+    else if((obj_w <= page_w && right_err > 0) || (obj_w > page_w && left_err 
>= right_err)) {
+        /*Calculate a new position and let some space below*/
+        scrlable_x = -(obj_x + style_scrl->body.padding.right + 
style->body.padding.right);
+        scrlable_x -= style_scrl->body.padding.right;
+        scrlable_x += page_w - obj_w;
+    }
+
+    if(anim_en == LV_ANIM_OFF || lv_page_get_anim_time(page) == 0) {
+        lv_obj_set_y(ext->scrl, scrlable_y);
+        lv_obj_set_x(ext->scrl, scrlable_x);
+    } else {
+#if LV_USE_ANIMATION
+        lv_anim_t a;
+        a.act_time = 0;
+        a.start    = lv_obj_get_y(ext->scrl);
+        a.end      = scrlable_y;
+        a.time     = lv_page_get_anim_time(page);
+        a.ready_cb = NULL;
+        a.playback = 0;
+        a.repeat   = 0;
+        a.var      = ext->scrl;
+        a.path_cb  = lv_anim_path_linear;
+        a.exec_cb  = (lv_anim_exec_xcb_t)lv_obj_set_y;
+        lv_anim_create(&a);
+
+        a.start   = lv_obj_get_x(ext->scrl);
+        a.end     = scrlable_x;
+        a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_x;
+        lv_anim_create(&a);
+#endif
+    }
+}
+
+/**
+ * Scroll the page horizontally
+ * @param page pointer to a page object
+ * @param dist the distance to scroll (< 0: scroll right; > 0 scroll left)
+ */
+void lv_page_scroll_hor(lv_obj_t * page, lv_coord_t dist)
+{
+    lv_obj_t * scrl = lv_page_get_scrl(page);
+
+#if LV_USE_ANIMATION
+    lv_anim_t a;
+    a.var            = scrl;
+    a.start          = lv_obj_get_x(scrl);
+    a.end            = a.start + dist;
+    a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_x;
+    a.path_cb        = lv_anim_path_linear;
+    a.ready_cb       = NULL;
+    a.act_time       = 0;
+    a.time           = LV_PAGE_SCROLL_ANIM_TIME;
+    a.playback       = 0;
+    a.playback_pause = 0;
+    a.repeat         = 0;
+    a.repeat_pause   = 0;
+    lv_anim_create(&a);
+#else
+    lv_obj_set_x(scrl, lv_obj_get_x(scrl) + dist);
+#endif
+}
+
+/**
+ * Scroll the page vertically
+ * @param page pointer to a page object
+ * @param dist the distance to scroll (< 0: scroll down; > 0 scroll up)
+ */
+void lv_page_scroll_ver(lv_obj_t * page, lv_coord_t dist)
+{
+    lv_obj_t * scrl = lv_page_get_scrl(page);
+
+#if LV_USE_ANIMATION
+    lv_anim_t a;
+    a.var            = scrl;
+    a.start          = lv_obj_get_y(scrl);
+    a.end            = a.start + dist;
+    a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_y;
+    a.path_cb        = lv_anim_path_linear;
+    a.ready_cb       = NULL;
+    a.act_time       = 0;
+    a.time           = LV_PAGE_SCROLL_ANIM_TIME;
+    a.playback       = 0;
+    a.playback_pause = 0;
+    a.repeat         = 0;
+    a.repeat_pause   = 0;
+    lv_anim_create(&a);
+#else
+    lv_obj_set_y(scrl, lv_obj_get_y(scrl) + dist);
+#endif
+}
+
+/**
+ * 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
+ * @param page
+ */
+void lv_page_start_edge_flash(lv_obj_t * page)
+{
+#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);
+    }
+#else
+    (void)page; /*Unused*/
+#endif
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_page_design(lv_obj_t * page, const lv_area_t * mask, 
lv_design_mode_t mode)
+{
+    if(mode == LV_DESIGN_COVER_CHK) {
+        return ancestor_design(page, mask, mode);
+    }
+    /*Cache page bg style for temporary modification*/
+    const lv_style_t * style = lv_page_get_style(page, LV_PAGE_STYLE_BG);
+    lv_style_t style_tmp;
+    lv_style_copy(&style_tmp, style);
+
+    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));
+
+    } 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_page_ext_t * ext = lv_obj_get_ext_attr(page);
+
+        /*Draw the scrollbars*/
+        lv_area_t sb_area;
+        if(ext->sb.hor_draw && (ext->sb.mode & LV_SB_MODE_HIDE) == 0) {
+            /*Convert the relative coordinates to absolute*/
+            lv_area_copy(&sb_area, &ext->sb.hor_area);
+            sb_area.x1 += page->coords.x1;
+            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));
+        }
+
+        if(ext->sb.ver_draw && (ext->sb.mode & LV_SB_MODE_HIDE) == 0) {
+            /*Convert the relative coordinates to absolute*/
+            lv_area_copy(&sb_area, &ext->sb.ver_area);
+            sb_area.x1 += page->coords.x1;
+            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));
+        }
+
+#if LV_USE_ANIMATION
+        {
+            lv_coord_t page_w = lv_obj_get_width(page);
+            lv_coord_t page_h = lv_obj_get_height(page);
+
+            lv_area_t flash_area;
+
+            if(ext->edge_flash.top_ip) {
+                flash_area.x1 = page->coords.x1 - page_w;
+                flash_area.x2 = page->coords.x2 + page_w;
+                flash_area.y1 = page->coords.y1 - 3 * page_w + 
ext->edge_flash.state;
+                flash_area.y2 = page->coords.y1 + ext->edge_flash.state;
+            } else if(ext->edge_flash.bottom_ip) {
+                flash_area.x1 = page->coords.x1 - page_w;
+                flash_area.x2 = page->coords.x2 + page_w;
+                flash_area.y1 = page->coords.y2 - ext->edge_flash.state;
+                flash_area.y2 = page->coords.y2 + 3 * page_w - 
ext->edge_flash.state;
+            } else if(ext->edge_flash.right_ip) {
+                flash_area.x1 = page->coords.x2 - ext->edge_flash.state;
+                flash_area.x2 = page->coords.x2 + 3 * page_h - 
ext->edge_flash.state;
+                flash_area.y1 = page->coords.y1 - page_h;
+                flash_area.y2 = page->coords.y2 + page_h;
+            } else if(ext->edge_flash.left_ip) {
+                flash_area.x1 = page->coords.x1 - 3 * page_h + 
ext->edge_flash.state;
+                flash_area.x2 = page->coords.x1 + ext->edge_flash.state;
+                flash_area.y1 = page->coords.y1 - page_h;
+                flash_area.y2 = page->coords.y2 + page_h;
+            }
+
+            if(ext->edge_flash.left_ip || ext->edge_flash.right_ip || 
ext->edge_flash.top_ip ||
+               ext->edge_flash.bottom_ip) {
+                lv_style_t flash_style;
+                lv_style_copy(&flash_style, ext->edge_flash.style);
+                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));
+            }
+        }
+#endif
+    }
+
+    return true;
+}
+
+/**
+ * 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 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'
+ */
+static bool lv_scrl_design(lv_obj_t * scrl, const lv_area_t * mask, 
lv_design_mode_t mode)
+{
+    if(mode == LV_DESIGN_COVER_CHK) {
+        return ancestor_design(scrl, mask, mode);
+    } else if(mode == LV_DESIGN_DRAW_MAIN) {
+#if LV_USE_GROUP
+        /* If the page is focused in a group and
+         * the background object is not visible (transparent)
+         * then "activate" the style of the scrollable*/
+        const lv_style_t * style_scrl_ori = lv_obj_get_style(scrl);
+        lv_obj_t * page                   = lv_obj_get_parent(scrl);
+        const lv_style_t * style_page     = lv_obj_get_style(page);
+        lv_group_t * g                    = lv_obj_get_group(page);
+        if((style_page->body.opa == LV_OPA_TRANSP) &&
+           style_page->body.border.width == 0) { /*Is the background visible?*/
+            if(lv_group_get_focused(g) == page) {
+                lv_style_t * style_mod;
+                style_mod = lv_group_mod_style(g, style_scrl_ori);
+                /*If still not visible modify the style a littel bit*/
+                if((style_mod->body.opa == LV_OPA_TRANSP) && 
style_mod->body.border.width == 0) {
+                    style_mod->body.opa          = LV_OPA_50;
+                    style_mod->body.border.width = 1;
+                    style_mod                    = lv_group_mod_style(g, 
style_mod);
+                }
+
+                scrl->style_p = style_mod; /*Temporally change the style to 
the activated */
+            }
+        }
+#endif
+        ancestor_design(scrl, mask, 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);
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the page
+ * @param page pointer to a 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 lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* 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_bg = lv_page_get_style(page, 
LV_PAGE_STYLE_BG);
+        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);
+        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) 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_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)) {
+                    tmp->coords.x1 -= style_scrl->body.padding.right + 
style_bg->body.padding.right;
+                    tmp->coords.x2 -= style_scrl->body.padding.right + 
style_bg->body.padding.right;
+                }
+                if((tmp->coords.y1 == page->coords.y1) && (fit_top == 
LV_FIT_TIGHT || fit_top == LV_FIT_FILL)) {
+                    tmp->coords.y1 += style_scrl->body.padding.top;
+                    tmp->coords.y2 += style_scrl->body.padding.top;
+                }
+                lv_obj_set_parent(tmp, ext->scrl);
+            } else {
+                child = lv_obj_get_child(page, child);
+            }
+        }
+    } else if(sign == LV_SIGNAL_STYLE_CHG) {
+        ext->scrl->signal_cb(ext->scrl, LV_SIGNAL_CORD_CHG, 
&ext->scrl->coords);
+
+        /*The scrollbars are important only if they are visible now*/
+        if(ext->sb.hor_draw || ext->sb.ver_draw) lv_page_sb_refresh(page);
+
+        /*Refresh the ext. size because the scrollbars might be positioned out 
of the page*/
+        lv_obj_refresh_ext_draw_pad(page);
+    } else if(sign == LV_SIGNAL_CORD_CHG) {
+        /*Refresh the scrollbar and notify the scrl if the size is changed*/
+        if(ext->scrl != NULL && (lv_obj_get_width(page) != 
lv_area_get_width(param) ||
+                                 lv_obj_get_height(page) != 
lv_area_get_height(param))) {
+            /*If no hor_fit enabled set the scrollable's width to the page's 
width*/
+            ext->scrl->signal_cb(ext->scrl, LV_SIGNAL_CORD_CHG, 
&ext->scrl->coords);
+
+            /*The scrollbars are important only if they are visible now*/
+            if(ext->sb.hor_draw || ext->sb.ver_draw) lv_page_sb_refresh(page);
+        }
+    } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
+        /*Ensure ext. size for the scrollbars if they are out of the page*/
+        if(page->ext_draw_pad < (-ext->sb.style->body.padding.right))
+            page->ext_draw_pad = -ext->sb.style->body.padding.right;
+        if(page->ext_draw_pad < (-ext->sb.style->body.padding.bottom))
+            page->ext_draw_pad = -ext->sb.style->body.padding.bottom;
+    } else if(sign == LV_SIGNAL_CONTROL) {
+        uint32_t c = *((uint32_t *)param);
+
+        if(c == LV_KEY_DOWN) {
+            lv_page_scroll_ver(page, -lv_obj_get_height(page) / 4);
+        } else if(c == LV_KEY_UP) {
+            lv_page_scroll_ver(page, lv_obj_get_height(page) / 4);
+        } else if(c == LV_KEY_RIGHT) {
+            /*If the page can't be scrolled horizontally because it's not wide 
enough then scroll it
+             * vertically*/
+            if(lv_page_get_scrl_width(page) <= lv_obj_get_width(page))
+                lv_page_scroll_ver(page, -lv_obj_get_height(page) / 4);
+            else
+                lv_page_scroll_hor(page, -lv_obj_get_width(page) / 4);
+        } else if(c == LV_KEY_LEFT) {
+            /*If the page can't be scrolled horizontally because it's not wide 
enough then scroll it
+             * vertically*/
+            if(lv_page_get_scrl_width(page) <= lv_obj_get_width(page))
+                lv_page_scroll_ver(page, lv_obj_get_height(page) / 4);
+            else
+                lv_page_scroll_hor(page, lv_obj_get_width(page) / 4);
+        }
+    } else if(sign == LV_SIGNAL_GET_EDITABLE) {
+        bool * editable = (bool *)param;
+        *editable       = true;
+    }
+
+    return res;
+}
+
+/**
+ * Signal function of the scrollable part of a page
+ * @param scrl pointer to the 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 lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, 
void * param)
+{
+    lv_res_t res;
+
+    /* 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);
+    lv_page_ext_t * page_ext      = lv_obj_get_ext_attr(page);
+
+    if(sign == LV_SIGNAL_CORD_CHG) {
+        /*Limit the position of the scrollable object to be always visible
+         * (Do not let its edge inner then its parent respective edge)*/
+        lv_coord_t new_x = lv_obj_get_x(scrl);
+        lv_coord_t new_y = lv_obj_get_y(scrl);
+        bool refr_x      = false;
+        bool refr_y      = false;
+        lv_area_t page_coords;
+        lv_area_t scrl_coords;
+        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);
+
+        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;
+                }
+            }
+        }
+
+        /*scrollable width smaller then page width? -> align to left*/
+        if(lv_area_get_width(&scrl_coords) + hpad <= 
lv_area_get_width(&page_coords)) {
+            if(scrl_coords.x1 != page_coords.x1 + 
page_style->body.padding.left) {
+                new_x  = page_style->body.padding.left;
+                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) {
+                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
+            } 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
+            }
+        }
+
+        /*scrollable height smaller then page height? -> align to top*/
+        if(lv_area_get_height(&scrl_coords) + vpad <= 
lv_area_get_height(&page_coords)) {
+            if(scrl_coords.y1 != page_coords.y1 + 
page_style->body.padding.top) {
+                new_y  = page_style->body.padding.top;
+                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) {
+                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
+            } 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
+            }
+        }
+
+        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;
+
+        /*Hide scrollbars if required*/
+        if(page_ext->sb.mode == LV_SB_MODE_DRAG) {
+            lv_disp_t * disp = lv_obj_get_disp(page);
+            lv_area_t sb_area_tmp;
+            if(page_ext->sb.hor_draw) {
+                lv_area_copy(&sb_area_tmp, &page_ext->sb.hor_area);
+                sb_area_tmp.x1 += page->coords.x1;
+                sb_area_tmp.y1 += page->coords.y1;
+                sb_area_tmp.x2 += page->coords.x1;
+                sb_area_tmp.y2 += page->coords.y1;
+                lv_inv_area(disp, &sb_area_tmp);
+                page_ext->sb.hor_draw = 0;
+            }
+            if(page_ext->sb.ver_draw) {
+                lv_area_copy(&sb_area_tmp, &page_ext->sb.ver_area);
+                sb_area_tmp.x1 += page->coords.x1;
+                sb_area_tmp.y1 += page->coords.y1;
+                sb_area_tmp.x2 += page->coords.x1;
+                sb_area_tmp.y2 += page->coords.y1;
+                lv_inv_area(disp, &sb_area_tmp);
+                page_ext->sb.ver_draw = 0;
+            }
+        }
+    }
+
+    return res;
+}
+
+/**
+ * Propagate the input device related event of the scrollable to the parent 
page background
+ * It is used by default if the scrollable's event is not specified
+ * @param scrl pointer to the page's scrollable object
+ * @param event type of the event
+ * @param data data of the event
+ */
+static void scrl_def_event_cb(lv_obj_t * scrl, lv_event_t event)
+{
+    lv_obj_t * page = lv_obj_get_parent(scrl);
+
+    /*clang-format off*/
+    if(event == LV_EVENT_PRESSED || event == LV_EVENT_PRESSING || event == 
LV_EVENT_PRESS_LOST ||
+       event == LV_EVENT_RELEASED || event == LV_EVENT_SHORT_CLICKED || event 
== LV_EVENT_CLICKED ||
+       event == LV_EVENT_LONG_PRESSED || event == LV_EVENT_LONG_PRESSED_REPEAT 
||
+       event == LV_EVENT_DRAG_BEGIN || event == LV_EVENT_DRAG_END || event == 
LV_EVENT_DRAG_THROW_BEGIN) {
+        lv_event_send(page, event, lv_event_get_data());
+    }
+    /*clang-format on*/
+}
+
+/**
+ * Refresh the position and size of the scroll bars.
+ * @param page pointer to a page object
+ */
+static void lv_page_sb_refresh(lv_obj_t * page)
+{
+    lv_page_ext_t * ext      = lv_obj_get_ext_attr(page);
+    const lv_style_t * style = lv_obj_get_style(page);
+    lv_obj_t * scrl          = ext->scrl;
+    lv_coord_t size_tmp;
+    lv_coord_t scrl_w = lv_obj_get_width(scrl);
+    lv_coord_t scrl_h = lv_obj_get_height(scrl);
+    lv_coord_t obj_w  = lv_obj_get_width(page);
+    lv_coord_t obj_h  = lv_obj_get_height(page);
+
+    /*Always let 'scrollbar width' padding above, under, left and right to the 
scrollbars
+     * else:
+     * - horizontal and vertical scrollbars can overlap on the corners
+     * - if the page has radius the scrollbar can be out of the radius  */
+    lv_coord_t sb_hor_pad = LV_MATH_MAX(ext->sb.style->body.padding.inner, 
style->body.padding.right);
+    lv_coord_t sb_ver_pad = LV_MATH_MAX(ext->sb.style->body.padding.inner, 
style->body.padding.bottom);
+
+    if(ext->sb.mode == LV_SB_MODE_OFF) return;
+
+    if(ext->sb.mode == LV_SB_MODE_ON) {
+        ext->sb.hor_draw = 1;
+        ext->sb.ver_draw = 1;
+    }
+
+    /*Invalidate the current (old) scrollbar areas*/
+    lv_disp_t * disp = lv_obj_get_disp(page);
+    lv_area_t sb_area_tmp;
+    if(ext->sb.hor_draw != 0) {
+        lv_area_copy(&sb_area_tmp, &ext->sb.hor_area);
+        sb_area_tmp.x1 += page->coords.x1;
+        sb_area_tmp.y1 += page->coords.y1;
+        sb_area_tmp.x2 += page->coords.x1;
+        sb_area_tmp.y2 += page->coords.y1;
+        lv_inv_area(disp, &sb_area_tmp);
+    }
+    if(ext->sb.ver_draw != 0) {
+        lv_area_copy(&sb_area_tmp, &ext->sb.ver_area);
+        sb_area_tmp.x1 += page->coords.x1;
+        sb_area_tmp.y1 += page->coords.y1;
+        sb_area_tmp.x2 += page->coords.x1;
+        sb_area_tmp.y2 += page->coords.y1;
+        lv_inv_area(disp, &sb_area_tmp);
+    }
+
+    if(ext->sb.mode == LV_SB_MODE_DRAG && 
lv_indev_is_dragging(lv_indev_get_act()) == false) {
+        ext->sb.hor_draw = 0;
+        ext->sb.ver_draw = 0;
+        return;
+    }
+
+    /*Full sized horizontal scrollbar*/
+    if(scrl_w <= obj_w - style->body.padding.left - style->body.padding.right) 
{
+        lv_area_set_width(&ext->sb.hor_area, obj_w - 2 * sb_hor_pad);
+        lv_area_set_pos(&ext->sb.hor_area, sb_hor_pad,
+                        obj_h - ext->sb.style->body.padding.inner - 
ext->sb.style->body.padding.bottom);
+        if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) 
ext->sb.hor_draw = 0;
+    }
+    /*Smaller horizontal scrollbar*/
+    else {
+        size_tmp =
+            (obj_w * (obj_w - (2 * sb_hor_pad))) / (scrl_w + 
style->body.padding.left + style->body.padding.right);
+        if(size_tmp < LV_PAGE_SB_MIN_SIZE) size_tmp = LV_PAGE_SB_MIN_SIZE;
+        lv_area_set_width(&ext->sb.hor_area, size_tmp);
+
+        lv_area_set_pos(&ext->sb.hor_area,
+                        sb_hor_pad +
+                            (-(lv_obj_get_x(scrl) - style->body.padding.left) 
* (obj_w - size_tmp - 2 * sb_hor_pad)) /
+                                (scrl_w + style->body.padding.left + 
style->body.padding.right - obj_w),
+                        obj_h - ext->sb.style->body.padding.inner - 
ext->sb.style->body.padding.bottom);
+
+        if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) 
ext->sb.hor_draw = 1;
+    }
+
+    /*Full sized vertical scroll bar*/
+    if(scrl_h <= obj_h - style->body.padding.top - style->body.padding.bottom) 
{
+        lv_area_set_height(&ext->sb.ver_area, obj_h - 2 * sb_ver_pad);
+        lv_area_set_pos(&ext->sb.ver_area,
+                        obj_w - ext->sb.style->body.padding.inner - 
ext->sb.style->body.padding.right, sb_ver_pad);
+        if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) 
ext->sb.ver_draw = 0;
+    }
+    /*Smaller vertical scroll bar*/
+    else {
+        size_tmp =
+            (obj_h * (obj_h - (2 * sb_ver_pad))) / (scrl_h + 
style->body.padding.top + style->body.padding.bottom);
+        if(size_tmp < LV_PAGE_SB_MIN_SIZE) size_tmp = LV_PAGE_SB_MIN_SIZE;
+        lv_area_set_height(&ext->sb.ver_area, size_tmp);
+
+        lv_area_set_pos(&ext->sb.ver_area,
+                        obj_w - ext->sb.style->body.padding.inner - 
ext->sb.style->body.padding.right,
+                        sb_ver_pad + (-(lv_obj_get_y(scrl) - 
ext->sb.style->body.padding.bottom) *
+                                      (obj_h - size_tmp - 2 * sb_ver_pad)) /
+                                         (scrl_h + style->body.padding.top + 
style->body.padding.bottom - obj_h));
+
+        if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) 
ext->sb.ver_draw = 1;
+    }
+
+    /*Invalidate the new scrollbar areas*/
+    if(ext->sb.hor_draw != 0) {
+        lv_area_copy(&sb_area_tmp, &ext->sb.hor_area);
+        sb_area_tmp.x1 += page->coords.x1;
+        sb_area_tmp.y1 += page->coords.y1;
+        sb_area_tmp.x2 += page->coords.x1;
+        sb_area_tmp.y2 += page->coords.y1;
+        lv_inv_area(disp, &sb_area_tmp);
+    }
+    if(ext->sb.ver_draw != 0) {
+        lv_area_copy(&sb_area_tmp, &ext->sb.ver_area);
+        sb_area_tmp.x1 += page->coords.x1;
+        sb_area_tmp.y1 += page->coords.y1;
+        sb_area_tmp.x2 += page->coords.x1;
+        sb_area_tmp.y2 += page->coords.y1;
+        lv_inv_area(disp, &sb_area_tmp);
+    }
+}
+
+#if LV_USE_ANIMATION
+static void edge_flash_anim(void * page, lv_anim_value_t v)
+{
+    lv_page_ext_t * ext   = lv_obj_get_ext_attr(page);
+    ext->edge_flash.state = v;
+    lv_obj_invalidate(page);
+}
+
+static void edge_flash_anim_end(lv_anim_t * a)
+{
+    lv_page_ext_t * ext       = lv_obj_get_ext_attr(a->var);
+    ext->edge_flash.top_ip    = 0;
+    ext->edge_flash.bottom_ip = 0;
+    ext->edge_flash.left_ip   = 0;
+    ext->edge_flash.right_ip  = 0;
+    lv_obj_invalidate(a->var);
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_page.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_page.h
new file mode 100755
index 0000000..6715c92
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_page.h
@@ -0,0 +1,416 @@
+/**
+ * @file lv_page.h
+ *
+ */
+
+#ifndef LV_PAGE_H
+#define LV_PAGE_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_PAGE != 0
+
+/*Testing of dependencies*/
+#if LV_USE_CONT == 0
+#error "lv_page: lv_cont is required. Enable it in lv_conf.h (LV_USE_CONT  1) "
+#endif
+
+#include "lv_cont.h"
+#include "../lv_core/lv_indev.h"
+#include "../lv_misc/lv_anim.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/** Scrollbar modes: shows when should the scrollbars be visible*/
+enum {
+    LV_SB_MODE_OFF    = 0x0, /**< Never show scrollbars*/
+    LV_SB_MODE_ON     = 0x1, /**< Always show scrollbars*/
+    LV_SB_MODE_DRAG   = 0x2, /**< Show scrollbars when page is being dragged*/
+    LV_SB_MODE_AUTO   = 0x3, /**< Show scrollbars when the scrollable 
container is large enough to be scrolled*/
+    LV_SB_MODE_HIDE   = 0x4, /**< Hide the scroll bar temporally*/
+    LV_SB_MODE_UNHIDE = 0x5, /**< Unhide the previously hidden scrollbar. 
Recover it's type too*/
+};
+typedef uint8_t lv_sb_mode_t;
+
+/** Edges: describes the four edges of the page*/
+enum { LV_PAGE_EDGE_LEFT = 0x1, LV_PAGE_EDGE_TOP = 0x2, LV_PAGE_EDGE_RIGHT = 
0x4, LV_PAGE_EDGE_BOTTOM = 0x8 };
+typedef uint8_t lv_page_edge_t;
+
+/*Data of page*/
+typedef struct
+{
+    lv_cont_ext_t bg; /*Ext. of ancestor*/
+    /*New data for this type */
+    lv_obj_t * scrl; /*The scrollable object on the background*/
+    struct
+    {
+        const lv_style_t * style; /*Style of scrollbars*/
+        lv_area_t hor_area;       /*Horizontal scrollbar area relative to the 
page. (Handled by the library) */
+        lv_area_t ver_area;       /*Vertical scrollbar area relative to the 
page (Handled by the library)*/
+        uint8_t hor_draw : 1;     /*1: horizontal scrollbar is visible now 
(Handled by the library)*/
+        uint8_t ver_draw : 1;     /*1: vertical scrollbar is visible now 
(Handled by the library)*/
+        lv_sb_mode_t mode : 3;    /*Scrollbar visibility from 
'lv_page_sb_mode_t'*/
+    } sb;
+#if LV_USE_ANIMATION
+    struct
+    {
+        lv_anim_value_t state;    /*Store the current size of the edge flash 
effect*/
+        const lv_style_t * style; /*Style of edge flash effect (usually 
homogeneous circle)*/
+        uint8_t enabled : 1;      /*1: Show a flash animation on the edge*/
+        uint8_t top_ip : 1;       /*Used internally to show that top most 
position is reached (flash is In
+                                     Progress)*/
+        uint8_t bottom_ip : 1;    /*Used internally to show that bottom most 
position is reached (flash
+                                     is In Progress)*/
+        uint8_t right_ip : 1;     /*Used internally to show that right most 
position is reached (flash
+                                     is In Progress)*/
+        uint8_t left_ip : 1;      /*Used internally to show that left most 
position is reached (flash is
+                                     In Progress)*/
+    } edge_flash;
+
+    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_page_ext_t;
+
+enum {
+    LV_PAGE_STYLE_BG,
+    LV_PAGE_STYLE_SCRL,
+    LV_PAGE_STYLE_SB,
+    LV_PAGE_STYLE_EDGE_FLASH,
+};
+typedef uint8_t lv_page_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a page objects
+ * @param par pointer to an object, it will be the parent of the new page
+ * @param copy pointer to a page object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created page
+ */
+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 page pointer to an object
+ */
+void lv_page_clean(lv_obj_t * page);
+
+/**
+ * Get the scrollable object of a page
+ * @param page pointer to a page object
+ * @return pointer to a container which is the scrollable part of the page
+ */
+lv_obj_t * lv_page_get_scrl(const lv_obj_t * page);
+
+/**
+ * Get the animation time
+ * @param page pointer to a page object
+ * @return the animation time in milliseconds
+ */
+uint16_t lv_page_get_anim_time(const lv_obj_t * page);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the scroll bar mode on a page
+ * @param page pointer to a page object
+ * @param sb_mode the new mode from 'lv_page_sb.mode_t' enum
+ */
+void lv_page_set_sb_mode(lv_obj_t * page, lv_sb_mode_t sb_mode);
+
+/**
+ * Set the animation time for the page
+ * @param page pointer to a page object
+ * @param anim_time animation time in milliseconds
+ */
+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.
+ * @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);
+
+/**
+ * Enable the edge flash effect. (Show an arc when the an edge is reached)
+ * @param page pointer to a Page
+ * @param en true or false to enable/disable end flash
+ */
+void lv_page_set_edge_flash(lv_obj_t * page, bool en);
+
+/**
+ * Set the fit policy in all 4 directions separately.
+ * It tell how to change the page size automatically.
+ * @param page pointer to a page object
+ * @param left left fit policy from `lv_fit_t`
+ * @param right right fit policy from `lv_fit_t`
+ * @param top bottom fit policy from `lv_fit_t`
+ * @param bottom bottom fit policy from `lv_fit_t`
+ */
+static inline void lv_page_set_scrl_fit4(lv_obj_t * page, lv_fit_t left, 
lv_fit_t right, lv_fit_t top, lv_fit_t bottom)
+{
+    lv_cont_set_fit4(lv_page_get_scrl(page), left, right, top, bottom);
+}
+
+/**
+ * Set the fit policy horizontally and vertically separately.
+ * It tell how to change the page size automatically.
+ * @param page pointer to a page object
+ * @param hot horizontal fit policy from `lv_fit_t`
+ * @param ver vertical fit policy from `lv_fit_t`
+ */
+static inline void lv_page_set_scrl_fit2(lv_obj_t * page, lv_fit_t hor, 
lv_fit_t ver)
+{
+    lv_cont_set_fit2(lv_page_get_scrl(page), hor, ver);
+}
+
+/**
+ * Set the fit policyin all 4 direction at once.
+ * It tell how to change the page size automatically.
+ * @param page pointer to a button object
+ * @param fit fit policy from `lv_fit_t`
+ */
+static inline void lv_page_set_scrl_fit(lv_obj_t * page, lv_fit_t fit)
+{
+    lv_cont_set_fit(lv_page_get_scrl(page), fit);
+}
+
+/**
+ * Set width of the scrollable part of a page
+ * @param page pointer to a page object
+ * @param w the new width of the scrollable (it ha no effect is horizontal fit 
is enabled)
+ */
+static inline void lv_page_set_scrl_width(lv_obj_t * page, lv_coord_t w)
+{
+    lv_obj_set_width(lv_page_get_scrl(page), w);
+}
+
+/**
+ * Set height of the scrollable part of a page
+ * @param page pointer to a page object
+ * @param h the new height of the scrollable (it ha no effect is vertical fit 
is enabled)
+ */
+static inline void lv_page_set_scrl_height(lv_obj_t * page, lv_coord_t h)
+{
+    lv_obj_set_height(lv_page_get_scrl(page), h);
+}
+
+/**
+ * Set the layout of the scrollable part of the page
+ * @param page pointer to a page object
+ * @param layout a layout from 'lv_cont_layout_t'
+ */
+static inline void lv_page_set_scrl_layout(lv_obj_t * page, lv_layout_t layout)
+{
+    lv_cont_set_layout(lv_page_get_scrl(page), layout);
+}
+
+/**
+ * Set a style of a page
+ * @param page pointer to a page object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_page_set_style(lv_obj_t * page, lv_page_style_t type, const lv_style_t 
* style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Set the scroll bar mode on a page
+ * @param page pointer to a page object
+ * @return the mode from 'lv_page_sb.mode_t' enum
+ */
+lv_sb_mode_t lv_page_get_sb_mode(const lv_obj_t * page);
+
+/**
+ * Get the scroll propagation property
+ * @param page pointer to a Page
+ * @return true or false
+ */
+bool lv_page_get_scroll_propagation(lv_obj_t * page);
+
+/**
+ * Get the edge flash effect property.
+ * @param page pointer to a Page
+ * return true or false
+ */
+bool lv_page_get_edge_flash(lv_obj_t * page);
+
+/**
+ * Get that width which can be set to the children to still not cause overflow 
(show scrollbars)
+ * @param page pointer to a page object
+ * @return the width which still fits into the page
+ */
+lv_coord_t lv_page_get_fit_width(lv_obj_t * page);
+
+/**
+ * Get that height which can be set to the children to still not cause 
overflow (show scrollbars)
+ * @param page pointer to a page object
+ * @return the height which still fits into the page
+ */
+lv_coord_t lv_page_get_fit_height(lv_obj_t * page);
+
+/**
+ * Get width of the scrollable part of a page
+ * @param page pointer to a page object
+ * @return the width of the scrollable
+ */
+static inline lv_coord_t lv_page_get_scrl_width(const lv_obj_t * page)
+{
+    return lv_obj_get_width(lv_page_get_scrl(page));
+}
+
+/**
+ * Get height of the scrollable part of a page
+ * @param page pointer to a page object
+ * @return the height of the scrollable
+ */
+static inline lv_coord_t lv_page_get_scrl_height(const lv_obj_t * page)
+{
+    return lv_obj_get_height(lv_page_get_scrl(page));
+}
+
+/**
+ * Get the layout of the scrollable part of a page
+ * @param page pointer to page object
+ * @return the layout from 'lv_cont_layout_t'
+ */
+static inline lv_layout_t lv_page_get_scrl_layout(const lv_obj_t * page)
+{
+    return lv_cont_get_layout(lv_page_get_scrl(page));
+}
+
+/**
+ * Get the left fit mode
+ * @param page pointer to a page object
+ * @return an element of `lv_fit_t`
+ */
+static inline lv_fit_t lv_page_get_scrl_fit_left(const lv_obj_t * page)
+{
+    return lv_cont_get_fit_left(lv_page_get_scrl(page));
+}
+
+/**
+ * Get the right fit mode
+ * @param page pointer to a page object
+ * @return an element of `lv_fit_t`
+ */
+static inline lv_fit_t lv_page_get_scrl_fit_right(const lv_obj_t * page)
+{
+    return lv_cont_get_fit_right(lv_page_get_scrl(page));
+}
+
+/**
+ * Get the top fit mode
+ * @param page pointer to a page object
+ * @return an element of `lv_fit_t`
+ */
+static inline lv_fit_t lv_page_get_scrl_fit_top(const lv_obj_t * page)
+{
+    return lv_cont_get_fit_top(lv_page_get_scrl(page));
+}
+
+/**
+ * Get the bottom fit mode
+ * @param page pointer to a page object
+ * @return an element of `lv_fit_t`
+ */
+static inline lv_fit_t lv_page_get_scrl_fit_bottom(const lv_obj_t * page)
+{
+    return lv_cont_get_fit_bottom(lv_page_get_scrl(page));
+}
+
+/**
+ * Get a style of a page
+ * @param page pointer to page object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+const lv_style_t * lv_page_get_style(const lv_obj_t * page, lv_page_style_t 
type);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Find whether the page has been scrolled to a certain edge.
+ * @param page Page object
+ * @param edge Edge to check
+ * @return true if the page is on the specified edge
+ */
+bool lv_page_on_edge(lv_obj_t * page, lv_page_edge_t edge);
+
+/**
+ * Glue the object to the page. After it the page can be moved (dragged) with 
this object too.
+ * @param obj pointer to an object on a page
+ * @param glue true: enable glue, false: disable glue
+ */
+void lv_page_glue_obj(lv_obj_t * obj, bool glue);
+
+/**
+ * Focus on an object. It ensures that the object will be visible on the page.
+ * @param page pointer to a page object
+ * @param obj pointer to an object to focus (must be on the page)
+ * @param anim_en LV_ANIM_ON to focus with animation; LV_ANIM_OFF to focus 
without animation
+ */
+void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, lv_anim_enable_t 
anim_en);
+
+/**
+ * Scroll the page horizontally
+ * @param page pointer to a page object
+ * @param dist the distance to scroll (< 0: scroll left; > 0 scroll right)
+ */
+void lv_page_scroll_hor(lv_obj_t * page, lv_coord_t dist);
+
+/**
+ * Scroll the page vertically
+ * @param page pointer to a page object
+ * @param dist the distance to scroll (< 0: scroll down; > 0 scroll up)
+ */
+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
+ * @param page
+ */
+void lv_page_start_edge_flash(lv_obj_t * page);
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_PAGE*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_PAGE_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_preload.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_preload.c
new file mode 100755
index 0000000..2de9ebb
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_preload.c
@@ -0,0 +1,444 @@
+/**
+ * @file lv_preload.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+#include "../lv_themes/lv_theme.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_preloader"
+
+#ifndef LV_PRELOAD_DEF_ARC_LENGTH
+#define LV_PRELOAD_DEF_ARC_LENGTH 60 /*[deg]*/
+#endif
+
+#ifndef LV_PRELOAD_DEF_SPIN_TIME
+#define LV_PRELOAD_DEF_SPIN_TIME 1000 /*[ms]*/
+#endif
+
+#ifndef LV_PRELOAD_DEF_ANIM
+#define LV_PRELOAD_DEF_ANIM LV_PRELOAD_TYPE_SPINNING_ARC /*animation type*/
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_preload_design(lv_obj_t * preload, const lv_area_t * mask, 
lv_design_mode_t mode);
+static lv_res_t lv_preload_signal(lv_obj_t * preload, lv_signal_t sign, void * 
param);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_design_cb_t ancestor_design;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a pre loader object
+ * @param par pointer to an object, it will be the parent of the new pre loader
+ * @param copy pointer to a pre loader object, if not NULL then the new object 
will be copied from
+ * it
+ * @return pointer to the created pre loader
+ */
+lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("preload create started");
+
+    /*Create the ancestor of pre loader*/
+    lv_obj_t * new_preload = lv_arc_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) 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);
+
+    /*Initialize the allocated 'ext' */
+    ext->arc_length = LV_PRELOAD_DEF_ARC_LENGTH;
+    ext->anim_type  = LV_PRELOAD_DEF_ANIM;
+    ext->anim_dir   = LV_PRELOAD_DIR_FORWARD;
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_preload, lv_preload_signal);
+    lv_obj_set_design_cb(new_preload, lv_preload_design);
+
+    /*Init the new pre loader pre loader*/
+    if(copy == NULL) {
+        lv_obj_set_size(new_preload, LV_DPI / 2, LV_DPI / 2);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_preload_set_style(new_preload, LV_PRELOAD_STYLE_MAIN, 
th->style.preload);
+        } else {
+            lv_obj_set_style(new_preload, &lv_style_pretty_color);
+        }
+
+        ext->time = LV_PRELOAD_DEF_SPIN_TIME;
+
+    }
+    /*Copy an existing pre loader*/
+    else {
+        lv_preload_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->arc_length             = copy_ext->arc_length;
+        ext->time                   = copy_ext->time;
+        ext->anim_dir               = copy_ext->anim_dir;
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_preload);
+    }
+
+    lv_preload_set_type(new_preload, ext->anim_type);
+
+    LV_LOG_INFO("preload created");
+
+    return new_preload;
+}
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Set the length of the spinning  arc in degrees
+ * @param preload pointer to a preload object
+ * @param deg length of the arc
+ */
+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;
+}
+
+/**
+ * Set the spin time of the arc
+ * @param preload pointer to a preload object
+ * @param time time of one round in milliseconds
+ */
+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;
+    lv_preload_set_type(preload, ext->anim_type);
+}
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a style of a pre loader.
+ * @param preload pointer to pre loader object
+ * @param type which style should be set
+ * @param style pointer to a style
+ *  */
+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;
+    }
+}
+
+/**
+ * Set the animation type of a preloadeer.
+ * @param preload pointer to pre loader object
+ * @param type animation type of the preload
+ *  */
+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*/
+    lv_anim_del(preload, NULL);
+    switch(type) {
+        case LV_PRELOAD_TYPE_FILLSPIN_ARC: {
+            ext->anim_type = LV_PRELOAD_TYPE_FILLSPIN_ARC;
+            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;
+            }
+            a.exec_cb        = (lv_anim_exec_xcb_t)lv_preload_spinner_anim;
+            a.path_cb        = lv_anim_path_ease_in_out;
+            a.ready_cb       = NULL;
+            a.act_time       = 0;
+            a.time           = ext->time;
+            a.playback       = 0;
+            a.playback_pause = 0;
+            a.repeat         = 1;
+            a.repeat_pause   = 0;
+            lv_anim_create(&a);
+
+            lv_anim_t b;
+            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;
+            }
+            b.exec_cb        = (lv_anim_exec_xcb_t)lv_preload_set_arc_length;
+            b.path_cb        = lv_anim_path_ease_in_out;
+            b.ready_cb       = NULL;
+            b.act_time       = 0;
+            b.time           = ext->time;
+            b.playback       = 1;
+            b.playback_pause = 0;
+            b.repeat         = 1;
+            b.repeat_pause   = 0;
+            lv_anim_create(&b);
+            break;
+        }
+        case LV_PRELOAD_TYPE_CONSTANT_ARC:
+        case LV_PRELOAD_TYPE_SPINNING_ARC:
+        default: {
+            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;
+            }
+            a.exec_cb        = (lv_anim_exec_xcb_t)lv_preload_spinner_anim;
+            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;
+            a.playback       = 0;
+            a.playback_pause = 0;
+            a.repeat         = 1;
+            a.repeat_pause   = 0;
+            lv_anim_create(&a);
+            break;
+        }
+    }
+}
+
+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;
+    lv_preload_set_type(preload, ext->anim_type);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the arc length [degree] of the a pre loader
+ * @param preload pointer to a pre loader object
+ */
+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;
+}
+
+/**
+ * Get the spin time of the arc
+ * @param preload pointer to a pre loader object [milliseconds]
+ */
+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;
+}
+
+/**
+ * Get style of a pre loader.
+ * @param preload pointer to pre loader object
+ * @param type which style should be get
+ * @return style pointer to the style
+ *  */
+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) {
+        case LV_PRELOAD_STYLE_MAIN: style = lv_arc_get_style(preload, 
LV_ARC_STYLE_MAIN); break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/**
+ * Get the animation type of a preloadeer.
+ * @param preload pointer to pre loader object
+ * @return animation type
+ *  */
+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;
+}
+
+lv_preload_dir_t lv_preload_get_dir(lv_obj_t * preload)
+{
+    lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
+    return ext->anim_dir;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Animator function  (exec_cb) to rotate the arc of spinner.
+ * @param ptr pointer to preloader
+ * @param val the current desired value [0..360]
+ */
+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_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);
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_preload_design(lv_obj_t * preload, const lv_area_t * mask, 
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;
+    }
+    /*Draw the object*/
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+
+        /*Draw a circle as background*/
+        const lv_style_t * style = lv_arc_get_style(preload, 
LV_ARC_STYLE_MAIN);
+        if(style->body.border.width > 0) {
+            lv_coord_t r = (LV_MATH_MIN(lv_obj_get_width(preload), 
lv_obj_get_height(preload))) / 2;
+            r -= LV_MATH_MIN(style->body.padding.left, 
style->body.padding.top);
+
+            lv_coord_t x = preload->coords.x1 + lv_obj_get_width(preload) / 2;
+            lv_coord_t y = preload->coords.y1 + lv_obj_get_height(preload) / 2;
+
+            lv_style_t bg_style;
+            lv_style_copy(&bg_style, &lv_style_plain);
+            bg_style.body.opa          = LV_OPA_TRANSP;
+            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;
+
+            lv_area_t bg_area;
+            bg_area.x1 = x - r;
+            bg_area.y1 = y - r;
+            bg_area.x2 = x + r;
+            bg_area.y2 = y + r;
+
+            lv_draw_rect(&bg_area, mask, &bg_style, 
lv_obj_get_opa_scale(preload));
+        }
+        /*Draw the arc above the background circle */
+        ancestor_design(preload, mask, mode);
+    }
+    /*Post draw when the children are drawn*/
+    else if(mode == LV_DESIGN_DRAW_POST) {
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the pre loader
+ * @param preload pointer to a pre loader 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_preload_signal(lv_obj_t * preload, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res;
+
+    /* 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')*/
+    }
+
+    return res;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_preload.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_preload.h
new file mode 100755
index 0000000..22b87f3
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_preload.h
@@ -0,0 +1,197 @@
+/**
+ * @file lv_preload.h
+ *
+ */
+
+#ifndef LV_PRELOAD_H
+#define LV_PRELOAD_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_PRELOAD != 0
+
+/*Testing of dependencies*/
+#if LV_USE_ARC == 0
+#error "lv_preload: lv_arc is required. Enable it in lv_conf.h (LV_USE_ARC  1) 
"
+#endif
+
+#if LV_USE_ANIMATION == 0
+#error "lv_preload: animations are required. Enable it in lv_conf.h 
(LV_USE_ANIMATION  1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "../lv_misc/lv_anim.h"
+#include "lv_arc.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**
+ * Type of preloader.
+ */
+enum {
+    LV_PRELOAD_TYPE_SPINNING_ARC,
+    LV_PRELOAD_TYPE_FILLSPIN_ARC,
+    LV_PRELOAD_TYPE_CONSTANT_ARC,
+};
+typedef uint8_t lv_preload_type_t;
+
+/**
+ * Direction the preloader should spin.
+ */
+enum {
+    LV_PRELOAD_DIR_FORWARD,
+    LV_PRELOAD_DIR_BACKWARD,
+};
+typedef uint8_t lv_preload_dir_t;
+
+/*Data of pre loader*/
+typedef struct
+{
+    lv_arc_ext_t arc; /*Ext. of ancestor*/
+    /*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 : 2; /*Type of the arc animation*/
+    lv_preload_dir_t anim_dir : 1;   /*Animation Direction*/
+} lv_preload_ext_t;
+
+/*Styles*/
+enum {
+    LV_PRELOAD_STYLE_MAIN,
+};
+typedef uint8_t lv_preload_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a pre loader objects
+ * @param par pointer to an object, it will be the parent of the new pre loader
+ * @param copy pointer to a pre loader object, if not NULL then the new object 
will be copied from
+ * it
+ * @return pointer to the created pre loader
+ */
+lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Set the length of the spinning  arc in degrees
+ * @param preload pointer to a preload object
+ * @param deg length of the arc
+ */
+void lv_preload_set_arc_length(lv_obj_t * preload, lv_anim_value_t deg);
+
+/**
+ * Set the spin time of the arc
+ * @param preload pointer to a preload object
+ * @param time time of one round in milliseconds
+ */
+void lv_preload_set_spin_time(lv_obj_t * preload, uint16_t time);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a style of a pre loader.
+ * @param preload pointer to pre loader object
+ * @param type which style should be set
+ * @param style pointer to a style
+ *  */
+void lv_preload_set_style(lv_obj_t * preload, lv_preload_style_t type, const 
lv_style_t * style);
+
+/**
+ * Set the animation type of a preloader.
+ * @param preload pointer to pre loader object
+ * @param type animation type of the preload
+ *  */
+void lv_preload_set_type(lv_obj_t * preload, lv_preload_type_t type);
+
+/**
+ * Set the animation direction of a preloader
+ * @param preload pointer to pre loader object
+ * @param direction animation direction of the preload
+ */
+void lv_preload_set_dir(lv_obj_t * preload, lv_preload_dir_t dir);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the arc length [degree] of the a pre loader
+ * @param preload pointer to a pre loader object
+ */
+lv_anim_value_t lv_preload_get_arc_length(const lv_obj_t * preload);
+
+/**
+ * Get the spin time of the arc
+ * @param preload pointer to a pre loader object [milliseconds]
+ */
+uint16_t lv_preload_get_spin_time(const lv_obj_t * preload);
+
+/**
+ * Get style of a pre loader.
+ * @param preload pointer to pre loader object
+ * @param type which style should be get
+ * @return style pointer to the style
+ *  */
+const lv_style_t * lv_preload_get_style(const lv_obj_t * preload, 
lv_preload_style_t type);
+
+/**
+ * Get the animation type of a preloader.
+ * @param preload pointer to pre loader object
+ * @return animation type
+ *  */
+lv_preload_type_t lv_preload_get_type(lv_obj_t * preload);
+
+/**
+ * Get the animation direction of a preloader
+ * @param preload pointer to pre loader object
+ * @return animation direction
+ */
+lv_preload_dir_t lv_preload_get_dir(lv_obj_t * preload);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Animator function  (exec_cb) to rotate the arc of spinner.
+ * @param ptr pointer to preloader
+ * @param val the current desired value [0..360]
+ */
+void lv_preload_spinner_anim(void * ptr, lv_anim_value_t val);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_PRELOAD*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_PRELOAD_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_roller.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_roller.c
new file mode 100755
index 0000000..e556bee
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_roller.c
@@ -0,0 +1,732 @@
+/**
+ * @file lv_roller.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+
+/*********************
+ *      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*/
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_roller_design(lv_obj_t * roller, const lv_area_t * mask, 
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);
+static void refr_height(lv_obj_t * roller);
+static void inf_normalize(void * roller_scrl);
+#if LV_USE_ANIMATION
+static void scroll_anim_ready_cb(lv_anim_t * a);
+#endif
+static void draw_bg(lv_obj_t * roller, const lv_area_t * mask);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_signal_cb_t ancestor_scrl_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a roller object
+ * @param par pointer to an object, it will be the parent of the new roller
+ * @param copy pointer to a roller object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created roller
+ */
+lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("roller create started");
+
+    /*Create the ancestor of roller*/
+    lv_obj_t * new_roller = lv_ddlist_create(par, copy);
+    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));
+    if(ancestor_signal == NULL) ancestor_signal = 
lv_obj_get_signal_cb(new_roller);
+
+    /*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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+    ext->ddlist.draw_arrow = 0; /*Do not draw arrow by default*/
+    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);
+    lv_obj_set_design_cb(new_roller, lv_roller_design);
+
+    /*Init the new roller roller*/
+    if(copy == NULL) {
+        lv_obj_t * scrl = lv_page_get_scrl(new_roller);
+        lv_obj_set_drag(scrl, true);                                  /*In 
ddlist it might be disabled*/
+        lv_page_set_scrl_fit2(new_roller, LV_FIT_TIGHT, LV_FIT_NONE); /*Height 
is specified directly*/
+        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_roller_set_visible_row_count(new_roller, 3);
+        lv_label_set_align(ext->ddlist.label, LV_LABEL_ALIGN_CENTER);
+
+        lv_obj_set_signal_cb(scrl, lv_roller_scrl_signal);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_roller_set_style(new_roller, LV_ROLLER_STYLE_BG, 
th->style.roller.bg);
+            lv_roller_set_style(new_roller, LV_ROLLER_STYLE_SEL, 
th->style.roller.sel);
+        } else {
+            /*Refresh the roller's style*/
+            lv_obj_refresh_style(new_roller); /*To set scrollable size 
automatically*/
+        }
+    }
+    /*Copy an existing roller*/
+    else {
+        lv_roller_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->mode                  = copy_ext->mode;
+
+        lv_obj_t * scrl = lv_page_get_scrl(new_roller);
+        lv_ddlist_open(new_roller, false);
+        lv_obj_set_signal_cb(scrl, lv_roller_scrl_signal);
+
+        /*Refresh the roller's style*/
+        lv_obj_refresh_style(new_roller); /*Refresh the style with new signal 
function*/
+    }
+
+    LV_LOG_INFO("roller created");
+
+    return new_roller;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the options on a roller
+ * @param roller pointer to roller object
+ * @param options a string with '\n' separated options. E.g. "One\nTwo\nThree"
+ * @param mode `LV_ROLLER_MODE_NORMAL` or `LV_ROLLER_MODE_INFINITE`
+ */
+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) {
+        ext->mode = LV_ROLLER_MODE_NORMAL;
+        lv_ddlist_set_options(roller, options);
+
+        /* Make sure the roller's height and the scrollable's height is 
refreshed.
+         * They are refreshed in `LV_SIGNAL_COORD_CHG` but if the new options 
has the same width
+         * that signal won't be called. (It called because LV_FIT_TIGHT hor 
fit)*/
+        refr_height(roller);
+    } else {
+        ext->mode = LV_ROLLER_MODE_INIFINITE;
+
+        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++) {
+            strcpy(&opt_extra[opt_len * i], options);
+            opt_extra[opt_len * (i + 1) - 1] = '\n';
+        }
+        opt_extra[opt_len * LV_ROLLER_INF_PAGES - 1] = '\0';
+        lv_ddlist_set_options(roller, opt_extra);
+        lv_mem_free(opt_extra);
+
+        /* Make sure the roller's height and the scrollable's height is 
refreshed.
+         * They are refreshed in `LV_SIGNAL_COORD_CHG` but if the new options 
has the same width
+         * that signal won't be called. (It called because LV_FIT_TIGHT hor 
fit)*/
+        refr_height(roller);
+
+        uint16_t real_id_cnt = ext->ddlist.option_cnt / LV_ROLLER_INF_PAGES;
+        lv_roller_set_selected(roller, ((LV_ROLLER_INF_PAGES / 2) + 1) * 
real_id_cnt, false); /*Select the middle page*/
+    }
+}
+
+/**
+ * Set the align of the roller's options (left or center)
+ * @param roller - pointer to a roller object
+ * @param align - one of lv_label_align_t values (left, right, center)
+ */
+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;
+
+    if(label == NULL) return; /*Probably the roller is being deleted if the 
label is NULL.*/
+    lv_label_set_align(label, align);
+
+    switch(lv_label_get_align(label)) {
+        case LV_LABEL_ALIGN_LEFT: lv_obj_align(label, NULL, 
LV_ALIGN_IN_LEFT_MID, 0, 0); break;
+        case LV_LABEL_ALIGN_CENTER: lv_obj_align(label, NULL, LV_ALIGN_CENTER, 
0, 0); break;
+        case LV_LABEL_ALIGN_RIGHT: lv_obj_align(label, NULL, 
LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
+    }
+}
+
+/**
+ * Set the selected option
+ * @param roller pointer to a roller object
+ * @param sel_opt id of the selected option (0 ... number of option - 1);
+ * @param anim_en LV_ANIM_ON: set with animation; LV_ANOM_OFF set immediately
+ */
+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
+
+    if(lv_roller_get_selected(roller) == sel_opt) return;
+
+    lv_ddlist_set_selected(roller, sel_opt);
+    refr_position(roller, anim);
+}
+
+/**
+ * Set the height to show the given number of rows (options)
+ * @param roller pointer to a roller object
+ * @param row_cnt number of desired visible rows
+ */
+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;
+    lv_ddlist_set_fix_height(roller, 
lv_font_get_line_height(style_label->text.font) * row_cnt +
+                                         style_label->text.line_space * 
n_line_space);
+}
+
+/**
+ * Set a style of a roller
+ * @param roller pointer to a roller object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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;
+    }
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the id of the selected option
+ * @param roller pointer to a roller object
+ * @return id of the selected option (0 ... number of option - 1);
+ */
+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;
+        return lv_ddlist_get_selected(roller) % real_id_cnt;
+    } else {
+        return lv_ddlist_get_selected(roller);
+    }
+}
+
+/**
+ * Get the align attribute. Default alignment after _create is 
LV_LABEL_ALIGN_CENTER
+ * @param roller pointer to a roller object
+ * @return LV_LABEL_ALIGN_LEFT, LV_LABEL_ALIGN_RIGHT or LV_LABEL_ALIGN_CENTER
+ */
+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_ASSERT_MEM(ext);
+    LV_ASSERT_MEM(ext->ddlist.label);
+    return lv_label_get_align(ext->ddlist.label);
+}
+
+/**
+ * Get the auto width set attribute
+ * @param roller pointer to a roller object
+ * @return true: auto size enabled; false: manual width settings enabled
+ */
+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);
+}
+
+/**
+ * Get a style of a roller
+ * @param roller pointer to a roller object
+ * @param type which style should be get
+ * @return style pointer to a style
+ *  */
+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);
+
+    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;
+    }
+
+    /*To avoid warning*/
+    return NULL;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_roller_design(lv_obj_t * roller, const lv_area_t * mask, 
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;
+    }
+    /*Draw the object*/
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+        draw_bg(roller, mask);
+
+        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);
+        const lv_font_t * font   = style->text.font;
+        lv_roller_ext_t * ext    = lv_obj_get_ext_attr(roller);
+        lv_coord_t font_h        = lv_font_get_line_height(font);
+        lv_area_t rect_area;
+        rect_area.y1 = roller->coords.y1 + lv_obj_get_height(roller) / 2 - 
font_h / 2 - style->text.line_space / 2;
+        if((font_h & 0x1) && (style->text.line_space & 0x1)) rect_area.y1--; 
/*Compensate the two rounding error*/
+        rect_area.y2 = rect_area.y1 + font_h + style->text.line_space - 1;
+        lv_area_t roller_coords;
+        lv_obj_get_coords(roller, &roller_coords);
+        lv_obj_get_inner_coords(roller, &roller_coords);
+
+        rect_area.x1 = roller_coords.x1;
+        rect_area.x2 = roller_coords.x2;
+
+        lv_draw_rect(&rect_area, mask, ext->ddlist.sel_style, opa_scale);
+    }
+    /*Post draw when the children are drawn*/
+    else if(mode == LV_DESIGN_DRAW_POST) {
+        const lv_style_t * style = lv_roller_get_style(roller, 
LV_ROLLER_STYLE_BG);
+        lv_roller_ext_t * ext    = lv_obj_get_ext_attr(roller);
+        const lv_font_t * font   = style->text.font;
+        lv_coord_t font_h        = lv_font_get_line_height(font);
+        lv_opa_t opa_scale       = lv_obj_get_opa_scale(roller);
+
+        /*Redraw the text on the selected area with a different color*/
+        lv_area_t rect_area;
+        rect_area.y1 = roller->coords.y1 + lv_obj_get_height(roller) / 2 - 
font_h / 2 - style->text.line_space / 2;
+        if((font_h & 0x1) && (style->text.line_space & 0x1)) rect_area.y1--; 
/*Compensate the two rounding error*/
+        rect_area.y2 = rect_area.y1 + font_h + style->text.line_space - 1;
+        rect_area.x1 = roller->coords.x1;
+        rect_area.x2 = roller->coords.x2;
+        lv_area_t mask_sel;
+        bool area_ok;
+        area_ok = lv_area_intersect(&mask_sel, mask, &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;
+            lv_txt_flag_t txt_align = LV_TXT_FLAG_NONE;
+
+            {
+                lv_label_align_t label_align = 
lv_label_get_align(ext->ddlist.label);
+
+                if(LV_LABEL_ALIGN_CENTER == label_align) {
+                    txt_align |= LV_TXT_FLAG_CENTER;
+                } else if(LV_LABEL_ALIGN_RIGHT == label_align) {
+                    txt_align |= LV_TXT_FLAG_RIGHT;
+                }
+            }
+
+            lv_style_copy(&new_style, style);
+            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, NULL, NULL, lv_obj_get_base_dir(ext->ddlist.label));
+        }
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the roller
+ * @param roller pointer to a roller 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_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res = LV_RES_OK;
+
+    /*Don't let the drop down list to handle the control signals. It works 
differently*/
+    if(sign != LV_SIGNAL_CONTROL && sign != LV_SIGNAL_FOCUS && sign != 
LV_SIGNAL_DEFOCUS) {
+        /* Include the ancient signal function */
+        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);
+
+    if(sign == LV_SIGNAL_STYLE_CHG) {
+        refr_height(roller);
+
+        refr_position(roller, false);
+    } else if(sign == LV_SIGNAL_CORD_CHG) {
+
+        if(lv_obj_get_width(roller) != lv_area_get_width(param) ||
+           lv_obj_get_height(roller) != lv_area_get_height(param)) {
+
+            refr_height(roller);
+#if LV_USE_ANIMATION
+            lv_anim_del(lv_page_get_scrl(roller), 
(lv_anim_exec_xcb_t)lv_obj_set_y);
+#endif
+            lv_ddlist_set_selected(roller, ext->ddlist.sel_opt_id);
+            refr_position(roller, false);
+        }
+    } else if(sign == LV_SIGNAL_FOCUS) {
+#if LV_USE_GROUP
+        lv_group_t * g             = lv_obj_get_group(roller);
+        bool editing               = lv_group_get_editing(g);
+        lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
+
+        /*Encoders need special handling*/
+        if(indev_type == LV_INDEV_TYPE_ENCODER) {
+            /*In navigate mode revert the original value*/
+            if(!editing) {
+                if(ext->ddlist.sel_opt_id != ext->ddlist.sel_opt_id_ori) {
+                    ext->ddlist.sel_opt_id = ext->ddlist.sel_opt_id_ori;
+                    refr_position(roller, true);
+                }
+            }
+            /*Save the current state when entered to edit mode*/
+            else {
+                ext->ddlist.sel_opt_id_ori = ext->ddlist.sel_opt_id;
+            }
+        } else {
+            ext->ddlist.sel_opt_id_ori = ext->ddlist.sel_opt_id; /*Save the 
current value. Used to revert this state if
+                                                                    ENER 
wont't be pressed*/
+        }
+#endif
+    } else if(sign == LV_SIGNAL_DEFOCUS) {
+#if LV_USE_GROUP
+        /*Revert the original state*/
+        if(ext->ddlist.sel_opt_id != ext->ddlist.sel_opt_id_ori) {
+            ext->ddlist.sel_opt_id = ext->ddlist.sel_opt_id_ori;
+            refr_position(roller, true);
+        }
+#endif
+    } else if(sign == LV_SIGNAL_CONTROL) {
+        char c = *((char *)param);
+        if(c == LV_KEY_RIGHT || c == LV_KEY_DOWN) {
+            if(ext->ddlist.sel_opt_id + 1 < ext->ddlist.option_cnt) {
+                uint16_t ori_id = ext->ddlist.sel_opt_id_ori; 
/*lv_roller_set_selceted will overwrite this*/
+                lv_roller_set_selected(roller, ext->ddlist.sel_opt_id + 1, 
true);
+                ext->ddlist.sel_opt_id_ori = ori_id;
+            }
+        } else if(c == LV_KEY_LEFT || c == LV_KEY_UP) {
+            if(ext->ddlist.sel_opt_id > 0) {
+                uint16_t ori_id = ext->ddlist.sel_opt_id_ori; 
/*lv_roller_set_selceted will overwrite this*/
+                lv_roller_set_selected(roller, ext->ddlist.sel_opt_id - 1, 
true);
+                ext->ddlist.sel_opt_id_ori = ori_id;
+            }
+        }
+    }
+
+    return res;
+}
+
+/**
+ * Signal function of the scrollable part of the roller.
+ * @param roller_scrl ointer to the scrollable part of roller (page)
+ * @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_roller_scrl_signal(lv_obj_t * roller_scrl, lv_signal_t 
sign, void * param)
+{
+    lv_res_t res;
+
+    /* Include the ancient signal function */
+    res = ancestor_scrl_signal(roller_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_OBJX_NAME);
+
+    lv_indev_t * indev    = lv_indev_get_act();
+    int32_t id            = -1;
+    lv_obj_t * roller     = lv_obj_get_parent(roller_scrl);
+    lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
+
+    if(ext->ddlist.label == NULL)
+        return LV_RES_INV; /*On delete the ddlist signal deletes the label so 
nothing left to do
+                              here*/
+
+    const lv_style_t * style_label = lv_obj_get_style(ext->ddlist.label);
+    const lv_font_t * font         = style_label->text.font;
+    lv_coord_t font_h              = lv_font_get_line_height(font);
+
+    if(sign == LV_SIGNAL_DRAG_END) {
+        /*If dragged then align the list to have an element in the middle*/
+        lv_coord_t label_y1   = ext->ddlist.label->coords.y1 - 
roller->coords.y1;
+        lv_coord_t label_unit = font_h + style_label->text.line_space;
+        lv_coord_t mid        = (roller->coords.y2 - roller->coords.y1) / 2;
+
+        id = (mid - label_y1 + style_label->text.line_space / 2) / label_unit;
+
+        if(id < 0) id = 0;
+        if(id >= ext->ddlist.option_cnt) id = ext->ddlist.option_cnt - 1;
+
+        ext->ddlist.sel_opt_id     = id;
+        ext->ddlist.sel_opt_id_ori = id;
+        res                        = lv_event_send(roller, 
LV_EVENT_VALUE_CHANGED, &id);
+        if(res != LV_RES_OK) return res;
+    }
+    /*If picked an option by clicking then set it*/
+    else if(sign == LV_SIGNAL_RELEASED) {
+        if(!lv_indev_is_dragging(indev)) {
+            id = ext->ddlist.sel_opt_id;
+#if LV_USE_GROUP
+            /*In edit mode go to navigate mode if an option is selected*/
+            lv_group_t * g = lv_obj_get_group(roller);
+            bool editing   = lv_group_get_editing(g);
+            if(editing) lv_group_set_editing(g, false);
+#endif
+        }
+    } else if(sign == LV_SIGNAL_PRESSED) {
+#if LV_USE_ANIMATION
+        lv_anim_del(roller_scrl, (lv_anim_exec_xcb_t)lv_obj_set_y);
+#endif
+    }
+
+    /*Position the scrollable according to the new selected option*/
+    if(id != -1) {
+        refr_position(roller, true);
+    }
+
+    return res;
+}
+
+/**
+ * Draw a rectangle which has gradient on its top and bottom
+ * @param roller pointer to a roller object
+ * @param mask pointer to the current mask (from the design function)
+ */
+static void draw_bg(lv_obj_t * roller, const lv_area_t * mask)
+{
+    const lv_style_t * style = lv_roller_get_style(roller, LV_ROLLER_STYLE_BG);
+    lv_area_t half_mask;
+    lv_area_t half_roller;
+    lv_coord_t h = lv_obj_get_height(roller);
+    bool union_ok;
+    lv_area_copy(&half_roller, &roller->coords);
+
+    half_roller.x1 -= roller->ext_draw_pad; /*Add ext size too (e.g. because 
of shadow draw) */
+    half_roller.x2 += roller->ext_draw_pad;
+    half_roller.y1 -= roller->ext_draw_pad;
+    half_roller.y2 = roller->coords.y1 + h / 2;
+
+    union_ok = lv_area_intersect(&half_mask, &half_roller, mask);
+
+    half_roller.x1 += roller->ext_draw_pad; /*Revert ext. size adding*/
+    half_roller.x2 -= roller->ext_draw_pad;
+    half_roller.y1 += roller->ext_draw_pad;
+    half_roller.y2 += style->body.radius;
+
+    if(union_ok) {
+        lv_draw_rect(&half_roller, &half_mask, style, 
lv_obj_get_opa_scale(roller));
+    }
+
+    half_roller.x1 -= roller->ext_draw_pad; /*Add ext size too (e.g. because 
of shadow draw) */
+    half_roller.x2 += roller->ext_draw_pad;
+    half_roller.y2 = roller->coords.y2 + roller->ext_draw_pad;
+    half_roller.y1 = roller->coords.y1 + h / 2;
+    if((h & 0x1) == 0) half_roller.y1++; /*With even height the pixels in the 
middle would be drawn twice*/
+
+    union_ok = lv_area_intersect(&half_mask, &half_roller, mask);
+
+    half_roller.x1 += roller->ext_draw_pad; /*Revert ext. size adding*/
+    half_roller.x2 -= roller->ext_draw_pad;
+    half_roller.y2 -= roller->ext_draw_pad;
+    half_roller.y1 -= style->body.radius;
+
+    if(union_ok) {
+        lv_style_t style_tmp;
+        memcpy(&style_tmp, style, sizeof(lv_style_t));
+        style_tmp.body.main_color = style->body.grad_color;
+        style_tmp.body.grad_color = style->body.main_color;
+        lv_draw_rect(&half_roller, &half_mask, &style_tmp, 
lv_obj_get_opa_scale(roller));
+    }
+}
+
+/**
+ * Refresh the position of the roller. It uses the id stored in: 
ext->ddlist.selected_option_id
+ * @param roller pointer to a roller object
+ * @param anim_en LV_ANIM_ON: refresh with animation; LV_ANOM_OFF: without 
animation
+ */
+static void refr_position(lv_obj_t * roller, lv_anim_enable_t anim_en)
+{
+#if LV_USE_ANIMATION == 0
+    anim_en = LV_ANIM_OFF;
+#endif
+
+    lv_obj_t * roller_scrl         = lv_page_get_scrl(roller);
+    lv_roller_ext_t * ext          = lv_obj_get_ext_attr(roller);
+    const lv_style_t * style_label = lv_obj_get_style(ext->ddlist.label);
+    const lv_font_t * font         = style_label->text.font;
+    lv_coord_t font_h              = lv_font_get_line_height(font);
+    lv_coord_t h                   = lv_obj_get_height(roller);
+    uint16_t anim_time             = lv_roller_get_anim_time(roller);
+
+    /* Normally the animtaion's `end_cb` sets correct position of the roller 
is infinite.
+     * But without animations do it manually*/
+    if(anim_en == LV_ANIM_OFF || anim_time == 0) {
+        inf_normalize(roller_scrl);
+    }
+
+    int32_t id = ext->ddlist.sel_opt_id;
+    lv_coord_t line_y1 =
+        id * (font_h + style_label->text.line_space) + 
ext->ddlist.label->coords.y1 - roller_scrl->coords.y1;
+    lv_coord_t new_y = -line_y1 + (h - font_h) / 2;
+
+    if(anim_en == LV_ANIM_OFF || anim_time == 0) {
+        lv_obj_set_y(roller_scrl, new_y);
+    } else {
+#if LV_USE_ANIMATION
+        lv_anim_t a;
+        a.var            = roller_scrl;
+        a.start          = lv_obj_get_y(roller_scrl);
+        a.end            = new_y;
+        a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_y;
+        a.path_cb        = lv_anim_path_linear;
+        a.ready_cb       = scroll_anim_ready_cb;
+        a.act_time       = 0;
+        a.time           = anim_time;
+        a.playback       = 0;
+        a.playback_pause = 0;
+        a.repeat         = 0;
+        a.repeat_pause   = 0;
+        lv_anim_create(&a);
+#endif
+    }
+}
+
+/**
+ * Refresh the height of the roller and the scrolable
+ * @param roller pointer to roller
+ */
+static void refr_height(lv_obj_t * roller)
+{
+    lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
+    lv_align_t obj_align  = LV_ALIGN_IN_LEFT_MID;
+    if(ext->ddlist.label) {
+        lv_label_align_t label_align = lv_label_get_align(ext->ddlist.label);
+        if(LV_LABEL_ALIGN_CENTER == label_align)
+            obj_align = LV_ALIGN_CENTER;
+        else if(LV_LABEL_ALIGN_RIGHT == label_align)
+            obj_align = LV_ALIGN_IN_RIGHT_MID;
+    }
+
+    lv_obj_set_height(lv_page_get_scrl(roller), 
lv_obj_get_height(ext->ddlist.label) + lv_obj_get_height(roller));
+    lv_obj_align(ext->ddlist.label, NULL, obj_align, 0, 0);
+#if LV_USE_ANIMATION
+    lv_anim_del(lv_page_get_scrl(roller), (lv_anim_exec_xcb_t)lv_obj_set_y);
+#endif
+    lv_ddlist_set_selected(roller, ext->ddlist.sel_opt_id);
+}
+
+/**
+ * Set the middle page for the roller if inifinte is enabled
+ * @param scrl pointer to the roller's scrollable (lv_obj_t *)
+ */
+static void inf_normalize(void * scrl)
+{
+    lv_obj_t * roller_scrl = (lv_obj_t *)scrl;
+    lv_obj_t * roller      = lv_obj_get_parent(roller_scrl);
+    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;
+
+        ext->ddlist.sel_opt_id = ext->ddlist.sel_opt_id % real_id_cnt;
+
+        ext->ddlist.sel_opt_id += (LV_ROLLER_INF_PAGES / 2) * real_id_cnt; 
/*Select the middle page*/
+
+        /*Move to the new id*/
+        const lv_style_t * style_label = lv_obj_get_style(ext->ddlist.label);
+        const lv_font_t * font         = style_label->text.font;
+        lv_coord_t font_h              = lv_font_get_line_height(font);
+        lv_coord_t h                   = lv_obj_get_height(roller);
+
+        lv_coord_t line_y1 = ext->ddlist.sel_opt_id * (font_h + 
style_label->text.line_space) +
+                             ext->ddlist.label->coords.y1 - 
roller_scrl->coords.y1;
+        lv_coord_t new_y = -line_y1 + (h - font_h) / 2;
+        lv_obj_set_y(roller_scrl, new_y);
+    }
+}
+
+#if LV_USE_ANIMATION
+static void scroll_anim_ready_cb(lv_anim_t * a)
+{
+    inf_normalize(a->var);
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_roller.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_roller.h
new file mode 100755
index 0000000..5303c3a
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_roller.h
@@ -0,0 +1,212 @@
+/**
+ * @file lv_roller.h
+ *
+ */
+
+#ifndef LV_ROLLER_H
+#define LV_ROLLER_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_ROLLER != 0
+
+/*Testing of dependencies*/
+#if LV_USE_DDLIST == 0
+#error "lv_roller: lv_ddlist is required. Enable it in lv_conf.h 
(LV_USE_DDLIST  1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "lv_ddlist.h"
+#include "lv_label.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/** Roller mode. */
+enum {
+    LV_ROLLER_MODE_NORMAL, /**< Normal mode (roller ends at the end of the 
options). */
+    LV_ROLLER_MODE_INIFINITE, /**< Infinite mode (roller can be scrolled 
forever). */
+};
+
+typedef uint8_t lv_roller_mode_t;
+
+
+
+/*Data of roller*/
+typedef struct
+{
+    lv_ddlist_ext_t ddlist; /*Ext. of ancestor*/
+    /*New data for this type */
+    lv_roller_mode_t mode : 1;
+} lv_roller_ext_t;
+
+enum {
+    LV_ROLLER_STYLE_BG,
+    LV_ROLLER_STYLE_SEL,
+};
+typedef uint8_t lv_roller_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a roller object
+ * @param par pointer to an object, it will be the parent of the new roller
+ * @param copy pointer to a roller object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created roller
+ */
+lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the options on a roller
+ * @param roller pointer to roller object
+ * @param options a string with '\n' separated options. E.g. "One\nTwo\nThree"
+ * @param mode `LV_ROLLER_MODE_NORMAL` or `LV_ROLLER_MODE_INFINITE`
+ */
+void lv_roller_set_options(lv_obj_t * roller, const char * options, 
lv_roller_mode_t mode);
+
+/**
+ * Set the align of the roller's options (left, right or center[default])
+ * @param roller - pointer to a roller object
+ * @param align - one of lv_label_align_t values (left, right, center)
+ */
+void lv_roller_set_align(lv_obj_t * roller, lv_label_align_t align);
+
+/**
+ * Set the selected option
+ * @param roller pointer to a roller object
+ * @param sel_opt id of the selected option (0 ... number of option - 1);
+ * @param anim LV_ANOM_ON: set with animation; LV_ANIM_OFF set immediately
+ */
+void lv_roller_set_selected(lv_obj_t * roller, uint16_t sel_opt, 
lv_anim_enable_t anim);
+
+/**
+ * Set the height to show the given number of rows (options)
+ * @param roller pointer to a roller object
+ * @param row_cnt number of desired visible rows
+ */
+void lv_roller_set_visible_row_count(lv_obj_t * roller, uint8_t row_cnt);
+
+/**
+ * Set a fix width for the drop down list
+ * @param roller pointer to a roller obejct
+ * @param w the width when the list is opened (0: auto size)
+ */
+static inline void lv_roller_set_fix_width(lv_obj_t * roller, lv_coord_t w)
+{
+    lv_ddlist_set_fix_width(roller, w);
+}
+
+/**
+ * Set the open/close animation time.
+ * @param roller pointer to a roller object
+ * @param anim_time: open/close animation time [ms]
+ */
+static inline void lv_roller_set_anim_time(lv_obj_t * roller, uint16_t 
anim_time)
+{
+    lv_ddlist_set_anim_time(roller, anim_time);
+}
+
+/**
+ * Set a style of a roller
+ * @param roller pointer to a roller object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_roller_set_style(lv_obj_t * roller, lv_roller_style_t type, const 
lv_style_t * style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+/**
+ * Get the id of the selected option
+ * @param roller pointer to a roller object
+ * @return id of the selected option (0 ... number of option - 1);
+ */
+uint16_t lv_roller_get_selected(const lv_obj_t * roller);
+
+/**
+ * Get the current selected option as a string
+ * @param roller pointer to roller object
+ * @param buf pointer to an array to store the string
+ * @param buf_size size of `buf` in bytes. 0: to ignore it.
+ */
+static inline void lv_roller_get_selected_str(const lv_obj_t * roller, char * 
buf, uint16_t buf_size)
+{
+    lv_ddlist_get_selected_str(roller, buf, buf_size);
+}
+
+/**
+ * Get the align attribute. Default alignment after _create is 
LV_LABEL_ALIGN_CENTER
+ * @param roller pointer to a roller object
+ * @return LV_LABEL_ALIGN_LEFT, LV_LABEL_ALIGN_RIGHT or LV_LABEL_ALIGN_CENTER
+ */
+lv_label_align_t lv_roller_get_align(const lv_obj_t * roller);
+
+/**
+ * Get the options of a roller
+ * @param roller pointer to roller object
+ * @return the options separated by '\n'-s (E.g. "Option1\nOption2\nOption3")
+ */
+static inline const char * lv_roller_get_options(const lv_obj_t * roller)
+{
+    return lv_ddlist_get_options(roller);
+}
+
+/**
+ * Get the open/close animation time.
+ * @param roller pointer to a roller
+ * @return open/close animation time [ms]
+ */
+static inline uint16_t lv_roller_get_anim_time(const lv_obj_t * roller)
+{
+    return lv_ddlist_get_anim_time(roller);
+}
+
+/**
+ * Get the auto width set attribute
+ * @param roller pointer to a roller object
+ * @return true: auto size enabled; false: manual width settings enabled
+ */
+bool lv_roller_get_hor_fit(const lv_obj_t * roller);
+
+/**
+ * Get a style of a roller
+ * @param roller pointer to a roller object
+ * @param type which style should be get
+ * @return style pointer to a style
+ *  */
+const lv_style_t * lv_roller_get_style(const lv_obj_t * roller, 
lv_roller_style_t type);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_ROLLER*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_ROLLER_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_slider.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_slider.c
new file mode 100755
index 0000000..6e94973
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_slider.c
@@ -0,0 +1,620 @@
+
+/**
+ * @file lv_slider.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_slider"
+
+#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
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_slider_design(lv_obj_t * slider, const lv_area_t * mask, 
lv_design_mode_t mode);
+static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * 
param);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_design_cb_t ancestor_design_f;
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a slider objects
+ * @param par pointer to an object, it will be the parent of the new slider
+ * @param copy pointer to a slider object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created slider
+ */
+lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("slider create started");
+
+    /*Create the ancestor slider*/
+    lv_obj_t * new_slider = lv_bar_create(par, copy);
+    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);
+    if(ancestor_signal == NULL) ancestor_signal = 
lv_obj_get_signal_cb(new_slider);
+
+    /*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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    /*Initialize the allocated 'ext' */
+    ext->drag_value = LV_SLIDER_NOT_PRESSED;
+    ext->style_knob = &lv_style_pretty;
+    ext->knob_in    = 0;
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_slider, lv_slider_signal);
+    lv_obj_set_design_cb(new_slider, lv_slider_design);
+
+    /*Init the new slider slider*/
+    if(copy == NULL) {
+        lv_obj_set_click(new_slider, true);
+        lv_obj_set_protect(new_slider, LV_PROTECT_PRESS_LOST);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_slider_set_style(new_slider, LV_SLIDER_STYLE_BG, 
th->style.slider.bg);
+            lv_slider_set_style(new_slider, LV_SLIDER_STYLE_INDIC, 
th->style.slider.indic);
+            lv_slider_set_style(new_slider, LV_SLIDER_STYLE_KNOB, 
th->style.slider.knob);
+        } else {
+            lv_slider_set_style(new_slider, LV_SLIDER_STYLE_KNOB, 
ext->style_knob);
+        }
+    }
+    /*Copy an existing slider*/
+    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);
+    }
+
+    LV_LOG_INFO("slider created");
+
+    return new_slider;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * 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
+ */
+void lv_slider_set_knob_in(lv_obj_t * slider, bool in)
+{
+    LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
+
+    lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
+    if(ext->knob_in == in) return;
+
+    ext->knob_in = in == false ? 0 : 1;
+    lv_obj_invalidate(slider);
+}
+
+/**
+ * Set a style of a slider
+ * @param slider pointer to a slider object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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) {
+        case LV_SLIDER_STYLE_BG: lv_bar_set_style(slider, LV_BAR_STYLE_BG, 
style); break;
+        case LV_SLIDER_STYLE_INDIC: lv_bar_set_style(slider, 
LV_BAR_STYLE_INDIC, style); break;
+        case LV_SLIDER_STYLE_KNOB:
+            ext->style_knob = style;
+            lv_obj_refresh_ext_draw_pad(slider);
+            break;
+    }
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the value of a slider
+ * @param slider pointer to a slider object
+ * @return the value of the slider
+ */
+int16_t lv_slider_get_value(const lv_obj_t * slider)
+{
+    LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
+
+    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);
+}
+
+/**
+ * Give the slider is being dragged or not
+ * @param slider pointer to a slider object
+ * @return true: drag in progress false: not dragged
+ */
+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;
+}
+
+/**
+ * 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
+ */
+bool lv_slider_get_knob_in(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->knob_in == 0 ? false : true;
+}
+
+/**
+ * Get a style of a slider
+ * @param slider pointer to a slider object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+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);
+
+    switch(type) {
+        case LV_SLIDER_STYLE_BG: style = lv_bar_get_style(slider, 
LV_BAR_STYLE_BG); break;
+        case LV_SLIDER_STYLE_INDIC: style = lv_bar_get_style(slider, 
LV_BAR_STYLE_INDIC); break;
+        case LV_SLIDER_STYLE_KNOB: style = ext->style_knob; break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_slider_design(lv_obj_t * slider, const lv_area_t * mask, 
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;
+    }
+    /*Draw the object*/
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+        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_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;
+        bool sym = false;
+        if(ext->bar.sym && ext->bar.min_value < 0 && ext->bar.max_value > 0) 
sym = true;
+
+        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;
+            if(sym) {
+                /*Calculate the coordinate of the zero point*/
+                lv_coord_t zero;
+                zero = area_indic.x1 + (-ext->bar.min_value * slider_w) / 
(ext->bar.max_value - ext->bar.min_value);
+                if(area_indic.x2 > zero)
+                    area_indic.x1 = zero;
+                else {
+                    area_indic.x1 = area_indic.x2;
+                    area_indic.x2 = zero;
+                }
+            }
+
+            /*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;
+
+            if(sym) {
+                /*Calculate the coordinate of the zero point*/
+                lv_coord_t zero;
+                zero = area_indic.y2 - (-ext->bar.min_value * slider_h) / 
(ext->bar.max_value - ext->bar.min_value);
+                if(area_indic.y1 < zero)
+                    area_indic.y2 = zero;
+                else {
+                    area_indic.y2 = area_indic.y1;
+                    area_indic.y1 = zero;
+                }
+            }
+
+            /*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) {
+                if(sym == false) {
+                    knob_area.x1 = area_indic.x2 - slider_h / 2;
+                } else {
+                    if(cur_value > 0) knob_area.x1 = area_indic.x2 - slider_h 
/ 2;
+                    else knob_area.x1 = area_indic.x1 - slider_h / 2;
+                }
+                knob_area.x2 = knob_area.x1 + slider_h - 1;
+            } 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);
+                }
+
+                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) {
+                if(sym == false) {
+                    knob_area.y1 = area_indic.y1 - slider_w / 2;
+                } else {
+                    if(cur_value > 0)  knob_area.y1 = area_indic.y1 - slider_w 
/ 2;
+                    else  knob_area.y1 = area_indic.y2 - 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);
+    }
+    /*Post draw when the children are drawn*/
+    else if(mode == LV_DESIGN_DRAW_POST) {
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the slider
+ * @param slider pointer to a slider 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_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res;
+
+    /* 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) {
+        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;
+
+        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;
+        }
+    } 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;
+
+#if LV_USE_GROUP
+        /*Leave edit mode if released. (No need to wait for LONG_PRESS) */
+        lv_group_t * g             = lv_obj_get_group(slider);
+        bool editing               = lv_group_get_editing(g);
+        lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
+        if(indev_type == LV_INDEV_TYPE_ENCODER) {
+            if(editing) lv_group_set_editing(g, false);
+        }
+#endif
+
+    } else if(sign == LV_SIGNAL_CORD_CHG) {
+        /* The knob size depends on slider size.
+         * During the drawing method the ext. size is used by the knob so 
refresh the ext. size.*/
+        if(lv_obj_get_width(slider) != lv_area_get_width(param) ||
+           lv_obj_get_height(slider) != lv_area_get_height(param)) {
+            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 * 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;
+
+            if(slider->ext_draw_pad < shadow_w) slider->ext_draw_pad = 
shadow_w;
+        }
+    } 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);
+            if(res != LV_RES_OK) return res;
+        } else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
+            lv_slider_set_value(slider, lv_slider_get_value(slider) - 1, true);
+            res = lv_event_send(slider, LV_EVENT_VALUE_CHANGED, NULL);
+            if(res != LV_RES_OK) return res;
+        }
+    } else if(sign == LV_SIGNAL_GET_EDITABLE) {
+        bool * editable = (bool *)param;
+        *editable       = true;
+    }
+
+    return res;
+}
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_slider.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_slider.h
new file mode 100755
index 0000000..967c8b6
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_slider.h
@@ -0,0 +1,216 @@
+/**
+ * @file lv_slider.h
+ *
+ */
+
+#ifndef LV_SLIDER_H
+#define LV_SLIDER_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_SLIDER != 0
+
+/*Testing of dependencies*/
+#if LV_USE_BAR == 0
+#error "lv_slider: lv_bar is required. Enable it in lv_conf.h (LV_USE_BAR  1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "lv_bar.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+/*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_slider_ext_t;
+
+/** Built-in styles of slider*/
+enum {
+    LV_SLIDER_STYLE_BG, /** Slider background style. */
+    LV_SLIDER_STYLE_INDIC, /** Slider indicator (filled area) style. */
+    LV_SLIDER_STYLE_KNOB, /** Slider knob style. */
+};
+typedef uint8_t lv_slider_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a slider objects
+ * @param par pointer to an object, it will be the parent of the new slider
+ * @param copy pointer to a slider object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created slider
+ */
+lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new value on the slider
+ * @param slider pointer to a slider object
+ * @param 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_value(lv_obj_t * slider, int16_t value, 
lv_anim_enable_t anim)
+{
+    lv_bar_set_value(slider, value, anim);
+}
+
+/**
+ * Set minimum and the maximum values of a bar
+ * @param slider pointer to the slider object
+ * @param min minimum value
+ * @param max maximum value
+ */
+static inline void lv_slider_set_range(lv_obj_t * slider, int16_t min, int16_t 
max)
+{
+    lv_bar_set_range(slider, min, max);
+}
+
+/**
+ * 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)
+{
+    lv_bar_set_anim_time(slider, anim_time);
+}
+
+/**
+ * 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_sym(lv_obj_t * slider, bool en)
+{
+    lv_bar_set_sym(slider, en);
+}
+
+/**
+ * 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
+ */
+void lv_slider_set_knob_in(lv_obj_t * slider, bool in);
+
+/**
+ * Set a style of a slider
+ * @param slider pointer to a slider object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_slider_set_style(lv_obj_t * slider, lv_slider_style_t type, const 
lv_style_t * style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the value of a slider
+ * @param slider pointer to a slider object
+ * @return the value of the slider
+ */
+int16_t lv_slider_get_value(const lv_obj_t * slider);
+
+/**
+ * Get the minimum value of a slider
+ * @param slider pointer to a slider object
+ * @return the minimum value of the slider
+ */
+static inline int16_t lv_slider_get_min_value(const lv_obj_t * slider)
+{
+    return lv_bar_get_min_value(slider);
+}
+
+/**
+ * Get the maximum value of a slider
+ * @param slider pointer to a slider object
+ * @return the maximum value of the slider
+ */
+static inline int16_t lv_slider_get_max_value(const lv_obj_t * slider)
+{
+    return lv_bar_get_max_value(slider);
+}
+
+/**
+ * Give the slider is being dragged or not
+ * @param slider pointer to a slider object
+ * @return true: drag in progress false: not dragged
+ */
+bool lv_slider_is_dragged(const lv_obj_t * slider);
+
+/**
+ * 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 bool lv_slider_get_sym(lv_obj_t * slider)
+{
+    return lv_bar_get_sym(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
+ */
+bool lv_slider_get_knob_in(const lv_obj_t * slider);
+
+/**
+ * Get a style of a slider
+ * @param slider pointer to a slider object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+const lv_style_t * lv_slider_get_style(const lv_obj_t * slider, 
lv_slider_style_t type);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_SLIDER*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_SLIDER_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_spinbox.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_spinbox.c
new file mode 100755
index 0000000..6873085
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_spinbox.c
@@ -0,0 +1,479 @@
+/**
+ * @file lv_spinbox.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_spinbox"
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static lv_res_t lv_spinbox_signal(lv_obj_t * spinbox, lv_signal_t sign, void * 
param);
+static void lv_spinbox_updatevalue(lv_obj_t * spinbox);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_design_cb_t ancestor_design;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a spinbox object
+ * @param par pointer to an object, it will be the parent of the new spinbox
+ * @param copy pointer to a spinbox object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created spinbox
+ */
+lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("spinbox create started");
+
+    /*Create the ancestor of spinbox*/
+    lv_obj_t * new_spinbox = lv_ta_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) 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);
+
+    /*Initialize the allocated 'ext'*/
+    ext->value              = 0;
+    ext->dec_point_pos      = 0;
+    ext->digit_count        = 5;
+    ext->digit_padding_left = 0;
+    ext->step               = 1;
+    ext->range_max          = 99999;
+    ext->range_min          = -99999;
+
+    lv_ta_set_cursor_type(new_spinbox, LV_CURSOR_BLOCK);
+    lv_ta_set_one_line(new_spinbox, true);
+    lv_ta_set_cursor_click_pos(new_spinbox, false);
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_spinbox, lv_spinbox_signal);
+    lv_obj_set_design_cb(new_spinbox, ancestor_design); /*Leave the Text 
area's design function*/
+
+    /*Init the new spinbox spinbox*/
+    if(copy == NULL) {
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_spinbox_set_style(new_spinbox, LV_SPINBOX_STYLE_BG, 
th->style.spinbox.bg);
+            lv_spinbox_set_style(new_spinbox, LV_SPINBOX_STYLE_CURSOR, 
th->style.spinbox.cursor);
+            lv_spinbox_set_style(new_spinbox, LV_SPINBOX_STYLE_SB, 
th->style.spinbox.sb);
+        }
+    }
+    /*Copy an existing spinbox*/
+    else {
+        lv_spinbox_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+
+        lv_spinbox_set_value(new_spinbox, copy_ext->value);
+        lv_spinbox_set_digit_format(new_spinbox, 
(uint8_t)copy_ext->digit_count, (uint8_t)copy_ext->dec_point_pos);
+        lv_spinbox_set_range(new_spinbox, copy_ext->range_min, 
copy_ext->range_max);
+        lv_spinbox_set_step(new_spinbox, copy_ext->step);
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_spinbox);
+    }
+
+    lv_spinbox_updatevalue(new_spinbox);
+
+    LV_LOG_INFO("spinbox created");
+
+    return new_spinbox;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set spinbox value
+ * @param spinbox pointer to spinbox
+ * @param i value to be set
+ */
+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;
+
+    if(i > ext->range_max) i = ext->range_max;
+    if(i < ext->range_min) i = ext->range_min;
+
+    ext->value = i;
+
+    lv_spinbox_updatevalue(spinbox);
+}
+
+/**
+ * Set spinbox digit format (digit count and decimal format)
+ * @param spinbox pointer to spinbox
+ * @param digit_count number of digit excluding the decimal separator and the 
sign
+ * @param separator_position number of digit before the decimal point. If 0, 
decimal point is not
+ * shown
+ */
+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;
+
+    if(digit_count > LV_SPINBOX_MAX_DIGIT_COUNT) digit_count = 
LV_SPINBOX_MAX_DIGIT_COUNT;
+
+    if(separator_position > LV_SPINBOX_MAX_DIGIT_COUNT) separator_position = 
LV_SPINBOX_MAX_DIGIT_COUNT;
+
+    ext->digit_count   = digit_count;
+    ext->dec_point_pos = separator_position;
+
+    lv_spinbox_updatevalue(spinbox);
+}
+
+/**
+ * Set spinbox step
+ * @param spinbox pointer to spinbox
+ * @param step steps on increment/decrement
+ */
+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;
+
+    ext->step = step;
+}
+
+/**
+ * Set spinbox value range
+ * @param spinbox pointer to spinbox
+ * @param range_min maximum value, inclusive
+ * @param range_max minimum value, inclusive
+ */
+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;
+
+    ext->range_max = range_max;
+    ext->range_min = range_min;
+
+    if(ext->value > ext->range_max) {
+        ext->value = ext->range_max;
+        lv_obj_invalidate(spinbox);
+    }
+    if(ext->value < ext->range_min) {
+        ext->value = ext->range_min;
+        lv_obj_invalidate(spinbox);
+    }
+}
+
+/**
+ * Set spinbox left padding in digits count (added between sign and first 
digit)
+ * @param spinbox pointer to spinbox
+ * @param cb Callback function called on value change event
+ */
+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);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the spinbox numeral value (user has to convert to float according to 
its digit format)
+ * @param spinbox pointer to spinbox
+ * @return value integer value of the spinbox
+ */
+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;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Select next lower digit for edition
+ * @param spinbox pointer to 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;
+    if((new_step) > 0)
+        ext->step = new_step;
+    else
+        ext->step = 1;
+
+    lv_spinbox_updatevalue(spinbox);
+}
+
+/**
+ * Select next higher digit for edition
+ * @param spinbox pointer to 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));
+    int32_t new_step = ext->step * 10;
+    if(new_step <= step_limit) ext->step = new_step;
+
+    lv_spinbox_updatevalue(spinbox);
+}
+
+/**
+ * Increment spinbox value by one step
+ * @param spinbox pointer to 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) {
+        /*Special mode when zero crossing*/
+        if((ext->value + ext->step) > 0 && ext->value < 0) ext->value = 
-ext->value;
+        ext->value += ext->step;
+
+    } else {
+        ext->value = ext->range_max;
+    }
+
+    lv_spinbox_updatevalue(spinbox);
+}
+
+/**
+ * Decrement spinbox value by one step
+ * @param spinbox pointer to 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) {
+        /*Special mode when zero crossing*/
+        if((ext->value - ext->step) < 0 && ext->value > 0) ext->value = 
-ext->value;
+        ext->value -= ext->step;
+    } else {
+        ext->value = ext->range_min;
+    }
+
+    lv_spinbox_updatevalue(spinbox);
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Signal function of the spinbox
+ * @param spinbox pointer to a spinbox 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_spinbox_signal(lv_obj_t * spinbox, lv_signal_t sign, void * 
param)
+{
+
+    lv_res_t res = LV_RES_OK;
+
+    /* Include the ancient signal function */
+    if(sign != LV_SIGNAL_CONTROL) {
+        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) {
+        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_spinbox";
+    } else if(sign == LV_SIGNAL_RELEASED) {
+        /*If released with an ENCODER then move to the next digit*/
+#if LV_USE_GROUP
+        lv_indev_t * indev = lv_indev_get_act();
+        if(lv_indev_get_type(indev) == LV_INDEV_TYPE_ENCODER) {
+            if(lv_group_get_editing(lv_obj_get_group(spinbox))) {
+                if(ext->step > 1) {
+                    lv_spinbox_step_next(spinbox);
+                } else {
+                    /*Restart from the MSB*/
+                    ext->step = 1;
+                    uint32_t i;
+                    for(i = 0; i < ext->digit_count; i++) {
+                        int32_t new_step = ext->step * 10;
+                        if(new_step >= ext->range_max) break;
+                        ext->step = new_step;
+                    }
+                    lv_spinbox_step_prev(spinbox);
+                }
+            }
+        }
+#endif
+    } else if(sign == LV_SIGNAL_CONTROL) {
+        lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
+
+        uint32_t c = *((uint32_t *)param); /*uint32_t because can be UTF-8*/
+        if(c == LV_KEY_RIGHT) {
+            if(indev_type == LV_INDEV_TYPE_ENCODER)
+                lv_spinbox_increment(spinbox);
+            else
+                lv_spinbox_step_next(spinbox);
+        } else if(c == LV_KEY_LEFT) {
+            if(indev_type == LV_INDEV_TYPE_ENCODER)
+                lv_spinbox_decrement(spinbox);
+            else
+                lv_spinbox_step_prev(spinbox);
+        } else if(c == LV_KEY_UP) {
+            lv_spinbox_increment(spinbox);
+        } else if(c == LV_KEY_DOWN) {
+            lv_spinbox_decrement(spinbox);
+        } else {
+            lv_ta_add_char(spinbox, c);
+        }
+    }
+
+    return res;
+}
+
+static void lv_spinbox_updatevalue(lv_obj_t * spinbox)
+{
+    lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
+
+    char buf[LV_SPINBOX_MAX_DIGIT_COUNT + 8];
+    memset(buf, 0, sizeof(buf));
+    char * buf_p = buf;
+    uint8_t cur_shift_left = 0;
+
+    if (ext->range_min < 0) { // hide sign if there are only positive values
+        /*Add the sign*/
+        (*buf_p) = ext->value >= 0 ? '+' : '-';
+        buf_p++;
+    } else {
+       /*Cursor need shift to left*/
+       cur_shift_left++;
+    }
+
+    int32_t i;
+    /*padding left*/
+    for(i = 0; i < ext->digit_padding_left; i++) {
+        (*buf_p) = ' ';
+        buf_p++;
+    }
+
+    char digits[64];
+    /*Convert the numbers to string (the sign is already handled so always 
covert positive number)*/
+    lv_utils_num_to_str(ext->value < 0 ? -ext->value : ext->value, digits);
+
+    /*Add leading zeros*/
+    int lz_cnt = ext->digit_count - (int)strlen(digits);
+    if(lz_cnt > 0) {
+        for(i = (uint16_t)strlen(digits); i >= 0; i--) {
+            digits[i + lz_cnt] = digits[i];
+        }
+        for(i = 0; i < lz_cnt; i++) {
+            digits[i] = '0';
+        }
+    }
+
+    int32_t intDigits;
+    intDigits = (ext->dec_point_pos == 0) ? ext->digit_count : 
ext->dec_point_pos;
+
+    /*Add the decimal part*/
+    for(i = 0; i < intDigits && digits[i] != '\0'; i++) {
+        (*buf_p) = digits[i];
+        buf_p++;
+    }
+
+    if(ext->dec_point_pos != 0) {
+        /*Insert the decimal point*/
+        (*buf_p) = '.';
+        buf_p++;
+
+        for(/*Leave i*/; i < ext->digit_count && digits[i] != '\0'; i++) {
+            (*buf_p) = digits[i];
+            buf_p++;
+        }
+    }
+
+    /*Refresh the text*/
+    lv_ta_set_text(spinbox, (char *)buf);
+
+    /*Set the cursor position*/
+    int32_t step    = ext->step;
+    uint8_t cur_pos = (uint8_t)ext->digit_count;
+    while(step >= 10) {
+        step /= 10;
+        cur_pos--;
+    }
+
+    if(cur_pos > intDigits) cur_pos++; /*Skip teh decimal point*/
+
+    cur_pos += (ext->digit_padding_left - cur_shift_left);
+
+    lv_ta_set_cursor_pos(spinbox, cur_pos);
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_spinbox.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_spinbox.h
new file mode 100755
index 0000000..ea60169
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_spinbox.h
@@ -0,0 +1,188 @@
+/**
+ * @file lv_spinbox.h
+ *
+ */
+
+#ifndef LV_SPINBOX_H
+#define LV_SPINBOX_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_SPINBOX != 0
+
+/*Testing of dependencies*/
+#if LV_USE_TA == 0
+#error "lv_spinbox: lv_ta is required. Enable it in lv_conf.h (LV_USE_TA  1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "../lv_objx/lv_ta.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_SPINBOX_MAX_DIGIT_COUNT 16
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/*Data of spinbox*/
+typedef struct
+{
+    lv_ta_ext_t ta; /*Ext. of ancestor*/
+    /*New data for this type */
+    int32_t value;
+    int32_t range_max;
+    int32_t range_min;
+    int32_t step;
+    uint16_t digit_count : 4;
+    uint16_t dec_point_pos : 4; /*if 0, there is no separator and the number 
is an integer*/
+    uint16_t digit_padding_left : 4;
+} lv_spinbox_ext_t;
+
+/*Styles*/
+enum {
+    LV_SPINBOX_STYLE_BG,
+    LV_SPINBOX_STYLE_SB,
+    LV_SPINBOX_STYLE_CURSOR,
+};
+typedef uint8_t lv_spinbox_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a spinbox objects
+ * @param par pointer to an object, it will be the parent of the new spinbox
+ * @param copy pointer to a spinbox object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created spinbox
+ */
+lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a style of a spinbox.
+ * @param templ pointer to template object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+static inline void lv_spinbox_set_style(lv_obj_t * spinbox, lv_spinbox_style_t 
type, lv_style_t * style)
+{
+    lv_ta_set_style(spinbox, type, style);
+}
+
+/**
+ * Set spinbox value
+ * @param spinbox pointer to spinbox
+ * @param i value to be set
+ */
+void lv_spinbox_set_value(lv_obj_t * spinbox, int32_t i);
+
+/**
+ * Set spinbox digit format (digit count and decimal format)
+ * @param spinbox pointer to spinbox
+ * @param digit_count number of digit excluding the decimal separator and the 
sign
+ * @param separator_position number of digit before the decimal point. If 0, 
decimal point is not
+ * shown
+ */
+void lv_spinbox_set_digit_format(lv_obj_t * spinbox, uint8_t digit_count, 
uint8_t separator_position);
+
+/**
+ * Set spinbox step
+ * @param spinbox pointer to spinbox
+ * @param step steps on increment/decrement
+ */
+void lv_spinbox_set_step(lv_obj_t * spinbox, uint32_t step);
+
+/**
+ * Set spinbox value range
+ * @param spinbox pointer to spinbox
+ * @param range_min maximum value, inclusive
+ * @param range_max minimum value, inclusive
+ */
+void lv_spinbox_set_range(lv_obj_t * spinbox, int32_t range_min, int32_t 
range_max);
+
+/**
+ * Set spinbox left padding in digits count (added between sign and first 
digit)
+ * @param spinbox pointer to spinbox
+ * @param cb Callback function called on value change event
+ */
+void lv_spinbox_set_padding_left(lv_obj_t * spinbox, uint8_t padding);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get style of a spinbox.
+ * @param templ pointer to template object
+ * @param type which style should be get
+ * @return style pointer to the style
+ */
+static inline const lv_style_t * lv_spinbox_get_style(lv_obj_t * spinbox, 
lv_spinbox_style_t type)
+{
+    return lv_ta_get_style(spinbox, type);
+}
+
+/**
+ * Get the spinbox numeral value (user has to convert to float according to 
its digit format)
+ * @param spinbox pointer to spinbox
+ * @return value integer value of the spinbox
+ */
+int32_t lv_spinbox_get_value(lv_obj_t * spinbox);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Select next lower digit for edition by dividing the step by 10
+ * @param spinbox pointer to spinbox
+ */
+void lv_spinbox_step_next(lv_obj_t * spinbox);
+
+/**
+ * Select next higher digit for edition by multiplying the step by 10
+ * @param spinbox pointer to spinbox
+ */
+void lv_spinbox_step_prev(lv_obj_t * spinbox);
+
+/**
+ * Increment spinbox value by one step
+ * @param spinbox pointer to spinbox
+ */
+void lv_spinbox_increment(lv_obj_t * spinbox);
+
+/**
+ * Decrement spinbox value by one step
+ * @param spinbox pointer to spinbox
+ */
+void lv_spinbox_decrement(lv_obj_t * spinbox);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_SPINBOX*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_SPINBOX_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_sw.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_sw.c
new file mode 100755
index 0000000..428a4af
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_sw.c
@@ -0,0 +1,403 @@
+/**
+ * @file lv_sw.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_sw.h"
+
+#if LV_USE_SW != 0
+
+/*Testing of dependencies*/
+#if LV_USE_SLIDER == 0
+#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"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_sw"
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+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;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a switch objects
+ * @param par pointer to an object, it will be the parent of the new switch
+ * @param copy pointer to a switch object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created switch
+ */
+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_ASSERT_MEM(new_sw);
+    if(new_sw == NULL) return NULL;
+
+    if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_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_ASSERT_MEM(ext);
+    if(ext == NULL) 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;
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_sw, lv_sw_signal);
+
+    /*Init the new switch switch*/
+    if(copy == NULL) {
+        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);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_sw_set_style(new_sw, LV_SW_STYLE_BG, th->style.sw.bg);
+            lv_sw_set_style(new_sw, LV_SW_STYLE_INDIC, th->style.sw.indic);
+            lv_sw_set_style(new_sw, LV_SW_STYLE_KNOB_OFF, 
th->style.sw.knob_off);
+            lv_sw_set_style(new_sw, LV_SW_STYLE_KNOB_ON, th->style.sw.knob_on);
+        } 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);
+    }
+
+    LV_LOG_INFO("switch created");
+
+    return new_sw;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Turn ON the switch
+ * @param sw pointer to a switch objec
+ * @param anim LV_ANOM_ON: set the value with an animation; LV_ANIM_OFF: 
change the value immediately
+ */
+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);
+}
+
+/**
+ * Turn OFF the switch
+ * @param sw pointer to a switch object
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: 
change the value immediately
+ */
+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);
+}
+
+/**
+ * Toggle the position of the switch
+ * @param sw pointer to a switch object
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: 
change the value immediately
+ * @return resulting state of the switch.
+ */
+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
+
+    bool state = lv_sw_get_state(sw);
+    if(state)
+        lv_sw_off(sw, anim);
+    else
+        lv_sw_on(sw, anim);
+
+    return !state;
+}
+
+/**
+ * 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)
+{
+    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_KNOB_OFF:
+            ext->style_knob_off = style;
+            if(lv_sw_get_state(sw) == 0) lv_slider_set_style(sw, 
LV_SLIDER_STYLE_KNOB, style);
+            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);
+            break;
+    }
+}
+
+void lv_sw_set_anim_time(lv_obj_t * sw, uint16_t anim_time)
+{
+    LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
+
+#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 a style of a switch
+ * @param sw pointer to a  switch object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+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_KNOB_OFF: style = ext->style_knob_off; break;
+        case LV_SW_STYLE_KNOB_ON: style = ext->style_knob_on; break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+uint16_t lv_sw_get_anim_time(const lv_obj_t * sw)
+{
+    LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
+
+#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
+ **********************/
+
+/**
+ * Signal function of the switch
+ * @param sw pointer to a switch 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_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+    if(sign == LV_SIGNAL_GET_TYPE) {
+        res = ancestor_signal(sw, sign, param);
+        if(res != LV_RES_OK) return res;
+        return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
+    }
+
+    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;
+
+    /* 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_CLEANUP) {
+        /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
+    } else if(sign == LV_SIGNAL_PRESSED) {
+
+        /*Save the x coordinate of the pressed point to see if the switch was 
slid*/
+        lv_indev_t * indev = lv_indev_get_act();
+        if(indev) {
+            lv_point_t p;
+            lv_indev_get_point(indev, &p);
+            ext->start_x = p.x;
+        }
+        ext->slided  = 0;
+        ext->changed = 0;
+    } 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();
+        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 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 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;
+        }
+    } 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;
+        }
+    } else if(sign == LV_SIGNAL_RELEASED) {
+        /*If not dragged then toggle the switch*/
+        if(ext->changed == 0) {
+            int32_t state;
+            if(lv_sw_get_state(sw)) {
+                lv_sw_off(sw, LV_ANIM_ON);
+                state = 0;
+            } else {
+                lv_sw_on(sw, LV_ANIM_ON);
+                state = 1;
+            }
+
+            res = lv_event_send(sw, LV_EVENT_VALUE_CHANGED, &state);
+            if(res != LV_RES_OK) return res;
+        }
+        /*If the switch was dragged then calculate the new state based on the 
current position*/
+        else {
+            int16_t v = lv_slider_get_value(sw);
+            int32_t state;
+            if(v > LV_SW_MAX_VALUE / 2) {
+                lv_sw_on(sw, LV_ANIM_ON);
+                state = 1;
+            } else {
+                lv_sw_off(sw, 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_CONTROL) {
+        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);
+            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);
+            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) {
+        bool * editable = (bool *)param;
+        *editable       = false; /*The ancestor slider is editable the switch 
is not*/
+    }
+
+    return res;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_sw.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_sw.h
new file mode 100755
index 0000000..f4b44ae
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_sw.h
@@ -0,0 +1,159 @@
+/**
+ * @file lv_sw.h
+ *
+ */
+
+#ifndef LV_SW_H
+#define LV_SW_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_SW != 0
+
+/*Testing of dependencies*/
+#if LV_USE_SLIDER == 0
+#error "lv_sw: lv_slider is required. Enable it in lv_conf.h (LV_USE_SLIDER  
1)"
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "lv_slider.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_SW_MAX_VALUE 100
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+/*Data of switch*/
+typedef struct
+{
+    lv_slider_ext_t slider; /*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)*/
+    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
+} lv_sw_ext_t;
+
+/**
+ * Switch styles.
+ */
+enum {
+    LV_SW_STYLE_BG, /**< Switch background. */
+    LV_SW_STYLE_INDIC, /**< Switch fill area. */
+    LV_SW_STYLE_KNOB_OFF, /**< Switch knob (when off). */
+    LV_SW_STYLE_KNOB_ON, /**< Switch knob (when on). */
+};
+typedef uint8_t lv_sw_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a switch objects
+ * @param par pointer to an object, it will be the parent of the new switch
+ * @param copy pointer to a switch object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created switch
+ */
+lv_obj_t * lv_sw_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Turn ON the switch
+ * @param sw pointer to a switch object
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: 
change the value immediately
+ */
+void lv_sw_on(lv_obj_t * sw, lv_anim_enable_t anim);
+
+/**
+ * Turn OFF the switch
+ * @param sw pointer to a switch object
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: 
change the value immediately
+ */
+void lv_sw_off(lv_obj_t * sw, lv_anim_enable_t anim);
+
+/**
+ * Toggle the position of the switch
+ * @param sw pointer to a switch object
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: 
change the value immediately
+ * @return resulting state of the switch.
+ */
+bool lv_sw_toggle(lv_obj_t * sw, lv_anim_enable_t anim);
+
+/**
+ * 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);
+
+/**
+ * Set the animation time of the switch
+ * @param sw pointer to a  switch object
+ * @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);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the state of a switch
+ * @param sw pointer to a switch object
+ * @return false: OFF; true: ON
+ */
+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;
+}
+
+/**
+ * Get a style of a switch
+ * @param sw pointer to a  switch object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+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
+ **********************/
+
+#endif /*LV_USE_SW*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_SW_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_ta.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_ta.c
new file mode 100755
index 0000000..b79f2ae
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_ta.c
@@ -0,0 +1,1945 @@
+/**
+ * @file lv_ta.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_ta.h"
+#if LV_USE_TA != 0
+#include <string.h>
+#include "../lv_core/lv_debug.h"
+#include "../lv_core/lv_group.h"
+#include "../lv_core/lv_refr.h"
+#include "../lv_draw/lv_draw.h"
+#include "../lv_themes/lv_theme.h"
+#include "../lv_misc/lv_anim.h"
+#include "../lv_misc/lv_txt.h"
+#include "../lv_misc/lv_math.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#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
+
+#ifndef LV_TA_DEF_PWD_SHOW_TIME
+#define LV_TA_DEF_PWD_SHOW_TIME 1500 /*ms*/
+#endif
+
+#define LV_TA_DEF_WIDTH (2 * LV_DPI)
+#define LV_TA_DEF_HEIGHT (1 * LV_DPI)
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  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_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
+static void cursor_blink_anim(lv_obj_t * ta, lv_anim_value_t show);
+static void pwd_char_hider_anim(lv_obj_t * ta, lv_anim_value_t x);
+static void pwd_char_hider_anim_ready(lv_anim_t * a);
+#endif
+static void pwd_char_hider(lv_obj_t * ta);
+static bool char_is_accepted(lv_obj_t * ta, uint32_t c);
+static void get_cursor_style(lv_obj_t * ta, lv_style_t * style_res);
+static void refr_cursor_area(lv_obj_t * ta);
+static void placeholder_update(lv_obj_t * ta);
+static void update_cursor_position_on_click(lv_obj_t * ta, lv_signal_t sign, 
lv_indev_t * click_source);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_design_cb_t ancestor_design;
+static lv_design_cb_t scrl_design;
+static lv_signal_cb_t ancestor_signal;
+static lv_signal_cb_t scrl_signal;
+static const char * ta_insert_replace;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a text area objects
+ * @param par pointer to an object, it will be the parent of the new text area
+ * @param copy pointer to a text area object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created text area
+ */
+lv_obj_t * lv_ta_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("text area create started");
+
+    /*Create the ancestor object*/
+    lv_obj_t * new_ta = lv_page_create(par, copy);
+    LV_ASSERT_MEM(new_ta);
+    if(new_ta == NULL) return NULL;
+
+    if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_ta);
+    if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_ta);
+    if(scrl_signal == NULL) scrl_signal = 
lv_obj_get_signal_cb(lv_page_get_scrl(new_ta));
+    if(scrl_design == NULL) scrl_design = 
lv_obj_get_design_cb(lv_page_get_scrl(new_ta));
+
+    /*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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    ext->cursor.state      = 1;
+    ext->pwd_mode          = 0;
+    ext->pwd_tmp           = NULL;
+    ext->pwd_show_time     = LV_TA_DEF_PWD_SHOW_TIME;
+    ext->accapted_chars    = NULL;
+    ext->max_length        = 0;
+    ext->cursor.style      = NULL;
+    ext->cursor.blink_time = LV_TA_DEF_CURSOR_BLINK_TIME;
+    ext->cursor.pos        = 0;
+    ext->cursor.click_pos  = 1;
+    ext->cursor.type       = LV_CURSOR_LINE;
+    ext->cursor.valid_x    = 0;
+    ext->one_line          = 0;
+#if LV_LABEL_TEXT_SEL
+    ext->text_sel_en = 0;
+#endif
+    ext->label       = NULL;
+    ext->placeholder = NULL;
+
+#if LV_USE_ANIMATION == 0
+    ext->pwd_show_time     = 0;
+    ext->cursor.blink_time = 0;
+#endif
+
+    lv_obj_set_signal_cb(new_ta, lv_ta_signal);
+    lv_obj_set_signal_cb(lv_page_get_scrl(new_ta), lv_ta_scrollable_signal);
+    lv_obj_set_design_cb(new_ta, lv_ta_design);
+
+    /*Init the new text area object*/
+    if(copy == NULL) {
+        lv_page_set_scrl_fit2(new_ta, LV_FIT_FLOOD, LV_FIT_TIGHT);
+
+        ext->label = lv_label_create(new_ta, NULL);
+
+        lv_obj_set_design_cb(ext->page.scrl, lv_ta_scrollable_design);
+
+        lv_label_set_long_mode(ext->label, LV_LABEL_LONG_BREAK);
+        lv_label_set_text(ext->label, "Text area");
+        lv_obj_set_click(ext->label, false);
+        lv_obj_set_size(new_ta, LV_TA_DEF_WIDTH, LV_TA_DEF_HEIGHT);
+        lv_ta_set_sb_mode(new_ta, LV_SB_MODE_DRAG);
+        lv_page_set_style(new_ta, LV_PAGE_STYLE_SCRL, &lv_style_transp_tight);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_ta_set_style(new_ta, LV_TA_STYLE_BG, th->style.ta.area);
+            lv_ta_set_style(new_ta, LV_TA_STYLE_SB, th->style.ta.sb);
+        } else {
+            lv_ta_set_style(new_ta, LV_TA_STYLE_BG, &lv_style_pretty);
+        }
+    }
+    /*Copy an existing object*/
+    else {
+        lv_obj_set_design_cb(ext->page.scrl, lv_ta_scrollable_design);
+        lv_ta_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->label             = lv_label_create(new_ta, copy_ext->label);
+        ext->pwd_mode          = copy_ext->pwd_mode;
+        ext->accapted_chars    = copy_ext->accapted_chars;
+        ext->max_length        = copy_ext->max_length;
+        ext->cursor.style      = copy_ext->cursor.style;
+        ext->cursor.pos        = copy_ext->cursor.pos;
+        ext->cursor.valid_x    = copy_ext->cursor.valid_x;
+        ext->cursor.type       = copy_ext->cursor.type;
+
+        if(ext->pwd_mode != 0) pwd_char_hider( new_ta);
+
+        if(copy_ext->placeholder != NULL)
+            ext->placeholder = lv_label_create(new_ta, copy_ext->placeholder);
+        else
+            ext->placeholder = NULL;
+
+        if(copy_ext->pwd_tmp) {
+            uint16_t len = lv_mem_get_size(copy_ext->pwd_tmp);
+            ext->pwd_tmp = lv_mem_alloc(len);
+            LV_ASSERT_MEM(ext->pwd_tmp);
+            if(ext->pwd_tmp == NULL) return NULL;
+
+            memcpy(ext->pwd_tmp, copy_ext->pwd_tmp, len);
+        }
+
+        if(copy_ext->one_line) lv_ta_set_one_line(new_ta, true);
+
+        lv_ta_set_style(new_ta, LV_TA_STYLE_CURSOR, lv_ta_get_style(copy, 
LV_TA_STYLE_CURSOR));
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_ta);
+    }
+
+#if LV_USE_ANIMATION
+    if(ext->cursor.blink_time) {
+        /*Create a cursor blinker animation*/
+        lv_anim_t a;
+        a.var            = new_ta;
+        a.exec_cb        = (lv_anim_exec_xcb_t)cursor_blink_anim;
+        a.time           = ext->cursor.blink_time;
+        a.act_time       = 0;
+        a.ready_cb       = NULL;
+        a.start          = 1;
+        a.end            = 0;
+        a.repeat         = 1;
+        a.repeat_pause   = 0;
+        a.playback       = 1;
+        a.playback_pause = 0;
+        a.path_cb        = lv_anim_path_step;
+        lv_anim_create(&a);
+    }
+#endif
+
+    LV_LOG_INFO("text area created");
+
+    return new_ta;
+}
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Insert a character to the current cursor position.
+ * To add a wide char, e.g. 'Á' use `lv_txt_encoded_conv_wc('Á')`
+ * @param ta pointer to a text area object
+ * @param c a character (e.g. 'a')
+ */
+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];
+    letter_buf[0] = c;
+    letter_buf[1] = '\0';
+
+    ta_insert_replace = NULL;
+    lv_event_send(ta, LV_EVENT_INSERT, letter_buf);
+    if(ta_insert_replace) {
+        if(ta_insert_replace[0] == '\0') return; /*Drop this text*/
+
+        /*Add the replaced text directly it's different from the original*/
+        if(strcmp(ta_insert_replace, (char *)letter_buf)) {
+            lv_ta_add_text(ta, ta_insert_replace);
+            return;
+        }
+    }
+
+    if(ext->one_line && (c == '\n' || c == '\r')) {
+        LV_LOG_INFO("Text area: line break ignored in one-line mode");
+        return;
+    }
+
+    uint32_t c_uni = lv_txt_encoded_next((const char *)&c, NULL);
+
+    if(char_is_accepted(ta, c_uni) == false) {
+        LV_LOG_INFO("Character is no accepted by the text area (too long text 
or not in the "
+                    "accepted list)");
+        return;
+    }
+
+    /*If a new line was added it shouldn't show edge flash effect*/
+    bool edge_flash_en = lv_ta_get_edge_flash(ta);
+    lv_ta_set_edge_flash(ta, false);
+
+    if(ext->pwd_mode != 0) pwd_char_hider(ta); /*Make sure all the current 
text contains only '*'*/
+
+    lv_label_ins_text(ext->label, ext->cursor.pos, (const char *)letter_buf); 
/*Insert the character*/
+    lv_ta_clear_selection(ta);                                                
/*Clear selection*/
+
+    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_ASSERT_MEM(ext->pwd_tmp);
+        if(ext->pwd_tmp == NULL) return;
+
+        lv_txt_ins(ext->pwd_tmp, ext->cursor.pos, (const char *)letter_buf);
+
+#if LV_USE_ANIMATION
+        /*Auto hide characters*/
+        lv_anim_t a;
+        a.var            = ta;
+        a.exec_cb        = (lv_anim_exec_xcb_t)pwd_char_hider_anim;
+        a.time           = ext->pwd_show_time;
+        a.act_time       = 0;
+        a.ready_cb       = pwd_char_hider_anim_ready;
+        a.start          = 0;
+        a.end            = 1;
+        a.repeat         = 0;
+        a.repeat_pause   = 0;
+        a.playback       = 0;
+        a.playback_pause = 0;
+        a.path_cb        = lv_anim_path_step;
+        lv_anim_create(&a);
+
+#else
+        pwd_char_hider(ta);
+#endif
+    }
+
+    /*Move the cursor after the new character*/
+    lv_ta_set_cursor_pos(ta, lv_ta_get_cursor_pos(ta) + 1);
+
+    /*Revert the original edge flash state*/
+    lv_ta_set_edge_flash(ta, edge_flash_en);
+
+    placeholder_update(ta);
+
+    lv_event_send(ta, LV_EVENT_VALUE_CHANGED, NULL);
+}
+
+/**
+ * Insert a text to the current cursor position
+ * @param ta pointer to a text area object
+ * @param txt a '\0' terminated string to insert
+ */
+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;
+    lv_event_send(ta, LV_EVENT_INSERT, txt);
+    if(ta_insert_replace) {
+        if(ta_insert_replace[0] == '\0') return; /*Drop this text*/
+
+        /*Add the replaced text directly it's different from the original*/
+        if(strcmp(ta_insert_replace, txt)) {
+            lv_ta_add_text(ta, ta_insert_replace);
+            return;
+        }
+    }
+
+    if(ext->pwd_mode != 0) pwd_char_hider(ta); /*Make sure all the current 
text contains only '*'*/
+
+    /*Add the character one-by-one if not all characters are accepted or there 
is character limit.*/
+    if(lv_ta_get_accepted_chars(ta) || lv_ta_get_max_length(ta)) {
+        uint32_t i = 0;
+        while(txt[i] != '\0') {
+            uint32_t c = lv_txt_encoded_next(txt, &i);
+            lv_ta_add_char(ta, lv_txt_unicode_to_encoded(c));
+        }
+        return;
+    }
+
+    /*If a new line was added it shouldn't show edge flash effect*/
+    bool edge_flash_en = lv_ta_get_edge_flash(ta);
+    lv_ta_set_edge_flash(ta, false);
+
+    /*Insert the text*/
+    lv_label_ins_text(ext->label, ext->cursor.pos, txt);
+    lv_ta_clear_selection(ta);
+
+    if(ext->pwd_mode != 0) {
+        ext->pwd_tmp = lv_mem_realloc(ext->pwd_tmp, strlen(ext->pwd_tmp) + 
strlen(txt) + 1);
+        LV_ASSERT_MEM(ext->pwd_tmp);
+        if(ext->pwd_tmp == NULL) return;
+
+        lv_txt_ins(ext->pwd_tmp, ext->cursor.pos, txt);
+
+#if LV_USE_ANIMATION
+        /*Auto hide characters*/
+        lv_anim_t a;
+        a.var            = ta;
+        a.exec_cb        = (lv_anim_exec_xcb_t)pwd_char_hider_anim;
+        a.time           = ext->pwd_show_time;
+        a.act_time       = 0;
+        a.ready_cb       = pwd_char_hider_anim_ready;
+        a.start          = 0;
+        a.end            = 1;
+        a.repeat         = 0;
+        a.repeat_pause   = 0;
+        a.playback       = 0;
+        a.playback_pause = 0;
+        a.path_cb        = lv_anim_path_step;
+        lv_anim_create(&a);
+#else
+        pwd_char_hider(ta);
+#endif
+    }
+
+    /*Move the cursor after the new text*/
+    lv_ta_set_cursor_pos(ta, lv_ta_get_cursor_pos(ta) + 
lv_txt_get_encoded_length(txt));
+
+    /*Revert the original edge flash state*/
+    lv_ta_set_edge_flash(ta, edge_flash_en);
+
+    placeholder_update(ta);
+
+    lv_event_send(ta, LV_EVENT_VALUE_CHANGED, NULL);
+}
+
+/**
+ * Delete a the left character from the current cursor position
+ * @param ta pointer to a text area object
+ */
+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;
+
+    if(cur_pos == 0) return;
+
+    ta_insert_replace = NULL;
+    char del_buf[2]   = {LV_KEY_DEL, '\0'};
+    lv_event_send(ta, LV_EVENT_INSERT, del_buf);
+    if(ta_insert_replace) {
+        if(ta_insert_replace[0] == '\0') return; /*Drop this text*/
+
+        /*Add the replaced text directly it's different from the original*/
+        if(strcmp(ta_insert_replace, del_buf)) {
+            lv_ta_add_text(ta, ta_insert_replace);
+            return;
+        }
+    }
+
+    char * label_txt = lv_label_get_text(ext->label);
+    /*Delete a character*/
+    lv_txt_cut(label_txt, ext->cursor.pos - 1, 1);
+    /*Refresh the label*/
+    lv_label_set_text(ext->label, label_txt);
+    lv_ta_clear_selection(ta);
+
+    /*Don't let 'width == 0' because cursor will not be visible*/
+    if(lv_obj_get_width(ext->label) == 0) {
+        const lv_style_t * style = lv_obj_get_style(ext->label);
+        lv_obj_set_width(ext->label, style->line.width);
+    }
+
+    if(ext->pwd_mode != 0) {
+        uint32_t byte_pos = lv_txt_encoded_get_byte_id(ext->pwd_tmp, 
ext->cursor.pos - 1);
+        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_ASSERT_MEM(ext->pwd_tmp);
+        if(ext->pwd_tmp == NULL) return;
+    }
+
+    /*Move the cursor to the place of the deleted character*/
+    lv_ta_set_cursor_pos(ta, ext->cursor.pos - 1);
+
+    placeholder_update(ta);
+
+    lv_event_send(ta, LV_EVENT_VALUE_CHANGED, NULL);
+}
+
+/**
+ * Delete the right character from the current cursor position
+ * @param ta pointer to a text area object
+ */
+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);
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the text of a text area
+ * @param ta pointer to a text area
+ * @param txt pointer to the text
+ */
+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*/
+    lv_ta_clear_selection(ta);
+
+    /*Add the character one-by-one if not all characters are accepted or there 
is character limit.*/
+    if(lv_ta_get_accepted_chars(ta) || lv_ta_get_max_length(ta)) {
+        lv_label_set_text(ext->label, "");
+        lv_ta_set_cursor_pos(ta, LV_TA_CURSOR_LAST);
+
+        uint32_t i = 0;
+        while(txt[i] != '\0') {
+            uint32_t c = lv_txt_encoded_next(txt, &i);
+            lv_ta_add_char(ta, lv_txt_unicode_to_encoded(c));
+        }
+    } else {
+        lv_label_set_text(ext->label, txt);
+        lv_ta_set_cursor_pos(ta, LV_TA_CURSOR_LAST);
+    }
+
+    /*Don't let 'width == 0' because the cursor will not be visible*/
+    if(lv_obj_get_width(ext->label) == 0) {
+        const lv_style_t * style = lv_obj_get_style(ext->label);
+        lv_obj_set_width(ext->label, lv_font_get_glyph_width(style->text.font, 
' ', '\0'));
+    }
+
+    if(ext->pwd_mode != 0) {
+        ext->pwd_tmp = lv_mem_realloc(ext->pwd_tmp, strlen(txt) + 1);
+        LV_ASSERT_MEM(ext->pwd_tmp);
+        if(ext->pwd_tmp == NULL) return;
+        strcpy(ext->pwd_tmp, txt);
+
+#if LV_USE_ANIMATION
+        /*Auto hide characters*/
+        lv_anim_t a;
+        a.var            = ta;
+        a.exec_cb        = (lv_anim_exec_xcb_t)pwd_char_hider_anim;
+        a.time           = ext->pwd_show_time;
+        a.act_time       = 0;
+        a.ready_cb       = pwd_char_hider_anim_ready;
+        a.start          = 0;
+        a.end            = 1;
+        a.repeat         = 0;
+        a.repeat_pause   = 0;
+        a.playback       = 0;
+        a.playback_pause = 0;
+        a.path_cb        = lv_anim_path_step;
+        lv_anim_create(&a);
+#else
+        pwd_char_hider(ta);
+#endif
+    }
+
+    placeholder_update(ta);
+
+    lv_event_send(ta, LV_EVENT_VALUE_CHANGED, NULL);
+}
+
+/**
+ * Set the placeholder text of a text area
+ * @param ta pointer to a text area
+ * @param txt pointer to the text
+ */
+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*/
+    if(ext->placeholder == NULL) {
+        ext->placeholder = lv_label_create(ta, NULL);
+
+        if(ext->one_line) {
+            lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_EXPAND);
+        } else {
+            lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_BREAK);
+        }
+    }
+
+    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);
+}
+
+/**
+ * Set the cursor position
+ * @param obj pointer to a text area object
+ * @param pos the new cursor position in character index
+ *             < 0 : index from the end of the text
+ *             LV_TA_CURSOR_LAST: go after the last character
+ */
+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;
+
+    uint16_t len = lv_txt_get_encoded_length(lv_label_get_text(ext->label));
+
+    if(pos < 0) pos = len + pos;
+
+    if(pos > len || pos == LV_TA_CURSOR_LAST) pos = len;
+
+    ext->cursor.pos = pos;
+
+    /*Position the label to make the cursor visible*/
+    lv_obj_t * label_par = lv_obj_get_parent(ext->label);
+    lv_point_t cur_pos;
+    const lv_style_t * style = lv_obj_get_style(ta);
+    const lv_font_t * font_p = style->text.font;
+    lv_area_t label_cords;
+    lv_area_t ta_cords;
+    lv_label_get_letter_pos(ext->label, pos, &cur_pos);
+    lv_obj_get_coords(ta, &ta_cords);
+    lv_obj_get_coords(ext->label, &label_cords);
+
+    /*Check the top*/
+    lv_coord_t font_h = lv_font_get_line_height(font_p);
+    if(lv_obj_get_y(label_par) + cur_pos.y < 0) {
+        lv_obj_set_y(label_par, -cur_pos.y + style->body.padding.top);
+    }
+
+    /*Check the bottom*/
+    if(label_cords.y1 + cur_pos.y + font_h + style->body.padding.bottom > 
ta_cords.y2) {
+        lv_obj_set_y(label_par, -(cur_pos.y - lv_obj_get_height(ta) + font_h + 
style->body.padding.top +
+                                  style->body.padding.bottom));
+    }
+    /*Check the left (use the font_h as general unit)*/
+    if(lv_obj_get_x(label_par) + cur_pos.x < font_h) {
+        lv_obj_set_x(label_par, -cur_pos.x + font_h);
+    }
+
+    /*Check the right (use the font_h as general unit)*/
+    if(label_cords.x1 + cur_pos.x + font_h + style->body.padding.right > 
ta_cords.x2) {
+        lv_obj_set_x(label_par, -(cur_pos.x - lv_obj_get_width(ta) + font_h + 
style->body.padding.left +
+                                  style->body.padding.right));
+    }
+
+    ext->cursor.valid_x = cur_pos.x;
+
+#if LV_USE_ANIMATION
+    if(ext->cursor.blink_time) {
+        /*Reset cursor blink animation*/
+        lv_anim_t a;
+        a.var            = ta;
+        a.exec_cb        = (lv_anim_exec_xcb_t)cursor_blink_anim;
+        a.time           = ext->cursor.blink_time;
+        a.act_time       = 0;
+        a.ready_cb       = NULL;
+        a.start          = 1;
+        a.end            = 0;
+        a.repeat         = 1;
+        a.repeat_pause   = 0;
+        a.playback       = 1;
+        a.playback_pause = 0;
+        a.path_cb        = lv_anim_path_step;
+        lv_anim_create(&a);
+    }
+#endif
+
+    refr_cursor_area(ta);
+}
+
+/**
+ * Set the cursor type.
+ * @param ta pointer to a text area object
+ * @param cur_type: element of 'lv_ta_cursor_type_t'
+ */
+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;
+
+    ext->cursor.type = cur_type;
+
+    refr_cursor_area(ta);
+}
+
+/**
+ * Enable/Disable the positioning of the the cursor by clicking the text on 
the text area.
+ * @param ta pointer to a text area object
+ * @param en true: enable click positions; false: disable
+ */
+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;
+}
+
+/**
+ * Enable/Disable password mode
+ * @param ta pointer to a text area object
+ * @param en true: enable, false: disable
+ */
+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);
+        size_t len = strlen(txt);
+        ext->pwd_tmp = lv_mem_alloc(len + 1);
+        LV_ASSERT_MEM(ext->pwd_tmp);
+        if(ext->pwd_tmp == NULL) return;
+
+        strcpy(ext->pwd_tmp, txt);
+
+        uint16_t i;
+        uint16_t encoded_len = lv_txt_get_encoded_length(txt); 
+        for(i = 0; i < encoded_len; i++) {
+            txt[i] = '*'; /*All char to '*'*/
+        }
+        txt[i] = '\0';
+
+        lv_ta_clear_selection(ta);
+
+        lv_label_set_text(ext->label, NULL);
+    }
+    /*Pwd mode is now disabled*/
+    else if(ext->pwd_mode == 1 && en == false) {
+        lv_ta_clear_selection(ta);
+        lv_label_set_text(ext->label, ext->pwd_tmp);
+        lv_mem_free(ext->pwd_tmp);
+        ext->pwd_tmp = NULL;
+    }
+
+    ext->pwd_mode = en == false ? 0 : 1;
+
+    refr_cursor_area(ta);
+}
+
+/**
+ * Configure the text area to one line or back to normal
+ * @param ta pointer to a Text area object
+ * @param en true: one line, false: normal
+ */
+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;
+
+    if(en) {
+        const lv_style_t * style_ta    = lv_obj_get_style(ta);
+        const lv_style_t * style_scrl  = 
lv_obj_get_style(lv_page_get_scrl(ta));
+        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);
+
+        ext->one_line = 1;
+        lv_page_set_scrl_fit2(ta, LV_FIT_TIGHT, LV_FIT_FLOOD);
+        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);
+        lv_label_set_long_mode(ext->label, LV_LABEL_LONG_EXPAND);
+        if(ext->placeholder) lv_label_set_long_mode(ext->placeholder, 
LV_LABEL_LONG_EXPAND);
+        lv_obj_set_pos(lv_page_get_scrl(ta), style_ta->body.padding.left, 
style_ta->body.padding.top);
+    } else {
+        const lv_style_t * style_ta = lv_obj_get_style(ta);
+
+        ext->one_line = 0;
+        lv_page_set_scrl_fit2(ta, LV_FIT_FLOOD, LV_FIT_TIGHT);
+        lv_label_set_long_mode(ext->label, LV_LABEL_LONG_BREAK);
+        if(ext->placeholder) lv_label_set_long_mode(ext->placeholder, 
LV_LABEL_LONG_BREAK);
+
+        lv_obj_set_height(ta, LV_TA_DEF_HEIGHT);
+        lv_obj_set_pos(lv_page_get_scrl(ta), style_ta->body.padding.left, 
style_ta->body.padding.top);
+    }
+
+    placeholder_update(ta);
+    refr_cursor_area(ta);
+}
+
+/**
+ * Set the alignment of the text area.
+ * In one line mode the text can be scrolled only with `LV_LABEL_ALIGN_LEFT`.
+ * This function should be called if the size of text area changes.
+ * @param ta pointer to a text are object
+ * @param align the desired alignment from `lv_label_align_t`. 
(LV_LABEL_ALIGN_LEFT/CENTER/RIGHT)
+ */
+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*/
+        else {
+            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));
+        }
+    }
+
+    refr_cursor_area(ta);
+}
+
+/**
+ * Set a list of characters. Only these characters will be accepted by the 
text area
+ * @param ta pointer to  Text Area
+ * @param list list of characters. Only the pointer is saved. E.g. 
"+-.,0123456789"
+ */
+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;
+}
+
+/**
+ * Set max length of a Text Area.
+ * @param ta pointer to  Text Area
+ * @param num the maximal number of characters can be added (`lv_ta_set_text` 
ignores it)
+ */
+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;
+}
+
+/**
+ * In `LV_EVENT_INSERT` the text which planned to be inserted can be replaced 
by an other text.
+ * It can be used to add automatic formatting to the text area.
+ * @param ta pointer to a text area.
+ * @param txt pointer to a new string to insert. If `""` no text will be added.
+ *            The variable must be live after the `event_cb` exists. (Should 
be `global` or
+ * `static`)
+ */
+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;
+}
+
+/**
+ * Set a style of a text area
+ * @param ta pointer to a text area object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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) {
+        case LV_TA_STYLE_BG: lv_page_set_style(ta, LV_PAGE_STYLE_BG, style); 
break;
+        case LV_TA_STYLE_SB: lv_page_set_style(ta, LV_PAGE_STYLE_SB, style); 
break;
+        case LV_TA_STYLE_EDGE_FLASH: lv_page_set_style(ta, 
LV_PAGE_STYLE_EDGE_FLASH, style); break;
+        case LV_TA_STYLE_CURSOR:
+            ext->cursor.style = style;
+            lv_obj_refresh_ext_draw_pad(lv_page_get_scrl(ta)); /*Refresh ext. 
size because of cursor drawing*/
+            refr_cursor_area(ta);
+            break;
+        case LV_TA_STYLE_PLACEHOLDER:
+            if(ext->placeholder) lv_label_set_style(ext->placeholder, 
LV_LABEL_STYLE_MAIN, style);
+            break;
+    }
+}
+
+/**
+ * Enable/disable selection mode.
+ * @param ta pointer to a text area object
+ * @param en true or false to enable/disable selection mode
+ */
+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);
+
+    ext->text_sel_en = en;
+
+    if(!en) lv_ta_clear_selection(ta);
+#else
+    (void)ta; /*Unused*/
+    (void)en; /*Unused*/
+#endif
+}
+
+/**
+ * Set how long show the password before changing it to '*'
+ * @param ta pointer to Text area
+ * @param time show time in milliseconds. 0: hide immediately.
+ */
+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
+
+    lv_ta_ext_t * ext  = lv_obj_get_ext_attr(ta);
+    ext->pwd_show_time = time;
+}
+
+/**
+ * Set cursor blink animation time
+ * @param ta pointer to Text area
+ * @param time blink period. 0: disable blinking
+ */
+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
+
+    lv_ta_ext_t * ext      = lv_obj_get_ext_attr(ta);
+    ext->cursor.blink_time = time;
+
+#if LV_USE_ANIMATION
+    if(ext->cursor.blink_time) {
+        /*Reset cursor blink animation*/
+        lv_anim_t a;
+        a.var            = ta;
+        a.exec_cb        = (lv_anim_exec_xcb_t)cursor_blink_anim;
+        a.time           = ext->cursor.blink_time;
+        a.act_time       = 0;
+        a.ready_cb       = NULL;
+        a.start          = 1;
+        a.end            = 0;
+        a.repeat         = 1;
+        a.repeat_pause   = 0;
+        a.playback       = 1;
+        a.playback_pause = 0;
+        a.path_cb        = lv_anim_path_step;
+        lv_anim_create(&a);
+    } else {
+        ext->cursor.state = 1;
+    }
+#else
+    ext->cursor.state = 1;
+#endif
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the text of a text area. In password mode it gives the real text (not 
'*'s).
+ * @param ta pointer to a text area object
+ * @return pointer to the text
+ */
+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;
+    if(ext->pwd_mode == 0) {
+        txt = lv_label_get_text(ext->label);
+    } else {
+        txt = ext->pwd_tmp;
+    }
+
+    return txt;
+}
+
+/**
+ * Get the placeholder text of a text area
+ * @param ta pointer to a text area object
+ * @return pointer to the text
+ */
+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;
+
+    if(ext->placeholder) txt = lv_label_get_text(ext->placeholder);
+
+    return txt;
+}
+
+/**
+ * Get the label of a text area
+ * @param ta pointer to a text area object
+ * @return pointer to the label object
+ */
+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;
+}
+
+/**
+ * Get the current cursor position in character index
+ * @param ta pointer to a text area object
+ * @return the cursor position
+ */
+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;
+}
+
+/**
+ * Get the current cursor type.
+ * @param ta pointer to a text area object
+ * @return element of 'lv_ta_cursor_type_t'
+ */
+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;
+}
+
+/**
+ * Get whether the cursor click positioning is enabled or not.
+ * @param ta pointer to a text area object
+ * @return true: enable click positions; false: disable
+ */
+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;
+}
+
+/**
+ * Get the password mode attribute
+ * @param ta pointer to a text area object
+ * @return true: password mode is enabled, false: disabled
+ */
+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;
+}
+
+/**
+ * Get the one line configuration attribute
+ * @param ta pointer to a text area object
+ * @return true: one line configuration is enabled, false: disabled
+ */
+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;
+}
+
+/**
+ * Get a list of accepted characters.
+ * @param ta pointer to  Text Area
+ * @return list of accented characters.
+ */
+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;
+}
+
+/**
+ * Set max length of a Text Area.
+ * @param ta pointer to  Text Area
+ * @return the maximal number of characters to be add
+ */
+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;
+}
+
+/**
+ * Get a style of a text area
+ * @param ta pointer to a text area object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+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);
+
+    switch(type) {
+        case LV_TA_STYLE_BG: style = lv_page_get_style(ta, LV_PAGE_STYLE_BG); 
break;
+        case LV_TA_STYLE_SB: style = lv_page_get_style(ta, LV_PAGE_STYLE_SB); 
break;
+        case LV_TA_STYLE_EDGE_FLASH: style = lv_page_get_style(ta, 
LV_PAGE_STYLE_EDGE_FLASH); break;
+        case LV_TA_STYLE_CURSOR: style = ext->cursor.style; break;
+        case LV_TA_STYLE_PLACEHOLDER:
+            if(ext->placeholder) style = lv_label_get_style(ext->placeholder, 
LV_LABEL_STYLE_MAIN);
+            break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/**
+ * Find whether text is selected or not.
+ * @param ta Text area object
+ * @return whether text is selected or not
+ */
+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_DRAW_LABEL_NO_TXT_SEL ||
+        lv_label_get_text_sel_end(ext->label) == LV_DRAW_LABEL_NO_TXT_SEL)) {
+        return true;
+    } else {
+        return false;
+    }
+#else
+    (void)ta; /*Unused*/
+    return false;
+#endif
+}
+
+/**
+ * Find whether selection mode is enabled.
+ * @param ta pointer to a text area object
+ * @return true: selection mode is enabled, false: disabled
+ */
+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;
+#else
+    (void)ta; /*Unused*/
+    return false;
+#endif
+}
+
+/**
+ * Set how long show the password before changing it to '*'
+ * @param ta pointer to Text area
+ * @return show time in milliseconds. 0: hide immediately.
+ */
+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;
+}
+
+/**
+ * Set cursor blink animation time
+ * @param ta pointer to Text area
+ * @return time blink period. 0: disable blinking
+ */
+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;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Clear the selection on the text area.
+ * @param ta Text area object
+ */
+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_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*/
+#endif
+}
+
+/**
+ * Move the cursor one character right
+ * @param ta pointer to a text area object
+ */
+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);
+}
+
+/**
+ * Move the cursor one character left
+ * @param ta pointer to a text area object
+ */
+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--;
+        lv_ta_set_cursor_pos(ta, cp);
+    }
+}
+
+/**
+ * Move the cursor one line down
+ * @param ta pointer to a text area object
+ */
+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;
+
+    /*Get the position of the current letter*/
+    lv_label_get_letter_pos(ext->label, lv_ta_get_cursor_pos(ta), &pos);
+
+    /*Increment the y with one line and keep the valid x*/
+    const lv_style_t * label_style = lv_obj_get_style(ext->label);
+    const lv_font_t * font_p       = label_style->text.font;
+    lv_coord_t font_h              = lv_font_get_line_height(font_p);
+    pos.y += font_h + label_style->text.line_space + 1;
+    pos.x = ext->cursor.valid_x;
+
+    /*Do not go below the last line*/
+    if(pos.y < lv_obj_get_height(ext->label)) {
+        /*Get the letter index on the new cursor position and set it*/
+        uint16_t new_cur_pos = lv_label_get_letter_on(ext->label, &pos);
+
+        lv_coord_t cur_valid_x_tmp = ext->cursor.valid_x; /*Cursor position 
set overwrites the valid positon */
+        lv_ta_set_cursor_pos(ta, new_cur_pos);
+        ext->cursor.valid_x = cur_valid_x_tmp;
+    }
+}
+
+/**
+ * Move the cursor one line up
+ * @param ta pointer to a text area object
+ */
+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;
+
+    /*Get the position of the current letter*/
+    lv_label_get_letter_pos(ext->label, lv_ta_get_cursor_pos(ta), &pos);
+
+    /*Decrement the y with one line and keep the valid x*/
+    const lv_style_t * label_style = lv_obj_get_style(ext->label);
+    const lv_font_t * font         = label_style->text.font;
+    lv_coord_t font_h              = lv_font_get_line_height(font);
+    pos.y -= font_h + label_style->text.line_space - 1;
+    pos.x = ext->cursor.valid_x;
+
+    /*Get the letter index on the new cursor position and set it*/
+    uint16_t new_cur_pos       = lv_label_get_letter_on(ext->label, &pos);
+    lv_coord_t cur_valid_x_tmp = ext->cursor.valid_x; /*Cursor position set 
overwrites the valid positon */
+    lv_ta_set_cursor_pos(ta, new_cur_pos);
+    ext->cursor.valid_x = cur_valid_x_tmp;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_ta_design(lv_obj_t * ta, const lv_area_t * mask, 
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);
+    } else if(mode == LV_DESIGN_DRAW_MAIN) {
+        /*Draw the object*/
+        ancestor_design(ta, mask, mode);
+
+    } else if(mode == LV_DESIGN_DRAW_POST) {
+        ancestor_design(ta, mask, mode);
+    }
+    return true;
+}
+
+/**
+ * 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 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)
+{
+    if(mode == LV_DESIGN_COVER_CHK) {
+        /*Return false if the object is not covers the mask_p area*/
+        return scrl_design(scrl, mask, mode);
+    } else if(mode == LV_DESIGN_DRAW_MAIN) {
+        /*Draw the object*/
+        scrl_design(scrl, mask, mode);
+    } else if(mode == LV_DESIGN_DRAW_POST) {
+        scrl_design(scrl, mask, mode);
+
+        /*Draw the cursor*/
+        lv_obj_t * ta     = lv_obj_get_parent(scrl);
+        lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
+
+        if(ext->cursor.type == LV_CURSOR_NONE || (ext->cursor.type & 
LV_CURSOR_HIDDEN) || ext->cursor.state == 0) {
+            return true; /*The cursor is not visible now*/
+        }
+
+        lv_style_t cur_style;
+        get_cursor_style(ta, &cur_style);
+
+        const char * txt = lv_label_get_text(ext->label);
+
+        /*Draw he cursor according to the type*/
+        lv_area_t cur_area;
+        lv_area_copy(&cur_area, &ext->cursor.area);
+
+        cur_area.x1 += ext->label->coords.x1;
+        cur_area.y1 += ext->label->coords.y1;
+        cur_area.x2 += ext->label->coords.x1;
+        cur_area.y2 += ext->label->coords.y1;
+
+        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);
+        } else if(ext->cursor.type == LV_CURSOR_BLOCK) {
+            lv_draw_rect(&cur_area, mask, &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, 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);
+        } else if(ext->cursor.type == LV_CURSOR_UNDERLINE) {
+            lv_draw_rect(&cur_area, mask, &cur_style, opa_scale);
+        }
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the text area
+ * @param ta pointer to a text area 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_ta_signal(lv_obj_t * ta, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* 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) {
+        if(ext->pwd_tmp != NULL) lv_mem_free(ext->pwd_tmp);
+
+        /* (The created label will be deleted automatically) */
+    } else if(sign == LV_SIGNAL_STYLE_CHG) {
+        if(ext->label) {
+            lv_obj_t * scrl               = lv_page_get_scrl(ta);
+            const lv_style_t * style_ta   = lv_obj_get_style(ta);
+            const lv_style_t * style_scrl = lv_obj_get_style(scrl);
+            if(ext->one_line) {
+                /*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 {
+                /*In not one line mode refresh the Label width because 'hpad' 
can modify it*/
+                lv_obj_set_width(ext->label, lv_page_get_fit_width(ta));
+                lv_obj_set_pos(ext->label, style_scrl->body.padding.left,
+                               style_scrl->body.padding.right); /*Be sure the 
Label is in the correct position*/
+
+                if(ext->placeholder) {
+                    lv_obj_set_width(ext->placeholder, 
lv_page_get_fit_width(ta));
+                    lv_obj_set_pos(ext->placeholder, 
style_scrl->body.padding.left,
+                                   style_scrl->body.padding.top); /*Be sure 
the placeholder is in the correct position*/
+                }
+            }
+            lv_label_set_text(ext->label, NULL);
+        }
+    } else if(sign == LV_SIGNAL_CORD_CHG) {
+        /*Set the label width according to the text area width*/
+        if(ext->label) {
+            if(lv_obj_get_width(ta) != lv_area_get_width(param) || 
lv_obj_get_height(ta) != lv_area_get_height(param)) {
+                lv_obj_t * scrl               = lv_page_get_scrl(ta);
+                const lv_style_t * style_scrl = lv_obj_get_style(scrl);
+                lv_obj_set_width(ext->label, lv_page_get_fit_width(ta));
+                lv_obj_set_pos(ext->label, style_scrl->body.padding.left, 
style_scrl->body.padding.top);
+                lv_label_set_text(ext->label, NULL); /*Refresh the label*/
+
+                refr_cursor_area(ta);
+            }
+        }
+        /*Set the placeholder width according to the text area width*/
+        if(ext->placeholder) {
+            if(lv_obj_get_width(ta) != lv_area_get_width(param) || 
lv_obj_get_height(ta) != lv_area_get_height(param)) {
+                lv_obj_t * scrl               = lv_page_get_scrl(ta);
+                const lv_style_t * style_scrl = lv_obj_get_style(scrl);
+                lv_obj_set_width(ext->placeholder, lv_page_get_fit_width(ta));
+                lv_obj_set_pos(ext->placeholder, 
style_scrl->body.padding.left, style_scrl->body.padding.top);
+                lv_label_set_text(ext->placeholder, NULL); /*Refresh the 
label*/
+
+                refr_cursor_area(ta);
+            }
+        }
+    } else if(sign == LV_SIGNAL_CONTROL) {
+        uint32_t c = *((uint32_t *)param); /*uint32_t because can be UTF-8*/
+        if(c == LV_KEY_RIGHT)
+            lv_ta_cursor_right(ta);
+        else if(c == LV_KEY_LEFT)
+            lv_ta_cursor_left(ta);
+        else if(c == LV_KEY_UP)
+            lv_ta_cursor_up(ta);
+        else if(c == LV_KEY_DOWN)
+            lv_ta_cursor_down(ta);
+        else if(c == LV_KEY_BACKSPACE)
+            lv_ta_del_char(ta);
+        else if(c == LV_KEY_DEL)
+            lv_ta_del_char_forward(ta);
+        else if(c == LV_KEY_HOME)
+            lv_ta_set_cursor_pos(ta, 0);
+        else if(c == LV_KEY_END)
+            lv_ta_set_cursor_pos(ta, LV_TA_CURSOR_LAST);
+        else {
+            lv_ta_add_char(ta, c);
+        }
+    } else if(sign == LV_SIGNAL_GET_EDITABLE) {
+        bool * editable = (bool *)param;
+        *editable       = true;
+    } else if(sign == LV_SIGNAL_DEFOCUS) {
+        lv_cursor_type_t cur_type;
+        cur_type = lv_ta_get_cursor_type(ta);
+        lv_ta_set_cursor_type(ta, cur_type | LV_CURSOR_HIDDEN);
+    } else if(sign == LV_SIGNAL_FOCUS) {
+#if LV_USE_GROUP
+        lv_cursor_type_t cur_type;
+        cur_type                   = lv_ta_get_cursor_type(ta);
+        lv_group_t * g             = lv_obj_get_group(ta);
+        bool editing               = lv_group_get_editing(g);
+        lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
+
+        /*Encoders need special handling*/
+        if(indev_type == LV_INDEV_TYPE_ENCODER) {
+            if(editing)
+                lv_ta_set_cursor_type(ta, cur_type & (~LV_CURSOR_HIDDEN));
+            else
+                lv_ta_set_cursor_type(ta, cur_type | LV_CURSOR_HIDDEN);
+        } else {
+            lv_ta_set_cursor_type(ta, cur_type & (~LV_CURSOR_HIDDEN));
+        }
+#endif
+    } else if(sign == LV_SIGNAL_PRESSED || sign == LV_SIGNAL_PRESSING || sign 
== LV_SIGNAL_PRESS_LOST ||
+              sign == LV_SIGNAL_RELEASED) {
+        update_cursor_position_on_click(ta, sign, (lv_indev_t *)param);
+    }
+    return res;
+}
+
+/**
+ * Signal function of the scrollable part of the text area
+ * @param scrl pointer to scrollable part of a text area 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_ta_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, 
void * param)
+{
+    lv_res_t res;
+
+    /* 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);
+
+    if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
+        /*Set ext. size because the cursor might be out of this object*/
+        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);
+        scrl->ext_draw_pad             = LV_MATH_MAX(scrl->ext_draw_pad, 
style_label->text.line_space + font_h);
+    } else if(sign == LV_SIGNAL_CORD_CHG) {
+        /*Set the label width according to the text area width*/
+        if(ext->label) {
+            if(lv_obj_get_width(scrl) != lv_area_get_width(param) ||
+               lv_obj_get_height(scrl) != lv_area_get_height(param)) {
+
+                const lv_style_t * style_scrl = lv_obj_get_style(scrl);
+                lv_obj_set_width(ext->label, lv_page_get_fit_width(ta));
+                lv_obj_set_pos(ext->label, style_scrl->body.padding.left, 
style_scrl->body.padding.top);
+                lv_label_set_text(ext->label, NULL); /*Refresh the label*/
+
+                refr_cursor_area(ta);
+            }
+        }
+    } else if(sign == LV_SIGNAL_PRESSING || sign == LV_SIGNAL_PRESSED || sign 
== LV_SIGNAL_PRESS_LOST ||
+              sign == LV_SIGNAL_RELEASED) {
+        update_cursor_position_on_click(ta, sign, (lv_indev_t *)param);
+    }
+
+    return res;
+}
+
+#if LV_USE_ANIMATION
+
+/**
+ * Called to blink the cursor
+ * @param ta pointer to a text area
+ * @param hide 1: hide the cursor, 0: show it
+ */
+static void cursor_blink_anim(lv_obj_t * ta, lv_anim_value_t show)
+{
+    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
+    if(show != ext->cursor.state) {
+        ext->cursor.state = show == 0 ? 0 : 1;
+        if(ext->cursor.type != LV_CURSOR_NONE && (ext->cursor.type & 
LV_CURSOR_HIDDEN) == 0) {
+            lv_disp_t * disp = lv_obj_get_disp(ta);
+            lv_area_t area_tmp;
+            lv_area_copy(&area_tmp, &ext->cursor.area);
+            area_tmp.x1 += ext->label->coords.x1;
+            area_tmp.y1 += ext->label->coords.y1;
+            area_tmp.x2 += ext->label->coords.x1;
+            area_tmp.y2 += ext->label->coords.y1;
+            lv_inv_area(disp, &area_tmp);
+        }
+    }
+}
+
+/**
+ * Dummy function to animate char hiding in pwd mode.
+ * Does nothing, but a function is required in car hiding anim.
+ * (pwd_char_hider callback do the real job)
+ * @param ta unused
+ * @param x unused
+ */
+static void pwd_char_hider_anim(lv_obj_t * ta, lv_anim_value_t x)
+{
+    (void)ta;
+    (void)x;
+}
+
+/**
+ * Call when an animation is ready to convert all characters to '*'
+ * @param a pointer to the animation
+ */
+static void pwd_char_hider_anim_ready(lv_anim_t * a)
+{
+    lv_obj_t * ta = a->var;
+    pwd_char_hider(ta);
+}
+#endif
+
+/**
+ * Hide all characters (convert them to '*')
+ * @param ta: pointer to text area object
+ */
+static void pwd_char_hider(lv_obj_t * ta)
+{
+    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
+    if(ext->pwd_mode != 0) {
+        char * txt  = lv_label_get_text(ext->label);
+        int16_t len = lv_txt_get_encoded_length(txt);
+        bool refr   = false;
+        uint16_t i;
+        for(i = 0; i < len; i++) {
+            txt[i] = '*';
+            refr   = true;
+        }
+
+        txt[i] = '\0';
+
+        if(refr != false) lv_label_set_text(ext->label, txt);
+    }
+}
+
+/**
+ * Test an unicode character if it is accepted or not. Checks max length and 
accepted char list.
+ * @param ta pointer to a test area object
+ * @param c an unicode character
+ * @return true: accapted; false: rejected
+ */
+static bool char_is_accepted(lv_obj_t * ta, uint32_t c)
+{
+    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
+
+    /*If no restriction accept it*/
+    if(ext->accapted_chars == NULL && ext->max_length == 0) return true;
+
+    /*Too many characters?*/
+    if(ext->max_length > 0 && lv_txt_get_encoded_length(lv_ta_get_text(ta)) >= 
ext->max_length) {
+        return false;
+    }
+
+    /*Accepted character?*/
+    if(ext->accapted_chars) {
+        uint32_t i = 0;
+        uint32_t a;
+        while(ext->accapted_chars[i] != '\0') {
+            a = lv_txt_encoded_next(ext->accapted_chars, &i);
+            if(a == c) return true; /*Accepted*/
+        }
+
+        return false; /*The character wasn't in the list*/
+    } else {
+        return true; /*If the accepted char list in not specified the accept 
the character*/
+    }
+}
+
+static void get_cursor_style(lv_obj_t * ta, lv_style_t * style_res)
+{
+    lv_ta_ext_t * ext              = lv_obj_get_ext_attr(ta);
+    const lv_style_t * label_style = lv_obj_get_style(ext->label);
+
+    if(ext->cursor.style) {
+        lv_style_copy(style_res, ext->cursor.style);
+    } else {
+        /*If cursor style is not specified then use the modified label style */
+        lv_style_copy(style_res, label_style);
+        lv_color_t clv_color_tmp = style_res->text.color; /*Make letter color 
to cursor color*/
+        style_res->text.color =
+            style_res->body.main_color; /*In block mode the letter color will 
be current background color*/
+        style_res->body.main_color     = clv_color_tmp;
+        style_res->body.grad_color     = clv_color_tmp;
+        style_res->body.border.color   = clv_color_tmp;
+        style_res->body.border.opa     = LV_OPA_COVER;
+        style_res->body.border.width   = 1;
+        style_res->body.shadow.width   = 0;
+        style_res->body.radius         = 0;
+        style_res->body.opa            = LV_OPA_COVER;
+        style_res->body.padding.left   = 0;
+        style_res->body.padding.right  = 0;
+        style_res->body.padding.top    = 0;
+        style_res->body.padding.bottom = 0;
+        style_res->line.width          = 1;
+    }
+}
+
+static void refr_cursor_area(lv_obj_t * ta)
+{
+    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
+
+    const lv_style_t * label_style = lv_obj_get_style(ext->label);
+
+    lv_style_t cur_style;
+    get_cursor_style(ta, &cur_style);
+
+    uint16_t cur_pos = lv_ta_get_cursor_pos(ta);
+    const char * txt = lv_label_get_text(ext->label);
+
+    uint32_t byte_pos;
+    byte_pos = lv_txt_encoded_get_byte_id(txt, cur_pos);
+
+    uint32_t letter = lv_txt_encoded_next(&txt[byte_pos], NULL);
+
+    lv_coord_t letter_h = lv_font_get_line_height(label_style->text.font);
+
+    /*Set letter_w (set not 0 on non printable but valid chars)*/
+    lv_coord_t letter_w;
+    if(letter == '\0' || letter == '\n' || letter == '\r') {
+        letter_w = lv_font_get_glyph_width(label_style->text.font, ' ', '\0');
+    } else {
+        /*`letter_next` parameter is '\0' to ignore kerning*/
+        letter_w = lv_font_get_glyph_width(label_style->text.font, letter, 
'\0');
+    }
+
+    lv_point_t letter_pos;
+    lv_label_get_letter_pos(ext->label, cur_pos, &letter_pos);
+
+    /*If the cursor is out of the text (most right) draw it to the next line*/
+    if(letter_pos.x + ext->label->coords.x1 + letter_w > ext->label->coords.x2 
&& ext->one_line == 0 &&
+       lv_label_get_align(ext->label) != LV_LABEL_ALIGN_RIGHT) {
+        letter_pos.x = 0;
+        letter_pos.y += letter_h + label_style->text.line_space;
+
+        if(letter != '\0') {
+            byte_pos += lv_txt_encoded_size(&txt[byte_pos]);
+            letter = lv_txt_encoded_next(&txt[byte_pos], NULL);
+        }
+
+        if(letter == '\0' || letter == '\n' || letter == '\r') {
+            letter_w = lv_font_get_glyph_width(label_style->text.font, ' ', 
'\0');
+        } else {
+            letter_w = lv_font_get_glyph_width(label_style->text.font, letter, 
'\0');
+        }
+    }
+
+    /*Save the byte position. It is required to draw `LV_CURSOR_BLOCK`*/
+    ext->cursor.txt_byte_pos = byte_pos;
+
+    /*Draw he cursor according to the type*/
+    lv_area_t cur_area;
+
+    if(ext->cursor.type == LV_CURSOR_LINE) {
+        cur_area.x1 =
+            letter_pos.x + cur_style.body.padding.left - (cur_style.line.width 
>> 1) - (cur_style.line.width & 0x1);
+        cur_area.y1 = letter_pos.y + cur_style.body.padding.top;
+        cur_area.x2 = letter_pos.x + cur_style.body.padding.right + 
(cur_style.line.width >> 1);
+        cur_area.y2 = letter_pos.y + cur_style.body.padding.bottom + letter_h;
+    } else if(ext->cursor.type == LV_CURSOR_BLOCK) {
+        cur_area.x1 = letter_pos.x - cur_style.body.padding.left;
+        cur_area.y1 = letter_pos.y - cur_style.body.padding.top;
+        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;
+
+    } else if(ext->cursor.type == LV_CURSOR_OUTLINE) {
+        cur_area.x1 = letter_pos.x - cur_style.body.padding.left;
+        cur_area.y1 = letter_pos.y - cur_style.body.padding.top;
+        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;
+    } else if(ext->cursor.type == LV_CURSOR_UNDERLINE) {
+        cur_area.x1 = letter_pos.x + cur_style.body.padding.left;
+        cur_area.y1 = letter_pos.y + cur_style.body.padding.top + letter_h - 
(cur_style.line.width >> 1);
+        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);
+    }
+
+    /*Save the new area*/
+    lv_disp_t * disp = lv_obj_get_disp(ta);
+    lv_area_t area_tmp;
+    lv_area_copy(&area_tmp, &ext->cursor.area);
+    area_tmp.x1 += ext->label->coords.x1;
+    area_tmp.y1 += ext->label->coords.y1;
+    area_tmp.x2 += ext->label->coords.x1;
+    area_tmp.y2 += ext->label->coords.y1;
+    lv_inv_area(disp, &area_tmp);
+
+    lv_area_copy(&ext->cursor.area, &cur_area);
+
+    lv_area_copy(&area_tmp, &ext->cursor.area);
+    area_tmp.x1 += ext->label->coords.x1;
+    area_tmp.y1 += ext->label->coords.y1;
+    area_tmp.x2 += ext->label->coords.x1;
+    area_tmp.y2 += ext->label->coords.y1;
+    lv_inv_area(disp, &area_tmp);
+}
+
+static void placeholder_update(lv_obj_t * ta)
+{
+    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
+    const char * ta_text;
+
+    if(ext->placeholder == NULL) return;
+
+    ta_text = lv_ta_get_text(ta);
+
+    if(ta_text[0] == '\0') {
+        /*Be sure the main label and the placeholder has the same coordinates*/
+        lv_obj_t * scrl               = lv_page_get_scrl(ta);
+        const lv_style_t * style_scrl = lv_obj_get_style(scrl);
+        lv_obj_set_pos(ext->placeholder, style_scrl->body.padding.left, 
style_scrl->body.padding.top);
+        lv_obj_set_pos(ext->label, style_scrl->body.padding.left, 
style_scrl->body.padding.top);
+
+        lv_obj_set_width(ext->placeholder, lv_page_get_fit_width(ta));
+        lv_obj_set_hidden(ext->placeholder, false);
+    } else {
+        lv_obj_set_hidden(ext->placeholder, true);
+    }
+}
+
+static void update_cursor_position_on_click(lv_obj_t * ta, lv_signal_t sign, 
lv_indev_t * click_source)
+{
+
+    if(click_source == NULL) return;
+
+    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
+    if(ext->cursor.click_pos == 0) return;
+    if(ext->cursor.type == LV_CURSOR_NONE) return;
+
+    if(lv_indev_get_type(click_source) == LV_INDEV_TYPE_KEYPAD ||
+       lv_indev_get_type(click_source) == LV_INDEV_TYPE_ENCODER) {
+        return;
+    }
+
+    lv_area_t label_coords;
+    lv_obj_get_coords(ext->label, &label_coords);
+
+    lv_point_t point_act, vect_act;
+    lv_indev_get_point(click_source, &point_act);
+    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 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 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(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(rel_pos.x >= label_width) {
+        char_id_at_click = LV_TA_CURSOR_LAST;
+        click_outside_label       = true;
+    } else {
+        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->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->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, 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->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->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_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);
+            }
+        }
+        /*Finish selection if necessary */
+        if(sign == LV_SIGNAL_PRESS_LOST || sign == LV_SIGNAL_RELEASED) {
+            ext->text_sel_in_prog = 0;
+        }
+    }
+#else
+    /*Check if the click happened on the left side of the area outside the 
label*/
+    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(rel_pos.x >= label_width) {
+        char_id_at_click = LV_TA_CURSOR_LAST;
+    } else {
+        char_id_at_click = lv_label_get_letter_on(ext->label, &rel_pos);
+    }
+
+    if(sign == LV_SIGNAL_PRESSED) lv_ta_set_cursor_pos(ta, char_id_at_click);
+#endif
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_ta.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_ta.h
new file mode 100755
index 0000000..afbb94b
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_ta.h
@@ -0,0 +1,478 @@
+/**
+ * @file lv_ta.h
+ *
+ */
+
+#ifndef LV_TA_H
+#define LV_TA_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_TA != 0
+
+/*Testing of dependencies*/
+#if LV_USE_PAGE == 0
+#error "lv_ta: lv_page is required. Enable it in lv_conf.h (LV_USE_PAGE  1) "
+#endif
+
+#if LV_USE_LABEL == 0
+#error "lv_ta: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL  1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "lv_page.h"
+#include "lv_label.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_TA_CURSOR_LAST (0x7FFF) /*Put the cursor after the last character*/
+
+LV_EXPORT_CONST_INT(LV_TA_CURSOR_LAST);
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/** Style of text area's cursor. */
+enum {
+    LV_CURSOR_NONE, /**< No cursor */
+    LV_CURSOR_LINE, /**< Vertical line */
+    LV_CURSOR_BLOCK, /**< Rectangle */
+    LV_CURSOR_OUTLINE, /**< Outline around character */
+    LV_CURSOR_UNDERLINE, /**< Horizontal line under character */
+    LV_CURSOR_HIDDEN = 0x08, /**< This flag can be ORed to any of the other 
values to temporarily hide the cursor */
+};
+typedef uint8_t lv_cursor_type_t;
+
+/*Data of text area*/
+typedef struct
+{
+    lv_page_ext_t page; /*Ext. of ancestor*/
+    /*New data for this type */
+    lv_obj_t * label;            /*Label of the text area*/
+    lv_obj_t * placeholder;      /*Place holder label. only visible if text is 
an empty string*/
+    char * pwd_tmp;              /*Used to store the original text in password 
mode*/
+    const char * accapted_chars; /*Only these characters will be accepted. 
NULL: accept all*/
+    uint16_t max_length;         /*The max. number of characters. 0: no limit*/
+    uint16_t pwd_show_time;      /*Time to show characters in password mode 
before change them to '*' */
+    struct
+    {
+        const lv_style_t * style;  /* Style of the cursor (NULL to use label's 
style)*/
+        lv_coord_t valid_x;        /* Used when stepping up/down to a shorter 
line.
+                                    * (Used by the library)*/
+        uint16_t pos;              /* The current cursor position
+                                    * (0: before 1st letter; 1: before 2nd 
letter ...)*/
+        uint16_t blink_time;       /*Blink period*/
+        lv_area_t area;            /* Cursor area relative to the Text Area*/
+        uint16_t txt_byte_pos;     /* Byte index of the letter after (on) the 
cursor*/
+        lv_cursor_type_t type : 4; /* Shape of the cursor*/
+        uint8_t state : 1;         /*Cursor is visible now or not (Handled by 
the library)*/
+        uint8_t click_pos : 1;     /*1: Enable positioning the cursor by 
clicking the text area*/
+    } cursor;
+#if LV_LABEL_TEXT_SEL
+    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
+    uint8_t pwd_mode : 1; /*Replace characters with '*' */
+    uint8_t one_line : 1; /*One line mode (ignore line breaks)*/
+} lv_ta_ext_t;
+
+/** Possible text areas tyles. */
+enum {
+    LV_TA_STYLE_BG, /**< Text area background style */
+    LV_TA_STYLE_SB, /**< Scrollbar style */
+    LV_TA_STYLE_CURSOR, /**< Cursor style */
+    LV_TA_STYLE_EDGE_FLASH, /**< Edge flash style */
+    LV_TA_STYLE_PLACEHOLDER, /**< Placeholder style */
+};
+typedef uint8_t lv_ta_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a text area objects
+ * @param par pointer to an object, it will be the parent of the new text area
+ * @param copy pointer to a text area object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created text area
+ */
+lv_obj_t * lv_ta_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Insert a character to the current cursor position.
+ * To add a wide char, e.g. 'Á' use `lv_txt_encoded_conv_wc('Á')`
+ * @param ta pointer to a text area object
+ * @param c a character (e.g. 'a')
+ */
+void lv_ta_add_char(lv_obj_t * ta, uint32_t c);
+
+/**
+ * Insert a text to the current cursor position
+ * @param ta pointer to a text area object
+ * @param txt a '\0' terminated string to insert
+ */
+void lv_ta_add_text(lv_obj_t * ta, const char * txt);
+
+/**
+ * Delete a the left character from the current cursor position
+ * @param ta pointer to a text area object
+ */
+void lv_ta_del_char(lv_obj_t * ta);
+
+/**
+ * Delete the right character from the current cursor position
+ * @param ta pointer to a text area object
+ */
+void lv_ta_del_char_forward(lv_obj_t * ta);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the text of a text area
+ * @param ta pointer to a text area
+ * @param txt pointer to the text
+ */
+void lv_ta_set_text(lv_obj_t * ta, const char * txt);
+
+/**
+ * Set the placeholder text of a text area
+ * @param ta pointer to a text area
+ * @param txt pointer to the text
+ */
+void lv_ta_set_placeholder_text(lv_obj_t * ta, const char * txt);
+
+/**
+ * Set the cursor position
+ * @param obj pointer to a text area object
+ * @param pos the new cursor position in character index
+ *             < 0 : index from the end of the text
+ *             LV_TA_CURSOR_LAST: go after the last character
+ */
+void lv_ta_set_cursor_pos(lv_obj_t * ta, int16_t pos);
+
+/**
+ * Set the cursor type.
+ * @param ta pointer to a text area object
+ * @param cur_type: element of 'lv_cursor_type_t'
+ */
+void lv_ta_set_cursor_type(lv_obj_t * ta, lv_cursor_type_t cur_type);
+
+/**
+ * Enable/Disable the positioning of the the cursor by clicking the text on 
the text area.
+ * @param ta pointer to a text area object
+ * @param en true: enable click positions; false: disable
+ */
+void lv_ta_set_cursor_click_pos(lv_obj_t * ta, bool en);
+
+/**
+ * Enable/Disable password mode
+ * @param ta pointer to a text area object
+ * @param en true: enable, false: disable
+ */
+void lv_ta_set_pwd_mode(lv_obj_t * ta, bool en);
+
+/**
+ * Configure the text area to one line or back to normal
+ * @param ta pointer to a Text area object
+ * @param en true: one line, false: normal
+ */
+void lv_ta_set_one_line(lv_obj_t * ta, bool en);
+
+/**
+ * Set the alignment of the text area.
+ * In one line mode the text can be scrolled only with `LV_LABEL_ALIGN_LEFT`.
+ * This function should be called if the size of text area changes.
+ * @param ta pointer to a text are object
+ * @param align the desired alignment from `lv_label_align_t`. 
(LV_LABEL_ALIGN_LEFT/CENTER/RIGHT)
+ */
+void lv_ta_set_text_align(lv_obj_t * ta, lv_label_align_t align);
+
+/**
+ * Set a list of characters. Only these characters will be accepted by the 
text area
+ * @param ta pointer to  Text Area
+ * @param list list of characters. Only the pointer is saved. E.g. 
"+-.,0123456789"
+ */
+void lv_ta_set_accepted_chars(lv_obj_t * ta, const char * list);
+
+/**
+ * Set max length of a Text Area.
+ * @param ta pointer to  Text Area
+ * @param num the maximal number of characters can be added (`lv_ta_set_text` 
ignores it)
+ */
+void lv_ta_set_max_length(lv_obj_t * ta, uint16_t num);
+
+/**
+ * In `LV_EVENT_INSERT` the text which planned to be inserted can be replaced 
by an other text.
+ * It can be used to add automatic formatting to the text area.
+ * @param ta pointer to a text area.
+ * @param txt pointer to a new string to insert. If `""` no text will be added.
+ *            The variable must be live after the `event_cb` exists. (Should 
be `global` or
+ * `static`)
+ */
+void lv_ta_set_insert_replace(lv_obj_t * ta, const char * txt);
+
+/**
+ * Set the scroll bar mode of a text area
+ * @param ta pointer to a text area object
+ * @param sb_mode the new mode from 'lv_page_sb_mode_t' enum
+ */
+static inline void lv_ta_set_sb_mode(lv_obj_t * ta, lv_sb_mode_t mode)
+{
+    lv_page_set_sb_mode(ta, mode);
+}
+
+/**
+ * Enable the scroll propagation feature. If enabled then the Text area will 
move its parent if
+ * there is no more space to scroll.
+ * @param ta pointer to a Text area
+ * @param en true or false to enable/disable scroll propagation
+ */
+static inline void lv_ta_set_scroll_propagation(lv_obj_t * ta, bool en)
+{
+    lv_page_set_scroll_propagation(ta, en);
+}
+
+/**
+ * Enable the edge flash effect. (Show an arc when the an edge is reached)
+ * @param page pointer to a Text Area
+ * @param en true or false to enable/disable end flash
+ */
+static inline void lv_ta_set_edge_flash(lv_obj_t * ta, bool en)
+{
+    lv_page_set_edge_flash(ta, en);
+}
+
+/**
+ * Set a style of a text area
+ * @param ta pointer to a text area object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_ta_set_style(lv_obj_t * ta, lv_ta_style_t type, const lv_style_t * 
style);
+
+/**
+ * Enable/disable selection mode.
+ * @param ta pointer to a text area object
+ * @param en true or false to enable/disable selection mode
+ */
+void lv_ta_set_text_sel(lv_obj_t * ta, bool en);
+
+/**
+ * Set how long show the password before changing it to '*'
+ * @param ta pointer to Text area
+ * @param time show time in milliseconds. 0: hide immediately.
+ */
+void lv_ta_set_pwd_show_time(lv_obj_t * ta, uint16_t time);
+
+/**
+ * Set cursor blink animation time
+ * @param ta pointer to Text area
+ * @param time blink period. 0: disable blinking
+ */
+void lv_ta_set_cursor_blink_time(lv_obj_t * ta, uint16_t time);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the text of a text area. In password mode it gives the real text (not 
'*'s).
+ * @param ta pointer to a text area object
+ * @return pointer to the text
+ */
+const char * lv_ta_get_text(const lv_obj_t * ta);
+
+/**
+ * Get the placeholder text of a text area
+ * @param ta pointer to a text area object
+ * @return pointer to the text
+ */
+const char * lv_ta_get_placeholder_text(lv_obj_t * ta);
+
+/**
+ * Get the label of a text area
+ * @param ta pointer to a text area object
+ * @return pointer to the label object
+ */
+lv_obj_t * lv_ta_get_label(const lv_obj_t * ta);
+
+/**
+ * Get the current cursor position in character index
+ * @param ta pointer to a text area object
+ * @return the cursor position
+ */
+uint16_t lv_ta_get_cursor_pos(const lv_obj_t * ta);
+
+/**
+ * Get the current cursor type.
+ * @param ta pointer to a text area object
+ * @return element of 'lv_cursor_type_t'
+ */
+lv_cursor_type_t lv_ta_get_cursor_type(const lv_obj_t * ta);
+
+/**
+ * Get whether the cursor click positioning is enabled or not.
+ * @param ta pointer to a text area object
+ * @return true: enable click positions; false: disable
+ */
+bool lv_ta_get_cursor_click_pos(lv_obj_t * ta);
+
+/**
+ * Get the password mode attribute
+ * @param ta pointer to a text area object
+ * @return true: password mode is enabled, false: disabled
+ */
+bool lv_ta_get_pwd_mode(const lv_obj_t * ta);
+
+/**
+ * Get the one line configuration attribute
+ * @param ta pointer to a text area object
+ * @return true: one line configuration is enabled, false: disabled
+ */
+bool lv_ta_get_one_line(const lv_obj_t * ta);
+
+/**
+ * Get a list of accepted characters.
+ * @param ta pointer to  Text Area
+ * @return list of accented characters.
+ */
+const char * lv_ta_get_accepted_chars(lv_obj_t * ta);
+
+/**
+ * Set max length of a Text Area.
+ * @param ta pointer to  Text Area
+ * @return the maximal number of characters to be add
+ */
+uint16_t lv_ta_get_max_length(lv_obj_t * ta);
+
+/**
+ * Get the scroll bar mode of a text area
+ * @param ta pointer to a text area object
+ * @return scrollbar mode from 'lv_page_sb_mode_t' enum
+ */
+static inline lv_sb_mode_t lv_ta_get_sb_mode(const lv_obj_t * ta)
+{
+    return lv_page_get_sb_mode(ta);
+}
+
+/**
+ * Get the scroll propagation property
+ * @param ta pointer to a Text area
+ * @return true or false
+ */
+static inline bool lv_ta_get_scroll_propagation(lv_obj_t * ta)
+{
+    return lv_page_get_scroll_propagation(ta);
+}
+
+/**
+ * Get the scroll propagation property
+ * @param ta pointer to a Text area
+ * @return true or false
+ */
+static inline bool lv_ta_get_edge_flash(lv_obj_t * ta)
+{
+    return lv_page_get_edge_flash(ta);
+}
+
+/**
+ * Get a style of a text area
+ * @param ta pointer to a text area object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+const lv_style_t * lv_ta_get_style(const lv_obj_t * ta, lv_ta_style_t type);
+
+/**
+ * Find whether text is selected or not.
+ * @param ta Text area object
+ * @return whether text is selected or not
+ */
+bool lv_ta_text_is_selected(const lv_obj_t * ta);
+
+/**
+ * Find whether selection mode is enabled.
+ * @param ta pointer to a text area object
+ * @return true: selection mode is enabled, false: disabled
+ */
+bool lv_ta_get_text_sel_en(lv_obj_t * ta);
+
+/**
+ * Set how long show the password before changing it to '*'
+ * @param ta pointer to Text area
+ * @return show time in milliseconds. 0: hide immediately.
+ */
+uint16_t lv_ta_get_pwd_show_time(lv_obj_t * ta);
+
+/**
+ * Set cursor blink animation time
+ * @param ta pointer to Text area
+ * @return time blink period. 0: disable blinking
+ */
+uint16_t lv_ta_get_cursor_blink_time(lv_obj_t * ta);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Clear the selection on the text area.
+ * @param ta Text area object
+ */
+void lv_ta_clear_selection(lv_obj_t * ta);
+
+/**
+ * Move the cursor one character right
+ * @param ta pointer to a text area object
+ */
+void lv_ta_cursor_right(lv_obj_t * ta);
+
+/**
+ * Move the cursor one character left
+ * @param ta pointer to a text area object
+ */
+void lv_ta_cursor_left(lv_obj_t * ta);
+
+/**
+ * Move the cursor one line down
+ * @param ta pointer to a text area object
+ */
+void lv_ta_cursor_down(lv_obj_t * ta);
+
+/**
+ * Move the cursor one line up
+ * @param ta pointer to a text area object
+ */
+void lv_ta_cursor_up(lv_obj_t * ta);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_TA_H*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_TA_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_table.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_table.c
new file mode 100755
index 0000000..1410cc3
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_table.c
@@ -0,0 +1,894 @@
+/**
+ * @file lv_table.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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"
+#include "../lv_themes/lv_theme.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_table"
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static bool lv_table_design(lv_obj_t * table, const lv_area_t * mask, 
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);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_design_cb_t ancestor_scrl_design;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a table object
+ * @param par pointer to an object, it will be the parent of the new table
+ * @param copy pointer to a table object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created table
+ */
+lv_obj_t * lv_table_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("table create started");
+
+    /*Create the ancestor of table*/
+    lv_obj_t * new_table = lv_obj_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) 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);
+
+    /*Initialize the allocated 'ext' */
+    ext->cell_data     = NULL;
+    ext->cell_style[0] = &lv_style_plain;
+    ext->cell_style[1] = &lv_style_plain;
+    ext->cell_style[2] = &lv_style_plain;
+    ext->cell_style[3] = &lv_style_plain;
+    ext->col_cnt       = 0;
+    ext->row_cnt       = 0;
+
+    uint16_t i;
+    for(i = 0; i < LV_TABLE_COL_MAX; i++) {
+        ext->col_w[i] = LV_DPI;
+    }
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_table, lv_table_signal);
+    lv_obj_set_design_cb(new_table, lv_table_design);
+
+    /*Init the new table table*/
+    if(copy == NULL) {
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_table_set_style(new_table, LV_TABLE_STYLE_BG, 
th->style.table.bg);
+            lv_table_set_style(new_table, LV_TABLE_STYLE_CELL1, 
th->style.table.cell);
+            lv_table_set_style(new_table, LV_TABLE_STYLE_CELL2, 
th->style.table.cell);
+            lv_table_set_style(new_table, LV_TABLE_STYLE_CELL3, 
th->style.table.cell);
+            lv_table_set_style(new_table, LV_TABLE_STYLE_CELL4, 
th->style.table.cell);
+        } else {
+            lv_table_set_style(new_table, LV_TABLE_STYLE_BG, 
&lv_style_plain_color);
+        }
+        lv_obj_set_click(new_table, false); /*Can be removed if click support 
is added*/
+    }
+    /*Copy an existing table*/
+    else {
+        lv_table_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->cell_style[0]        = copy_ext->cell_style[0];
+        ext->cell_style[1]        = copy_ext->cell_style[1];
+        ext->cell_style[2]        = copy_ext->cell_style[2];
+        ext->cell_style[3]        = copy_ext->cell_style[3];
+        lv_table_set_row_cnt(new_table, copy_ext->row_cnt);
+        lv_table_set_col_cnt(new_table, copy_ext->col_cnt);
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_table);
+    }
+
+    LV_LOG_INFO("table created");
+
+    return new_table;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the value of a cell.
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @param txt text to display in the cell. It will be copied and saved so this 
variable is not
+ * required after this function call.
+ */
+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");
+        return;
+    }
+    uint32_t cell = row * ext->col_cnt + col;
+    lv_table_cell_format_t format;
+
+    /*Save the format byte*/
+    if(ext->cell_data[cell]) {
+        format.format_byte = ext->cell_data[cell][0];
+    }
+    /*Initialize the format byte*/
+    else {
+#if LV_USE_BIDI
+        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) 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);  /*+1 to skip the format byte*/
+
+    ext->cell_data[cell][0] = format.format_byte;
+    refr_size(table);
+}
+
+/**
+ * Set the number of rows
+ * @param table table pointer to a Table object
+ * @param row_cnt number of rows
+ */
+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;
+
+    if(ext->row_cnt > 0 && ext->col_cnt > 0) {
+        ext->cell_data = lv_mem_realloc(ext->cell_data, ext->row_cnt * 
ext->col_cnt * sizeof(char *));
+
+        /*Initilize the new fields*/
+        if(old_row_cnt < row_cnt) {
+            uint16_t old_cell_cnt = old_row_cnt * ext->col_cnt;
+            uint32_t new_cell_cnt = ext->col_cnt * ext->row_cnt;
+            memset(&ext->cell_data[old_cell_cnt], 0, (new_cell_cnt - 
old_cell_cnt) * sizeof(ext->cell_data[0]));
+        }
+    } else {
+        lv_mem_free(ext->cell_data);
+        ext->cell_data = NULL;
+    }
+
+    refr_size(table);
+}
+
+/**
+ * Set the number of columns
+ * @param table table pointer to a Table object
+ * @param col_cnt number of columns. Must be < LV_TABLE_COL_MAX
+ */
+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.");
+        return;
+    }
+
+    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
+    uint16_t old_col_cnt = ext->col_cnt;
+    ext->col_cnt         = col_cnt;
+
+    if(ext->row_cnt > 0 && ext->col_cnt > 0) {
+        ext->cell_data = lv_mem_realloc(ext->cell_data, ext->row_cnt * 
ext->col_cnt * sizeof(char *));
+        /*Initilize the new fields*/
+        if(old_col_cnt < col_cnt) {
+            uint16_t old_cell_cnt = old_col_cnt * ext->row_cnt;
+            uint32_t new_cell_cnt = ext->col_cnt * ext->row_cnt;
+            memset(&ext->cell_data[old_cell_cnt], 0, (new_cell_cnt - 
old_cell_cnt) * sizeof(ext->cell_data[0]));
+        }
+
+    } else {
+        lv_mem_free(ext->cell_data);
+        ext->cell_data = NULL;
+    }
+    refr_size(table);
+}
+
+/**
+ * Set the width of a column
+ * @param table table pointer to a Table object
+ * @param col_id id of the column [0 .. LV_TABLE_COL_MAX -1]
+ * @param w width of the column
+ */
+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;
+    }
+
+    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
+    ext->col_w[col_id]   = w;
+    refr_size(table);
+}
+
+/**
+ * Set the text align in a cell
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @param align LV_LABEL_ALIGN_LEFT or LV_LABEL_ALIGN_CENTER or 
LV_LABEL_ALIGN_RIGHT
+ */
+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");
+        return;
+    }
+    uint32_t cell = row * ext->col_cnt + col;
+
+    if(ext->cell_data[cell] == NULL) {
+        ext->cell_data[cell]    = lv_mem_alloc(2); /*+1: trailing '\0; +1: 
format byte*/
+        ext->cell_data[cell][0] = 0;
+        ext->cell_data[cell][1] = '\0';
+    }
+
+    lv_table_cell_format_t format;
+    format.format_byte      = ext->cell_data[cell][0];
+    format.s.align          = align;
+    ext->cell_data[cell][0] = format.format_byte;
+}
+
+/**
+ * Set the type of a cell.
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @param type 1,2,3 or 4. The cell style will be chosen accordingly.
+ */
+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");
+        return;
+    }
+    uint32_t cell = row * ext->col_cnt + col;
+
+    if(ext->cell_data[cell] == NULL) {
+        ext->cell_data[cell]    = lv_mem_alloc(2); /*+1: trailing '\0; +1: 
format byte*/
+        ext->cell_data[cell][0] = 0;
+        ext->cell_data[cell][1] = '\0';
+    }
+
+    if(type > 0) type--; /*User gives 1,2,3,4 but easier to handle 0, 1, 2, 3*/
+    if(type >= LV_TABLE_CELL_STYLE_CNT) type = LV_TABLE_CELL_STYLE_CNT - 1;
+
+    lv_table_cell_format_t format;
+    format.format_byte      = ext->cell_data[cell][0];
+    format.s.type           = type;
+    ext->cell_data[cell][0] = format.format_byte;
+}
+
+/**
+ * Set the cell crop. (Don't adjust the height of the cell according to its 
content)
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @param crop true: crop the cell content; false: set the cell height to the 
content.
+ */
+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");
+        return;
+    }
+    uint32_t cell = row * ext->col_cnt + col;
+
+    if(ext->cell_data[cell] == NULL) {
+        ext->cell_data[cell]    = lv_mem_alloc(2); /*+1: trailing '\0; +1: 
format byte*/
+        ext->cell_data[cell][0] = 0;
+        ext->cell_data[cell][1] = '\0';
+    }
+
+    lv_table_cell_format_t format;
+    format.format_byte      = ext->cell_data[cell][0];
+    format.s.crop           = crop;
+    ext->cell_data[cell][0] = format.format_byte;
+}
+
+/**
+ * Merge a cell with the right neighbor. The value of the cell to the right 
won't be displayed.
+ * @param table table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @param en true: merge right; false: don't merge right
+ */
+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");
+        return;
+    }
+
+    uint32_t cell = row * ext->col_cnt + col;
+
+    if(ext->cell_data[cell] == NULL) {
+        ext->cell_data[cell]    = lv_mem_alloc(2); /*+1: trailing '\0; +1: 
format byte*/
+        ext->cell_data[cell][0] = 0;
+        ext->cell_data[cell][1] = '\0';
+    }
+
+    lv_table_cell_format_t format;
+    format.format_byte      = ext->cell_data[cell][0];
+    format.s.right_merge    = en ? 1 : 0;
+    ext->cell_data[cell][0] = format.format_byte;
+    refr_size(table);
+}
+
+/**
+ * Set a style of a table.
+ * @param table pointer to table object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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) {
+        case LV_TABLE_STYLE_BG:
+            lv_obj_set_style(table, style);
+            refr_size(table);
+            break;
+        case LV_TABLE_STYLE_CELL1:
+            ext->cell_style[0] = style;
+            refr_size(table);
+            break;
+        case LV_TABLE_STYLE_CELL2:
+            ext->cell_style[1] = style;
+            refr_size(table);
+            break;
+        case LV_TABLE_STYLE_CELL3:
+            ext->cell_style[2] = style;
+            refr_size(table);
+            break;
+        case LV_TABLE_STYLE_CELL4:
+            ext->cell_style[3] = style;
+            refr_size(table);
+            break;
+    }
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the value of a cell.
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @return text in the cell
+ */
+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");
+        return "";
+    }
+    uint32_t cell = row * ext->col_cnt + col;
+
+    if(ext->cell_data[cell] == NULL) return "";
+
+    return &ext->cell_data[cell][1]; /*Skip the format byte*/
+}
+
+/**
+ * Get the number of rows.
+ * @param table table pointer to a Table object
+ * @return number of rows.
+ */
+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;
+}
+
+/**
+ * Get the number of columns.
+ * @param table table pointer to a Table object
+ * @return number of columns.
+ */
+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;
+}
+
+/**
+ * Get the width of a column
+ * @param table table pointer to a Table object
+ * @param col_id id of the column [0 .. LV_TABLE_COL_MAX -1]
+ * @return width of the column
+ */
+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;
+    }
+
+    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
+    return ext->col_w[col_id];
+}
+
+/**
+ * Get the text align of a cell
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @return LV_LABEL_ALIGN_LEFT (default in case of error) or 
LV_LABEL_ALIGN_CENTER or
+ * LV_LABEL_ALIGN_RIGHT
+ */
+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");
+        return LV_LABEL_ALIGN_LEFT; /*Just return with something*/
+    }
+    uint32_t cell = row * ext->col_cnt + col;
+
+    if(ext->cell_data[cell] == NULL)
+        return LV_LABEL_ALIGN_LEFT; /*Just return with something*/
+    else {
+        lv_table_cell_format_t format;
+        format.format_byte = ext->cell_data[cell][0];
+        return format.s.align;
+    }
+}
+
+/**
+ * Get the type of a cell
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @return 1,2,3 or 4
+ */
+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");
+        return 1; /*Just return with something*/
+    }
+    uint32_t cell = row * ext->col_cnt + col;
+
+    if(ext->cell_data[cell] == NULL)
+        return 1; /*Just return with something*/
+    else {
+        lv_table_cell_format_t format;
+        format.format_byte = ext->cell_data[cell][0];
+        return format.s.type + 1; /*0,1,2,3 is stored but user sees 1,2,3,4*/
+    }
+}
+
+/**
+ * Get the crop property of a cell
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @return true: text crop enabled; false: disabled
+ */
+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");
+        return false; /*Just return with something*/
+    }
+    uint32_t cell = row * ext->col_cnt + col;
+
+    if(ext->cell_data[cell] == NULL)
+        return false; /*Just return with something*/
+    else {
+        lv_table_cell_format_t format;
+        format.format_byte = ext->cell_data[cell][0];
+        return format.s.crop;
+    }
+}
+
+/**
+ * Get the cell merge attribute.
+ * @param table table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @return true: merge right; false: don't merge right
+ */
+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");
+        return false;
+    }
+
+    uint32_t cell = row * ext->col_cnt + col;
+
+    if(ext->cell_data[cell] == NULL)
+        return false;
+    else {
+        lv_table_cell_format_t format;
+        format.format_byte = ext->cell_data[cell][0];
+        return format.s.right_merge ? true : false;
+    }
+}
+
+/**
+ * Get style of a table.
+ * @param table pointer to table object
+ * @param type which style should be get
+ * @return style pointer to the style
+ */
+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;
+
+    switch(type) {
+        case LV_TABLE_STYLE_BG: style = lv_obj_get_style(table); break;
+        case LV_TABLE_STYLE_CELL1: style = ext->cell_style[0]; break;
+        case LV_TABLE_STYLE_CELL2: style = ext->cell_style[1]; break;
+        case LV_TABLE_STYLE_CELL3: style = ext->cell_style[2]; break;
+        case LV_TABLE_STYLE_CELL4: style = ext->cell_style[3]; break;
+        default: return NULL;
+    }
+
+    return style;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * 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 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'
+ */
+static bool lv_table_design(lv_obj_t * table, const lv_area_t * mask, 
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;
+    }
+    /*Draw the object*/
+    else if(mode == LV_DESIGN_DRAW_MAIN) {
+        ancestor_scrl_design(table, mask, mode);
+
+        lv_table_ext_t * ext        = lv_obj_get_ext_attr(table);
+        const lv_style_t * bg_style = lv_obj_get_style(table);
+        lv_coord_t h_row;
+        lv_point_t txt_size;
+        lv_area_t cell_area;
+        lv_area_t txt_area;
+        lv_txt_flag_t txt_flags;
+        lv_opa_t opa_scale = lv_obj_get_opa_scale(table);
+
+        uint16_t col;
+        uint16_t row;
+        uint16_t cell = 0;
+
+        cell_area.y2 = table->coords.y1 + bg_style->body.padding.top;
+        for(row = 0; row < ext->row_cnt; row++) {
+            h_row = get_row_height(table, row);
+
+            cell_area.y1 = cell_area.y2 + 1;
+            cell_area.y2 = cell_area.y1 + h_row - 1;
+
+            cell_area.x2 = table->coords.x1 + bg_style->body.padding.left;
+
+            for(col = 0; col < ext->col_cnt; col++) {
+
+                lv_table_cell_format_t format;
+                if(ext->cell_data[cell]) {
+                    format.format_byte = ext->cell_data[cell][0];
+                } else {
+                    format.s.right_merge = 0;
+                    format.s.align       = LV_LABEL_ALIGN_LEFT;
+                    format.s.type        = 0;
+                    format.s.crop        = 1;
+                }
+
+
+                lv_style_t cell_style;
+                lv_style_copy(&cell_style, ext->cell_style[format.s.type]);
+                cell_area.x1 = cell_area.x2 + 1;
+                cell_area.x2 = cell_area.x1 + ext->col_w[col] - 1;
+
+                uint16_t col_merge = 0;
+                for(col_merge = 0; col_merge + col < ext->col_cnt - 1; 
col_merge++) {
+
+                    if(ext->cell_data[cell + col_merge] != NULL) {
+                        format.format_byte = ext->cell_data[cell + 
col_merge][0];
+                        if(format.s.right_merge)
+                            cell_area.x2 += ext->col_w[col + col_merge + 1];
+                        else
+                            break;
+                    } else {
+                        break;
+                    }
+                }
+
+                lv_draw_rect(&cell_area, mask, &cell_style, opa_scale);
+
+                if(ext->cell_data[cell]) {
+
+                    txt_area.x1 = cell_area.x1 + cell_style.body.padding.left;
+                    txt_area.x2 = cell_area.x2 - cell_style.body.padding.right;
+                    txt_area.y1 = cell_area.y1 + cell_style.body.padding.top;
+                    txt_area.y2 = cell_area.y2 - 
cell_style.body.padding.bottom;
+                    /*Align the content to the middle if not cropped*/
+                    if(format.s.crop == 0) {
+                        txt_flags = LV_TXT_FLAG_NONE;
+                    } else {
+                        txt_flags = LV_TXT_FLAG_EXPAND;
+                    }
+
+                    lv_txt_get_size(&txt_size, ext->cell_data[cell] + 1, 
cell_style.text.font,
+                                    cell_style.text.letter_space, 
cell_style.text.line_space,
+                                    lv_area_get_width(&txt_area), txt_flags);
+
+                    /*Align the content to the middle if not cropped*/
+                    if(format.s.crop == 0) {
+                        txt_area.y1 = cell_area.y1 + h_row / 2 - txt_size.y / 
2;
+                        txt_area.y2 = cell_area.y1 + h_row / 2 + txt_size.y / 
2;
+                    }
+
+                    switch(format.s.align) {
+                        default:
+                        case LV_LABEL_ALIGN_LEFT: txt_flags |= 
LV_TXT_FLAG_NONE; break;
+                        case LV_LABEL_ALIGN_RIGHT: txt_flags |= 
LV_TXT_FLAG_RIGHT; break;
+                        case LV_LABEL_ALIGN_CENTER: txt_flags |= 
LV_TXT_FLAG_CENTER; break;
+                    }
+
+                    lv_area_t label_mask;
+                    bool label_mask_ok;
+                    label_mask_ok = lv_area_intersect(&label_mask, mask, 
&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, NULL, NULL, 
lv_obj_get_base_dir(table));
+                    }
+                    /*Draw lines after '\n's*/
+                    lv_point_t p1;
+                    lv_point_t p2;
+                    p1.x = cell_area.x1;
+                    p2.x = cell_area.x2;
+                    uint16_t i;
+                    for(i = 1; ext->cell_data[cell][i] != '\0'; i++) {
+                        if(ext->cell_data[cell][i] == '\n') {
+                            ext->cell_data[cell][i] = '\0';
+                            lv_txt_get_size(&txt_size, ext->cell_data[cell] + 
1, cell_style.text.font,
+                                            cell_style.text.letter_space, 
cell_style.text.line_space,
+                                            lv_area_get_width(&txt_area), 
txt_flags);
+
+                            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);
+
+                            ext->cell_data[cell][i] = '\n';
+                        }
+                    }
+                }
+
+                cell += col_merge + 1;
+                col += col_merge;
+            }
+        }
+    }
+    /*Post draw when the children are drawn*/
+    else if(mode == LV_DESIGN_DRAW_POST) {
+    }
+
+    return true;
+}
+
+/**
+ * Signal function of the table
+ * @param table pointer to a table 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_table_signal(lv_obj_t * table, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res;
+
+    /* 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*/
+        lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
+        uint16_t cell;
+        for(cell = 0; cell < ext->col_cnt * ext->row_cnt; cell++) {
+            if(ext->cell_data[cell]) {
+                lv_mem_free(ext->cell_data[cell]);
+                ext->cell_data[cell] = NULL;
+            }
+        }
+        if(ext->cell_data != NULL)
+            lv_mem_free(ext->cell_data);
+    }
+
+    return res;
+}
+
+static void refr_size(lv_obj_t * table)
+{
+    lv_coord_t h = 0;
+    lv_coord_t w = 0;
+
+    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
+
+    uint16_t i;
+    for(i = 0; i < ext->col_cnt; i++) {
+        w += ext->col_w[i];
+    }
+    for(i = 0; i < ext->row_cnt; i++) {
+        h += get_row_height(table, i);
+    }
+
+    const lv_style_t * bg_style = lv_obj_get_style(table);
+
+    w += bg_style->body.padding.left + bg_style->body.padding.right;
+    h += bg_style->body.padding.top + bg_style->body.padding.bottom;
+
+    lv_obj_set_size(table, w + 1, h + 1);
+    lv_obj_invalidate(table);
+}
+
+static lv_coord_t get_row_height(lv_obj_t * table, uint16_t row_id)
+{
+    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
+    lv_point_t txt_size;
+    lv_coord_t txt_w;
+    const lv_style_t * cell_style;
+
+    uint16_t row_start = row_id * ext->col_cnt;
+    uint16_t cell;
+    uint16_t col;
+    lv_coord_t h_max = lv_font_get_line_height(ext->cell_style[0]->text.font) 
+ ext->cell_style[0]->body.padding.top +
+                       ext->cell_style[0]->body.padding.bottom;
+
+    for(cell = row_start, col = 0; cell < row_start + ext->col_cnt; cell++, 
col++) {
+        if(ext->cell_data[cell] != NULL) {
+
+            txt_w              = ext->col_w[col];
+            uint16_t col_merge = 0;
+            for(col_merge = 0; col_merge + col < ext->col_cnt - 1; 
col_merge++) {
+
+                if(ext->cell_data[cell + col_merge] != NULL) {
+                    lv_table_cell_format_t format;
+                    format.format_byte = ext->cell_data[cell + col_merge][0];
+                    if(format.s.right_merge)
+                        txt_w += ext->col_w[col + col_merge + 1];
+                    else
+                        break;
+                } else {
+                    break;
+                }
+            }
+
+            lv_table_cell_format_t format;
+            format.format_byte = ext->cell_data[cell][0];
+            cell_style         = ext->cell_style[format.s.type];
+
+            /*With text crop assume 1 line*/
+            if(format.s.crop) {
+                h_max = 
LV_MATH_MAX(lv_font_get_line_height(cell_style->text.font) + 
cell_style->body.padding.top +
+                                        cell_style->body.padding.bottom,
+                                    h_max);
+            }
+            /*Without text crop calculate the height of the text in the cell*/
+            else {
+                txt_w -= cell_style->body.padding.left + 
cell_style->body.padding.right;
+
+                lv_txt_get_size(&txt_size, ext->cell_data[cell] + 1, 
cell_style->text.font,
+                                cell_style->text.letter_space, 
cell_style->text.line_space, txt_w, LV_TXT_FLAG_NONE);
+
+                h_max = LV_MATH_MAX(txt_size.y + cell_style->body.padding.top 
+ cell_style->body.padding.bottom, h_max);
+                cell += col_merge;
+                col += col_merge;
+            }
+        }
+    }
+
+    return h_max;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_table.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_table.h
new file mode 100755
index 0000000..d6a0be7
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_table.h
@@ -0,0 +1,268 @@
+/**
+ * @file lv_table.h
+ *
+ */
+
+#ifndef LV_TABLE_H
+#define LV_TABLE_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_TABLE != 0
+
+/*Testing of dependencies*/
+#if LV_USE_LABEL == 0
+#error "lv_table: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL  
1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "lv_label.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+#ifndef LV_TABLE_COL_MAX
+#define LV_TABLE_COL_MAX 12
+#endif
+
+#define LV_TABLE_CELL_STYLE_CNT 4
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**
+ * Internal table cell format structure.
+ * 
+ * Use the `lv_table` APIs instead.
+ */
+typedef union
+{
+    struct
+    {
+        uint8_t align : 2;
+        uint8_t right_merge : 1;
+        uint8_t type : 2;
+        uint8_t crop : 1;
+    } s;
+    uint8_t format_byte;
+} lv_table_cell_format_t;
+
+/*Data of table*/
+typedef struct
+{
+    /*New data for this type */
+    uint16_t col_cnt;
+    uint16_t row_cnt;
+    char ** cell_data;
+    const lv_style_t * cell_style[LV_TABLE_CELL_STYLE_CNT];
+    lv_coord_t col_w[LV_TABLE_COL_MAX];
+} lv_table_ext_t;
+
+/*Styles*/
+enum {
+    LV_TABLE_STYLE_BG,
+    LV_TABLE_STYLE_CELL1,
+    LV_TABLE_STYLE_CELL2,
+    LV_TABLE_STYLE_CELL3,
+    LV_TABLE_STYLE_CELL4,
+};
+typedef uint8_t lv_table_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a table object
+ * @param par pointer to an object, it will be the parent of the new table
+ * @param copy pointer to a table object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created table
+ */
+lv_obj_t * lv_table_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the value of a cell.
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @param txt text to display in the cell. It will be copied and saved so this 
variable is not
+ * required after this function call.
+ */
+void lv_table_set_cell_value(lv_obj_t * table, uint16_t row, uint16_t col, 
const char * txt);
+
+/**
+ * Set the number of rows
+ * @param table table pointer to a Table object
+ * @param row_cnt number of rows
+ */
+void lv_table_set_row_cnt(lv_obj_t * table, uint16_t row_cnt);
+
+/**
+ * Set the number of columns
+ * @param table table pointer to a Table object
+ * @param col_cnt number of columns. Must be < LV_TABLE_COL_MAX
+ */
+void lv_table_set_col_cnt(lv_obj_t * table, uint16_t col_cnt);
+
+/**
+ * Set the width of a column
+ * @param table table pointer to a Table object
+ * @param col_id id of the column [0 .. LV_TABLE_COL_MAX -1]
+ * @param w width of the column
+ */
+void lv_table_set_col_width(lv_obj_t * table, uint16_t col_id, lv_coord_t w);
+
+/**
+ * Set the text align in a cell
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @param align LV_LABEL_ALIGN_LEFT or LV_LABEL_ALIGN_CENTER or 
LV_LABEL_ALIGN_RIGHT
+ */
+void lv_table_set_cell_align(lv_obj_t * table, uint16_t row, uint16_t col, 
lv_label_align_t align);
+
+/**
+ * Set the type of a cell.
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @param type 1,2,3 or 4. The cell style will be chosen accordingly.
+ */
+void lv_table_set_cell_type(lv_obj_t * table, uint16_t row, uint16_t col, 
uint8_t type);
+
+/**
+ * Set the cell crop. (Don't adjust the height of the cell according to its 
content)
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @param crop true: crop the cell content; false: set the cell height to the 
content.
+ */
+void lv_table_set_cell_crop(lv_obj_t * table, uint16_t row, uint16_t col, bool 
crop);
+
+/**
+ * Merge a cell with the right neighbor. The value of the cell to the right 
won't be displayed.
+ * @param table table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @param en true: merge right; false: don't merge right
+ */
+void lv_table_set_cell_merge_right(lv_obj_t * table, uint16_t row, uint16_t 
col, bool en);
+
+/**
+ * Set a style of a table.
+ * @param table pointer to table object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_table_set_style(lv_obj_t * table, lv_table_style_t type, const 
lv_style_t * style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the value of a cell.
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @return text in the cell
+ */
+const char * lv_table_get_cell_value(lv_obj_t * table, uint16_t row, uint16_t 
col);
+
+/**
+ * Get the number of rows.
+ * @param table table pointer to a Table object
+ * @return number of rows.
+ */
+uint16_t lv_table_get_row_cnt(lv_obj_t * table);
+
+/**
+ * Get the number of columns.
+ * @param table table pointer to a Table object
+ * @return number of columns.
+ */
+uint16_t lv_table_get_col_cnt(lv_obj_t * table);
+
+/**
+ * Get the width of a column
+ * @param table table pointer to a Table object
+ * @param col_id id of the column [0 .. LV_TABLE_COL_MAX -1]
+ * @return width of the column
+ */
+lv_coord_t lv_table_get_col_width(lv_obj_t * table, uint16_t col_id);
+
+/**
+ * Get the text align of a cell
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @return LV_LABEL_ALIGN_LEFT (default in case of error) or 
LV_LABEL_ALIGN_CENTER or
+ * LV_LABEL_ALIGN_RIGHT
+ */
+lv_label_align_t lv_table_get_cell_align(lv_obj_t * table, uint16_t row, 
uint16_t col);
+
+/**
+ * Get the type of a cell
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @return 1,2,3 or 4
+ */
+lv_label_align_t lv_table_get_cell_type(lv_obj_t * table, uint16_t row, 
uint16_t col);
+
+/**
+ * Get the crop property of a cell
+ * @param table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @return true: text crop enabled; false: disabled
+ */
+lv_label_align_t lv_table_get_cell_crop(lv_obj_t * table, uint16_t row, 
uint16_t col);
+
+/**
+ * Get the cell merge attribute.
+ * @param table table pointer to a Table object
+ * @param row id of the row [0 .. row_cnt -1]
+ * @param col id of the column [0 .. col_cnt -1]
+ * @return true: merge right; false: don't merge right
+ */
+bool lv_table_get_cell_merge_right(lv_obj_t * table, uint16_t row, uint16_t 
col);
+
+/**
+ * Get style of a table.
+ * @param table pointer to table object
+ * @param type which style should be get
+ * @return style pointer to the style
+ */
+const lv_style_t * lv_table_get_style(const lv_obj_t * table, lv_table_style_t 
type);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_TABLE*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_TABLE_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_tabview.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_tabview.c
new file mode 100755
index 0000000..79727b1
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_tabview.c
@@ -0,0 +1,1164 @@
+/**
+ * @file lv_tab.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_tabview.h"
+#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"
+
+/*********************
+ *      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)  */
+#endif
+#else
+#undef LV_TABVIEW_DEF_ANIM_TIME
+#define LV_TABVIEW_DEF_ANIM_TIME 0 /*No animations*/
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  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 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 VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_signal_cb_t page_signal;
+static lv_signal_cb_t page_scrl_signal;
+static const char * tab_def[] = {""};
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a Tab view object
+ * @param par pointer to an object, it will be the parent of the new tab
+ * @param copy pointer to a tab object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created tab
+ */
+lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("tab view create started");
+
+    /*Create the ancestor of tab*/
+    lv_obj_t * new_tabview = lv_obj_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) 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;
+    ext->content      = NULL;
+    ext->indic        = NULL;
+    ext->btns         = NULL;
+    ext->btns_pos     = LV_TABVIEW_BTNS_POS_TOP;
+#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);
+
+    /*Init the new tab tab*/
+    if(copy == NULL) {
+        ext->tab_name_ptr = lv_mem_alloc(sizeof(char *));
+        LV_ASSERT_MEM(ext->tab_name_ptr);
+        if(ext->tab_name_ptr == NULL) return NULL;
+        ext->tab_name_ptr[0] = "";
+        ext->tab_cnt         = 0;
+
+        /* Set a size which fits into the parent.
+         * 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)));
+
+        ext->content = lv_cont_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);
+        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);
+
+        /*Set the default styles*/
+        lv_theme_t * th = lv_theme_get_current();
+        if(th) {
+            lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BG, 
th->style.tabview.bg);
+            lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_INDIC, 
th->style.tabview.indic);
+            lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_BG, 
th->style.tabview.btn.bg);
+            lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_REL, 
th->style.tabview.btn.rel);
+            lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_PR, 
th->style.tabview.btn.pr);
+            lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_TGL_REL, 
th->style.tabview.btn.tgl_rel);
+            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_pretty);//transp);
+            lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_INDIC, 
&lv_style_plain_color);
+        }
+    }
+    /*Copy an existing tab view*/
+    else {
+        lv_tabview_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->point_last.x           = 0;
+        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);
+#if LV_USE_ANIMATION
+        ext->anim_time = copy_ext->anim_time;
+#endif
+
+        ext->tab_name_ptr = lv_mem_alloc(sizeof(char *));
+        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);
+
+        uint16_t i;
+        lv_obj_t * new_tab;
+        lv_obj_t * copy_tab;
+        for(i = 0; i < copy_ext->tab_cnt; i++) {
+            new_tab  = lv_tabview_add_tab(new_tabview, 
copy_ext->tab_name_ptr[i]);
+            copy_tab = lv_tabview_get_tab(copy, i);
+            lv_page_set_style(new_tab, LV_PAGE_STYLE_BG, 
lv_page_get_style(copy_tab, LV_PAGE_STYLE_BG));
+            lv_page_set_style(new_tab, LV_PAGE_STYLE_SCRL, 
lv_page_get_style(copy_tab, LV_PAGE_STYLE_SCRL));
+            lv_page_set_style(new_tab, LV_PAGE_STYLE_SB, 
lv_page_get_style(copy_tab, LV_PAGE_STYLE_SB));
+        }
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_tabview);
+    }
+
+    LV_LOG_INFO("tab view created");
+
+    return new_tabview;
+}
+
+/**
+ * Delete all children of the scrl object, without deleting scrl child.
+ * @param tabview pointer to an object
+ */
+void lv_tabview_clean(lv_obj_t * tabview)
+{
+    LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
+    lv_obj_t * scrl = lv_page_get_scrl(tabview);
+    lv_obj_clean(scrl);
+}
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Add a new tab with the given name
+ * @param tabview pointer to Tab view object where to ass the new tab
+ * @param name the text on the tab button
+ * @return pointer to the created page object (lv_page). You can create your 
content here
+ */
+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_tight);
+    lv_page_set_style(h, LV_PAGE_STYLE_SCRL, &lv_style_transp);//plain_color);
+
+    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_ASSERT_MEM(name_dm);
+    if(name_dm == NULL) return NULL;
+    strcpy(name_dm, name);
+
+    ext->tab_cnt++;
+
+    switch(ext->btns_pos) {
+        case LV_TABVIEW_BTNS_POS_TOP:
+        case LV_TABVIEW_BTNS_POS_BOTTOM:
+            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((void*)ext->tab_name_ptr, 
sizeof(char *) * (ext->tab_cnt * 2));
+            break;
+    }
+
+    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.
+     * Method: clean extra \n when switch from LV_TABVIEW_BTNS_POS_LEFT or 
LV_TABVIEW_BTNS_POS_RIGHT
+     * 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;
+    }
+
+    /* The button matrix's map still points to the old `tab_name_ptr` which 
might be freed by
+     * `lv_mem_realloc`. So make its current map invalid*/
+    lv_btnm_ext_t * btnm_ext = lv_obj_get_ext_attr(ext->btns);
+    btnm_ext->map_p          = NULL;
+
+    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;
+    }
+
+    tabview_realign(tabview); /*Set the size of the pages, tab buttons and 
indicator*/
+
+    lv_tabview_set_tab_act(tabview, ext->tab_cur, false);
+
+    return h;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new tab
+ * @param tabview pointer to Tab view object
+ * @param id index of a tab to load
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: 
change the value immediately
+ */
+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);
+
+    if(id >= ext->tab_cnt) id = ext->tab_cnt - 1;
+
+    lv_btnm_clear_btn_ctrl(ext->btns, ext->tab_cur, LV_BTNM_CTRL_TGL_STATE);
+
+    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;
+    }
+
+    if(anim == LV_ANIM_OFF || lv_tabview_get_anim_time(tabview) == 0) {
+        lv_obj_set_x(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.end            = cont_x;
+        a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_x;
+        a.path_cb        = lv_anim_path_linear;
+        a.ready_cb       = NULL;
+        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);
+    }
+#endif
+
+    /*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;
+
+    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);
+            const lv_style_t * style_tabs = lv_tabview_get_style(tabview, 
LV_TABVIEW_STYLE_BTN_BG);
+            lv_coord_t max_h = lv_obj_get_height(ext->btns) - 
style_tabs->body.padding.top - style_tabs->body.padding.bottom;
+
+            if(ext->tab_cnt) indic_pos = (max_h * ext->tab_cur) / ext->tab_cnt;
+            else  indic_pos = 0;
+            break;
+    }
+
+#if LV_USE_ANIMATION
+    if(anim == LV_ANIM_OFF || ext->anim_time == 0)
+#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;
+        }
+    }
+#if LV_USE_ANIMATION
+    else {
+        lv_anim_t a;
+        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;
+        }
+
+        a.path_cb        = lv_anim_path_linear;
+        a.ready_cb       = NULL;
+        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);
+    }
+#endif
+
+    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_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
+    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
+ * @param anim_time_ms time of animation in milliseconds
+ */
+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;
+#else
+    (void)tabview;
+    (void)anim_time;
+#endif
+}
+
+/**
+ * Set the style of a tab view
+ * @param tabview pointer to a tan view object
+ * @param type which style should be set
+ * @param style pointer to the new style
+ */
+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;
+    }
+}
+
+/**
+ * Set the position of tab select buttons
+ * @param tabview pointer to a tan view object
+ * @param btns_pos which button position
+ */
+void lv_tabview_set_btns_pos(lv_obj_t * tabview, lv_tabview_btns_pos_t 
btns_pos)
+{
+    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_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
+    lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
+
+    ext->btns_hide = en;
+    tabview_realign(tabview);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the index of the currently active tab
+ * @param tabview pointer to Tab view object
+ * @return the active btn index
+ */
+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;
+}
+
+/**
+ * Get the number of tabs
+ * @param tabview pointer to Tab view object
+ * @return btn count
+ */
+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;
+}
+
+/**
+ * Get the page (content area) of a tab
+ * @param tabview pointer to Tab view object
+ * @param id index of the btn (>= 0)
+ * @return pointer to page (lv_page) object
+ */
+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);
+    uint16_t i             = 0;
+    lv_obj_t * page        = lv_obj_get_child_back(ext->content, NULL);
+
+    while(page != NULL && i != id) {
+        i++;
+        page = lv_obj_get_child_back(ext->content, page);
+    }
+
+    if(i == id) return page;
+
+    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_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
+    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
+ * @return time of animation in milliseconds
+ */
+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;
+#else
+    (void)tabview;
+    return 0;
+#endif
+}
+
+/**
+ * Get a style of a tab view
+ * @param tabview pointer to a ab view object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+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;
+    }
+
+    return style;
+}
+
+/**
+ * Get position of tab select buttons
+ * @param tabview pointer to a ab view object
+ */
+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_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
+    lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
+
+    return ext->btns_hide;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Signal function of the Tab view
+ * @param tabview pointer to a Tab view 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_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * 
param)
+{
+    lv_res_t res;
+
+    /* 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) {
+        uint8_t i;
+        for(i = 0; ext->tab_name_ptr[i][0] != '\0'; i++) 
lv_mem_free(ext->tab_name_ptr[i]);
+
+        lv_mem_free(ext->tab_name_ptr);
+        ext->tab_name_ptr = NULL;
+        ext->btns         = NULL; /*These objects were children so they are 
already invalid*/
+        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))) {
+            tabview_realign(tabview);
+        }
+    } else if(sign == LV_SIGNAL_RELEASED) {
+#if LV_USE_GROUP
+        /*If released by a KEYPAD or ENCODER then really the tab buttons 
should be released.
+         * So simulate a CLICK on the tab buttons*/
+        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)))) {
+            lv_event_send(ext->btns, LV_EVENT_CLICKED, lv_event_get_data());
+        }
+#endif
+    } else if(sign == LV_SIGNAL_FOCUS || sign == LV_SIGNAL_DEFOCUS || sign == 
LV_SIGNAL_CONTROL) {
+        /* The button matrix is not in a group (the tab view is in it) but it 
should handle the
+         * group signals. So propagate the related signals to the button 
matrix manually*/
+        if(ext->btns) {
+            ext->btns->signal_cb(ext->btns, sign, param);
+        }
+
+        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_set_pressed(ext->btns, ext->tab_cur);
+                }
+#endif
+            } else {
+                lv_btnm_set_pressed(ext->btns, ext->tab_cur);
+            }
+        }
+    } else if(sign == LV_SIGNAL_GET_EDITABLE) {
+        bool * editable = (bool *)param;
+        *editable       = true;
+    }
+
+    return res;
+}
+
+/**
+ * Signal function of a tab's page
+ * @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)
+{
+    lv_res_t res;
+
+    /* Include the ancient signal function */
+    res = page_signal(tab_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_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;
+}
+/**
+ * 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;
+    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, 
"");
+
+    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;
+        }
+    } 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;
+
+        /*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);
+
+                uint16_t id = ext->tab_cur;
+                if(lv_obj_get_base_dir(tabview) == LV_BIDI_DIR_RTL) {
+                    id = (ext->tab_cnt - (id + 1));
+                }
+                lv_obj_set_x(ext->indic, indic_size * id + 
tabs_style->body.padding.inner * id +
+                                             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;
+        }
+    }
+}
+
+/**
+ * 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;
+
+    int16_t tab_cur = ext->tab_cur;
+    if(page_x1 > treshold) {
+            if(lv_obj_get_base_dir(tabview) == LV_BIDI_DIR_RTL) tab_cur++;
+            else tab_cur--;
+    } else if(page_x2 < treshold) {
+            if(lv_obj_get_base_dir(tabview) == LV_BIDI_DIR_RTL) tab_cur--;
+            else tab_cur++;
+    }
+
+    if(tab_cur > ext->tab_cnt - 1) tab_cur = ext->tab_cnt - 1;
+    else 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);
+
+    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;
+}
+
+/**
+ * Called when a tab button is clicked
+ * @param tab_btnm pointer to the tab's button matrix object
+ * @param event type of the event
+ */
+static void tab_btnm_event_cb(lv_obj_t * tab_btnm, lv_event_t event)
+{
+    if(event != LV_EVENT_CLICKED) return;
+
+    uint16_t btn_id = lv_btnm_get_active_btn(tab_btnm);
+    if(btn_id == LV_BTNM_BTN_NONE) return;
+
+    lv_btnm_clear_btn_ctrl_all(tab_btnm, LV_BTNM_CTRL_TGL_STATE);
+    lv_btnm_set_btn_ctrl(tab_btnm, btn_id, LV_BTNM_CTRL_TGL_STATE);
+
+    lv_obj_t * tabview = lv_obj_get_parent(tab_btnm);
+
+    uint32_t id_prev = lv_tabview_get_tab_act(tabview);
+    lv_tabview_set_tab_act(tabview, btn_id, 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;
+}
+
+/**
+ * Realign and resize the elements of Tab view
+ * @param tabview pointer to a Tab view object
+ */
+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));
+
+    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;
+        }
+    }
+
+    lv_tabview_set_tab_act(tabview, ext->tab_cur, LV_ANIM_OFF);
+}
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_tabview.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_tabview.h
new file mode 100755
index 0000000..f7546d0
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_tabview.h
@@ -0,0 +1,231 @@
+/**
+ * @file lv_tabview.h
+ *
+ */
+
+#ifndef LV_TABVIEW_H
+#define LV_TABVIEW_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_TABVIEW != 0
+
+/*Testing of dependencies*/
+#if LV_USE_BTNM == 0
+#error "lv_tabview: lv_btnm is required. Enable it in lv_conf.h (LV_USE_BTNM  
1) "
+#endif
+
+#if LV_USE_PAGE == 0
+#error "lv_tabview: lv_page is required. Enable it in lv_conf.h (LV_USE_PAGE  
1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "../lv_objx/lv_win.h"
+#include "../lv_objx/lv_page.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/** 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 };
+typedef uint8_t lv_tabview_btns_pos_t;
+
+/*Data of tab*/
+typedef struct
+{
+    /*Ext. of ancestor*/
+    /*New data for this type */
+    lv_obj_t * btns;
+    lv_obj_t * indic;
+    lv_obj_t * content; /*A rectangle to show the current tab*/
+    const char ** tab_name_ptr;
+    lv_point_t point_last;
+    uint16_t tab_cur;
+    uint16_t tab_cnt;
+#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_ext_t;
+
+enum {
+    LV_TABVIEW_STYLE_BG,
+    LV_TABVIEW_STYLE_INDIC,
+    LV_TABVIEW_STYLE_BTN_BG,
+    LV_TABVIEW_STYLE_BTN_REL,
+    LV_TABVIEW_STYLE_BTN_PR,
+    LV_TABVIEW_STYLE_BTN_TGL_REL,
+    LV_TABVIEW_STYLE_BTN_TGL_PR,
+};
+typedef uint8_t lv_tabview_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a Tab view object
+ * @param par pointer to an object, it will be the parent of the new tab
+ * @param copy pointer to a tab object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created tab
+ */
+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 tabview pointer to an object
+ */
+void lv_tabview_clean(lv_obj_t * tabview);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Add a new tab with the given name
+ * @param tabview pointer to Tab view object where to ass the new tab
+ * @param name the text on the tab button
+ * @return pointer to the created page object (lv_page). You can create your 
content here
+ */
+lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new tab
+ * @param tabview pointer to Tab view object
+ * @param id index of a tab to load
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: 
change the value immediately
+ */
+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
+ * @param anim_time time of animation in milliseconds
+ */
+void lv_tabview_set_anim_time(lv_obj_t * tabview, uint16_t anim_time);
+
+/**
+ * Set the style of a tab view
+ * @param tabview pointer to a tan view object
+ * @param type which style should be set
+ * @param style pointer to the new style
+ */
+void lv_tabview_set_style(lv_obj_t * tabview, lv_tabview_style_t type, const 
lv_style_t * style);
+
+/**
+ * Set the position of tab select buttons
+ * @param tabview pointer to a tab view object
+ * @param btns_pos which button position
+ */
+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
+ *====================*/
+
+/**
+ * Get the index of the currently active tab
+ * @param tabview pointer to Tab view object
+ * @return the active tab index
+ */
+uint16_t lv_tabview_get_tab_act(const lv_obj_t * tabview);
+
+/**
+ * Get the number of tabs
+ * @param tabview pointer to Tab view object
+ * @return tab count
+ */
+uint16_t lv_tabview_get_tab_count(const lv_obj_t * tabview);
+/**
+ * Get the page (content area) of a tab
+ * @param tabview pointer to Tab view object
+ * @param id index of the tab (>= 0)
+ * @return pointer to page (lv_page) object
+ */
+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
+ * @return time of animation in milliseconds
+ */
+uint16_t lv_tabview_get_anim_time(const lv_obj_t * tabview);
+
+/**
+ * Get a style of a tab view
+ * @param tabview pointer to a ab view object
+ * @param type which style should be get
+ * @return style pointer to a style
+ */
+const lv_style_t * lv_tabview_get_style(const lv_obj_t * tabview, 
lv_tabview_style_t type);
+
+/**
+ * Get position of tab select buttons
+ * @param tabview pointer to a ab view object
+ */
+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
+ **********************/
+
+#endif /*LV_USE_TABVIEW*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_TABVIEW_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_tileview.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_tileview.c
new file mode 100755
index 0000000..184bcbd
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_tileview.c
@@ -0,0 +1,574 @@
+/**
+ * @file lv_tileview.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_tileview.h"
+#if LV_USE_TILEVIEW != 0
+
+#include <stdbool.h>
+#include "lv_cont.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)  */
+#endif
+#else
+#undef LV_TILEVIEW_DEF_ANIM_TIME
+#define LV_TILEVIEW_DEF_ANIM_TIME 0 /*No animations*/
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+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);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_signal_cb_t ancestor_scrl_signal;
+static lv_design_cb_t ancestor_design;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a tileview object
+ * @param par pointer to an object, it will be the parent of the new tileview
+ * @param copy pointer to a tileview object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created tileview
+ */
+lv_obj_t * lv_tileview_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("tileview create started");
+
+    /*Create the ancestor of tileview*/
+    lv_obj_t * new_tileview = lv_page_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) 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' */
+#if LV_USE_ANIMATION
+    ext->anim_time = LV_TILEVIEW_DEF_ANIM_TIME;
+#endif
+    ext->act_id.x      = 0;
+    ext->act_id.y      = 0;
+    ext->valid_pos     = NULL;
+    ext->valid_pos_cnt = 0;
+
+    /*The signal and design functions are not copied so set them here*/
+    lv_obj_set_signal_cb(new_tileview, lv_tileview_signal);
+    lv_obj_set_signal_cb(lv_page_get_scrl(new_tileview), 
lv_tileview_scrl_signal);
+
+    /*Init the new tileview*/
+    if(copy == NULL) {
+        /* Set a size which fits into the parent.
+         * 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_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) {
+            lv_page_set_style(new_tileview, LV_PAGE_STYLE_BG, 
th->style.tileview.bg);
+            lv_page_set_style(new_tileview, LV_PAGE_STYLE_SCRL, 
th->style.tileview.scrl);
+            lv_page_set_style(new_tileview, LV_PAGE_STYLE_SB, 
th->style.tileview.sb);
+        } else {
+            lv_page_set_style(new_tileview, LV_PAGE_STYLE_BG, 
&lv_style_transp_tight);
+            lv_page_set_style(new_tileview, LV_PAGE_STYLE_SCRL, 
&lv_style_transp_tight);
+        }
+    }
+    /*Copy an existing tileview*/
+    else {
+        lv_tileview_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        ext->act_id.x                = copy_ext->act_id.x;
+        ext->act_id.y                = copy_ext->act_id.y;
+        ext->valid_pos               = copy_ext->valid_pos;
+        ext->valid_pos_cnt           = copy_ext->valid_pos_cnt;
+#if LV_USE_ANIMATION
+        ext->anim_time = copy_ext->anim_time;
+#endif
+
+        /*Refresh the style with new signal function*/
+        lv_obj_refresh_style(new_tileview);
+    }
+
+    LV_LOG_INFO("tileview created");
+
+    return new_tileview;
+}
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Register an object on the tileview. The register object will able to slide 
the tileview
+ * @param tileview pointer to a Tileview object
+ * @param element pointer to an object
+ */
+void lv_tileview_add_element(lv_obj_t * tileview, lv_obj_t * element)
+{
+    LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
+    LV_ASSERT_NULL(tileview);
+
+    /* 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);
+
+    /* 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);
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * 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_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)
+{
+    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;
+
+    /*If valid pos. is selected do nothing*/
+    uint16_t i;
+    for(i = 0; i < valid_pos_cnt; i++) {
+        if(valid_pos[i].x == ext->act_id.x && valid_pos[i].y == ext->act_id.y) 
{
+            return;
+        }
+    }
+
+    /*Set a valid position if now an invalid is selected*/
+    if(valid_pos_cnt > 0) {
+        lv_tileview_set_tile_act(tileview, valid_pos[0].x, valid_pos[0].y, 
LV_ANIM_OFF);
+    }
+}
+
+/**
+ * Set 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...)
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: 
change the value immediately
+ */
+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
+
+    lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
+
+    uint32_t tile_id;
+    bool valid = false;
+    for(tile_id = 0; tile_id < ext->valid_pos_cnt; tile_id++) {
+        if(ext->valid_pos[tile_id].x == x && ext->valid_pos[tile_id].y == y) {
+            valid = true;
+        }
+    }
+
+    if(valid == false) return; /*Don't load not valid tiles*/
+
+    ext->act_id.x = x;
+    ext->act_id.y = y;
+
+    lv_coord_t x_coord = -x * lv_obj_get_width(tileview);
+    lv_coord_t y_coord = -y * lv_obj_get_height(tileview);
+    lv_obj_t * scrl    = lv_page_get_scrl(tileview);
+    if(anim) {
+#if LV_USE_ANIMATION
+        lv_coord_t x_act = lv_obj_get_x(scrl);
+        lv_coord_t y_act = lv_obj_get_y(scrl);
+
+        lv_anim_t a;
+        a.var            = scrl;
+        a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_x;
+        a.path_cb        = lv_anim_path_linear;
+        a.ready_cb       = NULL;
+        a.act_time       = 0;
+        a.time           = ext->anim_time;
+        a.playback       = 0;
+        a.playback_pause = 0;
+        a.repeat         = 0;
+        a.repeat_pause   = 0;
+
+        if(x_coord != x_act) {
+            a.start = x_act;
+            a.end   = x_coord;
+            lv_anim_create(&a);
+        }
+
+        if(y_coord != y_act) {
+            a.start   = y_act;
+            a.end     = y_coord;
+            a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_y;
+            lv_anim_create(&a);
+        }
+#endif
+    } else {
+        lv_obj_set_pos(scrl, x_coord, y_coord);
+    }
+
+    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 a style of a tileview.
+ * @param tileview pointer to tileview object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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;
+    }
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/*
+ * New object specific "get" functions come here
+ */
+
+/**
+ * Get style of a tileview.
+ * @param tileview pointer to tileview object
+ * @param type which style should be get
+ * @return style pointer to the style
+ */
+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;
+    }
+
+    return style;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/*
+ * New object specific "other" functions come here
+ */
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Signal function of the tileview
+ * @param tileview pointer to a tileview 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_tileview_signal(lv_obj_t * tileview, lv_signal_t sign, void 
* param)
+{
+    lv_res_t res;
+
+    /* 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')*/
+    }
+
+    return res;
+}
+
+/**
+ * Signal function of the tileview scrollable
+ * @param tileview pointer to the scrollable part of the tileview 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_tileview_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, 
void * param)
+{
+
+    lv_res_t res;
+
+    /* Include the ancient signal function */
+    res = ancestor_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 * tileview         = lv_obj_get_parent(scrl);
+    const lv_style_t * style_bg = lv_tileview_get_style(tileview, 
LV_TILEVIEW_STYLE_MAIN);
+
+    /*Apply constraint on moving of the tileview*/
+    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
+                }
+
+                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_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
+                }
+
+                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_obj_set_y(scrl, -ext->act_id.y * 
lv_obj_get_height(tileview) + style_bg->body.padding.top);
+            if(ext->drag_hor == 0)
+                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
+ */
+static void drag_end_handler(lv_obj_t * tileview)
+{
+    lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
+    lv_indev_t * indev      = lv_indev_get_act();
+    lv_point_t point_act;
+    lv_indev_get_point(indev, &point_act);
+    lv_obj_t * scrl = lv_page_get_scrl(tileview);
+    lv_point_t p;
+
+    p.x = -(scrl->coords.x1 - lv_obj_get_width(tileview) / 2);
+    p.y = -(scrl->coords.y1 - lv_obj_get_height(tileview) / 2);
+
+    /*From the drag vector (drag throw) predict the end position*/
+    if(ext->drag_hor) {
+        lv_point_t vect;
+        lv_indev_get_vect(indev, &vect);
+        lv_coord_t predict = 0;
+
+        while(vect.x != 0) {
+            predict += vect.x;
+            vect.x = vect.x * (100 - LV_INDEV_DEF_DRAG_THROW) / 100;
+        }
+
+        p.x -= predict;
+    } else if(ext->drag_ver) {
+        lv_point_t vect;
+        lv_indev_get_vect(indev, &vect);
+        lv_coord_t predict = 0;
+
+        while(vect.y != 0) {
+            predict += vect.y;
+            vect.y = vect.y * (100 - LV_INDEV_DEF_DRAG_THROW) / 100;
+        }
+
+        p.y -= predict;
+    }
+
+    /*Get the index of the tile*/
+    p.x = p.x / lv_obj_get_width(tileview);
+    p.y = p.y / lv_obj_get_height(tileview);
+
+    /*Max +- move*/
+    lv_coord_t x_move = p.x - ext->act_id.x;
+    lv_coord_t y_move = p.y - ext->act_id.y;
+    if(x_move < -1) x_move = -1;
+    if(x_move > 1) x_move = 1;
+    if(y_move < -1) y_move = -1;
+    if(y_move > 1) y_move = 1;
+
+    /*Set the new tile*/
+    lv_tileview_set_tile_act(tileview, ext->act_id.x + x_move, ext->act_id.y + 
y_move, true);
+}
+
+static bool set_valid_drag_dirs(lv_obj_t * tileview)
+{
+
+    lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
+    if(ext->valid_pos == NULL) return false;
+
+    ext->drag_bottom_en = 0;
+    ext->drag_top_en    = 0;
+    ext->drag_left_en   = 0;
+    ext->drag_right_en  = 0;
+
+    uint16_t i;
+    for(i = 0; i < ext->valid_pos_cnt; i++) {
+        if(ext->valid_pos[i].x == ext->act_id.x && ext->valid_pos[i].y == 
ext->act_id.y - 1) ext->drag_top_en = 1;
+        if(ext->valid_pos[i].x == ext->act_id.x && ext->valid_pos[i].y == 
ext->act_id.y + 1) ext->drag_bottom_en = 1;
+        if(ext->valid_pos[i].x == ext->act_id.x - 1 && ext->valid_pos[i].y == 
ext->act_id.y) ext->drag_left_en = 1;
+        if(ext->valid_pos[i].x == ext->act_id.x + 1 && ext->valid_pos[i].y == 
ext->act_id.y) ext->drag_right_en = 1;
+    }
+
+    return true;
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_tileview.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_tileview.h
new file mode 100755
index 0000000..60e4098
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_tileview.h
@@ -0,0 +1,178 @@
+/**
+ * @file lv_tileview.h
+ *
+ */
+
+#ifndef LV_TILEVIEW_H
+#define LV_TILEVIEW_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_TILEVIEW != 0
+
+#include "../lv_objx/lv_page.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/*Data of tileview*/
+typedef struct
+{
+    lv_page_ext_t page;
+    /*New data for this type */
+    const lv_point_t * valid_pos;
+    uint16_t valid_pos_cnt;
+#if LV_USE_ANIMATION
+    uint16_t anim_time;
+#endif
+    lv_point_t act_id;
+    uint8_t drag_top_en : 1;
+    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*/
+enum {
+    LV_TILEVIEW_STYLE_MAIN,
+};
+typedef uint8_t lv_tileview_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a tileview objects
+ * @param par pointer to an object, it will be the parent of the new tileview
+ * @param copy pointer to a tileview object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created tileview
+ */
+lv_obj_t * lv_tileview_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Register an object on the tileview. The register object will able to slide 
the tileview
+ * @param tileview pointer to a Tileview object
+ * @param element pointer to an object
+ */
+void lv_tileview_add_element(lv_obj_t * tileview, lv_obj_t * element);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * 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_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);
+
+/**
+ * Set 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...)
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: 
change the value immediately
+ */
+void lv_tileview_set_tile_act(lv_obj_t * tileview, lv_coord_t x, lv_coord_t y, 
lv_anim_enable_t anim);
+
+/**
+ * Enable the edge flash effect. (Show an arc when the an edge is reached)
+ * @param tileview pointer to a Tileview
+ * @param en true or false to enable/disable end flash
+ */
+static inline void lv_tileview_set_edge_flash(lv_obj_t * tileview, bool en)
+{
+    lv_page_set_edge_flash(tileview, en);
+}
+
+/**
+ * Set the animation time for the Tile view
+ * @param tileview pointer to a page object
+ * @param anim_time animation time in milliseconds
+ */
+static inline void lv_tileview_set_anim_time(lv_obj_t * tileview, uint16_t 
anim_time)
+{
+    lv_page_set_anim_time(tileview, anim_time);
+}
+
+/**
+ * Set a style of a tileview.
+ * @param tileview pointer to tileview object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_tileview_set_style(lv_obj_t * tileview, lv_tileview_style_t type, 
const lv_style_t * style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the scroll propagation property
+ * @param tileview pointer to a Tileview
+ * @return true or false
+ */
+static inline bool lv_tileview_get_edge_flash(lv_obj_t * tileview)
+{
+    return lv_page_get_edge_flash(tileview);
+}
+
+/**
+ * Get the animation time for the Tile view
+ * @param tileview pointer to a page object
+ * @return animation time in milliseconds
+ */
+static inline uint16_t lv_tileview_get_anim_time(lv_obj_t * tileview)
+{
+    return lv_page_get_anim_time(tileview);
+}
+
+/**
+ * Get style of a tileview.
+ * @param tileview pointer to tileview object
+ * @param type which style should be get
+ * @return style pointer to the style
+ */
+const lv_style_t * lv_tileview_get_style(const lv_obj_t * tileview, 
lv_tileview_style_t type);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_TILEVIEW*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_TILEVIEW_H*/
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_win.c 
b/scriptsrcs/lvgl/src/lv_objx/lv_win.c
new file mode 100755
index 0000000..03c689a
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_win.c
@@ -0,0 +1,610 @@
+/**
+ * @file lv_win.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#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
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static lv_res_t lv_win_signal(lv_obj_t * win, lv_signal_t sign, void * param);
+static void lv_win_realign(lv_obj_t * win);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a window objects
+ * @param par pointer to an object, it will be the parent of the new window
+ * @param copy pointer to a window object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created window
+ */
+lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+    LV_LOG_TRACE("window create started");
+
+    /*Create the ancestor object*/
+    lv_obj_t * new_win = lv_obj_create(par, copy);
+    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_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+
+    ext->page          = NULL;
+    ext->header        = NULL;
+    ext->title         = NULL;
+    ext->style_btn_rel = &lv_style_btn_rel;
+    ext->style_btn_pr  = &lv_style_btn_pr;
+    ext->btn_size      = (LV_DPI) / 2;
+
+    /*Init the new window object*/
+    if(copy == NULL) {
+        /* Set a size which fits into the parent.
+         * Don't use `par` directly because if the window is created on a page 
it is moved to the
+         * scrollable so the parent has changed */
+        lv_obj_set_size(new_win, 
lv_obj_get_width_fit(lv_obj_get_parent(new_win)),
+                        lv_obj_get_height_fit(lv_obj_get_parent(new_win)));
+
+        lv_obj_set_pos(new_win, 0, 0);
+        lv_obj_set_style(new_win, &lv_style_pretty);
+
+        ext->page = lv_page_create(new_win, NULL);
+        lv_obj_set_protect(ext->page, LV_PROTECT_PARENT);
+        lv_page_set_sb_mode(ext->page, LV_SB_MODE_AUTO);
+        lv_page_set_style(ext->page, LV_PAGE_STYLE_BG, &lv_style_transp_fit);
+
+        /*Create a holder for the header*/
+        ext->header = lv_obj_create(new_win, NULL);
+        /*Move back the header because it is automatically moved to the 
scrollable */
+        lv_obj_set_protect(ext->header, LV_PROTECT_PARENT);
+        lv_obj_set_parent(ext->header, new_win);
+
+        /*Create a title on the header*/
+        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) {
+            lv_win_set_style(new_win, LV_WIN_STYLE_BG, th->style.win.bg);
+            lv_win_set_style(new_win, LV_WIN_STYLE_SB, th->style.win.sb);
+            lv_win_set_style(new_win, LV_WIN_STYLE_HEADER, 
th->style.win.header);
+            lv_win_set_style(new_win, LV_WIN_STYLE_CONTENT, 
th->style.win.content);
+            lv_win_set_style(new_win, LV_WIN_STYLE_BTN_REL, 
th->style.win.btn.rel);
+            lv_win_set_style(new_win, LV_WIN_STYLE_BTN_PR, 
th->style.win.btn.pr);
+        } else {
+            lv_win_set_style(new_win, LV_WIN_STYLE_BG, &lv_style_plain);
+            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);
+        }
+    }
+    /*Copy an existing object*/
+    else {
+        lv_win_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+        /*Create the objects*/
+        ext->header   = lv_obj_create(new_win, copy_ext->header);
+        ext->title    = lv_label_create(ext->header, copy_ext->title);
+        ext->page     = lv_page_create(new_win, copy_ext->page);
+        ext->btn_size = copy_ext->btn_size;
+
+        /*Copy the control buttons*/
+        lv_obj_t * child;
+        lv_obj_t * cbtn;
+        child = lv_obj_get_child_back(copy_ext->header, NULL);
+        child = lv_obj_get_child_back(copy_ext->header, child); /*Sip the 
title*/
+        while(child != NULL) {
+            cbtn = lv_btn_create(ext->header, child);
+            lv_img_create(cbtn, lv_obj_get_child(child, NULL));
+            child = lv_obj_get_child_back(copy_ext->header, child);
+        }
+
+        lv_obj_set_signal_cb(new_win, lv_win_signal);
+    }
+
+    /*Refresh the style with new signal function*/
+    lv_obj_refresh_style(new_win);
+
+    lv_win_realign(new_win);
+
+    LV_LOG_INFO("window created");
+
+    return new_win;
+}
+
+/**
+ * Delete all children of the scrl object, without deleting scrl child.
+ * @param win pointer to an object
+ */
+void lv_win_clean(lv_obj_t * win)
+{
+    LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
+    lv_obj_t * scrl = lv_page_get_scrl(win);
+    lv_obj_clean(scrl);
+}
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Add control button to the header of the window
+ * @param win pointer to a window object
+ * @param img_src an image source ('lv_img_t' variable, path to file or a 
symbol)
+ * @return pointer to the created button object
+ */
+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);
+    lv_btn_set_style(btn, LV_BTN_STYLE_REL, ext->style_btn_rel);
+    lv_btn_set_style(btn, LV_BTN_STYLE_PR, ext->style_btn_pr);
+    lv_obj_set_size(btn, ext->btn_size, ext->btn_size);
+
+    lv_obj_t * img = lv_img_create(btn, NULL);
+    lv_obj_set_click(img, false);
+    lv_img_set_src(img, img_src);
+
+    lv_win_realign(win);
+
+    return btn;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Can be assigned to a window control button to close the window
+ * @param btn pointer to the control button on teh widows header
+ * @param evet the event type
+ */
+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);
+
+        lv_obj_del(win);
+    }
+}
+
+/**
+ * Set the title of a window
+ * @param win pointer to a window object
+ * @param title string of the new title
+ */
+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);
+    lv_win_realign(win);
+}
+
+/**
+ * Set the control button size of a window
+ * @param win pointer to a window object
+ * @param size control button size
+ */
+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;
+
+    ext->btn_size = 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
+ * @param layout the layout from 'lv_layout_t'
+ */
+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);
+}
+
+/**
+ * Set the scroll bar mode of a window
+ * @param win pointer to a window object
+ * @param sb_mode the new scroll bar mode from  'lv_sb_mode_t'
+ */
+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);
+}
+/**
+ * Set focus animation duration on `lv_win_focus()`
+ * @param win pointer to a window object
+ * @param anim_time duration of animation [ms]
+ */
+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);
+}
+
+/**
+ * Set a style of a window
+ * @param win pointer to a window object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+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) {
+        case LV_WIN_STYLE_BG:
+            lv_obj_set_style(win, style);
+            lv_win_realign(win);
+            break;
+        case LV_WIN_STYLE_CONTENT: lv_page_set_style(ext->page, 
LV_PAGE_STYLE_SCRL, style); break;
+        case LV_WIN_STYLE_SB: lv_page_set_style(ext->page, LV_PAGE_STYLE_SB, 
style); break;
+        case LV_WIN_STYLE_HEADER:
+            lv_obj_set_style(ext->header, style);
+            lv_win_realign(win);
+            break;
+        case LV_WIN_STYLE_BTN_REL: ext->style_btn_rel = style; break;
+        case LV_WIN_STYLE_BTN_PR: ext->style_btn_pr = style; break;
+    }
+
+    /*Refresh the existing buttons*/
+    if(type == LV_WIN_STYLE_BTN_REL || type == LV_WIN_STYLE_BTN_PR) {
+        lv_obj_t * btn;
+        btn = lv_obj_get_child_back(ext->header, NULL);
+        btn = lv_obj_get_child_back(ext->header, btn); /*Skip the title*/
+        while(btn != NULL) {
+            if(type == LV_WIN_STYLE_BTN_REL)
+                lv_btn_set_style(btn, LV_BTN_STYLE_REL, style);
+            else
+                lv_btn_set_style(btn, LV_BTN_STYLE_PR, style);
+            btn = lv_obj_get_child_back(ext->header, btn);
+        }
+    }
+}
+
+/**
+ * Set drag status of a window. If set to 'true' window can be dragged like on 
a PC.
+ * @param win pointer to a window object
+ * @param en whether dragging is enabled
+ */
+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);
+    lv_obj_set_drag(win, en);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the title of a window
+ * @param win pointer to a window object
+ * @return title string of the window
+ */
+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);
+}
+
+/**
+ * Get the content holder object of window (`lv_page`) to allow additional 
customization
+ * @param win pointer to a window object
+ * @return the Page object where the window's content is
+ */
+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;
+}
+
+/**
+ * Get the control button size of a window
+ * @param win pointer to a window object
+ * @return control button size
+ */
+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;
+}
+
+/**
+ * Get the pointer of a widow from one of  its control button.
+ * It is useful in the action of the control buttons where only button is 
known.
+ * @param ctrl_btn pointer to a control button of a window
+ * @return pointer to the window of 'ctrl_btn'
+ */
+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);
+
+    return win;
+}
+
+/**
+ * Get the layout of a window
+ * @param win pointer to a window object
+ * @return the layout of the window (from 'lv_layout_t')
+ */
+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);
+}
+
+/**
+ * Get the scroll bar mode of a window
+ * @param win pointer to a window object
+ * @return the scroll bar mode of the window (from 'lv_sb_mode_t')
+ */
+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);
+}
+
+/**
+ * Get focus animation duration
+ * @param win pointer to a window object
+ * @return duration of animation [ms]
+ */
+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));
+}
+
+/**
+ * Get width of the content area (page scrollable) of the window
+ * @param win pointer to a window object
+ * @return the width of the content_bg area
+ */
+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);
+
+    return lv_obj_get_width(scrl) - style_scrl->body.padding.left - 
style_scrl->body.padding.right;
+}
+
+/**
+ * Get a style of a window
+ * @param win pointer to a button object
+ * @param type which style window be get
+ * @return style pointer to a style
+ */
+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);
+
+    switch(type) {
+        case LV_WIN_STYLE_BG: style = lv_obj_get_style(win); break;
+        case LV_WIN_STYLE_CONTENT: style = lv_page_get_style(ext->page, 
LV_PAGE_STYLE_SCRL); break;
+        case LV_WIN_STYLE_SB: style = lv_page_get_style(ext->page, 
LV_PAGE_STYLE_SB); break;
+        case LV_WIN_STYLE_HEADER: style = lv_obj_get_style(ext->header); break;
+        case LV_WIN_STYLE_BTN_REL: style = ext->style_btn_rel; break;
+        case LV_WIN_STYLE_BTN_PR: style = ext->style_btn_pr; break;
+        default: style = NULL; break;
+    }
+
+    return style;
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Focus on an object. It ensures that the object will be visible in the 
window.
+ * @param win pointer to a window object
+ * @param obj pointer to an object to focus (must be in the window)
+ * @param anim_en LV_ANIM_ON focus with an animation; LV_ANIM_OFF focus 
without animation
+ */
+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);
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Signal function of the window
+ * @param win pointer to a window 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_win_signal(lv_obj_t * win, lv_signal_t sign, void * param)
+{
+    lv_res_t res;
+
+    /* 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*/
+        lv_obj_t * page = ext->page;
+        if(page != NULL) {
+            lv_obj_t * child;
+            child = lv_obj_get_child(win, NULL);
+            while(child != NULL) {
+                if(lv_obj_is_protected(child, LV_PROTECT_PARENT) == false) {
+                    lv_obj_t * tmp = child;
+                    child          = lv_obj_get_child(win, child); /*Get the 
next child before move this*/
+                    lv_obj_set_parent(tmp, page);
+                } else {
+                    child = lv_obj_get_child(win, child);
+                }
+            }
+        }
+    } else if(sign == LV_SIGNAL_STYLE_CHG) {
+        lv_win_realign(win);
+    } else if(sign == LV_SIGNAL_CORD_CHG) {
+        /*If the size is changed refresh the window*/
+        if(lv_area_get_width(param) != lv_obj_get_width(win) || 
lv_area_get_height(param) != lv_obj_get_height(win)) {
+            lv_win_realign(win);
+        }
+    } else if(sign == LV_SIGNAL_CLEANUP) {
+        ext->header = NULL; /*These objects were children so they are already 
invalid*/
+        ext->page   = NULL;
+        ext->title  = NULL;
+    } else if(sign == LV_SIGNAL_CONTROL) {
+        /*Forward all the control signals to the page*/
+        ext->page->signal_cb(ext->page, sign, param);
+    }
+
+    return res;
+}
+
+/**
+ * Realign the building elements of a window
+ * @param win pointer to window objectker
+ */
+static void lv_win_realign(lv_obj_t * win)
+{
+    lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
+
+    if(ext->page == NULL || ext->header == NULL || ext->title == NULL) return;
+
+    const lv_style_t * header_style = lv_win_get_style(win, 
LV_WIN_STYLE_HEADER);
+    lv_obj_set_size(ext->header, lv_obj_get_width(win),
+                    ext->btn_size + header_style->body.padding.top + 
header_style->body.padding.bottom);
+
+    bool first_btn = true;
+    lv_obj_t * btn;
+    lv_obj_t * btn_prev = NULL;
+    /*Refresh the size of all control buttons*/
+    btn = lv_obj_get_child_back(ext->header, NULL);
+    btn = lv_obj_get_child_back(ext->header, btn); /*Skip the title*/
+    while(btn != NULL) {
+        lv_obj_set_size(btn, ext->btn_size, ext->btn_size);
+        if(first_btn) {
+            lv_obj_align(btn, ext->header, LV_ALIGN_IN_RIGHT_MID, 
-header_style->body.padding.right, 0);
+            first_btn = false;
+        } else {
+            lv_obj_align(btn, btn_prev, LV_ALIGN_OUT_LEFT_MID, 
-header_style->body.padding.inner, 0);
+        }
+        btn_prev = btn;
+        btn      = lv_obj_get_child_back(ext->header, btn);
+    }
+
+    const lv_style_t * style_header = lv_win_get_style(win, 
LV_WIN_STYLE_HEADER);
+    lv_obj_align(ext->title, NULL, LV_ALIGN_IN_LEFT_MID, 
style_header->body.padding.left, 0);
+
+    lv_obj_set_pos(ext->header, 0, 0);
+
+    lv_obj_set_size(ext->page, lv_obj_get_width(win), lv_obj_get_height(win) - 
lv_obj_get_height(ext->header));
+    lv_obj_align(ext->page, ext->header, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
+}
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_objx/lv_win.h 
b/scriptsrcs/lvgl/src/lv_objx/lv_win.h
new file mode 100755
index 0000000..28560cf
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_objx/lv_win.h
@@ -0,0 +1,302 @@
+/**
+ * @file lv_win.h
+ *
+ */
+
+#ifndef LV_WIN_H
+#define LV_WIN_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_WIN != 0
+
+/*Testing of dependencies*/
+#if LV_USE_BTN == 0
+#error "lv_win: lv_btn is required. Enable it in lv_conf.h (LV_USE_BTN  1) "
+#endif
+
+#if LV_USE_LABEL == 0
+#error "lv_win: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL  1) 
"
+#endif
+
+#if LV_USE_IMG == 0
+#error "lv_win: lv_img is required. Enable it in lv_conf.h (LV_USE_IMG  1) "
+#endif
+
+#if LV_USE_PAGE == 0
+#error "lv_win: lv_page is required. Enable it in lv_conf.h (LV_USE_PAGE  1) "
+#endif
+
+#include "../lv_core/lv_obj.h"
+#include "lv_cont.h"
+#include "lv_btn.h"
+#include "lv_label.h"
+#include "lv_img.h"
+#include "lv_page.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/*Data of window*/
+typedef struct
+{
+    /*Ext. of ancestor*/
+    /*New data for this type */
+    lv_obj_t * page;                  /*Pointer to a page which holds the 
content*/
+    lv_obj_t * header;                /*Pointer to the header container of the 
window*/
+    lv_obj_t * title;                 /*Pointer to the title label of the 
window*/
+    const lv_style_t * style_btn_rel; /*Control button releases style*/
+    const lv_style_t * style_btn_pr;  /*Control button pressed style*/
+    lv_coord_t btn_size;              /*Size of the control buttons (square)*/
+} lv_win_ext_t;
+
+/** Window styles. */
+enum {
+    LV_WIN_STYLE_BG, /**< Window object background style. */
+    LV_WIN_STYLE_CONTENT, /**< Window content style. */
+    LV_WIN_STYLE_SB, /**< Window scrollbar style. */
+    LV_WIN_STYLE_HEADER, /**< Window titlebar background style. */
+    LV_WIN_STYLE_BTN_REL, /**< Same meaning as ordinary button styles. */
+    LV_WIN_STYLE_BTN_PR,
+};
+typedef uint8_t lv_win_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a window objects
+ * @param par pointer to an object, it will be the parent of the new window
+ * @param copy pointer to a window object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created window
+ */
+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 win pointer to an object
+ */
+void lv_win_clean(lv_obj_t * win);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Add control button to the header of the window
+ * @param win pointer to a window object
+ * @param img_src an image source ('lv_img_t' variable, path to file or a 
symbol)
+ * @return pointer to the created button object
+ */
+lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * img_src);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Can be assigned to a window control button to close the window
+ * @param btn pointer to the control button on teh widows header
+ * @param evet the event type
+ */
+void lv_win_close_event_cb(lv_obj_t * btn, lv_event_t event);
+
+/**
+ * Set the title of a window
+ * @param win pointer to a window object
+ * @param title string of the new title
+ */
+void lv_win_set_title(lv_obj_t * win, const char * title);
+
+/**
+ * Set the control button size of a window
+ * @param win pointer to a window object
+ * @return control button size
+ */
+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
+ * @param layout the layout from 'lv_layout_t'
+ */
+void lv_win_set_layout(lv_obj_t * win, lv_layout_t layout);
+
+/**
+ * Set the scroll bar mode of a window
+ * @param win pointer to a window object
+ * @param sb_mode the new scroll bar mode from  'lv_sb_mode_t'
+ */
+void lv_win_set_sb_mode(lv_obj_t * win, lv_sb_mode_t sb_mode);
+
+/**
+ * Set focus animation duration on `lv_win_focus()`
+ * @param win pointer to a window object
+ * @param anim_time duration of animation [ms]
+ */
+void lv_win_set_anim_time(lv_obj_t * win, uint16_t anim_time);
+
+/**
+ * Set a style of a window
+ * @param win pointer to a window object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_win_set_style(lv_obj_t * win, lv_win_style_t type, const lv_style_t * 
style);
+
+/**
+ * Set drag status of a window. If set to 'true' window can be dragged like on 
a PC.
+ * @param win pointer to a window object
+ * @param en whether dragging is enabled
+ */
+void lv_win_set_drag(lv_obj_t * win, bool en);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the title of a window
+ * @param win pointer to a window object
+ * @return title string of the window
+ */
+const char * lv_win_get_title(const lv_obj_t * win);
+
+/**
+ * Get the content holder object of window (`lv_page`) to allow additional 
customization
+ * @param win pointer to a window object
+ * @return the Page object where the window's content is
+ */
+lv_obj_t * lv_win_get_content(const lv_obj_t * win);
+
+/**
+ * Get the control button size of a window
+ * @param win pointer to a window object
+ * @return control button size
+ */
+lv_coord_t lv_win_get_btn_size(const lv_obj_t * win);
+
+/**
+ * Get the pointer of a widow from one of  its control button.
+ * It is useful in the action of the control buttons where only button is 
known.
+ * @param ctrl_btn pointer to a control button of a window
+ * @return pointer to the window of 'ctrl_btn'
+ */
+lv_obj_t * lv_win_get_from_btn(const lv_obj_t * ctrl_btn);
+
+/**
+ * Get the layout of a window
+ * @param win pointer to a window object
+ * @return the layout of the window (from 'lv_layout_t')
+ */
+lv_layout_t lv_win_get_layout(lv_obj_t * win);
+
+/**
+ * Get the scroll bar mode of a window
+ * @param win pointer to a window object
+ * @return the scroll bar mode of the window (from 'lv_sb_mode_t')
+ */
+lv_sb_mode_t lv_win_get_sb_mode(lv_obj_t * win);
+
+/**
+ * Get focus animation duration
+ * @param win pointer to a window object
+ * @return duration of animation [ms]
+ */
+uint16_t lv_win_get_anim_time(const lv_obj_t * win);
+
+/**
+ * Get width of the content area (page scrollable) of the window
+ * @param win pointer to a window object
+ * @return the width of the content area
+ */
+lv_coord_t lv_win_get_width(lv_obj_t * win);
+
+/**
+ * Get a style of a window
+ * @param win pointer to a button object
+ * @param type which style window be get
+ * @return style pointer to a style
+ */
+const lv_style_t * lv_win_get_style(const lv_obj_t * win, lv_win_style_t type);
+
+/**
+ * Get drag status of a window. If set to 'true' window can be dragged like on 
a PC.
+ * @param win pointer to a window object
+ * @return whether window is draggable
+ */
+static inline bool lv_win_get_drag(const lv_obj_t * win)
+{
+    return lv_obj_get_drag(win);
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**
+ * Focus on an object. It ensures that the object will be visible in the 
window.
+ * @param win pointer to a window object
+ * @param obj pointer to an object to focus (must be in the window)
+ * @param anim_en LV_ANIM_ON focus with an animation; LV_ANIM_OFF focus 
without animation
+ */
+void lv_win_focus(lv_obj_t * win, lv_obj_t * obj, lv_anim_enable_t anim_en);
+
+/**
+ * Scroll the window horizontally
+ * @param win pointer to a window object
+ * @param dist the distance to scroll (< 0: scroll right; > 0 scroll left)
+ */
+static inline void lv_win_scroll_hor(lv_obj_t * win, lv_coord_t dist)
+{
+    lv_win_ext_t * ext = (lv_win_ext_t *)lv_obj_get_ext_attr(win);
+    lv_page_scroll_hor(ext->page, dist);
+}
+/**
+ * Scroll the window vertically
+ * @param win pointer to a window object
+ * @param dist the distance to scroll (< 0: scroll down; > 0 scroll up)
+ */
+static inline void lv_win_scroll_ver(lv_obj_t * win, lv_coord_t dist)
+{
+    lv_win_ext_t * ext = (lv_win_ext_t *)lv_obj_get_ext_attr(win);
+    lv_page_scroll_ver(ext->page, dist);
+}
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /*LV_USE_WIN*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_WIN_H*/
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme.c 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme.c
new file mode 100755
index 0000000..21cc38c
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme.c
@@ -0,0 +1,124 @@
+/**
+ * @file lv_theme.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_theme.h"
+#include "../lv_core/lv_obj.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+#if LV_THEME_LIVE_UPDATE == 0
+static lv_theme_t * current_theme;
+#else
+/* If live update is used then a big `lv_style_t` array is used to store the 
real styles of the
+ * theme not only pointers. On `lv_theme_set_current` the styles of the theme 
are copied to this
+ * array. The pointers in `current_theme` are initialized to point to the 
styles in the array. This
+ * way the theme styles will always point to the same memory address even 
after theme is change.
+ * (The pointers in the theme points to the styles declared by the theme 
itself) */
+
+/* Store the styles in this array. */
+static lv_style_t th_styles[LV_THEME_STYLE_COUNT];
+static bool inited = false;
+static lv_theme_t current_theme;
+#endif
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Set a theme for the system.
+ * From now, all the created objects will use styles from this theme by default
+ * @param th pointer to theme (return value of: 'lv_theme_init_xxx()')
+ */
+void lv_theme_set_current(lv_theme_t * th)
+{
+#if LV_THEME_LIVE_UPDATE == 0
+    current_theme = th;
+
+#if LV_USE_GROUP
+    /*Copy group style modification callback functions*/
+    memcpy(&current_theme->group, &th->group, sizeof(th->group));
+#endif
+
+    /*Let the object know their style might change*/
+    lv_obj_report_style_mod(NULL);
+
+#else
+    uint32_t style_num = sizeof(th->style) / sizeof(lv_style_t *); /*Number of 
styles in a theme*/
+
+    if(!inited) {
+        /*Initialize the style pointers `current_theme` to point to the 
`th_styles` style array */
+        uint16_t i;
+        lv_style_t ** cur_th_style_p = (lv_style_t **)&current_theme.style;
+        for(i = 0; i < style_num; i++) {
+            uintptr_t adr = (uintptr_t)&th_styles[i];
+            memcpy(&cur_th_style_p[i], &adr, sizeof(lv_style_t *));
+        }
+        inited = true;
+    }
+
+    /*Copy the styles pointed by the new theme to the `th_styles` style array*/
+    uint16_t i;
+    lv_style_t ** th_style = (lv_style_t **)&th->style;
+    for(i = 0; i < style_num; i++) {
+        uintptr_t s = (uintptr_t)th_style[i];
+        if(s) memcpy(&th_styles[i], (void *)s, sizeof(lv_style_t));
+    }
+
+#if LV_USE_GROUP
+    /*Copy group style modification callback functions*/
+    memcpy(&current_theme.group, &th->group, sizeof(th->group));
+#endif
+
+    /*Let the object know their style might change*/
+    lv_obj_report_style_mod(NULL);
+
+#endif
+
+#if LV_USE_GROUP
+    lv_group_report_style_mod(NULL);
+#endif
+}
+
+/**
+ * Get the current system theme.
+ * @return pointer to the current system theme. NULL if not set.
+ */
+lv_theme_t * lv_theme_get_current(void)
+{
+#if LV_THEME_LIVE_UPDATE == 0
+    return current_theme;
+#else
+    if(!inited)
+        return NULL;
+    else
+        return &current_theme;
+#endif
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme.h 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme.h
new file mode 100755
index 0000000..28b532c
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme.h
@@ -0,0 +1,382 @@
+/**
+ *@file lv_themes.h
+ *
+ */
+
+#ifndef LV_THEMES_H
+#define LV_THEMES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *    INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include "../lv_core/lv_style.h"
+#include "../lv_core/lv_group.h"
+
+/*********************
+ *    DEFINES
+ *********************/
+
+/**********************
+ *    TYPEDEFS
+ **********************/
+
+/**
+ * A theme in LittlevGL consists of many styles bound together.
+ * 
+ * There is a style for each object type, as well as a generic style for
+ * backgrounds and panels.
+ */
+typedef struct
+{
+    struct
+    {
+        lv_style_t * scr;
+        lv_style_t * bg;
+        lv_style_t * panel;
+
+#if LV_USE_CONT != 0
+        lv_style_t * cont;
+#endif
+
+#if LV_USE_BTN != 0
+        struct
+        {
+            lv_style_t * rel;
+            lv_style_t * pr;
+            lv_style_t * tgl_rel;
+            lv_style_t * tgl_pr;
+            lv_style_t * ina;
+        } btn;
+#endif
+
+#if LV_USE_IMGBTN != 0
+        struct
+        {
+            lv_style_t * rel;
+            lv_style_t * pr;
+            lv_style_t * tgl_rel;
+            lv_style_t * tgl_pr;
+            lv_style_t * ina;
+        } imgbtn;
+#endif
+
+#if LV_USE_LABEL != 0
+        struct
+        {
+            lv_style_t * prim;
+            lv_style_t * sec;
+            lv_style_t * hint;
+        } label;
+#endif
+
+#if LV_USE_IMG != 0
+        struct
+        {
+            lv_style_t * light;
+            lv_style_t * dark;
+        } img;
+#endif
+
+#if LV_USE_LINE != 0
+        struct
+        {
+            lv_style_t * decor;
+        } line;
+#endif
+
+#if LV_USE_LED != 0
+        lv_style_t * led;
+#endif
+
+#if LV_USE_BAR != 0
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * indic;
+        } bar;
+#endif
+
+#if LV_USE_SLIDER != 0
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * indic;
+            lv_style_t * knob;
+        } slider;
+#endif
+
+#if LV_USE_LMETER != 0
+        lv_style_t * lmeter;
+#endif
+
+#if LV_USE_GAUGE != 0
+        lv_style_t * gauge;
+#endif
+
+#if LV_USE_ARC != 0
+        lv_style_t * arc;
+#endif
+
+#if LV_USE_PRELOAD != 0
+        lv_style_t * preload;
+#endif
+
+#if LV_USE_SW != 0
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * indic;
+            lv_style_t * knob_off;
+            lv_style_t * knob_on;
+        } sw;
+#endif
+
+#if LV_USE_CHART != 0
+        lv_style_t * chart;
+#endif
+
+#if LV_USE_CALENDAR != 0
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * header;
+            lv_style_t * header_pr;
+            lv_style_t * day_names;
+            lv_style_t * highlighted_days;
+            lv_style_t * inactive_days;
+            lv_style_t * week_box;
+            lv_style_t * today_box;
+        } calendar;
+#endif
+
+#if LV_USE_CB != 0
+        struct
+        {
+            lv_style_t * bg;
+            struct
+            {
+                lv_style_t * rel;
+                lv_style_t * pr;
+                lv_style_t * tgl_rel;
+                lv_style_t * tgl_pr;
+                lv_style_t * ina;
+            } box;
+        } cb;
+#endif
+
+#if LV_USE_BTNM != 0
+        struct
+        {
+            lv_style_t * bg;
+            struct
+            {
+                lv_style_t * rel;
+                lv_style_t * pr;
+                lv_style_t * tgl_rel;
+                lv_style_t * tgl_pr;
+                lv_style_t * ina;
+            } btn;
+        } btnm;
+#endif
+
+#if LV_USE_KB != 0
+        struct
+        {
+            lv_style_t * bg;
+            struct
+            {
+                lv_style_t * rel;
+                lv_style_t * pr;
+                lv_style_t * tgl_rel;
+                lv_style_t * tgl_pr;
+                lv_style_t * ina;
+            } btn;
+        } kb;
+#endif
+
+#if LV_USE_MBOX != 0
+        struct
+        {
+            lv_style_t * bg;
+            struct
+            {
+                lv_style_t * bg;
+                lv_style_t * rel;
+                lv_style_t * pr;
+            } btn;
+        } mbox;
+#endif
+
+#if LV_USE_PAGE != 0
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * scrl;
+            lv_style_t * sb;
+        } page;
+#endif
+
+#if LV_USE_TA != 0
+        struct
+        {
+            lv_style_t * area;
+            lv_style_t * oneline;
+            lv_style_t * cursor;
+            lv_style_t * sb;
+        } ta;
+#endif
+
+#if LV_USE_SPINBOX != 0
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * cursor;
+            lv_style_t * sb;
+        } spinbox;
+#endif
+
+#if LV_USE_LIST
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * scrl;
+            lv_style_t * sb;
+            struct
+            {
+                lv_style_t * rel;
+                lv_style_t * pr;
+                lv_style_t * tgl_rel;
+                lv_style_t * tgl_pr;
+                lv_style_t * ina;
+            } btn;
+        } list;
+#endif
+
+#if LV_USE_DDLIST != 0
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * sel;
+            lv_style_t * sb;
+        } ddlist;
+#endif
+
+#if LV_USE_ROLLER != 0
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * sel;
+        } roller;
+#endif
+
+#if LV_USE_TABVIEW != 0
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * indic;
+            struct
+            {
+                lv_style_t * bg;
+                lv_style_t * rel;
+                lv_style_t * pr;
+                lv_style_t * tgl_rel;
+                lv_style_t * tgl_pr;
+            } btn;
+        } tabview;
+#endif
+
+#if LV_USE_TILEVIEW != 0
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * scrl;
+            lv_style_t * sb;
+        } tileview;
+#endif
+
+#if LV_USE_TABLE != 0
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * cell;
+        } table;
+#endif
+
+#if LV_USE_WIN != 0
+        struct
+        {
+            lv_style_t * bg;
+            lv_style_t * sb;
+            lv_style_t * header;
+            lv_style_t * content;
+            struct
+            {
+                lv_style_t * rel;
+                lv_style_t * pr;
+            } btn;
+        } win;
+#endif
+    } style;
+
+#if LV_USE_GROUP
+    struct
+    {
+        /* The `x` in the names inidicates that inconsistence becasue
+         * the group related function are stored in the theme.*/
+        lv_group_style_mod_cb_t style_mod_xcb;
+        lv_group_style_mod_cb_t style_mod_edit_xcb;
+    } group;
+#endif
+} lv_theme_t;
+
+/**********************
+ *  GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Set a theme for the system.
+ * From now, all the created objects will use styles from this theme by default
+ * @param th pointer to theme (return value of: 'lv_theme_init_xxx()')
+ */
+void lv_theme_set_current(lv_theme_t * th);
+
+/**
+ * Get the current system theme.
+ * @return pointer to the current system theme. NULL if not set.
+ */
+lv_theme_t * lv_theme_get_current(void);
+
+/**********************
+ *    MACROS
+ **********************/
+
+/* Returns number of styles within the `lv_theme_t` structure. */
+#define LV_THEME_STYLE_COUNT (sizeof(((lv_theme_t *)0)->style) / 
sizeof(lv_style_t *))
+
+/**********************
+ *     POST INCLUDE
+ *********************/
+#include "lv_theme_templ.h"
+#include "lv_theme_default.h"
+#include "lv_theme_alien.h"
+#include "lv_theme_night.h"
+#include "lv_theme_zen.h"
+#include "lv_theme_mono.h"
+#include "lv_theme_nemo.h"
+#include "lv_theme_material.h"
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_THEMES_H*/
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_alien.c 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_alien.c
new file mode 100755
index 0000000..987a363
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_alien.c
@@ -0,0 +1,958 @@
+/**
+ * @file lv_theme_alien.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_theme.h"
+
+#if LV_USE_THEME_ALIEN
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+static uint16_t _hue;
+static lv_font_t * _font;
+
+static lv_theme_t theme;
+static lv_style_t def;
+static lv_style_t bg;
+static lv_style_t scr;
+static lv_style_t panel; /*General fancy background (e.g. to chart or ta)*/
+static lv_style_t sb;
+static lv_style_t btn_rel, btn_pr, btn_trel, btn_tpr, btn_ina;
+
+#if LV_USE_BAR
+static lv_style_t bar_bg, bar_indic;
+#endif
+
+#if LV_USE_SLIDER
+static lv_style_t slider_knob;
+#endif
+
+#if LV_USE_LMETER
+static lv_style_t lmeter_bg;
+#endif
+
+#if LV_USE_DDLIST
+static lv_style_t ddlist_bg, ddlist_sel;
+#endif
+
+#if LV_USE_BTNM
+static lv_style_t btnm_bg, btnm_rel, btnm_pr, btnm_trel, btnm_ina;
+#endif
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+static void basic_init(void)
+{
+    /*Default*/
+    lv_style_copy(&def, &lv_style_plain);
+    def.body.opa = LV_OPA_COVER;
+    def.glass    = 0;
+
+    def.body.main_color     = lv_color_hex3(0x222);
+    def.body.grad_color     = lv_color_hex3(0x222);
+    def.body.radius         = 0;
+    def.body.padding.left   = LV_DPI / 8;
+    def.body.padding.right  = LV_DPI / 8;
+    def.body.padding.top    = LV_DPI / 8;
+    def.body.padding.bottom = LV_DPI / 8;
+    def.body.padding.inner  = LV_DPI / 8;
+    def.body.border.color   = LV_COLOR_SILVER;
+    def.body.border.width   = 1;
+    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;
+    def.text.letter_space = 1;
+    def.text.line_space   = 2;
+
+    def.image.color   = lv_color_hex3(0xDDD);
+    def.image.intense = LV_OPA_TRANSP;
+
+    def.line.color = lv_color_hex3(0xDDD);
+    def.line.width = 1;
+
+    /*Background*/
+    lv_style_copy(&bg, &def);
+    bg.body.main_color   = lv_color_hex3(0x333);
+    bg.body.grad_color   = lv_color_hex3(0x333);
+    bg.body.border.width = 2;
+    bg.body.border.color = lv_color_hex3(0x666);
+    bg.body.shadow.color = LV_COLOR_SILVER;
+
+    lv_style_copy(&scr, &bg);
+    scr.body.padding.bottom = 0;
+    scr.body.padding.top    = 0;
+    scr.body.padding.left   = 0;
+    scr.body.padding.right  = 0;
+
+    /*Panel*/
+    lv_style_copy(&panel, &def);
+    panel.body.radius       = LV_DPI / 10;
+    panel.body.main_color   = lv_color_hex3(0x666);
+    panel.body.grad_color   = lv_color_hex3(0x666);
+    panel.body.border.color = lv_color_hex3(0xccc);
+    panel.body.border.width = 2;
+    panel.body.border.opa   = LV_OPA_60;
+    panel.text.color        = lv_color_hsv_to_rgb(_hue, 8, 96);
+    panel.image.color       = lv_color_hsv_to_rgb(_hue, 8, 96);
+    panel.line.color        = lv_color_hsv_to_rgb(_hue, 20, 70);
+
+    /*Scrollbar*/
+    lv_style_copy(&sb, &def);
+    sb.body.opa            = LV_OPA_50;
+    sb.body.radius         = LV_RADIUS_CIRCLE;
+    sb.body.border.color   = LV_COLOR_SILVER;
+    sb.body.border.opa     = LV_OPA_40;
+    sb.body.border.width   = 1;
+    sb.body.main_color     = lv_color_hsv_to_rgb(_hue, 33, 92);
+    sb.body.grad_color     = lv_color_hsv_to_rgb(_hue, 33, 92);
+    sb.body.padding.left   = 1;
+    sb.body.padding.right  = 1;
+    sb.body.padding.top    = 1;
+    sb.body.padding.bottom = 1;
+    sb.body.padding.inner  = LV_DPI / 15; /*Scrollbar width*/
+
+    theme.style.bg    = &bg;
+    theme.style.scr   = &scr;
+    theme.style.panel = &panel;
+}
+
+static void cont_init(void)
+{
+#if LV_USE_CONT != 0
+    theme.style.cont = &panel;
+#endif
+}
+
+static void btn_init(void)
+{
+#if LV_USE_BTN != 0
+    lv_style_copy(&btn_rel, &def);
+    btn_rel.glass               = 0;
+    btn_rel.body.opa            = LV_OPA_TRANSP;
+    btn_rel.body.radius         = LV_RADIUS_CIRCLE;
+    btn_rel.body.border.width   = 2;
+    btn_rel.body.border.color   = lv_color_hsv_to_rgb(_hue, 70, 90);
+    btn_rel.body.border.opa     = LV_OPA_80;
+    btn_rel.body.padding.left   = LV_DPI / 4;
+    btn_rel.body.padding.right  = LV_DPI / 4;
+    btn_rel.body.padding.top    = LV_DPI / 6;
+    btn_rel.body.padding.bottom = LV_DPI / 6;
+    btn_rel.body.padding.inner  = LV_DPI / 10;
+    btn_rel.text.color          = lv_color_hsv_to_rgb(_hue, 8, 96);
+    btn_rel.text.font           = _font;
+    btn_rel.image.color         = lv_color_hsv_to_rgb(_hue, 8, 96);
+
+    lv_style_copy(&btn_pr, &btn_rel);
+    btn_pr.body.opa        = LV_OPA_COVER;
+    btn_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 50);
+    btn_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 50, 50);
+    btn_pr.body.border.opa = LV_OPA_60;
+    btn_pr.text.font       = _font;
+    btn_pr.text.color      = lv_color_hsv_to_rgb(_hue, 10, 100);
+    btn_pr.image.color     = lv_color_hsv_to_rgb(_hue, 10, 100);
+
+    lv_style_copy(&btn_trel, &btn_pr);
+    btn_trel.body.opa          = LV_OPA_COVER;
+    btn_trel.body.main_color   = lv_color_hsv_to_rgb(_hue, 50, 60);
+    btn_trel.body.grad_color   = lv_color_hsv_to_rgb(_hue, 50, 60);
+    btn_trel.body.border.opa   = LV_OPA_60;
+    btn_trel.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 90);
+    btn_trel.text.font         = _font;
+    btn_trel.text.color        = lv_color_hsv_to_rgb(_hue, 0, 100);
+    btn_trel.image.color       = lv_color_hsv_to_rgb(_hue, 0, 100);
+
+    lv_style_copy(&btn_tpr, &btn_trel);
+    btn_tpr.body.opa          = LV_OPA_COVER;
+    btn_tpr.body.main_color   = lv_color_hsv_to_rgb(_hue, 50, 50);
+    btn_tpr.body.grad_color   = lv_color_hsv_to_rgb(_hue, 50, 50);
+    btn_tpr.body.border.opa   = LV_OPA_60;
+    btn_tpr.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 70);
+    btn_tpr.text.font         = _font;
+    btn_tpr.text.color        = lv_color_hsv_to_rgb(_hue, 10, 90);
+    btn_tpr.image.color       = lv_color_hsv_to_rgb(_hue, 10, 90);
+
+    lv_style_copy(&btn_ina, &btn_rel);
+    btn_ina.body.border.opa   = LV_OPA_60;
+    btn_ina.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 50);
+    btn_ina.text.font         = _font;
+    btn_ina.text.color        = lv_color_hsv_to_rgb(_hue, 10, 90);
+
+    theme.style.btn.rel     = &btn_rel;
+    theme.style.btn.pr      = &btn_pr;
+    theme.style.btn.tgl_rel = &btn_trel;
+    theme.style.btn.tgl_pr  = &btn_tpr;
+    theme.style.btn.ina     = &btn_ina;
+#endif
+}
+
+static void label_init(void)
+{
+#if LV_USE_LABEL != 0
+    static lv_style_t label_prim, label_sec, label_hint;
+
+    lv_style_copy(&label_prim, &def);
+    label_prim.text.font  = _font;
+    label_prim.text.color = lv_color_hsv_to_rgb(_hue, 80, 96);
+
+    lv_style_copy(&label_sec, &label_prim);
+    label_sec.text.color = lv_color_hsv_to_rgb(_hue, 40, 85);
+
+    lv_style_copy(&label_hint, &label_prim);
+    label_hint.text.color = lv_color_hsv_to_rgb(_hue, 20, 70);
+
+    theme.style.label.prim = &label_prim;
+    theme.style.label.sec  = &label_sec;
+    theme.style.label.hint = &label_hint;
+#endif
+}
+
+static void bar_init(void)
+{
+#if LV_USE_BAR
+    lv_style_copy(&bar_bg, &def);
+    bar_bg.body.opa            = LV_OPA_30;
+    bar_bg.body.radius         = LV_RADIUS_CIRCLE;
+    bar_bg.body.main_color     = LV_COLOR_WHITE;
+    bar_bg.body.grad_color     = LV_COLOR_SILVER;
+    bar_bg.body.border.width   = 2;
+    bar_bg.body.border.color   = LV_COLOR_SILVER;
+    bar_bg.body.border.opa     = LV_OPA_20;
+    bar_bg.body.padding.left   = 0;
+    bar_bg.body.padding.right  = 0;
+    bar_bg.body.padding.top    = LV_DPI / 10;
+    bar_bg.body.padding.bottom = LV_DPI / 10;
+    bar_bg.body.padding.inner  = 0;
+
+    lv_style_copy(&bar_indic, &def);
+    bar_indic.body.radius         = LV_RADIUS_CIRCLE;
+    bar_indic.body.border.width   = 2;
+    bar_indic.body.border.color   = LV_COLOR_SILVER;
+    bar_indic.body.border.opa     = LV_OPA_70;
+    bar_indic.body.padding.left   = 0;
+    bar_indic.body.padding.right  = 0;
+    bar_indic.body.padding.top    = 0;
+    bar_indic.body.padding.bottom = 0;
+    bar_indic.body.shadow.width   = LV_DPI / 20;
+    bar_indic.body.shadow.color   = lv_color_hsv_to_rgb(_hue, 20, 90);
+    bar_indic.body.main_color     = lv_color_hsv_to_rgb(_hue, 40, 80);
+    bar_indic.body.grad_color     = lv_color_hsv_to_rgb(_hue, 40, 80);
+
+    theme.style.bar.bg    = &bar_bg;
+    theme.style.bar.indic = &bar_indic;
+#endif
+}
+
+static void img_init(void)
+{
+#if LV_USE_IMG != 0
+    static lv_style_t img_light, img_dark;
+    lv_style_copy(&img_light, &def);
+    img_light.image.color   = lv_color_hsv_to_rgb(_hue, 15, 85);
+    img_light.image.intense = LV_OPA_80;
+
+    lv_style_copy(&img_dark, &def);
+    img_light.image.color   = lv_color_hsv_to_rgb(_hue, 85, 65);
+    img_light.image.intense = LV_OPA_80;
+
+    theme.style.img.light = &img_light;
+    theme.style.img.dark  = &img_dark;
+#endif
+}
+
+static void line_init(void)
+{
+#if LV_USE_LINE != 0
+    static lv_style_t line_decor;
+    lv_style_copy(&line_decor, &def);
+    line_decor.line.color = lv_color_hsv_to_rgb(_hue, 50, 50);
+    line_decor.line.width = 1;
+
+    theme.style.line.decor = &line_decor;
+#endif
+}
+
+static void led_init(void)
+{
+#if LV_USE_LED != 0
+    static lv_style_t led;
+    lv_style_copy(&led, &lv_style_pretty_color);
+    led.body.shadow.width = LV_DPI / 10;
+    led.body.radius       = LV_RADIUS_CIRCLE;
+    led.body.border.width = LV_DPI / 30;
+    led.body.border.opa   = LV_OPA_30;
+    led.body.main_color   = lv_color_hsv_to_rgb(_hue, 100, 100);
+    led.body.grad_color   = lv_color_hsv_to_rgb(_hue, 100, 40);
+    led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
+    led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 100, 100);
+
+    theme.style.led = &led;
+#endif
+}
+
+static void slider_init(void)
+{
+#if LV_USE_SLIDER != 0
+    lv_style_copy(&slider_knob, &def);
+    slider_knob.body.opa          = LV_OPA_60;
+    slider_knob.body.radius       = LV_RADIUS_CIRCLE;
+    slider_knob.body.main_color   = LV_COLOR_WHITE;
+    slider_knob.body.grad_color   = LV_COLOR_SILVER;
+    slider_knob.body.border.width = 1;
+    slider_knob.body.border.color = LV_COLOR_GRAY;
+    slider_knob.body.border.opa   = LV_OPA_50;
+
+    theme.style.slider.bg    = &bar_bg;
+    theme.style.slider.indic = &bar_indic;
+    theme.style.slider.knob  = &slider_knob;
+#endif
+}
+
+static void sw_init(void)
+{
+#if LV_USE_SW != 0
+    static lv_style_t sw_bg, sw_indic, sw_knob;
+    lv_style_copy(&sw_bg, &bar_bg);
+    sw_bg.body.opa            = LV_OPA_COVER;
+    sw_bg.body.padding.left   = -2;
+    sw_bg.body.padding.right  = -2;
+    sw_bg.body.padding.top    = -2;
+    sw_bg.body.padding.bottom = -2;
+    sw_bg.body.main_color     = lv_color_hex3(0x666);
+    sw_bg.body.grad_color     = lv_color_hex3(0x999);
+    sw_bg.body.border.width   = 2;
+    sw_bg.body.border.opa     = LV_OPA_50;
+
+    lv_style_copy(&sw_indic, &bar_indic);
+    sw_indic.body.shadow.width   = LV_DPI / 20;
+    sw_indic.body.padding.left   = 0;
+    sw_indic.body.padding.right  = 0;
+    sw_indic.body.padding.top    = 0;
+    sw_indic.body.padding.bottom = 0;
+
+    lv_style_copy(&sw_knob, &slider_knob);
+    sw_knob.body.opa = LV_OPA_80;
+
+    theme.style.sw.bg       = &sw_bg;
+    theme.style.sw.indic    = &sw_indic;
+    theme.style.sw.knob_off = &sw_knob;
+    theme.style.sw.knob_on  = &sw_knob;
+#endif
+}
+
+static void lmeter_init(void)
+{
+#if LV_USE_LMETER != 0
+    lv_style_copy(&lmeter_bg, &def);
+    lmeter_bg.body.main_color    = lv_color_hsv_to_rgb(_hue, 10, 70);
+    lmeter_bg.body.grad_color    = lv_color_hsv_to_rgb(_hue, 80, 80);
+    lmeter_bg.body.padding.left  = LV_DPI / 8; /*Scale line length*/
+    lmeter_bg.body.padding.right = LV_DPI / 8; /*Scale line length*/
+    lmeter_bg.line.color         = lv_color_hex3(0x222);
+    lmeter_bg.line.width         = 2;
+
+    theme.style.lmeter = &lmeter_bg;
+
+#endif
+}
+
+static void gauge_init(void)
+{
+#if LV_USE_GAUGE != 0
+    static lv_style_t gauge_bg;
+    lv_style_copy(&gauge_bg, &def);
+    gauge_bg.body.main_color     = lv_color_hsv_to_rgb(_hue, 10, 70);
+    gauge_bg.body.grad_color     = gauge_bg.body.main_color;
+    gauge_bg.body.padding.left   = LV_DPI / 16; /*Scale line length*/
+    gauge_bg.body.padding.right  = LV_DPI / 16; /*Scale line length*/
+    gauge_bg.body.padding.top    = LV_DPI / 10; /*Needle center size*/
+    gauge_bg.body.padding.bottom = LV_DPI / 10; /*Needle center size*/
+    gauge_bg.body.padding.inner  = LV_DPI / 12; /*Label - scale distance*/
+    gauge_bg.body.border.color   = lv_color_hex3(0x777);
+    gauge_bg.line.color          = lv_color_hsv_to_rgb(_hue, 80, 75);
+    gauge_bg.line.width          = 2;
+    gauge_bg.text.color          = lv_color_hsv_to_rgb(_hue, 10, 90);
+    gauge_bg.text.font           = _font;
+
+    theme.style.gauge = &gauge_bg;
+#endif
+}
+
+static void arc_init(void)
+{
+#if LV_USE_ARC != 0
+
+    static lv_style_t arc;
+    lv_style_copy(&arc, &def);
+    arc.line.width   = 8;
+    arc.line.color   = lv_color_hsv_to_rgb(_hue, 70, 90);
+    arc.line.rounded = 1;
+
+    /*For preloader*/
+    arc.body.border.width   = 2;
+    arc.body.border.color   = lv_color_hex3(0x555);
+    arc.body.padding.left   = 3;
+    arc.body.padding.right  = 3;
+    arc.body.padding.top    = 3;
+    arc.body.padding.bottom = 3;
+
+    theme.style.arc = &arc;
+#endif
+}
+
+static void preload_init(void)
+{
+#if LV_USE_PRELOAD != 0
+
+    theme.style.preload = theme.style.arc;
+#endif
+}
+
+static void chart_init(void)
+{
+#if LV_USE_CHART
+    theme.style.chart = &panel;
+#endif
+}
+
+static void calendar_init(void)
+{
+#if LV_USE_CALENDAR
+    static lv_style_t header;
+    static lv_style_t color_text;
+    static lv_style_t gray_text;
+    static lv_style_t today_box;
+
+    lv_style_copy(&header, &def);
+    header.body.radius         = 0;
+    header.body.padding.left   = LV_DPI / 12;
+    header.body.padding.right  = LV_DPI / 12;
+    header.body.padding.top    = LV_DPI / 14;
+    header.body.padding.bottom = LV_DPI / 14;
+    header.body.main_color     = lv_color_hsv_to_rgb(_hue, 30, 60);
+    header.body.grad_color     = header.body.main_color;
+    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.text.color          = lv_color_hsv_to_rgb(_hue, 5, 100);
+
+    lv_style_copy(&today_box, &header);
+    today_box.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 70);
+    today_box.body.grad_color = today_box.body.main_color;
+    today_box.body.opa        = LV_OPA_TRANSP;
+
+    lv_style_copy(&color_text, &def);
+    color_text.text.color = lv_color_hsv_to_rgb(_hue, 30, 80);
+
+    lv_style_copy(&gray_text, &def);
+    gray_text.text.color = lv_color_hsv_to_rgb(_hue, 10, 65);
+
+    theme.style.calendar.bg               = &panel;
+    theme.style.calendar.header           = &header;
+    theme.style.calendar.week_box         = &header;
+    theme.style.calendar.today_box        = &today_box;
+    theme.style.calendar.day_names        = &color_text;
+    theme.style.calendar.highlighted_days = &color_text;
+    theme.style.calendar.inactive_days    = &gray_text;
+#endif
+}
+
+static void cb_init(void)
+{
+#if LV_USE_CB != 0
+    static lv_style_t cb_bg, cb_rel, cb_pr, cb_trel, cb_tpr, cb_ina;
+    lv_style_copy(&cb_rel, &bg);
+    cb_rel.body.radius       = LV_DPI / 20;
+    cb_rel.body.border.width = 1;
+    cb_rel.body.border.color = LV_COLOR_GRAY;
+    cb_rel.body.main_color   = LV_COLOR_WHITE;
+    cb_rel.body.grad_color   = LV_COLOR_SILVER;
+
+    lv_style_copy(&cb_bg, &bg);
+    cb_bg.body.opa            = LV_OPA_TRANSP;
+    cb_bg.body.border.width   = 0;
+    cb_bg.body.padding.inner  = LV_DPI / 8;
+    cb_bg.body.padding.left   = 0;
+    cb_bg.body.padding.right  = 0;
+    cb_bg.body.padding.top    = 0;
+    cb_bg.body.padding.bottom = 0;
+    cb_bg.text.font           = _font;
+
+    lv_style_copy(&cb_pr, &cb_rel);
+    cb_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 90);
+    cb_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 82);
+
+    lv_style_copy(&cb_trel, &cb_rel);
+    cb_trel.body.border.width = 4;
+    cb_trel.body.border.color = LV_COLOR_WHITE;
+    cb_trel.body.border.opa   = LV_OPA_60;
+    cb_trel.body.main_color   = lv_color_hsv_to_rgb(_hue, 50, 82);
+    cb_trel.body.grad_color   = lv_color_hsv_to_rgb(_hue, 50, 62);
+
+    lv_style_copy(&cb_tpr, &cb_trel);
+    cb_tpr.body.border.color = LV_COLOR_SILVER;
+    cb_tpr.body.border.opa   = LV_OPA_70;
+    cb_tpr.body.main_color   = lv_color_hsv_to_rgb(_hue, 50, 72);
+    cb_tpr.body.grad_color   = lv_color_hsv_to_rgb(_hue, 50, 52);
+
+    lv_style_copy(&cb_ina, &cb_trel);
+    cb_ina.body.border.width = 1;
+    cb_ina.body.border.color = LV_COLOR_GRAY;
+    cb_ina.body.main_color   = LV_COLOR_SILVER;
+    cb_ina.body.grad_color   = LV_COLOR_SILVER;
+
+    theme.style.cb.bg          = &cb_bg;
+    theme.style.cb.box.rel     = &cb_rel;
+    theme.style.cb.box.pr      = &cb_pr;
+    theme.style.cb.box.tgl_rel = &cb_trel;
+    theme.style.cb.box.tgl_pr  = &cb_tpr;
+    theme.style.cb.box.ina     = &cb_ina;
+#endif
+}
+
+static void btnm_init(void)
+{
+#if LV_USE_BTNM
+    lv_style_copy(&btnm_bg, &lv_style_transp_tight);
+    btnm_bg.body.border.width = 1;
+    btnm_bg.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 80);
+    btnm_bg.body.border.opa   = LV_OPA_COVER;
+    btnm_bg.body.radius       = LV_DPI / 8;
+
+    lv_style_copy(&btnm_rel, &lv_style_plain);
+    btnm_rel.body.opa    = LV_OPA_TRANSP;
+    btnm_rel.body.radius = LV_DPI / 8;
+    btnm_rel.text.color  = lv_color_hsv_to_rgb(_hue, 60, 80);
+    btnm_rel.text.font   = _font;
+
+    lv_style_copy(&btnm_pr, &lv_style_plain);
+    btnm_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 70);
+    btnm_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 40, 70);
+    btnm_pr.body.radius     = LV_DPI / 8;
+    btnm_pr.text.color      = lv_color_hsv_to_rgb(_hue, 40, 40);
+    btnm_pr.text.font       = _font;
+
+    lv_style_copy(&btnm_trel, &btnm_rel);
+    btnm_trel.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 80);
+    btnm_trel.body.border.width = 3;
+
+    lv_style_copy(&btnm_ina, &btnm_rel);
+    btnm_ina.text.color = lv_color_hsv_to_rgb(_hue, 10, 60);
+
+    theme.style.btnm.bg          = &btnm_bg;
+    theme.style.btnm.btn.rel     = &btnm_rel;
+    theme.style.btnm.btn.pr      = &btnm_pr;
+    theme.style.btnm.btn.tgl_rel = &btnm_trel;
+    theme.style.btnm.btn.tgl_pr  = &btnm_pr;
+    theme.style.btnm.btn.ina     = &btnm_ina;
+#endif
+}
+
+static void kb_init(void)
+{
+#if LV_USE_KB
+    theme.style.kb.bg          = &btnm_bg;
+    theme.style.kb.btn.rel     = &btnm_rel;
+    theme.style.kb.btn.pr      = &btnm_pr;
+    theme.style.kb.btn.tgl_rel = &btnm_trel;
+    theme.style.kb.btn.tgl_pr  = &btnm_pr;
+    theme.style.kb.btn.ina     = &btnm_ina;
+#endif
+}
+
+static void mbox_init(void)
+{
+#if LV_USE_MBOX
+    static lv_style_t mbox_bg;
+    lv_style_copy(&mbox_bg, &panel);
+    mbox_bg.body.shadow.width = LV_DPI / 12;
+
+    theme.style.mbox.bg      = &mbox_bg;
+    theme.style.mbox.btn.bg  = &lv_style_transp;
+    theme.style.mbox.btn.rel = &btn_trel;
+    theme.style.mbox.btn.pr  = &btn_tpr;
+#endif
+}
+
+static void page_init(void)
+{
+#if LV_USE_PAGE
+    theme.style.page.bg   = &panel;
+    theme.style.page.scrl = &lv_style_transp_fit;
+    theme.style.page.sb   = &sb;
+#endif
+}
+
+static void ta_init(void)
+{
+#if LV_USE_TA
+    theme.style.ta.area    = &panel;
+    theme.style.ta.oneline = &panel;
+    theme.style.ta.cursor  = NULL;
+    theme.style.ta.sb      = &sb;
+#endif
+}
+
+static void spinbox_init(void)
+{
+#if LV_USE_SPINBOX
+    theme.style.spinbox.bg     = &panel;
+    theme.style.spinbox.cursor = theme.style.ta.cursor;
+    theme.style.spinbox.sb     = theme.style.ta.sb;
+#endif
+}
+
+static void list_init(void)
+{
+#if LV_USE_LIST != 0
+    static lv_style_t list_bg, list_rel, list_pr, list_trel, list_tpr, 
list_ina;
+    lv_style_copy(&list_rel, &def);
+    list_rel.body.opa          = LV_OPA_TRANSP;
+    list_rel.body.border.width = 1;
+    list_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 50, 85);
+    list_rel.body.border.opa   = LV_OPA_COVER;
+    list_rel.text.color        = lv_color_hsv_to_rgb(_hue, 10, 94);
+    list_rel.text.font         = _font;
+    list_rel.image.color       = lv_color_hsv_to_rgb(_hue, 10, 94);
+
+    lv_style_copy(&list_pr, &list_rel);
+    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);
+    list_pr.text.color      = lv_color_hsv_to_rgb(_hue, 7, 96);
+    list_pr.image.color     = lv_color_hsv_to_rgb(_hue, 7, 96);
+
+    lv_style_copy(&list_trel, &list_rel);
+    lv_style_copy(&list_tpr, &list_pr);
+    lv_style_copy(&list_ina, &def);
+
+    lv_style_copy(&list_bg, &list_rel);
+    list_bg.body.padding.left   = 0;
+    list_bg.body.padding.right  = 0;
+    list_bg.body.padding.top    = 0;
+    list_bg.body.padding.bottom = 0;
+
+    theme.style.list.sb          = &sb;
+    theme.style.list.bg          = &list_bg;
+    theme.style.list.scrl        = &lv_style_transp_tight;
+    theme.style.list.btn.rel     = &list_rel;
+    theme.style.list.btn.pr      = &list_pr;
+    theme.style.list.btn.tgl_rel = &list_trel;
+    theme.style.list.btn.tgl_pr  = &list_tpr;
+    theme.style.list.btn.ina     = &list_ina;
+#endif
+}
+
+static void ddlist_init(void)
+{
+#if LV_USE_DDLIST != 0
+    lv_style_copy(&ddlist_bg, &panel);
+    ddlist_bg.text.line_space     = LV_DPI / 8;
+    ddlist_bg.body.padding.left   = LV_DPI / 6;
+    ddlist_bg.body.padding.right  = LV_DPI / 6;
+    ddlist_bg.body.padding.top    = LV_DPI / 6;
+    ddlist_bg.body.padding.bottom = LV_DPI / 6;
+
+    lv_style_copy(&ddlist_sel, &panel);
+    ddlist_sel.body.main_color = lv_color_hsv_to_rgb(_hue, 45, 70);
+    ddlist_sel.body.grad_color = lv_color_hsv_to_rgb(_hue, 45, 70);
+    ddlist_sel.body.opa        = LV_OPA_COVER;
+    ddlist_sel.body.radius     = 0;
+
+    theme.style.ddlist.bg  = &ddlist_bg;
+    theme.style.ddlist.sel = &ddlist_sel;
+    theme.style.ddlist.sb  = &sb;
+#endif
+}
+
+static void roller_init(void)
+{
+#if LV_USE_ROLLER != 0
+    static lv_style_t roller_bg, roller_sel;
+    lv_style_copy(&roller_bg, &ddlist_bg);
+    roller_bg.text.line_space   = LV_DPI / 6;
+    roller_bg.body.radius       = LV_DPI / 20;
+    roller_bg.body.main_color   = lv_color_hex3(0x222);
+    roller_bg.body.grad_color   = lv_color_hex3(0x666);
+    roller_bg.body.border.opa   = LV_OPA_30;
+    roller_bg.text.opa          = LV_OPA_70;
+    roller_bg.text.color        = lv_color_hsv_to_rgb(_hue, 20, 70);
+    roller_bg.body.shadow.width = 0;
+
+    lv_style_copy(&roller_sel, &panel);
+    roller_sel.body.opa    = LV_OPA_TRANSP;
+    roller_sel.body.radius = 0;
+    roller_sel.text.opa    = LV_OPA_COVER;
+    roller_sel.text.color  = lv_color_hsv_to_rgb(_hue, 70, 95);
+
+    theme.style.roller.bg  = &roller_bg;
+    theme.style.roller.sel = &roller_sel;
+#endif
+}
+
+static void tabview_init(void)
+{
+#if LV_USE_TABVIEW != 0
+    static lv_style_t tab_rel, tab_pr, tab_trel, tab_tpr, tab_indic;
+    lv_style_copy(&tab_rel, &def);
+    tab_rel.body.main_color     = lv_color_hex3(0x666);
+    tab_rel.body.grad_color     = lv_color_hex3(0x666);
+    tab_rel.body.padding.left   = 0;
+    tab_rel.body.padding.right  = 0;
+    tab_rel.body.padding.top    = LV_DPI / 6;
+    tab_rel.body.padding.bottom = LV_DPI / 6;
+    tab_rel.body.padding.inner  = 0;
+    tab_rel.body.border.width   = 1;
+    tab_rel.body.border.color   = LV_COLOR_SILVER;
+    tab_rel.body.border.opa     = LV_OPA_40;
+    tab_rel.text.color          = lv_color_hex3(0xDDD);
+    tab_rel.text.font           = _font;
+
+    lv_style_copy(&tab_pr, &tab_rel);
+    tab_pr.body.main_color = lv_color_hex3(0x444);
+    tab_pr.body.grad_color = lv_color_hex3(0x444);
+
+    lv_style_copy(&tab_trel, &def);
+    tab_trel.body.opa            = LV_OPA_TRANSP;
+    tab_trel.body.padding.left   = 0;
+    tab_trel.body.padding.right  = 0;
+    tab_trel.body.padding.top    = LV_DPI / 6;
+    tab_trel.body.padding.bottom = LV_DPI / 6;
+    tab_trel.body.padding.inner  = 0;
+    tab_trel.body.border.width   = 1;
+    tab_trel.body.border.color   = LV_COLOR_SILVER;
+    tab_trel.body.border.opa     = LV_OPA_40;
+    tab_trel.text.color          = lv_color_hsv_to_rgb(_hue, 10, 94);
+    tab_trel.text.font           = _font;
+
+    lv_style_copy(&tab_tpr, &def);
+    tab_tpr.body.main_color     = LV_COLOR_GRAY;
+    tab_tpr.body.grad_color     = LV_COLOR_GRAY;
+    tab_tpr.body.padding.left   = 0;
+    tab_tpr.body.padding.right  = 0;
+    tab_tpr.body.padding.top    = LV_DPI / 6;
+    tab_tpr.body.padding.bottom = LV_DPI / 6;
+    tab_tpr.body.padding.inner  = 0;
+    tab_tpr.body.border.width   = 1;
+    tab_tpr.body.border.color   = LV_COLOR_SILVER;
+    tab_tpr.body.border.opa     = LV_OPA_40;
+    tab_tpr.text.color          = lv_color_hsv_to_rgb(_hue, 10, 94);
+    tab_tpr.text.font           = _font;
+
+    lv_style_copy(&tab_indic, &def);
+    tab_indic.body.border.width  = 0;
+    tab_indic.body.main_color    = lv_color_hsv_to_rgb(_hue, 80, 87);
+    tab_indic.body.grad_color    = lv_color_hsv_to_rgb(_hue, 80, 87);
+    tab_indic.body.padding.inner = LV_DPI / 10; /*Indicator height*/
+
+    theme.style.tabview.bg          = &bg;
+    theme.style.tabview.indic       = &tab_indic;
+    theme.style.tabview.btn.bg      = &lv_style_transp_tight;
+    theme.style.tabview.btn.rel     = &tab_rel;
+    theme.style.tabview.btn.pr      = &tab_pr;
+    theme.style.tabview.btn.tgl_rel = &tab_trel;
+    theme.style.tabview.btn.tgl_pr  = &tab_tpr;
+#endif
+}
+
+static void tileview_init(void)
+{
+#if LV_USE_TILEVIEW != 0
+    theme.style.tileview.bg   = &lv_style_transp_tight;
+    theme.style.tileview.scrl = &lv_style_transp_tight;
+    theme.style.tileview.sb   = theme.style.page.sb;
+#endif
+}
+
+static void table_init(void)
+{
+#if LV_USE_TABLE != 0
+    static lv_style_t cell;
+    lv_style_copy(&cell, &panel);
+    cell.body.radius         = 0;
+    cell.body.border.width   = 1;
+    cell.body.padding.left   = LV_DPI / 12;
+    cell.body.padding.right  = LV_DPI / 12;
+    cell.body.padding.top    = LV_DPI / 12;
+    cell.body.padding.bottom = LV_DPI / 12;
+
+    theme.style.table.bg   = &lv_style_transp_tight;
+    theme.style.table.cell = &cell;
+#endif
+}
+
+static void win_init(void)
+{
+#if LV_USE_WIN != 0
+    static lv_style_t header;
+
+    lv_style_copy(&header, &def);
+    header.body.radius         = 0;
+    header.body.padding.left   = LV_DPI / 12;
+    header.body.padding.right  = LV_DPI / 12;
+    header.body.padding.top    = LV_DPI / 20;
+    header.body.padding.bottom = LV_DPI / 20;
+    header.body.main_color     = lv_color_hsv_to_rgb(_hue, 30, 60);
+    header.body.grad_color     = header.body.main_color;
+    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.text.color          = lv_color_hsv_to_rgb(_hue, 5, 100);
+    header.image.color         = lv_color_hsv_to_rgb(_hue, 5, 100);
+
+    theme.style.win.bg      = &bg;
+    theme.style.win.sb      = &sb;
+    theme.style.win.header  = &header;
+    theme.style.win.content = &lv_style_transp;
+    theme.style.win.btn.rel = &btn_rel;
+    theme.style.win.btn.pr  = &btn_pr;
+#endif
+}
+
+#if LV_USE_GROUP
+
+static void style_mod(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = lv_color_hsv_to_rgb(_hue, 70, 90);
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 2;
+#endif
+}
+
+static void style_mod_edit(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_GREEN;
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 20;
+
+    style->body.main_color   = lv_color_mix(style->body.main_color, 
LV_COLOR_GREEN, LV_OPA_70);
+    style->body.grad_color   = lv_color_mix(style->body.grad_color, 
LV_COLOR_GREEN, LV_OPA_70);
+    style->body.shadow.color = lv_color_mix(style->body.shadow.color, 
LV_COLOR_GREEN, LV_OPA_60);
+
+    style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, 
LV_OPA_70);
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 3;
+#endif
+}
+
+#endif /*LV_USE_GROUP*/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the alien theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_alien_init(uint16_t hue, lv_font_t * font)
+{
+    if(font == NULL) font = LV_FONT_DEFAULT;
+
+    _hue  = hue;
+    _font = font;
+
+    /*For backward compatibility initialize all theme elements with a default 
style */
+    uint16_t i;
+    lv_style_t ** style_p = (lv_style_t **)&theme.style;
+    for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
+        *style_p = &def;
+        style_p++;
+    }
+
+    basic_init();
+    cont_init();
+    btn_init();
+    label_init();
+    bar_init();
+    img_init();
+    line_init();
+    led_init();
+    slider_init();
+    sw_init();
+    lmeter_init();
+    gauge_init();
+    arc_init();
+    preload_init();
+    chart_init();
+    calendar_init();
+    cb_init();
+    btnm_init();
+    kb_init();
+    mbox_init();
+    page_init();
+    ta_init();
+    spinbox_init();
+    list_init();
+    ddlist_init();
+    roller_init();
+    tabview_init();
+    tileview_init();
+    table_init();
+    win_init();
+
+#if LV_USE_GROUP
+    theme.group.style_mod_xcb      = style_mod;
+    theme.group.style_mod_edit_xcb = style_mod_edit;
+#endif
+
+    return &theme;
+}
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_alien(void)
+{
+    return &theme;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_alien.h 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_alien.h
new file mode 100755
index 0000000..a3d5851
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_alien.h
@@ -0,0 +1,59 @@
+/**
+ * @file lv_theme_alien.h
+ *
+ */
+
+#ifndef LV_THEME_ALIEN_H
+#define LV_THEME_ALIEN_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_THEME_ALIEN
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the alien theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_alien_init(uint16_t hue, lv_font_t * font);
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_alien(void);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_THEME_ALIEN_H*/
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_default.c 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_default.c
new file mode 100755
index 0000000..7a7c231
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_default.c
@@ -0,0 +1,477 @@
+/**
+ * @file lv_theme_default.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_theme.h"
+
+#if LV_USE_THEME_DEFAULT
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_theme_t theme;
+static lv_style_t def;
+static lv_style_t scr;
+
+/*Static style definitions*/
+static lv_style_t sb;
+static lv_style_t plain_bordered;
+static lv_style_t label_prim;
+static lv_style_t label_sec;
+static lv_style_t label_hint;
+
+/*Saved input parameters*/
+static uint16_t _hue;
+static lv_font_t * _font;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+static void basic_init(void)
+{
+    lv_style_copy(&def, &lv_style_pretty); /*Initialize the default style*/
+
+    lv_style_copy(&scr, &def);
+    scr.body.padding.bottom = 0;
+    scr.body.padding.top    = 0;
+    scr.body.padding.left   = 0;
+    scr.body.padding.right  = 0;
+
+    lv_style_copy(&sb, &lv_style_pretty_color);
+    sb.body.grad_color     = sb.body.main_color;
+    sb.body.padding.right  = sb.body.padding.right / 2; /*Make closer to the 
edges*/
+    sb.body.padding.bottom = sb.body.padding.bottom / 2;
+
+    lv_style_copy(&plain_bordered, &lv_style_plain);
+    plain_bordered.body.border.width = 2;
+    plain_bordered.body.border.color = lv_color_hex3(0xbbb);
+
+    theme.style.bg    = &lv_style_plain;
+    theme.style.scr   = &scr;
+    theme.style.panel = &lv_style_pretty;
+}
+
+static void btn_init(void)
+{
+#if LV_USE_BTN != 0
+    theme.style.btn.rel     = &lv_style_btn_rel;
+    theme.style.btn.pr      = &lv_style_btn_pr;
+    theme.style.btn.tgl_rel = &lv_style_btn_tgl_rel;
+    theme.style.btn.tgl_pr  = &lv_style_btn_tgl_pr;
+    theme.style.btn.ina     = &lv_style_btn_ina;
+#endif
+}
+
+static void label_init(void)
+{
+#if LV_USE_LABEL != 0
+
+    lv_style_copy(&label_prim, &lv_style_plain);
+    lv_style_copy(&label_sec, &lv_style_plain);
+    lv_style_copy(&label_hint, &lv_style_plain);
+
+    label_prim.text.color = lv_color_hex3(0x111);
+    label_sec.text.color  = lv_color_hex3(0x888);
+    label_hint.text.color = lv_color_hex3(0xaaa);
+
+    theme.style.label.prim = &label_prim;
+    theme.style.label.sec  = &label_sec;
+    theme.style.label.hint = &label_hint;
+#endif
+}
+
+static void img_init(void)
+{
+#if LV_USE_IMG != 0
+
+    theme.style.img.light = &def;
+    theme.style.img.dark  = &def;
+#endif
+}
+
+static void line_init(void)
+{
+#if LV_USE_LINE != 0
+
+    theme.style.line.decor = &def;
+#endif
+}
+
+static void led_init(void)
+{
+#if LV_USE_LED != 0
+    static lv_style_t led;
+
+    lv_style_copy(&led, &lv_style_pretty_color);
+    led.body.shadow.width = LV_DPI / 10;
+    led.body.radius       = LV_RADIUS_CIRCLE;
+    led.body.border.width = LV_DPI / 30;
+    led.body.border.opa   = LV_OPA_30;
+    led.body.shadow.color = led.body.main_color;
+
+    theme.style.led = &led;
+#endif
+}
+
+static void bar_init(void)
+{
+#if LV_USE_BAR
+
+    theme.style.bar.bg    = &lv_style_pretty;
+    theme.style.bar.indic = &lv_style_pretty_color;
+#endif
+}
+
+static void slider_init(void)
+{
+#if LV_USE_SLIDER != 0
+       static lv_style_t slider_bg;
+    lv_style_copy(&slider_bg, &lv_style_pretty);
+    slider_bg.body.padding.left   = LV_DPI / 20;
+    slider_bg.body.padding.right  = LV_DPI / 20;
+    slider_bg.body.padding.top    = LV_DPI / 20;
+    slider_bg.body.padding.bottom = LV_DPI / 20;
+
+    theme.style.slider.bg    = &slider_bg;
+    theme.style.slider.indic = &lv_style_pretty_color;
+    theme.style.slider.knob  = &lv_style_pretty;
+#endif
+}
+
+static void sw_init(void)
+{
+#if LV_USE_SW != 0
+       static lv_style_t sw_bg;
+    lv_style_copy(&sw_bg, &lv_style_pretty);
+    sw_bg.body.padding.left   = 3;
+    sw_bg.body.padding.right  = 3;
+    sw_bg.body.padding.top    = 3;
+    sw_bg.body.padding.bottom = 3;
+
+    theme.style.sw.bg       = &sw_bg;
+    theme.style.sw.indic    = &lv_style_pretty_color;
+    theme.style.sw.knob_off = &lv_style_pretty;
+    theme.style.sw.knob_on  = &lv_style_pretty;
+#endif
+}
+
+static void lmeter_init(void)
+{
+#if LV_USE_LMETER != 0
+       static lv_style_t lmeter;
+    lv_style_copy(&lmeter, &lv_style_pretty_color);
+    lmeter.line.color      = lv_color_hex3(0xddd);
+    lmeter.line.width      = 2;
+    lmeter.body.main_color = lv_color_mix(lmeter.body.main_color, 
LV_COLOR_WHITE, LV_OPA_50);
+    lmeter.body.grad_color = lv_color_mix(lmeter.body.grad_color, 
LV_COLOR_BLACK, LV_OPA_50);
+
+    theme.style.lmeter = &lmeter;
+#endif
+}
+
+static void gauge_init(void)
+{
+#if LV_USE_GAUGE != 0
+    static lv_style_t gauge;
+    lv_style_copy(&gauge, theme.style.lmeter);
+    gauge.line.color      = theme.style.lmeter->body.grad_color;
+    gauge.line.width      = 2;
+    gauge.body.main_color = lv_color_hex3(0x888);
+    gauge.body.grad_color = theme.style.lmeter->body.main_color;
+    gauge.text.color      = lv_color_hex3(0x888);
+
+    theme.style.gauge = &gauge;
+#endif
+}
+
+static void chart_init(void)
+{
+#if LV_USE_CHART
+
+    theme.style.chart = &lv_style_pretty;
+#endif
+}
+
+static void cb_init(void)
+{
+#if LV_USE_CB != 0
+
+    theme.style.cb.bg          = &lv_style_transp;
+    theme.style.cb.box.rel     = &lv_style_pretty;
+    theme.style.cb.box.pr      = &lv_style_btn_pr;
+    theme.style.cb.box.tgl_rel = &lv_style_btn_tgl_rel;
+    theme.style.cb.box.tgl_pr  = &lv_style_btn_tgl_pr;
+    theme.style.cb.box.ina     = &lv_style_btn_ina;
+#endif
+}
+
+static void btnm_init(void)
+{
+#if LV_USE_BTNM
+
+    theme.style.btnm.bg          = &lv_style_pretty;
+    theme.style.btnm.btn.rel     = &lv_style_btn_rel;
+    theme.style.btnm.btn.pr      = &lv_style_btn_pr;
+    theme.style.btnm.btn.tgl_rel = &lv_style_btn_tgl_rel;
+    theme.style.btnm.btn.tgl_pr  = &lv_style_btn_tgl_pr;
+    theme.style.btnm.btn.ina     = &lv_style_btn_ina;
+#endif
+}
+
+static void kb_init(void)
+{
+#if LV_USE_KB
+
+    theme.style.kb.bg          = &lv_style_pretty;
+    theme.style.kb.btn.rel     = &lv_style_btn_rel;
+    theme.style.kb.btn.pr      = &lv_style_btn_pr;
+    theme.style.kb.btn.tgl_rel = &lv_style_btn_tgl_rel;
+    theme.style.kb.btn.tgl_pr  = &lv_style_btn_tgl_pr;
+    theme.style.kb.btn.ina     = &lv_style_btn_ina;
+#endif
+}
+
+static void mbox_init(void)
+{
+#if LV_USE_MBOX
+
+    theme.style.mbox.bg      = &lv_style_pretty;
+    theme.style.mbox.btn.bg  = &lv_style_transp;
+    theme.style.mbox.btn.rel = &lv_style_btn_rel;
+    theme.style.mbox.btn.pr  = &lv_style_btn_tgl_pr;
+#endif
+}
+
+static void page_init(void)
+{
+#if LV_USE_PAGE
+
+    theme.style.page.bg   = &lv_style_pretty;
+    theme.style.page.scrl = &lv_style_transp_tight;
+    theme.style.page.sb   = &sb;
+#endif
+}
+
+static void ta_init(void)
+{
+#if LV_USE_TA
+
+    theme.style.ta.area    = &lv_style_pretty;
+    theme.style.ta.oneline = &lv_style_pretty;
+    theme.style.ta.cursor  = NULL;
+    theme.style.ta.sb      = &sb;
+#endif
+}
+
+static void list_init(void)
+{
+#if LV_USE_LIST != 0
+
+    theme.style.list.bg          = &lv_style_pretty;
+    theme.style.list.scrl        = &lv_style_transp_fit;
+    theme.style.list.sb          = &sb;
+    theme.style.list.btn.rel     = &lv_style_btn_rel;
+    theme.style.list.btn.pr      = &lv_style_btn_pr;
+    theme.style.list.btn.tgl_rel = &lv_style_btn_tgl_rel;
+    theme.style.list.btn.tgl_pr  = &lv_style_btn_tgl_pr;
+    theme.style.list.btn.ina     = &lv_style_btn_ina;
+#endif
+}
+
+static void ddlist_init(void)
+{
+#if LV_USE_DDLIST != 0
+
+    theme.style.ddlist.bg  = &lv_style_pretty;
+    theme.style.ddlist.sel = &lv_style_plain_color;
+    theme.style.ddlist.sb  = &sb;
+#endif
+}
+
+static void roller_init(void)
+{
+#if LV_USE_ROLLER != 0
+
+    theme.style.roller.bg  = &lv_style_pretty;
+    theme.style.roller.sel = &lv_style_plain_color;
+#endif
+}
+
+static void tabview_init(void)
+{
+#if LV_USE_TABVIEW != 0
+
+    theme.style.tabview.bg          = &plain_bordered;
+    theme.style.tabview.indic       = &lv_style_plain_color;
+    theme.style.tabview.btn.bg      = &lv_style_transp;
+    theme.style.tabview.btn.rel     = &lv_style_btn_rel;
+    theme.style.tabview.btn.pr      = &lv_style_btn_pr;
+    theme.style.tabview.btn.tgl_rel = &lv_style_btn_tgl_rel;
+    theme.style.tabview.btn.tgl_pr  = &lv_style_btn_tgl_pr;
+#endif
+}
+
+static void table_init(void)
+{
+#if LV_USE_TABLE != 0
+    theme.style.table.bg   = &lv_style_transp_tight;
+    theme.style.table.cell = &lv_style_plain;
+#endif
+}
+
+static void win_init(void)
+{
+#if LV_USE_WIN != 0
+
+    theme.style.win.bg      = &plain_bordered;
+    theme.style.win.sb      = &sb;
+    theme.style.win.header  = &lv_style_plain_color;
+    theme.style.win.content = &lv_style_transp;
+    theme.style.win.btn.rel = &lv_style_btn_rel;
+    theme.style.win.btn.pr  = &lv_style_btn_pr;
+#endif
+}
+
+#if LV_USE_GROUP
+
+static void style_mod(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_ORANGE;
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 20;
+
+    style->body.main_color   = lv_color_mix(style->body.main_color, 
LV_COLOR_ORANGE, LV_OPA_70);
+    style->body.grad_color   = lv_color_mix(style->body.grad_color, 
LV_COLOR_ORANGE, LV_OPA_70);
+    style->body.shadow.color = lv_color_mix(style->body.shadow.color, 
LV_COLOR_ORANGE, LV_OPA_60);
+
+    style->text.color = lv_color_mix(style->text.color, LV_COLOR_ORANGE, 
LV_OPA_70);
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 2;
+#endif
+}
+
+static void style_mod_edit(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_GREEN;
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 20;
+
+    style->body.main_color   = lv_color_mix(style->body.main_color, 
LV_COLOR_GREEN, LV_OPA_70);
+    style->body.grad_color   = lv_color_mix(style->body.grad_color, 
LV_COLOR_GREEN, LV_OPA_70);
+    style->body.shadow.color = lv_color_mix(style->body.shadow.color, 
LV_COLOR_GREEN, LV_OPA_60);
+
+    style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, 
LV_OPA_70);
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 3;
+#endif
+}
+
+#endif /*LV_USE_GROUP*/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the default theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_default_init(uint16_t hue, lv_font_t * font)
+{
+    if(font == NULL) font = LV_FONT_DEFAULT;
+
+    _hue  = hue;
+    _font = font;
+
+    /*For backward compatibility initialize all theme elements with a default 
style */
+    uint16_t i;
+    lv_style_t ** style_p = (lv_style_t **)&theme.style;
+    for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
+        *style_p = &def;
+        style_p++;
+    }
+
+    basic_init();
+    btn_init();
+    label_init();
+    img_init();
+    line_init();
+    led_init();
+    bar_init();
+    slider_init();
+    sw_init();
+    lmeter_init();
+    gauge_init();
+    chart_init();
+    cb_init();
+    btnm_init();
+    kb_init();
+    mbox_init();
+    page_init();
+    ta_init();
+    list_init();
+    ddlist_init();
+    roller_init();
+    tabview_init();
+    table_init();
+    win_init();
+
+#if LV_USE_GROUP
+    theme.group.style_mod_xcb      = style_mod;
+    theme.group.style_mod_edit_xcb = style_mod_edit;
+#endif
+
+    return &theme;
+}
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_default(void)
+{
+    return &theme;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_default.h 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_default.h
new file mode 100755
index 0000000..4a2ecc0
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_default.h
@@ -0,0 +1,60 @@
+/**
+ * @file lv_theme_default.h
+ *
+ */
+
+#ifndef LV_THEME_DEFAULT_H
+#define LV_THEME_DEFAULT_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_THEME_DEFAULT
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the default theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_default_init(uint16_t hue, lv_font_t * font);
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_default(void);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_THEME_TEMPL_H*/
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_material.c 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_material.c
new file mode 100755
index 0000000..6d162bf
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_material.c
@@ -0,0 +1,936 @@
+/**
+ * @file lv_theme_material.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_theme.h"
+
+#if LV_USE_THEME_MATERIAL
+
+/*********************
+ *      DEFINES
+ *********************/
+#define DEF_RADIUS 4
+#define DEF_SHADOW_COLOR lv_color_hex3(0xaaa)
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_theme_t theme;
+static lv_style_t def;
+
+/*Static style definitions*/
+static lv_style_t sb;
+
+/*Saved input parameters*/
+static uint16_t _hue;
+static lv_font_t * _font;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+static void basic_init(void)
+{
+    static lv_style_t bg, panel, scr;
+
+    lv_style_copy(&def, &lv_style_plain); /*Initialize the default style*/
+    def.text.font   = _font;
+    def.body.radius = DEF_RADIUS;
+
+    lv_style_copy(&bg, &def);
+    bg.body.main_color = lv_color_hex(0xf0f0f0);
+    bg.body.grad_color = bg.body.main_color;
+    bg.body.radius     = 0;
+
+    lv_style_copy(&scr, &bg);
+    scr.body.padding.bottom = 0;
+    scr.body.padding.top    = 0;
+    scr.body.padding.left   = 0;
+    scr.body.padding.right  = 0;
+
+    lv_style_copy(&panel, &def);
+    panel.body.radius         = DEF_RADIUS;
+    panel.body.main_color     = LV_COLOR_WHITE;
+    panel.body.grad_color     = LV_COLOR_WHITE;
+    panel.body.border.width   = 1;
+    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.padding.left   = LV_DPI / 8;
+    panel.body.padding.right  = LV_DPI / 8;
+    panel.body.padding.top    = LV_DPI / 8;
+    panel.body.padding.bottom = LV_DPI / 8;
+    panel.body.padding.inner  = LV_DPI / 12;
+    panel.text.color          = lv_color_hex3(0x333);
+    panel.image.color         = lv_color_hex3(0x333);
+
+    lv_style_copy(&sb, &def);
+    sb.body.main_color     = LV_COLOR_BLACK;
+    sb.body.grad_color     = LV_COLOR_BLACK;
+    sb.body.opa            = LV_OPA_40;
+    sb.body.padding.right  = LV_DPI / 25;
+    sb.body.padding.bottom = LV_DPI / 25;
+
+    theme.style.bg    = &bg;
+    theme.style.scr   = &scr;
+    theme.style.panel = &panel;
+}
+
+static void cont_init(void)
+{
+#if LV_USE_CONT != 0
+
+    theme.style.cont = theme.style.panel;
+#endif
+}
+
+static void btn_init(void)
+{
+#if LV_USE_BTN != 0
+    static lv_style_t rel, pr, tgl_rel, tgl_pr, ina;
+
+    lv_style_copy(&rel, &def);
+    rel.body.main_color     = lv_color_hsv_to_rgb(_hue, 90, 70);
+    rel.body.grad_color     = rel.body.main_color;
+    rel.body.radius         = DEF_RADIUS;
+    rel.body.padding.left   = LV_DPI / 6;
+    rel.body.padding.right  = LV_DPI / 6;
+    rel.body.padding.top    = LV_DPI / 8;
+    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.text.color          = lv_color_hsv_to_rgb(_hue, 5, 95);
+    rel.image.color         = lv_color_hsv_to_rgb(_hue, 5, 95);
+
+    lv_style_copy(&pr, &rel);
+    pr.body.main_color   = lv_color_hsv_to_rgb(_hue, 90, 60);
+    pr.body.grad_color   = pr.body.main_color;
+    pr.body.shadow.width = 4;
+
+    lv_style_copy(&tgl_rel, &rel);
+    tgl_rel.body.main_color   = lv_color_hsv_to_rgb(_hue, 95, 50);
+    tgl_rel.body.grad_color   = tgl_rel.body.main_color;
+    tgl_rel.body.shadow.width = 4;
+
+    lv_style_copy(&tgl_pr, &tgl_rel);
+    tgl_pr.body.main_color   = lv_color_hsv_to_rgb(_hue, 95, 40);
+    tgl_pr.body.grad_color   = tgl_pr.body.main_color;
+    tgl_pr.body.shadow.width = 2;
+
+    lv_style_copy(&ina, &rel);
+    ina.body.main_color   = lv_color_hex3(0xccc);
+    ina.body.grad_color   = ina.body.main_color;
+    ina.body.shadow.width = 0;
+    ina.text.color        = lv_color_hsv_to_rgb(_hue, 95, 5);
+    ina.image.color       = lv_color_hsv_to_rgb(_hue, 95, 5);
+
+    theme.style.btn.rel     = &rel;
+    theme.style.btn.pr      = &pr;
+    theme.style.btn.tgl_rel = &tgl_rel;
+    theme.style.btn.tgl_pr  = &tgl_pr;
+    theme.style.btn.ina     = &ina;
+#endif
+}
+
+static void label_init(void)
+{
+#if LV_USE_LABEL != 0
+    static lv_style_t prim, sec, hint;
+
+    lv_style_copy(&prim, &def);
+    prim.text.font  = _font;
+    prim.text.color = lv_color_hsv_to_rgb(_hue, 80, 10);
+
+    lv_style_copy(&sec, &prim);
+    sec.text.color = lv_color_hsv_to_rgb(_hue, 80, 75);
+
+    lv_style_copy(&hint, &prim);
+    hint.text.color = lv_color_hsv_to_rgb(_hue, 40, 90);
+
+    theme.style.label.prim = &prim;
+    theme.style.label.sec  = &sec;
+    theme.style.label.hint = &hint;
+#endif
+}
+
+static void img_init(void)
+{
+#if LV_USE_IMG != 0
+    static lv_style_t img_light, img_dark;
+    lv_style_copy(&img_light, &def);
+    img_light.image.color   = lv_color_hsv_to_rgb(_hue, 15, 85);
+    img_light.image.intense = LV_OPA_80;
+
+    lv_style_copy(&img_dark, &def);
+    img_light.image.color   = lv_color_hsv_to_rgb(_hue, 85, 65);
+    img_light.image.intense = LV_OPA_80;
+
+    theme.style.img.light = &def;
+    theme.style.img.dark  = &def;
+#endif
+}
+
+static void line_init(void)
+{
+#if LV_USE_LINE != 0
+
+    theme.style.line.decor = &def;
+#endif
+}
+
+static void led_init(void)
+{
+#if LV_USE_LED != 0
+    static lv_style_t led;
+    lv_style_copy(&led, &def);
+    led.body.shadow.width = LV_DPI / 10;
+    led.body.radius       = LV_RADIUS_CIRCLE;
+    led.body.border.width = LV_DPI / 30;
+    led.body.border.opa   = LV_OPA_30;
+    led.body.main_color   = lv_color_hsv_to_rgb(_hue, 100, 100);
+    led.body.grad_color   = lv_color_hsv_to_rgb(_hue, 100, 100);
+    led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
+    led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 100, 100);
+
+    theme.style.led = &led;
+#endif
+}
+
+static void bar_init(void)
+{
+#if LV_USE_BAR
+    static lv_style_t bar_bg, bar_indic;
+
+    lv_style_copy(&bar_bg, &def);
+    bar_bg.body.main_color     = lv_color_hsv_to_rgb(_hue, 15, 95);
+    bar_bg.body.grad_color     = bar_bg.body.main_color;
+    bar_bg.body.radius         = 3;
+    bar_bg.body.border.width   = 0;
+    bar_bg.body.padding.left   = LV_DPI / 16;
+    bar_bg.body.padding.right  = LV_DPI / 16;
+    bar_bg.body.padding.top    = LV_DPI / 16;
+    bar_bg.body.padding.bottom = LV_DPI / 16;
+
+    lv_style_copy(&bar_indic, &bar_bg);
+    bar_indic.body.main_color     = lv_color_hsv_to_rgb(_hue, 85, 70);
+    bar_indic.body.grad_color     = bar_indic.body.main_color;
+    bar_indic.body.padding.left   = 0;
+    bar_indic.body.padding.right  = 0;
+    bar_indic.body.padding.top    = 0;
+    bar_indic.body.padding.bottom = 0;
+
+    theme.style.bar.bg    = &bar_bg;
+    theme.style.bar.indic = &bar_indic;
+#endif
+}
+
+static void slider_init(void)
+{
+#if LV_USE_SLIDER != 0
+    static lv_style_t knob;
+
+    lv_style_copy(&knob, &def);
+    knob.body.radius       = LV_RADIUS_CIRCLE;
+    knob.body.border.width = 0;
+    knob.body.main_color   = theme.style.bar.indic->body.main_color;
+    knob.body.grad_color   = knob.body.main_color;
+
+    theme.style.slider.bg    = theme.style.bar.bg;
+    theme.style.slider.indic = theme.style.bar.indic;
+    theme.style.slider.knob  = &knob;
+#endif
+}
+
+static void sw_init(void)
+{
+#if LV_USE_SW != 0
+    static lv_style_t sw_bg, sw_indic, sw_knob_off, sw_knob_on;
+    lv_style_copy(&sw_bg, theme.style.slider.bg);
+    sw_bg.body.radius = LV_RADIUS_CIRCLE;
+
+    lv_style_copy(&sw_indic, theme.style.slider.bg);
+    sw_indic.body.radius = LV_RADIUS_CIRCLE;
+
+    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.color = DEF_SHADOW_COLOR;
+
+    lv_style_copy(&sw_knob_off, &sw_knob_on);
+    sw_knob_off.body.main_color   = lv_color_hex(0xfafafa);
+    sw_knob_off.body.grad_color   = sw_knob_off.body.main_color;
+    sw_knob_off.body.border.width = 1;
+    sw_knob_off.body.border.color = lv_color_hex3(0x999);
+    sw_knob_off.body.border.opa   = LV_OPA_COVER;
+
+    theme.style.sw.bg       = &sw_bg;
+    theme.style.sw.indic    = &sw_indic;
+    theme.style.sw.knob_off = &sw_knob_off;
+    theme.style.sw.knob_on  = &sw_knob_on;
+#endif
+}
+
+static void lmeter_init(void)
+{
+#if LV_USE_LMETER != 0
+    static lv_style_t lmeter;
+    lv_style_copy(&lmeter, &def);
+    lmeter.body.main_color   = lv_color_hsv_to_rgb(_hue, 75, 90);
+    lmeter.body.grad_color   = lmeter.body.main_color;
+    lmeter.body.padding.left = LV_DPI / 10; /*Scale line length*/
+    lmeter.line.color        = lv_color_hex3(0x999);
+    lmeter.line.width        = 2;
+
+    theme.style.lmeter = &lmeter;
+#endif
+}
+
+static void gauge_init(void)
+{
+#if LV_USE_GAUGE != 0
+
+    static lv_style_t gauge;
+    lv_style_copy(&gauge, &def);
+    gauge.body.main_color    = lv_color_hsv_to_rgb(_hue, 10, 60);
+    gauge.body.grad_color    = gauge.body.main_color;
+    gauge.body.padding.left  = LV_DPI / 16; /*Scale line length*/
+    gauge.body.padding.inner = LV_DPI / 8;
+    gauge.body.border.color  = lv_color_hex3(0x999);
+    gauge.text.color         = lv_color_hex3(0x333);
+    gauge.line.width         = 3;
+    gauge.line.color         = lv_color_hsv_to_rgb(_hue, 95, 70);
+
+    theme.style.gauge = &gauge;
+#endif
+}
+
+static void arc_init(void)
+{
+#if LV_USE_ARC != 0
+
+    static lv_style_t arc;
+    lv_style_copy(&arc, &def);
+    arc.line.width = 10;
+    arc.line.color = lv_color_hsv_to_rgb(_hue, 90, 90);
+
+    /*For prelaoder*/
+    arc.body.border.width   = 10;
+    arc.body.border.color   = lv_color_hsv_to_rgb(_hue, 30, 90);
+    arc.body.padding.left   = 0;
+    arc.body.padding.right  = 0;
+    arc.body.padding.top    = 0;
+    arc.body.padding.bottom = 0;
+
+    theme.style.arc = &arc;
+#endif
+}
+
+static void preload_init(void)
+{
+#if LV_USE_PRELOAD != 0
+
+    theme.style.preload = theme.style.arc;
+#endif
+}
+
+static void chart_init(void)
+{
+#if LV_USE_CHART
+    theme.style.chart = theme.style.panel;
+#endif
+}
+
+static void calendar_init(void)
+{
+#if LV_USE_CALENDAR
+    static lv_style_t ina_days;
+    lv_style_copy(&ina_days, &def);
+    ina_days.text.color = lv_color_hsv_to_rgb(_hue, 0, 70);
+
+    static lv_style_t high_days;
+    lv_style_copy(&high_days, &def);
+    high_days.text.color = lv_color_hsv_to_rgb(_hue, 80, 90);
+
+    static lv_style_t week_box;
+    lv_style_copy(&week_box, &def);
+    week_box.body.main_color     = lv_color_hsv_to_rgb(_hue, 40, 100);
+    week_box.body.grad_color     = lv_color_hsv_to_rgb(_hue, 40, 100);
+    week_box.body.padding.top    = LV_DPI / 20;
+    week_box.body.padding.bottom = LV_DPI / 20;
+    week_box.body.padding.left   = theme.style.panel->body.padding.left;
+    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.radius         = 0;
+
+    static lv_style_t today_box;
+    lv_style_copy(&today_box, &def);
+    today_box.body.main_color     = LV_COLOR_WHITE;
+    today_box.body.grad_color     = LV_COLOR_WHITE;
+    today_box.body.padding.top    = LV_DPI / 20;
+    today_box.body.padding.bottom = LV_DPI / 20;
+    today_box.body.radius         = 0;
+
+    theme.style.calendar.bg               = theme.style.panel;
+    theme.style.calendar.header           = &lv_style_transp;
+    theme.style.calendar.inactive_days    = &ina_days;
+    theme.style.calendar.highlighted_days = &high_days;
+    theme.style.calendar.week_box         = &week_box;
+    theme.style.calendar.today_box        = &today_box;
+#endif
+}
+
+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);
+    pr.body.main_color   = lv_color_hex3(0xccc);
+    pr.body.grad_color   = pr.body.main_color;
+    pr.body.shadow.width = 0;
+
+    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);
+    tgl_pr.body.main_color   = lv_color_hsv_to_rgb(_hue, 75, 65);
+    tgl_pr.body.grad_color   = tgl_pr.body.main_color;
+    tgl_pr.body.shadow.width = 0;
+
+    lv_style_copy(&ina, theme.style.btn.ina);
+
+    theme.style.cb.bg          = &lv_style_transp;
+    theme.style.cb.box.rel     = &rel;
+    theme.style.cb.box.pr      = &pr;
+    theme.style.cb.box.tgl_rel = &tgl_rel;
+    theme.style.cb.box.tgl_pr  = &tgl_pr;
+    theme.style.cb.box.ina     = &ina;
+#endif
+}
+
+static void btnm_init(void)
+{
+#if LV_USE_BTNM
+    static lv_style_t bg, rel, pr, tgl_rel, tgl_pr, ina;
+
+    lv_style_copy(&bg, theme.style.panel);
+    bg.body.padding.left   = 0;
+    bg.body.padding.right  = 0;
+    bg.body.padding.top    = 0;
+    bg.body.padding.bottom = 0;
+    bg.body.padding.inner  = 0;
+    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.width = 1;
+    rel.body.border.color = lv_color_hex3(0xbbb);
+    rel.body.opa          = LV_OPA_TRANSP;
+    rel.body.shadow.width = 0;
+
+    lv_style_copy(&pr, &rel);
+    pr.glass             = 0;
+    pr.body.main_color   = lv_color_hex3(0xddd);
+    pr.body.grad_color   = pr.body.main_color;
+    pr.body.border.width = 0;
+    pr.body.opa          = LV_OPA_COVER;
+
+    lv_style_copy(&tgl_rel, &pr);
+    tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 90, 70);
+    tgl_rel.body.grad_color = tgl_rel.body.main_color;
+    tgl_rel.text.color      = lv_color_hsv_to_rgb(_hue, 5, 95);
+
+    lv_style_copy(&tgl_pr, &tgl_rel);
+    tgl_pr.body.main_color   = lv_color_hsv_to_rgb(_hue, 95, 65);
+    tgl_pr.body.grad_color   = tgl_pr.body.main_color;
+    tgl_pr.body.border.width = 0;
+
+    lv_style_copy(&ina, &pr);
+    ina.body.main_color = lv_color_hex3(0xccc);
+    ina.body.grad_color = ina.body.main_color;
+
+    theme.style.btnm.bg          = &bg;
+    theme.style.btnm.btn.rel     = &rel;
+    theme.style.btnm.btn.pr      = &pr;
+    theme.style.btnm.btn.tgl_rel = &tgl_rel;
+    theme.style.btnm.btn.tgl_pr  = &tgl_pr;
+    theme.style.btnm.btn.ina     = &def;
+#endif
+}
+
+static void kb_init(void)
+{
+#if LV_USE_KB
+
+    static lv_style_t rel;
+    lv_style_copy(&rel, &lv_style_transp);
+    rel.text.font = _font;
+
+    theme.style.kb.bg          = theme.style.btnm.bg;
+    theme.style.kb.btn.rel     = &rel;
+    theme.style.kb.btn.pr      = theme.style.btnm.btn.pr;
+    theme.style.kb.btn.tgl_rel = theme.style.btnm.btn.tgl_rel;
+    theme.style.kb.btn.tgl_pr  = theme.style.btnm.btn.tgl_pr;
+    theme.style.kb.btn.ina     = theme.style.btnm.btn.ina;
+#endif
+}
+
+static void mbox_init(void)
+{
+#if LV_USE_MBOX
+    static lv_style_t pr, rel;
+
+    lv_style_copy(&rel, &lv_style_transp);
+    rel.glass      = 0;
+    rel.text.font  = _font;
+    rel.text.color = lv_color_hsv_to_rgb(_hue, 85, 75);
+
+    lv_style_copy(&pr, theme.style.btnm.btn.pr);
+    pr.text.color = lv_color_hsv_to_rgb(_hue, 85, 60);
+
+    theme.style.mbox.bg      = theme.style.panel;
+    theme.style.mbox.btn.bg  = &lv_style_transp;
+    theme.style.mbox.btn.rel = &rel;
+    theme.style.mbox.btn.pr  = &pr;
+#endif
+}
+
+static void page_init(void)
+{
+#if LV_USE_PAGE
+
+    theme.style.page.bg   = theme.style.panel;
+    theme.style.page.scrl = &lv_style_transp;
+    theme.style.page.sb   = &sb;
+#endif
+}
+
+static void ta_init(void)
+{
+#if LV_USE_TA
+    static lv_style_t oneline;
+
+    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.width = 3;
+    oneline.body.border.color = lv_color_hex3(0x333);
+    oneline.body.border.opa   = LV_OPA_COVER;
+    oneline.text.color        = lv_color_hex3(0x333);
+
+    theme.style.ta.area    = theme.style.panel;
+    theme.style.ta.oneline = &oneline;
+    theme.style.ta.cursor  = NULL; /*Let library to calculate the cursor's 
style*/
+    theme.style.ta.sb      = &sb;
+#endif
+}
+
+static void spinbox_init(void)
+{
+#if LV_USE_SPINBOX
+    theme.style.spinbox.bg     = theme.style.panel;
+    theme.style.spinbox.cursor = theme.style.ta.cursor;
+    theme.style.spinbox.sb     = theme.style.ta.sb;
+#endif
+}
+
+static void list_init(void)
+{
+#if LV_USE_LIST != 0
+
+    static lv_style_t list_bg, rel, pr, tgl_rel, tgl_pr, ina;
+
+    lv_style_copy(&list_bg, theme.style.panel);
+    list_bg.body.padding.left   = 0;
+    list_bg.body.padding.right  = 0;
+    list_bg.body.padding.top    = 0;
+    list_bg.body.padding.bottom = 0;
+    list_bg.body.padding.inner  = 0;
+
+    lv_style_copy(&rel, &lv_style_transp);
+    rel.body.padding.left   = LV_DPI / 8;
+    rel.body.padding.right  = LV_DPI / 8;
+    rel.body.padding.top    = LV_DPI / 6;
+    rel.body.padding.bottom = LV_DPI / 6;
+    rel.body.radius         = 10;
+    rel.body.border.color   = lv_color_hex3(0xbbb);
+    rel.body.border.width   = 1;
+    rel.body.border.part    = LV_BORDER_BOTTOM;
+
+    lv_style_copy(&pr, &rel);
+    pr.glass             = 0;
+    pr.body.main_color   = lv_color_hex3(0xddd);
+    pr.body.grad_color   = pr.body.main_color;
+    pr.body.border.width = 0;
+    pr.body.opa          = LV_OPA_COVER;
+    pr.body.radius       = DEF_RADIUS;
+    pr.text.font         = _font;
+
+    lv_style_copy(&tgl_rel, &pr);
+    tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 90, 70);
+    tgl_rel.body.grad_color = tgl_rel.body.main_color;
+    tgl_rel.text.color      = lv_color_hsv_to_rgb(_hue, 5, 95);
+
+    lv_style_copy(&tgl_pr, &tgl_rel);
+    tgl_pr.body.main_color   = lv_color_hsv_to_rgb(_hue, 90, 60);
+    tgl_pr.body.grad_color   = tgl_pr.body.main_color;
+    tgl_pr.body.border.width = 0;
+
+    lv_style_copy(&ina, &pr);
+    ina.body.main_color = lv_color_hex3(0xccc);
+    ina.body.grad_color = ina.body.main_color;
+
+    theme.style.list.sb          = &sb;
+    theme.style.list.bg          = &list_bg;
+    theme.style.list.scrl        = &lv_style_transp_tight;
+    theme.style.list.btn.rel     = &rel;
+    theme.style.list.btn.pr      = &pr;
+    theme.style.list.btn.tgl_rel = &tgl_rel;
+    theme.style.list.btn.tgl_pr  = &tgl_pr;
+    theme.style.list.btn.ina     = &ina;
+#endif
+}
+
+static void ddlist_init(void)
+{
+#if LV_USE_DDLIST != 0
+    static lv_style_t bg, sel;
+    lv_style_copy(&bg, theme.style.panel);
+    bg.body.padding.left   = LV_DPI / 6;
+    bg.body.padding.right  = LV_DPI / 6;
+    bg.body.padding.top    = LV_DPI / 6;
+    bg.body.padding.bottom = LV_DPI / 6;
+    bg.text.line_space     = LV_DPI / 8;
+
+    lv_style_copy(&sel, &bg);
+    sel.body.main_color   = lv_color_hsv_to_rgb(_hue, 90, 70);
+    sel.body.grad_color   = sel.body.main_color;
+    sel.body.border.width = 0;
+    sel.body.shadow.width = 0;
+    sel.text.color        = lv_color_hsv_to_rgb(_hue, 5, 95);
+
+    theme.style.ddlist.bg  = &bg;
+    theme.style.ddlist.sel = &sel;
+    theme.style.ddlist.sb  = &sb;
+#endif
+}
+
+static void roller_init(void)
+{
+#if LV_USE_ROLLER != 0
+    static lv_style_t roller_bg, roller_sel;
+
+    lv_style_copy(&roller_bg, &lv_style_transp);
+    roller_bg.body.padding.left   = LV_DPI / 6;
+    roller_bg.body.padding.right  = LV_DPI / 6;
+    roller_bg.body.padding.top    = LV_DPI / 6;
+    roller_bg.body.padding.bottom = LV_DPI / 6;
+    roller_bg.text.line_space     = LV_DPI / 8;
+    roller_bg.text.font           = _font;
+    roller_bg.glass               = 0;
+
+    lv_style_copy(&roller_sel, &roller_bg);
+    roller_sel.text.color = lv_color_hsv_to_rgb(_hue, 90, 70);
+
+    theme.style.roller.bg  = &roller_bg;
+    theme.style.roller.sel = &roller_sel;
+#endif
+}
+
+static void tabview_init(void)
+{
+#if LV_USE_TABVIEW != 0
+    static lv_style_t indic, btn_bg, rel, pr, tgl_rel, tgl_pr;
+
+    lv_style_copy(&indic, &def);
+    indic.body.main_color    = lv_color_hsv_to_rgb(_hue, 90, 70);
+    indic.body.grad_color    = indic.body.main_color;
+    indic.body.radius        = 0;
+    indic.body.border.width  = 0;
+    indic.body.padding.inner = LV_DPI / 20;
+
+    lv_style_copy(&btn_bg, &def);
+    btn_bg.body.main_color     = lv_color_hex3(0xccc);
+    btn_bg.body.grad_color     = btn_bg.body.main_color;
+    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.opa     = LV_OPA_COVER;
+    btn_bg.body.shadow.width   = 5;
+    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;
+    btn_bg.body.padding.top    = 0;
+    btn_bg.body.padding.bottom = 0;
+    btn_bg.text.color          = lv_color_hex3(0x333);
+
+    lv_style_copy(&rel, &lv_style_transp);
+    rel.body.padding.top    = LV_DPI / 8;
+    rel.body.padding.bottom = LV_DPI / 8;
+    rel.text.font           = _font;
+
+    lv_style_copy(&pr, &def);
+    pr.body.main_color   = lv_color_hex3(0xbbb);
+    pr.body.grad_color   = pr.body.main_color;
+    pr.body.border.width = 0;
+    pr.body.opa          = LV_OPA_COVER;
+    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.opa   = LV_OPA_COVER;
+    pr.text.color        = lv_color_hex3(0x111);
+
+    lv_style_copy(&tgl_rel, &lv_style_transp);
+    tgl_rel.glass      = 0;
+    tgl_rel.text.font  = _font;
+    tgl_rel.text.color = lv_color_hsv_to_rgb(_hue, 90, 70);
+
+    lv_style_copy(&tgl_pr, &def);
+    tgl_pr.body.main_color   = lv_color_hsv_to_rgb(_hue, 15, 85);
+    tgl_pr.body.grad_color   = tgl_pr.body.main_color;
+    tgl_pr.body.border.width = 0;
+    tgl_pr.body.opa          = LV_OPA_COVER;
+    tgl_pr.body.radius       = 0;
+    tgl_pr.text.color        = lv_color_hsv_to_rgb(_hue, 90, 60);
+
+    theme.style.tabview.bg          = theme.style.bg;
+    theme.style.tabview.indic       = &indic;
+    theme.style.tabview.btn.bg      = &btn_bg;
+    theme.style.tabview.btn.rel     = &rel;
+    theme.style.tabview.btn.pr      = &pr;
+    theme.style.tabview.btn.tgl_rel = &tgl_rel;
+    theme.style.tabview.btn.tgl_pr  = &tgl_pr;
+#endif
+}
+
+static void tileview_init(void)
+{
+#if LV_USE_TILEVIEW != 0
+    theme.style.tileview.bg   = &lv_style_transp_tight;
+    theme.style.tileview.scrl = &lv_style_transp_tight;
+    theme.style.tileview.sb   = theme.style.page.sb;
+#endif
+}
+
+static void table_init(void)
+{
+#if LV_USE_TABLE != 0
+    static lv_style_t cell;
+    lv_style_copy(&cell, theme.style.panel);
+    cell.body.radius         = 0;
+    cell.body.border.width   = 1;
+    cell.body.padding.left   = LV_DPI / 12;
+    cell.body.padding.right  = LV_DPI / 12;
+    cell.body.padding.top    = LV_DPI / 12;
+    cell.body.padding.bottom = LV_DPI / 12;
+
+    theme.style.table.bg   = &lv_style_transp_tight;
+    theme.style.table.cell = &cell;
+#endif
+}
+
+static void win_init(void)
+{
+#if LV_USE_WIN != 0
+    static lv_style_t header, pr;
+
+    lv_style_copy(&header, &def);
+    header.body.main_color     = lv_color_hex3(0xccc);
+    header.body.grad_color     = header.body.main_color;
+    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.opa     = LV_OPA_COVER;
+    header.body.padding.inner  = 0;
+    header.body.padding.left   = 0;
+    header.body.padding.right  = 0;
+    header.body.padding.top    = 0;
+    header.body.padding.bottom = 0;
+    header.text.color          = lv_color_hex3(0x333);
+    header.image.color         = lv_color_hex3(0x333);
+
+    lv_style_copy(&pr, &def);
+    pr.body.main_color   = lv_color_hex3(0xbbb);
+    pr.body.grad_color   = pr.body.main_color;
+    pr.body.border.width = 0;
+    pr.body.opa          = LV_OPA_COVER;
+    pr.body.radius       = 0;
+    pr.text.color        = lv_color_hex3(0x111);
+    pr.image.color       = lv_color_hex3(0x111);
+
+    theme.style.win.bg      = theme.style.panel;
+    theme.style.win.sb      = &sb;
+    theme.style.win.header  = &header;
+    theme.style.win.content = &lv_style_transp;
+    theme.style.win.btn.rel = &lv_style_transp;
+    theme.style.win.btn.pr  = &pr;
+#endif
+}
+
+#if LV_USE_GROUP
+
+static void style_mod(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    uint16_t hue2 = (_hue + 60) % 360;
+
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = lv_color_hsv_to_rgb(hue2, 90, 70);
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 30;
+
+    style->body.main_color   = lv_color_mix(style->body.main_color, 
lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_70);
+    style->body.grad_color   = lv_color_mix(style->body.grad_color, 
lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_70);
+    style->body.shadow.color = lv_color_mix(style->body.shadow.color, 
lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_60);
+
+    style->text.color = lv_color_mix(style->text.color, 
lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_70);
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 2;
+#endif
+}
+
+static void style_mod_edit(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    uint16_t hue2 = (_hue + 300) % 360;
+
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_GREEN;
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 30;
+
+
+    style->body.main_color   = lv_color_mix(style->body.main_color, 
lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_70);
+    style->body.grad_color   = lv_color_mix(style->body.grad_color, 
lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_70);
+    style->body.shadow.color = lv_color_mix(style->body.shadow.color, 
lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_60);
+
+    style->text.color = lv_color_mix(style->text.color, 
lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_70);
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 3;
+#endif
+}
+
+#endif /*LV_USE_GROUP*/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the material theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_material_init(uint16_t hue, lv_font_t * font)
+{
+    if(font == NULL) font = LV_FONT_DEFAULT;
+
+    _hue  = hue;
+    _font = font;
+
+    /*For backward compatibility initialize all theme elements with a default 
style */
+    uint16_t i;
+    lv_style_t ** style_p = (lv_style_t **)&theme.style;
+    for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
+        *style_p = &def;
+        style_p++;
+    }
+
+    basic_init();
+    cont_init();
+    btn_init();
+    label_init();
+    img_init();
+    line_init();
+    led_init();
+    bar_init();
+    slider_init();
+    sw_init();
+    lmeter_init();
+    gauge_init();
+    chart_init();
+    arc_init();
+    preload_init();
+    calendar_init();
+    cb_init();
+    btnm_init();
+    kb_init();
+    mbox_init();
+    page_init();
+    ta_init();
+    spinbox_init();
+    list_init();
+    ddlist_init();
+    roller_init();
+    tabview_init();
+    tileview_init();
+    table_init();
+    win_init();
+
+#if LV_USE_GROUP
+    theme.group.style_mod_xcb      = style_mod;
+    theme.group.style_mod_edit_xcb = style_mod_edit;
+#endif
+
+    return &theme;
+}
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_material(void)
+{
+    return &theme;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_material.h 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_material.h
new file mode 100755
index 0000000..1f2e1b7
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_material.h
@@ -0,0 +1,60 @@
+/**
+ * @file lv_theme_material.h
+ *
+ */
+
+#ifndef LV_THEME_MATERIAL_H
+#define LV_THEME_MATERIAL_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_THEME_MATERIAL
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the material theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_material_init(uint16_t hue, lv_font_t * font);
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_material(void);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_THEME_MATERIAL_H*/
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_mono.c 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_mono.c
new file mode 100755
index 0000000..9c2e774
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_mono.c
@@ -0,0 +1,525 @@
+/**
+ * @file lv_theme_templ.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_theme.h"
+
+#if LV_USE_THEME_MONO
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_theme_t theme;
+static lv_style_t def;
+static lv_style_t scr;
+
+/*Static style definitions*/
+static lv_style_t light_plain;
+static lv_style_t dark_plain;
+static lv_style_t light_frame;
+static lv_style_t dark_frame;
+
+/*Saved input parameters*/
+static lv_font_t * _font;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+static void basic_init(void)
+{
+    lv_style_copy(&def, &lv_style_plain); /*Initialize the default style*/
+    def.body.main_color     = LV_COLOR_WHITE;
+    def.body.grad_color     = LV_COLOR_WHITE;
+    def.body.radius         = 0;
+    def.body.opa            = LV_OPA_COVER;
+    def.body.padding.left   = LV_DPI / 10;
+    def.body.padding.right  = LV_DPI / 10;
+    def.body.padding.top    = LV_DPI / 10;
+    def.body.padding.bottom = LV_DPI / 10;
+    def.body.padding.inner  = LV_DPI / 10;
+    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.text.font         = _font;
+    def.text.color        = LV_COLOR_BLACK;
+    def.text.letter_space = 1;
+    def.text.line_space   = 1;
+
+    def.line.color = LV_COLOR_BLACK;
+    def.line.opa   = LV_OPA_COVER;
+    def.line.width = 1;
+
+    def.image.color   = LV_COLOR_BLACK;
+    def.image.intense = LV_OPA_TRANSP;
+    def.image.opa     = LV_OPA_COVER;
+
+    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;
+
+    lv_style_copy(&dark_plain, &light_plain);
+    dark_plain.body.main_color   = LV_COLOR_BLACK;
+    dark_plain.body.grad_color   = LV_COLOR_BLACK;
+    dark_plain.body.border.color = LV_COLOR_WHITE;
+    dark_plain.text.color        = LV_COLOR_WHITE;
+    dark_plain.line.color        = LV_COLOR_WHITE;
+    dark_plain.image.color       = LV_COLOR_WHITE;
+
+    lv_style_copy(&dark_frame, &dark_plain);
+    dark_frame.body.radius = LV_DPI / 20;
+
+    theme.style.bg    = &def;
+    theme.style.scr   = &scr;
+    theme.style.panel = &light_frame;
+}
+
+static void cont_init(void)
+{
+#if LV_USE_CONT != 0
+
+    theme.style.cont = &def;
+#endif
+}
+
+static void btn_init(void)
+{
+#if LV_USE_BTN != 0
+
+    theme.style.btn.rel     = &light_frame;
+    theme.style.btn.pr      = &dark_frame;
+    theme.style.btn.tgl_rel = &dark_frame;
+    theme.style.btn.tgl_pr  = &light_frame;
+    theme.style.btn.ina     = &light_frame;
+#endif
+}
+
+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;
+#endif
+}
+
+static void img_init(void)
+{
+#if LV_USE_IMG != 0
+
+    theme.style.img.light = &def;
+    theme.style.img.dark  = &def;
+#endif
+}
+
+static void line_init(void)
+{
+#if LV_USE_LINE != 0
+    theme.style.line.decor = NULL;
+#endif
+}
+
+static void led_init(void)
+{
+#if LV_USE_LED != 0
+    static lv_style_t led;
+    lv_style_copy(&led, &light_frame);
+    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
+}
+
+static void bar_init(void)
+{
+#if LV_USE_BAR
+    static lv_style_t bar_bg;
+    static lv_style_t bar_indic;
+
+    lv_style_copy(&bar_bg, &light_frame);
+    bar_bg.body.padding.left   = LV_DPI / 15;
+    bar_bg.body.padding.right  = LV_DPI / 15;
+    bar_bg.body.padding.top    = LV_DPI / 15;
+    bar_bg.body.padding.bottom = LV_DPI / 15;
+    bar_bg.body.radius         = LV_RADIUS_CIRCLE;
+
+    lv_style_copy(&bar_indic, &dark_frame);
+    bar_indic.body.padding.left   = LV_DPI / 30;
+    bar_indic.body.padding.right  = LV_DPI / 30;
+    bar_indic.body.padding.top    = LV_DPI / 30;
+    bar_indic.body.padding.bottom = LV_DPI / 30;
+    bar_indic.body.radius         = LV_RADIUS_CIRCLE;
+
+    theme.style.bar.bg    = &bar_bg;
+    theme.style.bar.indic = &bar_indic;
+#endif
+}
+
+static void slider_init(void)
+{
+#if LV_USE_SLIDER != 0
+    static lv_style_t slider_knob;
+    lv_style_copy(&slider_knob, &light_frame);
+    slider_knob.body.radius         = LV_RADIUS_CIRCLE;
+    slider_knob.body.padding.left   = LV_DPI / 30;
+    slider_knob.body.padding.right  = LV_DPI / 30;
+    slider_knob.body.padding.top    = LV_DPI / 30;
+    slider_knob.body.padding.bottom = LV_DPI / 30;
+
+    theme.style.slider.bg    = theme.style.bar.bg;
+    theme.style.slider.indic = theme.style.bar.indic;
+    theme.style.slider.knob  = &slider_knob;
+#endif
+}
+
+static void sw_init(void)
+{
+#if LV_USE_SW != 0
+
+    theme.style.sw.bg       = theme.style.slider.bg;
+    theme.style.sw.indic    = theme.style.slider.indic;
+    theme.style.sw.knob_off = theme.style.slider.knob;
+    theme.style.sw.knob_on  = theme.style.slider.knob;
+#endif
+}
+
+static void lmeter_init(void)
+{
+#if LV_USE_LMETER != 0
+    static lv_style_t lmeter_bg;
+    lv_style_copy(&lmeter_bg, &light_frame);
+    lmeter_bg.body.opa           = LV_OPA_TRANSP;
+    lmeter_bg.body.main_color    = LV_COLOR_BLACK;
+    lmeter_bg.body.grad_color    = LV_COLOR_BLACK;
+    lmeter_bg.body.padding.left  = LV_DPI / 20;
+    lmeter_bg.body.padding.inner = LV_DPI / 8;
+    lmeter_bg.line.color         = LV_COLOR_WHITE;
+    lmeter_bg.line.width         = 1;
+
+    theme.style.lmeter = &lmeter_bg;
+#endif
+}
+
+static void gauge_init(void)
+{
+#if LV_USE_GAUGE != 0
+    static lv_style_t gauge_bg;
+    lv_style_copy(&gauge_bg, theme.style.lmeter);
+    gauge_bg.line.color = LV_COLOR_BLACK;
+    gauge_bg.line.width = 1;
+
+    theme.style.gauge = &gauge_bg;
+#endif
+}
+
+static void chart_init(void)
+{
+#if LV_USE_CHART
+    theme.style.chart = &light_frame;
+#endif
+}
+
+static void calendar_init(void)
+{
+#if LV_USE_CALENDAR
+    static lv_style_t box;
+    lv_style_copy(&box, &light_plain);
+    box.body.padding.top    = LV_DPI / 20;
+    box.body.padding.bottom = LV_DPI / 20;
+
+    /*Can't handle highlighted dates in this theme*/
+    theme.style.calendar.week_box  = &box;
+    theme.style.calendar.today_box = &box;
+#endif
+}
+
+static void cb_init(void)
+{
+#if LV_USE_CB != 0
+
+    theme.style.cb.bg          = &lv_style_transp;
+    theme.style.cb.box.rel     = &light_frame;
+    theme.style.cb.box.pr      = &dark_frame;
+    theme.style.cb.box.tgl_rel = &dark_frame;
+    theme.style.cb.box.tgl_pr  = &light_frame;
+    theme.style.cb.box.ina     = &light_frame;
+#endif
+}
+
+static void btnm_init(void)
+{
+#if LV_USE_BTNM
+
+    theme.style.btnm.bg          = &light_frame;
+    theme.style.btnm.btn.rel     = &light_frame;
+    theme.style.btnm.btn.pr      = &dark_frame;
+    theme.style.btnm.btn.tgl_rel = &dark_frame;
+    theme.style.btnm.btn.tgl_pr  = &light_frame;
+    theme.style.btnm.btn.ina     = &light_frame;
+#endif
+}
+
+static void kb_init(void)
+{
+#if LV_USE_KB
+    theme.style.kb.bg          = &lv_style_transp_fit;
+    theme.style.kb.btn.rel     = &light_frame;
+    theme.style.kb.btn.pr      = &light_frame;
+    theme.style.kb.btn.tgl_rel = &dark_frame;
+    theme.style.kb.btn.tgl_pr  = &dark_frame;
+    theme.style.kb.btn.ina     = &light_frame;
+#endif
+}
+
+static void mbox_init(void)
+{
+#if LV_USE_MBOX
+
+    theme.style.mbox.bg      = &dark_frame;
+    theme.style.mbox.btn.bg  = &lv_style_transp_fit;
+    theme.style.mbox.btn.rel = &light_frame;
+    theme.style.mbox.btn.pr  = &dark_frame;
+#endif
+}
+
+static void page_init(void)
+{
+#if LV_USE_PAGE
+
+    theme.style.page.bg   = &light_frame;
+    theme.style.page.scrl = &light_frame;
+    theme.style.page.sb   = &dark_frame;
+#endif
+}
+
+static void ta_init(void)
+{
+#if LV_USE_TA
+
+    theme.style.ta.area    = &light_frame;
+    theme.style.ta.oneline = &light_frame;
+    theme.style.ta.cursor  = NULL; /*Let library to calculate the cursor's 
style*/
+    theme.style.ta.sb      = &dark_frame;
+#endif
+}
+
+static void list_init(void)
+{
+#if LV_USE_LIST != 0
+
+    theme.style.list.sb          = &dark_frame;
+    theme.style.list.bg          = &light_frame;
+    theme.style.list.scrl        = &lv_style_transp_fit;
+    theme.style.list.btn.rel     = &light_plain;
+    theme.style.list.btn.pr      = &dark_plain;
+    theme.style.list.btn.tgl_rel = &dark_plain;
+    theme.style.list.btn.tgl_pr  = &light_plain;
+    theme.style.list.btn.ina     = &light_plain;
+#endif
+}
+
+static void ddlist_init(void)
+{
+#if LV_USE_DDLIST != 0
+    static lv_style_t bg;
+    lv_style_copy(&bg, &light_frame);
+    bg.text.line_space = LV_DPI / 12;
+
+    theme.style.ddlist.bg  = &bg;
+    theme.style.ddlist.sel = &dark_plain;
+    theme.style.ddlist.sb  = &dark_frame;
+#endif
+}
+
+static void roller_init(void)
+{
+#if LV_USE_ROLLER != 0
+    static lv_style_t bg;
+    lv_style_copy(&bg, &light_frame);
+    bg.text.line_space = LV_DPI / 12;
+
+    theme.style.roller.bg  = &bg;
+    theme.style.roller.sel = &dark_frame;
+#endif
+}
+
+static void tabview_init(void)
+{
+#if LV_USE_TABVIEW != 0
+
+    theme.style.tabview.bg          = &light_frame;
+    theme.style.tabview.indic       = &light_plain;
+    theme.style.tabview.btn.bg      = &lv_style_transp_fit;
+    theme.style.tabview.btn.rel     = &light_frame;
+    theme.style.tabview.btn.pr      = &dark_frame;
+    theme.style.tabview.btn.tgl_rel = &dark_frame;
+    theme.style.tabview.btn.tgl_pr  = &light_frame;
+#endif
+}
+
+static void win_init(void)
+{
+#if LV_USE_WIN != 0
+    static lv_style_t win_header;
+    lv_style_copy(&win_header, &dark_plain);
+    win_header.body.padding.left   = LV_DPI / 30;
+    win_header.body.padding.right  = LV_DPI / 30;
+    win_header.body.padding.top    = LV_DPI / 30;
+    win_header.body.padding.bottom = LV_DPI / 30;
+
+    theme.style.win.bg      = &light_frame;
+    theme.style.win.sb      = &dark_frame;
+    theme.style.win.header  = &win_header;
+    theme.style.win.content = &lv_style_transp;
+    theme.style.win.btn.rel = &light_frame;
+    theme.style.win.btn.pr  = &dark_frame;
+#endif
+}
+
+#if LV_USE_GROUP
+
+static void style_mod(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 20;
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 2;
+#endif
+}
+
+static void style_mod_edit(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 20;
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 3;
+#endif
+}
+
+#endif /*LV_USE_GROUP*/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the mono theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color; is not used
+ * in lv_theme_mono
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_mono_init(uint16_t hue, lv_font_t * font)
+{
+
+    (void)hue; /*Unused*/
+
+    if(font == NULL) font = LV_FONT_DEFAULT;
+
+    _font = font;
+
+    /*For backward compatibility initialize all theme elements with a default 
style */
+    uint16_t i;
+    lv_style_t ** style_p = (lv_style_t **)&theme.style;
+    for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
+        *style_p = &def;
+        style_p++;
+    }
+
+    basic_init();
+    cont_init();
+    btn_init();
+    label_init();
+    img_init();
+    line_init();
+    led_init();
+    bar_init();
+    slider_init();
+    sw_init();
+    lmeter_init();
+    gauge_init();
+    chart_init();
+    calendar_init();
+    cb_init();
+    btnm_init();
+    kb_init();
+    mbox_init();
+    page_init();
+    ta_init();
+    list_init();
+    ddlist_init();
+    roller_init();
+    tabview_init();
+    win_init();
+
+#if LV_USE_GROUP
+    theme.group.style_mod_xcb      = style_mod;
+    theme.group.style_mod_edit_xcb = style_mod_edit;
+#endif
+
+    return &theme;
+}
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_mono(void)
+{
+    return &theme;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_mono.h 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_mono.h
new file mode 100755
index 0000000..6730d1e
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_mono.h
@@ -0,0 +1,60 @@
+/**
+ * @file lv_theme_mono.h
+ *
+ */
+
+#ifndef LV_THEME_MONO_H
+#define LV_THEME_MONO_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_THEME_MONO
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the mono theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_mono_init(uint16_t hue, lv_font_t * font);
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_mono(void);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_THEME_MONO_H*/
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_nemo.c 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_nemo.c
new file mode 100755
index 0000000..564c232
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_nemo.c
@@ -0,0 +1,929 @@
+/**
+ * @file lv_theme_nemo.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_theme.h"
+
+#if LV_USE_THEME_NEMO
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+static uint16_t _hue;
+static lv_font_t * _font;
+static lv_font_t * _font;
+static lv_font_t * _font;
+
+static lv_theme_t theme;
+static lv_style_t def;
+static lv_style_t bg;
+static lv_style_t scr;
+static lv_style_t panel; /*General fancy background (e.g. to chart or ta)*/
+static lv_style_t sb;
+static lv_style_t btn_rel, btn_pr, btn_trel, btn_tpr, btn_ina;
+
+#if LV_USE_BAR
+static lv_style_t bar_bg, bar_indic;
+#endif
+
+#if LV_USE_SLIDER
+static lv_style_t slider_knob;
+#endif
+
+#if LV_USE_LMETER
+static lv_style_t lmeter_bg;
+#endif
+
+#if LV_USE_DDLIST
+static lv_style_t ddlist_bg, ddlist_sel;
+#endif
+
+#if LV_USE_BTNM
+static lv_style_t btnm_bg, btnm_rel, btnm_pr, btnm_trel, btnm_ina;
+#endif
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+static void basic_init(void)
+{
+    /*Default*/
+    lv_style_copy(&def, &lv_style_plain);
+    def.body.opa = LV_OPA_COVER;
+    def.glass    = 0;
+
+    def.body.main_color     = lv_color_hex3(0x222);
+    def.body.grad_color     = lv_color_hex3(0x222);
+    def.body.radius         = 0;
+    def.body.padding.left   = LV_DPI / 8;
+    def.body.padding.right  = LV_DPI / 8;
+    def.body.padding.top    = LV_DPI / 8;
+    def.body.padding.bottom = LV_DPI / 8;
+    def.body.padding.inner  = LV_DPI / 8;
+    def.body.border.color   = LV_COLOR_SILVER;
+    def.body.border.width   = 1;
+    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;
+    def.text.letter_space = 1;
+    def.text.line_space   = 2;
+
+    def.image.color   = lv_color_hex3(0xDDD);
+    def.image.intense = LV_OPA_TRANSP;
+
+    def.line.color = lv_color_hex3(0xDDD);
+    def.line.width = 1;
+
+    /*Background*/
+    lv_style_copy(&bg, &def);
+    bg.body.main_color   = lv_color_hex3(0x005);
+    bg.body.grad_color   = lv_color_hex3(0x045);
+    bg.body.border.width = 2;
+    bg.body.border.color = lv_color_hex3(0x666);
+    bg.body.shadow.color = LV_COLOR_SILVER;
+
+    lv_style_copy(&scr, &bg);
+    scr.body.padding.bottom = 0;
+    scr.body.padding.top    = 0;
+    scr.body.padding.left   = 0;
+    scr.body.padding.right  = 0;
+
+    /*Panel*/
+    lv_style_copy(&panel, &def);
+    panel.body.radius       = LV_DPI / 10;
+    panel.body.main_color   = lv_color_hex3(0x500);
+    panel.body.grad_color   = lv_color_hex3(0x505);
+    panel.body.border.color = lv_color_hex3(0xccc);
+    panel.body.border.width = 2;
+    panel.body.border.opa   = LV_OPA_60;
+    panel.text.color        = lv_color_hsv_to_rgb(_hue, 8, 96);
+    panel.line.color        = lv_color_hsv_to_rgb(_hue, 20, 70);
+
+    /*Scrollbar*/
+    lv_style_copy(&sb, &def);
+    sb.body.opa            = LV_OPA_50;
+    sb.body.radius         = LV_RADIUS_CIRCLE;
+    sb.body.border.color   = LV_COLOR_SILVER;
+    sb.body.border.opa     = LV_OPA_40;
+    sb.body.border.width   = 1;
+    sb.body.main_color     = lv_color_hsv_to_rgb(_hue, 33, 92);
+    sb.body.grad_color     = lv_color_hsv_to_rgb(_hue, 33, 92);
+    sb.body.padding.left   = 1;
+    sb.body.padding.right  = 1;
+    sb.body.padding.top    = 1;
+    sb.body.padding.bottom = 1;
+    sb.body.padding.inner  = LV_DPI / 15; /*Scrollbar width*/
+
+    theme.style.bg    = &bg;
+    theme.style.scr   = &scr;
+    theme.style.panel = &panel;
+}
+
+static void btn_init(void)
+{
+#if LV_USE_BTN != 0
+    lv_style_copy(&btn_rel, &def);
+    btn_rel.glass               = 0;
+    btn_rel.body.opa            = LV_OPA_TRANSP;
+    btn_rel.body.radius         = LV_RADIUS_CIRCLE;
+    btn_rel.body.border.width   = 2;
+    btn_rel.body.border.color   = lv_color_hsv_to_rgb(_hue, 70, 90);
+    btn_rel.body.border.opa     = LV_OPA_80;
+    btn_rel.body.padding.left   = LV_DPI / 4;
+    btn_rel.body.padding.right  = LV_DPI / 4;
+    btn_rel.body.padding.top    = LV_DPI / 6;
+    btn_rel.body.padding.bottom = LV_DPI / 6;
+    btn_rel.body.padding.inner  = LV_DPI / 10;
+    btn_rel.text.color          = lv_color_hsv_to_rgb(_hue, 8, 96);
+    btn_rel.text.font           = _font;
+
+    lv_style_copy(&btn_pr, &btn_rel);
+    btn_pr.body.opa        = LV_OPA_COVER;
+    btn_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 50);
+    btn_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 50, 50);
+    btn_pr.body.border.opa = LV_OPA_60;
+    btn_pr.text.font       = _font;
+    btn_pr.text.color      = lv_color_hsv_to_rgb(_hue, 10, 100);
+
+    lv_style_copy(&btn_trel, &btn_pr);
+    btn_trel.body.opa          = LV_OPA_COVER;
+    btn_trel.body.main_color   = lv_color_hsv_to_rgb(_hue, 50, 60);
+    btn_trel.body.grad_color   = lv_color_hsv_to_rgb(_hue, 50, 60);
+    btn_trel.body.border.opa   = LV_OPA_60;
+    btn_trel.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 90);
+    btn_trel.text.font         = _font;
+    btn_trel.text.color        = lv_color_hsv_to_rgb(_hue, 0, 100);
+
+    lv_style_copy(&btn_tpr, &btn_trel);
+    btn_tpr.body.opa          = LV_OPA_COVER;
+    btn_tpr.body.main_color   = lv_color_hsv_to_rgb(_hue, 50, 50);
+    btn_tpr.body.grad_color   = lv_color_hsv_to_rgb(_hue, 50, 50);
+    btn_tpr.body.border.opa   = LV_OPA_60;
+    btn_tpr.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 70);
+    btn_tpr.text.font         = _font;
+    btn_tpr.text.color        = lv_color_hsv_to_rgb(_hue, 10, 90);
+
+    lv_style_copy(&btn_ina, &btn_rel);
+    btn_ina.body.border.opa   = LV_OPA_60;
+    btn_ina.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 50);
+    btn_ina.text.font         = _font;
+    btn_ina.text.color        = lv_color_hsv_to_rgb(_hue, 10, 90);
+
+    theme.style.btn.rel     = &btn_rel;
+    theme.style.btn.pr      = &btn_pr;
+    theme.style.btn.tgl_rel = &btn_trel;
+    theme.style.btn.tgl_pr  = &btn_tpr;
+    theme.style.btn.ina     = &btn_ina;
+#endif
+}
+
+static void label_init(void)
+{
+#if LV_USE_LABEL != 0
+    static lv_style_t label_prim, label_sec, label_hint;
+
+    lv_style_copy(&label_prim, &def);
+    label_prim.text.font  = _font;
+    label_prim.text.color = lv_color_hsv_to_rgb(_hue, 5, 96);
+
+    lv_style_copy(&label_sec, &label_prim);
+    label_sec.text.color = lv_color_hsv_to_rgb(_hue, 40, 85);
+
+    lv_style_copy(&label_hint, &label_prim);
+    label_hint.text.color = lv_color_hsv_to_rgb(_hue, 20, 70);
+
+    theme.style.label.prim = &label_prim;
+    theme.style.label.sec  = &label_sec;
+    theme.style.label.hint = &label_hint;
+#endif
+}
+
+static void bar_init(void)
+{
+#if LV_USE_BAR
+    lv_style_copy(&bar_bg, &def);
+    bar_bg.body.opa            = LV_OPA_30;
+    bar_bg.body.radius         = LV_RADIUS_CIRCLE;
+    bar_bg.body.main_color     = LV_COLOR_WHITE;
+    bar_bg.body.grad_color     = LV_COLOR_SILVER;
+    bar_bg.body.border.width   = 2;
+    bar_bg.body.border.color   = LV_COLOR_SILVER;
+    bar_bg.body.border.opa     = LV_OPA_20;
+    bar_bg.body.padding.left   = 0;
+    bar_bg.body.padding.right  = 0;
+    bar_bg.body.padding.top    = LV_DPI / 10;
+    bar_bg.body.padding.bottom = LV_DPI / 10;
+    bar_bg.body.padding.inner  = 0;
+
+    lv_style_copy(&bar_indic, &def);
+    bar_indic.body.radius         = LV_RADIUS_CIRCLE;
+    bar_indic.body.border.width   = 2;
+    bar_indic.body.border.color   = LV_COLOR_SILVER;
+    bar_indic.body.border.opa     = LV_OPA_70;
+    bar_indic.body.padding.left   = 0;
+    bar_indic.body.padding.right  = 0;
+    bar_indic.body.padding.top    = 0;
+    bar_indic.body.padding.bottom = 0;
+    bar_indic.body.shadow.width   = LV_DPI / 20;
+    bar_indic.body.shadow.color   = lv_color_hsv_to_rgb(_hue, 20, 90);
+    bar_indic.body.main_color     = lv_color_hsv_to_rgb(_hue, 40, 80);
+    bar_indic.body.grad_color     = lv_color_hsv_to_rgb(_hue, 40, 80);
+
+    theme.style.bar.bg    = &bar_bg;
+    theme.style.bar.indic = &bar_indic;
+#endif
+}
+
+static void img_init(void)
+{
+#if LV_USE_IMG != 0
+    static lv_style_t img_light, img_dark;
+    lv_style_copy(&img_light, &def);
+    img_light.image.color   = lv_color_hsv_to_rgb(_hue, 15, 85);
+    img_light.image.intense = LV_OPA_80;
+
+    lv_style_copy(&img_dark, &def);
+    img_light.image.color   = lv_color_hsv_to_rgb(_hue, 85, 65);
+    img_light.image.intense = LV_OPA_80;
+
+    theme.style.img.light = &img_light;
+    theme.style.img.dark  = &img_dark;
+#endif
+}
+
+static void line_init(void)
+{
+#if LV_USE_LINE != 0
+    static lv_style_t line_decor;
+    lv_style_copy(&line_decor, &def);
+    line_decor.line.color = lv_color_hsv_to_rgb(_hue, 50, 50);
+    line_decor.line.width = 1;
+
+    theme.style.line.decor = &line_decor;
+#endif
+}
+
+static void led_init(void)
+{
+#if LV_USE_LED != 0
+    static lv_style_t led;
+    lv_style_copy(&led, &lv_style_pretty_color);
+    led.body.shadow.width = LV_DPI / 10;
+    led.body.radius       = LV_RADIUS_CIRCLE;
+    led.body.border.width = LV_DPI / 30;
+    led.body.border.opa   = LV_OPA_30;
+    led.body.main_color   = lv_color_hsv_to_rgb(_hue, 100, 100);
+    led.body.grad_color   = lv_color_hsv_to_rgb(_hue, 100, 40);
+    led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
+    led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 100, 100);
+
+    theme.style.led = &led;
+#endif
+}
+
+static void slider_init(void)
+{
+#if LV_USE_SLIDER != 0
+    lv_style_copy(&slider_knob, &def);
+    slider_knob.body.opa          = LV_OPA_60;
+    slider_knob.body.radius       = LV_RADIUS_CIRCLE;
+    slider_knob.body.main_color   = LV_COLOR_PURPLE;
+    slider_knob.body.grad_color   = LV_COLOR_SILVER;
+    slider_knob.body.border.width = 2;
+    slider_knob.body.border.color = LV_COLOR_ORANGE;
+    slider_knob.body.border.opa   = LV_OPA_50;
+
+    theme.style.slider.bg    = &bar_bg;
+    theme.style.slider.indic = &bar_indic;
+    theme.style.slider.knob  = &slider_knob;
+#endif
+}
+
+static void sw_init(void)
+{
+#if LV_USE_SW != 0
+    static lv_style_t sw_bg, sw_indic, sw_knob;
+    lv_style_copy(&sw_bg, &bar_bg);
+    sw_bg.body.opa            = LV_OPA_COVER;
+    sw_bg.body.padding.left   = -2;
+    sw_bg.body.padding.right  = -2;
+    sw_bg.body.padding.top    = -2;
+    sw_bg.body.padding.bottom = -2;
+    sw_bg.body.main_color     = lv_color_hex3(0x666);
+    sw_bg.body.grad_color     = lv_color_hex3(0x999);
+    sw_bg.body.border.width   = 2;
+    sw_bg.body.border.opa     = LV_OPA_50;
+
+    lv_style_copy(&sw_indic, &bar_indic);
+    sw_indic.body.shadow.width   = LV_DPI / 20;
+    sw_indic.body.padding.left   = 0;
+    sw_indic.body.padding.right  = 0;
+    sw_indic.body.padding.top    = 0;
+    sw_indic.body.padding.bottom = 0;
+
+    lv_style_copy(&sw_knob, &slider_knob);
+    sw_knob.body.opa = LV_OPA_80;
+
+    theme.style.sw.bg       = &sw_bg;
+    theme.style.sw.indic    = &sw_indic;
+    theme.style.sw.knob_off = &sw_knob;
+    theme.style.sw.knob_on  = &sw_knob;
+#endif
+}
+
+static void lmeter_init(void)
+{
+#if LV_USE_LMETER != 0
+    lv_style_copy(&lmeter_bg, &def);
+    lmeter_bg.body.main_color   = lv_color_hsv_to_rgb(_hue, 10, 70);
+    lmeter_bg.body.grad_color   = lv_color_hsv_to_rgb(_hue, 80, 80);
+    lmeter_bg.body.padding.left = LV_DPI / 8; /*Scale line length*/
+    lmeter_bg.line.color        = lv_color_hex3(0x500);
+    lmeter_bg.line.width        = 2;
+
+    theme.style.lmeter = &lmeter_bg;
+
+#endif
+}
+
+static void gauge_init(void)
+{
+#if LV_USE_GAUGE != 0
+    static lv_style_t gauge_bg;
+    lv_style_copy(&gauge_bg, &def);
+    gauge_bg.body.main_color     = lv_color_hsv_to_rgb(_hue, 20, 100);
+    gauge_bg.body.grad_color     = gauge_bg.body.main_color;
+    gauge_bg.body.padding.left   = LV_DPI / 16; /*Scale line length*/
+    gauge_bg.body.padding.right  = LV_DPI / 16; /*Scale line length*/
+    gauge_bg.body.padding.top    = LV_DPI / 20; /*Needle center size*/
+    gauge_bg.body.padding.bottom = LV_DPI / 20; /*Needle center size*/
+    gauge_bg.body.padding.inner  = LV_DPI / 12; /*Label - scale distance*/
+    gauge_bg.body.border.color   = lv_color_hex3(0x500);
+    gauge_bg.line.color          = lv_color_hsv_to_rgb(_hue, 80, 75);
+    gauge_bg.line.width          = 2;
+    gauge_bg.text.color          = lv_color_hsv_to_rgb(_hue, 10, 90);
+    gauge_bg.text.font           = _font;
+
+    theme.style.gauge = &gauge_bg;
+#endif
+}
+
+static void arc_init(void)
+{
+#if LV_USE_ARC != 0
+
+    static lv_style_t arc;
+    lv_style_copy(&arc, &def);
+    arc.line.width   = 10;
+    arc.line.color   = lv_color_hsv_to_rgb(_hue, 70, 90);
+    arc.line.rounded = 1;
+
+    /*For preloader*/
+    arc.body.border.width = 0;
+
+    theme.style.arc = &arc;
+#endif
+}
+
+static void preload_init(void)
+{
+#if LV_USE_PRELOAD != 0
+
+    theme.style.preload = theme.style.arc;
+#endif
+}
+
+static void chart_init(void)
+{
+#if LV_USE_CHART
+    theme.style.chart = &panel;
+#endif
+}
+
+static void calendar_init(void)
+{
+#if LV_USE_CALENDAR != 0
+    static lv_style_t ina_days;
+    lv_style_copy(&ina_days, &def);
+    ina_days.text.color = lv_color_hsv_to_rgb(_hue, 0, 50);
+
+    static lv_style_t high_days;
+    lv_style_copy(&high_days, &def);
+    high_days.text.color = lv_color_hsv_to_rgb(_hue, 50, 90);
+
+    static lv_style_t week_box;
+    lv_style_copy(&week_box, &def);
+    week_box.body.opa            = LV_OPA_TRANSP;
+    week_box.body.border.color   = theme.style.panel->body.border.color;
+    week_box.body.padding.top    = LV_DPI / 20;
+    week_box.body.padding.bottom = LV_DPI / 20;
+
+    static lv_style_t today_box;
+    lv_style_copy(&today_box, &def);
+    today_box.body.main_color     = LV_COLOR_WHITE;
+    today_box.body.grad_color     = LV_COLOR_WHITE;
+    today_box.body.padding.top    = LV_DPI / 20;
+    today_box.body.padding.bottom = LV_DPI / 20;
+    today_box.body.radius         = 0;
+
+    theme.style.calendar.bg               = theme.style.panel;
+    theme.style.calendar.header           = theme.style.label.prim;
+    theme.style.calendar.inactive_days    = theme.style.label.hint;
+    theme.style.calendar.highlighted_days = theme.style.label.sec;
+    theme.style.calendar.week_box         = &week_box;
+    theme.style.calendar.today_box        = &week_box;
+    theme.style.calendar.header_pr        = theme.style.label.prim;
+#endif
+}
+
+static void cb_init(void)
+{
+#if LV_USE_CB != 0
+    static lv_style_t cb_bg, cb_rel, cb_pr, cb_trel, cb_tpr, cb_ina;
+    lv_style_copy(&cb_rel, &bg);
+    cb_rel.body.radius       = LV_DPI / 20;
+    cb_rel.body.border.width = 1;
+    cb_rel.body.border.color = LV_COLOR_ORANGE;
+    cb_rel.body.main_color   = LV_COLOR_PURPLE;
+    cb_rel.body.grad_color   = LV_COLOR_SILVER;
+
+    lv_style_copy(&cb_bg, &bg);
+    cb_bg.body.opa            = LV_OPA_TRANSP;
+    cb_bg.body.border.width   = 0;
+    cb_bg.body.padding.inner  = LV_DPI / 8;
+    cb_bg.body.padding.left   = 0;
+    cb_bg.body.padding.right  = 0;
+    cb_bg.body.padding.top    = 0;
+    cb_bg.body.padding.bottom = 0;
+    cb_bg.text.font           = _font;
+
+    lv_style_copy(&cb_pr, &cb_rel);
+    cb_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 90);
+    cb_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 82);
+
+    lv_style_copy(&cb_trel, &cb_rel);
+    cb_trel.body.border.width = 4;
+    cb_trel.body.border.color = LV_COLOR_WHITE;
+    cb_trel.body.border.opa   = LV_OPA_60;
+    cb_trel.body.main_color   = lv_color_hsv_to_rgb(_hue, 50, 82);
+    cb_trel.body.grad_color   = lv_color_hsv_to_rgb(_hue, 50, 62);
+
+    lv_style_copy(&cb_tpr, &cb_trel);
+    cb_tpr.body.border.color = LV_COLOR_SILVER;
+    cb_tpr.body.border.opa   = LV_OPA_70;
+    cb_tpr.body.main_color   = lv_color_hsv_to_rgb(_hue, 50, 72);
+    cb_tpr.body.grad_color   = lv_color_hsv_to_rgb(_hue, 50, 52);
+
+    lv_style_copy(&cb_ina, &cb_trel);
+    cb_ina.body.border.width = 1;
+    cb_ina.body.border.color = LV_COLOR_GRAY;
+    cb_ina.body.main_color   = LV_COLOR_PURPLE;
+    cb_ina.body.grad_color   = LV_COLOR_SILVER;
+
+    theme.style.cb.bg          = &cb_bg;
+    theme.style.cb.box.rel     = &cb_rel;
+    theme.style.cb.box.pr      = &cb_pr;
+    theme.style.cb.box.tgl_rel = &cb_trel;
+    theme.style.cb.box.tgl_pr  = &cb_tpr;
+    theme.style.cb.box.ina     = &cb_ina;
+#endif
+}
+
+static void btnm_init(void)
+{
+#if LV_USE_BTNM
+    lv_style_copy(&btnm_bg, &lv_style_transp_tight);
+    btnm_bg.body.border.width = 1;
+    btnm_bg.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 80);
+    btnm_bg.body.border.opa   = LV_OPA_COVER;
+    btnm_bg.body.radius       = LV_DPI / 8;
+
+    lv_style_copy(&btnm_rel, &lv_style_plain);
+    btnm_rel.body.opa    = LV_OPA_TRANSP;
+    btnm_rel.body.radius = LV_DPI / 8;
+    btnm_rel.text.color  = lv_color_hsv_to_rgb(_hue, 60, 80);
+    btnm_rel.text.font   = _font;
+
+    lv_style_copy(&btnm_pr, &lv_style_plain);
+    btnm_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 70);
+    btnm_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 40, 70);
+    btnm_pr.body.radius     = LV_DPI / 8;
+    btnm_pr.text.color      = lv_color_hsv_to_rgb(_hue, 40, 40);
+    btnm_pr.text.font       = _font;
+
+    lv_style_copy(&btnm_trel, &btnm_rel);
+    btnm_trel.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 80);
+    btnm_trel.body.border.width = 3;
+
+    lv_style_copy(&btnm_ina, &btnm_rel);
+    btnm_ina.text.color = lv_color_hsv_to_rgb(_hue, 10, 60);
+
+    theme.style.btnm.bg          = &btnm_bg;
+    theme.style.btnm.btn.rel     = &btnm_rel;
+    theme.style.btnm.btn.pr      = &btnm_pr;
+    theme.style.btnm.btn.tgl_rel = &btnm_trel;
+    theme.style.btnm.btn.tgl_pr  = &btnm_pr;
+    theme.style.btnm.btn.ina     = &btnm_ina;
+#endif
+}
+
+static void kb_init(void)
+{
+#if LV_USE_KB
+    theme.style.kb.bg          = &btnm_bg;
+    theme.style.kb.btn.rel     = &btnm_rel;
+    theme.style.kb.btn.pr      = &btnm_pr;
+    theme.style.kb.btn.tgl_rel = &btnm_trel;
+    theme.style.kb.btn.tgl_pr  = &btnm_pr;
+    theme.style.kb.btn.ina     = &btnm_ina;
+#endif
+}
+
+static void mbox_init(void)
+{
+#if LV_USE_MBOX
+    static lv_style_t mbox_bg;
+    lv_style_copy(&mbox_bg, &panel);
+    mbox_bg.body.shadow.width = LV_DPI / 12;
+
+    theme.style.mbox.bg      = &mbox_bg;
+    theme.style.mbox.btn.bg  = &lv_style_transp;
+    theme.style.mbox.btn.rel = &btn_trel;
+    theme.style.mbox.btn.pr  = &btn_tpr;
+#endif
+}
+
+static void page_init(void)
+{
+#if LV_USE_PAGE
+    theme.style.page.bg   = &panel;
+    theme.style.page.scrl = &lv_style_transp_fit;
+    theme.style.page.sb   = &sb;
+#endif
+}
+
+static void ta_init(void)
+{
+#if LV_USE_TA
+    theme.style.ta.area    = &panel;
+    theme.style.ta.oneline = &panel;
+    theme.style.ta.cursor  = NULL;
+    theme.style.ta.sb      = &sb;
+#endif
+}
+
+static void spinbox_init(void)
+{
+#if LV_USE_SPINBOX
+    theme.style.spinbox.bg     = &panel;
+    theme.style.spinbox.cursor = theme.style.ta.cursor;
+    theme.style.spinbox.sb     = theme.style.ta.sb;
+#endif
+}
+
+static void list_init(void)
+{
+#if LV_USE_LIST != 0
+    static lv_style_t list_bg, list_rel, list_pr, list_trel, list_tpr, 
list_ina;
+    lv_style_copy(&list_rel, &def);
+    list_rel.body.opa          = LV_OPA_TRANSP;
+    list_rel.body.border.width = 1;
+    list_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 50, 85);
+    list_rel.body.border.opa   = LV_OPA_COVER;
+    list_rel.text.color        = lv_color_hsv_to_rgb(_hue, 10, 94);
+    list_rel.text.font         = _font;
+
+    lv_style_copy(&list_pr, &list_rel);
+    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);
+    list_pr.text.color      = lv_color_hsv_to_rgb(_hue, 7, 96);
+
+    lv_style_copy(&list_trel, &list_rel);
+    lv_style_copy(&list_tpr, &list_pr);
+    lv_style_copy(&list_ina, &def);
+
+    lv_style_copy(&list_bg, &list_rel);
+    list_bg.body.padding.left   = 0;
+    list_bg.body.padding.right  = 0;
+    list_bg.body.padding.top    = 0;
+    list_bg.body.padding.bottom = 0;
+
+    theme.style.list.sb          = &sb;
+    theme.style.list.bg          = &list_bg;
+    theme.style.list.scrl        = &lv_style_transp_tight;
+    theme.style.list.btn.rel     = &list_rel;
+    theme.style.list.btn.pr      = &list_pr;
+    theme.style.list.btn.tgl_rel = &list_trel;
+    theme.style.list.btn.tgl_pr  = &list_tpr;
+    theme.style.list.btn.ina     = &list_ina;
+#endif
+}
+
+static void ddlist_init(void)
+{
+#if LV_USE_DDLIST != 0
+    lv_style_copy(&ddlist_bg, &panel);
+    ddlist_bg.text.line_space     = LV_DPI / 8;
+    ddlist_bg.body.padding.left   = LV_DPI / 6;
+    ddlist_bg.body.padding.right  = LV_DPI / 6;
+    ddlist_bg.body.padding.top    = LV_DPI / 6;
+    ddlist_bg.body.padding.bottom = LV_DPI / 6;
+
+    lv_style_copy(&ddlist_sel, &panel);
+    ddlist_sel.body.main_color = lv_color_hsv_to_rgb(_hue, 45, 70);
+    ddlist_sel.body.grad_color = lv_color_hsv_to_rgb(_hue, 45, 70);
+    ddlist_sel.body.opa        = LV_OPA_COVER;
+    ddlist_sel.body.radius     = 0;
+
+    theme.style.ddlist.bg  = &ddlist_bg;
+    theme.style.ddlist.sel = &ddlist_sel;
+    theme.style.ddlist.sb  = &sb;
+#endif
+}
+
+static void roller_init(void)
+{
+#if LV_USE_ROLLER != 0
+    static lv_style_t roller_bg, roller_sel;
+    lv_style_copy(&roller_bg, &ddlist_bg);
+    roller_bg.text.line_space   = LV_DPI / 6;
+    roller_bg.body.radius       = LV_DPI / 20;
+    roller_bg.body.main_color   = lv_color_hex3(0x500);
+    roller_bg.body.grad_color   = lv_color_hex3(0x005);
+    roller_bg.body.border.opa   = LV_OPA_30;
+    roller_bg.text.opa          = LV_OPA_70;
+    roller_bg.text.color        = lv_color_hsv_to_rgb(_hue, 20, 70);
+    roller_bg.body.shadow.width = 0;
+
+    lv_style_copy(&roller_sel, &panel);
+    roller_sel.body.opa    = LV_OPA_TRANSP;
+    roller_sel.body.radius = 0;
+    roller_sel.text.opa    = LV_OPA_COVER;
+    roller_sel.text.color  = lv_color_hsv_to_rgb(_hue, 70, 95);
+
+    theme.style.roller.bg  = &roller_bg;
+    theme.style.roller.sel = &roller_sel;
+#endif
+}
+
+static void tabview_init(void)
+{
+#if LV_USE_TABVIEW != 0
+    static lv_style_t tab_rel, tab_pr, tab_trel, tab_tpr, tab_indic;
+    lv_style_copy(&tab_rel, &def);
+    tab_rel.body.main_color     = lv_color_hex3(0x500);
+    tab_rel.body.grad_color     = lv_color_hex3(0x005);
+    tab_rel.body.padding.left   = 0;
+    tab_rel.body.padding.right  = 0;
+    tab_rel.body.padding.top    = LV_DPI / 6;
+    tab_rel.body.padding.bottom = LV_DPI / 6;
+    tab_rel.body.padding.inner  = 0;
+    tab_rel.body.border.width   = 1;
+    tab_rel.body.border.color   = LV_COLOR_SILVER;
+    tab_rel.body.border.opa     = LV_OPA_40;
+    tab_rel.text.color          = lv_color_hex3(0xDDD);
+    tab_rel.text.font           = _font;
+
+    lv_style_copy(&tab_pr, &tab_rel);
+    tab_pr.body.main_color = lv_color_hex3(0x005);
+    tab_pr.body.grad_color = lv_color_hex3(0x500);
+
+    lv_style_copy(&tab_trel, &def);
+    tab_trel.body.opa            = LV_OPA_TRANSP;
+    tab_trel.body.padding.left   = 0;
+    tab_trel.body.padding.right  = 0;
+    tab_trel.body.padding.top    = LV_DPI / 6;
+    tab_trel.body.padding.bottom = LV_DPI / 6;
+    tab_trel.body.padding.inner  = 0;
+    tab_trel.body.border.width   = 1;
+    tab_trel.body.border.color   = LV_COLOR_SILVER;
+    tab_trel.body.border.opa     = LV_OPA_40;
+    tab_trel.text.color          = lv_color_hsv_to_rgb(_hue, 10, 94);
+    tab_trel.text.font           = _font;
+
+    lv_style_copy(&tab_tpr, &def);
+    tab_tpr.body.main_color     = LV_COLOR_GRAY;
+    tab_tpr.body.grad_color     = LV_COLOR_GRAY;
+    tab_tpr.body.padding.left   = 0;
+    tab_tpr.body.padding.right  = 0;
+    tab_tpr.body.padding.top    = LV_DPI / 6;
+    tab_tpr.body.padding.bottom = LV_DPI / 6;
+    tab_tpr.body.padding.inner  = 0;
+    tab_tpr.body.border.width   = 1;
+    tab_tpr.body.border.color   = LV_COLOR_SILVER;
+    tab_tpr.body.border.opa     = LV_OPA_40;
+    tab_tpr.text.color          = lv_color_hsv_to_rgb(_hue, 10, 94);
+    tab_tpr.text.font           = _font;
+
+    lv_style_copy(&tab_indic, &def);
+    tab_indic.body.border.width  = 0;
+    tab_indic.body.main_color    = lv_color_hsv_to_rgb(_hue, 80, 87);
+    tab_indic.body.grad_color    = lv_color_hsv_to_rgb(_hue, 80, 87);
+    tab_indic.body.padding.inner = LV_DPI / 10; /*Indicator height*/
+
+    theme.style.tabview.bg          = &bg;
+    theme.style.tabview.indic       = &tab_indic;
+    theme.style.tabview.btn.bg      = &lv_style_transp_tight;
+    theme.style.tabview.btn.rel     = &tab_rel;
+    theme.style.tabview.btn.pr      = &tab_pr;
+    theme.style.tabview.btn.tgl_rel = &tab_trel;
+    theme.style.tabview.btn.tgl_pr  = &tab_tpr;
+#endif
+}
+
+static void tileview_init(void)
+{
+#if LV_USE_TILEVIEW != 0
+    theme.style.tileview.bg   = &lv_style_transp_tight;
+    theme.style.tileview.scrl = &lv_style_transp_tight;
+    theme.style.tileview.sb   = theme.style.page.sb;
+#endif
+}
+
+static void table_init(void)
+{
+#if LV_USE_TABLE != 0
+    static lv_style_t cell;
+    lv_style_copy(&cell, &panel);
+    cell.body.radius       = 0;
+    cell.body.border.width = 1;
+
+    theme.style.table.bg   = &lv_style_transp_tight;
+    theme.style.table.cell = &cell;
+#endif
+}
+
+static void win_init(void)
+{
+#if LV_USE_WIN != 0
+    static lv_style_t win_header;
+
+    lv_style_copy(&win_header, &panel);
+    win_header.body.radius         = 0;
+    win_header.body.padding.left   = LV_DPI / 12;
+    win_header.body.padding.right  = LV_DPI / 12;
+    win_header.body.padding.top    = LV_DPI / 20;
+    win_header.body.padding.bottom = LV_DPI / 20;
+    win_header.body.border.opa     = panel.body.border.opa;
+    win_header.body.border.width   = panel.body.border.width;
+    win_header.body.border.color   = lv_color_hsv_to_rgb(_hue, 20, 80);
+    win_header.text.color          = lv_color_hsv_to_rgb(_hue, 5, 100);
+
+    theme.style.win.bg      = &bg;
+    theme.style.win.sb      = &sb;
+    theme.style.win.header  = &win_header;
+    theme.style.win.content = &lv_style_transp;
+    theme.style.win.btn.rel = &btn_rel;
+    theme.style.win.btn.pr  = &btn_pr;
+#endif
+}
+
+#if LV_USE_GROUP
+
+static void style_mod(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    style->body.border.width = 2;
+    style->body.border.color = LV_COLOR_SILVER;
+    style->body.border.opa   = LV_OPA_70;
+    style->body.shadow.width = LV_DPI / 20;
+    style->body.shadow.color = lv_color_hsv_to_rgb(_hue, 20, 90);
+    style->body.main_color   = lv_color_hsv_to_rgb(_hue, 40, 80);
+    style->body.grad_color   = lv_color_hsv_to_rgb(_hue, 40, 80);
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 2;
+#endif
+}
+
+static void style_mod_edit(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_GREEN;
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 20;
+
+    style->body.main_color   = lv_color_mix(style->body.main_color, 
LV_COLOR_GREEN, LV_OPA_70);
+    style->body.grad_color   = lv_color_mix(style->body.grad_color, 
LV_COLOR_GREEN, LV_OPA_70);
+    style->body.shadow.color = lv_color_mix(style->body.shadow.color, 
LV_COLOR_GREEN, LV_OPA_60);
+
+    style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, 
LV_OPA_70);
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 3;
+#endif
+}
+
+#endif /*LV_USE_GROUP*/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the nemo theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_nemo_init(uint16_t hue, lv_font_t * font)
+{
+    if(font == NULL) font = LV_FONT_DEFAULT;
+
+    _hue  = hue;
+    _font = font;
+
+    /*For backward compatibility initialize all theme elements with a default 
style */
+    uint16_t i;
+    lv_style_t ** style_p = (lv_style_t **)&theme.style;
+    for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
+        *style_p = &def;
+        style_p++;
+    }
+
+    basic_init();
+    btn_init();
+    label_init();
+    bar_init();
+    img_init();
+    line_init();
+    led_init();
+    slider_init();
+    sw_init();
+    lmeter_init();
+    gauge_init();
+    arc_init();
+    preload_init();
+    chart_init();
+    calendar_init();
+    cb_init();
+    btnm_init();
+    kb_init();
+    mbox_init();
+    page_init();
+    ta_init();
+    spinbox_init();
+    list_init();
+    ddlist_init();
+    roller_init();
+    tabview_init();
+    tileview_init();
+    table_init();
+    win_init();
+
+#if LV_USE_GROUP
+    theme.group.style_mod_xcb      = style_mod;
+    theme.group.style_mod_edit_xcb = style_mod_edit;
+#endif
+
+    return &theme;
+}
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_nemo(void)
+{
+    return &theme;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_nemo.h 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_nemo.h
new file mode 100755
index 0000000..5464cbf
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_nemo.h
@@ -0,0 +1,60 @@
+/**
+ * @file lv_theme_nemo.h
+ *
+ */
+
+#ifndef LV_THEME_NEMO_H
+#define LV_THEME_NEMO_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_THEME_NEMO
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the material theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_nemo_init(uint16_t hue, lv_font_t * font);
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_nemo(void);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_THEME_NEMO_H*/
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_night.c 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_night.c
new file mode 100755
index 0000000..c908939
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_night.c
@@ -0,0 +1,847 @@
+/**
+ * @file lv_theme_night.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_theme.h"
+
+#if LV_USE_THEME_NIGHT
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_theme_t theme;
+static lv_style_t def;
+
+/*Static style definitions*/
+static lv_style_t scr, bg, sb, panel;
+static lv_style_t prim, sec, hint;
+
+/*Saved input parameters*/
+static uint16_t _hue;
+static lv_font_t * _font;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+static void basic_init(void)
+{
+    lv_style_copy(&def, &lv_style_pretty); /*Initialize the default style*/
+    def.text.font = _font;
+
+    lv_style_copy(&bg, &lv_style_plain);
+    bg.body.main_color = lv_color_hsv_to_rgb(_hue, 11, 30);
+    bg.body.grad_color = lv_color_hsv_to_rgb(_hue, 11, 30);
+    bg.text.color      = lv_color_hsv_to_rgb(_hue, 5, 95);
+    bg.text.font       = _font;
+    bg.image.color     = lv_color_hsv_to_rgb(_hue, 5, 95);
+
+    lv_style_copy(&scr, &bg);
+    scr.body.padding.bottom = 0;
+    scr.body.padding.top    = 0;
+    scr.body.padding.left   = 0;
+    scr.body.padding.right  = 0;
+
+    lv_style_copy(&sb, &def);
+    sb.body.main_color     = lv_color_hsv_to_rgb(_hue, 30, 60);
+    sb.body.grad_color     = lv_color_hsv_to_rgb(_hue, 30, 60);
+    sb.body.border.width   = 0;
+    sb.body.padding.inner  = LV_DPI / 20;
+    sb.body.padding.left   = 0;
+    sb.body.padding.right  = 0;
+    sb.body.padding.top    = 0;
+    sb.body.padding.bottom = 0;
+    sb.body.radius         = LV_DPI / 30;
+    sb.body.opa            = LV_OPA_COVER;
+
+    lv_style_copy(&panel, &bg);
+    panel.body.main_color     = lv_color_hsv_to_rgb(_hue, 11, 18);
+    panel.body.grad_color     = lv_color_hsv_to_rgb(_hue, 11, 18);
+    panel.body.radius         = LV_DPI / 20;
+    panel.body.border.color   = lv_color_hsv_to_rgb(_hue, 10, 25);
+    panel.body.border.width   = 1;
+    panel.body.border.opa     = LV_OPA_COVER;
+    panel.body.padding.left   = LV_DPI / 10;
+    panel.body.padding.right  = LV_DPI / 10;
+    panel.body.padding.top    = LV_DPI / 10;
+    panel.body.padding.bottom = LV_DPI / 10;
+    panel.line.color          = lv_color_hsv_to_rgb(_hue, 20, 40);
+    panel.line.width          = 1;
+
+    theme.style.scr   = &scr;
+    theme.style.bg    = &bg;
+    theme.style.panel = &def;
+}
+
+static void cont_init(void)
+{
+#if LV_USE_CONT != 0
+
+    theme.style.cont = &panel;
+#endif
+}
+static void btn_init(void)
+{
+#if LV_USE_BTN != 0
+       static lv_style_t btn_rel, btn_pr, btn_tgl_rel, btn_tgl_pr, btn_ina;
+
+    lv_style_copy(&btn_rel, &def);
+    btn_rel.body.main_color     = lv_color_hsv_to_rgb(_hue, 10, 40);
+    btn_rel.body.grad_color     = lv_color_hsv_to_rgb(_hue, 10, 20);
+    btn_rel.body.border.color   = lv_color_hex3(0x111);
+    btn_rel.body.border.width   = 1;
+    btn_rel.body.border.opa     = LV_OPA_70;
+    btn_rel.body.padding.left   = LV_DPI / 4;
+    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);
+    btn_rel.image.color         = lv_color_hex3(0xeee);
+
+    lv_style_copy(&btn_pr, &btn_rel);
+    btn_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 30);
+    btn_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 10);
+
+    lv_style_copy(&btn_tgl_rel, &btn_rel);
+    btn_tgl_rel.body.main_color   = lv_color_hsv_to_rgb(_hue, 10, 20);
+    btn_tgl_rel.body.grad_color   = lv_color_hsv_to_rgb(_hue, 10, 40);
+    btn_tgl_rel.body.shadow.width = LV_DPI / 40;
+    btn_tgl_rel.text.color        = lv_color_hex3(0xddd);
+    btn_tgl_rel.image.color       = lv_color_hex3(0xddd);
+
+    lv_style_copy(&btn_tgl_pr, &btn_rel);
+    btn_tgl_pr.body.main_color   = lv_color_hsv_to_rgb(_hue, 10, 10);
+    btn_tgl_pr.body.grad_color   = lv_color_hsv_to_rgb(_hue, 10, 30);
+    btn_tgl_pr.body.shadow.width = LV_DPI / 30;
+    btn_tgl_pr.text.color        = lv_color_hex3(0xddd);
+    btn_tgl_pr.image.color       = lv_color_hex3(0xddd);
+
+    lv_style_copy(&btn_ina, &btn_rel);
+    btn_ina.body.main_color   = lv_color_hsv_to_rgb(_hue, 10, 20);
+    btn_ina.body.grad_color   = lv_color_hsv_to_rgb(_hue, 10, 20);
+    btn_ina.body.shadow.width = 0;
+    btn_ina.text.color        = lv_color_hex3(0xaaa);
+    btn_ina.image.color       = lv_color_hex3(0xaaa);
+
+    theme.style.btn.rel     = &btn_rel;
+    theme.style.btn.pr      = &btn_pr;
+    theme.style.btn.tgl_rel = &btn_tgl_rel;
+    theme.style.btn.tgl_pr  = &btn_tgl_pr;
+    theme.style.btn.ina     = &btn_ina;
+#endif
+}
+
+static void label_init(void)
+{
+#if LV_USE_LABEL != 0
+
+    lv_style_copy(&prim, &bg);
+    prim.text.color = lv_color_hsv_to_rgb(_hue, 5, 95);
+
+    lv_style_copy(&sec, &bg);
+    sec.text.color = lv_color_hsv_to_rgb(_hue, 15, 65);
+
+    lv_style_copy(&hint, &bg);
+    hint.text.color = lv_color_hsv_to_rgb(_hue, 20, 55);
+
+    theme.style.label.prim = &prim;
+    theme.style.label.sec  = &sec;
+    theme.style.label.hint = &hint;
+#endif
+}
+
+static void line_init(void)
+{
+#if LV_USE_LINE != 0
+
+    theme.style.line.decor = &def;
+#endif
+}
+
+static void led_init(void)
+{
+#if LV_USE_LED != 0
+    static lv_style_t led;
+    lv_style_copy(&led, &def);
+    led.body.shadow.width = LV_DPI / 10;
+    led.body.radius       = LV_RADIUS_CIRCLE;
+    led.body.border.width = LV_DPI / 30;
+    led.body.border.opa   = LV_OPA_30;
+    led.body.main_color   = lv_color_hsv_to_rgb(_hue, 100, 100);
+    led.body.grad_color   = lv_color_hsv_to_rgb(_hue, 100, 40);
+    led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
+    led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 100, 100);
+
+    theme.style.led = &led;
+#endif
+}
+
+static void img_init(void)
+{
+#if LV_USE_IMG != 0
+
+    theme.style.img.light = &def;
+    theme.style.img.dark  = &def;
+#endif
+}
+
+static void bar_init(void)
+{
+#if LV_USE_BAR
+       static lv_style_t bar_bg, bar_indic;
+    lv_style_copy(&bar_bg, &panel);
+    bar_bg.body.padding.left   = LV_DPI / 16;
+    bar_bg.body.padding.right  = LV_DPI / 16;
+    bar_bg.body.padding.top    = LV_DPI / 16;
+    bar_bg.body.padding.bottom = LV_DPI / 16;
+    bar_bg.body.radius         = LV_RADIUS_CIRCLE;
+
+    lv_style_copy(&bar_indic, &def);
+    bar_indic.body.main_color     = lv_color_hsv_to_rgb(_hue, 80, 70);
+    bar_indic.body.grad_color     = lv_color_hsv_to_rgb(_hue, 80, 70);
+    bar_indic.body.border.color   = lv_color_hsv_to_rgb(_hue, 20, 15);
+    bar_indic.body.border.width   = 1;
+    bar_indic.body.border.opa     = LV_OPA_COVER;
+    bar_indic.body.radius         = LV_RADIUS_CIRCLE;
+    bar_indic.body.padding.left   = 0;
+    bar_indic.body.padding.right  = 0;
+    bar_indic.body.padding.top    = 0;
+    bar_indic.body.padding.bottom = 0;
+
+    theme.style.bar.bg    = &bar_bg;
+    theme.style.bar.indic = &bar_indic;
+#endif
+}
+
+static void slider_init(void)
+{
+#if LV_USE_SLIDER != 0
+       static lv_style_t slider_knob;
+    lv_style_copy(&slider_knob, theme.style.btn.rel);
+    slider_knob.body.radius = LV_RADIUS_CIRCLE;
+
+    theme.style.slider.bg    = theme.style.bar.bg;
+    theme.style.slider.indic = theme.style.bar.indic;
+    theme.style.slider.knob  = &slider_knob;
+#endif
+}
+
+static void sw_init(void)
+{
+#if LV_USE_SW != 0
+
+    theme.style.sw.bg       = theme.style.bar.bg;
+    theme.style.sw.indic    = theme.style.bar.indic;
+    theme.style.sw.knob_off = theme.style.slider.knob;
+    theme.style.sw.knob_on  = theme.style.slider.knob;
+#endif
+}
+
+static void lmeter_init(void)
+{
+#if LV_USE_LMETER != 0
+       static lv_style_t lmeter_bg;
+    lv_style_copy(&lmeter_bg, &def);
+    lmeter_bg.body.main_color    = lv_color_hsv_to_rgb(_hue, 10, 70);
+    lmeter_bg.body.grad_color    = lv_color_hsv_to_rgb(_hue, 95, 90);
+    lmeter_bg.body.padding.left  = LV_DPI / 10; /*Scale line length*/
+    lmeter_bg.body.padding.inner = LV_DPI / 10; /*Text padding*/
+    lmeter_bg.body.border.color  = lv_color_hex3(0x333);
+    lmeter_bg.line.color         = lv_color_hex3(0x555);
+    lmeter_bg.line.width         = 1;
+    lmeter_bg.text.color         = lv_color_hex3(0xddd);
+
+    theme.style.lmeter = &lmeter_bg;
+#endif
+}
+
+static void gauge_init(void)
+{
+#if LV_USE_GAUGE != 0
+    static lv_style_t gauge_bg;
+    lv_style_copy(&gauge_bg, &def);
+    gauge_bg.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 70);
+    gauge_bg.body.grad_color = gauge_bg.body.main_color;
+    gauge_bg.line.color      = lv_color_hsv_to_rgb(_hue, 80, 75);
+    gauge_bg.line.width      = 1;
+    gauge_bg.text.color      = lv_color_hex3(0xddd);
+
+    theme.style.gauge = &gauge_bg;
+#endif
+}
+
+static void arc_init(void)
+{
+#if LV_USE_ARC != 0
+
+    static lv_style_t arc;
+    lv_style_copy(&arc, &def);
+    arc.line.width   = 8;
+    arc.line.color   = lv_color_hsv_to_rgb(_hue, 80, 70);
+    arc.line.rounded = 1;
+
+    /*For preloader*/
+    arc.body.border.width   = 7;
+    arc.body.border.color   = lv_color_hsv_to_rgb(_hue, 11, 48);
+    arc.body.padding.left   = 1;
+    arc.body.padding.right  = 1;
+    arc.body.padding.top    = 1;
+    arc.body.padding.bottom = 1;
+
+    theme.style.arc = &arc;
+#endif
+}
+
+static void preload_init(void)
+{
+#if LV_USE_PRELOAD != 0
+
+    theme.style.preload = theme.style.arc;
+#endif
+}
+
+static void chart_init(void)
+{
+#if LV_USE_CHART
+    theme.style.chart = &panel;
+#endif
+}
+
+static void calendar_init(void)
+{
+#if LV_USE_CALENDAR
+    static lv_style_t cal_bg;
+    lv_style_copy(&cal_bg, &bg);
+    cal_bg.body.main_color     = lv_color_hsv_to_rgb(_hue, 10, 40);
+    cal_bg.body.grad_color     = lv_color_hsv_to_rgb(_hue, 10, 40);
+    cal_bg.body.border.color   = lv_color_hex3(0x333);
+    cal_bg.body.border.width   = 1;
+    cal_bg.body.radius         = LV_DPI / 20;
+    cal_bg.body.padding.left   = LV_DPI / 10;
+    cal_bg.body.padding.right  = LV_DPI / 10;
+    cal_bg.body.padding.top    = LV_DPI / 10;
+    cal_bg.body.padding.bottom = LV_DPI / 10;
+
+    static lv_style_t cal_header;
+    lv_style_copy(&cal_header, &bg);
+    cal_header.body.main_color     = lv_color_hsv_to_rgb(_hue, 10, 20);
+    cal_header.body.grad_color     = lv_color_hsv_to_rgb(_hue, 10, 20);
+    cal_header.body.radius         = 0;
+    cal_header.body.border.width   = 1;
+    cal_header.body.border.color   = lv_color_hex3(0x333);
+    cal_header.body.padding.left   = LV_DPI / 10;
+    cal_header.body.padding.right  = LV_DPI / 10;
+    cal_header.body.padding.top    = LV_DPI / 10;
+    cal_header.body.padding.bottom = LV_DPI / 10;
+
+    static lv_style_t week_box;
+    lv_style_copy(&week_box, &panel);
+    week_box.body.main_color     = lv_color_hsv_to_rgb(_hue, 30, 45);
+    week_box.body.grad_color     = lv_color_hsv_to_rgb(_hue, 30, 45);
+    week_box.body.radius         = LV_DPI / 20;
+    week_box.body.border.width   = 1;
+    week_box.body.padding.left   = LV_DPI / 20;
+    week_box.body.padding.right  = LV_DPI / 20;
+    week_box.body.padding.top    = LV_DPI / 25;
+    week_box.body.padding.bottom = LV_DPI / 25;
+
+    static lv_style_t today_box;
+    lv_style_copy(&today_box, &week_box);
+    today_box.body.main_color     = lv_color_hsv_to_rgb(_hue, 80, 70);
+    today_box.body.grad_color     = lv_color_hsv_to_rgb(_hue, 80, 70);
+    today_box.body.radius         = LV_DPI / 20;
+    today_box.body.padding.left   = LV_DPI / 14;
+    today_box.body.padding.right  = LV_DPI / 14;
+    today_box.body.padding.top    = LV_DPI / 14;
+    today_box.body.padding.bottom = LV_DPI / 14;
+
+    static lv_style_t highlighted_days;
+    lv_style_copy(&highlighted_days, &bg);
+    highlighted_days.text.color = lv_color_hsv_to_rgb(_hue, 40, 80);
+
+    static lv_style_t ina_days;
+    lv_style_copy(&ina_days, &bg);
+    ina_days.text.color = lv_color_hsv_to_rgb(_hue, 0, 60);
+
+    theme.style.calendar.bg               = &cal_bg;
+    theme.style.calendar.header           = &cal_header;
+    theme.style.calendar.week_box         = &week_box;
+    theme.style.calendar.today_box        = &today_box;
+    theme.style.calendar.highlighted_days = &highlighted_days;
+    theme.style.calendar.day_names        = &cal_bg;
+    theme.style.calendar.inactive_days    = &ina_days;
+#endif
+}
+
+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, &def);
+    rel.body.radius       = LV_DPI / 20;
+    rel.body.main_color   = lv_color_hsv_to_rgb(_hue, 10, 95);
+    rel.body.grad_color   = lv_color_hsv_to_rgb(_hue, 10, 95);
+    rel.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 50);
+    rel.body.border.width = 2;
+    ;
+
+    lv_style_copy(&pr, &rel);
+    pr.body.main_color   = lv_color_hsv_to_rgb(_hue, 10, 80);
+    pr.body.grad_color   = lv_color_hsv_to_rgb(_hue, 10, 80);
+    pr.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 20);
+    pr.body.border.width = 1;
+    ;
+
+    lv_style_copy(&tgl_rel, &rel);
+    tgl_rel.body.main_color   = lv_color_hsv_to_rgb(_hue, 80, 90);
+    tgl_rel.body.grad_color   = lv_color_hsv_to_rgb(_hue, 80, 90);
+    tgl_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 50);
+
+    lv_style_copy(&tgl_pr, &tgl_rel);
+    tgl_pr.body.main_color   = lv_color_hsv_to_rgb(_hue, 80, 70);
+    tgl_pr.body.grad_color   = lv_color_hsv_to_rgb(_hue, 80, 70);
+    tgl_pr.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 30);
+    tgl_pr.body.border.width = 1;
+    ;
+
+    lv_style_copy(&ina, &rel);
+    ina.body.main_color   = lv_color_hex3(0x777);
+    ina.body.grad_color   = lv_color_hex3(0x777);
+    ina.body.border.width = 0;
+
+    theme.style.cb.bg          = &lv_style_transp;
+    theme.style.cb.box.rel     = &rel;
+    theme.style.cb.box.pr      = &pr;
+    theme.style.cb.box.tgl_rel = &tgl_rel;
+    theme.style.cb.box.tgl_pr  = &tgl_pr;
+    theme.style.cb.box.ina     = &def;
+#endif
+}
+
+static void btnm_init(void)
+{
+#if LV_USE_BTNM
+    static lv_style_t btnm_bg, rel, pr, tgl_rel, tgl_pr, ina;
+
+    lv_style_copy(&btnm_bg, theme.style.btn.rel);
+    btnm_bg.body.padding.left   = 2;
+    btnm_bg.body.padding.right  = 2;
+    btnm_bg.body.padding.top    = 2;
+    btnm_bg.body.padding.bottom = 2;
+    btnm_bg.body.padding.inner  = 0;
+    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.width = 1;
+    rel.body.radius       = 2;
+
+    lv_style_copy(&pr, theme.style.btn.pr);
+    pr.body.border.part  = rel.body.border.part;
+    pr.body.border.width = rel.body.border.width;
+    pr.body.radius       = rel.body.radius;
+
+    lv_style_copy(&tgl_rel, theme.style.btn.tgl_rel);
+    tgl_rel.body.border.part  = rel.body.border.part;
+    tgl_rel.body.border.width = rel.body.border.width;
+    tgl_rel.body.radius       = rel.body.radius;
+
+    lv_style_copy(&tgl_pr, theme.style.btn.pr);
+    tgl_pr.body.border.part  = rel.body.border.part;
+    tgl_pr.body.border.width = rel.body.border.width;
+    tgl_pr.body.radius       = rel.body.radius;
+
+    lv_style_copy(&ina, theme.style.btn.ina);
+    ina.body.border.part  = rel.body.border.part;
+    ina.body.border.width = rel.body.border.width;
+    ina.body.radius       = rel.body.radius;
+
+    theme.style.btnm.bg          = &btnm_bg;
+    theme.style.btnm.btn.rel     = &rel;
+    theme.style.btnm.btn.pr      = &pr;
+    theme.style.btnm.btn.tgl_rel = &tgl_rel;
+    theme.style.btnm.btn.tgl_pr  = &tgl_pr;
+    theme.style.btnm.btn.ina     = &ina;
+#endif
+}
+
+static void kb_init(void)
+{
+#if LV_USE_KB
+    theme.style.kb.bg          = &bg;
+    theme.style.kb.btn.rel     = theme.style.btn.rel;
+    theme.style.kb.btn.pr      = theme.style.btn.pr;
+    theme.style.kb.btn.tgl_rel = theme.style.btn.tgl_rel;
+    theme.style.kb.btn.tgl_pr  = theme.style.btn.tgl_pr;
+    theme.style.kb.btn.ina     = theme.style.btn.ina;
+#endif
+}
+
+static void mbox_init(void)
+{
+#if LV_USE_MBOX
+    static lv_style_t mbox_bg;
+    lv_style_copy(&mbox_bg, &bg);
+    mbox_bg.body.main_color   = lv_color_hsv_to_rgb(_hue, 30, 30);
+    mbox_bg.body.grad_color   = lv_color_hsv_to_rgb(_hue, 30, 30);
+    mbox_bg.body.border.color = lv_color_hsv_to_rgb(_hue, 11, 20);
+    mbox_bg.body.border.width = 1;
+    mbox_bg.body.shadow.width = LV_DPI / 10;
+    mbox_bg.body.shadow.color = lv_color_hex3(0x222);
+    mbox_bg.body.radius       = LV_DPI / 20;
+    theme.style.mbox.bg       = &mbox_bg;
+    theme.style.mbox.btn.bg   = &lv_style_transp;
+    theme.style.mbox.btn.rel  = theme.style.btn.rel;
+    theme.style.mbox.btn.pr   = theme.style.btn.pr;
+#endif
+}
+
+static void page_init(void)
+{
+#if LV_USE_PAGE
+
+    static lv_style_t page_scrl;
+    lv_style_copy(&page_scrl, &bg);
+    page_scrl.body.main_color   = lv_color_hsv_to_rgb(_hue, 10, 40);
+    page_scrl.body.grad_color   = lv_color_hsv_to_rgb(_hue, 10, 40);
+    page_scrl.body.border.color = lv_color_hex3(0x333);
+    page_scrl.body.border.width = 1;
+    page_scrl.body.radius       = LV_DPI / 20;
+
+    theme.style.page.bg   = &panel;
+    theme.style.page.scrl = &page_scrl;
+    theme.style.page.sb   = &sb;
+#endif
+}
+
+static void ta_init(void)
+{
+#if LV_USE_TA
+    theme.style.ta.area    = &panel;
+    theme.style.ta.oneline = &panel;
+    theme.style.ta.cursor  = NULL;
+    theme.style.ta.sb      = &def;
+#endif
+}
+
+static void spinbox_init(void)
+{
+#if LV_USE_SPINBOX
+    theme.style.spinbox.bg     = &panel;
+    theme.style.spinbox.cursor = theme.style.ta.cursor;
+    theme.style.spinbox.sb     = theme.style.ta.sb;
+#endif
+}
+
+static void list_init(void)
+{
+#if LV_USE_LIST != 0
+    static lv_style_t list_bg, list_btn_rel, list_btn_pr, list_btn_tgl_rel, 
list_btn_tgl_pr;
+
+    lv_style_copy(&list_bg, &panel);
+    list_bg.body.padding.top    = 0;
+    list_bg.body.padding.bottom = 0;
+    list_bg.body.padding.left   = 0;
+    list_bg.body.padding.right  = 0;
+    list_bg.body.padding.inner  = 0;
+
+    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.color   = lv_color_hsv_to_rgb(_hue, 10, 5);
+    list_btn_rel.body.border.width   = 1;
+    list_btn_rel.body.radius         = LV_DPI / 10;
+    list_btn_rel.text.color          = lv_color_hsv_to_rgb(_hue, 5, 80);
+    list_btn_rel.image.color         = lv_color_hsv_to_rgb(_hue, 5, 80);
+    list_btn_rel.body.padding.top    = LV_DPI / 6;
+    list_btn_rel.body.padding.bottom = LV_DPI / 6;
+    list_btn_rel.body.padding.left   = LV_DPI / 8;
+    list_btn_rel.body.padding.right  = LV_DPI / 8;
+
+    lv_style_copy(&list_btn_pr, theme.style.btn.pr);
+    list_btn_pr.body.main_color     = lv_color_hsv_to_rgb(_hue, 10, 5);
+    list_btn_pr.body.grad_color     = lv_color_hsv_to_rgb(_hue, 10, 5);
+    list_btn_pr.body.border.color   = lv_color_hsv_to_rgb(_hue, 10, 5);
+    list_btn_pr.body.border.width   = 0;
+    list_btn_pr.body.padding.top    = LV_DPI / 6;
+    list_btn_pr.body.padding.bottom = LV_DPI / 6;
+    list_btn_pr.body.padding.left   = LV_DPI / 8;
+    list_btn_pr.body.padding.right  = LV_DPI / 8;
+    list_btn_pr.text.color          = lv_color_hsv_to_rgb(_hue, 5, 80);
+    list_btn_pr.image.color         = lv_color_hsv_to_rgb(_hue, 5, 80);
+
+    lv_style_copy(&list_btn_tgl_rel, &list_btn_rel);
+    list_btn_tgl_rel.body.opa        = LV_OPA_COVER;
+    list_btn_tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 80, 70);
+    list_btn_tgl_rel.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 70);
+    list_btn_tgl_rel.body.border.color   = lv_color_hsv_to_rgb(_hue, 60, 40);
+    list_btn_tgl_rel.body.radius         = list_bg.body.radius;
+
+    lv_style_copy(&list_btn_tgl_pr, &list_btn_tgl_rel);
+    list_btn_tgl_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 80, 60);
+    list_btn_tgl_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 60);
+
+    theme.style.list.sb          = &sb;
+    theme.style.list.bg          = &list_bg;
+    theme.style.list.scrl        = &lv_style_transp_tight;
+    theme.style.list.btn.rel     = &list_btn_rel;
+    theme.style.list.btn.pr      = &list_btn_pr;
+    theme.style.list.btn.tgl_rel = &list_btn_tgl_rel;
+    theme.style.list.btn.tgl_pr  = &list_btn_tgl_pr;
+    theme.style.list.btn.ina     = &def;
+#endif
+}
+
+static void ddlist_init(void)
+{
+#if LV_USE_DDLIST != 0
+       static lv_style_t ddlist_bg, ddlist_sel;
+    lv_style_copy(&ddlist_bg, theme.style.btn.rel);
+    ddlist_bg.text.line_space     = LV_DPI / 8;
+    ddlist_bg.body.padding.top    = LV_DPI / 8;
+    ddlist_bg.body.padding.bottom = LV_DPI / 8;
+    ddlist_bg.body.padding.left   = LV_DPI / 8;
+    ddlist_bg.body.padding.right  = LV_DPI / 8;
+    ddlist_bg.body.radius         = LV_DPI / 30;
+
+    lv_style_copy(&ddlist_sel, theme.style.btn.rel);
+    ddlist_sel.body.main_color = lv_color_hsv_to_rgb(_hue, 20, 50);
+    ddlist_sel.body.grad_color = lv_color_hsv_to_rgb(_hue, 20, 50);
+    ddlist_sel.body.radius     = 0;
+
+    theme.style.ddlist.bg  = &ddlist_bg;
+    theme.style.ddlist.sel = &ddlist_sel;
+    theme.style.ddlist.sb  = &def;
+#endif
+}
+
+static void roller_init(void)
+{
+#if LV_USE_ROLLER != 0
+    static lv_style_t roller_bg;
+
+    lv_style_copy(&roller_bg, theme.style.ddlist.bg);
+    roller_bg.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 20);
+    roller_bg.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 40);
+    roller_bg.text.color      = lv_color_hsv_to_rgb(_hue, 5, 70);
+    roller_bg.text.opa        = LV_OPA_60;
+
+    theme.style.roller.bg  = &roller_bg;
+    theme.style.roller.sel = theme.style.ddlist.sel;
+#endif
+}
+
+static void tabview_init(void)
+{
+#if LV_USE_TABVIEW != 0
+    theme.style.tabview.bg          = &bg;
+    theme.style.tabview.indic       = &lv_style_transp;
+    theme.style.tabview.btn.bg      = &lv_style_transp;
+    theme.style.tabview.btn.rel     = theme.style.btn.rel;
+    theme.style.tabview.btn.pr      = theme.style.btn.pr;
+    theme.style.tabview.btn.tgl_rel = theme.style.btn.tgl_rel;
+    theme.style.tabview.btn.tgl_pr  = theme.style.btn.tgl_pr;
+#endif
+}
+
+static void tileview_init(void)
+{
+#if LV_USE_TILEVIEW != 0
+    theme.style.tileview.bg   = &lv_style_transp_tight;
+    theme.style.tileview.scrl = &lv_style_transp_tight;
+    theme.style.tileview.sb   = theme.style.page.sb;
+#endif
+}
+
+static void table_init(void)
+{
+#if LV_USE_TABLE != 0
+    static lv_style_t cell;
+    lv_style_copy(&cell, &panel);
+    cell.body.radius         = 0;
+    cell.body.border.width   = 1;
+    cell.body.padding.left   = LV_DPI / 12;
+    cell.body.padding.right  = LV_DPI / 12;
+    cell.body.padding.top    = LV_DPI / 12;
+    cell.body.padding.bottom = LV_DPI / 12;
+
+    theme.style.table.bg   = &lv_style_transp_tight;
+    theme.style.table.cell = &cell;
+#endif
+}
+
+static void win_init(void)
+{
+#if LV_USE_WIN != 0
+    static lv_style_t win_bg;
+    lv_style_copy(&win_bg, &bg);
+    win_bg.body.border.color = lv_color_hex3(0x333);
+    win_bg.body.border.width = 1;
+
+    static lv_style_t win_header;
+    lv_style_copy(&win_header, &win_bg);
+    win_header.body.main_color     = lv_color_hsv_to_rgb(_hue, 10, 20);
+    win_header.body.grad_color     = lv_color_hsv_to_rgb(_hue, 10, 20);
+    win_header.body.radius         = 0;
+    win_header.body.padding.left   = 0;
+    win_header.body.padding.right  = 0;
+    win_header.body.padding.top    = 0;
+    win_header.body.padding.bottom = 0;
+
+    static lv_style_t win_btn_pr;
+    lv_style_copy(&win_btn_pr, &def);
+    win_btn_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 10);
+    win_btn_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 10);
+    win_btn_pr.text.color      = lv_color_hex3(0xaaa);
+    win_btn_pr.image.color     = lv_color_hex3(0xaaa);
+
+    theme.style.win.bg      = &win_bg;
+    theme.style.win.sb      = &sb;
+    theme.style.win.header  = &win_header;
+    theme.style.win.content = &lv_style_transp;
+    theme.style.win.btn.rel = &lv_style_transp;
+    theme.style.win.btn.pr  = &win_btn_pr;
+#endif
+}
+
+#if LV_USE_GROUP
+
+static void style_mod(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = lv_color_hsv_to_rgb(_hue, 80, 70);
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 20;
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 2;
+#endif
+}
+
+static void style_mod_edit(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_GREEN;
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 20;
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 3;
+#endif
+}
+
+#endif /*LV_USE_GROUP*/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the night theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_night_init(uint16_t hue, lv_font_t * font)
+{
+    if(font == NULL) font = LV_FONT_DEFAULT;
+
+    _hue  = hue;
+    _font = font;
+
+    /*For backward compatibility initialize all theme elements with a default 
style */
+    uint16_t i;
+    lv_style_t ** style_p = (lv_style_t **)&theme.style;
+    for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
+        *style_p = &def;
+        style_p++;
+    }
+
+    basic_init();
+    cont_init();
+    btn_init();
+    label_init();
+    img_init();
+    line_init();
+    led_init();
+    bar_init();
+    slider_init();
+    sw_init();
+    lmeter_init();
+    gauge_init();
+    arc_init();
+    preload_init();
+    chart_init();
+    calendar_init();
+    cb_init();
+    btnm_init();
+    kb_init();
+    mbox_init();
+    page_init();
+    ta_init();
+    spinbox_init();
+    list_init();
+    ddlist_init();
+    roller_init();
+    tabview_init();
+    tileview_init();
+    table_init();
+    win_init();
+
+#if LV_USE_GROUP
+    theme.group.style_mod_xcb      = style_mod;
+    theme.group.style_mod_edit_xcb = style_mod_edit;
+#endif
+
+    return &theme;
+}
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_night(void)
+{
+    return &theme;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_night.h 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_night.h
new file mode 100755
index 0000000..a009bed
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_night.h
@@ -0,0 +1,60 @@
+/**
+ * @file lv_theme_night.h
+ *
+ */
+
+#ifndef LV_THEME_NIGHT_H
+#define LV_THEME_NIGHT_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_THEME_NIGHT
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the night theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_night_init(uint16_t hue, lv_font_t * font);
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_night(void);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_THEME_NIGHT_H*/
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_templ.c 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_templ.c
new file mode 100755
index 0000000..fecbdb8
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_templ.c
@@ -0,0 +1,473 @@
+/**
+ * @file lv_theme_templ.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_theme.h"
+
+#if LV_USE_THEME_TEMPL
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_theme_t theme;
+static lv_style_t def;
+/*Static style definitions*/
+
+/*Saved input parameters*/
+static uint16_t _hue;
+static lv_font_t * _font;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+static void basic_init(void)
+{
+    lv_style_copy(&def, &lv_style_pretty); /*Initialize the default style*/
+    def.text.font = _font;
+
+    theme.style.scr   = &def;
+    theme.style.bg    = &def;
+    theme.style.panel = &def;
+}
+
+static void cont_init(void)
+{
+#if LV_USE_CONT != 0
+
+    theme.style.cont = &def;
+#endif
+}
+
+static void btn_init(void)
+{
+#if LV_USE_BTN != 0
+
+    theme.style.btn.rel     = &def;
+    theme.style.btn.pr      = &def;
+    theme.style.btn.tgl_rel = &def;
+    theme.style.btn.tgl_pr  = &def;
+    theme.style.btn.ina     = &def;
+#endif
+}
+
+static void imgbtn_init(void)
+{
+#if LV_USE_IMGBTN != 0
+    theme.style.imgbtn.rel     = &def;
+    theme.style.imgbtn.pr      = &def;
+    theme.style.imgbtn.tgl_rel = &def;
+    theme.style.imgbtn.tgl_pr  = &def;
+    theme.style.imgbtn.ina     = &def;
+#endif
+}
+
+static void label_init(void)
+{
+#if LV_USE_LABEL != 0
+
+    theme.style.label.prim = &def;
+    theme.style.label.sec  = &def;
+    theme.style.label.hint = &def;
+#endif
+}
+
+static void img_init(void)
+{
+#if LV_USE_IMG != 0
+
+    theme.style.img.light = &def;
+    theme.style.img.dark  = &def;
+#endif
+}
+
+static void line_init(void)
+{
+#if LV_USE_LINE != 0
+
+    theme.style.line.decor = &def;
+#endif
+}
+
+static void led_init(void)
+{
+#if LV_USE_LED != 0
+
+    theme.style.led = &def;
+#endif
+}
+
+static void bar_init(void)
+{
+#if LV_USE_BAR
+
+    theme.style.bar.bg    = &def;
+    theme.style.bar.indic = &def;
+#endif
+}
+
+static void slider_init(void)
+{
+#if LV_USE_SLIDER != 0
+
+    theme.style.slider.bg    = &def;
+    theme.style.slider.indic = &def;
+    theme.style.slider.knob  = &def;
+#endif
+}
+
+static void sw_init(void)
+{
+#if LV_USE_SW != 0
+
+    theme.style.sw.bg       = &def;
+    theme.style.sw.indic    = &def;
+    theme.style.sw.knob_off = &def;
+    theme.style.sw.knob_on  = &def;
+#endif
+}
+
+static void lmeter_init(void)
+{
+#if LV_USE_LMETER != 0
+
+    theme.style.lmeter = &def;
+#endif
+}
+
+static void gauge_init(void)
+{
+#if LV_USE_GAUGE != 0
+
+    theme.style.gauge = &def;
+#endif
+}
+
+static void arc_init(void)
+{
+#if LV_USE_ARC != 0
+
+    theme.style.arc = &def;
+#endif
+}
+
+static void preload_init(void)
+{
+#if LV_USE_PRELOAD != 0
+
+    theme.style.preload = &def;
+#endif
+}
+
+static void chart_init(void)
+{
+#if LV_USE_CHART
+
+    theme.style.chart = &def;
+#endif
+}
+
+static void calendar_init(void)
+{
+#if LV_USE_CALENDAR
+
+    theme.style.calendar.bg               = theme.style.panel;
+    theme.style.calendar.header           = &def;
+    theme.style.calendar.inactive_days    = &def;
+    theme.style.calendar.highlighted_days = &def;
+    theme.style.calendar.week_box         = &def;
+    theme.style.calendar.today_box        = &def;
+    theme.style.calendar.header_pr        = &def;
+    theme.style.calendar.day_names        = &def;
+#endif
+}
+
+static void cb_init(void)
+{
+#if LV_USE_CB != 0
+
+    theme.style.cb.bg          = &def;
+    theme.style.cb.box.rel     = &def;
+    theme.style.cb.box.pr      = &def;
+    theme.style.cb.box.tgl_rel = &def;
+    theme.style.cb.box.tgl_pr  = &def;
+    theme.style.cb.box.ina     = &def;
+#endif
+}
+
+static void btnm_init(void)
+{
+#if LV_USE_BTNM
+
+    theme.style.btnm.bg          = &def;
+    theme.style.btnm.btn.rel     = &def;
+    theme.style.btnm.btn.pr      = &def;
+    theme.style.btnm.btn.tgl_rel = &def;
+    theme.style.btnm.btn.tgl_pr  = &def;
+    theme.style.btnm.btn.ina     = &def;
+#endif
+}
+
+static void kb_init(void)
+{
+#if LV_USE_KB
+
+    theme.style.kb.bg          = &def;
+    theme.style.kb.btn.rel     = &def;
+    theme.style.kb.btn.pr      = &def;
+    theme.style.kb.btn.tgl_rel = &def;
+    theme.style.kb.btn.tgl_pr  = &def;
+    theme.style.kb.btn.ina     = &def;
+#endif
+}
+
+static void mbox_init(void)
+{
+#if LV_USE_MBOX
+
+    theme.style.mbox.bg      = &def;
+    theme.style.mbox.btn.bg  = &def;
+    theme.style.mbox.btn.rel = &def;
+    theme.style.mbox.btn.pr  = &def;
+#endif
+}
+
+static void page_init(void)
+{
+#if LV_USE_PAGE
+
+    theme.style.page.bg   = &def;
+    theme.style.page.scrl = &def;
+    theme.style.page.sb   = &def;
+#endif
+}
+
+static void ta_init(void)
+{
+#if LV_USE_TA
+
+    theme.style.ta.area    = &def;
+    theme.style.ta.oneline = &def;
+    theme.style.ta.cursor  = NULL; /*Let library to calculate the cursor's 
style*/
+    theme.style.ta.sb      = &def;
+#endif
+}
+
+static void list_init(void)
+{
+#if LV_USE_LIST != 0
+
+    theme.style.list.sb          = &def;
+    theme.style.list.bg          = &def;
+    theme.style.list.scrl        = &def;
+    theme.style.list.btn.rel     = &def;
+    theme.style.list.btn.pr      = &def;
+    theme.style.list.btn.tgl_rel = &def;
+    theme.style.list.btn.tgl_pr  = &def;
+    theme.style.list.btn.ina     = &def;
+#endif
+}
+
+static void ddlist_init(void)
+{
+#if LV_USE_DDLIST != 0
+
+    theme.style.ddlist.bg  = &def;
+    theme.style.ddlist.sel = &def;
+    theme.style.ddlist.sb  = &def;
+#endif
+}
+
+static void roller_init(void)
+{
+#if LV_USE_ROLLER != 0
+
+    theme.style.roller.bg  = &def;
+    theme.style.roller.sel = &def;
+#endif
+}
+
+static void tabview_init(void)
+{
+#if LV_USE_TABVIEW != 0
+
+    theme.style.tabview.bg          = &def;
+    theme.style.tabview.indic       = &def;
+    theme.style.tabview.btn.bg      = &def;
+    theme.style.tabview.btn.rel     = &def;
+    theme.style.tabview.btn.pr      = &def;
+    theme.style.tabview.btn.tgl_rel = &def;
+    theme.style.tabview.btn.tgl_pr  = &def;
+#endif
+}
+
+static void table_init(void)
+{
+#if LV_USE_TABLE != 0
+    theme.style.table.bg   = &def;
+    theme.style.table.cell = &def;
+#endif
+}
+
+static void win_init(void)
+{
+#if LV_USE_WIN != 0
+
+    theme.style.win.bg      = &def;
+    theme.style.win.sb      = &def;
+    theme.style.win.header  = &def;
+    theme.style.win.content = &def;
+    theme.style.win.btn.rel = &def;
+    theme.style.win.btn.pr  = &def;
+#endif
+}
+
+#if LV_USE_GROUP
+
+static void style_mod(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_ORANGE;
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
+
+    style->body.main_color   = lv_color_mix(style->body.main_color, 
LV_COLOR_ORANGE, LV_OPA_70);
+    style->body.grad_color   = lv_color_mix(style->body.grad_color, 
LV_COLOR_ORANGE, LV_OPA_70);
+    style->body.shadow.color = lv_color_mix(style->body.shadow.color, 
LV_COLOR_ORANGE, LV_OPA_60);
+
+    style->text.color = lv_color_mix(style->text.color, LV_COLOR_ORANGE, 
LV_OPA_70);
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 2;
+#endif
+}
+
+static void style_mod_edit(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_GREEN;
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
+
+    style->body.main_color   = lv_color_mix(style->body.main_color, 
LV_COLOR_GREEN, LV_OPA_70);
+    style->body.grad_color   = lv_color_mix(style->body.grad_color, 
LV_COLOR_GREEN, LV_OPA_70);
+    style->body.shadow.color = lv_color_mix(style->body.shadow.color, 
LV_COLOR_GREEN, LV_OPA_60);
+
+    style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, 
LV_OPA_70);
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 3;
+#endif
+}
+
+#endif /*LV_USE_GROUP*/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the templ theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_templ_init(uint16_t hue, lv_font_t * font)
+{
+    if(font == NULL) font = LV_FONT_DEFAULT;
+
+    _hue  = hue;
+    _font = font;
+
+    /*For backward compatibility initialize all theme elements with a default 
style */
+    uint16_t i;
+    lv_style_t ** style_p = (lv_style_t **)&theme.style;
+    for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
+        *style_p = &def;
+        style_p++;
+    }
+
+    basic_init();
+    cont_init();
+    btn_init();
+    imgbtn_init();
+    label_init();
+    img_init();
+    line_init();
+    led_init();
+    bar_init();
+    slider_init();
+    sw_init();
+    lmeter_init();
+    gauge_init();
+    arc_init();
+    preload_init();
+    chart_init();
+    calendar_init();
+    cb_init();
+    btnm_init();
+    kb_init();
+    mbox_init();
+    page_init();
+    ta_init();
+    list_init();
+    ddlist_init();
+    roller_init();
+    tabview_init();
+    table_init();
+    win_init();
+
+#if LV_USE_GROUP
+    theme.group.style_mod_xcb      = style_mod;
+    theme.group.style_mod_edit_xcb = style_mod_edit;
+#endif
+
+    return &theme;
+}
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_templ(void)
+{
+    return &theme;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_templ.h 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_templ.h
new file mode 100755
index 0000000..7d1e3ec
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_templ.h
@@ -0,0 +1,60 @@
+/**
+ * @file lv_theme_templ.h
+ *
+ */
+
+#ifndef LV_THEME_TEMPL_H
+#define LV_THEME_TEMPL_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_THEME_TEMPL
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the templ theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_templ_init(uint16_t hue, lv_font_t * font);
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_templ(void);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_THEME_TEMPL_H*/
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_zen.c 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_zen.c
new file mode 100755
index 0000000..5556999
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_zen.c
@@ -0,0 +1,902 @@
+/**
+ * @file lv_theme_zen.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "lv_theme.h"
+
+#if LV_USE_THEME_ZEN
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static lv_theme_t theme;
+/*Static style definitions*/
+static lv_style_t def;
+static lv_style_t sb;
+
+/*Saved input parameters*/
+static uint16_t _hue;
+static lv_font_t * _font;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+static void basic_init(void)
+{
+    static lv_style_t bg;
+    static lv_style_t scr;
+    static lv_style_t panel;
+
+    lv_style_copy(&def, &lv_style_pretty); /*Initialize the default style*/
+    def.body.border.opa = LV_OPA_COVER;
+    def.text.font       = _font;
+    def.text.color      = lv_color_hex3(0x444);
+    def.image.color     = lv_color_hex3(0x444);
+
+    lv_style_copy(&bg, &def);
+    bg.body.main_color   = LV_COLOR_WHITE;
+    bg.body.grad_color   = LV_COLOR_WHITE;
+    bg.body.radius       = 0;
+    bg.body.border.width = 0;
+    bg.body.shadow.width = 0;
+
+    lv_style_copy(&scr, &bg);
+    scr.body.padding.bottom = 0;
+    scr.body.padding.top    = 0;
+    scr.body.padding.left   = 0;
+    scr.body.padding.right  = 0;
+
+    lv_style_copy(&panel, &bg);
+    panel.body.radius         = LV_DPI / 10;
+    panel.body.border.width   = 2;
+    panel.body.border.color   = lv_color_hsv_to_rgb(_hue, 30, 90);
+    panel.body.border.opa     = LV_OPA_COVER;
+    panel.body.shadow.width   = 4;
+    panel.body.shadow.color   = lv_color_hex3(0xddd);
+    panel.body.padding.left   = LV_DPI / 6;
+    panel.body.padding.right  = LV_DPI / 6;
+    panel.body.padding.top    = LV_DPI / 8;
+    panel.body.padding.bottom = LV_DPI / 8;
+    panel.body.padding.inner  = LV_DPI / 10;
+
+    lv_style_copy(&sb, &def);
+    sb.body.main_color    = lv_color_hsv_to_rgb(_hue, 30, 90);
+    sb.body.grad_color    = sb.body.main_color;
+    sb.body.border.width  = 0;
+    sb.body.radius        = LV_RADIUS_CIRCLE;
+    sb.body.padding.inner = LV_DPI / 15;
+
+    theme.style.scr   = &scr;
+    theme.style.bg    = &bg;
+    theme.style.panel = &panel;
+}
+
+static void cont_init(void)
+{
+#if LV_USE_CONT != 0
+
+    theme.style.cont = theme.style.panel;
+#endif
+}
+
+static void btn_init(void)
+{
+#if LV_USE_BTN != 0
+    static lv_style_t rel, pr, tgl_pr, ina;
+    lv_style_copy(&rel, &def);
+    rel.body.opa            = LV_OPA_TRANSP;
+    rel.body.radius         = LV_RADIUS_CIRCLE;
+    rel.body.border.width   = 2;
+    rel.body.border.color   = lv_color_hsv_to_rgb(_hue, 40, 90);
+    rel.body.border.opa     = LV_OPA_COVER;
+    rel.body.shadow.width   = 4;
+    rel.body.shadow.color   = lv_color_hex3(0xddd);
+    rel.body.padding.left   = LV_DPI / 4;
+    rel.body.padding.right  = LV_DPI / 4;
+    rel.body.padding.top    = LV_DPI / 8;
+    rel.body.padding.bottom = LV_DPI / 8;
+    rel.text.color          = lv_color_hsv_to_rgb(_hue, 40, 90);
+    rel.image.color         = lv_color_hsv_to_rgb(_hue, 40, 90);
+
+    lv_style_copy(&pr, &rel);
+    pr.body.border.color = lv_color_hsv_to_rgb(_hue, 40, 60);
+    pr.body.shadow.width = 0;
+    pr.text.color        = lv_color_hsv_to_rgb(_hue, 40, 60);
+    pr.image.color       = lv_color_hsv_to_rgb(_hue, 40, 60);
+
+    lv_style_copy(&tgl_pr, &pr);
+    tgl_pr.body.border.color = lv_color_hsv_to_rgb(_hue, 40, 50);
+    tgl_pr.text.color        = lv_color_hsv_to_rgb(_hue, 40, 50);
+    tgl_pr.image.color       = lv_color_hsv_to_rgb(_hue, 40, 50);
+
+    lv_style_copy(&ina, &tgl_pr);
+    ina.body.border.color = lv_color_hex3(0xbbb);
+    ina.text.color        = lv_color_hex3(0xbbb);
+    ina.image.color       = lv_color_hex3(0xbbb);
+
+    theme.style.btn.rel     = &rel;
+    theme.style.btn.pr      = &pr;
+    theme.style.btn.tgl_rel = &pr;
+    theme.style.btn.tgl_pr  = &tgl_pr;
+    theme.style.btn.ina     = &ina;
+#endif
+}
+
+static void label_init(void)
+{
+#if LV_USE_LABEL != 0
+    static lv_style_t prim, sec, hint;
+    lv_style_copy(&prim, &def);
+    lv_style_copy(&sec, &def);
+    lv_style_copy(&hint, &def);
+
+    prim.text.color = lv_color_hex3(0x555);
+    sec.text.color  = lv_color_hsv_to_rgb(_hue, 50, 80);
+    hint.text.color = lv_color_hsv_to_rgb(_hue, 25, 85);
+
+    theme.style.label.prim = &prim;
+    theme.style.label.sec  = &sec;
+    theme.style.label.hint = &hint;
+#endif
+}
+
+static void img_init(void)
+{
+#if LV_USE_IMG != 0
+    static lv_style_t img_light, img_dark;
+    lv_style_copy(&img_light, &def);
+    img_light.image.color   = lv_color_hsv_to_rgb(_hue, 15, 85);
+    img_light.image.intense = LV_OPA_80;
+
+    lv_style_copy(&img_dark, &def);
+    img_light.image.color   = lv_color_hsv_to_rgb(_hue, 85, 55);
+    img_light.image.intense = LV_OPA_80;
+
+    theme.style.img.light = &img_light;
+    theme.style.img.dark  = &img_dark;
+#endif
+}
+
+static void line_init(void)
+{
+#if LV_USE_LINE != 0
+
+    theme.style.line.decor = &def;
+#endif
+}
+
+static void led_init(void)
+{
+#if LV_USE_LED != 0
+
+    static lv_style_t led;
+    lv_style_copy(&led, &lv_style_pretty_color);
+    led.body.shadow.width = LV_DPI / 10;
+    led.body.radius       = LV_RADIUS_CIRCLE;
+    led.body.border.width = LV_DPI / 30;
+    led.body.border.opa   = LV_OPA_30;
+    led.body.main_color   = lv_color_hsv_to_rgb(_hue, 60, 100);
+    led.body.grad_color   = lv_color_hsv_to_rgb(_hue, 60, 40);
+    led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
+    led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 80, 100);
+
+    theme.style.led = &led;
+#endif
+}
+
+static void bar_init(void)
+{
+#if LV_USE_BAR
+    static lv_style_t bg, indic;
+
+    lv_style_copy(&bg, &def);
+    bg.body.opa          = LV_OPA_TRANSP;
+    bg.body.radius       = LV_RADIUS_CIRCLE;
+    bg.body.border.width = 2;
+    bg.body.border.opa   = LV_OPA_COVER;
+    bg.body.border.color = lv_color_hsv_to_rgb(_hue, 40, 90);
+
+    lv_style_copy(&indic, &def);
+    indic.body.radius         = LV_RADIUS_CIRCLE;
+    indic.body.main_color     = lv_color_hsv_to_rgb(_hue, 40, 90);
+    indic.body.grad_color     = indic.body.main_color;
+    indic.body.border.width   = 0;
+    indic.body.padding.left   = LV_DPI / 20;
+    indic.body.padding.right  = LV_DPI / 20;
+    indic.body.padding.top    = LV_DPI / 20;
+    indic.body.padding.bottom = LV_DPI / 20;
+
+    theme.style.bar.bg    = &bg;
+    theme.style.bar.indic = &indic;
+#endif
+}
+
+static void slider_init(void)
+{
+#if LV_USE_SLIDER != 0
+    static lv_style_t knob;
+
+    lv_style_copy(&knob, &def);
+    knob.body.main_color   = theme.style.bar.indic->body.main_color;
+    knob.body.grad_color   = knob.body.main_color;
+    knob.body.radius       = LV_RADIUS_CIRCLE;
+    knob.body.border.width = 0;
+
+    theme.style.slider.bg    = theme.style.bar.bg;
+    theme.style.slider.indic = theme.style.bar.indic;
+    theme.style.slider.knob  = &knob;
+#endif
+}
+
+static void sw_init(void)
+{
+#if LV_USE_SW != 0
+    static lv_style_t indic;
+
+    lv_style_copy(&indic, theme.style.slider.indic);
+    indic.body.radius         = LV_RADIUS_CIRCLE;
+    indic.body.main_color     = lv_color_hsv_to_rgb(_hue, 15, 95);
+    indic.body.grad_color     = indic.body.main_color;
+    indic.body.border.width   = theme.style.slider.bg->body.border.width;
+    indic.body.border.color   = theme.style.slider.bg->body.border.color;
+    indic.body.border.opa     = theme.style.slider.bg->body.border.opa;
+    indic.body.padding.left   = 0;
+    indic.body.padding.right  = 0;
+    indic.body.padding.top    = 0;
+    indic.body.padding.bottom = 0;
+
+    theme.style.sw.bg       = theme.style.slider.bg;
+    theme.style.sw.indic    = &indic;
+    theme.style.sw.knob_off = theme.style.slider.knob;
+    theme.style.sw.knob_on  = theme.style.slider.knob;
+#endif
+}
+
+static void lmeter_init(void)
+{
+#if LV_USE_LMETER != 0
+    static lv_style_t lmeter;
+
+    lv_style_copy(&lmeter, &def);
+    lmeter.line.color         = lv_color_hex3(0xddd);
+    lmeter.line.width         = 2;
+    lmeter.body.main_color    = lv_color_hsv_to_rgb(_hue, 80, 70);
+    lmeter.body.grad_color    = lmeter.body.main_color;
+    lmeter.body.padding.left  = LV_DPI / 8;
+    lmeter.body.padding.right = LV_DPI / 8;
+
+    theme.style.lmeter = &lmeter;
+#endif
+}
+
+static void gauge_init(void)
+{
+#if LV_USE_GAUGE != 0
+    static lv_style_t gauge;
+
+    lv_style_copy(&gauge, &def);
+    gauge.line.color         = lv_color_hsv_to_rgb(_hue, 50, 70);
+    gauge.line.width         = 1;
+    gauge.body.main_color    = lv_color_hex3(0x999);
+    gauge.body.grad_color    = gauge.body.main_color;
+    gauge.body.padding.left  = LV_DPI / 16;
+    gauge.body.padding.right = LV_DPI / 16;
+    gauge.body.border.color  = lv_color_hex3(0x666); /*Needle middle color*/
+
+    theme.style.gauge = &gauge;
+#endif
+}
+
+static void arc_init(void)
+{
+#if LV_USE_ARC != 0
+
+    static lv_style_t arc;
+    lv_style_copy(&arc, &def);
+    arc.line.width   = 10;
+    arc.line.color   = lv_color_hsv_to_rgb(_hue, 40, 90);
+    arc.line.rounded = 1;
+
+    /*For preloader*/
+    arc.body.border.width = 0;
+
+    theme.style.arc = &arc;
+#endif
+}
+
+static void preload_init(void)
+{
+#if LV_USE_PRELOAD != 0
+
+    theme.style.preload = theme.style.arc;
+#endif
+}
+
+static void chart_init(void)
+{
+#if LV_USE_CHART
+    theme.style.chart = theme.style.panel;
+#endif
+}
+
+static void calendar_init(void)
+{
+#if LV_USE_CALENDAR != 0
+    static lv_style_t ina_days;
+    lv_style_copy(&ina_days, &def);
+    ina_days.text.color = lv_color_hsv_to_rgb(_hue, 0, 70);
+
+    static lv_style_t high_days;
+    lv_style_copy(&high_days, &def);
+    high_days.text.color = lv_color_hsv_to_rgb(_hue, 50, 90);
+
+    static lv_style_t today_box;
+    lv_style_copy(&today_box, &def);
+    today_box.body.opa            = LV_OPA_TRANSP;
+    today_box.body.border.color   = theme.style.panel->body.border.color;
+    today_box.body.padding.top    = LV_DPI / 20;
+    today_box.body.padding.bottom = LV_DPI / 20;
+    today_box.body.radius         = LV_RADIUS_CIRCLE;
+
+    theme.style.calendar.bg               = theme.style.panel;
+    theme.style.calendar.header           = &lv_style_transp;
+    theme.style.calendar.inactive_days    = &ina_days;
+    theme.style.calendar.highlighted_days = &high_days;
+    theme.style.calendar.week_box         = &lv_style_transp_fit;
+    theme.style.calendar.today_box        = &today_box;
+#endif
+}
+
+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, &def);
+    rel.body.radius       = LV_DPI / 20;
+    rel.body.shadow.width = 0;
+    rel.body.border.width = 3;
+    rel.body.border.opa   = LV_OPA_COVER;
+    rel.body.border.color = lv_color_hsv_to_rgb(_hue, 35, 80);
+    rel.body.main_color   = lv_color_hex3(0xfff);
+    rel.body.grad_color   = rel.body.main_color;
+
+    lv_style_copy(&pr, &rel);
+    pr.body.border.color = lv_color_hsv_to_rgb(_hue, 35, 70);
+
+    lv_style_copy(&tgl_rel, &rel);
+    tgl_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 45, 80);
+    tgl_rel.body.main_color   = lv_color_hsv_to_rgb(_hue, 40, 90);
+    tgl_rel.body.grad_color   = tgl_rel.body.main_color;
+
+    lv_style_copy(&tgl_pr, &rel);
+    tgl_pr.body.border.color = lv_color_hsv_to_rgb(_hue, 45, 70);
+    tgl_pr.body.main_color   = lv_color_hsv_to_rgb(_hue, 40, 80);
+    tgl_pr.body.grad_color   = tgl_pr.body.main_color;
+
+    lv_style_copy(&ina, &rel);
+    ina.body.border.color = lv_color_hex3(0xaaa);
+
+    theme.style.cb.bg          = &lv_style_transp;
+    theme.style.cb.box.rel     = &rel;
+    theme.style.cb.box.pr      = &pr;
+    theme.style.cb.box.tgl_rel = &tgl_rel;
+    theme.style.cb.box.tgl_pr  = &tgl_pr;
+    theme.style.cb.box.ina     = &ina;
+#endif
+}
+
+static void btnm_init(void)
+{
+#if LV_USE_BTNM
+    static lv_style_t bg, rel, pr, tgl_rel, tgl_pr, ina;
+
+    lv_style_copy(&bg, &lv_style_transp);
+    bg.glass               = 0;
+    bg.body.padding.left   = 0;
+    bg.body.padding.right  = 0;
+    bg.body.padding.top    = 0;
+    bg.body.padding.bottom = 0;
+    bg.body.padding.inner  = LV_DPI / 15;
+    bg.text.font           = _font;
+
+    lv_style_copy(&rel, &def);
+    rel.body.opa          = LV_OPA_TRANSP;
+    rel.body.border.width = 0;
+
+    lv_style_copy(&pr, &def);
+    pr.body.opa          = LV_OPA_TRANSP;
+    pr.body.radius       = LV_DPI / 1;
+    pr.body.border.width = 2;
+    pr.body.border.color = lv_color_hsv_to_rgb(_hue, 40, 60);
+    pr.body.border.opa   = LV_OPA_COVER;
+    pr.text.color        = lv_color_hsv_to_rgb(_hue, 40, 60);
+
+    lv_style_copy(&tgl_rel, &pr);
+    tgl_rel.body.opa          = LV_OPA_COVER;
+    tgl_rel.body.main_color   = lv_color_hsv_to_rgb(_hue, 15, 95);
+    tgl_rel.body.grad_color   = tgl_rel.body.main_color;
+    tgl_rel.body.border.width = 0;
+    tgl_rel.text.color        = lv_color_hsv_to_rgb(_hue, 60, 40);
+
+    lv_style_copy(&tgl_pr, &tgl_rel);
+    tgl_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 30, 70);
+    tgl_pr.body.grad_color = tgl_pr.body.main_color;
+
+    lv_style_copy(&ina, &pr);
+    ina.body.main_color = lv_color_hex3(0x888);
+    ina.body.grad_color = tgl_pr.body.main_color;
+    ina.text.color      = lv_color_hex3(0x888);
+    ;
+
+    theme.style.btnm.bg          = &bg;
+    theme.style.btnm.btn.rel     = &rel;
+    theme.style.btnm.btn.pr      = &pr;
+    theme.style.btnm.btn.tgl_rel = &tgl_rel;
+    theme.style.btnm.btn.tgl_pr  = &tgl_pr;
+    theme.style.btnm.btn.ina     = &ina;
+#endif
+}
+
+static void kb_init(void)
+{
+#if LV_USE_KB
+    static lv_style_t bg, rel, pr, tgl_rel, tgl_pr, ina;
+    lv_style_copy(&bg, &def);
+    bg.body.main_color     = lv_color_hex3(0x666);
+    bg.body.grad_color     = bg.body.main_color;
+    bg.body.padding.left   = 0;
+    bg.body.padding.right  = 0;
+    bg.body.padding.top    = 0;
+    bg.body.padding.bottom = 0;
+    bg.body.padding.inner  = 0;
+    bg.body.radius         = 0;
+    bg.body.border.width   = 0;
+
+    lv_style_copy(&rel, &def);
+    rel.body.opa          = LV_OPA_COVER;
+    rel.body.radius       = 0;
+    rel.body.border.width = 1;
+    rel.body.border.color = lv_color_hex3(0x888);
+    rel.body.border.opa   = LV_OPA_COVER;
+    rel.text.color        = LV_COLOR_WHITE;
+
+    lv_style_copy(&pr, &def);
+    pr.body.main_color   = lv_color_hex3(0xeee);
+    pr.body.grad_color   = pr.body.main_color;
+    pr.body.border.color = lv_color_hex3(0x888);
+    pr.body.border.width = 1;
+    pr.body.border.opa   = LV_OPA_COVER;
+    pr.body.radius       = 0;
+    pr.text.color        = lv_color_hex3(0x666);
+
+    lv_style_copy(&tgl_rel, &pr);
+    tgl_rel.body.main_color = lv_color_hex3(0x999);
+    tgl_rel.body.grad_color = tgl_rel.body.main_color;
+    tgl_rel.text.color      = LV_COLOR_WHITE;
+
+    lv_style_copy(&tgl_pr, &pr);
+    tgl_pr.body.main_color = lv_color_hex3(0xbbb);
+    tgl_pr.body.grad_color = tgl_pr.body.main_color;
+    tgl_pr.text.color      = lv_color_hex3(0xddd);
+
+    lv_style_copy(&ina, &pr);
+    ina.body.main_color = lv_color_hex3(0x777);
+    ina.body.grad_color = ina.body.main_color;
+    ina.text.color      = lv_color_hex3(0xbbb);
+
+    theme.style.kb.bg          = &bg;
+    theme.style.kb.btn.rel     = &rel;
+    theme.style.kb.btn.pr      = &pr;
+    theme.style.kb.btn.tgl_rel = &tgl_rel;
+    theme.style.kb.btn.tgl_pr  = &tgl_pr;
+    theme.style.kb.btn.ina     = &ina;
+#endif
+}
+
+static void mbox_init(void)
+{
+#if LV_USE_MBOX
+    static lv_style_t bg, rel, pr;
+    lv_style_copy(&bg, theme.style.panel);
+    bg.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 95);
+    bg.body.grad_color = bg.body.main_color;
+    bg.text.color      = lv_color_hsv_to_rgb(_hue, 40, 25);
+
+    lv_style_copy(&rel, &def);
+    rel.body.main_color     = lv_color_hsv_to_rgb(_hue, 25, 85);
+    rel.body.grad_color     = rel.body.main_color;
+    rel.body.radius         = LV_RADIUS_CIRCLE;
+    rel.body.border.width   = 2;
+    rel.body.border.color   = lv_color_hsv_to_rgb(_hue, 30, 70);
+    rel.body.padding.left   = LV_DPI / 4;
+    rel.body.padding.right  = LV_DPI / 4;
+    rel.body.padding.top    = LV_DPI / 8;
+    rel.body.padding.bottom = LV_DPI / 8;
+    rel.text.color          = bg.text.color;
+
+    lv_style_copy(&pr, &rel);
+    pr.body.border.color = lv_color_hsv_to_rgb(_hue, 30, 90);
+    pr.text.color        = lv_color_hsv_to_rgb(_hue, 40, 40);
+    pr.body.main_color   = lv_color_hsv_to_rgb(_hue, 20, 85);
+    pr.body.grad_color   = pr.body.main_color;
+
+    theme.style.mbox.bg      = &bg;
+    theme.style.mbox.btn.bg  = &lv_style_transp;
+    theme.style.mbox.btn.rel = &rel;
+    theme.style.mbox.btn.pr  = &pr;
+#endif
+}
+
+static void page_init(void)
+{
+#if LV_USE_PAGE
+
+    theme.style.page.bg   = theme.style.panel;
+    theme.style.page.scrl = &lv_style_transp;
+    theme.style.page.sb   = &sb;
+#endif
+}
+
+static void ta_init(void)
+{
+#if LV_USE_TA
+    static lv_style_t oneline;
+    lv_style_copy(&oneline, theme.style.panel);
+    oneline.body.radius         = LV_RADIUS_CIRCLE;
+    oneline.body.padding.top    = LV_DPI / 10;
+    oneline.body.padding.bottom = LV_DPI / 10;
+    oneline.body.shadow.width   = 0;
+
+    theme.style.ta.area    = theme.style.panel;
+    theme.style.ta.oneline = &oneline;
+    theme.style.ta.cursor  = NULL; /*Let library to calculate the cursor's 
style*/
+    theme.style.ta.sb      = &def;
+#endif
+}
+
+static void spinbox_init(void)
+{
+#if LV_USE_SPINBOX
+    theme.style.spinbox.bg     = theme.style.panel;
+    theme.style.spinbox.cursor = theme.style.ta.cursor;
+    theme.style.spinbox.sb     = theme.style.ta.sb;
+#endif
+}
+
+static void list_init(void)
+{
+#if LV_USE_LIST != 0
+    static lv_style_t bg, rel, pr, tgl_rel, tgl_pr, ina;
+
+    lv_style_copy(&bg, theme.style.panel);
+    bg.body.padding.left   = 0;
+    bg.body.padding.right  = 0;
+    bg.body.padding.top    = 0;
+    bg.body.padding.bottom = 0;
+
+    lv_style_copy(&rel, &def);
+    rel.body.opa            = LV_OPA_TRANSP;
+    rel.body.border.width   = 0;
+    rel.body.padding.left   = LV_DPI / 8;
+    rel.body.padding.right  = LV_DPI / 8;
+    rel.body.padding.top    = LV_DPI / 8;
+    rel.body.padding.bottom = LV_DPI / 8;
+    rel.text.color          = lv_color_hex3(0x666);
+    rel.image.color         = lv_color_hex3(0x666);
+
+    lv_style_copy(&pr, &rel);
+    pr.text.color  = theme.style.btn.pr->text.color;
+    pr.image.color = theme.style.btn.pr->image.color;
+
+    lv_style_copy(&tgl_rel, &rel);
+    tgl_rel.text.color = lv_color_hsv_to_rgb(_hue, 50, 90);
+
+    lv_style_copy(&tgl_pr, &rel);
+    tgl_pr.text.color  = theme.style.btn.tgl_pr->text.color;
+    tgl_pr.image.color = theme.style.btn.tgl_pr->image.color;
+
+    lv_style_copy(&ina, &rel);
+    ina.text.color  = theme.style.btn.ina->text.color;
+    ina.image.color = theme.style.btn.ina->image.color;
+
+    theme.style.list.sb          = &sb;
+    theme.style.list.bg          = &bg;
+    theme.style.list.scrl        = &lv_style_transp_tight;
+    theme.style.list.btn.rel     = &rel;
+    theme.style.list.btn.pr      = &pr;
+    theme.style.list.btn.tgl_rel = &tgl_rel;
+    theme.style.list.btn.tgl_pr  = &tgl_pr;
+    theme.style.list.btn.ina     = &ina;
+#endif
+}
+
+static void ddlist_init(void)
+{
+#if LV_USE_DDLIST != 0
+    static lv_style_t bg, sel;
+    lv_style_copy(&bg, theme.style.panel);
+    bg.text.line_space     = LV_DPI / 8;
+    bg.body.padding.left   = LV_DPI / 6;
+    bg.body.padding.right  = LV_DPI / 6;
+    bg.body.padding.top    = LV_DPI / 8;
+    bg.body.padding.bottom = LV_DPI / 8;
+    bg.text.color          = lv_color_hex3(0x666);
+
+    lv_style_copy(&sel, &def);
+    sel.body.opa          = LV_OPA_TRANSP;
+    sel.body.border.width = 0;
+    sel.text.color        = lv_color_hsv_to_rgb(_hue, 50, 80);
+
+    theme.style.ddlist.bg  = &bg;
+    theme.style.ddlist.sel = &sel;
+    theme.style.ddlist.sb  = &def;
+#endif
+}
+
+static void roller_init(void)
+{
+#if LV_USE_ROLLER != 0
+    static lv_style_t bg, sel;
+    lv_style_copy(&bg, &def);
+    bg.body.border.width = 0;
+    bg.body.opa          = LV_OPA_TRANSP;
+    bg.text.line_space   = LV_DPI / 6;
+    bg.text.color        = lv_color_hex3(0x999);
+
+    lv_style_copy(&sel, theme.style.panel);
+    sel.body.radius = LV_RADIUS_CIRCLE;
+    sel.body.opa    = LV_OPA_TRANSP;
+
+    theme.style.roller.bg  = &bg;
+    theme.style.roller.sel = &sel;
+#endif
+}
+
+static void tabview_init(void)
+{
+#if LV_USE_TABVIEW != 0
+    static lv_style_t btn_bg, indic, rel, pr, tgl_rel, tgl_pr;
+
+    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.color = lv_color_hsv_to_rgb(_hue, 10, 90);
+
+    lv_style_copy(&indic, &def);
+    indic.body.padding.inner = LV_DPI / 16;
+    indic.body.border.width  = 0;
+    indic.body.radius        = LV_RADIUS_CIRCLE;
+    indic.body.main_color    = lv_color_hsv_to_rgb(_hue, 50, 80);
+    indic.body.grad_color    = indic.body.main_color;
+
+    lv_style_copy(&rel, &def);
+    rel.body.opa          = LV_OPA_TRANSP;
+    rel.body.border.width = 0;
+    rel.text.color        = lv_color_hex3(0x999);
+
+    lv_style_copy(&pr, &rel);
+    pr.text.color = lv_color_hex3(0x777);
+
+    lv_style_copy(&tgl_rel, &rel);
+    tgl_rel.text.color = lv_color_hsv_to_rgb(_hue, 50, 80);
+
+    lv_style_copy(&tgl_pr, &rel);
+    tgl_pr.text.color = lv_color_hsv_to_rgb(_hue, 50, 70);
+
+    theme.style.tabview.bg          = theme.style.bg;
+    theme.style.tabview.indic       = &indic;
+    theme.style.tabview.btn.bg      = &btn_bg;
+    theme.style.tabview.btn.rel     = &rel;
+    theme.style.tabview.btn.pr      = &pr;
+    theme.style.tabview.btn.tgl_rel = &tgl_rel;
+    theme.style.tabview.btn.tgl_pr  = &tgl_pr;
+#endif
+}
+
+static void tileview_init(void)
+{
+#if LV_USE_TILEVIEW != 0
+    theme.style.tileview.bg   = &lv_style_transp_tight;
+    theme.style.tileview.scrl = &lv_style_transp_tight;
+    theme.style.tileview.sb   = theme.style.page.sb;
+#endif
+}
+
+static void table_init(void)
+{
+#if LV_USE_TABLE != 0
+    static lv_style_t cell;
+    lv_style_copy(&cell, theme.style.panel);
+    cell.body.radius         = 0;
+    cell.body.border.width   = 1;
+    cell.body.shadow.width   = 0;
+    cell.body.padding.left   = LV_DPI / 12;
+    cell.body.padding.right  = LV_DPI / 12;
+    cell.body.padding.top    = LV_DPI / 12;
+    cell.body.padding.bottom = LV_DPI / 12;
+
+    theme.style.table.bg   = &lv_style_transp_tight;
+    theme.style.table.cell = &cell;
+#endif
+}
+
+static void win_init(void)
+{
+#if LV_USE_WIN != 0
+    static lv_style_t header, rel, pr;
+
+    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.color   = lv_color_hsv_to_rgb(_hue, 10, 90);
+    header.text.color          = lv_color_hex3(0x666);
+    header.image.color         = lv_color_hex3(0x666);
+    header.body.padding.top    = 0;
+    header.body.padding.bottom = 0;
+    header.body.padding.inner  = 0;
+
+    lv_style_copy(&rel, &def);
+    rel.body.opa          = LV_OPA_TRANSP;
+    rel.body.border.width = 0;
+    rel.text.color        = lv_color_hex3(0x666);
+    rel.image.color       = lv_color_hex3(0x666);
+
+    lv_style_copy(&pr, &rel);
+    pr.text.color  = lv_color_hex3(0x333);
+    pr.image.color = lv_color_hex3(0x333);
+
+    theme.style.win.bg      = theme.style.panel;
+    theme.style.win.sb      = &sb;
+    theme.style.win.header  = &header;
+    theme.style.win.content = &lv_style_transp;
+    theme.style.win.btn.rel = &rel;
+    theme.style.win.btn.pr  = &pr;
+#endif
+}
+
+#if LV_USE_GROUP
+
+static void style_mod(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = lv_color_hsv_to_rgb(_hue, 40, 50);
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 20;
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 2;
+#endif
+}
+
+static void style_mod_edit(lv_group_t * group, lv_style_t * style)
+{
+    (void)group; /*Unused*/
+
+#if LV_COLOR_DEPTH != 1
+    /*Make the style to be a little bit orange*/
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_GREEN;
+
+    /*If not empty or has border then emphasis the border*/
+    if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) 
style->body.border.width = LV_DPI / 20;
+
+    style->body.main_color   = lv_color_mix(style->body.main_color, 
LV_COLOR_GREEN, LV_OPA_70);
+    style->body.grad_color   = lv_color_mix(style->body.grad_color, 
LV_COLOR_GREEN, LV_OPA_70);
+    style->body.shadow.color = lv_color_mix(style->body.shadow.color, 
LV_COLOR_GREEN, LV_OPA_60);
+
+    style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, 
LV_OPA_70);
+#else
+    style->body.border.opa   = LV_OPA_COVER;
+    style->body.border.color = LV_COLOR_BLACK;
+    style->body.border.width = 3;
+#endif
+}
+
+#endif /*LV_USE_GROUP*/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the zen theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_zen_init(uint16_t hue, lv_font_t * font)
+{
+    if(font == NULL) font = LV_FONT_DEFAULT;
+
+    _hue  = hue;
+    _font = font;
+
+    /*For backward compatibility initialize all theme elements with a default 
style */
+    uint16_t i;
+    lv_style_t ** style_p = (lv_style_t **)&theme.style;
+    for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
+        *style_p = &def;
+        style_p++;
+    }
+
+    basic_init();
+    cont_init();
+    btn_init();
+    label_init();
+    img_init();
+    line_init();
+    led_init();
+    bar_init();
+    slider_init();
+    sw_init();
+    lmeter_init();
+    gauge_init();
+    arc_init();
+    preload_init();
+    chart_init();
+    calendar_init();
+    cb_init();
+    btnm_init();
+    kb_init();
+    mbox_init();
+    page_init();
+    ta_init();
+    spinbox_init();
+    list_init();
+    ddlist_init();
+    roller_init();
+    tabview_init();
+    tileview_init();
+    table_init();
+    win_init();
+
+#if LV_USE_GROUP
+    theme.group.style_mod_xcb      = style_mod;
+    theme.group.style_mod_edit_xcb = style_mod_edit;
+#endif
+
+    return &theme;
+}
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_zen(void)
+{
+    return &theme;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#endif
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_theme_zen.h 
b/scriptsrcs/lvgl/src/lv_themes/lv_theme_zen.h
new file mode 100755
index 0000000..4a497fe
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_theme_zen.h
@@ -0,0 +1,60 @@
+/**
+ * @file lv_theme_zen.h
+ *
+ */
+
+#ifndef LV_THEME_ZEN_H
+#define LV_THEME_ZEN_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_THEME_ZEN
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the zen theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's 
base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_zen_init(uint16_t hue, lv_font_t * font);
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_zen(void);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_THEME_ZEN_H*/
diff --git a/scriptsrcs/lvgl/src/lv_themes/lv_themes.mk 
b/scriptsrcs/lvgl/src/lv_themes/lv_themes.mk
new file mode 100755
index 0000000..fce41e4
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_themes/lv_themes.mk
@@ -0,0 +1,14 @@
+CSRCS += lv_theme_alien.c
+CSRCS += lv_theme.c
+CSRCS += lv_theme_default.c
+CSRCS += lv_theme_night.c
+CSRCS += lv_theme_templ.c
+CSRCS += lv_theme_zen.c
+CSRCS += lv_theme_material.c
+CSRCS += lv_theme_nemo.c
+CSRCS += lv_theme_mono.c
+
+DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_themes
+VPATH += :$(LVGL_DIR)/lvgl/src/lv_themes
+
+CFLAGS += "-I$(LVGL_DIR)/lvgl/src/lv_themes"
diff --git a/scriptsrcs/lvgl/src/lv_version.h b/scriptsrcs/lvgl/src/lv_version.h
new file mode 100755
index 0000000..886966f
--- /dev/null
+++ b/scriptsrcs/lvgl/src/lv_version.h
@@ -0,0 +1,66 @@
+/**
+ * @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   1
+#define LVGL_VERSION_PATCH   1
+#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*/
diff --git a/scriptsrcs/wamr/.gitignore b/scriptsrcs/wamr/.gitignore
new file mode 100755
index 0000000..0e82e0b
--- /dev/null
+++ b/scriptsrcs/wamr/.gitignore
@@ -0,0 +1,2 @@
+.vscode
+**/*build/
diff --git a/scriptsrcs/wamr/CONTRIBUTING.md b/scriptsrcs/wamr/CONTRIBUTING.md
new file mode 100755
index 0000000..784d437
--- /dev/null
+++ b/scriptsrcs/wamr/CONTRIBUTING.md
@@ -0,0 +1,32 @@
+Contributing to WAMR
+=====================
+As an open-source project, we welcome and encourage the community to submit 
patches directly to the project. In our collaborative open source environment, 
standards and methods for submitting changes help reduce the chaos that can 
result from an active development community.
+We want to make contributing to this project as easy and transparent as 
possible, whether it's:
+- Reporting a bug
+- the current state of the code
+- Submitting a fix
+- Proposing new features
+
+License
+=====================
+WAMR uses the permissive open source `Apache 2.0 license`_ that allows you to 
freely use, modify, distribute and sell your own products that include Apache 
2.0 licensed software. 
+Any contributions you make will be under the same license. Feel free to 
contact the maintainers if that's a concern.
+
+Code changes
+===================
+We Use Github Flow, So All Code Changes Happen Through Pull Requests. Pull 
requests are the best way to propose changes to the codebase. We actively 
welcome your pull requests:
+
+- If you've added code that should be tested, add tests. Ensure the test suite 
passes.
+- Avoid use macros for different platforms. Use seperate folder of source 
files to host diffeent platform logic.
+- Put macro definitions inside share_lib/include/config.h if you have to use 
macro.
+- Make sure your code lints and compliant to our coding style.
+- Extend the application library is highly welcome.
+
+Coding Style
+===============================
+Please use [K&R](https://en.wikipedia.org/wiki/Indentation_style#K.26R) coding 
style, such as 4 spaces for indentation rather than tabs etc.
+We suggest use Eclipse like IDE or stable coding format tools to make your 
code compliant to K&R format.
+
+Report bugs
+===================
+We use GitHub issues to track public bugs. Report a bug by [open a new 
issue](https://github.com/intel/wasm-micro-runtime/issues/new).
diff --git a/scriptsrcs/wamr/Dockerfile b/scriptsrcs/wamr/Dockerfile
new file mode 100755
index 0000000..565b740
--- /dev/null
+++ b/scriptsrcs/wamr/Dockerfile
@@ -0,0 +1,21 @@
+# Currently supports clang-8 compiler
+# Using the "test.c" app from the README.md:
+# clang-8 --target=wasm32 -O3 
-Wl,--initial-memory=131072,--allow-undefined,--export=main,--no-threads,--strip-all,--no-entry
 -nostdlib -o test.wasm test.c
+# Pay attention to spacing above! ^
+# iwasm test.wasm
+
+FROM ubuntu:latest
+
+RUN apt-get update && \
+  apt-get -y upgrade && \
+  apt-get install -y build-essential clang-8 cmake g++-multilib git 
lib32gcc-5-dev llvm-8 lld-8 nano
+
+WORKDIR /root
+
+RUN git clone https://github.com/intel/wasm-micro-runtime
+
+RUN cd wasm-micro-runtime/core/iwasm/products/linux/ && mkdir build && \
+  cd build && cmake .. && make
+
+RUN cd /usr/bin && ln -s wasm-ld-8 wasm-ld
+RUN cd /usr/bin && ln -s 
~/wasm-micro-runtime/core/iwasm/products/linux/build/iwasm iwasm
diff --git a/scriptsrcs/wamr/LICENSE b/scriptsrcs/wamr/LICENSE
new file mode 100755
index 0000000..8f71f43
--- /dev/null
+++ b/scriptsrcs/wamr/LICENSE
@@ -0,0 +1,202 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/scriptsrcs/wamr/README.md b/scriptsrcs/wamr/README.md
new file mode 100755
index 0000000..a7383eb
--- /dev/null
+++ b/scriptsrcs/wamr/README.md
@@ -0,0 +1,128 @@
+WebAssembly Micro Runtime
+=========================
+WebAssembly Micro Runtime (WAMR) is a standalone WebAssembly (WASM) runtime 
with small footprint. It includes a few parts as below:
+- A WebAssembly VM core (namely iwasm)
+- The supporting API's for the WASM applications
+- A mechanism for dynamic management of the WASM application
+
+
+Current Features of WAMR
+=========================
+- WASM interpreter (AOT is planned)
+- Supports for a subset of Libc.
+- Supports "SIDE_MODULE=1" EMCC compilation option
+- Provides embedding C API
+- Provides a mechanism for exporting native API's to WASM applications
+- Supports the programming of firmware apps in a large range of languages 
(C/C++/Java/Rust/Go/TypeScript etc.)
+- App sandbox execution environment on embedded OS
+- The purely asynchronized programming model
+- Menu configuration for easy platform integration
+- Supports micro-service and pub-sub event inter-app communication models
+- Easy to extend to support remote FW application management from host or cloud
+
+Application framework architecture
+===================================
+
+By using the iwasm VM core, we are flexible to build different application 
frameworks for the specific domains. 
+
+The WAMR has offered a comprehensive application framework for device and IoT 
usages. The framework solves many common requirements for building a real 
project:
+- Modular design for more language runtimes support
+- Inter application communication
+- Remote application management
+- WASM APP programming model and API extension mechanism 
+
+<img src="./doc/pics/wamr-arch.JPG" width="80%">
+
+
+
+Build WAMR Core and run WASM applications
+================================================
+
+WAMR VM core (iwasm) can support building on different platforms:
+- Linux
+- Zephyr
+- Mac
+- VxWorks
+- AliOS-Things
+- Docker
+- Intel Software Guard Extention (SGX)
+
+After building the iwasm, we can compile some basic WASM applications and run 
it from the WAMR core. As the WAMR core doesn't include the extended 
application library, your WASM applications can only use the [WAMR built-in 
APIs](./doc/wamr_api.md).     
+
+See the [doc/building.md](./doc/building.md) for the detailed instructions.
+
+
+Embed WAMR 
+===========
+
+WAMR can be built into a standalone executable which takes the WASM 
application file name as input, and then executes it. In some other situations, 
the WAMR source code is embedded the product code and built into the final 
product. 
+
+WAMR provides a set of C API for loading the WASM module, instantiating the 
module and invoking a WASM  function from a native call. 
+
+See the [doc/embed_wamr.md](./doc/embed_wamr.md) for the details.
+
+WAMR application programming library
+===================================
+
+WAMR defined event driven programming model:
+- Single thread per WASM app instance
+- App must implement system callbacks: on_init, on_destrory
+
+
+In general there are a few API classes for the WASM application programming:
+- WAMR Built-in API: WAMR core provides a minimal libc API set for WASM APP
+- WAMR application libraries: 
+  - Timer
+  - Micro service (Request/Response)
+  - Pub/Sub
+  - Sensor
+  - Connection and data transmission
+  - 2D graphic UI (based on littlevgl)
+- User extended native API: extend the native API to the WASM applications
+- 3rd party libraries: Programmers can download any 3rd party C/C++ source 
code and build it together with the WASM APP code
+
+See the [doc/wamr_api.md](./doc/wamr_api.md) for the details.
+
+
+Samples and demos
+=================
+
+The WAMR samples are located in folder [./samples](./samples). A sample 
usually contains the WAMR runtime build, WASM applications and test tools. The 
WARM provides following samples:
+- [Simple](./samples/simple/README.md): The runtime is integrated with most of 
the WAMR APP libaries and multiple WASM applications are provided for using 
different WASM API set.
+- [littlevgl](./samples/littlevgl/README.md): Demostrating the graphic user 
interface application usage on WAMR. The whole 
[LittlevGL](https://github.com/littlevgl/) 2D user graphic library and the UI 
application is built into WASM application.  
+- [gui](./samples/gui/README.md): Moved the 
[LittlevGL](https://github.com/littlevgl/) library into the runtime and defined 
a WASM application interface by wrapping the littlevgl API.
+- [IoT-APP-Store-Demo](./test-tools/IoT-APP-Store-Demo/README.md): A web site 
for demostrating a WASM APP store usage where we can remotely install and 
uninstall WASM application on remote devices.
+
+
+The graphic user interface demo photo:
+
+![WAMR samples diagram](./doc/pics/vgl_demo.png "WAMR samples diagram")
+
+
+
+
+Releases and acknowledgments
+============================
+
+WAMR is a community efforts. Since Intel Corp contributed the first release of 
this open source project, this project has received many good contributions 
from the community. 
+
+See the [major features releasing history and contributor 
names](./doc/release_ack.md)   
+
+
+Roadmap
+=======
+
+See the [roadmap](./doc/roadmap.md) to understand what major features are 
planed or under development.
+
+Please submit issues for any new feature request, or your plan for 
contributing new features.
+
+
+
+
+
+Submit issues and contact the maintainers
+=========================================
+[Click here to submit. Your feedback is always 
welcome!](https://github.com/intel/wasm-micro-runtime/issues/new)
+
+
+Contact the maintainers: imrt-public@xxxxxxxxx
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/CMakeLists.txt 
b/scriptsrcs/wamr/core/app-mgr/app-manager/CMakeLists.txt
new file mode 100755
index 0000000..ef2d49c
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+include_directories (.
+                     include
+                     platform/include
+                     platform/${PLATFORM}
+                     ../classlib/include
+                     utils/coap/er-coap
+                     utils/coap/extension
+                     ../external/iwasm/include)
+
+
+file (GLOB_RECURSE source_all ../../app-manager/*.c)
+
+add_library (appmgrlib ${source_all})
+
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/app_manager.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/app_manager.c
new file mode 100755
index 0000000..6aca165
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/app_manager.c
@@ -0,0 +1,406 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "app_manager.h"
+#include "app_manager_host.h"
+#include "bh_queue.h"
+#include "bh_memory.h"
+#include "bh_thread.h"
+#include "attr_container.h"
+#include "event.h"
+#include "watchdog.h"
+#include "coap_ext.h"
+
+/* Queue of app manager */
+static bh_queue *g_app_mgr_queue;
+
+void*
+get_app_manager_queue()
+{
+    return g_app_mgr_queue;
+}
+
+void app_manager_post_applets_update_event()
+{
+    module_data *m_data;
+    attr_container_t *attr_cont;
+    request_t msg;
+    int num = 0, i = 0;
+    char *url = "/applets";
+
+    if (!event_is_registered(url))
+        return;
+
+    if (!(attr_cont = attr_container_create("All Applets"))) {
+        app_manager_printf(
+                "Post applets update event failed: allocate memory failed.");
+        return;
+    }
+
+    vm_mutex_lock(&module_data_list_lock);
+
+    m_data = module_data_list;
+    while (m_data) {
+        num++;
+        m_data = m_data->next;
+    }
+
+    if (!(attr_container_set_int(&attr_cont, "num", num))) {
+        app_manager_printf(
+                "Post applets update event failed: set attr container key 
failed.");
+        goto fail;
+    }
+
+    m_data = module_data_list;
+    while (m_data) {
+        char buf[32];
+        i++;
+        snprintf(buf, sizeof(buf), "%s%d", "applet", i);
+        if (!(attr_container_set_string(&attr_cont, buf, 
m_data->module_name))) {
+            app_manager_printf(
+                    "Post applets update event failed: set attr applet name 
key failed.");
+            goto fail;
+        }
+        snprintf(buf, sizeof(buf), "%s%d", "heap", i);
+        if (!(attr_container_set_int(&attr_cont, buf, m_data->heap_size))) {
+            app_manager_printf(
+                    "Post applets update event failed: set attr heap key 
failed.");
+            goto fail;
+        }
+        m_data = m_data->next;
+    }
+
+    memset(&msg, 0, sizeof(msg));
+    msg.url = url;
+    msg.action = COAP_EVENT;
+    msg.payload = (char*) attr_cont;
+    send_request_to_host(&msg);
+
+    app_manager_printf("Post applets update event success!\n");
+    attr_container_dump(attr_cont);
+
+    fail: vm_mutex_unlock(&module_data_list_lock);
+    attr_container_destroy(attr_cont);
+}
+
+static int get_applets_count()
+{
+    module_data *m_data;
+    int num = 0;
+
+    vm_mutex_lock(&module_data_list_lock);
+
+    m_data = module_data_list;
+    while (m_data) {
+        num++;
+        m_data = m_data->next;
+    }
+
+    vm_mutex_unlock(&module_data_list_lock);
+
+    return num;
+}
+
+/* Query fw apps info if name = NULL, otherwise query specify app */
+static bool app_manager_query_applets(request_t *msg, const char *name)
+{
+    module_data *m_data;
+    attr_container_t *attr_cont;
+    int num = 0, i = 0, len;
+    bool ret = false, found = false;
+    response_t response[1] = { 0 };
+
+    attr_cont = attr_container_create("Applets Info");
+    if (!attr_cont) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Query Applets failed: allocate memory failed.");
+        return false;
+    }
+
+    vm_mutex_lock(&module_data_list_lock);
+
+    m_data = module_data_list;
+    while (m_data) {
+        num++;
+        m_data = m_data->next;
+    }
+
+    if (name == NULL && !(attr_container_set_int(&attr_cont, "num", num))) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Query Applets failed: set attr container key failed.");
+        goto fail;
+    }
+
+    m_data = module_data_list;
+    while (m_data) {
+        char buf[32];
+
+        if (name == NULL) {
+            i++;
+            snprintf(buf, sizeof(buf), "%s%d", "applet", i);
+            if (!(attr_container_set_string(&attr_cont, buf,
+                    m_data->module_name))) {
+                SEND_ERR_RESPONSE(msg->mid,
+                        "Query Applets failed: set attr container key 
failed.");
+                goto fail;
+            }
+            snprintf(buf, sizeof(buf), "%s%d", "heap", i);
+            if (!(attr_container_set_int(&attr_cont, buf, m_data->heap_size))) 
{
+                SEND_ERR_RESPONSE(msg->mid,
+                        "Query Applets failed: set attr container heap key 
failed.");
+                goto fail;
+            }
+        } else if (!strcmp(name, m_data->module_name)) {
+            found = true;
+            if (!(attr_container_set_string(&attr_cont, "name",
+                    m_data->module_name))) {
+                SEND_ERR_RESPONSE(msg->mid,
+                        "Query Applet failed: set attr container key failed.");
+                goto fail;
+            }
+            if (!(attr_container_set_int(&attr_cont, "heap", 
m_data->heap_size))) {
+                SEND_ERR_RESPONSE(msg->mid,
+                        "Query Applet failed: set attr container heap key 
failed.");
+                goto fail;
+            }
+        }
+
+        m_data = m_data->next;
+    }
+
+    if (name != NULL && !found) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Query Applet failed: the app is not found.");
+        goto fail;
+    }
+
+    len = attr_container_get_serialize_length(attr_cont);
+
+    make_response_for_request(msg, response);
+    set_response(response, CONTENT_2_05,
+    FMT_ATTR_CONTAINER, (char*) attr_cont, len);
+    send_response_to_host(response);
+
+    ret = true;
+    app_manager_printf("Query Applets success!\n");
+    attr_container_dump(attr_cont);
+
+    fail: vm_mutex_unlock(&module_data_list_lock);
+    attr_container_destroy(attr_cont);
+    return ret;
+}
+
+void applet_mgt_reqeust_handler(request_t *request, void *unused)
+{
+    bh_message_t msg;
+    /* deep copy, but not use app self heap, but use global heap */
+    request_t *req = clone_request(request);
+
+    if (!req)
+        return;
+
+    msg = bh_new_msg(RESTFUL_REQUEST, req, sizeof(*req), request_cleaner);
+    if (!msg) {
+        request_cleaner(req);
+        return;
+    }
+
+    bh_post_msg2(get_app_manager_queue(), msg);
+}
+
+/* return -1 for error */
+static int get_module_type(char *kv_str)
+{
+    int module_type = -1;
+    char type_str[8] = { 0 };
+
+    find_key_value(kv_str, strlen(kv_str), "type", type_str,
+            sizeof(type_str) - 1, '&');
+
+    if (strlen(type_str) == 0)
+        module_type = Module_WASM_App;
+    else if (strcmp(type_str, "jeff") == 0)
+        module_type = Module_Jeff;
+    else if (strcmp(type_str, "wasm") == 0)
+        module_type = Module_WASM_App;
+    else if (strcmp(type_str, "wasmlib") == 0)
+        module_type = Module_WASM_Lib;
+
+    return module_type;
+}
+
+#define APP_NAME_MAX_LEN 128
+
+/* Queue callback of App Manager */
+
+static void app_manager_queue_callback(void *message)
+{
+    request_t *request = (request_t *) 
bh_message_payload((bh_message_t)message);
+    int mid = request->mid, module_type, offset;
+
+    if ((offset = check_url_start(request->url, strlen(request->url), 
"/applet"))
+            > 0) {
+        module_type = get_module_type(request->url + offset);
+
+        if (module_type == -1) {
+            SEND_ERR_RESPONSE(mid,
+                    "Applet Management failed: invalid module type.");
+            goto fail;
+        }
+
+        /* Install Applet */
+        if (request->action == COAP_PUT) {
+            if (get_applets_count() >= MAX_APP_INSTALLATIONS) {
+                SEND_ERR_RESPONSE(mid,
+                        "Install Applet failed: exceed max app 
installations.");
+                goto fail;
+            }
+
+            if (!request->payload) {
+                SEND_ERR_RESPONSE(mid,
+                        "Install Applet failed: invalid payload.");
+                goto fail;
+            }
+            if (g_module_interfaces[module_type]
+                    && g_module_interfaces[module_type]->module_install) {
+                if (!g_module_interfaces[module_type]->module_install(request))
+                    goto fail;
+            }
+        }
+        /* Uninstall Applet */
+        else if (request->action == COAP_DELETE) {
+            module_type = get_module_type(request->url + offset);
+            if (module_type == -1) {
+                SEND_ERR_RESPONSE(mid,
+                        "Uninstall Applet failed: invalid module type.");
+                goto fail;
+            }
+
+            if (g_module_interfaces[module_type]
+                    && g_module_interfaces[module_type]->module_uninstall) {
+                if (!g_module_interfaces[module_type]->module_uninstall(
+                        request))
+                    goto fail;
+            }
+        }
+        /* Query Applets installed */
+        else if (request->action == COAP_GET) {
+            char name[APP_NAME_MAX_LEN] = { 0 };
+            char *properties = request->url + offset;
+            find_key_value(properties, strlen(properties), "name", name,
+                    sizeof(name) - 1, '&');
+            if (strlen(name) > 0)
+                app_manager_query_applets(request, name);
+            else
+                app_manager_query_applets(request, NULL);
+        } else {
+            SEND_ERR_RESPONSE(mid, "Invalid request of applet: invalid 
action");
+        }
+    }
+    /* Event Register/Unregister */
+    else if ((offset = check_url_start(request->url, strlen(request->url),
+            "/event/")) > 0) {
+        char url_buf[256] = { 0 };
+
+        strncpy(url_buf, request->url + offset, sizeof(url_buf) - 1);
+
+        if (!event_handle_event_request(request->action, url_buf, ID_HOST)) {
+            SEND_ERR_RESPONSE(mid, "Handle event request failed.");
+            goto fail;
+        }
+        send_error_response_to_host(mid, CONTENT_2_05, NULL); /* OK */
+    } else {
+        int i;
+        for (i = 0; i < Module_Max; i++) {
+            if (g_module_interfaces[i]
+                    && g_module_interfaces[i]->module_handle_host_url) {
+                if (g_module_interfaces[i]->module_handle_host_url(request))
+                    break;
+            }
+        }
+
+    }
+
+    fail:
+
+    return;
+
+}
+
+static void module_interfaces_init()
+{
+    int i;
+    for (i = 0; i < Module_Max; i++) {
+        if (g_module_interfaces[i] && g_module_interfaces[i]->module_init)
+            g_module_interfaces[i]->module_init();
+    }
+}
+
+void app_manager_startup(host_interface *interface)
+{
+    module_interfaces_init();
+
+    /* Create queue of App Manager */
+    g_app_mgr_queue = bh_queue_create();
+    if (!g_app_mgr_queue)
+        return;
+
+    if (!module_data_list_init())
+        goto fail1;
+
+    if (!watchdog_startup())
+        goto fail2;
+
+    /* Initialize Host */
+    app_manager_host_init(interface);
+
+    am_register_resource("/app/", targeted_app_request_handler, ID_APP_MGR);
+
+    /*/app/ and /event/ are both processed by applet_mgt_reqeust_handler*/
+    am_register_resource("/applet", applet_mgt_reqeust_handler, ID_APP_MGR);
+    am_register_resource("/event/", applet_mgt_reqeust_handler, ID_APP_MGR);
+
+    app_manager_printf("App Manager started.\n");
+
+    /* Enter loop run */
+    bh_queue_enter_loop_run(g_app_mgr_queue, app_manager_queue_callback);
+
+    fail2: module_data_list_destroy();
+
+    fail1: bh_queue_destroy(g_app_mgr_queue);
+}
+
+#include "module_config.h"
+
+module_interface *g_module_interfaces[Module_Max] = {
+#if ENABLE_MODULE_JEFF != 0
+        &jeff_module_interface,
+#else
+        NULL,
+#endif
+
+#if ENABLE_MODULE_WASM_APP != 0
+        &wasm_app_module_interface,
+#else
+        NULL,
+#endif
+
+#if ENABLE_MODULE_WASM_LIB != 0
+        &wasm_lib_module_interface
+#else
+        NULL
+#endif
+    };
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/app_manager.h 
b/scriptsrcs/wamr/core/app-mgr/app-manager/app_manager.h
new file mode 100755
index 0000000..0fe8680
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/app_manager.h
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef APP_MANAGER_H
+#define APP_MANAGER_H
+
+#include "bh_platform.h"
+#include "bh_common.h"
+#include "bh_queue.h"
+#include "korp_types.h"
+#include "app_manager_export.h"
+#include "native_interface.h"
+#include "shared_utils.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __ZEPHYR__
+#define app_manager_printf printf
+#else
+#define app_manager_printf printk
+#endif
+
+#define ID_HOST -3
+#define ID_APP_MGR -2
+#define ID_NONE (uint32)-1
+
+#define SEND_ERR_RESPONSE(mid, err_msg) do {                            \
+  app_manager_printf("%s\n", err_msg);                                  \
+  send_error_response_to_host(mid, INTERNAL_SERVER_ERROR_5_00, err_msg);  \
+} while (0)
+
+extern module_interface *g_module_interfaces[Module_Max];
+
+/* Lock of the module data list */
+extern korp_mutex module_data_list_lock;
+
+/* Module data list */
+extern module_data *module_data_list;
+
+void
+app_manager_add_module_data(module_data *m_data);
+
+void
+app_manager_del_module_data(module_data *m_data);
+
+bool
+module_data_list_init();
+
+void
+module_data_list_destroy();
+
+bool
+app_manager_is_interrupting_module(uint32 module_type);
+
+void release_module(module_data *m_data);
+
+void
+module_data_list_remove(module_data *m_data);
+
+void*
+app_manager_timer_create(void (*timer_callback)(void*),
+        watchdog_timer *wd_timer);
+
+void
+app_manager_timer_destroy(void *timer);
+
+void
+app_manager_timer_start(void *timer, int timeout);
+
+void
+app_manager_timer_stop(void *timer);
+
+watchdog_timer*
+app_manager_get_wd_timer_from_timer_handle(void *timer);
+
+int
+app_manager_signature_verify(const uint8_t *file, unsigned int file_len,
+        const uint8_t *signature, unsigned int sig_size);
+
+void targeted_app_request_handler(request_t *request, void *unused);
+
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+void *
+app_manager_get_tool_agent_queue();
+#endif
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif
+
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/app_manager_host.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/app_manager_host.c
new file mode 100755
index 0000000..ac8cadd
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/app_manager_host.c
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_common.h"
+#include "korp_types.h"
+#include "app_manager_host.h"
+#include "app_manager.h"
+#include "app_manager_export.h"
+#include "coap_ext.h"
+#include "bh_memory.h"
+#include "bh_thread.h"
+
+/* host communication interface */
+static host_interface host_commu;
+
+/* IMRTLink Two leading bytes */
+static unsigned char leadings[] = { (unsigned char) 0x12, (unsigned char) 0x34 
};
+
+/* IMRTLink Receiving Phase */
+typedef enum recv_phase_t {
+    Phase_Non_Start, Phase_Leading, Phase_Type, Phase_Size, Phase_Payload
+} recv_phase_t;
+
+/* IMRTLink Receive Context */
+typedef struct recv_context_t {
+    recv_phase_t phase;
+    bh_link_msg_t message;
+    int size_in_phase;
+} recv_context_t;
+
+/* Current IMRTLink receive context */
+static recv_context_t recv_ctx;
+
+/* Lock for device write */
+static korp_mutex host_lock;
+
+static bool enable_log = false;
+
+static bool is_little_endian()
+{
+    long i = 0x01020304;
+    unsigned char* c = (unsigned char*) &i;
+    return (*c == 0x04) ? true : false;
+}
+
+static void exchange32(uint8* pData)
+{
+    uint8 value = *pData;
+    *pData = *(pData + 3);
+    *(pData + 3) = value;
+
+    value = *(pData + 1);
+    *(pData + 1) = *(pData + 2);
+    *(pData + 2) = value;
+}
+
+/* return:
+ *  1: complete message received
+ *  0: incomplete message received
+ */
+static int on_imrt_link_byte_arrive(unsigned char ch, recv_context_t *ctx)
+{
+    if (ctx->phase == Phase_Non_Start) {
+        ctx->message.payload_size = 0;
+
+        if (ctx->message.payload) {
+            bh_free(ctx->message.payload);
+            ctx->message.payload = NULL;
+        }
+
+        if (ch == leadings[0]) {
+            if (enable_log)
+                app_manager_printf("##On byte arrive: got leading 0\n");
+            ctx->phase = Phase_Leading;
+        }
+
+        return 0;
+    } else if (ctx->phase == Phase_Leading) {
+        if (ch == leadings[1]) {
+            if (enable_log)
+                app_manager_printf("##On byte arrive: got leading 1\n");
+            ctx->phase = Phase_Type;
+        } else
+            ctx->phase = Phase_Non_Start;
+
+        return 0;
+    } else if (ctx->phase == Phase_Type) {
+        if (ctx->size_in_phase++ == 0) {
+            if (enable_log)
+                app_manager_printf("##On byte arrive: got type 0\n");
+            ctx->message.message_type = ch;
+        } else {
+            if (enable_log)
+                app_manager_printf("##On byte arrive: got type 1\n");
+            ctx->message.message_type |= (ch << 8);
+            ctx->message.message_type = ntohs(ctx->message.message_type);
+            ctx->phase = Phase_Size;
+            ctx->size_in_phase = 0;
+        }
+
+        return 0;
+    } else if (ctx->phase == Phase_Size) {
+        unsigned char *p = (unsigned char *) &ctx->message.payload_size;
+
+        if (enable_log)
+            app_manager_printf("##On byte arrive: got payload_size, byte %d\n",
+                    ctx->size_in_phase);
+        p[ctx->size_in_phase++] = ch;
+
+        if (ctx->size_in_phase == sizeof(ctx->message.payload_size)) {
+#ifndef __ZEPHYR__
+            ctx->message.payload_size = ntohl(ctx->message.payload_size);
+#else
+            if (is_little_endian())
+            exchange32((uint8*)&ctx->message.payload_size);
+#endif
+            ctx->phase = Phase_Payload;
+
+            if (enable_log)
+                app_manager_printf("##On byte arrive: payload_size: %d\n",
+                        ctx->message.payload_size);
+            if (ctx->message.payload) {
+                bh_free(ctx->message.payload);
+                ctx->message.payload = NULL;
+            }
+
+            /* message completion */
+            if (ctx->message.payload_size == 0) {
+                ctx->phase = Phase_Non_Start;
+                if (enable_log)
+                    app_manager_printf(
+                            "##On byte arrive: receive end, payload_size is 
0.\n");
+                return 1;
+            }
+
+            if (ctx->message.payload_size > 1024 * 1024) {
+                ctx->phase = Phase_Non_Start;
+                return 0;
+            }
+
+            if (ctx->message.message_type != INSTALL_WASM_BYTECODE_APP) {
+                ctx->message.payload = (char *) bh_malloc(
+                        ctx->message.payload_size);
+                if (!ctx->message.payload) {
+                    ctx->phase = Phase_Non_Start;
+                    return 0;
+                }
+            }
+
+            ctx->phase = Phase_Payload;
+            ctx->size_in_phase = 0;
+        }
+
+        return 0;
+    } else if (ctx->phase == Phase_Payload) {
+        if (ctx->message.message_type == INSTALL_WASM_BYTECODE_APP) {
+            int received_size;
+            module_on_install_request_byte_arrive_func module_on_install =
+                    g_module_interfaces[Module_WASM_App]->module_on_install;
+
+            ctx->size_in_phase++;
+
+            if (module_on_install != NULL) {
+                if (module_on_install(ch, ctx->message.payload_size,
+                        &received_size)) {
+                    if (received_size == ctx->message.payload_size) {
+                        /* whole wasm app received */
+                        ctx->phase = Phase_Non_Start;
+                        return 1;
+                    }
+                } else {
+                    /* receive or handle fail */
+                    ctx->phase = Phase_Non_Start;
+                    return 0;
+                }
+                return 0;
+            } else {
+                ctx->phase = Phase_Non_Start;
+                return 0;
+            }
+        } else {
+            ctx->message.payload[ctx->size_in_phase++] = ch;
+
+            if (ctx->size_in_phase == ctx->message.payload_size) {
+                ctx->phase = Phase_Non_Start;
+                if (enable_log)
+                    app_manager_printf(
+                            "##On byte arrive: receive end, payload_size is 
%d.\n",
+                            ctx->message.payload_size);
+                return 1;
+            }
+            return 0;
+        }
+    }
+
+    return 0;
+}
+
+int aee_host_msg_callback(void *msg, uint16_t msg_len)
+{
+    unsigned char *p = msg, *p_end = p + msg_len;
+
+    /*app_manager_printf("App Manager receive %d bytes from Host\n", 
msg_len);*/
+
+    for (; p < p_end; p++) {
+        int ret = on_imrt_link_byte_arrive(*p, &recv_ctx);
+
+        if (ret == 1) {
+            if (recv_ctx.message.payload) {
+                int msg_type = recv_ctx.message.message_type;
+
+                if (msg_type == REQUEST_PACKET) {
+                    request_t request;
+                    memset(&request, 0, sizeof(request));
+
+                    if (!unpack_request(recv_ctx.message.payload,
+                            recv_ctx.message.payload_size, &request))
+                        continue;
+
+                    request.sender = ID_HOST;
+
+                    am_dispatch_request(&request);
+                } else {
+                    printf("unexpected host msg type: %d\n", msg_type);
+                }
+
+                bh_free(recv_ctx.message.payload);
+                recv_ctx.message.payload = NULL;
+                recv_ctx.message.payload_size = 0;
+            }
+
+            memset(&recv_ctx, 0, sizeof(recv_ctx));
+        }
+    }
+
+    return 0;
+}
+
+bool app_manager_host_init(host_interface *interface)
+{
+    vm_mutex_init(&host_lock);
+    memset(&recv_ctx, 0, sizeof(recv_ctx));
+
+    host_commu.init = interface->init;
+    host_commu.send = interface->send;
+    host_commu.destroy = interface->destroy;
+
+    if (host_commu.init != NULL)
+      return host_commu.init();
+
+    return true;
+}
+
+int app_manager_host_send_msg(int msg_type, const unsigned char *buf, int size)
+{
+    /* send an IMRT LINK message contains the buf as payload */
+    if (host_commu.send != NULL) {
+        int size_s = size, n;
+        char header[16];
+
+        vm_mutex_lock(&host_lock);
+        /* leading bytes */
+        bh_memcpy_s(header, 2, leadings, 2);
+
+        /* message type */
+        // todo: check if use network byte order!!!
+        *((uint16*) (header + 2)) = htons(msg_type);
+
+        /* payload length */
+        if (is_little_endian())
+            exchange32((uint8*) &size_s);
+
+        bh_memcpy_s(header + 4, 4, &size_s, 4);
+        n = host_commu.send(NULL, header, 8);
+        if (n != 8) {
+            vm_mutex_unlock(&host_lock);
+            return 0;
+        }
+
+        /* payload */
+        n = host_commu.send(NULL, buf, size);
+        vm_mutex_unlock(&host_lock);
+
+        printf("sent %d bytes to host\n", n);
+        return n;
+    } else {
+        printf("no send api provided\n");
+    }
+    return 0;
+}
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/app_manager_host.h 
b/scriptsrcs/wamr/core/app-mgr/app-manager/app_manager_host.h
new file mode 100755
index 0000000..1d6b45c
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/app_manager_host.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _APP_MANAGER_HOST_H_
+#define _APP_MANAGER_HOST_H_
+
+#include "wasm_export.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define HOST_MODE_AON  1
+#define HOST_MODE_UART 2
+#define HOST_MODE_TEST 3
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif
+
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/app_mgr.cmake 
b/scriptsrcs/wamr/core/app-mgr/app-manager/app_mgr.cmake
new file mode 100755
index 0000000..a549f30
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/app_mgr.cmake
@@ -0,0 +1,23 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (__APP_MGR_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${__APP_MGR_DIR})
+
+
+file (GLOB source_all ${__APP_MGR_DIR}/*.c  
${__APP_MGR_DIR}/platform/${TARGET_PLATFORM}/*.c)
+
+set (APP_MGR_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/ble_msg.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/ble_msg.c
new file mode 100755
index 0000000..3a9da09
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/ble_msg.c
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if 0
+
+#define BLUETOOTH_INTERFACE_ADVERTISMENT_DATA_LENGTH   31
+/* ble_device_info */
+typedef struct ble_device_info {
+
+    /* address type */
+    uint8_t address_type;
+    /* MAC of Device */
+    uint8_t mac[6];
+    /* security level */
+    uint8_t security_level;
+    /* signal strength */
+    int8_t rssi;
+    /* uuid_16_type */
+    int8_t uuid_16_type;
+    /* uuid_32_type */
+    int8_t uuid_32_type;
+    /* uuid_128_type */
+    int8_t uuid_128_type;
+    /* error code */
+    uint8_t error_code;
+    /* scan response length*/
+    uint16_t adv_data_len;
+    /* advertisement data */
+    uint8_t *adv_data;
+    /* scan response length*/
+    uint16_t scan_response_len;
+    /* scan response */
+    uint8_t *scan_response;
+    /* next device */
+    struct ble_device_info *next;
+    /* private data length */
+    int private_data_length;
+    /* private data */
+    uint8_t *private_data;
+    /* value handle*/
+    uint16_t value_handle;
+    /* ccc handle*/
+    uint16_t ccc_handle;
+
+}ble_device_info;
+
+/* BLE message sub type */
+typedef enum BLE_SUB_EVENT_TYPE {
+    BLE_SUB_EVENT_DISCOVERY,
+    BLE_SUB_EVENT_CONNECTED,
+    BLE_SUB_EVENT_DISCONNECTED,
+    BLE_SUB_EVENT_NOTIFICATION,
+    BLE_SUB_EVENT_INDICATION,
+    BLE_SUB_EVENT_PASSKEYENTRY,
+    BLE_SUB_EVENT_SECURITY_LEVEL_CHANGE
+}BLE_SUB_EVENT_TYPE;
+
+/* Queue message, for BLE Event */
+typedef struct bh_queue_ble_sub_msg_t {
+    /* message type, should be one of QUEUE_MSG_TYPE */
+    BLE_SUB_EVENT_TYPE type;
+    /* payload size */
+    /*uint32_t payload_size;*/
+    char payload[1];
+}bh_queue_ble_sub_msg_t;
+
+static void
+app_instance_free_ble_msg(char *msg)
+{
+    bh_queue_ble_sub_msg_t *ble_msg = (bh_queue_ble_sub_msg_t *)msg;
+    ble_device_info *dev_info;
+
+    dev_info = (ble_device_info *) ble_msg->payload;
+
+    if (dev_info->scan_response != NULL)
+    bh_free(dev_info->scan_response);
+
+    if (dev_info->private_data != NULL)
+    bh_free(dev_info->private_data);
+
+    if (dev_info->adv_data != NULL)
+    bh_free(dev_info->adv_data);
+
+    if (dev_info != NULL)
+    bh_free(dev_info);
+}
+
+static void
+app_instance_queue_free_callback(bh_message_t queue_msg)
+{
+
+    char * payload = (char *)bh_message_payload(queue_msg);
+    if(payload == NULL)
+    return;
+
+    switch (bh_message_type(queue_msg))
+    {
+        /*
+         case SENSOR_EVENT: {
+         bh_sensor_event_t *sensor_event = (bh_sensor_event_t *) payload;
+         attr_container_t *event = sensor_event->event;
+         attr_container_destroy(event);
+         }
+         break;
+         */
+        case BLE_EVENT: {
+            app_instance_free_ble_msg(payload);
+            break;
+        }
+    }
+}
+
+#endif
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/coding_rule.txt 
b/scriptsrcs/wamr/core/app-mgr/app-manager/coding_rule.txt
new file mode 100755
index 0000000..4598872
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/coding_rule.txt
@@ -0,0 +1,15 @@
+Coding rules:
+
+1. module implementation can include the export head files of associated 
runtime
+
+2. app manager only call access the module implementation through the 
interface API
+
+3. module implementation can call the app manager API from following files:
+   - util.c
+   - message.c
+   
+4. platform API: To define it   
+   
+5. Any platform dependent implementation of app manager should be implemented 
in the 
+   platform specific source file, such as app_mgr_zephyr.c   
+
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/event.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/event.c
new file mode 100755
index 0000000..2f78a40
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/event.c
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string.h>
+
+#include "event.h"
+
+#include "app_manager.h"
+#include "bh_memory.h"
+#include "coap_ext.h"
+
+typedef struct _subscribe {
+    struct _subscribe * next;
+    uint32 subscriber_id;
+} subscribe_t;
+
+typedef struct _event {
+    struct _event *next;
+    int subscriber_size;
+    subscribe_t * subscribers;
+    char url[1]; /* event url */
+} event_reg_t;
+
+event_reg_t *g_events = NULL;
+
+static bool find_subscriber(event_reg_t * reg, uint32 id, bool remove_found)
+{
+    subscribe_t* c = reg->subscribers;
+    subscribe_t * prev = NULL;
+    while (c) {
+        subscribe_t * next = c->next;
+        if (c->subscriber_id == id) {
+            if (remove_found) {
+                if (prev)
+                    prev->next = next;
+                else
+                    reg->subscribers = next;
+
+                bh_free(c);
+            }
+
+            return true;
+        } else {
+            prev = c;
+            c = next;
+        }
+    }
+
+    return false;
+}
+
+static bool check_url(const char *url)
+{
+    if (*url == 0)
+        return false;
+
+    return true;
+}
+
+bool am_register_event(const char *url, uint32_t reg_client)
+{
+    event_reg_t *current = g_events;
+
+    app_manager_printf("am_register_event adding url:(%s)\n", url);
+
+    if (!check_url(url)) {
+        app_manager_printf("am_register_event: invaild url:(%s)\n", url);
+        return false;
+    }
+    while (current) {
+        if (strcmp(url, current->url) == 0)
+            break;
+        current = current->next;
+    }
+
+    if (current == NULL) {
+        if (NULL
+                == (current = (event_reg_t *) bh_malloc(
+                        offsetof(event_reg_t, url) + strlen(url) + 1))) {
+            app_manager_printf("am_register_event: malloc fail\n");
+            return false;
+        }
+
+        memset(current, 0, sizeof(event_reg_t));
+        bh_strcpy_s(current->url, strlen(url) + 1, url);
+        current->next = g_events;
+        g_events = current;
+    }
+
+    if (find_subscriber(current, reg_client, false)) {
+        return true;
+    } else {
+        subscribe_t * s = (subscribe_t*) bh_malloc(sizeof(subscribe_t));
+        if (s == NULL)
+            return false;
+
+        memset(s, 0, sizeof(subscribe_t));
+        s->subscriber_id = reg_client;
+        s->next = current->subscribers;
+        current->subscribers = s;
+        app_manager_printf("client: %d registered event (%s)\n", reg_client,
+                url);
+    }
+
+    return true;
+}
+
+// @url: NULL means the client wants to unregister all its subscribed items
+bool am_unregister_event(const char *url, uint32_t reg_client)
+{
+    event_reg_t *current = g_events, *pre = NULL;
+
+    while (current != NULL) {
+        if (url == NULL || strcmp(current->url, url) == 0) {
+            event_reg_t * next = current->next;
+            if (find_subscriber(current, reg_client, true)) {
+                app_manager_printf("client: %d deregistered event (%s)\n",
+                        reg_client, current->url);
+            }
+
+            // remove the registration if no client subscribe it
+            if (current->subscribers == NULL) {
+                app_manager_printf("unregister for event deleted url:(%s)\n",
+                        current->url);
+                if (pre)
+                    pre->next = next;
+                else
+                    g_events = next;
+                bh_free(current);
+                current = next;
+                continue;
+            }
+        }
+        pre = current;
+        current = current->next;
+    }
+
+    return true;
+}
+
+bool event_handle_event_request(uint8_t code, const char *event_url,
+        uint32_t reg_client)
+{
+    if (code == COAP_PUT) { /* register */
+        return am_register_event(event_url, reg_client);
+    } else if (code == COAP_DELETE) { /* unregister */
+        return am_unregister_event(event_url, reg_client);
+    } else {
+        /* invalid request */
+        return false;
+    }
+}
+
+void am_publish_event(request_t * event)
+{
+    bh_assert(event->action == COAP_EVENT);
+
+    event_reg_t *current = g_events;
+    while (current) {
+        if (0 == strcmp(event->url, current->url)) {
+            subscribe_t* c = current->subscribers;
+            while (c) {
+                if (c->subscriber_id == ID_HOST) {
+                    send_request_to_host(event);
+                } else {
+                    module_request_handler(event, (void *)c->subscriber_id);
+                }
+                c = c->next;
+            }
+
+            return;
+        }
+
+        current = current->next;
+    }
+}
+
+bool event_is_registered(const char *event_url)
+{
+    event_reg_t *current = g_events;
+
+    while (current != NULL) {
+        if (strcmp(current->url, event_url) == 0) {
+            return true;
+        }
+        current = current->next;
+    }
+
+    return false;
+}
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/event.h 
b/scriptsrcs/wamr/core/app-mgr/app-manager/event.h
new file mode 100755
index 0000000..84742ad
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/event.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _EVENT_H_
+#define _EVENT_H_
+
+#include "bh_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Handle event request from host agent
+ *
+ * @param code the coap packet code
+ * @param event_url the event url
+ *
+ * @return true if success, false otherwise
+ */
+bool
+event_handle_event_request(uint8_t code, const char *event_url,
+        uint32_t register);
+
+/**
+ * Test whether the event is registered
+ *
+ * @param event_url the event url
+ *
+ * @return true for registered, false for not registered
+ */
+bool
+event_is_registered(const char *event_url);
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif /* _EVENT_H_ */
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/message.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/message.c
new file mode 100755
index 0000000..0bccaec
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/message.c
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "app_manager.h"
+#include "app_manager_host.h"
+#include "event.h"
+#include "attr_container.h"
+#include "bh_memory.h"
+#include "coap_ext.h"
+
+#if 0
+bool send_coap_packet_to_host(coap_packet_t * packet)
+{
+    int size;
+    uint8_t *buf;
+
+    size = coap_serialize_message_tcp(&packet, &buf);
+    if (!buf || size == 0)
+    return false;
+
+    app_manager_host_send_msg(buf, size);
+    bh_free(buf);
+
+    return true;
+}
+#endif
+
+bool send_request_to_host(request_t *msg)
+{
+    if (COAP_EVENT == msg->action && !event_is_registered(msg->url)) {
+        app_manager_printf("Event is not registered\n");
+        return false;
+    }
+
+    int size;
+    char * packet = pack_request(msg, &size);
+    if (packet == NULL)
+        return false;
+
+    app_manager_host_send_msg(REQUEST_PACKET, packet, size);
+
+    free_req_resp_packet(packet);
+
+    return true;
+}
+
+bool send_response_to_host(response_t *response)
+{
+    int size;
+    char * packet = pack_response(response, &size);
+    if (packet == NULL)
+        return false;
+
+    app_manager_host_send_msg(RESPONSE_PACKET, packet, size);
+
+    free_req_resp_packet(packet);
+
+    return true;
+}
+
+bool send_error_response_to_host(int mid, int status, const char *msg)
+{
+    int payload_len = 0;
+    attr_container_t *payload = NULL;
+    response_t response[1] = { 0 };
+
+    if (msg) {
+        payload = attr_container_create("");
+        if (payload) {
+            attr_container_set_string(&payload, "error message", msg);
+            payload_len = attr_container_get_serialize_length(payload);
+        }
+    }
+
+    set_response(response, status,
+    FMT_ATTR_CONTAINER, (const char *)payload, payload_len);
+    response->mid = mid;
+
+    send_response_to_host(response);
+
+    if (payload)
+        attr_container_destroy(payload);
+    return true;
+}
+
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/module_config.h 
b/scriptsrcs/wamr/core/app-mgr/app-manager/module_config.h
new file mode 100755
index 0000000..0899a02
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/module_config.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _MODULE_CONFIG_H_
+#define _MODULE_CONFIG_H_
+
+#define ENABLE_MODULE_JEFF 0
+#define ENABLE_MODULE_WASM_APP 1
+#define ENABLE_MODULE_WASM_LIB 1
+
+#ifdef ENABLE_MODULE_JEFF
+#include "module_jeff.h"
+#endif
+#ifdef ENABLE_MODULE_WASM_APP
+#include "module_wasm_app.h"
+#endif
+#ifdef ENABLE_MODULE_WASM_LIB
+#include "module_wasm_lib.h"
+#endif
+
+#endif /* _MODULE_CONFIG_H_ */
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/module_jeff.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/module_jeff.c
new file mode 100755
index 0000000..91e5770
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/module_jeff.c
@@ -0,0 +1,1744 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef ENABLE_JEFF
+
+#include "module_jeff.h"
+#include "jeff_export.h"
+#include "../vmcore_jeff/jeff-runtime.h"
+#include "../vmcore_jeff/jeff-thread.h"
+#include "../vmcore_jeff/jeff-buffer.h"
+#include "../vmcore_jeff/jeff-tool.h"
+#include "../vmcore_jeff/jeff-tool-priv.h"
+#include "app_manager-host.h"
+#include "bh_queue.h"
+#include "attr-container.h"
+#include "attr-container-util.h"
+#include "bh_thread.h"
+#include "ems_gc.h"
+#include "coap_ext.h"
+#include "libcore.h"
+#include "event.h"
+#include "watchdog.h"
+
+#define DEFAULT_APPLET_TIMEOUT (3 * 60 * 1000)
+#define DEFAULT_APPLET_HEAP_SIZE (48 * 1024)
+#define MIN_APPLET_HEAP_SIZE (2 * 1024)
+#define MAX_APPLET_HEAP_SIZE (1024 * 1024)
+
+typedef struct jeff_applet_data {
+    /* Java Applet Object */
+    JeffObjectRef applet_obj;
+
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+    /* Whether the applet is in debug mode */
+    bool debug_mode;
+    /* Queue of the tool agent */
+    bh_queue *tool_agent_queue;
+#endif
+
+    /* VM instance */
+    JeffInstanceLocalRoot *vm_instance;
+    /* Applet Main file */
+    JeffFileHeaderLinked *main_file;
+    /* Permissions of the Java Applet */
+    char *perms;
+}jeff_applet_data;
+
+/* Jeff class com.intel.aee.AEEApplet */
+static JeffClassHeaderLinked *class_AEEApplet;
+/* Jeff class com.intel.aee.Request */
+static JeffClassHeaderLinked *class_AEERequest;
+/* Jeff class com.intel.aee.Timer */
+static JeffClassHeaderLinked *class_Timer;
+/* Jeff class com.intel.aee.Sensor */
+static JeffClassHeaderLinked *class_Sensor;
+/* Jeff class com.intel.aee.ble.BLEManager */
+static JeffClassHeaderLinked *class_BLEManager;
+/* Jeff class com.intel.aee.ble.BLEDevice */
+static JeffClassHeaderLinked *class_BLEDevice;
+/* Jeff class com.intel.aee.ble.BLEGattService */
+JeffClassHeaderLinked *class_BLEGattService;
+/* Jeff class com.intel.aee.ble.BLEGattCharacteristic */
+JeffClassHeaderLinked *class_BLEGattCharacteristic;
+/* Jeff class com.intel.aee.ble.BLEGattDescriptor */
+JeffClassHeaderLinked *class_BLEGattDescriptor;
+/* Jeff class com.intel.aee.gpio.GPIOChannel */
+static JeffClassHeaderLinked *class_GPIOChannel;
+/* Jeff method void com.intel.aee.AEEApplet.onInit() */
+static JeffMethodLinked *method_AEEApplet_onInit;
+/* Jeff method void com.intel.aee.AEEApplet.onDestroy() */
+static JeffMethodLinked *method_AEEApplet_onDestroy;
+/* Jeff method void com.intel.aee.AEEApplet.callOnRequest(Request request) */
+static JeffMethodLinked *method_AEEApplet_callOnRequest;
+/* Jeff method void com.intel.aee.Timer.callOnTimer() */
+static JeffMethodLinked *method_callOnTimer;
+/* Jeff method void com.intel.aee.Sensor.callOnSensorEvent() */
+static JeffMethodLinked *method_callOnSensorEvent;
+/* Jeff method void com.intel.aee.ble.BLEManager.callOnBLEStartDiscovery() */
+static JeffMethodLinked *method_callOnBLEStartDiscovery;
+/* Jeff method void com.intel.aee.ble.BLEManager.callOnBLEConnected() */
+static JeffMethodLinked *method_callOnBLEConnected;
+/* Jeff method void com.intel.aee.ble.BLEManager.callOnBLEDisonnected() */
+static JeffMethodLinked *method_callOnBLEDisconnected;
+/* Jeff method void com.intel.aee.ble.BLEManager.callOnBLENotification() */
+static JeffMethodLinked *method_callOnBLENotification;
+/* Jeff method void com.intel.aee.ble.BLEManager.callOnBLEIndication() */
+static JeffMethodLinked *method_callOnBLEIndication;
+/* Jeff method void com.intel.aee.ble.BLEManager.callOnBLEPasskeyEntry() */
+static JeffMethodLinked *method_callOnBLEPasskeyEntry;
+/* Jeff method void com.intel.aee.gpio.GPIOChannel.callOnGPIOInterrupt() */
+static JeffMethodLinked *method_callOnGPIOInterrupt;
+/* Jeff method void com.intel.aee.ble.BLEManager.getBLEDevice() */
+static JeffMethodLinked *method_callOnBLEManagerGetBLEDevice;
+
+static jeff_applet_data *
+app_manager_get_jeff_applet_data()
+{
+    module_data *m_data = app_manager_get_module_data(Module_Jeff);
+    return (jeff_applet_data *)m_data->internal_data;
+}
+
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+void *
+app_manager_get_tool_agent_queue()
+{
+    return app_manager_get_jeff_applet_data()->tool_agent_queue;
+}
+#endif
+
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+static bool
+is_tool_agent_running(module_data *m_data)
+{
+    jeff_applet_data *applet_data = (jeff_applet_data*)m_data->internal_data;
+    return (applet_data->debug_mode
+            && applet_data->tool_agent_queue
+            && applet_data->vm_instance->tool_agent);
+}
+#endif
+
+static char *
+get_class_qname(const JeffString *pname, const JeffString *cname)
+{
+    unsigned int length = pname->length ? pname->length + 2 + cname->length
+    : cname->length + 1;
+    char *buf = bh_malloc(length), *p;
+
+    if (!buf)
+    return NULL;
+
+    p = buf;
+    if (pname->length) {
+        bh_memcpy_s(p, pname->length, pname->value, pname->length);
+        p += pname->length;
+        *p++ = '.';
+    }
+
+    bh_memcpy_s(p, cname->length, cname->value, cname->length);
+    p += cname->length;
+    *p = '\0';
+
+    return buf;
+}
+
+static void
+send_exception_event_to_host(const char *applet_name, const char *exc_name)
+{
+    attr_container_t *payload;
+    bh_request_msg_t msg;
+    char *url;
+    int url_len;
+
+    payload = attr_container_create("exception detail");
+    if (!payload) {
+        app_manager_printf("Send exception to host fail: allocate memory");
+        return;
+    }
+
+    if (!attr_container_set_string(&payload, "exception name", exc_name)
+            || !attr_container_set_string(&payload, "stack trace", "TODO")
+            || !attr_container_set_string(&payload, "applet name", 
applet_name)) {
+        app_manager_printf("Send exception to host fail: set attr");
+        goto fail;
+    }
+
+    url_len = strlen("/exception/") + strlen(applet_name);
+    url = bh_malloc(url_len + 1);
+    if (!url) {
+        app_manager_printf("Send exception to host fail: allocate memory");
+        goto fail;
+    }
+    memset(url, 0, url_len + 1);
+    bh_strcpy_s(url, url_len + 1, "/exception/");
+    bh_strcat_s(url, url_len + 1, applet_name);
+
+    memset(&msg, 0, sizeof(msg));
+    msg.url = url;
+    msg.action = COAP_PUT;
+    msg.payload = (char *)payload;
+
+    app_send_request_msg_to_host(&msg);
+
+    bh_free(url);
+
+    fail:
+    attr_container_destroy(payload);
+}
+
+static bool
+check_exception()
+{
+    if (jeff_runtime_get_exception()) {
+        jeff_printf("V1.Exception thrown when running applet '%s':\n",
+                app_manager_get_module_name(Module_Jeff));
+        jeff_runtime_print_exception();
+        jeff_printf("\n");
+        jeff_printf(NULL);
+
+        if (!app_manager_is_interrupting_module(Module_Jeff)) {
+            attr_container_t *payload;
+            int payload_len;
+            JeffClassHeaderLinked *exc_class = 
jeff_object_class_pointer(jeff_runtime_get_exception());
+            char *qname_buf = get_class_qname(jeff_get_class_pname(exc_class),
+                    jeff_get_class_cname(exc_class));
+
+            /* Send exception event to host */
+            if (qname_buf) {
+                
send_exception_event_to_host(app_manager_get_module_name(Module_Jeff), 
qname_buf);
+                bh_free(qname_buf);
+            }
+
+            /* Uninstall the applet */
+            if ((payload = attr_container_create("uninstall myself"))) {
+                if (attr_container_set_string(&payload, "name", 
app_manager_get_module_name(Module_Jeff))
+                        /* Set special flag to prevent app manager making 
response since this is an internal message */
+                        && attr_container_set_bool(&payload, "do not reply 
me", true)) {
+                    request_t request = {0};
+                    payload_len = attr_container_get_serialize_length(payload);
+
+                    init_request(request, "/applet", COAP_DELETE, (char 
*)payload, payload_len));
+                    app_mgr_lookup_resource(&request);
+
+                    // TODO: confirm this is right
+                    attr_container_destroy(payload);
+                }
+            }
+
+            jeff_runtime_set_exception(NULL);
+            return true;
+        }
+
+        return false;
+    }
+
+    static bool
+    app_manager_initialize_class(JeffClassHeaderLinked *c)
+    {
+        jeff_runtime_initialize_class(c);
+        return !check_exception();
+    }
+
+    static bool
+    app_manager_initialize_object(JeffObjectRef obj)
+    {
+        jeff_runtime_initialize_object(obj);
+        return !check_exception();
+    }
+
+    static bool
+    app_manager_call_java(JeffMethodLinked *method,
+    unsigned int argc, uint32 argv[], uint8 argt[])
+    {
+        module_data *m_data = app_manager_get_module_data(Module_Jeff);
+        watchdog_timer *wd_timer = &m_data->wd_timer;
+        bool is_wd_started = false;
+
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+        /* Only start watchdog when debugger is not running */
+        if (!is_tool_agent_running(m_data)) {
+#endif
+            watchdog_timer_start(wd_timer);
+            is_wd_started = true;
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+        }
+#endif
+
+        jeff_runtime_call_java(method, argc, argv, argt);
+
+        if (is_wd_started) {
+            vm_mutex_lock(&wd_timer->lock);
+            if (!wd_timer->is_interrupting) {
+                wd_timer->is_stopped = true;
+                watchdog_timer_stop(wd_timer);
+            }
+            vm_mutex_unlock(&wd_timer->lock);
+        }
+
+        return !check_exception();
+    }
+
+    static AEEBLEDevice
+    create_object_BLEDevice(ble_device_info *dev_info)
+    {
+        JeffLocalObjectRef ref;
+        AEEBLEDevice dev_struct;
+
+        jeff_runtime_push_local_object_ref(&ref);
+
+        ref.val = jeff_runtime_new_object(class_BLEDevice);
+
+        if (!ref.val) {
+            jeff_runtime_pop_local_object_ref(1);
+            return NULL;
+        }
+
+        dev_struct = (AEEBLEDevice) (ref.val);
+        dev_struct->rssi = dev_info->rssi;
+        dev_struct->mac = (jbyteArray) jeff_runtime_create_byte_array((int8 
*)dev_info->mac, 6);
+
+        app_manager_printf("adv_data_len:%d,scan_response_len:%d\n", 
dev_info->adv_data_len, dev_info->scan_response_len);
+
+        dev_struct->advData = (jbyteArray) 
jeff_runtime_create_byte_array((int8 *)dev_info->adv_data, 
dev_info->adv_data_len);
+        dev_struct->scanResponse = (jbyteArray) 
jeff_runtime_create_byte_array((int8 *)dev_info->scan_response, 
dev_info->scan_response_len);
+        dev_struct->addressType = dev_info->address_type;
+        jeff_runtime_initialize_object(ref.val);
+        jeff_runtime_pop_local_object_ref(1);
+        if ((dev_struct->mac == NULL) || (dev_struct->advData == NULL) || 
(dev_struct->scanResponse == NULL)) {
+            return NULL;
+        }
+        return (AEEBLEDevice) ref.val;
+    }
+
+    static void
+    app_instance_process_ble_msg(char *msg)
+    {
+        bh_queue_ble_sub_msg_t *ble_msg = (bh_queue_ble_sub_msg_t *)msg;
+        unsigned int argv[5];
+        uint8 argt[5];
+
+        ble_device_info *dev_info;
+
+        dev_info = (ble_device_info *) ble_msg->payload;
+        AEEBLEDevice ble_dev;
+
+        argv[0] = (unsigned int) (jbyteArray) 
jeff_runtime_create_byte_array((int8 *)dev_info->mac, 6);
+        argt[0] = 1;
+        if (!app_manager_call_java(method_callOnBLEManagerGetBLEDevice, 1, 
argv, argt)) {
+            app_manager_printf("app_manager_call_java BLEManagerGetBLEDevice 
fail error\n");
+            goto fail;
+        }
+        ble_dev = (AEEBLEDevice) argv[0];
+        if (ble_dev == NULL) {
+            ble_dev = create_object_BLEDevice(dev_info);
+            if (ble_dev == NULL) {
+                goto fail;
+            }
+        }
+
+        switch (ble_msg->type) {
+            case BLE_SUB_EVENT_DISCOVERY:
+            {
+                argv[0] = (unsigned int) ble_dev;
+                argt[0] = 1;
+                ble_dev->rssi = dev_info->rssi;
+                if (!app_manager_call_java(method_callOnBLEStartDiscovery, 1, 
argv, argt)) {
+                    app_manager_printf("app_manager_call_java 
method_callOnBLEStartDiscovery fail error\n");
+                    goto fail;
+                }
+            }
+            break;
+
+            case BLE_SUB_EVENT_CONNECTED:
+            {
+                if (ble_dev) {
+                    argv[0] = (unsigned int) ble_dev;
+                    argv[1] = 0;
+                    argt[0] = 1;
+                    argt[1] = 1;
+                    if (!app_manager_call_java(method_callOnBLEConnected, 2, 
argv, argt)) {
+                        app_manager_printf("app_manager_call_java 
method_callOnBLEConnected fail error\n");
+                        goto fail;
+                    }
+                }
+            }
+            break;
+
+            case BLE_SUB_EVENT_DISCONNECTED:
+            {
+                app_manager_printf("app instance received disconnected\n");
+
+                if (ble_dev) {
+                    argv[0] = (unsigned int) ble_dev;
+                    argv[1] = 0;
+                    argt[0] = 1;
+                    argt[1] = 1;
+                    ble_dev->rssi = dev_info->rssi;
+                    if (!app_manager_call_java(method_callOnBLEDisconnected, 
2, argv, argt)) {
+                        app_manager_printf("app_manager_call_java 
method_callOnBLEDisconnected fail error\n");
+                        goto fail;
+                    }
+                }
+            }
+            break;
+
+            case BLE_SUB_EVENT_NOTIFICATION:
+            {
+                if (ble_dev) {
+                    argv[0] = (unsigned int) ble_dev;
+                    argv[1] = (unsigned int) (jbyteArray) 
jeff_runtime_create_byte_array(
+                    (int8 *)dev_info->private_data, 
dev_info->private_data_length);
+                    argv[2] = dev_info->value_handle;
+                    argv[3] = dev_info->ccc_handle;
+                    argt[1] = 1;
+                    argt[2] = 0;
+                    argt[3] = 0;
+                    ble_dev->rssi = dev_info->rssi;
+                    if (!app_manager_call_java(method_callOnBLENotification, 
4, argv, argt)) {
+                        app_manager_printf("app_manager_call_java 
method_callOnBLENotification fail error\n");
+                        goto fail;
+                    }
+                }
+            }
+            break;
+
+            case BLE_SUB_EVENT_INDICATION:
+            {
+                if (ble_dev) {
+                    argv[0] = (unsigned int) ble_dev;
+                    argv[1] = (unsigned int) (jbyteArray) 
jeff_runtime_create_byte_array(
+                    (int8 *)dev_info->private_data, 
dev_info->private_data_length);
+                    argv[2] = dev_info->value_handle;
+                    argv[3] = dev_info->ccc_handle;
+                    argt[0] = 1;
+                    argt[1] = 1;
+                    argt[2] = 0;
+                    argt[3] = 0;
+                    ble_dev->rssi = dev_info->rssi;
+                    if (!app_manager_call_java(method_callOnBLEIndication, 4, 
argv, argt)) {
+                        app_manager_printf("app_manager_call_java 
method_callOnBLEIndication fail error\n");
+                        goto fail;
+                    }
+                }
+            }
+            break;
+
+            case BLE_SUB_EVENT_PASSKEYENTRY:
+            {
+
+                if (ble_dev) {
+                    argv[0] = (unsigned int) ble_dev;
+                    argt[0] = 1;
+                    argt[1] = 1;
+                    ble_dev->rssi = dev_info->rssi;
+                    if (!app_manager_call_java(method_callOnBLEPasskeyEntry, 
1, argv, argt)) {
+                        app_manager_printf("app_manager_call_java 
method_callOnBLEPasskeyEntry fail error\n");
+                        goto fail;
+                    }
+                }
+            }
+            break;
+
+            case BLE_SUB_EVENT_SECURITY_LEVEL_CHANGE:
+            {
+                if (ble_dev) {
+                    ble_dev->securityLevel = dev_info->security_level;
+                }
+            }
+            break;
+
+            default:
+            break;
+        }
+
+        fail:
+        if (dev_info->scan_response != NULL) {
+            bh_free(dev_info->scan_response);
+        }
+        if (dev_info->private_data != NULL) {
+            bh_free(dev_info->private_data);
+        }
+
+        if (dev_info->adv_data != NULL) {
+            bh_free(dev_info->adv_data);
+        }
+        if (dev_info != NULL) {
+            bh_free(dev_info);
+        }
+
+    }
+
+    static void
+    app_instance_free_ble_msg(char *msg)
+    {
+        bh_queue_ble_sub_msg_t *ble_msg = (bh_queue_ble_sub_msg_t *)msg;
+        ble_device_info *dev_info;
+
+        dev_info = (ble_device_info *) ble_msg->payload;
+
+        if (dev_info->scan_response != NULL)
+        bh_free(dev_info->scan_response);
+
+        if (dev_info->private_data != NULL)
+        bh_free(dev_info->private_data);
+
+        if (dev_info->adv_data != NULL)
+        bh_free(dev_info->adv_data);
+
+        if (dev_info != NULL)
+        bh_free(dev_info);
+    }
+
+    static void
+    app_instance_queue_free_callback(void *queue_msg)
+    {
+        bh_queue_msg_t *msg = (bh_queue_msg_t *)queue_msg;
+
+        switch (msg->message_type) {
+            case APPLET_REQUEST:
+            {
+                bh_request_msg_t *req_msg = (bh_request_msg_t *)msg->payload;
+                bh_free(req_msg);
+                break;
+            }
+
+            case TIMER_EVENT:
+            {
+                break;
+            }
+
+            case SENSOR_EVENT:
+            {
+                if (msg->payload) {
+                    bh_sensor_event_t *sensor_event = (bh_sensor_event_t 
*)msg->payload;
+                    attr_container_t *event = sensor_event->event;
+
+                    attr_container_destroy(event);
+                    bh_free(sensor_event);
+                }
+                break;
+            }
+
+            case BLE_EVENT:
+            {
+                if (msg->payload) {
+                    app_instance_free_ble_msg(msg->payload);
+                    bh_free(msg->payload);
+                }
+                break;
+            }
+
+            case GPIO_INTERRUPT_EVENT:
+            {
+                break;
+            }
+
+            default:
+            {
+                break;
+            }
+        }
+
+        bh_free(msg);
+    }
+
+    static void
+    app_instance_queue_callback(void *queue_msg)
+    {
+        bh_queue_msg_t *msg = (bh_queue_msg_t *)queue_msg;
+        unsigned int argv[5];
+        uint8 argt[5];
+
+        if (app_manager_is_interrupting_module(Module_Jeff)) {
+            app_instance_queue_free_callback(queue_msg);
+            return;
+        }
+
+        switch (msg->message_type) {
+            case APPLET_REQUEST:
+            {
+                JeffLocalObjectRef ref;
+                AEERequest req_obj;
+                bh_request_msg_t *req_msg = (bh_request_msg_t *)msg->payload;
+                attr_container_t *attr_cont = (attr_container_t 
*)req_msg->payload;
+                module_data *m_data = app_manager_get_module_data(Module_Jeff);
+                jeff_applet_data *applet_data = 
(jeff_applet_data*)m_data->internal_data;
+
+                app_manager_printf("Applet %s got request, url %s, action 
%d\n",
+                m_data->module_name, req_msg->url, req_msg->action);
+
+                /* Create Request object */
+                req_obj = (AEERequest)jeff_object_new(m_data->heap, 
class_AEERequest);
+                if (!req_obj) {
+                    app_manager_printf("Applet process request failed: create 
request obj failed.\n");
+                    goto fail1;
+                }
+
+                jeff_runtime_push_local_object_ref(&ref);
+                ref.val = (JeffObjectRef)req_obj;
+
+                req_obj->mid = req_msg->mid;
+                req_obj->action = req_msg->action;
+                req_obj->fmt = req_msg->fmt;
+
+                /* Create Java url string */
+                if (req_msg->url) {
+                    req_obj->url = 
(jstring)jeff_runtime_create_java_string(req_msg->url);
+                    if (!req_obj->url) {
+                        app_manager_printf("Applet process request failed: 
create url string failed.\n");
+                        goto fail2;
+                    }
+                }
+
+                /* Create Java AttributeObject payload */
+                if (attr_cont
+                && !attr_container_to_attr_obj(attr_cont, &req_obj->payload)) {
+                    app_manager_printf("Applet process request failed: convert 
payload failed.\n");
+                    goto fail2;
+                }
+
+                /* Call AEEApplet.callOnRequest(Request request) method  */
+                argv[0] = (unsigned int)applet_data->applet_obj;
+                argv[1] = (unsigned int)req_obj;
+                argt[0] = argt[1] = 1;
+                app_manager_call_java(method_AEEApplet_callOnRequest, 2, argv, 
argt);
+                app_manager_printf("Applet process request success.\n");
+
+                fail2:
+                jeff_runtime_pop_local_object_ref(1);
+                fail1:
+                bh_free(req_msg);
+                break;
+            }
+
+            case TIMER_EVENT:
+            {
+                if (msg->payload) {
+                    /* Call Timer.callOnTimer() method */
+                    argv[0] = (unsigned int)msg->payload;
+                    argt[0] = 1;
+                    app_manager_call_java(method_callOnTimer, 1, argv, argt);
+                }
+                break;
+            }
+
+            case SENSOR_EVENT:
+            {
+                if (msg->payload) {
+                    bh_sensor_event_t *sensor_event = (bh_sensor_event_t 
*)msg->payload;
+                    AEESensor sensor = sensor_event->sensor;
+                    attr_container_t *event = sensor_event->event;
+                    bool ret = attr_container_to_attr_obj(event, 
&sensor->event);
+
+                    attr_container_destroy(event);
+                    bh_free(sensor_event);
+
+                    if (ret) {
+                        /* Call Sensor.callOnSensorEvent() method */
+                        argv[0] = (unsigned int)sensor;
+                        argt[0] = 1;
+                        app_manager_call_java(method_callOnSensorEvent, 1, 
argv, argt);
+                    }
+                }
+                break;
+            }
+
+            case BLE_EVENT:
+            {
+                if (msg->payload) {
+                    app_instance_process_ble_msg(msg->payload);
+                    bh_free(msg->payload);
+                }
+                break;
+            }
+
+            case GPIO_INTERRUPT_EVENT:
+            {
+                AEEGPIOChannel gpio_ch = (AEEGPIOChannel)msg->payload;
+
+                if ((gpio_ch == NULL) || (gpio_ch->callback == 0) || 
(gpio_ch->listener == NULL)) {
+                    break;
+                }
+                argv[0] = (unsigned int) gpio_ch;
+                argt[0] = 1;
+                bool ret_value = 
app_manager_call_java(method_callOnGPIOInterrupt, 1, argv, argt);
+
+                if (!ret_value) {
+                    app_manager_printf("app_manager_call_java 
method_method_callOnGPIOInterrupt return false\n");
+                }
+                break;
+            }
+
+            default:
+            {
+                app_manager_printf("Invalid message type of applet queue 
message.\n");
+                break;
+            }
+        }
+
+        bh_free(msg);
+    }
+
+    static JeffClassHeaderLinked*
+    find_main_class(JeffFileHeaderLinked *main_file)
+    {
+        JeffClassHeaderLinked *c = NULL, *ci;
+        unsigned int i;
+
+        for (i = 0; i < main_file->internal_class_count; i++) {
+            ci = main_file->class_header[i];
+
+            if (jeff_is_super_class(class_AEEApplet, ci)
+            && (ci->access_flag & JEFF_ACC_PUBLIC)) {
+                if (c) {
+                    jeff_printe_more_than_one_main_class();
+                    return NULL;
+                }
+
+                c = ci;
+            }
+        }
+
+        if (!c)
+        jeff_printe_no_main_class();
+
+        return c;
+    }
+
+    /* Java applet thread main routine */
+    static void*
+    app_instance_main(void *arg)
+    {
+        module_data *m_data = (module_data *)arg;
+        jeff_applet_data *applet_data = 
(jeff_applet_data*)m_data->internal_data;
+        JeffClassHeaderLinked *object_class;
+        JeffMethodLinked *m;
+        unsigned int argv[1];
+        uint8 argt[1];
+
+        app_manager_printf("Java Applet '%s' started\n", m_data->module_name);
+
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+        if (applet_data->debug_mode)
+        jeff_tool_suspend_self();
+#endif
+
+        applet_data->vm_instance->applet_object = applet_data->applet_obj;
+        object_class = jeff_object_class_pointer(applet_data->applet_obj);
+        m = jeff_select_method_virtual(object_class, method_AEEApplet_onInit);
+        bh_assert(m != NULL);
+        /* Initialize applet class which call <clinit> */
+        if (!app_manager_initialize_class(object_class)) {
+            app_manager_printf("Call <clinit> fail\n");
+            goto fail;
+        }
+
+        /* Initialize applet object which call <init> */
+        if (!app_manager_initialize_object(applet_data->applet_obj)) {
+            app_manager_printf("Call <init> fail\n");
+            goto fail;
+        }
+
+        /* Call applet's onInit() method */
+        argv[0] = (unsigned int)applet_data->applet_obj;
+        argt[0] = 1;
+        if (app_manager_call_java(m, 1, argv, argt))
+        /* Enter queue loop run to receive and process applet queue message */
+        bh_queue_enter_loop_run(m_data->queue, app_instance_queue_callback);
+
+        fail:
+        applet_data->vm_instance->applet_object = applet_data->applet_obj;
+        object_class = jeff_object_class_pointer(applet_data->applet_obj);
+        m = jeff_select_method_virtual(object_class, 
method_AEEApplet_onDestroy);
+        bh_assert(m != NULL);
+        /* Call User Applet or AEEApplet onDestroy() method */
+        app_manager_call_java(m, 1, argv, argt);
+        if (m != method_AEEApplet_onDestroy) {
+            /*If 'm' is user onDestroy, then Call AEEApplet.onDestroy() 
method*/
+            app_manager_call_java(method_AEEApplet_onDestroy, 1, argv, argt);
+        }
+        app_manager_printf("Applet instance main thread exit.\n");
+        return NULL;
+    }
+
+    static bool
+    verify_signature(JeffFileHeader *file, unsigned size)
+    {
+        uint8 *sig;
+        unsigned sig_size;
+
+#if BEIHAI_ENABLE_NO_SIGNATURE != 0
+        /* no signature */
+        if (file->file_signature == 0)
+        return true;
+#endif
+
+        if (file->file_length != size
+#if BEIHAI_ENABLE_NO_SIGNATURE == 0
+        || file->file_signature == 0
+#endif
+        || file->file_signature >= file->file_length)
+        return false;
+
+        sig = (uint8 *)file + file->file_signature;
+        sig_size = file->file_length - file->file_signature;
+
+        if (0 == app_manager_signature_verify((uint8_t *)file, 
file->file_signature,
+                sig, sig_size))
+        return false;
+
+        return true;
+    }
+
+    /* Install Java Applet */
+    static bool
+    jeff_module_install(bh_request_msg_t *msg)
+    {
+        unsigned int size, bpk_file_len, main_file_len, heap_size, timeout;
+        uint8 *bpk_file;
+        JeffFileHeaderLinked *main_file;
+        JeffClassHeaderLinked *main_class;
+        module_data *m_data;
+        jeff_applet_data *applet_data;
+        char *applet_name, *applet_perm;
+        attr_container_t *attr_cont;
+        bool debug = false;
+
+        /* Check url */
+        if (!msg->url
+        || strcmp(msg->url, "/applet") != 0) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: invalid url.");
+            return false;
+        }
+
+        /* Check payload */
+        attr_cont = (attr_container_t *)msg->payload;
+        if (!attr_cont
+        || !(bpk_file = (uint8 *)
+                attr_container_get_as_bytearray(attr_cont, "bpk", 
&bpk_file_len))) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: invalid bpk 
file.");
+            return false;
+        }
+
+        /* Check applet name */
+        applet_name = attr_container_get_as_string(attr_cont, "name");
+
+        if (!applet_name || strlen(applet_name) == 0) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: invalid applet 
name.");
+            return false;
+        }
+
+        if (app_manager_lookup_module_data(applet_name)) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: applet already 
installed.");
+            return false;
+        }
+
+        /* TODO: convert bpk file to Jeff file */
+        main_file_len = bpk_file_len;
+        main_file = bh_malloc(main_file_len);
+        if (!main_file) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: allocate 
memory failed.");
+            return false;
+        }
+        bh_memcpy_s(main_file, main_file_len, bpk_file, main_file_len);
+
+        /* Verify signature */
+        if (!verify_signature((JeffFileHeader *)main_file, main_file_len)) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: verify Jeff 
file signature failed.");
+            goto fail1;
+        }
+
+        /* Load Jeff main file */
+        if (!jeff_runtime_load(main_file, main_file_len, false, NULL, NULL)) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: load Jeff file 
failed.");
+            goto fail1;
+        }
+
+        /* Find main class */
+        main_class = find_main_class(main_file);
+        if (!main_class) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: find applet 
class failed.");
+            goto fail2;
+        }
+
+        /* Create module data */
+        size = offsetof(module_data, module_name) + strlen(applet_name) + 1;
+        size = align_uint(size, 4);
+        m_data = bh_malloc(size + sizeof(jeff_applet_data));
+        if (!m_data) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: allocate 
memory failed.");
+            goto fail2;
+        }
+
+        memset(m_data, 0, size + sizeof(jeff_applet_data));
+        m_data->module_type = Module_Jeff;
+        m_data->internal_data = (uint8*)m_data + size;
+        applet_data = (jeff_applet_data*)m_data->internal_data;
+        bh_strcpy_s(m_data->module_name, strlen(applet_name) + 1, applet_name);
+        applet_data->main_file = main_file;
+
+        /* Set applet execution timeout */
+        timeout = DEFAULT_APPLET_TIMEOUT;
+        if (attr_container_contain_key(attr_cont, "execution timeout"))
+        timeout = attr_container_get_as_int(attr_cont, "execution timeout");
+        m_data->timeout = timeout;
+
+        /* Create applet permissions */
+        applet_perm = attr_container_get_as_string(attr_cont, "perm");
+        if (applet_perm != NULL) {
+            applet_data->perms = bh_malloc(strlen(applet_perm) + 1);
+            if (!applet_data->perms) {
+                SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: allocate 
memory for applet permissions failed.");
+                goto fail3;
+            }
+
+            bh_strcpy_s(applet_data->perms, strlen(applet_perm) + 1, 
applet_perm);
+        }
+
+        /* Create applet queue */
+        m_data->queue = bh_queue_create();
+        if (!m_data->queue) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: create applet 
queue failed.");
+            goto fail3_1;
+        }
+
+        /* Set heap size */
+        heap_size = DEFAULT_APPLET_HEAP_SIZE;
+        if (attr_container_contain_key(attr_cont, "heap size")) {
+            heap_size = attr_container_get_as_int(attr_cont, "heap size");
+            if (heap_size < MIN_APPLET_HEAP_SIZE)
+            heap_size = MIN_APPLET_HEAP_SIZE;
+            else if (heap_size > MAX_APPLET_HEAP_SIZE)
+            heap_size = MAX_APPLET_HEAP_SIZE;
+        }
+
+        m_data->heap_size = heap_size;
+
+        /* Create applet heap */
+        m_data->heap = gc_init_for_instance(heap_size);
+        if (!m_data->heap) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: create heap 
failed.");
+            goto fail4;
+        }
+
+        /* Create applet object */
+        applet_data->applet_obj = jeff_object_new(m_data->heap, main_class);
+        if (!applet_data->applet_obj) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: create applet 
object failed.");
+            goto fail5;
+        }
+
+        /* Initialize watchdog timer */
+        if (!watchdog_timer_init(m_data)) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: create applet 
watchdog timer failed.");
+            goto fail5;
+        }
+
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+        /* Check whether applet is debuggable */
+        if (attr_container_contain_key(attr_cont, "debug"))
+        debug = attr_container_get_as_bool(attr_cont, "debug");
+
+        applet_data->debug_mode = debug;
+
+        /* Create tool agent queue */
+        if (debug && !(applet_data->tool_agent_queue = bh_queue_create())) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: create tool 
agent queue failed.");
+            goto fail5_1;
+        }
+#endif
+
+        /* Create applet instance */
+        applet_data->vm_instance =
+        jeff_runtime_create_instance(main_file, m_data->heap, 16,
+        app_instance_main, m_data,
+        NULL);
+        if (!applet_data->vm_instance) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: create Java VM 
failed");
+            goto fail6;
+        }
+
+        /* Add applet data to applet data list */
+        applet_data->vm_instance->applet_object = applet_data->applet_obj;
+        app_manager_add_module_data(m_data);
+        app_manager_post_applets_update_event();
+
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+        /* Start tool agent thread */
+        if (debug && !jeff_tool_start_agent(applet_data->vm_instance, 
applet_data->tool_agent_queue)) {
+            SEND_ERR_RESPONSE(msg->mid, "Install Applet failed: start tool 
agent failed");
+            goto fail6;
+        }
+#endif
+
+        app_manager_printf("Install Applet success!\n");
+        app_send_response_to_host(msg->mid, CREATED_2_01, NULL); /* CREATED */
+        return true;
+
+        fail6:
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+        if (debug)
+        bh_queue_destroy(applet_data->tool_agent_queue);
+#endif
+
+        fail5_1:
+        watchdog_timer_destroy(&m_data->wd_timer);
+
+        fail5:
+        gc_destroy_for_instance(m_data->heap);
+
+        fail4:
+        bh_queue_destroy(m_data->queue, NULL);
+
+        fail3_1:
+        bh_free(applet_data->perms);
+
+        fail3:
+        bh_free(applet_data);
+
+        fail2:
+        jeff_runtime_unload(main_file);
+
+        fail1:
+        bh_free(main_file);
+
+        return false;
+    }
+
+    static void
+    cleanup_applet_resource(module_data *m_data)
+    {
+        jeff_applet_data *applet_data = 
(jeff_applet_data*)m_data->internal_data;
+
+        /* Unload Jeff main file and free it */
+        jeff_runtime_unload(applet_data->main_file);
+        bh_free(applet_data->main_file);
+
+        /* Destroy queue */
+        bh_queue_destroy(m_data->queue, app_instance_queue_free_callback);
+
+        /* Destroy heap */
+        gc_destroy_for_instance(m_data->heap);
+
+        /* Destroy watchdog timer */
+        watchdog_timer_destroy(&m_data->wd_timer);
+
+        /* Remove module data from module data list and free it */
+        app_manager_del_module_data(m_data);
+        bh_free(applet_data->perms);
+        bh_free(m_data);
+    }
+
+    /* Uninstall Java Applet */
+    static bool
+    jeff_module_uninstall(bh_request_msg_t *msg)
+    {
+        module_data *m_data;
+        jeff_applet_data *applet_data;
+        attr_container_t *attr_cont;
+        char *applet_name;
+        bool do_not_reply = false;
+
+        /* Check payload and applet name*/
+        attr_cont = (attr_container_t *)msg->payload;
+
+        /* Check whether need to reply this request */
+        if (attr_container_contain_key(attr_cont, "do not reply me"))
+        do_not_reply = attr_container_get_as_bool(attr_cont, "do not reply 
me");
+
+        /* Check url */
+        if (!msg->url
+        || strcmp(msg->url, "/applet") != 0) {
+            if (!do_not_reply)
+            SEND_ERR_RESPONSE(msg->mid, "Uninstall Applet failed: invalid 
url.");
+            else
+            app_manager_printf("Uninstall Applet failed: invalid url.");
+            return false;
+        }
+
+        if (!attr_cont
+        || !(applet_name = attr_container_get_as_string(attr_cont, "name"))
+        || strlen(applet_name) == 0) {
+            if (!do_not_reply)
+            SEND_ERR_RESPONSE(msg->mid, "Uninstall Applet failed: invalid 
applet name.");
+            else
+            app_manager_printf("Uninstall Applet failed: invalid applet 
name.");
+            return false;
+        }
+
+        m_data = app_manager_lookup_module_data(applet_name);
+        if (!m_data) {
+            if (!do_not_reply)
+            SEND_ERR_RESPONSE(msg->mid, "Uninstall Applet failed: no applet 
found.");
+            else
+            app_manager_printf("Uninstall Applet failed: no applet found.");
+            return false;
+        }
+
+        if (m_data->module_type != Module_Jeff) {
+            if (!do_not_reply)
+            SEND_ERR_RESPONSE(msg->mid, "Uninstall Applet failed: invlaid 
module type.");
+            else
+            app_manager_printf("Uninstall Applet failed: invalid module 
type.");
+            return false;
+        }
+
+        if (m_data->wd_timer.is_interrupting) {
+            if (!do_not_reply)
+            SEND_ERR_RESPONSE(msg->mid, "Uninstall Applet failed: applet is 
being interrupted by watchdog.");
+            else
+            app_manager_printf("Uninstall Applet failed: applet is being 
interrupted by watchdog.");
+            return false;
+        }
+
+        /* Exit applet queue loop run */
+        bh_queue_exit_loop_run(m_data->queue);
+
+        applet_data = (jeff_applet_data*)m_data->internal_data;
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+        /* Exit tool agent queue loop run */
+        if (is_tool_agent_running(m_data)) {
+            bh_queue_exit_loop_run(applet_data->tool_agent_queue);
+        }
+#endif
+
+        /* Wait the end of the applet instance and then destroy it */
+        if (applet_data->vm_instance->main_file)
+        jeff_runtime_wait_for_instance(applet_data->vm_instance, -1);
+        jeff_runtime_destroy_instance(applet_data->vm_instance);
+
+        cleanup_applet_resource(m_data);
+        app_manager_post_applets_update_event();
+
+        app_manager_printf("Uninstall Applet success!\n");
+
+        if (!do_not_reply)
+        app_send_response_to_host(msg->mid, DELETED_2_02, NULL); /* DELETED */
+        return true;
+    }
+
+#define PERM_PREFIX "AEE.permission."
+
+    static bool
+    check_permission_format(const char *perm)
+    {
+        const char *prefix = PERM_PREFIX;
+        const char *p;
+
+        if (perm == NULL || strncmp(perm, prefix, strlen(prefix)) != 0
+        || *(p = perm + strlen(prefix)) == '\0')
+        return false;
+
+        do {
+            if (!(*p == '.' || ('A' <= *p && *p <= 'Z') || ('a' <= *p && *p <= 
'z')))
+            return false;
+        }while (*++p != '\0');
+
+        return true;
+    }
+
+    static bool
+    match(const char *haystack, const char *needle, char delim)
+    {
+        const char *p = needle;
+
+        if (haystack == NULL || *haystack == '\0'
+        || needle == NULL || *needle == '\0')
+        return false;
+
+        while (true) {
+            while (true) {
+                if ((*haystack == '\0' || *haystack == delim) && *p == '\0') {
+                    return true;
+                } else if (*p == *haystack) {
+                    ++p;
+                    ++haystack;
+                } else {
+                    break;
+                }
+            }
+            while (*haystack != '\0' && *haystack != delim) {
+                ++haystack;
+            }
+            if (*haystack == '\0') {
+                return false;
+            } else {
+                ++haystack;
+                p = needle;
+            }
+        }
+    }
+
+    bool
+    bh_applet_check_permission(const char *perm)
+    {
+        return check_permission_format(perm)
+        && match(app_manager_get_jeff_applet_data()->perms,
+        perm + strlen(PERM_PREFIX), ' ');
+    }
+
+    static bool
+    jeff_module_init()
+    {
+        JeffDescriptorFull d[] = { {JEFF_TYPE_VOID, 0, NULL}};
+        JeffDescriptorFull d1[] = {
+            {   JEFF_TYPE_OBJECT | JEFF_TYPE_REF, 0, NULL},
+            {   JEFF_TYPE_VOID, 0, NULL}
+        };
+
+        /* Resolve class com.intel.aee.AEEApplet */
+        class_AEEApplet = 
jeff_runtime_resolve_class_full_name("com.intel.aee.AEEApplet");
+        if (!class_AEEApplet) {
+            app_manager_printf("App Manager start failed: resolve class 
AEEApplet failed.\n");
+            return false;
+        }
+
+        /* Resolve class com.intel.aee.Request */
+        class_AEERequest = 
jeff_runtime_resolve_class_full_name("com.intel.aee.Request");
+        if (!class_AEERequest) {
+            app_manager_printf("App Manager start failed: resolve class 
Request failed.\n");
+            return false;
+        }
+
+        /* Resolve class com.intel.aee.Timer */
+        class_Timer = 
jeff_runtime_resolve_class_full_name("com.intel.aee.Timer");
+        if (!class_Timer) {
+            app_manager_printf("App Manager start failed: resolve class Timer 
failed.\n");
+            return false;
+        }
+
+        /* Resolve class com.intel.aee.Sensor */
+        class_Sensor = 
jeff_runtime_resolve_class_full_name("com.intel.aee.Sensor");
+        if (!class_Sensor) {
+            app_manager_printf("App Manager start failed: resolve class Sensor 
failed.\n");
+            return false;
+        }
+
+        /* Resolve class com.intel.aee.ble.BLEManager */
+        class_BLEManager = jeff_runtime_resolve_class_full_name(
+        "com.intel.aee.ble.BLEManager");
+        if (!class_BLEManager) {
+            app_manager_printf(
+            "App Manager start failed: resolve class BLEManager failed.\n");
+            return false;
+        }
+
+        /* Resolve class com.intel.aee.ble.BLEDevice */
+        class_BLEDevice = jeff_runtime_resolve_class_full_name(
+        "com.intel.aee.ble.BLEDevice");
+        if (!class_BLEDevice) {
+            app_manager_printf(
+            "App Manager start failed: resolve class BLEDevice failed.\n");
+            return false;
+        }
+        /* Resolve class com.intel.aee.ble.BLEDevice */
+        class_BLEGattService = jeff_runtime_resolve_class_full_name(
+        "com.intel.aee.ble.BLEGattService");
+        if (!class_BLEGattService) {
+            app_manager_printf(
+            "App Manager start failed: resolve class BLEGattService 
failed.\n");
+            return false;
+        }
+
+        /* Resolve class com.intel.aee.ble.BLEDevice */
+        class_BLEGattCharacteristic = jeff_runtime_resolve_class_full_name(
+        "com.intel.aee.ble.BLEGattCharacteristic");
+        if (!class_BLEGattCharacteristic) {
+            app_manager_printf(
+            "App Manager start failed: resolve class BLEGattCharacteristic 
failed.\n");
+            return false;
+        }
+
+        /* Resolve class com.intel.aee.ble.BLEDevice */
+        class_BLEGattDescriptor = jeff_runtime_resolve_class_full_name(
+        "com.intel.aee.ble.BLEGattDescriptor");
+        if (!class_BLEGattDescriptor) {
+            app_manager_printf(
+            "App Manager start failed: resolve class BLEGattDescriptor 
failed.\n");
+            return false;
+        }
+        /* Resolve class com.intel.aee.gpio.GPIOChannel */
+        class_GPIOChannel = jeff_runtime_resolve_class_full_name(
+        "com.intel.aee.gpio.GPIOChannel");
+        if (!class_GPIOChannel) {
+            app_manager_printf(
+            "App Manager start failed: resolve class GPIOChannel failed.\n");
+            return false;
+        }
+
+        /* Resolve method com.intel.aee.AEEApplet.onInit() */
+        method_AEEApplet_onInit = jeff_lookup_method(class_AEEApplet, 
"onInit", 0, d);
+        if (!method_AEEApplet_onInit) {
+            app_manager_printf("App Manager start failed: resolve method 
Applet.onInit() failed.\n");
+            return false;
+        }
+
+        /* Resolve method com.intel.aee.AEEApplet.onDestroy() */
+        method_AEEApplet_onDestroy = jeff_lookup_method(class_AEEApplet, 
"onDestroy", 0, d);
+        if (!method_AEEApplet_onDestroy) {
+            app_manager_printf("App Manager start failed: resolve method 
AEEApplet.onDestroy() failed.\n");
+            return false;
+        }
+
+        /* Resolve method com.intel.aee.AEEApplet.callOnRequest(Request) */
+        d1[0].class_header = class_AEERequest;
+        method_AEEApplet_callOnRequest = jeff_lookup_method(class_AEEApplet, 
"callOnRequest", 1, d1);
+        if (!method_AEEApplet_callOnRequest) {
+            app_manager_printf("App Manager start failed: resolve method 
AEEApplet.callOnRequest() failed.\n");
+            return false;
+        }
+
+        /* Resolve method com.intel.aee.Timer.callOnTimer() */
+        method_callOnTimer = jeff_lookup_method(class_Timer, "callOnTimer", 0, 
d);
+        if (!method_callOnTimer) {
+            app_manager_printf("App Manager start failed: resolve method 
Timer.callOnTimer() failed.\n");
+            return false;
+        }
+
+        /* Resolve method com.intel.aee.Sensor.callOnSensorEvent() */
+        method_callOnSensorEvent = jeff_lookup_method(class_Sensor, 
"callOnSensorEvent", 0, d);
+        if (!method_callOnSensorEvent) {
+            app_manager_printf("App Manager start failed: resolve method 
Sensor.callOnSensorEvent() failed.\n");
+            return false;
+        }
+
+        /* Resovle method 
com.intel.aee.ble.BLEManager.callOnBLEStartDiscovery(BLEDevice) */
+        d1[0].class_header = class_BLEDevice;
+        method_callOnBLEStartDiscovery = jeff_lookup_method(class_BLEManager, 
"callOnBLEStartDiscovery", 1, d1);
+        if (!method_callOnBLEStartDiscovery) {
+            app_manager_printf("App Manager start failed: resolve method 
BLEManager.callOnBLEStartDiscovery() failed.\n");
+            return false;
+        }
+
+        /* Resovle method 
com.intel.aee.ble.BLEManager.callOnBLEConnected(BLEDevice) */
+        JeffDescriptorFull d2_1[] = { {JEFF_TYPE_OBJECT | JEFF_TYPE_REF, 0, 
class_BLEDevice},
+            {   JEFF_TYPE_INT, 0, NULL},
+            {   JEFF_TYPE_VOID, 0, NULL}};
+        method_callOnBLEConnected = jeff_lookup_method(class_BLEManager, 
"callOnBLEConnected", 2, d2_1);
+        if (!method_callOnBLEConnected) {
+            app_manager_printf("App Manager start failed: resolve method 
BLEManager.callOnBLEConnected() failed.\n");
+            return false;
+        }
+
+        /* Resovle method 
com.intel.aee.ble.BLEManager.method_callOnBLENotification(BLEDevice,byte[]) */
+        JeffDescriptorFull d2_2[] = { {JEFF_TYPE_OBJECT | JEFF_TYPE_REF, 0, 
class_BLEDevice},
+            {   JEFF_TYPE_BYTE | JEFF_TYPE_REF | JEFF_TYPE_MONO, 1, NULL},
+            {   JEFF_TYPE_INT, 0, NULL},
+            {   JEFF_TYPE_INT, 0, NULL},
+            {   JEFF_TYPE_VOID, 0, NULL}};
+        method_callOnBLENotification = jeff_lookup_method(class_BLEManager, 
"callOnBLENotification", 4, d2_2);
+        if (!method_callOnBLENotification) {
+            app_manager_printf("App Manager start failed: resolve method 
BLEManager.callOnBLENotification() failed.\n");
+            return false;
+        }
+
+        /* Resovle method 
com.intel.aee.ble.BLEManager.callOnBLEConnected(BLEDevice,byte[]) */
+        method_callOnBLEIndication = jeff_lookup_method(class_BLEManager, 
"callOnBLEIndication", 4, d2_2);
+        if (!method_callOnBLEIndication) {
+            app_manager_printf("App Manager start failed: resolve method 
BLEManager.callOnBLEIndication() failed.\n");
+            return false;
+        }
+
+        /* Resovle method 
com.intel.aee.ble.BLEManager.callOnBLEConnected(BLEDevice) */
+        d1[0].class_header = class_BLEDevice;
+        method_callOnBLEDisconnected = jeff_lookup_method(class_BLEManager, 
"callOnBLEDisconnected", 1, d1);
+        if (!method_callOnBLEDisconnected) {
+            app_manager_printf("App Manager start failed: resolve method 
BLEManager.callOnBLEDisconnected() failed.\n");
+            return false;
+        }
+
+        /* Resovle method 
com.intel.aee.ble.BLEManager.callOnBLEConnected(BLEDevice) */
+        method_callOnBLEPasskeyEntry = jeff_lookup_method(class_BLEManager, 
"callOnBLEPasskeyEntry", 1, d1);
+        if (!method_callOnBLEPasskeyEntry) {
+            app_manager_printf("App Manager start failed: resolve method 
BLEManager.callOnBLEPasskeyEntry() failed.\n");
+            return false;
+        }
+        /* Resovle  method void 
com.intel.aee.gpio.GPIOChannel.callOnGPIOInterrupt()  */
+        method_callOnGPIOInterrupt = jeff_lookup_method(class_GPIOChannel, 
"callOnGPIOInterrupt", 0, d);
+        if (!method_callOnGPIOInterrupt) {
+            app_manager_printf("App Manager start failed: resolve method 
GPIOChannel.callOnGPIOInterrupt() failed.\n");
+            return false;
+        }
+
+        JeffDescriptorFull d2[] = { {JEFF_TYPE_BYTE | JEFF_TYPE_REF | 
JEFF_TYPE_MONO, 1, NULL},
+            {   JEFF_TYPE_OBJECT | JEFF_TYPE_REF, 0, class_BLEDevice}};
+        /* Resovle method com.intel.aee.ble.BLEManager.getBLEDevice(byte []) */
+        method_callOnBLEManagerGetBLEDevice = 
jeff_lookup_method(class_BLEManager,
+        "getBLEDevice", 1, d2);
+        if (!method_callOnBLEManagerGetBLEDevice) {
+            app_manager_printf(
+            "App Manager start failed: resolve method 
BLEManager.getBLEDevice() failed.\n");
+            return false;
+        }
+
+        return true;
+    }
+
+    static void
+    jeff_module_watchdog_kill(module_data *m_data)
+    {
+        jeff_applet_data *applet_data = 
(jeff_applet_data*)m_data->internal_data;
+
+        app_manager_printf("Watchdog interrupt the applet %s\n", 
m_data->module_name);
+
+        jeff_runtime_interrupt_instance(applet_data->vm_instance, true);
+
+        /* Exit applet queue loop run */
+        bh_queue_exit_loop_run(m_data->queue);
+
+        /* Wait the end of the applet instance. If timeout, it means applet
+         * is busy executing native code, then try to cancle the main thread. 
*/
+        if (applet_data->vm_instance->main_file)
+        jeff_runtime_wait_for_instance(applet_data->vm_instance, 3000);
+
+        if (applet_data->vm_instance->main_file) {
+            app_manager_printf("Watchdog cancel applet main thread.\n");
+            vm_thread_cancel(applet_data->vm_instance->main_tlr.handle);
+            /* k_thread_abort(applet_data->vm_instance->main_tlr.handle); */
+        }
+
+        send_exception_event_to_host(m_data->module_name, 
"java.lang.InterruptedException");
+        cleanup_applet_resource(m_data);
+        app_manager_printf("Watchdog interrupt Jeff applet done.\n");
+    }
+
+    static bool
+    jeff_module_handle_host_url(void *queue_msg)
+    {
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+        bh_queue_msg_t *msg = (bh_queue_msg_t *)queue_msg;
+
+        if (msg->message_type == COAP_PARSED) {
+            coap_packet_t *packet = (coap_packet_t *)msg->payload;
+            attr_container_t *attr_cont = (attr_container_t *)packet->payload;
+            const char *url = NULL;
+            int url_len = 0, mid;
+
+            bh_memcpy_s(&mid, sizeof(uint32), packet->token, sizeof(uint32));
+            url_len = coap_get_header_uri_path(packet, &url);
+
+            /* Send request to tool agent */
+            if (url_len >= 12 && memcmp(url, "/tool_agent/", 12) == 0) {
+                module_data *m_data;
+                jeff_applet_data *applet_data;
+                unsigned attr_cont_len = 0, req_msg_len;
+                bh_queue_msg_t *tool_agent_msg;
+                bh_request_msg_t *req_msg;
+                char url_buf[256] = {0}, *p = url_buf;
+                char applet_name[128] = {0};
+
+                /* Resolve applet name */
+                bh_memcpy_s(url_buf, sizeof(url_buf), url + 12, url_len - 12);
+                while (*p != '/' && *p != '\0')
+                p++;
+
+                bh_memcpy_s(applet_name, sizeof(applet_name), url_buf, p - 
url_buf);
+                app_manager_printf("Send request to tool agent of applet: 
%s\n", applet_name);
+
+                /* Check applet name */
+                if (!(m_data = app_manager_lookup_module_data(applet_name))) {
+                    SEND_ERR_RESPONSE(mid, "Send request to tool agent failed: 
invalid applet name");
+                    return false;
+                }
+
+                applet_data = (jeff_applet_data*)m_data->internal_data;
+                /* Attach debug: start the tool agent firstly */
+                if (packet->code == COAP_PUT) {
+                    if (is_tool_agent_running(m_data)) {
+                        SEND_ERR_RESPONSE(mid, "Attach debug failed: tool 
agent is already exist.");
+                        return false;
+                    }
+
+                    applet_data->debug_mode = true;
+
+                    /* Create tool agent queue */
+                    if (!(applet_data->tool_agent_queue = bh_queue_create())) {
+                        SEND_ERR_RESPONSE(mid, "Attach debug failed: create 
tool agent queue failed.");
+                        return false;
+                    }
+
+                    /* Start tool agent thread */
+                    if (!jeff_tool_start_agent(applet_data->vm_instance, 
applet_data->tool_agent_queue)) {
+                        bh_queue_destroy(applet_data->tool_agent_queue, NULL);
+                        SEND_ERR_RESPONSE(mid, "Attach debug failed: start 
tool agent failed");
+                        return false;
+                    }
+
+                    app_manager_printf("Attach debug: start tool agent of 
applet %s success.\n", applet_name);
+                    app_send_response_to_host(mid, CREATED_2_01, NULL); /* OK 
*/
+                } else {
+                    /* Check tool agent running */
+                    if (!is_tool_agent_running(m_data)) {
+                        SEND_ERR_RESPONSE(mid, "Send request to tool agent 
failed: tool agent is not running");
+                        return false;
+                    }
+
+                    /* Create queue message for tool agent */
+                    if (!(tool_agent_msg = bh_malloc(sizeof(bh_queue_msg_t)))) 
{
+                        SEND_ERR_RESPONSE(mid, "Send request to tool agent 
failed: allocate memory failed");
+                        return false;
+                    }
+
+                    if (attr_cont)
+                    attr_cont_len = 
attr_container_get_serialize_length(attr_cont);
+
+                    req_msg_len = sizeof(bh_request_msg_t) + strlen(p) + 1 + 
attr_cont_len;
+
+                    /* Create request message */
+                    if (!(req_msg = bh_malloc(req_msg_len))) {
+                        SEND_ERR_RESPONSE(mid, "Send request to applet failed: 
allocate memory failed");
+                        bh_free(tool_agent_msg);
+                        return false;
+                    }
+
+                    /* Set request message */
+                    memset(req_msg, 0, req_msg_len);
+                    req_msg->mid = mid;
+                    req_msg->url = (char*)req_msg + sizeof(bh_request_msg_t);
+                    bh_strcpy_s(req_msg->url, strlen(p)+1, p); /* Actual url 
sent to tool agent */
+                    req_msg->action = packet->code;
+                    req_msg->fmt = 0;
+                    if (attr_cont) {
+                        req_msg->payload = (char*)req_msg + 
sizeof(bh_request_msg_t) +
+                        strlen(p) + 1;
+                        attr_container_serialize(req_msg->payload, attr_cont);
+                    }
+
+                    /* Set queue message and send to tool agent's queue */
+                    tool_agent_msg->message_type = JDWP_REQUEST;
+                    tool_agent_msg->payload_size = req_msg_len;
+                    tool_agent_msg->payload = (char*)req_msg;
+                    if (!bh_queue_send_message(applet_data->tool_agent_queue, 
tool_agent_msg)) {
+                        bh_free(req_msg);
+                        bh_free(tool_agent_msg);
+                        SEND_ERR_RESPONSE
+                        (mid, "Send request to tool agent failed: send queue 
msg failed.");
+                        return false;
+                    }
+
+                    /* app_manager_printf("Send request to tool agent of 
applet %s success.\n", applet_name); */
+                }
+
+                return true;
+            }
+        }
+#endif /* BEIHAI_ENABLE_TOOL_AGENT != 0 */
+        return false;
+    }
+
+    static module_data*
+    jeff_module_get_module_data(void)
+    {
+        JeffThreadLocalRoot *self = jeff_runtime_get_tlr();
+        return (module_data *)self->il_root->start_routine_arg;
+    }
+
+#if BEIHAI_ENABLE_TOOL_AGENT != 0
+
+#define JDWP_HANDSHAKE_MAGIC    "JDWP-Handshake"
+#define JDWP_HANDSHAKE_LEN      (sizeof (JDWP_HANDSHAKE_MAGIC) - 1)
+
+#define JDWP_PAYLOAD_KEY        "jdwp"
+
+    static bool debug = true;
+
+    static bool
+    send_msg_to_host (int mid, const char *url, int code, const uint8 *msg, 
unsigned size)
+    {
+        bool ret;
+        int payload_len = 0;
+        attr_container_t *payload = NULL;
+
+        if (msg) {
+            if ((payload = attr_container_create(""))) {
+                attr_container_set_bytearray(&payload, JDWP_PAYLOAD_KEY, 
(const int8_t *)msg, size);
+                payload_len = attr_container_get_serialize_length(payload);
+            }
+        }
+        ret = app_send_msg_to_host(mid, url, code, (char*)payload, 
payload_len);
+
+        if (payload)
+        attr_container_destroy(payload);
+
+        return ret;
+    }
+
+    static bool
+    send_response(int mid, int code, const uint8 *msg, unsigned size)
+    {
+        return send_msg_to_host(mid, NULL, code, msg, size);
+    }
+
+    static bool
+    send_packet_response(int mid, int code, JeffBuffer *packet)
+    {
+        int size;
+
+        if ((size = jeff_buffer_size(packet)) == 0)
+        /* No data need to be written, succeed.  */
+        return true;
+
+        return send_msg_to_host(mid, NULL, code, jeff_buffer_at(packet, 0), 
size);
+    }
+
+    void
+    jeff_tool_event_publish(uint8 *evtbuf, unsigned size)
+    {
+        char *prefix = "/jdwp/", *url = NULL;
+        int url_len;
+
+        url_len = strlen(prefix) + 
strlen(app_manager_get_module_name(Module_Jeff));
+        if (NULL == (url = jeff_runtime_malloc(url_len + 1)))
+        return;
+
+        bh_strcpy_s(url,url_len + 1, prefix);
+        bh_strcat_s(url,url_len + 1, app_manager_get_module_name(Module_Jeff));
+
+        /* Event is sent as request so we set code as COAP_PUT */
+        if (event_is_registered(url))
+        send_msg_to_host(0, url, COAP_PUT, evtbuf, size);
+
+        jeff_runtime_free(url);
+    }
+
+#define SEND_ERROR_RESPONSE(err_msg) do {                  \
+    app_manager_printf("%s\n", err_msg);                   \
+    send_response(req_msg->mid, INTERNAL_SERVER_ERROR_5_00,\
+                  (uint8 *)err_msg, strlen(err_msg) + 1);  \
+  } while (0)
+
+    /* Queue callback of tool agent */
+    void
+    tool_agent_queue_callback(void *arg)
+    {
+        bh_queue_msg_t *msg = (bh_queue_msg_t*)arg;
+
+        if (msg->message_type == JDWP_REQUEST) {
+            bh_request_msg_t *req_msg = (bh_request_msg_t*)msg->payload;
+            attr_container_t *attr_cont = (attr_container_t*)req_msg->payload;
+            JeffThreadLocalRoot *self = jeff_runtime_get_tlr();
+            JeffInstanceLocalRoot *cur_instance = self->il_root;
+            JeffToolAgent *agent = cur_instance->tool_agent;
+            bh_queue *queue = (bh_queue *)self->start_routine_arg;
+
+            if (debug)
+            app_manager_printf("Tool Agent of applet %s got request, url %s, 
action %d\n",
+            app_manager_get_module_name(Module_Jeff), req_msg->url, 
req_msg->action);
+
+            /* Handshake or Process Request */
+            if (req_msg->action == COAP_GET) {
+                uint8 *buf;
+                unsigned buf_len;
+
+                if (!attr_cont
+                || !(buf = (uint8*)
+                        attr_container_get_as_bytearray(attr_cont, 
JDWP_PAYLOAD_KEY, &buf_len))) {
+                    SEND_ERROR_RESPONSE("Tool Agent fail: invalid JDWP 
payload.");
+                    goto fail;
+                }
+
+                if (!agent->connected) {
+                    if (buf_len != JDWP_HANDSHAKE_LEN
+                    || memcmp (buf, JDWP_HANDSHAKE_MAGIC, JDWP_HANDSHAKE_LEN)) 
{
+                        SEND_ERROR_RESPONSE("Tool Agent fail: handshake 
fail.");
+                        goto fail;
+                    }
+
+                    /* Handshake success and response */
+                    agent->connected = true;
+                    send_response(req_msg->mid, CONTENT_2_05, buf, buf_len);
+                } else {
+                    /* TODO: tool-agent thread should reuse the request/reply 
buffer to avoid allocating memory repeatedly */
+                    JeffBuffer request, reply;
+
+                    /* Initialize the package buffers. */
+                    jeff_buffer_init(&request);
+                    jeff_buffer_init(&reply);
+
+                    if (!jeff_buffer_resize(&request, buf_len)) {
+                        SEND_ERROR_RESPONSE("Tool Agent fail: resize buffer 
fail.");
+                        jeff_buffer_destroy(&request);
+                        jeff_buffer_destroy(&reply);
+                        goto fail;
+                    }
+
+                    /* Copy data from request to jeff buffer */
+                    bh_memcpy_s(jeff_buffer_at(&request, 0), 
jeff_buffer_size(&request), buf, buf_len);
+
+                    /* Handle JDWP request */
+                    if (!jeff_tool_handle_packet(agent, &request, &reply)) {
+                        SEND_ERROR_RESPONSE("Tool agent fail: handle request 
fail.");
+                        jeff_buffer_destroy(&request);
+                        jeff_buffer_destroy(&reply);
+                        goto fail;
+                    }
+
+                    /* Response JDWP reply */
+                    send_packet_response(req_msg->mid, CONTENT_2_05, &reply);
+
+                    /* Destroy the package buffers. */
+                    jeff_buffer_destroy(&request);
+                    jeff_buffer_destroy(&reply);
+                }
+            }
+            /* Debugger disconnect */
+            else if (req_msg->action == COAP_DELETE) {
+                send_response(req_msg->mid, DELETED_2_02, NULL, 0);
+                bh_queue_exit_loop_run(queue);
+            }
+            else {
+                SEND_ERROR_RESPONSE("Tool agent fail: invalid request.");
+                goto fail;
+            }
+
+            bh_free(req_msg);
+            bh_free(msg);
+            return;
+
+            fail:
+            bh_queue_exit_loop_run(queue);
+            bh_free(req_msg);
+        }
+
+        bh_free(msg);
+    }
+
+    void
+    tool_agent_queue_free_callback(void *message)
+    {
+        bh_queue_msg_t *msg = (bh_queue_msg_t*)message;
+
+        if (msg->message_type == JDWP_REQUEST) {
+            bh_request_msg_t *req_msg = (bh_request_msg_t*)msg->payload;
+            bh_free(req_msg);
+        }
+
+        bh_free(msg);
+    }
+
+#endif  /* BEIHAI_ENABLE_TOOL_AGENT != 0 */
+
+    module_interface jeff_module_interface = {
+        jeff_module_init,
+        jeff_module_install,
+        jeff_module_uninstall,
+        jeff_module_watchdog_kill,
+        jeff_module_handle_host_url,
+        jeff_module_get_module_data,
+        NULL
+    };
+
+#endif
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/module_jeff.h 
b/scriptsrcs/wamr/core/app-mgr/app-manager/module_jeff.h
new file mode 100755
index 0000000..db39611
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/module_jeff.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _MODULE_JEFF_H_
+#define _MODULE_JEFF_H_
+
+#include "app_manager.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern module_interface jeff_module_interface;
+
+/* sensor event */
+typedef struct bh_sensor_event_t {
+    /* Java sensor object */
+    void *sensor;
+    /* event of attribute container from context core */
+    void *event;
+} bh_sensor_event_t;
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif /* _MODULE_JEFF_H_ */
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/module_utils.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/module_utils.c
new file mode 100755
index 0000000..95b59f0
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/module_utils.c
@@ -0,0 +1,226 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "app_manager.h"
+#include "app_manager_host.h"
+#include "bh_queue.h"
+#include "bh_memory.h"
+#include "bh_thread.h"
+#include "attr_container.h"
+#include "event.h"
+#include "watchdog.h"
+#include "coap_ext.h"
+
+/* Lock of the module data list */
+korp_mutex module_data_list_lock;
+
+/* Module data list */
+module_data *module_data_list;
+
+bool module_data_list_init()
+{
+    module_data_list = NULL;
+    return !vm_mutex_init(&module_data_list_lock) ? true : false;
+}
+
+void module_data_list_destroy()
+{
+
+    vm_mutex_lock(&module_data_list_lock);
+    if (module_data_list) {
+        while (module_data_list) {
+            module_data *p = module_data_list->next;
+            bh_free(module_data_list);
+            module_data_list = p;
+        }
+    }
+    vm_mutex_unlock(&module_data_list_lock);
+    vm_mutex_destroy(&module_data_list_lock);
+}
+
+static void module_data_list_add(module_data *m_data)
+{
+    static uint32 module_id_max = 1;
+    vm_mutex_lock(&module_data_list_lock);
+    // reserve some special ID
+    // TODO: check the new id is not already occupied!
+    if (module_id_max == 0xFFFFFFF0)
+        module_id_max = 1;
+    m_data->id = module_id_max++;
+    if (!module_data_list) {
+        module_data_list = m_data;
+    } else {
+        /* Set as head */
+        m_data->next = module_data_list;
+        module_data_list = m_data;
+    }
+    vm_mutex_unlock(&module_data_list_lock);
+}
+
+void module_data_list_remove(module_data *m_data)
+{
+    vm_mutex_lock(&module_data_list_lock);
+    if (module_data_list) {
+        if (module_data_list == m_data)
+            module_data_list = module_data_list->next;
+        else {
+            /* Search and remove it */
+            module_data *p = module_data_list;
+
+            while (p && p->next != m_data)
+                p = p->next;
+            if (p && p->next == m_data)
+                p->next = p->next->next;
+        }
+    }
+    vm_mutex_unlock(&module_data_list_lock);
+}
+
+module_data*
+module_data_list_lookup(const char *module_name)
+{
+    vm_mutex_lock(&module_data_list_lock);
+    if (module_data_list) {
+        module_data *p = module_data_list;
+
+        while (p) {
+            /* Search by module name */
+            if (!strcmp(module_name, p->module_name)) {
+                vm_mutex_unlock(&module_data_list_lock);
+                return p;
+            }
+            p = p->next;
+        }
+    }
+    vm_mutex_unlock(&module_data_list_lock);
+    return NULL;
+}
+
+module_data*
+module_data_list_lookup_id(unsigned int module_id)
+{
+    vm_mutex_lock(&module_data_list_lock);
+    if (module_data_list) {
+        module_data *p = module_data_list;
+
+        while (p) {
+            /* Search by module name */
+            if (module_id == p->id) {
+                vm_mutex_unlock(&module_data_list_lock);
+                return p;
+            }
+            p = p->next;
+        }
+    }
+    vm_mutex_unlock(&module_data_list_lock);
+    return NULL;
+}
+
+module_data *
+app_manager_get_module_data(uint32 module_type)
+{
+    if (g_module_interfaces[module_type]
+            && g_module_interfaces[module_type]->module_get_module_data)
+        return g_module_interfaces[module_type]->module_get_module_data();
+    return NULL;
+}
+
+void*
+app_manager_get_module_queue(uint32 module_type)
+{
+    return app_manager_get_module_data(module_type)->queue;
+}
+
+const char*
+app_manager_get_module_name(uint32 module_type)
+{
+    return app_manager_get_module_data(module_type)->module_name;
+}
+
+unsigned int app_manager_get_module_id(uint32 module_type)
+{
+    return app_manager_get_module_data(module_type)->id;
+}
+
+void*
+app_manager_get_module_heap(uint32 module_type)
+{
+    return app_manager_get_module_data(module_type)->heap;
+}
+
+module_data*
+app_manager_lookup_module_data(const char *name)
+{
+    return module_data_list_lookup(name);
+}
+
+void app_manager_add_module_data(module_data *m_data)
+{
+    module_data_list_add(m_data);
+}
+
+void app_manager_del_module_data(module_data *m_data)
+{
+    module_data_list_remove(m_data);
+
+    release_module(m_data);
+}
+
+bool app_manager_is_interrupting_module(uint32 module_type)
+{
+    return app_manager_get_module_data(module_type)->wd_timer.is_interrupting;
+}
+
+extern void destory_module_timer_ctx(unsigned int module_id);
+
+void release_module(module_data *m_data)
+{
+    watchdog_timer_destroy(&m_data->wd_timer);
+
+#ifdef HEAP_ENABLED /* TODO */
+    if(m_data->heap) gc_destroy_for_instance(m_data->heap);
+#endif
+
+    if (m_data->queue)
+        bh_queue_destroy(m_data->queue);
+
+    m_data->timer_ctx = NULL;
+
+    destory_module_timer_ctx(m_data->id);
+
+    bh_free(m_data);
+}
+
+int check_modules_timer_expiry()
+{
+    vm_mutex_lock(&module_data_list_lock);
+    module_data *p = module_data_list;
+    int ms_to_expiry = -1;
+
+    while (p) {
+
+        int next = get_expiry_ms(p->timer_ctx);
+        if (next != -1) {
+            if (ms_to_expiry == -1 || ms_to_expiry > next)
+                ms_to_expiry = next;
+        }
+
+        p = p->next;
+    }
+    vm_mutex_unlock(&module_data_list_lock);
+    return ms_to_expiry;
+}
+
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_app.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_app.c
new file mode 100755
index 0000000..3958520
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_app.c
@@ -0,0 +1,992 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "module_wasm_app.h"
+
+#include "native_interface.h" /* for request_t type */
+#include "app_manager_host.h"
+#include "bh_queue.h"
+#include "attr_container.h"
+#include "bh_thread.h"
+#include "bh_memory.h"
+#include "coap_ext.h"
+#include "event.h"
+#include "watchdog.h"
+#include "runtime_lib.h"
+
+/* Wasm app 4 magic bytes */
+static unsigned char wasm_app_magics[] = { (unsigned char) 0x00,
+        (unsigned char) 0x61, (unsigned char) 0x73, (unsigned char) 0x6d };
+
+/* Wasm app 4 version bytes */
+static unsigned char wasm_app_version[] = { (unsigned char) 0x01,
+        (unsigned char) 0x00, (unsigned char) 0x00, (unsigned char) 0x00 };
+
+/* Wasm App Install Request Receiving Phase */
+typedef enum wasm_app_install_req_recv_phase_t {
+    Phase_Req_Ver,
+    Phase_Req_Action,
+    Phase_Req_Fmt,
+    Phase_Req_Mid,
+    Phase_Req_Sender,
+    Phase_Req_Url_Len,
+    Phase_Req_Payload_Len, /* payload is wasm app binary */
+    Phase_Req_Url,
+    Phase_Wasm_Magic,
+    Phase_Wasm_Version,
+    Phase_Wasm_Section_Type,
+    Phase_Wasm_Section_Size,
+    Phase_Wasm_Section_Content
+} wasm_app_install_req_recv_phase_t;
+
+/* Message for insall wasm app */
+typedef struct install_wasm_app_msg_t {
+    uint8_t request_version;
+    uint8_t request_action;
+    uint16_t request_fmt;
+    uint32_t request_mid;
+    uint32_t request_sender;
+    uint16_t request_url_len;
+    uint32_t wasm_app_size; /* payload size is just wasm app binary size */
+    char *request_url;
+    wasm_app_file_t wasm_app_binary;
+} install_wasm_app_msg_t;
+
+/* Wasm App Install Request Receive Context */
+typedef struct wasm_app_install_req_recv_ctx_t {
+    wasm_app_install_req_recv_phase_t phase;
+    int size_in_phase;
+    install_wasm_app_msg_t message;
+    int total_received_size;
+} wasm_app_install_req_recv_ctx_t;
+
+/* Current wasm bytecode app install request receive context */
+static wasm_app_install_req_recv_ctx_t recv_ctx;
+
+static bool wasm_app_module_init(void);
+static bool wasm_app_module_install(request_t *msg);
+static bool wasm_app_module_uninstall(request_t *msg);
+static void wasm_app_module_watchdog_kill(module_data *module_data);
+static bool wasm_app_module_handle_host_url(void *queue_msg);
+static module_data *wasm_app_module_get_module_data(void);
+static bool
+wasm_app_module_on_install_request_byte_arrive(uint8 ch, int 
request_total_size,
+        int *received_size);
+
+static bool module_wasm_app_handle_install_msg(install_wasm_app_msg_t 
*message);
+static void destroy_wasm_sections_list(wasm_section_t *sections);
+static void destroy_wasm_section_from_list(wasm_section_t **sections, int 
type);
+
+#define Max_Msg_Callback 10
+int g_msg_type[Max_Msg_Callback] = { 0 };
+message_type_handler_t g_msg_callbacks[Max_Msg_Callback] = { 0 };
+
+#define Max_Cleanup_Callback 10
+static resource_cleanup_handler_t g_cleanup_callbacks[Max_Cleanup_Callback] = {
+        0 };
+
+module_interface wasm_app_module_interface = { wasm_app_module_init,
+        wasm_app_module_install, wasm_app_module_uninstall,
+        wasm_app_module_watchdog_kill, wasm_app_module_handle_host_url,
+        wasm_app_module_get_module_data,
+        wasm_app_module_on_install_request_byte_arrive };
+
+static unsigned align_uint(unsigned v, unsigned b)
+{
+    unsigned m = b - 1;
+    return (v + m) & ~m;
+}
+
+static void app_instance_queue_callback(void *queue_msg)
+{
+    uint32 argv[2];
+    wasm_function_inst_t func_onRequest, func_onTimer;
+
+    module_data *m_data = app_manager_get_module_data(Module_WASM_App);
+    wasm_data *wasm_app_data = (wasm_data*) m_data->internal_data;
+    wasm_module_inst_t inst = wasm_app_data->wasm_module_inst;
+    int message_type = bh_message_type(queue_msg);
+
+    switch (message_type) {
+    case RESTFUL_REQUEST: {
+        request_t *request = (request_t *) bh_message_payload(queue_msg);
+        int size;
+        char *buffer;
+        int32 buffer_offset;
+
+        app_manager_printf("App %s got request, url %s, action %d\n",
+                m_data->module_name, request->url, request->action);
+
+        func_onRequest = wasm_runtime_lookup_function(inst, "_on_request",
+                "(i32i32)");
+        if (!func_onRequest) {
+            app_manager_printf("Cannot find function onRequest\n");
+            break;
+        }
+
+        buffer = pack_request(request, &size);
+        if (buffer == NULL)
+            break;
+
+        buffer_offset = wasm_runtime_module_dup_data(inst, buffer, size);
+        if (buffer_offset == 0) {
+            app_manager_printf("Got exception running wasm code: %s\n",
+                    wasm_runtime_get_exception(inst));
+            wasm_runtime_clear_exception(inst);
+            free_req_resp_packet(buffer);
+            break;
+        }
+
+        free_req_resp_packet(buffer);
+
+        argv[0] = (uint32) buffer_offset;
+        argv[1] = (uint32) size;
+
+        if (!wasm_runtime_call_wasm(inst, NULL, func_onRequest, 2, argv)) {
+            app_manager_printf("Got exception running wasm code: %s\n",
+                    wasm_runtime_get_exception(inst));
+            wasm_runtime_clear_exception(inst);
+            wasm_runtime_module_free(inst, buffer_offset);
+            break;
+        }
+
+        wasm_runtime_module_free(inst, buffer_offset);
+        app_manager_printf("Wasm app process request success.\n");
+        break;
+    }
+    case RESTFUL_RESPONSE: {
+        response_t *response = (response_t *) bh_message_payload(queue_msg);
+        int size;
+        char *buffer;
+        int32 buffer_offset;
+
+        app_manager_printf("App %s got response_t,status %d\n",
+                m_data->module_name, response->status);
+
+        wasm_function_inst_t func_onResponse = wasm_runtime_lookup_function(
+                inst, "_on_response", "(i32i32)");
+        if (!func_onResponse) {
+            app_manager_printf("Cannot find function on_response\n");
+            break;
+        }
+
+        buffer = pack_response(response, &size);
+        if (buffer == NULL)
+            break;
+
+        buffer_offset = wasm_runtime_module_dup_data(inst, buffer, size);
+        if (buffer_offset == 0) {
+            app_manager_printf("Got exception running wasm code: %s\n",
+                    wasm_runtime_get_exception(inst));
+            wasm_runtime_clear_exception(inst);
+            free_req_resp_packet(buffer);
+            break;
+        }
+
+        free_req_resp_packet(buffer);
+
+        argv[0] = (uint32) buffer_offset;
+        argv[1] = (uint32) size;
+
+        if (!wasm_runtime_call_wasm(inst, NULL, func_onResponse, 2, argv)) {
+            app_manager_printf("Got exception running wasm code: %s\n",
+                    wasm_runtime_get_exception(inst));
+            wasm_runtime_clear_exception(inst);
+            wasm_runtime_module_free(inst, buffer_offset);
+            break;
+        }
+
+        wasm_runtime_module_free(inst, buffer_offset);
+        app_manager_printf("Wasm app process response success.\n");
+        break;
+    }
+
+    case TIMER_EVENT_WASM: {
+        if (bh_message_payload(queue_msg)) {
+            /* Call Timer.callOnTimer() method */
+            func_onTimer = wasm_runtime_lookup_function(inst,
+                    "_on_timer_callback", "(i32)");
+
+            if (!func_onTimer) {
+                app_manager_printf("Cannot find function 
_on_timer_callback\n");
+                break;
+            }
+            unsigned int timer_id = (unsigned int) bh_message_payload(
+                    queue_msg);
+            argv[0] = timer_id;
+            if (!wasm_runtime_call_wasm(inst, NULL, func_onTimer, 1, argv)) {
+                app_manager_printf("Got exception running wasm code: %s\n",
+                        wasm_runtime_get_exception(inst));
+                wasm_runtime_clear_exception(inst);
+            }
+        }
+
+        break;
+    }
+
+    default: {
+        for (int i = 0; i < Max_Msg_Callback; i++) {
+            if (g_msg_type[i] == message_type) {
+                g_msg_callbacks[i](m_data, queue_msg);
+                return;
+            }
+        }
+        app_manager_printf("Invalid message type of WASM app queue 
message.\n");
+        break;
+    }
+    }
+}
+
+/* WASM app thread main routine */
+static void*
+wasm_app_routine(void *arg)
+{
+    wasm_function_inst_t func_onInit;
+    wasm_function_inst_t func_onDestroy;
+
+    module_data *m_data = (module_data *) arg;
+    wasm_data *wasm_app_data = (wasm_data*) m_data->internal_data;
+    wasm_module_inst_t inst = wasm_app_data->wasm_module_inst;
+    korp_tid thread = wasm_app_data->thread_id;
+
+    /* attach newly created thread to the VM managed instance */
+    if (!wasm_runtime_attach_current_thread(inst, m_data)) {
+        goto fail1;
+    }
+    app_manager_printf("WASM app '%s' started\n", m_data->module_name);
+
+    /* Call app's onInit() method */
+    func_onInit = wasm_runtime_lookup_function(inst, "_on_init", "()");
+    if (!func_onInit) {
+        app_manager_printf("Cannot find function on_init().\n");
+        goto fail2;
+    }
+
+    if (!wasm_runtime_call_wasm(inst, NULL, func_onInit, 0, NULL)) {
+        printf("Got exception running WASM code: %s\n",
+                wasm_runtime_get_exception(inst));
+        wasm_runtime_clear_exception(inst);
+        /* call on_destroy() in case some resources are opened in on_init()
+         * and then exception thrown */
+        goto fail3;
+    }
+
+    /* Enter queue loop run to receive and process applet queue message */
+    bh_queue_enter_loop_run(m_data->queue, app_instance_queue_callback);
+
+    app_manager_printf("App instance main thread exit.\n");
+
+    fail3:
+    /* Call WASM app onDestroy() method if there is */
+    func_onDestroy = wasm_runtime_lookup_function(inst, "_on_destroy", "()");
+    if (func_onDestroy)
+        wasm_runtime_call_wasm(inst, NULL, func_onDestroy, 0, NULL);
+
+    fail2: wasm_runtime_detach_current_thread(inst);
+
+    fail1:
+    vm_thread_detach(thread);
+    vm_thread_exit(NULL);
+
+    return NULL;
+}
+
+static void cleanup_app_resource(module_data *m_data)
+{
+    int i;
+    wasm_data *wasm_app_data = (wasm_data*) m_data->internal_data;
+
+    am_cleanup_registeration(m_data->id);
+
+    am_unregister_event(NULL, m_data->id);
+
+    for (i = 0; i < Max_Cleanup_Callback; i++) {
+        if (g_cleanup_callbacks[i] != NULL)
+            g_cleanup_callbacks[i](m_data->id);
+        else
+            break;
+    }
+
+    wasm_runtime_deinstantiate(wasm_app_data->wasm_module_inst);
+
+    /* Destroy remain sections (i.e. data segment section) from list. */
+    destroy_wasm_sections_list(wasm_app_data->sections);
+
+    if (wasm_app_data->wasm_module)
+        wasm_runtime_unload(wasm_app_data->wasm_module);
+
+    /* Destroy watchdog timer */
+    watchdog_timer_destroy(&m_data->wd_timer);
+
+    /* Remove module data from module data list and free it */
+    app_manager_del_module_data(m_data);
+
+}
+
+/************************************************************/
+/*        Module specific functions implementation          */
+/************************************************************/
+
+static bool wasm_app_module_init(void)
+{
+    /* Initialize WASM VM*/
+    if (!wasm_runtime_init()) {
+        app_manager_printf("WASM runtime environment initialization 
failed.\n");
+        return false;
+    }
+
+    return true;
+}
+
+#define APP_NAME_MAX_LEN 128
+#define MAX_INT_STR_LEN 11
+
+static bool wasm_app_module_install(request_t * msg)
+{
+    unsigned int m_data_size, wasm_app_aot_file_len, heap_size, timeout, 
timers,
+            err_size;
+    char *properties;
+    int properties_offset, i;
+    uint8 *wasm_app_aot_file;
+    wasm_app_file_t *wasm_app_file;
+    wasm_data *wasm_app_data;
+    package_type_t package_type;
+    module_data *m_data;
+    wasm_module_t module = NULL;
+    wasm_module_inst_t inst = NULL;
+    char m_name[APP_NAME_MAX_LEN] = { 0 }, timeout_str[MAX_INT_STR_LEN] = { 0 
},
+            heap_size_str[MAX_INT_STR_LEN] = { 0 },
+            timers_str[MAX_INT_STR_LEN] = { 0 }, err[256];
+    /* Useless sections after load */
+    uint8 sections1[] = { SECTION_TYPE_USER,
+    SECTION_TYPE_TYPE,
+    SECTION_TYPE_IMPORT,
+    SECTION_TYPE_FUNC,
+    SECTION_TYPE_TABLE,
+    SECTION_TYPE_MEMORY,
+    SECTION_TYPE_GLOBAL,
+    SECTION_TYPE_EXPORT,
+    SECTION_TYPE_START,
+    SECTION_TYPE_ELEM,
+    /*SECTION_TYPE_CODE,*/
+    /*SECTION_TYPE_DATA*/};
+    /* Useless sections after instantiate */
+    uint8 sections2[] = { SECTION_TYPE_DATA };
+
+    err_size = sizeof(err);
+
+    /* Check payload */
+    if (!msg->payload || msg->payload_len == 0) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Install WASM app failed: invalid wasm file.");
+        return false;
+    }
+
+    /* Check app name */
+    properties_offset = check_url_start(msg->url, strlen(msg->url), "/applet");
+    bh_assert(properties_offset > 0);
+    if (properties_offset <= 0)
+        return false;
+    properties = msg->url + properties_offset;
+    find_key_value(properties, strlen(properties), "name", m_name,
+            sizeof(m_name) - 1, '&');
+
+    if (strlen(m_name) == 0) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Install WASM app failed: invalid app name.");
+        return false;
+    }
+
+    if (app_manager_lookup_module_data(m_name)) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Install WASM app failed: app already installed.");
+        return false;
+    }
+
+    /* Parse heap size */
+    heap_size = APP_HEAP_SIZE_DEFAULT;
+    find_key_value(properties, strlen(properties), "heap", heap_size_str,
+            sizeof(heap_size_str) - 1, '&');
+    if (strlen(heap_size_str) > 0) {
+        heap_size = atoi(heap_size_str);
+        if (heap_size < APP_HEAP_SIZE_MIN)
+            heap_size = APP_HEAP_SIZE_MIN;
+        else if (heap_size > APP_HEAP_SIZE_MAX)
+            heap_size = APP_HEAP_SIZE_MAX;
+    }
+
+    /* Judge the app type is AOTed or not */
+    package_type = get_package_type((uint8 *) msg->payload, msg->payload_len);
+
+    /* Load WASM file and instantiate*/
+    if (package_type == Wasm_Module_AoT) {
+        wasm_app_aot_file = (uint8 *) msg->payload;
+        wasm_app_aot_file_len = msg->payload_len;
+        inst = wasm_runtime_load_aot(wasm_app_aot_file, wasm_app_aot_file_len,
+                heap_size, err, err_size);
+        if (!inst) {
+            SEND_ERR_RESPONSE(msg->mid,
+                    "Install WASM app failed: load wasm aot binary failed.");
+            return false;
+        }
+    } else if (package_type == Wasm_Module_Bytecode) {
+        wasm_app_file = (wasm_app_file_t *) msg->payload;
+        module = wasm_runtime_load_from_sections(wasm_app_file->sections, err,
+                err_size);
+        if (!module) {
+            SEND_ERR_RESPONSE(msg->mid,
+                    "Install WASM app failed: load WASM file failed.");
+            printf("error: %s\n", err);
+            destroy_wasm_sections_list(wasm_app_file->sections);
+            return false;
+        }
+
+        /* Destroy useless sections from list after load */
+        for (i = 0; i < sizeof(sections1); i++)
+            destroy_wasm_section_from_list(&wasm_app_file->sections,
+                    sections1[i]);
+
+        inst = wasm_runtime_instantiate(module, 0, heap_size, err, err_size);
+        if (!inst) {
+            SEND_ERR_RESPONSE(msg->mid,
+                    "Install WASM app failed: instantiate wasm runtime 
failed.");
+            printf("error: %s\n", err);
+            wasm_runtime_unload(module);
+            destroy_wasm_sections_list(wasm_app_file->sections);
+            return false;
+        }
+
+        /* Destroy useless sections from list after instantiate */
+        for (i = 0; i < sizeof(sections2); i++)
+            destroy_wasm_section_from_list(&wasm_app_file->sections,
+                    sections2[i]);
+
+    } else {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Install WASM app failed: invalid wasm package type.");
+        return false;
+    }
+
+    /* Create module data including the wasm_app_data as its internal_data*/
+    m_data_size = offsetof(module_data, module_name) + strlen(m_name) + 1;
+    m_data_size = align_uint(m_data_size, 4);
+    m_data = bh_malloc(m_data_size + sizeof(wasm_data));
+    if (!m_data) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Install WASM app failed: allocate memory failed.");
+        goto fail;
+    }
+    memset(m_data, 0, m_data_size + sizeof(wasm_data));
+
+    m_data->module_type = Module_WASM_App;
+    m_data->internal_data = (uint8*) m_data + m_data_size;
+    wasm_app_data = (wasm_data*) m_data->internal_data;
+    wasm_app_data->wasm_module_inst = inst;
+    wasm_app_data->wasm_module = module;
+    wasm_app_data->m_data = m_data;
+    wasm_app_data->sections = wasm_app_file->sections;
+
+    /* Set module data - name and module type */
+    bh_strcpy_s(m_data->module_name, strlen(m_name) + 1, m_name);
+
+    /* Set module data - execution timeout */
+    timeout = DEFAULT_WATCHDOG_INTERVAL;
+    find_key_value(properties, strlen(properties), "wd", timeout_str,
+            sizeof(timeout_str) - 1, '&');
+    if (strlen(timeout_str) > 0)
+        timeout = atoi(timeout_str);
+    m_data->timeout = timeout;
+
+    /* Set module data - create queue */
+    m_data->queue = bh_queue_create();
+    if (!m_data->queue) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Install WASM app failed: create app queue failed.");
+        goto fail;
+    }
+
+    /* Set heap size */
+    m_data->heap_size = heap_size;
+
+    /* Set module data - timers number */
+    timers = DEFAULT_TIMERS_PER_APP;
+    find_key_value(properties, strlen(properties), "timers", timers_str,
+                   sizeof(timers_str) - 1, '&');
+    if (strlen(timers_str) > 0) {
+        timers = atoi(timers_str);
+        if (timers > MAX_TIMERS_PER_APP)
+            timers = MAX_TIMERS_PER_APP;
+    }
+
+    /* Attention: must add the module before start the thread! */
+    app_manager_add_module_data(m_data);
+
+    m_data->timer_ctx = create_wasm_timer_ctx(m_data->id, timers);
+    if (!m_data->timer_ctx) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Install WASM app failed: create app timers failed.");
+        goto fail;
+    }
+
+    /* Initialize watchdog timer */
+    if (!watchdog_timer_init(m_data)) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Install WASM app failed: create app watchdog timer failed.");
+        goto fail;
+    }
+
+    /* create a thread. This thread may not dedicate for this WASM app.
+     WASM app instance needs to attach to one thread */
+    if (vm_thread_create(&wasm_app_data->thread_id, wasm_app_routine,
+            (void*) m_data, APP_THREAD_STACK_SIZE_DEFAULT) != 0) {
+        module_data_list_remove(m_data);
+        SEND_ERR_RESPONSE(msg->mid,
+                "Install WASM app failed: create app threadf failed.");
+
+        goto fail;
+    }
+
+    /* only when thread is created it is the flag of installation success */
+    app_manager_post_applets_update_event();
+
+    app_manager_printf("Install WASM app success!\n");
+    send_error_response_to_host(msg->mid, CREATED_2_01, NULL); /* CREATED */
+
+    return true;
+
+    fail: if (m_data)
+        release_module(m_data);
+
+    wasm_runtime_deinstantiate(inst);
+
+    if (package_type == Wasm_Module_Bytecode)
+        wasm_runtime_unload(module);
+
+    if (package_type == Wasm_Module_Bytecode)
+        destroy_wasm_sections_list(wasm_app_file->sections);
+
+    return false;
+}
+
+/* Uninstall WASM app */
+static bool wasm_app_module_uninstall(request_t *msg)
+{
+    module_data *m_data;
+    wasm_data *wasm_app_data;
+    char m_name[APP_NAME_MAX_LEN] = { 0 };
+    char *properties;
+    int properties_offset;
+
+    properties_offset = check_url_start(msg->url, strlen(msg->url), "/applet");
+    /* TODO: assert(properties_offset > 0) */
+    if (properties_offset <= 0)
+        return false;
+    properties = msg->url + properties_offset;
+    find_key_value(properties, strlen(properties), "name", m_name,
+            sizeof(m_name) - 1, '&');
+
+    if (strlen(m_name) == 0) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Uninstall WASM app failed: invalid app name.");
+        return false;
+    }
+
+    m_data = app_manager_lookup_module_data(m_name);
+    if (!m_data) {
+        SEND_ERR_RESPONSE(msg->mid, "Uninstall WASM app failed: no app 
found.");
+        return false;
+    }
+
+    if (m_data->module_type != Module_WASM_App) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Uninstall WASM app failed: invalid module type.");
+        return false;
+    }
+
+    if (m_data->wd_timer.is_interrupting) {
+        SEND_ERR_RESPONSE(msg->mid,
+                "Uninstall WASM app failed: app is being interrupted by 
watchdog.");
+        return false;
+    }
+
+    /* Exit app queue loop run */
+    bh_queue_exit_loop_run(m_data->queue);
+
+    /* Wait for wasm app thread to exit */
+    wasm_app_data = (wasm_data*) m_data->internal_data;
+    vm_thread_join(wasm_app_data->thread_id, NULL, -1);
+
+    cleanup_app_resource(m_data);
+
+    app_manager_post_applets_update_event();
+
+    app_manager_printf("Uninstall WASM app successful!\n");
+
+    send_error_response_to_host(msg->mid, DELETED_2_02, NULL); /* DELETED */
+    return true;
+}
+
+static bool wasm_app_module_handle_host_url(void *queue_msg)
+{
+    //todo: implement in future
+    app_manager_printf("App handles host url address %d\n", (int) queue_msg);
+    return false;
+}
+
+static module_data*
+wasm_app_module_get_module_data(void)
+{
+    return wasm_runtime_get_current_thread_data();
+}
+
+static void wasm_app_module_watchdog_kill(module_data *m_data)
+{
+    //todo: implement in future
+    app_manager_printf("Watchdog kills app: %s\n", m_data->module_name);
+    return;
+}
+
+bool wasm_register_msg_callback(int message_type,
+        message_type_handler_t message_handler)
+{
+    int i;
+    int freeslot = -1;
+    for (i = 0; i < Max_Msg_Callback; i++) {
+        // replace handler for the same event registered
+        if (g_msg_type[i] == message_type)
+            break;
+
+        if (g_msg_callbacks[i] == NULL && freeslot == -1)
+            freeslot = i;
+    }
+
+    if (i != Max_Msg_Callback)
+        g_msg_callbacks[i] = message_handler;
+    else if (freeslot != -1) {
+        g_msg_callbacks[freeslot] = message_handler;
+        g_msg_type[freeslot] = message_type;
+    } else
+        return false;
+
+    return true;
+}
+
+bool wasm_register_cleanup_callback(resource_cleanup_handler_t handler)
+{
+    int i;
+
+    for (i = 0; i < Max_Cleanup_Callback; i++) {
+        if (g_cleanup_callbacks[i] == NULL) {
+            g_cleanup_callbacks[i] = handler;
+            return true;
+        }
+    }
+
+    return false;
+}
+
+#define RECV_INTEGER(value, next_phase) do{  \
+  unsigned char *p = (unsigned char *)&value; \
+  p[recv_ctx.size_in_phase++] = ch;               \
+  if (recv_ctx.size_in_phase == sizeof(value)) {  \
+    if (sizeof(value) == 4)                   \
+      value = ntohl(value);                   \
+    else if (sizeof(value) == 2)              \
+      value = ntohs(value);                   \
+    recv_ctx.phase = next_phase;                  \
+    recv_ctx.size_in_phase = 0;                   \
+  }                                           \
+} while(0)
+
+/* return:
+ * 1: whole wasm app arrived
+ * 0: one valid byte arrived
+ * -1: fail to process the byte arrived, e.g. allocate memory fail
+ */
+static bool wasm_app_module_on_install_request_byte_arrive(uint8 ch,
+        int request_total_size, int *received_size)
+{
+    if (recv_ctx.phase == Phase_Req_Ver) {
+        recv_ctx.phase = Phase_Req_Ver;
+        recv_ctx.size_in_phase = 0;
+        recv_ctx.total_received_size = 0;
+    }
+
+    recv_ctx.total_received_size++;
+    *received_size = recv_ctx.total_received_size;
+
+    if (recv_ctx.phase == Phase_Req_Ver) {
+        if (ch != 1 /* REQUES_PACKET_VER from restful_utils.c */)
+            return false;
+        recv_ctx.phase = Phase_Req_Action;
+        return true;
+    } else if (recv_ctx.phase == Phase_Req_Action) {
+        recv_ctx.message.request_action = ch;
+        recv_ctx.phase = Phase_Req_Fmt;
+        recv_ctx.size_in_phase = 0;
+        return true;
+    } else if (recv_ctx.phase == Phase_Req_Fmt) {
+        RECV_INTEGER(recv_ctx.message.request_fmt, Phase_Req_Mid);
+        return true;
+    } else if (recv_ctx.phase == Phase_Req_Mid) {
+        RECV_INTEGER(recv_ctx.message.request_mid, Phase_Req_Sender);
+        return true;
+    } else if (recv_ctx.phase == Phase_Req_Sender) {
+        RECV_INTEGER(recv_ctx.message.request_sender, Phase_Req_Url_Len);
+        return true;
+    } else if (recv_ctx.phase == Phase_Req_Url_Len) {
+        unsigned char *p = (unsigned char *) &recv_ctx.message.request_url_len;
+
+        p[recv_ctx.size_in_phase++] = ch;
+        if (recv_ctx.size_in_phase
+                == sizeof(recv_ctx.message.request_url_len)) {
+            recv_ctx.message.request_url_len = ntohs(
+                    recv_ctx.message.request_url_len);
+            recv_ctx.message.request_url = bh_malloc(
+                    recv_ctx.message.request_url_len + 1);
+            if (NULL == recv_ctx.message.request_url)
+                goto fail;
+            memset(recv_ctx.message.request_url, 0,
+                    recv_ctx.message.request_url_len + 1);
+            recv_ctx.phase = Phase_Req_Payload_Len;
+            recv_ctx.size_in_phase = 0;
+        }
+        return true;
+    } else if (recv_ctx.phase == Phase_Req_Payload_Len) {
+        RECV_INTEGER(recv_ctx.message.wasm_app_size, Phase_Req_Url);
+        return true;
+    } else if (recv_ctx.phase == Phase_Req_Url) {
+        recv_ctx.message.request_url[recv_ctx.size_in_phase++] = ch;
+        if (recv_ctx.size_in_phase == recv_ctx.message.request_url_len) {
+            recv_ctx.phase = Phase_Wasm_Magic;
+            recv_ctx.size_in_phase = 0;
+        }
+        return true;
+    } else if (recv_ctx.phase == Phase_Wasm_Magic) {
+        /* start to receive wasm app binary */
+        unsigned char *p =
+                (unsigned char *) &recv_ctx.message.wasm_app_binary.magic;
+
+        if (ch == wasm_app_magics[recv_ctx.size_in_phase])
+            p[recv_ctx.size_in_phase++] = ch;
+        else
+            goto fail;
+
+        if (recv_ctx.size_in_phase
+                == sizeof(recv_ctx.message.wasm_app_binary.magic)) {
+            recv_ctx.phase = Phase_Wasm_Version;
+            recv_ctx.size_in_phase = 0;
+        }
+
+        return true;
+    } else if (recv_ctx.phase == Phase_Wasm_Version) {
+        unsigned char *p =
+                (unsigned char *) &recv_ctx.message.wasm_app_binary.version;
+
+        if (ch == wasm_app_version[recv_ctx.size_in_phase])
+            p[recv_ctx.size_in_phase++] = ch;
+        else
+            goto fail;
+
+        if (recv_ctx.size_in_phase
+                == sizeof(recv_ctx.message.wasm_app_binary.version)) {
+            recv_ctx.phase = Phase_Wasm_Section_Type;
+            recv_ctx.size_in_phase = 0;
+        }
+
+        return true;
+    } else if (recv_ctx.phase == Phase_Wasm_Section_Type) {
+        wasm_section_t *new_section;
+
+        if (!(new_section = (wasm_section_t *) 
bh_malloc(sizeof(wasm_section_t))))
+            goto fail;
+
+        memset(new_section, 0, sizeof(wasm_section_t));
+        new_section->section_type = ch;
+        new_section->next = NULL;
+
+        /* add the section to tail of link list */
+        if (NULL == recv_ctx.message.wasm_app_binary.sections) {
+            recv_ctx.message.wasm_app_binary.sections = new_section;
+            recv_ctx.message.wasm_app_binary.section_end = new_section;
+        } else {
+            recv_ctx.message.wasm_app_binary.section_end->next = new_section;
+            recv_ctx.message.wasm_app_binary.section_end = new_section;
+        }
+
+        recv_ctx.phase = Phase_Wasm_Section_Size;
+        recv_ctx.size_in_phase = 0;
+
+        return true;
+    } else if (recv_ctx.phase == Phase_Wasm_Section_Size) {
+        /* the last section is the current receiving one */
+        wasm_section_t *section = recv_ctx.message.wasm_app_binary.section_end;
+        uint32 byte;
+
+        bh_assert(section);
+
+        byte = ch;
+
+        section->section_body_size |= ((byte & 0x7f)
+                << recv_ctx.size_in_phase * 7);
+        recv_ctx.size_in_phase++;
+        /* check leab128 overflow for uint32 value */
+        if (recv_ctx.size_in_phase
+                > (sizeof(section->section_body_size) * 8 + 7 - 1) / 7) {
+            app_manager_printf(" LEB overflow when parsing section size\n");
+            goto fail;
+        }
+
+        if ((byte & 0x80) == 0) {
+            /* leb128 encoded section size parsed done */
+            if (!(section->section_body = 
bh_malloc(section->section_body_size)))
+                goto fail;
+            recv_ctx.phase = Phase_Wasm_Section_Content;
+            recv_ctx.size_in_phase = 0;
+        }
+
+        return true;
+    } else if (recv_ctx.phase == Phase_Wasm_Section_Content) {
+        /* the last section is the current receiving one */
+        wasm_section_t *section = recv_ctx.message.wasm_app_binary.section_end;
+
+        bh_assert(section);
+
+        section->section_body[recv_ctx.size_in_phase++] = ch;
+
+        if (recv_ctx.size_in_phase == section->section_body_size) {
+            if (recv_ctx.total_received_size == request_total_size) {
+                /* whole wasm app received */
+                if (module_wasm_app_handle_install_msg(&recv_ctx.message)) {
+                    bh_free(recv_ctx.message.request_url);
+                    recv_ctx.message.request_url = NULL;
+                    memset(&recv_ctx, 0, sizeof(recv_ctx));
+                    return true;
+                } else
+                    goto fail;
+            } else {
+                recv_ctx.phase = Phase_Wasm_Section_Type;
+                recv_ctx.size_in_phase = 0;
+                return true;
+            }
+        }
+
+        return true;
+    }
+
+    fail: if (recv_ctx.message.wasm_app_binary.sections != NULL) {
+        destroy_wasm_sections_list(recv_ctx.message.wasm_app_binary.sections);
+        recv_ctx.message.wasm_app_binary.sections = NULL;
+    }
+
+    if (recv_ctx.message.request_url != NULL) {
+        bh_free(recv_ctx.message.request_url);
+        recv_ctx.message.request_url = NULL;
+    }
+
+    recv_ctx.phase = Phase_Req_Ver;
+    recv_ctx.size_in_phase = 0;
+    recv_ctx.total_received_size = 0;
+
+    return false;
+}
+
+static bool module_wasm_app_handle_install_msg(install_wasm_app_msg_t *message)
+{
+    request_t *request = NULL;
+    bh_message_t msg;
+
+    request = (request_t *) bh_malloc(sizeof(request_t));
+    if (request == NULL)
+        return false;
+
+    memset(request, 0, sizeof(*request));
+    request->action = message->request_action;
+    request->fmt = message->request_fmt;
+    request->url = bh_strdup(message->request_url);
+    request->sender = ID_HOST;
+    request->mid = message->request_mid;
+    request->payload_len = sizeof(message->wasm_app_binary);
+    request->payload = bh_malloc(request->payload_len);
+
+    if (request->url == NULL || request->payload == NULL) {
+        request_cleaner(request);
+        return false;
+    }
+
+    /* Request payload is set to wasm_app_file_t struct,
+     * but not whole app buffer */
+    memcpy(request->payload, &message->wasm_app_binary, request->payload_len);
+
+    /* Since it's a wasm app install request, so directly post to app-mgr's
+     * queue. The benefit is that section list can be freed when the msg
+     * failed to post to app-mgr's queue. The defect is missing url check. */
+    if (!(msg = bh_new_msg(RESTFUL_REQUEST, request, sizeof(*request),
+            request_cleaner))) {
+        request_cleaner(request);
+        return false;
+    }
+
+    if (!bh_post_msg2(get_app_manager_queue(), msg))
+        return false;
+
+    return true;
+}
+
+static void destroy_wasm_sections_list(wasm_section_t *sections)
+{
+    wasm_section_t *cur = sections;
+
+    /* App-manager-host and module_wasm won't access the
+     * section list concurrently, so need lock to protect. */
+
+    while (cur) {
+        wasm_section_t *next = cur->next;
+        if (cur->section_body != NULL)
+            bh_free(cur->section_body);
+        bh_free(cur);
+        cur = next;
+    }
+}
+
+static void destroy_wasm_section_from_list(wasm_section_t **sections, int type)
+{
+    wasm_section_t *cur, *prev = NULL;
+
+    /* App-manager-host and module_wasm won't access the
+     * section list concurrently, so need lock to protect. */
+
+    cur = *sections;
+
+    while (cur) {
+        wasm_section_t *next = cur->next;
+
+        if (type == cur->section_type) {
+            if (prev)
+                prev->next = next;
+            else
+                *sections = next;
+
+            if (cur->section_body != NULL)
+                bh_free(cur->section_body);
+            bh_free(cur);
+            break;
+        } else {
+            prev = cur;
+        }
+        cur = next;
+    }
+}
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_app.h 
b/scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_app.h
new file mode 100755
index 0000000..077af05
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_app.h
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _MODULE_WASM_APP_H_
+#define _MODULE_WASM_APP_H_
+
+#include "bh_queue.h"
+#include "app_manager_export.h"
+#include "wasm_export.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SECTION_TYPE_USER 0
+#define SECTION_TYPE_TYPE 1
+#define SECTION_TYPE_IMPORT 2
+#define SECTION_TYPE_FUNC 3
+#define SECTION_TYPE_TABLE 4
+#define SECTION_TYPE_MEMORY 5
+#define SECTION_TYPE_GLOBAL 6
+#define SECTION_TYPE_EXPORT 7
+#define SECTION_TYPE_START 8
+#define SECTION_TYPE_ELEM 9
+#define SECTION_TYPE_CODE 10
+#define SECTION_TYPE_DATA 11
+
+enum {
+    WASM_Msg_Start = BASE_EVENT_MAX,
+    TIMER_EVENT_WASM,
+    SENSOR_EVENT_WASM,
+    CONNECTION_EVENT_WASM,
+    WIDGET_EVENT_WASM,
+    WASM_Msg_End = WASM_Msg_Start + 100
+};
+
+typedef struct wasm_data {
+    /* for easily access the containing wasm module */
+    wasm_module_t wasm_module;
+    wasm_module_inst_t wasm_module_inst;
+    /* Permissions of the WASM app */
+    char *perms;
+    /*thread list mapped with this WASM module */
+    korp_tid thread_id;
+    /* for easily access the containing module data */
+    module_data* m_data;
+    /* section list of wasm bytecode */
+    wasm_section_list_t sections;
+} wasm_data;
+
+/* sensor event */
+typedef struct _sensor_event_data {
+    uint32 sensor_id;
+
+    int data_fmt;
+    /* event of attribute container from context core */
+    void *data;
+} sensor_event_data_t;
+
+/* WASM App File */
+typedef struct wasm_app_file {
+    /* magics */
+    int magic;
+    /* current version */
+    int version;
+    /* WASM section list */
+    wasm_section_list_t sections;
+    /* Last WASM section in the list */
+    wasm_section_t *section_end;
+} wasm_app_file_t;
+
+extern module_interface wasm_app_module_interface;
+
+typedef void (*message_type_handler_t)(module_data *m_data, bh_message_t msg);
+extern bool wasm_register_msg_callback(int msg_type,
+        message_type_handler_t message_handler);
+
+typedef void (*resource_cleanup_handler_t)(uint32 module_id);
+extern bool wasm_register_cleanup_callback(resource_cleanup_handler_t handler);
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif /* _MODULE_WASM_APP_H_ */
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_lib.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_lib.c
new file mode 100755
index 0000000..e4fc2d5
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_lib.c
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "module_wasm_lib.h"
+
+static bool wasm_lib_module_init(void)
+{
+    return false;
+}
+
+static bool wasm_lib_module_install(request_t *msg)
+{
+    (void) msg;
+    return false;
+}
+
+static bool wasm_lib_module_uninstall(request_t *msg)
+{
+    (void) msg;
+    return false;
+}
+
+static void wasm_lib_module_watchdog_kill(module_data *m_data)
+{
+    (void) m_data;
+}
+
+static bool wasm_lib_module_handle_host_url(void *queue_msg)
+{
+    (void) queue_msg;
+    return false;
+}
+
+static module_data*
+wasm_lib_module_get_module_data(void)
+{
+    return NULL;
+}
+
+module_interface wasm_lib_module_interface = { wasm_lib_module_init,
+        wasm_lib_module_install, wasm_lib_module_uninstall,
+        wasm_lib_module_watchdog_kill, wasm_lib_module_handle_host_url,
+        wasm_lib_module_get_module_data,
+        NULL };
+
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_lib.h 
b/scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_lib.h
new file mode 100755
index 0000000..7482cdd
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/module_wasm_lib.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _MODULE_WASM_LIB_H_
+#define _MODULE_WASM_LIB_H_
+
+#include "app_manager.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern module_interface wasm_lib_module_interface;
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif /* _MODULE_WASM_LIB_H_ */
diff --git 
a/scriptsrcs/wamr/core/app-mgr/app-manager/platform/linux/app_mgr_linux.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/platform/linux/app_mgr_linux.c
new file mode 100755
index 0000000..cbfeb37
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/platform/linux/app_mgr_linux.c
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "app_manager.h"
+
+void*
+app_manager_timer_create(void (*timer_callback)(void*),
+        watchdog_timer *wd_timer)
+{
+    /* TODO */
+    return NULL;
+}
+
+void app_manager_timer_destroy(void *timer)
+{
+    /* TODO */
+}
+
+void app_manager_timer_start(void *timer, int timeout)
+{
+    /* TODO */
+}
+
+void app_manager_timer_stop(void *timer)
+{
+    /* TODO */
+}
+
+watchdog_timer *
+app_manager_get_wd_timer_from_timer_handle(void *timer)
+{
+    /* TODO */
+    return NULL;
+}
+
+int app_manager_signature_verify(const uint8_t *file, unsigned int file_len,
+        const uint8_t *signature, unsigned int sig_size)
+{
+    return 1;
+}
+
diff --git 
a/scriptsrcs/wamr/core/app-mgr/app-manager/platform/zephyr/app_mgr_zephyr.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/platform/zephyr/app_mgr_zephyr.c
new file mode 100755
index 0000000..074d359
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/platform/zephyr/app_mgr_zephyr.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "app_manager.h"
+#include "bh_platform.h"
+#include "bh_memory.h"
+#include <autoconf.h>
+#include <zephyr.h>
+#include <kernel.h>
+#if 0
+#include <sigverify.h>
+#endif
+typedef struct k_timer_watchdog {
+    struct k_timer timer;
+    watchdog_timer *wd_timer;
+} k_timer_watchdog;
+
+void*
+app_manager_timer_create(void (*timer_callback)(void*),
+        watchdog_timer *wd_timer)
+{
+    struct k_timer_watchdog *timer = bh_malloc(sizeof(struct 
k_timer_watchdog));
+
+    if (timer) {
+        k_timer_init(&timer->timer, (void (*)(struct k_timer*)) timer_callback,
+        NULL);
+        timer->wd_timer = wd_timer;
+    }
+
+    return timer;
+}
+
+void app_manager_timer_destroy(void *timer)
+{
+    bh_free(timer);
+}
+
+void app_manager_timer_start(void *timer, int timeout)
+{
+    k_timer_start(timer, timeout, 0);
+}
+
+void app_manager_timer_stop(void *timer)
+{
+    k_timer_stop(timer);
+}
+
+watchdog_timer *
+app_manager_get_wd_timer_from_timer_handle(void *timer)
+{
+    return ((k_timer_watchdog*) timer)->wd_timer;
+}
+#if 0
+int app_manager_signature_verify(const uint8_t *file, unsigned int file_len,
+        const uint8_t *signature, unsigned int sig_size)
+{
+    return signature_verify(file, file_len, signature, sig_size);
+}
+#endif
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/resource_reg.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/resource_reg.c
new file mode 100755
index 0000000..bbadcd0
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/resource_reg.c
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "native_interface.h"
+#include "shared_utils.h"
+#include "app_manager.h"
+#include "app_manager_export.h"
+#include "attr_container.h"
+#include "coap_ext.h"
+
+typedef struct _app_res_register {
+    struct _app_res_register *next;
+    char * url;
+    void (*request_handler)(request_t *, void *);
+    uint32 register_id;
+} app_res_register_t;
+
+static app_res_register_t * g_resources = NULL;
+
+void module_request_handler(request_t *request, void *user_data)
+{
+    unsigned int mod_id = (unsigned int) user_data;
+    bh_message_t msg;
+    module_data *m_data;
+    request_t *req;
+
+    /* Check module name */
+    m_data = module_data_list_lookup_id(mod_id);
+    if (!m_data) {
+        return;
+    }
+
+    if (m_data->wd_timer.is_interrupting) {
+        return;
+    }
+
+    req = clone_request(request);
+    if (!req) {
+        return;
+    }
+
+    /* Set queue message and send to applet's queue */
+    msg = bh_new_msg(RESTFUL_REQUEST, req, sizeof(*req), request_cleaner);
+    if (!msg) {
+        request_cleaner(req);
+        return;
+    }
+
+    if (!bh_post_msg2(m_data->queue, msg)) {
+        return;
+    }
+
+    app_manager_printf("Send request to app %s success.\n",
+            m_data->module_name);
+}
+
+void targeted_app_request_handler(request_t *request, void *unused)
+{
+    char applet_name[128] = { 0 };
+    int offset;
+    char *url = request->url;
+    module_data *m_data;
+
+    offset = check_url_start(request->url, strlen(request->url), "/app/");
+
+    if (offset <= 0) {
+        return;
+    }
+
+    strncpy(applet_name, request->url + offset, sizeof(applet_name) - 1);
+    char *p = strrchr(applet_name, '/');
+    if (p) {
+        *p = 0;
+    } else
+        return;
+    app_manager_printf("Send request to applet: %s\n", applet_name);
+
+    request->url = p + 1;
+
+    /* Check module name */
+    m_data = module_data_list_lookup(applet_name);
+    if (!m_data) {
+        SEND_ERR_RESPONSE(request->mid,
+                "Send request to applet failed: invalid applet name");
+        goto end;
+    }
+
+    module_request_handler(request, (void *)m_data->id);
+    end: request->url = url;
+
+}
+
+void am_send_response(response_t *response)
+{
+    module_data *m_data;
+
+    // if the receiver is not any of modules, just forward it to the host
+    m_data = module_data_list_lookup_id(response->reciever);
+    if (!m_data) {
+        send_response_to_host(response);
+
+    } else {
+        response_t * resp_for_send = clone_response(response);
+        if (!resp_for_send) {
+            return;
+        }
+
+        bh_message_t msg = bh_new_msg(RESTFUL_RESPONSE, resp_for_send,
+                sizeof(*resp_for_send), response_cleaner);
+        if (!msg) {
+            response_cleaner(resp_for_send);
+            return;
+        }
+
+        if (!bh_post_msg2(m_data->queue, msg)) {
+            return;
+        }
+    }
+}
+
+void * am_dispatch_request(request_t *request)
+{
+    app_res_register_t *r = g_resources;
+
+    while (r) {
+        if (check_url_start(request->url, strlen(request->url), r->url) > 0) {
+            r->request_handler(request, (void *)r->register_id);
+            return r;
+        }
+        r = r->next;
+    }
+    return NULL;
+}
+
+bool am_register_resource(const char *url,
+        void (*request_handler)(request_t *, void *), uint32 register_id)
+{
+    app_res_register_t * r = g_resources;
+    int register_num = 0;
+
+    while (r) {
+        if (strcmp(r->url, url) == 0) {
+            return false;
+        }
+
+        if (r->register_id == register_id)
+            register_num++;
+
+        r = r->next;
+    }
+
+    if (strlen(url) > RESOUCE_EVENT_URL_LEN_MAX)
+        return false;
+
+    if (register_num >= RESOURCE_REGISTRATION_NUM_MAX)
+        return false;
+
+    r = (app_res_register_t *) bh_malloc(sizeof(app_res_register_t));
+    if (r == NULL)
+        return false;
+
+    memset(r, 0, sizeof(*r));
+    r->url = bh_strdup(url);
+    if (r->url == NULL) {
+        bh_free(r);
+        return false;
+    }
+
+    r->request_handler = request_handler;
+    r->next = g_resources;
+    r->register_id = register_id;
+    g_resources = r;
+
+    return true;
+}
+
+void am_cleanup_registeration(uint32 register_id)
+{
+    app_res_register_t * r = g_resources;
+    app_res_register_t * prev = NULL;
+
+    while (r) {
+        app_res_register_t *next = r->next;
+
+        if (register_id == r->register_id) {
+            if (prev)
+                prev->next = next;
+            else
+                g_resources = next;
+
+            bh_free(r->url);
+            bh_free(r);
+        } else
+            /* if r is freed, should not change prev. Only set prev to r
+             when r isn't freed. */
+            prev = r;
+
+        r = next;
+    }
+}
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/watchdog.c 
b/scriptsrcs/wamr/core/app-mgr/app-manager/watchdog.c
new file mode 100755
index 0000000..c3d9b0e
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/watchdog.c
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "watchdog.h"
+#include "bh_queue.h"
+#include "bh_thread.h"
+#include "bh_memory.h"
+#include "jeff_export.h"
+
+#define WATCHDOG_THREAD_PRIORITY 5
+
+/* Queue of watchdog */
+static bh_queue *watchdog_queue;
+
+#ifdef WATCHDOG_ENABLED /* TODO */
+static void watchdog_timer_callback(void *timer)
+{
+    watchdog_timer *wd_timer = app_manager_get_wd_timer_from_timer_handle(
+            timer);
+
+    watchdog_timer_stop(wd_timer);
+
+    vm_mutex_lock(&wd_timer->lock);
+
+    if (!wd_timer->is_stopped) {
+
+        wd_timer->is_interrupting = true;
+
+        bh_post_msg(watchdog_queue, WD_TIMEOUT, wd_timer->module_data,
+                sizeof(module_data));
+    }
+
+    vm_mutex_unlock(&wd_timer->lock);
+}
+#endif
+
+bool watchdog_timer_init(module_data *m_data)
+{
+#ifdef WATCHDOG_ENABLED /* TODO */
+    watchdog_timer *wd_timer = &m_data->wd_timer;
+
+    if (BH_SUCCESS != vm_mutex_init(&wd_timer->lock))
+    return false;
+
+    if (!(wd_timer->timer_handle =
+                    app_manager_timer_create(watchdog_timer_callback, 
wd_timer))) {
+        vm_mutex_destroy(&wd_timer->lock);
+        return false;
+    }
+
+    wd_timer->module_data = m_data;
+    wd_timer->is_interrupting = false;
+    wd_timer->is_stopped = false;
+#endif
+    return true;
+}
+
+void watchdog_timer_destroy(watchdog_timer *wd_timer)
+{
+#ifdef WATCHDOG_ENABLED /* TODO */
+    app_manager_timer_destroy(wd_timer->timer_handle);
+    vm_mutex_destroy(&wd_timer->lock);
+#endif
+}
+
+void watchdog_timer_start(watchdog_timer *wd_timer)
+{
+    vm_mutex_lock(&wd_timer->lock);
+
+    wd_timer->is_interrupting = false;
+    wd_timer->is_stopped = false;
+    app_manager_timer_start(wd_timer->timer_handle,
+            wd_timer->module_data->timeout);
+
+    vm_mutex_unlock(&wd_timer->lock);
+}
+
+void watchdog_timer_stop(watchdog_timer *wd_timer)
+{
+    app_manager_timer_stop(wd_timer->timer_handle);
+}
+
+#ifdef WATCHDOG_ENABLED /* TODO */
+static void watchdog_queue_callback(void *queue_msg)
+{
+    if (bh_message_type(queue_msg) == WD_TIMEOUT) {
+        module_data *m_data = (module_data *) bh_message_payload(queue_msg);
+        if (g_module_interfaces[m_data->module_type]
+                && 
g_module_interfaces[m_data->module_type]->module_watchdog_kill) {
+            g_module_interfaces[m_data->module_type]->module_watchdog_kill(
+                    m_data);
+            app_manager_post_applets_update_event();
+        }
+    }
+}
+#endif
+
+#ifdef WATCHDOG_ENABLED /* TODO */
+static void*
+watchdog_thread_routine(void *arg)
+{
+    /* Enter loop run */
+    bh_queue_enter_loop_run(watchdog_queue, watchdog_queue_callback);
+
+    (void) arg;
+    return NULL;
+}
+#endif
+
+bool watchdog_startup()
+{
+    if (!(watchdog_queue = bh_queue_create())) {
+        app_manager_printf(
+                "App Manager start failed: create watchdog queue failed.\n");
+        return false;
+    }
+#if 0
+//todo: enable watchdog
+    /* Start watchdog thread */
+    if 
(!jeff_runtime_create_supervisor_thread_with_prio(watchdog_thread_routine, NULL,
+                    WATCHDOG_THREAD_PRIORITY)) {
+        bh_queue_destroy(watchdog_queue);
+        return false;
+    }
+#endif
+    return true;
+}
diff --git a/scriptsrcs/wamr/core/app-mgr/app-manager/watchdog.h 
b/scriptsrcs/wamr/core/app-mgr/app-manager/watchdog.h
new file mode 100755
index 0000000..3c95755
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-manager/watchdog.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef _WATCHDOG_H_
+#define _WATCHDOG_H_
+
+#include "app_manager.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+bool
+watchdog_timer_init(module_data *module_data);
+
+void
+watchdog_timer_destroy(watchdog_timer *wd_timer);
+
+void
+watchdog_timer_start(watchdog_timer *wd_timer);
+
+void
+watchdog_timer_stop(watchdog_timer *wd_timer);
+
+watchdog_timer*
+app_manager_get_watchdog_timer(void *timer);
+
+bool
+watchdog_startup();
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif /* _WATCHDOG_H_ */
diff --git a/scriptsrcs/wamr/core/app-mgr/app-mgr-shared/app_manager_export.h 
b/scriptsrcs/wamr/core/app-mgr/app-mgr-shared/app_manager_export.h
new file mode 100755
index 0000000..7686cc2
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-mgr-shared/app_manager_export.h
@@ -0,0 +1,300 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _APP_MANAGER_EXPORT_H_
+#define _APP_MANAGER_EXPORT_H_
+
+#include "native_interface.h"
+#include "shared_utils.h"
+#include "bh_queue.h"
+#include "host_link.h"
+#include "runtime_timer.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct attr_container_t;
+
+/* Queue message type */
+typedef enum QUEUE_MSG_TYPE {
+    COAP_PARSED = LINK_MSG_TYPE_MAX + 1,
+    RESTFUL_REQUEST,
+    RESTFUL_RESPONSE,
+    TIMER_EVENT = 5,
+    SENSOR_EVENT = 6,
+    GPIO_INTERRUPT_EVENT = 7,
+    BLE_EVENT = 8,
+    JDWP_REQUEST = 9,
+    WD_TIMEOUT = 10,
+    BASE_EVENT_MAX = 100
+
+} QUEUE_MSG_TYPE;
+
+typedef enum {
+    Module_Jeff, Module_WASM_App, Module_WASM_Lib, Module_Max
+} Module_Type;
+
+struct module_data;
+
+/* Watchdog timer of module */
+typedef struct watchdog_timer {
+    /* Timer handle of the platform */
+    void *timer_handle;
+    /* Module of the watchdog timer */
+    struct module_data *module_data;
+    /* Lock of the watchdog timer */
+    korp_mutex lock;
+    /* Flag indicates module is being interrupted by watchdog */
+    bool is_interrupting;
+    /* Flag indicates watchdog timer is stopped */
+    bool is_stopped;
+} watchdog_timer;
+
+typedef struct module_data {
+    struct module_data *next;
+
+    uint32 id;
+
+    /* Type of the module */
+    Module_Type module_type;
+
+    /* Heap of the module */
+    void *heap;
+
+    /* Heap size of the module */
+    int heap_size;
+
+    /* Module execution timeout in millisecond */
+    int timeout;
+
+    /* Queue of the module */
+    bh_queue *queue;
+
+    /* Watchdog timer of the module*/
+    struct watchdog_timer wd_timer;
+
+    timer_ctx_t timer_ctx;
+
+    /* max timers number app can create */
+    int timers;
+
+    /* Internal data of the module */
+    void *internal_data;
+
+    /* Module name */
+    char module_name[1];
+} module_data;
+
+/* Module function types */
+typedef bool (*module_init_func)(void);
+typedef bool (*module_install_func)(request_t *msg);
+typedef bool (*module_uninstall_func)(request_t *msg);
+typedef void (*module_watchdog_kill_func)(module_data *module_data);
+typedef bool (*module_handle_host_url_func)(void *queue_msg);
+typedef module_data *(*module_get_module_data_func)(void);
+
+/**
+ * @typedef module_on_install_request_byte_arrive_func
+ *
+ * @brief Define the signature of function to handle one byte of
+ *        module app install request for struct module_interface.
+ *
+ * @param ch the byte to be received and handled
+ * @param total_size total size of the request
+ * @param received_total_size currently received total size when the function 
return
+ *
+ * @return true if success, false otherwise
+ */
+typedef bool (*module_on_install_request_byte_arrive_func)(uint8 ch,
+        int total_size, int *received_total_size);
+
+/* Interfaces of each module */
+typedef struct module_interface {
+    module_init_func module_init;
+    module_install_func module_install;
+    module_uninstall_func module_uninstall;
+    module_watchdog_kill_func module_watchdog_kill;
+    module_handle_host_url_func module_handle_host_url;
+    module_get_module_data_func module_get_module_data;
+    module_on_install_request_byte_arrive_func module_on_install;
+} module_interface;
+
+/**
+ * @typedef host_init_func
+ * @brief Define the host initialize callback function signature for
+ * struct host_interface.
+ *
+ * @return true if success, false if fail
+ */
+typedef bool (*host_init_func)(void);
+
+/**
+ * @typedef host_send_fun
+ * @brief Define the host send callback function signature for
+ * struct host_interface.
+ *
+ * @param buf data buffer to send.
+ * @param size size of the data to send.
+ *
+ * @return size of the data sent in bytes
+ */
+typedef int (*host_send_fun)(void * ctx, const char *buf, int size);
+
+/**
+ * @typedef host_destroy_fun
+ * @brief Define the host receive callback function signature for
+ * struct host_interface.
+ *
+ */
+typedef void (*host_destroy_fun)();
+
+/* Interfaces of host communication */
+typedef struct host_interface {
+    host_init_func init;
+    host_send_fun send;
+    host_destroy_fun destroy;
+} host_interface;
+
+/**
+ * Initialize communication with Host
+ *
+ * @param interface host communication interface
+ *
+ * @return true if success, false otherwise
+ */
+bool
+app_manager_host_init(host_interface *interface);
+
+/**
+ * Send message to Host
+ *
+ * @param buf buffer to send
+ * @param size size of buffer
+ *
+ * @return size of buffer sent
+ */
+
+/* Startup app manager */
+void
+app_manager_startup(host_interface *interface);
+
+/* Get queue of current applet */
+void *
+app_manager_get_module_queue(uint32 module_type);
+
+/* Get applet name of current applet */
+const char *
+app_manager_get_module_name(uint32 module_type);
+
+/* Get heap of current applet */
+void *
+app_manager_get_module_heap(uint32 module_type);
+
+void*
+get_app_manager_queue();
+
+module_data*
+app_manager_get_module_data(uint32 module_type);
+
+unsigned int
+app_manager_get_module_id(uint32 module_type);
+
+module_data*
+app_manager_lookup_module_data(const char *name);
+
+module_data*
+module_data_list_lookup(const char *module_name);
+
+module_data*
+module_data_list_lookup_id(unsigned int module_id);
+
+void
+app_manager_post_applets_update_event();
+
+bool
+am_register_resource(const char *url,
+        void (*request_handler)(request_t *, void *), uint32 register_id);
+
+void am_cleanup_registeration(uint32 register_id);
+
+bool
+am_register_event(const char *url, uint32_t reg_client);
+
+bool
+am_unregister_event(const char *url, uint32_t reg_client);
+
+void am_publish_event(request_t * event);
+
+void * am_dispatch_request(request_t *request);
+
+void am_send_response(response_t *response);
+
+void module_request_handler(request_t *request, void *user_data);
+
+/**
+ * Send request message to host
+ *
+ * @param msg the request or event message.
+ *    It is event when msg->action==COAP_EVENT
+ *
+ * @return true if success, false otherwise
+ */
+bool
+send_request_to_host(request_t *msg);
+
+/**
+ * Send response message to host
+ *
+ * @param msg the response message
+ *
+ * @return true if success, false otherwise
+ */
+bool
+send_response_to_host(response_t *msg);
+
+/**
+ * Send response with mid and code to host
+ *
+ * @param mid the message id of response
+ * @param code the code/status of response
+ * @param msg the detailed message
+ *
+ * @return true if success, false otherwise
+ */
+bool
+send_error_response_to_host(int mid, int code, const char *msg);
+
+/**
+ * Check whether the applet has the permission
+ *
+ * @param perm the permission needed to check
+ *
+ * @return true if success, false otherwise
+ */
+
+int
+app_manager_host_send_msg(int msg_type, const unsigned char *buf, int size);
+
+bool
+bh_applet_check_permission(const char *perm);
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif
+
diff --git a/scriptsrcs/wamr/core/app-mgr/app-mgr-shared/app_mgr_shared.cmake 
b/scriptsrcs/wamr/core/app-mgr/app-mgr-shared/app_mgr_shared.cmake
new file mode 100755
index 0000000..16df591
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-mgr-shared/app_mgr_shared.cmake
@@ -0,0 +1,23 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (APP_MGR_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${APP_MGR_SHARED_DIR})
+
+
+file (GLOB_RECURSE source_all ${APP_MGR_SHARED_DIR}/*.c)
+
+set (APP_MGR_SHARED_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/app-mgr/app-mgr-shared/host_link.h 
b/scriptsrcs/wamr/core/app-mgr/app-mgr-shared/host_link.h
new file mode 100755
index 0000000..d6cf597
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/app-mgr-shared/host_link.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef DEPS_APP_MGR_APP_MGR_SHARED_HOST_LINK_H_
+#define DEPS_APP_MGR_APP_MGR_SHARED_HOST_LINK_H_
+
+typedef enum LINK_MSG_TYPE {
+    COAP_TCP_RAW = 0,
+    COAP_UDP_RAW = 1,
+    REQUEST_PACKET,
+    RESPONSE_PACKET,
+    INSTALL_WASM_BYTECODE_APP,
+    CBOR_GENERIC = 30,
+
+    LINK_MSG_TYPE_MAX = 50
+} LINK_MSG_TYPE;
+
+/* Link message, or message between host and app manager */
+typedef struct bh_link_msg_t {
+    /* 2 bytes leading */
+    uint16_t leading_bytes;
+    /* message type, must be COAP_TCP or COAP_UDP */
+    uint16_t message_type;
+    /* size of payload */
+    uint32_t payload_size;
+    char *payload;
+} bh_link_msg_t;
+
+#endif /* DEPS_APP_MGR_APP_MGR_SHARED_HOST_LINK_H_ */
diff --git a/scriptsrcs/wamr/core/app-mgr/module.json 
b/scriptsrcs/wamr/core/app-mgr/module.json
new file mode 100755
index 0000000..9a45e8e
--- /dev/null
+++ b/scriptsrcs/wamr/core/app-mgr/module.json
@@ -0,0 +1,53 @@
+{
+    "name": "aee",
+    "version": "0.0.1",
+    "description": "aee",
+    "type": "source",
+    "category": "middleware",
+    "arch": "x86, arc, posix",
+    "includes": [
+        "Beihai/classlib/include",
+        "Beihai/runtime/include",
+        "Beihai/runtime/platform/include",
+        "Beihai/runtime/platform/zephyr",
+        "Beihai/runtime/utils/coap/er-coap",
+        "Beihai/runtime/utils/coap/extension",
+        "iwasm/runtime/include",
+        "iwasm/runtime/platform/include",
+        "iwasm/runtime/platform/zephyr",
+        "iwasm/runtime/vmcore_wasm"
+    ],
+    "sources": [
+        "Beihai/classlib/native/internal/*.c",
+        "Beihai/classlib/native/*.c",
+        "Beihai/runtime/gc/*.c",
+        "Beihai/runtime/platform/zephyr/*.c",
+        "Beihai/runtime/utils/*.c",
+        "Beihai/runtime/utils/coap/er-coap/*.c",
+        "Beihai/runtime/utils/coap/extension/*.c",
+        "Beihai/runtime/vmcore_jeff/*.c",
+        "app-manager/app-manager.c",
+        "app-manager/app-manager-host.c",
+        "app-manager/app_mgr_zephyr.c",
+        "app-manager/event.c",
+        "app-manager/message.c",
+        "app-manager/module_jeff.c",
+        "app-manager/module_wasm_lib.c",
+        "app-manager/module_wasm_app.c",
+        "app-manager/watchdog.c",
+        "Beihai/products/iMRT/*.c",
+        "iwasm/runtime/utils/*.c",
+        "iwasm/runtime/platform/zephyr/*.c",
+        "iwasm/runtime/vmcore_wasm/*.c",
+        "iwasm/lib/lib-export\.c",
+        "iwasm/lib/aee/*.c",
+        "iwasm/products/zephyr/sample/src/*.c"
+    ],
+    "compile_definitions": [
+        "NVALGRIND",
+        "__JLF__",
+        "__ZEPHYR__"
+    ],
+    "target": "aee",
+    "dependencies": []
+}
diff --git a/scriptsrcs/wamr/core/iwasm/app-samples/hello-world/build.sh 
b/scriptsrcs/wamr/core/iwasm/app-samples/hello-world/build.sh
new file mode 100755
index 0000000..c856b5d
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/app-samples/hello-world/build.sh
@@ -0,0 +1,17 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+emcc -g -O3 *.c -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s 
STACK_OVERFLOW_CHECK=2 \
+                -s TOTAL_MEMORY=65536 -s TOTAL_STACK=4096 -o test.wasm
+#./jeffdump -o test_wasm.h -n wasm_test_file test.wasm
diff --git a/scriptsrcs/wamr/core/iwasm/app-samples/hello-world/main.c 
b/scriptsrcs/wamr/core/iwasm/app-samples/hello-world/main.c
new file mode 100755
index 0000000..0db9659
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/app-samples/hello-world/main.c
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char **argv)
+{
+    char *buf;
+
+    printf("Hello world!\n");
+
+    buf = malloc(1024);
+    if (!buf) {
+        printf("malloc buf failed\n");
+        return -1;
+    }
+
+    printf("buf ptr: %p\n", buf);
+
+    sprintf(buf, "%s", "1234\n");
+    printf("buf: %s", buf);
+
+    free(buf);
+    return 0;
+}
diff --git a/scriptsrcs/wamr/core/iwasm/app-samples/smart-light/build.sh 
b/scriptsrcs/wamr/core/iwasm/app-samples/smart-light/build.sh
new file mode 100755
index 0000000..f1b43c8
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/app-samples/smart-light/build.sh
@@ -0,0 +1,17 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+emcc -g -O3 *.c -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s 
STACK_OVERFLOW_CHECK=2 \
+     -s TOTAL_MEMORY=65536 -s TOTAL_STACK=4096 -o test.wasm
+#./jeffdump -o ../test_wasm.h -n wasm_test_file test.wasm
diff --git a/scriptsrcs/wamr/core/iwasm/app-samples/smart-light/main.c 
b/scriptsrcs/wamr/core/iwasm/app-samples/smart-light/main.c
new file mode 100755
index 0000000..62ae5ac
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/app-samples/smart-light/main.c
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+//User LED
+#define LED_PORT "GPIOA"
+#define LED 5
+
+//User KEY
+#define KEY_PORT "GPIOC"
+#define KEY 13
+
+/** GPIO pin to be input. */
+#define GPIO_DIR_IN (0 << 0)
+
+/** GPIO pin to be output. */
+#define GPIO_DIR_OUT (1 << 0)
+
+void *device_get_binding(const char *);
+int gpio_pin_configure(void *, unsigned int, int);
+int gpio_pin_read(void *, unsigned int, unsigned int *);
+int gpio_pin_write(void *, unsigned int, unsigned int);
+
+int main(int argc, char **argv)
+{
+    unsigned int gpio_value;
+    unsigned char flag = 0;
+    struct device *dev, *key_dev;
+
+    dev = device_get_binding(LED_PORT);
+    /* Set LED pin as output */
+    gpio_pin_configure(dev, LED, GPIO_DIR_OUT);
+
+    key_dev = device_get_binding(KEY_PORT);
+    /* Set KEY pin as input */
+    gpio_pin_configure(key_dev, KEY, GPIO_DIR_IN);
+
+    while (1) {
+        gpio_pin_read(key_dev, KEY, &gpio_value);
+        if (!gpio_value) {
+            gpio_pin_write(dev, LED, 1);
+            if (!flag) {
+                printf("object detected\n");
+                flag = 1;
+            }
+        } else {
+            gpio_pin_write(dev, LED, 0);
+            flag = 0;
+        }
+    }
+    return 0;
+}
diff --git a/scriptsrcs/wamr/core/iwasm/lib/3rdparty/LICENCE.txt 
b/scriptsrcs/wamr/core/iwasm/lib/3rdparty/LICENCE.txt
new file mode 100755
index 0000000..beaef1d
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/3rdparty/LICENCE.txt
@@ -0,0 +1,8 @@
+MIT licence
+Copyright (c) 2016 Gábor Kiss-Vámosi
+
+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.
diff --git a/scriptsrcs/wamr/core/iwasm/lib/3rdparty/lv_conf.h 
b/scriptsrcs/wamr/core/iwasm/lib/3rdparty/lv_conf.h
new file mode 100755
index 0000000..fcc3534
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/3rdparty/lv_conf.h
@@ -0,0 +1,495 @@
+/**
+ * @file lv_conf.h
+ *
+ */
+
+/*
+ * COPY THIS FILE AS `lv_conf.h` NEXT TO the `lvgl` FOLDER
+ */
+
+#if 1 /*Set it to "1" to enable content*/
+
+#ifndef LV_CONF_H
+#define LV_CONF_H
+/* clang-format off */
+
+#include <stdint.h>
+
+/*====================
+   Graphical settings
+ *====================*/
+
+/* Maximal horizontal and vertical resolution to support by the library.*/
+#define LV_HOR_RES_MAX          (320)
+#define LV_VER_RES_MAX          (240)
+
+/* Color depth:
+ * - 1:  1 byte per pixel
+ * - 8:  RGB233
+ * - 16: RGB565
+ * - 32: ARGB8888
+ */
+#define LV_COLOR_DEPTH     32
+
+/* Swap the 2 bytes of RGB565 color.
+ * Useful if the display has a 8 bit interface (e.g. SPI)*/
+#define LV_COLOR_16_SWAP   0
+
+/* 1: Enable screen transparency.
+ * Useful for OSD or other overlapping GUIs.
+ * Requires `LV_COLOR_DEPTH = 32` colors and the screen's style should be 
modified: `style.body.opa = ...`*/
+#define LV_COLOR_SCREEN_TRANSP    0
+
+/*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 anti-aliasing (lines, and radiuses will be smoothed) */
+#define LV_ANTIALIAS        1
+
+/* Default display refresh period.
+ * Can be changed in the display driver (`lv_disp_drv_t`).*/
+#define LV_DISP_DEF_REFR_PERIOD      30      /*[ms]*/
+
+/* Dot Per Inch: used to initialize default sizes.
+ * E.g. a button with width = LV_DPI / 2 -> half inch wide
+ * (Not so important, you can adjust it to modify default sizes and spaces)*/
+#define LV_DPI              100     /*[px]*/
+
+/* Type of coordinates. Should be `int16_t` (or `int32_t` for extreme cases) */
+typedef int16_t lv_coord_t;
+
+/*=========================
+   Memory manager settings
+ *=========================*/
+
+/* LittelvGL's internal memory manager's settings.
+ * The graphical objects and other related data are stored here. */
+
+/* 1: use custom malloc/free, 0: use the built-in `lv_mem_alloc` and 
`lv_mem_free` */
+#define LV_MEM_CUSTOM      1
+#if LV_MEM_CUSTOM == 0
+/* Size of the memory used by `lv_mem_alloc` in bytes (>= 2kB)*/
+#  define LV_MEM_SIZE    (128U * 1024U)
+
+/* Complier prefix for a big array declaration */
+#  define LV_MEM_ATTR
+
+/* Set an address for the memory pool instead of allocating it as an array.
+ * Can be in external SRAM too. */
+#  define LV_MEM_ADR          0
+
+/* Automatically defrag. on free. Defrag. means joining the adjacent free 
cells. */
+#  define LV_MEM_AUTO_DEFRAG  1
+#else       /*LV_MEM_CUSTOM*/
+#  define LV_MEM_CUSTOM_INCLUDE "bh_memory.h"   /*Header for the dynamic 
memory function*/
+#  define LV_MEM_CUSTOM_ALLOC   bh_malloc       /*Wrapper to malloc*/
+#  define LV_MEM_CUSTOM_FREE    bh_free         /*Wrapper to free*/
+#endif     /*LV_MEM_CUSTOM*/
+
+/* Garbage Collector settings
+ * Used if lvgl is binded to higher level language and the memory is managed 
by that language */
+#define LV_ENABLE_GC 0
+#if LV_ENABLE_GC != 0
+#  define LV_GC_INCLUDE "gc.h"                           /*Include Garbage 
Collector related things*/
+#  define LV_MEM_CUSTOM_REALLOC   your_realloc           /*Wrapper to realloc*/
+#  define LV_MEM_CUSTOM_GET_SIZE  your_mem_get_size      /*Wrapper to 
lv_mem_get_size*/
+#endif /* LV_ENABLE_GC */
+
+/*=======================
+   Input device settings
+ *=======================*/
+
+/* Input device default settings.
+ * Can be changed in the Input device driver (`lv_indev_drv_t`)*/
+
+/* Input device read period in milliseconds */
+#define LV_INDEV_DEF_READ_PERIOD          30
+
+/* Drag threshold in pixels */
+#define LV_INDEV_DEF_DRAG_LIMIT           10
+
+/* Drag throw slow-down in [%]. Greater value -> faster slow-down */
+#define LV_INDEV_DEF_DRAG_THROW           20
+
+/* Long press time in milliseconds.
+ * Time to send `LV_EVENT_LONG_PRESSSED`) */
+#define LV_INDEV_DEF_LONG_PRESS_TIME      400
+
+/* Repeated trigger period in long press [ms]
+ * Time between `LV_EVENT_LONG_PRESSED_REPEAT */
+#define LV_INDEV_DEF_LONG_PRESS_REP_TIME  100
+
+/*==================
+ * Feature usage
+ *==================*/
+
+/*1: Enable the Animations */
+#define LV_USE_ANIMATION        1
+#if LV_USE_ANIMATION
+
+/*Declare the type of the user data of animations (can be e.g. `void *`, 
`int`, `struct`)*/
+typedef void * lv_anim_user_data_t;
+
+#endif
+
+/* 1: Enable shadow drawing*/
+#define LV_USE_SHADOW           1
+
+/* 1: Enable object groups (for keyboard/encoder navigation) */
+#define LV_USE_GROUP            0
+#if LV_USE_GROUP
+typedef void * lv_group_user_data_t;
+#endif  /*LV_USE_GROUP*/
+
+/* 1: Enable GPU interface*/
+#define LV_USE_GPU              1
+
+/* 1: Enable file system (might be required for images */
+#define LV_USE_FILESYSTEM       1
+#if LV_USE_FILESYSTEM
+/*Declare the type of the user data of file system drivers (can be e.g. `void 
*`, `int`, `struct`)*/
+typedef void * lv_fs_drv_user_data_t;
+#endif
+
+/*1: Add a `user_data` to drivers and objects*/
+#define LV_USE_USER_DATA        0
+
+/*========================
+ * Image decoder and cache
+ *========================*/
+
+/* 1: Enable indexed (palette) images */
+#define LV_IMG_CF_INDEXED       1
+
+/* 1: Enable alpha indexed images */
+#define LV_IMG_CF_ALPHA         1
+
+/* Default image cache size. Image caching keeps the images opened.
+ * If only the built-in image formats are used there is no real advantage of 
caching.
+ * (I.e. no new image decoder is added)
+ * With complex image decoders (e.g. PNG or JPG) caching can save the 
continuous open/decode of images.
+ * However the opened images might consume additional RAM.
+ * LV_IMG_CACHE_DEF_SIZE must be >= 1 */
+#define LV_IMG_CACHE_DEF_SIZE       1
+
+/*Declare the type of the user data of image decoder (can be e.g. `void *`, 
`int`, `struct`)*/
+typedef void * lv_img_decoder_user_data_t;
+
+/*=====================
+ *  Compiler settings
+ *====================*/
+/* Define a custom attribute to `lv_tick_inc` function */
+#define LV_ATTRIBUTE_TICK_INC
+
+/* Define a custom attribute to `lv_task_handler` function */
+#define LV_ATTRIBUTE_TASK_HANDLER
+
+/* With size optimization (-Os) the compiler might not align data to
+ * 4 or 8 byte boundary. This alignment will be explicitly applied where 
needed.
+ * E.g. __attribute__((aligned(4))) */
+#define LV_ATTRIBUTE_MEM_ALIGN
+
+/* Attribute to mark large constant arrays for example
+ * font's bitmaps */
+#define LV_ATTRIBUTE_LARGE_CONST
+
+/*===================
+ *  HAL settings
+ *==================*/
+
+/* 1: use a custom tick source.
+ * It removes the need to manually update the tick with `lv_tick_inc`) */
+#define LV_TICK_CUSTOM     1
+#if LV_TICK_CUSTOM == 1
+#define LV_TICK_CUSTOM_INCLUDE  "bh_time.h"       /*Header for the sys time 
function*/
+#define LV_TICK_CUSTOM_SYS_TIME_EXPR (_bh_time_get_boot_millisecond())     
/*Expression evaluating to current systime in ms*/
+#endif   /*LV_TICK_CUSTOM*/
+
+typedef void * lv_disp_drv_user_data_t;             /*Type of user data in the 
display driver*/
+typedef void * lv_indev_drv_user_data_t;            /*Type of user data in the 
input device driver*/
+
+/*================
+ * Log settings
+ *===============*/
+
+/*1: Enable the log module*/
+#define LV_USE_LOG      1
+#if LV_USE_LOG
+/* How important log should be added:
+ * LV_LOG_LEVEL_TRACE       A lot of logs to give detailed information
+ * LV_LOG_LEVEL_INFO        Log important events
+ * LV_LOG_LEVEL_WARN        Log if something unwanted happened but didn't 
cause a problem
+ * LV_LOG_LEVEL_ERROR       Only critical issue, when the system may fail
+ * LV_LOG_LEVEL_NONE        Do not log anything
+ */
+#  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`*/
+#  define LV_LOG_PRINTF   1
+#endif  /*LV_USE_LOG*/
+
+/*================
+ *  THEME USAGE
+ *================*/
+#define LV_THEME_LIVE_UPDATE    1   /*1: Allow theme switching at run time. 
Uses 8..10 kB of RAM*/
+
+#define LV_USE_THEME_TEMPL      1   /*Just for test*/
+#define LV_USE_THEME_DEFAULT    1   /*Built mainly from the built-in styles. 
Consumes very few RAM*/
+#define LV_USE_THEME_ALIEN      1   /*Dark futuristic theme*/
+#define LV_USE_THEME_NIGHT      1   /*Dark elegant theme*/
+#define LV_USE_THEME_MONO       1   /*Mono color theme for monochrome 
displays*/
+#define LV_USE_THEME_MATERIAL   1   /*Flat theme with bold colors and light 
shadows*/
+#define LV_USE_THEME_ZEN        1   /*Peaceful, mainly light theme */
+#define LV_USE_THEME_NEMO       1   /*Water-like theme based on the movie 
"Finding Nemo"*/
+
+/*==================
+ *    FONT USAGE
+ *===================*/
+
+/* The built-in fonts contains the ASCII range and some Symbols with  4 
bit-per-pixel.
+ * The symbols are available via `LV_SYMBOL_...` defines
+ * More info about fonts: https://docs.littlevgl.com/#Fonts
+ * To create a new font go to: https://littlevgl.com/ttf-font-to-c-array
+ */
+
+/* Robot fonts with bpp = 4
+ * https://fonts.google.com/specimen/Roboto  */
+#define LV_FONT_ROBOTO_12    1
+#define LV_FONT_ROBOTO_16    1
+#define LV_FONT_ROBOTO_22    1
+#define LV_FONT_ROBOTO_28    1
+
+/*Pixel perfect monospace font
+ * http://pelulamu.net/unscii/ */
+#define LV_FONT_UNSCII_8     1
+
+/* Optionally declare your custom fonts here.
+ * You can use these fonts as default font too
+ * and they will be available globally. E.g.
+ * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \
+ *                                LV_FONT_DECLARE(my_font_2)
+ */
+#define LV_FONT_CUSTOM_DECLARE
+
+/*Always set a default font from the built-in fonts*/
+#define LV_FONT_DEFAULT        &lv_font_roboto_16
+
+/* Enable it if you have fonts with a lot of characters.
+ * The limit depends on the font size, font face and bpp
+ * but with > 10,000 characters if you see issues probably you need to enable 
it.*/
+#define LV_FONT_FMT_TXT_LARGE   1
+
+/*Declare the type of the user data of fonts (can be e.g. `void *`, `int`, 
`struct`)*/
+typedef void * lv_font_user_data_t;
+
+/*=================
+ *  Text settings
+ *=================*/
+
+/* Select a character encoding for strings.
+ * Your IDE or editor should have the same character encoding
+ * - LV_TXT_ENC_UTF8
+ * - LV_TXT_ENC_ASCII
+ * */
+#define LV_TXT_ENC LV_TXT_ENC_UTF8
+
+ /*Can break (wrap) texts on these chars*/
+#define LV_TXT_BREAK_CHARS                  " ,.;:-_"
+
+/*===================
+ *  LV_OBJ SETTINGS
+ *==================*/
+
+/*Declare the type of the user data of object (can be e.g. `void *`, `int`, 
`struct`)*/
+typedef void * lv_obj_user_data_t;
+
+/*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/
+#define LV_USE_OBJ_REALIGN          1
+
+/* Enable to make the object clickable on a larger area.
+ * LV_EXT_CLICK_AREA_OFF or 0: Disable this feature
+ * LV_EXT_CLICK_AREA_TINY: The extra area can be adjusted horizontally and 
vertically (0..255 px)
+ * LV_EXT_CLICK_AREA_FULL: The extra area can be adjusted in all 4 directions 
(-32k..+32k px)
+ */
+#define LV_USE_EXT_CLICK_AREA  LV_EXT_CLICK_AREA_FULL
+
+/*==================
+ *  LV OBJ X USAGE
+ *================*/
+/*
+ * Documentation of the object types: https://docs.littlevgl.com/#Object-types
+ */
+
+/*Arc (dependencies: -)*/
+#define LV_USE_ARC      1
+
+/*Bar (dependencies: -)*/
+#define LV_USE_BAR      1
+
+/*Button (dependencies: lv_cont*/
+#define LV_USE_BTN      1
+#if LV_USE_BTN != 0
+/*Enable button-state animations - draw a circle on click (dependencies: 
LV_USE_ANIMATION)*/
+#  define LV_BTN_INK_EFFECT   1
+#endif
+
+/*Button matrix (dependencies: -)*/
+#define LV_USE_BTNM     1
+
+/*Calendar (dependencies: -)*/
+#define LV_USE_CALENDAR 1
+
+/*Canvas (dependencies: lv_img)*/
+#define LV_USE_CANVAS   1
+
+/*Check box (dependencies: lv_btn, lv_label)*/
+#define LV_USE_CB       1
+
+/*Chart (dependencies: -)*/
+#define LV_USE_CHART    1
+#if LV_USE_CHART
+#  define LV_CHART_AXIS_TICK_LABEL_MAX_LEN    20
+#endif
+
+/*Container (dependencies: -*/
+#define LV_USE_CONT     1
+
+/*Drop down list (dependencies: lv_page, lv_label, lv_symbol_def.h)*/
+#define LV_USE_DDLIST    1
+#if LV_USE_DDLIST != 0
+/*Open and close default animation time [ms] (0: no animation)*/
+#  define LV_DDLIST_DEF_ANIM_TIME     200
+#endif
+
+/*Gauge (dependencies:lv_bar, lv_lmeter)*/
+#define LV_USE_GAUGE    1
+
+/*Image (dependencies: lv_label*/
+#define LV_USE_IMG      1
+
+/*Image Button (dependencies: lv_btn*/
+#define LV_USE_IMGBTN   1
+#if LV_USE_IMGBTN
+/*1: The imgbtn requires left, mid and right parts and the width can be set 
freely*/
+#  define LV_IMGBTN_TILED 0
+#endif
+
+/*Keyboard (dependencies: lv_btnm)*/
+#define LV_USE_KB       1
+
+/*Label (dependencies: -*/
+#define LV_USE_LABEL    1
+#if LV_USE_LABEL != 0
+/*Hor, or ver. scroll speed [px/sec] in 'LV_LABEL_LONG_ROLL/ROLL_CIRC' mode*/
+#  define LV_LABEL_DEF_SCROLL_SPEED       25
+
+/* Waiting period at beginning/end of animation cycle */
+#  define LV_LABEL_WAIT_CHAR_COUNT        3
+
+/*Enable selecting text of the label */
+#  define LV_LABEL_TEXT_SEL               1
+
+/*Store extra some info in labels (12 bytes) to speed up drawing of very long 
texts*/
+#  define LV_LABEL_LONG_TXT_HINT          0
+#endif
+
+/*LED (dependencies: -)*/
+#define LV_USE_LED      1
+
+/*Line (dependencies: -*/
+#define LV_USE_LINE     1
+
+/*List (dependencies: lv_page, lv_btn, lv_label, (lv_img optionally for icons 
))*/
+#define LV_USE_LIST     1
+#if LV_USE_LIST != 0
+/*Default animation time of focusing to a list element [ms] (0: no animation)  
*/
+#  define LV_LIST_DEF_ANIM_TIME  100
+#endif
+
+/*Line meter (dependencies: *;)*/
+#define LV_USE_LMETER   1
+
+/*Message box (dependencies: lv_rect, lv_btnm, lv_label)*/
+#define LV_USE_MBOX     1
+
+/*Page (dependencies: lv_cont)*/
+#define LV_USE_PAGE     1
+#if LV_USE_PAGE != 0
+/*Focus default animation time [ms] (0: no animation)*/
+#  define LV_PAGE_DEF_ANIM_TIME     400
+#endif
+
+/*Preload (dependencies: lv_arc, lv_anim)*/
+#define LV_USE_PRELOAD      1
+#if LV_USE_PRELOAD != 0
+#  define LV_PRELOAD_DEF_ARC_LENGTH   60      /*[deg]*/
+#  define LV_PRELOAD_DEF_SPIN_TIME    1000    /*[ms]*/
+#  define LV_PRELOAD_DEF_ANIM         LV_PRELOAD_TYPE_SPINNING_ARC
+#endif
+
+/*Roller (dependencies: lv_ddlist)*/
+#define LV_USE_ROLLER    1
+#if LV_USE_ROLLER != 0
+/*Focus animation time [ms] (0: no animation)*/
+#  define LV_ROLLER_DEF_ANIM_TIME     200
+
+/*Number of extra "pages" when the roller is infinite*/
+#  define LV_ROLLER_INF_PAGES         7
+#endif
+
+/*Slider (dependencies: lv_bar)*/
+#define LV_USE_SLIDER    1
+
+/*Spinbox (dependencies: lv_ta)*/
+#define LV_USE_SPINBOX       1
+
+/*Switch (dependencies: lv_slider)*/
+#define LV_USE_SW       1
+
+/*Text area (dependencies: lv_label, lv_page)*/
+#define LV_USE_TA       1
+#if LV_USE_TA != 0
+#  define LV_TA_DEF_CURSOR_BLINK_TIME 400     /*ms*/
+#  define LV_TA_DEF_PWD_SHOW_TIME     1500    /*ms*/
+#endif
+
+/*Table (dependencies: lv_label)*/
+#define LV_USE_TABLE    1
+#if LV_USE_TABLE
+#  define LV_TABLE_COL_MAX    12
+#endif
+
+/*Tab (dependencies: lv_page, lv_btnm)*/
+#define LV_USE_TABVIEW      1
+#  if LV_USE_TABVIEW != 0
+/*Time of slide animation [ms] (0: no animation)*/
+#  define LV_TABVIEW_DEF_ANIM_TIME    300
+#endif
+
+/*Tileview (dependencies: lv_page) */
+#define LV_USE_TILEVIEW     1
+#if LV_USE_TILEVIEW
+/*Time of slide animation [ms] (0: no animation)*/
+#  define LV_TILEVIEW_DEF_ANIM_TIME   300
+#endif
+
+/*Window (dependencies: lv_cont, lv_btn, lv_label, lv_img, lv_page)*/
+#define LV_USE_WIN      1
+
+/*==================
+ * Non-user section
+ *==================*/
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)    /* Disable 
warnings for Visual Studio*/
+#  define _CRT_SECURE_NO_WARNINGS
+#endif
+
+/*--END OF LV_CONF_H--*/
+
+/*Be sure every define has a default value*/
+//#include "lvgl/src/lv_conf_checker.h"
+
+#endif /*LV_CONF_H*/
+
+#endif /*End of "Content enable"*/
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/bh_platform.c 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/bh_platform.c
new file mode 100755
index 0000000..a712336
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/bh_platform.c
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/*
+ *
+ *
+ */
+
+static bool is_little_endian()
+{
+    long i = 0x01020304;
+    unsigned char* c = (unsigned char*) &i;
+    return (*c == 0x04) ? true : false;
+}
+
+static void swap32(uint8* pData)
+{
+    uint8 value = *pData;
+    *pData = *(pData + 3);
+    *(pData + 3) = value;
+
+    value = *(pData + 1);
+    *(pData + 1) = *(pData + 2);
+    *(pData + 2) = value;
+}
+
+static void swap16(uint8* pData)
+{
+    uint8 value = *pData;
+    *(pData) = *(pData + 1);
+    *(pData + 1) = value;
+}
+
+uint32 htonl(uint32 value)
+{
+    uint32 ret;
+    if (is_little_endian()) {
+        ret = value;
+        swap32((uint8*) &ret);
+        return ret;
+    }
+
+    return value;
+}
+
+uint32 ntohl(uint32 value)
+{
+    return htonl(value);
+}
+
+uint16 htons(uint16 value)
+{
+    uint16 ret;
+    if (is_little_endian()) {
+        ret = value;
+        swap16((uint8 *)&ret);
+        return ret;
+    }
+
+    return value;
+}
+
+uint16 ntohs(uint16 value)
+{
+    return htons(value);
+}
+
+char *wa_strdup(const char *s)
+{
+    char *s1 = NULL;
+    if (s && (s1 = wa_malloc(strlen(s) + 1)))
+        memcpy(s1, s, strlen(s) + 1);
+    return s1;
+}
+
+#define RSIZE_MAX 0x7FFFFFFF
+int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n)
+{
+    char *dest = (char*) s1;
+    char *src = (char*) s2;
+    if (n == 0) {
+        return 0;
+    }
+
+    if (s1 == NULL || s1max > RSIZE_MAX) {
+        return -1;
+    }
+    if (s2 == NULL || n > s1max) {
+        memset(dest, 0, s1max);
+        return -1;
+    }
+    memcpy(dest, src, n);
+    return 0;
+}
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/bh_platform.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/bh_platform.h
new file mode 100755
index 0000000..7d12983
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/bh_platform.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef DEPS_IWASM_APP_LIBS_BASE_BH_PLATFORM_H_
+#define DEPS_IWASM_APP_LIBS_BASE_BH_PLATFORM_H_
+
+#include <stdbool.h>
+
+typedef unsigned char uint8;
+typedef char int8;
+typedef unsigned short uint16;
+typedef short int16;
+typedef unsigned int uint32;
+typedef int int32;
+
+#ifndef NULL
+#  define NULL ((void*) 0)
+#endif
+
+#ifndef __cplusplus
+#define true 1
+#define false 0
+#define inline __inline
+#endif
+
+// all wasm-app<->native shared source files should use wa_malloc/wa_free.
+// they will be mapped to different implementations in each side
+#ifndef wa_malloc
+#define wa_malloc malloc
+#endif
+
+#ifndef wa_free
+#define wa_free free
+#endif
+
+char *wa_strdup(const char *s);
+
+uint32 htonl(uint32 value);
+uint32 ntohl(uint32 value);
+uint16 htons(uint16 value);
+uint16 ntohs(uint16 value);
+
+int
+b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n);
+
+#endif /* DEPS_IWASM_APP_LIBS_BASE_BH_PLATFORM_H_ */
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/request.c 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/request.c
new file mode 100755
index 0000000..4251e2b
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/request.c
@@ -0,0 +1,357 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "attr_container.h"
+#include "request.h"
+#include "shared_utils.h"
+#include "wasm_app.h"
+
+#define TRANSACTION_TIMEOUT_MS 5000
+
+typedef enum {
+    Reg_Event, Reg_Request
+} reg_type_t;
+
+typedef struct _res_register {
+    struct _res_register *next;
+    const char * url;
+    reg_type_t reg_type;
+    void (*request_handler)(request_t *);
+} res_register_t;
+
+typedef struct transaction {
+    struct transaction *next;
+    int mid;
+    unsigned int time; /* start time */
+    response_handler_f handler;
+    void *user_data;
+} transaction_t;
+
+static res_register_t * g_resources = NULL;
+
+static transaction_t *g_transactions = NULL;
+
+static user_timer_t g_trans_timer = NULL;
+
+static transaction_t *transaction_find(int mid)
+{
+    transaction_t *t = g_transactions;
+
+    while (t) {
+        if (t->mid == mid)
+            return t;
+        t = t->next;
+    }
+
+    return NULL;
+}
+
+/*
+ * new transaction is added to the tail of the list, so the list
+ * is sorted by expiry time naturally.
+ */
+static void transaction_add(transaction_t *trans)
+{
+    transaction_t *t;
+
+    if (g_transactions == NULL) {
+        g_transactions = trans;
+        return;
+    }
+
+    t = g_transactions;
+    while (t) {
+        if (t->next == NULL) {
+            t->next = trans;
+            return;
+        }
+    }
+}
+
+static void transaction_remove(transaction_t *trans)
+{
+    transaction_t *prev = NULL, *current = g_transactions;
+
+    while (current) {
+        if (current == trans) {
+            if (prev == NULL) {
+                g_transactions = current->next;
+                free(current);
+                return;
+            }
+            prev->next = current->next;
+            free(current);
+            return;
+        }
+        prev = current;
+        current = current->next;
+    }
+}
+
+static bool is_event_type(request_t * req)
+{
+    return req->action == COAP_EVENT;
+}
+
+static bool register_url_handler(const char *url,
+        request_handler_f request_handler, reg_type_t reg_type)
+{
+    res_register_t * r = g_resources;
+
+    while (r) {
+        if (reg_type == r->reg_type && strcmp(r->url, url) == 0) {
+            r->request_handler = request_handler;
+            return true;
+        }
+        r = r->next;
+    }
+
+    r = (res_register_t *) malloc(sizeof(res_register_t));
+    if (r == NULL)
+        return false;
+
+    memset(r, 0, sizeof(*r));
+
+    r->url = strdup(url);
+    if (!r->url) {
+        free(r);
+        return false;
+    }
+
+    r->request_handler = request_handler;
+    r->reg_type = reg_type;
+    r->next = g_resources;
+    g_resources = r;
+
+    // tell app mgr to route this url to me
+    if (reg_type == Reg_Request)
+        wasm_register_resource((int32)url);
+    else
+        wasm_sub_event((int32)url);
+
+    return true;
+}
+
+bool api_register_resource_handler(const char *url,
+        request_handler_f request_handler)
+{
+    return register_url_handler(url, request_handler, Reg_Request);
+}
+
+static void transaction_timeout_handler(user_timer_t timer)
+{
+    transaction_t *cur, *expired = NULL;
+    unsigned int elpased_ms, now = wasm_get_sys_tick_ms();
+
+    /*
+     * Since he transaction list is sorted by expiry time naturally,
+     * we can easily get all expired transactions.
+     * */
+    cur = g_transactions;
+    while (cur) {
+        if (now < cur->time)
+            elpased_ms = now + (0xFFFFFFFF - cur->time) + 1;
+        else
+            elpased_ms = now - cur->time;
+
+        if (elpased_ms >= TRANSACTION_TIMEOUT_MS) {
+            g_transactions = cur->next;
+            cur->next = expired;
+            expired = cur;
+            cur = g_transactions;
+        } else {
+            break;
+        }
+    }
+
+    /* call each transaction's handler with response set to NULL */
+    cur = expired;
+    while (cur) {
+        transaction_t *tmp = cur;
+        cur->handler(NULL, cur->user_data);
+        cur = cur->next;
+        free(tmp);
+    }
+
+    /*
+     * If the transaction list is not empty, restart the timer according
+     * to the first transaction. Otherwise, stop the timer.
+     */
+    if (g_transactions != NULL) {
+        unsigned int elpased_ms, ms_to_expiry, now = wasm_get_sys_tick_ms();
+        if (now < g_transactions->time) {
+            elpased_ms = now + (0xFFFFFFFF - g_transactions->time) + 1;
+        } else {
+            elpased_ms = now - g_transactions->time;
+        }
+        ms_to_expiry = TRANSACTION_TIMEOUT_MS - elpased_ms;
+        api_timer_restart(g_trans_timer, ms_to_expiry);
+    } else {
+        api_timer_cancel(g_trans_timer);
+        g_trans_timer = NULL;
+    }
+}
+
+void api_send_request(request_t * request, response_handler_f response_handler,
+        void * user_data)
+{
+    int size;
+    char *buffer;
+    transaction_t *trans;
+
+    if ((trans = (transaction_t *) malloc(sizeof(transaction_t))) == NULL) {
+        printf(
+                "send request: allocate memory for request transaction 
failed!\n");
+        return;
+    }
+
+    memset(trans, 0, sizeof(transaction_t));
+    trans->handler = response_handler;
+    trans->mid = request->mid;
+    trans->time = wasm_get_sys_tick_ms();
+    trans->user_data = user_data;
+
+    if ((buffer = pack_request(request, &size)) == NULL) {
+        printf("send request: pack request failed!\n");
+        free(trans);
+        return;
+    }
+
+    transaction_add(trans);
+
+    /* if the trans is the 1st one, start the timer */
+    if (trans == g_transactions) {
+        /* assert(g_trans_timer == NULL); */
+        if (g_trans_timer == NULL) {
+            g_trans_timer = api_timer_create(TRANSACTION_TIMEOUT_MS,
+            false,
+            true, transaction_timeout_handler);
+        }
+    }
+
+    wasm_post_request((int32)buffer, size);
+
+    free_req_resp_packet(buffer);
+}
+
+/*
+ *
+ *  APIs for the native layers to callback for request/response arrived to 
this app
+ *
+ */
+
+void on_response(char * buffer, int size)
+{
+    response_t response[1];
+    transaction_t *trans;
+
+    if (NULL == unpack_response(buffer, size, response)) {
+        printf("unpack response failed\n");
+        return;
+    }
+
+    if ((trans = transaction_find(response->mid)) == NULL) {
+        printf("cannot find the transaction\n");
+        return;
+    }
+
+    /*
+     * When the 1st transaction get response:
+     * 1. If the 2nd trans exist, restart the timer according to its expiry 
time;
+     * 2. Otherwise, stop the timer since there is no more transactions;
+     */
+    if (trans == g_transactions) {
+        if (trans->next != NULL) {
+            unsigned int elpased_ms, ms_to_expiry, now = 
wasm_get_sys_tick_ms();
+            if (now < trans->next->time) {
+                elpased_ms = now + (0xFFFFFFFF - trans->next->time) + 1;
+            } else {
+                elpased_ms = now - trans->next->time;
+            }
+            ms_to_expiry = TRANSACTION_TIMEOUT_MS - elpased_ms;
+            api_timer_restart(g_trans_timer, ms_to_expiry);
+        } else {
+            api_timer_cancel(g_trans_timer);
+            g_trans_timer = NULL;
+        }
+    }
+
+    trans->handler(response, trans->user_data);
+    transaction_remove(trans);
+}
+
+void on_request(char *buffer, int size)
+{
+    request_t request[1];
+    bool is_event;
+    res_register_t *r = g_resources;
+
+    if (NULL == unpack_request(buffer, size, request)) {
+        printf("unpack request failed\n");
+        return;
+    }
+
+    is_event = is_event_type(request);
+
+    while (r) {
+        if ((is_event && r->reg_type == Reg_Event)
+                || (!is_event && r->reg_type == Reg_Request)) {
+            if (check_url_start(request->url, strlen(request->url), r->url)
+                    > 0) {
+                r->request_handler(request);
+                return;
+            }
+        }
+
+        r = r->next;
+    }
+
+    printf("on_request: exit. no service handler\n");
+}
+
+void api_response_send(response_t *response)
+{
+    int size;
+    char * buffer = pack_response(response, &size);
+    if (buffer == NULL)
+        return;
+
+    wasm_response_send((int32)buffer, size);
+    free_req_resp_packet(buffer);
+}
+
+/// event api
+
+bool api_publish_event(const char *url, int fmt, void *payload, int 
payload_len)
+{
+    int size;
+    request_t request[1];
+    init_request(request, (char *)url, COAP_EVENT, fmt, payload, payload_len);
+    char * buffer = pack_request(request, &size);
+    if (buffer == NULL)
+        return false;
+    wasm_post_request((int32)buffer, size);
+
+    free_req_resp_packet(buffer);
+
+    return true;
+}
+
+bool api_subscribe_event(const char * url, request_handler_f handler)
+{
+    return register_url_handler(url, handler, Reg_Event);
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/request.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/request.h
new file mode 100755
index 0000000..e7766da
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/request.h
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _AEE_REQUEST_H_
+#define _AEE_REQUEST_H_
+
+#include "native_interface.h"
+#include "shared_utils.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @typedef request_handler_f
+ *
+ * @brief Define the signature of callback function for API
+ * api_register_resource_handler() to handle request or for API
+ * api_subscribe_event() to handle event.
+ *
+ * @param request pointer of the request to be handled
+ *
+ * @see api_register_resource_handler
+ * @see api_subscribe_event
+ */
+typedef void (*request_handler_f)(request_t *request);
+
+/**
+ * @typedef response_handler_f
+ *
+ * @brief Define the signature of callback function for API
+ * api_send_request() to handle response of a request.
+ *
+ * @param response pointer of the response to be handled
+ * @param user_data user data associated with the request which is set when
+ * calling api_send_request().
+ *
+ * @see api_send_request
+ */
+typedef void (*response_handler_f)(response_t *response, void *user_data);
+
+
+/*
+ *****************
+ * Request APIs
+ *****************
+ */
+
+/**
+ * @brief Register resource.
+ *
+ * @param url url of the resource
+ * @param handler callback function to handle the request to the resource
+ *
+ * @return true if success, false otherwise
+ */
+bool api_register_resource_handler(const char *url, request_handler_f handler);
+
+/**
+ * @brief Send request asynchronously.
+ *
+ * @param request pointer of the request to be sent
+ * @param response_handler callback function to handle the response
+ * @param user_data user data
+ */
+void api_send_request(request_t * request, response_handler_f response_handler,
+        void * user_data);
+
+/**
+ * @brief Send response.
+ *
+ * @param response pointer of the response to be sent
+ *
+ * @par
+ * @code
+ * void res1_handler(request_t *request)
+ * {
+ *     response_t response[1];
+ *     make_response_for_request(request, response);
+ *     set_response(response, DELETED_2_02, 0, NULL, 0);
+ *     api_response_send(response);
+ * }
+ * @endcode
+ */
+void api_response_send(response_t *response);
+
+
+/*
+ *****************
+ * Event APIs
+ *****************
+ */
+
+/**
+ * @brief Publish an event.
+ *
+ * @param url url of the event
+ * @param fmt format of the event payload
+ * @param payload payload of the event
+ * @param payload_len length in bytes of the event payload
+ *
+ * @return true if success, false otherwise
+ */
+bool api_publish_event(const char *url, int fmt, void *payload,
+        int payload_len);
+
+
+/**
+ * @brief Subscribe an event.
+ *
+ * @param url url of the event
+ * @param handler callback function to handle the event.
+ *
+ * @return true if success, false otherwise
+ */
+bool api_subscribe_event(const char * url, request_handler_f handler);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/timer.c 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/timer.c
new file mode 100755
index 0000000..cb04267
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/timer.c
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "timer_wasm_app.h"
+#include "native_interface.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#if 1
+#include <stdio.h>
+#else
+#define printf (...)
+#endif
+
+struct user_timer {
+    struct user_timer * next;
+    int timer_id;
+    void (*user_timer_callback)(user_timer_t);
+};
+
+struct user_timer * g_timers = NULL;
+
+user_timer_t api_timer_create(int interval, bool is_period, bool auto_start,
+        on_user_timer_update_f on_timer_update)
+{
+
+    int timer_id = wasm_create_timer(interval, is_period, auto_start);
+
+    //TODO
+    struct user_timer * timer = (struct user_timer *) malloc(
+            sizeof(struct user_timer));
+    if (timer == NULL) {
+        // TODO: remove the timer_id
+        printf("### api_timer_create malloc faild!!! \n");
+        return NULL;
+    }
+
+    memset(timer, 0, sizeof(*timer));
+    timer->timer_id = timer_id;
+    timer->user_timer_callback = on_timer_update;
+
+    if (g_timers == NULL)
+        g_timers = timer;
+    else {
+        timer->next = g_timers;
+        g_timers = timer;
+    }
+
+    return timer;
+}
+
+void api_timer_cancel(user_timer_t timer)
+{
+    user_timer_t t = g_timers, prev = NULL;
+
+    wasm_timer_cancel(timer->timer_id);
+
+    while (t) {
+        if (t == timer) {
+            if (prev == NULL) {
+                g_timers = t->next;
+                free(t);
+            } else {
+                prev->next = t->next;
+                free(t);
+            }
+            return;
+        } else {
+            prev = t;
+            t = t->next;
+        }
+    }
+}
+
+void api_timer_restart(user_timer_t timer, int interval)
+{
+    wasm_timer_restart(timer->timer_id, interval);
+}
+
+void on_timer_callback(int timer_id)
+{
+    struct user_timer * t = g_timers;
+
+    while (t) {
+        if (t->timer_id == timer_id) {
+            t->user_timer_callback(t);
+            break;
+        }
+        t = t->next;
+    }
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/timer_wasm_app.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/timer_wasm_app.h
new file mode 100755
index 0000000..045a3f4
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/timer_wasm_app.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _AEE_TIMER_H_
+#define _AEE_TIMER_H_
+
+#include "bh_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* board producer define user_timer */
+struct user_timer;
+typedef struct user_timer * user_timer_t;
+
+/**
+ * @typedef on_user_timer_update_f
+ *
+ * @brief Define the signature of callback function for API api_timer_create().
+ *
+ * @param timer the timer
+ *
+ * @see api_timer_create
+ */
+typedef void (*on_user_timer_update_f)(user_timer_t timer);
+
+/*
+ *****************
+ * Timer APIs
+ *****************
+ */
+
+/**
+ * @brief Create timer.
+ *
+ * @param interval timer interval
+ * @param is_period whether the timer is periodic
+ * @param auto_start whether start the timer immediately after created
+ * @param on_timer_update callback function called when timer expired
+ *
+ * @return the timer created if success, NULL otherwise
+ */
+user_timer_t api_timer_create(int interval, bool is_period, bool auto_start,
+        on_user_timer_update_f on_timer_update);
+
+/**
+ * @brief Cancel timer.
+ *
+ * @param timer the timer to cancel
+ */
+void api_timer_cancel(user_timer_t timer);
+
+/**
+ * @brief Restart timer.
+ *
+ * @param timer the timer to cancel
+ * @param interval the timer interval
+ */
+void api_timer_restart(user_timer_t timer, int interval);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/wasm_app.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/wasm_app.h
new file mode 100755
index 0000000..081b2bf
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/base/wasm_app.h
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the Contiki operating system.
+ */
+
+#ifndef _LIB_AEE_H_
+#define _LIB_AEE_H_
+
+#include "native_interface.h"
+#include "shared_utils.h"
+#include "attr_container.h"
+#include "request.h"
+#include "sensor.h"
+#include "connection.h"
+#include "timer_wasm_app.h"
+#include "wgl.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* CoAP request method codes */
+typedef enum {
+    COAP_GET = 1, COAP_POST, COAP_PUT, COAP_DELETE, COAP_EVENT = (COAP_DELETE
+            + 2)
+} coap_method_t;
+
+/* CoAP response codes */
+typedef enum {
+    NO_ERROR = 0,
+
+    CREATED_2_01 = 65, /* CREATED */
+    DELETED_2_02 = 66, /* DELETED */
+    VALID_2_03 = 67, /* NOT_MODIFIED */
+    CHANGED_2_04 = 68, /* CHANGED */
+    CONTENT_2_05 = 69, /* OK */
+    CONTINUE_2_31 = 95, /* CONTINUE */
+
+    BAD_REQUEST_4_00 = 128, /* BAD_REQUEST */
+    UNAUTHORIZED_4_01 = 129, /* UNAUTHORIZED */
+    BAD_OPTION_4_02 = 130, /* BAD_OPTION */
+    FORBIDDEN_4_03 = 131, /* FORBIDDEN */
+    NOT_FOUND_4_04 = 132, /* NOT_FOUND */
+    METHOD_NOT_ALLOWED_4_05 = 133, /* METHOD_NOT_ALLOWED */
+    NOT_ACCEPTABLE_4_06 = 134, /* NOT_ACCEPTABLE */
+    PRECONDITION_FAILED_4_12 = 140, /* BAD_REQUEST */
+    REQUEST_ENTITY_TOO_LARGE_4_13 = 141, /* REQUEST_ENTITY_TOO_LARGE */
+    UNSUPPORTED_MEDIA_TYPE_4_15 = 143, /* UNSUPPORTED_MEDIA_TYPE */
+
+    INTERNAL_SERVER_ERROR_5_00 = 160, /* INTERNAL_SERVER_ERROR */
+    NOT_IMPLEMENTED_5_01 = 161, /* NOT_IMPLEMENTED */
+    BAD_GATEWAY_5_02 = 162, /* BAD_GATEWAY */
+    SERVICE_UNAVAILABLE_5_03 = 163, /* SERVICE_UNAVAILABLE */
+    GATEWAY_TIMEOUT_5_04 = 164, /* GATEWAY_TIMEOUT */
+    PROXYING_NOT_SUPPORTED_5_05 = 165, /* PROXYING_NOT_SUPPORTED */
+
+    /* Erbium errors */
+    MEMORY_ALLOCATION_ERROR = 192, PACKET_SERIALIZATION_ERROR,
+
+    /* Erbium hooks */
+    MANUAL_RESPONSE, PING_RESPONSE
+} coap_status_t;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _LIB_AEE_H_ */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/connection/connection.c 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/connection/connection.c
new file mode 100755
index 0000000..1c7845d
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/connection/connection.c
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "connection.h"
+#include "native_interface.h"
+
+/* Raw connection structure */
+typedef struct _connection {
+    /* Next connection */
+    struct _connection *next;
+
+    /* Handle of the connection */
+    uint32 handle;
+
+    /* Callback function called when event on this connection occurs */
+    on_connection_event_f on_event;
+
+    /* User data */
+    void *user_data;
+} connection_t;
+
+/* Raw connections list */
+static connection_t *g_conns = NULL;
+
+connection_t *api_open_connection(const char *name,
+                                  attr_container_t *args,
+                                  on_connection_event_f on_event,
+                                  void *user_data)
+{
+    connection_t *conn;
+    char *args_buffer = (char *)args;
+    uint32 handle, args_len = attr_container_get_serialize_length(args);
+
+    handle = wasm_open_connection((int32)name, (int32)args_buffer, args_len);
+    if (handle == -1)
+        return NULL;
+
+    conn = (connection_t *)malloc(sizeof(*conn));
+    if (conn == NULL) {
+        wasm_close_connection(handle);
+        return NULL;
+    }
+
+    memset(conn, 0, sizeof(*conn));
+    conn->handle = handle;
+    conn->on_event = on_event;
+    conn->user_data = user_data;
+
+    if (g_conns != NULL) {
+        conn->next = g_conns;
+        g_conns = conn;
+    } else {
+        g_conns = conn;
+    }
+
+    return conn;
+}
+
+void api_close_connection(connection_t *c)
+{
+    connection_t *conn = g_conns, *prev = NULL;
+
+    while (conn) {
+        if (conn == c) {
+            wasm_close_connection(c->handle);
+            if (prev != NULL)
+                prev->next = conn->next;
+            else
+                g_conns = conn->next;
+            free(conn);
+            return;
+        } else {
+            prev = conn;
+            conn = conn->next;
+        }
+    }
+}
+
+int api_send_on_connection(connection_t *conn, const char *data, uint32 len)
+{
+    return wasm_send_on_connection(conn->handle, (int32)data, len);
+}
+
+bool api_config_connection(connection_t *conn, attr_container_t *cfg)
+{
+    char *cfg_buffer = (char *)cfg;
+    uint32 cfg_len = attr_container_get_serialize_length(cfg);
+
+    return wasm_config_connection(conn->handle, (int32)cfg_buffer, cfg_len);
+}
+
+void on_connection_data(uint32 handle, char *buffer, uint32 len)
+{
+    connection_t *conn = g_conns;
+
+    while (conn != NULL) {
+        if (conn->handle == handle) {
+            if (len == 0) {
+                conn->on_event(conn,
+                               CONN_EVENT_TYPE_DISCONNECT,
+                               NULL,
+                               0,
+                               conn->user_data);
+            } else {
+                conn->on_event(conn,
+                               CONN_EVENT_TYPE_DATA,
+                               buffer,
+                               len,
+                               conn->user_data);
+            }
+
+            return;
+        }
+        conn = conn->next;
+    }
+}
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/connection/connection.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/connection/connection.h
new file mode 100755
index 0000000..d87352a
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/connection/connection.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONNECTION_H_
+#define _CONNECTION_H_
+
+#include "attr_container.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _connection;
+typedef struct _connection connection_t;
+
+/* Connection event type */
+typedef enum {
+    /* Data is received */
+    CONN_EVENT_TYPE_DATA = 1,
+    /* Connection is disconnected */
+    CONN_EVENT_TYPE_DISCONNECT
+} conn_event_type_t;
+
+/*
+ * @typedef on_connection_event_f
+ *
+ * @param conn the connection that the event belongs to
+ * @param type event type
+ * @param data the data received for CONN_EVENT_TYPE_DATA event
+ * @param len length of the data in byte
+ * @param user_data user data
+ */
+typedef void (*on_connection_event_f)(connection_t *conn,
+                                      conn_event_type_t type,
+                                      const char *data,
+                                      uint32 len,
+                                      void *user_data);
+
+/*
+ *****************
+ * Connection API's
+ *****************
+ */
+
+/*
+ * @brief Open a connection.
+ *
+ * @param name name of the connection, "TCP", "UDP" or "UART"
+ * @param args connection arguments, such as: ip:127.0.0.1, port:8888
+ * @param on_event callback function called when event occurs
+ * @param user_data user data
+ *
+ * @return the connection or NULL means fail
+ */
+connection_t *api_open_connection(const char *name,
+                                  attr_container_t *args,
+                                  on_connection_event_f on_event,
+                                  void *user_data);
+
+/*
+ * @brief Close a connection.
+ *
+ * @param conn connection
+ */
+void api_close_connection(connection_t *conn);
+
+/*
+ * Send data to the connection in non-blocking manner which returns immediately
+ *
+ * @param conn the connection
+ * @param data data buffer to be sent
+ * @param len length of the data in byte
+ *
+ * @return actual length sent, or -1 if fail(maybe underlying buffer is full)
+ */
+int api_send_on_connection(connection_t *conn, const char *data, uint32 len);
+
+/*
+ * @brief Configure connection.
+ *
+ * @param conn the connection
+ * @param cfg configurations
+ *
+ * @return true if success, false otherwise
+ */
+bool api_config_connection(connection_t *conn, attr_container_t *cfg);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/LICENCE.txt 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/LICENCE.txt
new file mode 100755
index 0000000..beaef1d
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/LICENCE.txt
@@ -0,0 +1,8 @@
+MIT licence
+Copyright (c) 2016 Gábor Kiss-Vámosi
+
+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.
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_btn.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_btn.h
new file mode 100755
index 0000000..7cf8e9d
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_btn.h
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_BTN_H
+#define WAMR_GRAPHIC_LIBRARY_BTN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Possible states of a button.
+ * It can be used not only by buttons but other button-like objects too*/
+enum {
+    /**Released*/
+    WGL_BTN_STATE_REL,
+
+    /**Pressed*/
+    WGL_BTN_STATE_PR,
+
+    /**Toggled released*/
+    WGL_BTN_STATE_TGL_REL,
+
+    /**Toggled pressed*/
+    WGL_BTN_STATE_TGL_PR,
+
+    /**Inactive*/
+    WGL_BTN_STATE_INA,
+
+    /**Number of states*/
+    _WGL_BTN_STATE_NUM,
+};
+typedef uint8_t wgl_btn_state_t;
+
+/**Styles*/
+enum {
+    /** Release style */
+    WGL_BTN_STYLE_REL,
+
+    /**Pressed style*/
+    WGL_BTN_STYLE_PR,
+
+    /** Toggle released style*/
+    WGL_BTN_STYLE_TGL_REL,
+
+    /** Toggle pressed style */
+    WGL_BTN_STYLE_TGL_PR,
+
+    /** Inactive style*/
+    WGL_BTN_STYLE_INA,
+};
+typedef uint8_t wgl_btn_style_t;
+
+
+/* Create a button */
+wgl_obj_t wgl_btn_create(wgl_obj_t par, wgl_obj_t copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Enable the toggled states. On release the button will change from/to 
toggled state.
+ * @param btn pointer to a button object
+ * @param tgl true: enable toggled states, false: disable
+ */
+void wgl_btn_set_toggle(wgl_obj_t btn, bool tgl);
+
+/**
+ * Set the state of the button
+ * @param btn pointer to a button object
+ * @param state the new state of the button (from wgl_btn_state_t enum)
+ */
+void wgl_btn_set_state(wgl_obj_t btn, wgl_btn_state_t state);
+
+/**
+ * Toggle the state of the button (ON->OFF, OFF->ON)
+ * @param btn pointer to a button object
+ */
+void wgl_btn_toggle(wgl_obj_t btn);
+
+/**
+ * Set time of the ink effect (draw a circle on click to animate in the new 
state)
+ * @param btn pointer to a button object
+ * @param time the time of the ink animation
+ */
+void wgl_btn_set_ink_in_time(wgl_obj_t btn, uint16_t time);
+
+/**
+ * Set the wait time before the ink disappears
+ * @param btn pointer to a button object
+ * @param time the time of the ink animation
+ */
+void wgl_btn_set_ink_wait_time(wgl_obj_t btn, uint16_t time);
+
+/**
+ * Set time of the ink out effect (animate to the released state)
+ * @param btn pointer to a button object
+ * @param time the time of the ink animation
+ */
+void wgl_btn_set_ink_out_time(wgl_obj_t btn, uint16_t time);
+
+/**
+ * Set a style of a button.
+ * @param btn pointer to button object
+ * @param type which style should be set
+ * @param style pointer to a style
+ *  */
+//void wgl_btn_set_style(wgl_obj_t btn, wgl_btn_style_t type, const 
wgl_style_t * style);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the current state of the button
+ * @param btn pointer to a button object
+ * @return the state of the button (from wgl_btn_state_t enum)
+ */
+wgl_btn_state_t wgl_btn_get_state(wgl_obj_t btn);
+
+/**
+ * Get the toggle enable attribute of the button
+ * @param btn pointer to a button object
+ * @return true: toggle enabled, false: disabled
+ */
+bool wgl_btn_get_toggle(wgl_obj_t btn);
+
+/**
+ * Get time of the ink in effect (draw a circle on click to animate in the new 
state)
+ * @param btn pointer to a button object
+ * @return the time of the ink animation
+ */
+uint16_t wgl_btn_get_ink_in_time(wgl_obj_t btn);
+
+/**
+ * Get the wait time before the ink disappears
+ * @param btn pointer to a button object
+ * @return the time of the ink animation
+ */
+uint16_t wgl_btn_get_ink_wait_time(wgl_obj_t btn);
+
+/**
+ * Get time of the ink out effect (animate to the releases state)
+ * @param btn pointer to a button object
+ * @return the time of the ink animation
+ */
+uint16_t wgl_btn_get_ink_out_time(wgl_obj_t btn);
+
+/**
+ * Get style of a button.
+ * @param btn pointer to button object
+ * @param type which style should be get
+ * @return style pointer to the style
+ *  */
+//const wgl_style_t * wgl_btn_get_style(const wgl_obj_t btn, wgl_btn_style_t 
type);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_BTN_H */
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_cb.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_cb.h
new file mode 100755
index 0000000..40604f4
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_cb.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_CB_H
+#define WAMR_GRAPHIC_LIBRARY_CB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Checkbox styles. */
+enum {
+    WGL_CB_STYLE_BG, /**< Style of object background. */
+    WGL_CB_STYLE_BOX_REL, /**< Style of box (released). */
+    WGL_CB_STYLE_BOX_PR, /**< Style of box (pressed). */
+    WGL_CB_STYLE_BOX_TGL_REL, /**< Style of box (released but checked). */
+    WGL_CB_STYLE_BOX_TGL_PR, /**< Style of box (pressed and checked). */
+    WGL_CB_STYLE_BOX_INA, /**< Style of disabled box */
+};
+typedef uint8_t wgl_cb_style_t;
+
+
+/**
+ * Create a check box objects
+ * @param par pointer to an object, it will be the parent of the new check box
+ * @param copy pointer to a check box object, if not NULL then the new object 
will be copied from it
+ * @return pointer to the created check box
+ */
+wgl_obj_t wgl_cb_create(wgl_obj_t par, const wgl_obj_t copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the text of a check box. `txt` will be copied and may be deallocated
+ * after this function returns.
+ * @param cb pointer to a check box
+ * @param txt the text of the check box. NULL to refresh with the current text.
+ */
+void wgl_cb_set_text(wgl_obj_t cb, const char * txt);
+
+/**
+ * Set the text of a check box. `txt` must not be deallocated during the life
+ * of this checkbox.
+ * @param cb pointer to a check box
+ * @param txt the text of the check box. NULL to refresh with the current text.
+ */
+void wgl_cb_set_static_text(wgl_obj_t cb, const char * txt);
+
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+
+/**
+ * Get the length of the text of a check box
+ * @param label the check box object
+ * @return the length of the text of the check box
+ */
+unsigned int wgl_cb_get_text_length(wgl_obj_t cb);
+
+/**
+ * Get the text of a check box
+ * @param label the check box object
+ * @param buffer buffer to save the text
+ * @param buffer_len length of the buffer
+ * @return the text of the check box, note that the text will be truncated if 
buffer is not long enough
+ */
+char *wgl_cb_get_text(wgl_obj_t cb, char *buffer, int buffer_len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_CB_H */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_label.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_label.h
new file mode 100755
index 0000000..7cb0655
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_label.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_LABEL_H
+#define WAMR_GRAPHIC_LIBRARY_LABEL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Long mode behaviors. Used in 'wgl_label_ext_t' */
+enum {
+    WGL_LABEL_LONG_EXPAND,    /**< Expand the object size to the text size*/
+    WGL_LABEL_LONG_BREAK,     /**< Keep the object width, break the too long 
lines and expand the object
+                                height*/
+    WGL_LABEL_LONG_DOT,       /**< Keep the size and write dots at the end if 
the text is too long*/
+    WGL_LABEL_LONG_SROLL,      /**< Keep the size and roll the text back and 
forth*/
+    WGL_LABEL_LONG_SROLL_CIRC, /**< Keep the size and roll the text 
circularly*/
+    WGL_LABEL_LONG_CROP,      /**< Keep the size and crop the text out of it*/
+};
+typedef uint8_t wgl_label_long_mode_t;
+
+/** Label align policy*/
+enum {
+    WGL_LABEL_ALIGN_LEFT, /**< Align text to left */
+    WGL_LABEL_ALIGN_CENTER, /**< Align text to center */
+    WGL_LABEL_ALIGN_RIGHT, /**< Align text to right */
+};
+typedef uint8_t wgl_label_align_t;
+
+/** Label styles*/
+enum {
+    WGL_LABEL_STYLE_MAIN,
+};
+typedef uint8_t wgl_label_style_t;
+
+/* Create a label */
+wgl_obj_t wgl_label_create(wgl_obj_t par, wgl_obj_t copy);
+
+/* Set text for the label */
+void wgl_label_set_text(wgl_obj_t label, const char * text);
+
+/**
+ * Get the length of the text of a label
+ * @param label the label object
+ * @return the length of the text of the label
+ */
+unsigned int wgl_label_get_text_length(wgl_obj_t label);
+
+/**
+ * Get the text of a label
+ * @param label the label object
+ * @param buffer buffer to save the text
+ * @param buffer_len length of the buffer
+ * @return the text of the label, note that the text will be truncated if 
buffer is not long enough
+ */
+char *wgl_label_get_text(wgl_obj_t label, char *buffer, int buffer_len);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_LABEL_H */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_list.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_list.h
new file mode 100755
index 0000000..c2c454b
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_list.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_LIST_H
+#define WAMR_GRAPHIC_LIBRARY_LIST_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** List styles. */
+enum {
+    WGL_LIST_STYLE_BG, /**< List background style */
+    WGL_LIST_STYLE_SCRL, /**< List scrollable area style. */
+    WGL_LIST_STYLE_SB, /**< List scrollbar style. */
+    WGL_LIST_STYLE_EDGE_FLASH, /**< List edge flash style. */
+    WGL_LIST_STYLE_BTN_REL, /**< Same meaning as the ordinary button styles. */
+    WGL_LIST_STYLE_BTN_PR,
+    WGL_LIST_STYLE_BTN_TGL_REL,
+    WGL_LIST_STYLE_BTN_TGL_PR,
+    WGL_LIST_STYLE_BTN_INA,
+};
+typedef uint8_t wgl_list_style_t;
+
+
+/**
+ * Create a list objects
+ * @param par pointer to an object, it will be the parent of the new list
+ * @param copy pointer to a list object, if not NULL then the new object will 
be copied from it
+ * @return pointer to the created list
+ */
+wgl_obj_t wgl_list_create(wgl_obj_t par, wgl_obj_t copy);
+
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Add a list element to the list
+ * @param list pointer to list object
+ * @param img_fn file name of an image before the text (NULL if unused)
+ * @param txt text of the list element (NULL if unused)
+ * @return pointer to the new list element which can be customized (a button)
+ */
+wgl_obj_t wgl_list_add_btn(wgl_obj_t list, const void * img_src, const char * 
txt);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_LIST_H */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_obj.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_obj.h
new file mode 100755
index 0000000..7bd8775
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_obj.h
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_OBJ_H
+#define WAMR_GRAPHIC_LIBRARY_OBJ_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void * wgl_obj_t;
+
+enum {
+    WGL_EVENT_PRESSED,             /**< The object has been pressed*/
+    WGL_EVENT_PRESSING,            /**< The object is being pressed (called 
continuously while pressing)*/
+    WGL_EVENT_PRESS_LOST,          /**< User is still pressing but slid 
cursor/finger off of the object */
+    WGL_EVENT_SHORT_CLICKED,       /**< User pressed object for a short period 
of time, then released it. Not called if dragged. */
+    WGL_EVENT_LONG_PRESSED,        /**< Object has been pressed for at least 
`WGL_INDEV_LONG_PRESS_TIME`.  Not called if dragged.*/
+    WGL_EVENT_LONG_PRESSED_REPEAT, /**< Called after 
`WGL_INDEV_LONG_PRESS_TIME` in every
+                                       `WGL_INDEV_LONG_PRESS_REP_TIME` ms.  
Not called if dragged.*/
+    WGL_EVENT_CLICKED,             /**< Called on release if not dragged 
(regardless to long press)*/
+    WGL_EVENT_RELEASED,            /**< Called in every cases when the object 
has been released*/
+    WGL_EVENT_DRAG_BEGIN,
+    WGL_EVENT_DRAG_END,
+    WGL_EVENT_DRAG_THROW_BEGIN,
+    WGL_EVENT_KEY,
+    WGL_EVENT_FOCUSED,
+    WGL_EVENT_DEFOCUSED,
+    WGL_EVENT_VALUE_CHANGED,      /**< The object's value has changed (i.e. 
slider moved) */
+    WGL_EVENT_INSERT,
+    WGL_EVENT_REFRESH,
+    WGL_EVENT_APPLY,  /**< "Ok", "Apply" or similar specific button has 
clicked*/
+    WGL_EVENT_CANCEL, /**< "Close", "Cancel" or similar specific button has 
clicked*/
+    WGL_EVENT_DELETE, /**< Object is being deleted */
+};
+typedef uint8_t wgl_event_t; /**< Type of event being sent to the object. */
+
+
+/** Object alignment. */
+enum {
+    WGL_ALIGN_CENTER = 0,
+    WGL_ALIGN_IN_TOP_LEFT,
+    WGL_ALIGN_IN_TOP_MID,
+    WGL_ALIGN_IN_TOP_RIGHT,
+    WGL_ALIGN_IN_BOTTOM_LEFT,
+    WGL_ALIGN_IN_BOTTOM_MID,
+    WGL_ALIGN_IN_BOTTOM_RIGHT,
+    WGL_ALIGN_IN_LEFT_MID,
+    WGL_ALIGN_IN_RIGHT_MID,
+    WGL_ALIGN_OUT_TOP_LEFT,
+    WGL_ALIGN_OUT_TOP_MID,
+    WGL_ALIGN_OUT_TOP_RIGHT,
+    WGL_ALIGN_OUT_BOTTOM_LEFT,
+    WGL_ALIGN_OUT_BOTTOM_MID,
+    WGL_ALIGN_OUT_BOTTOM_RIGHT,
+    WGL_ALIGN_OUT_LEFT_TOP,
+    WGL_ALIGN_OUT_LEFT_MID,
+    WGL_ALIGN_OUT_LEFT_BOTTOM,
+    WGL_ALIGN_OUT_RIGHT_TOP,
+    WGL_ALIGN_OUT_RIGHT_MID,
+    WGL_ALIGN_OUT_RIGHT_BOTTOM,
+};
+typedef uint8_t wgl_align_t;
+
+
+enum {
+    WGL_DRAG_DIR_HOR = 0x1, /**< Object can be dragged horizontally. */
+    WGL_DRAG_DIR_VER = 0x2, /**< Object can be dragged vertically. */
+    WGL_DRAG_DIR_ALL = 0x3, /**< Object can be dragged in all directions. */
+};
+
+typedef uint8_t wgl_drag_dir_t;
+
+typedef void (*wgl_event_cb_t)(wgl_obj_t obj, wgl_event_t event);
+
+void wgl_obj_align(wgl_obj_t obj, wgl_obj_t base, wgl_align_t align, 
wgl_coord_t x_mod, wgl_coord_t y_mod);
+void wgl_obj_set_event_cb(wgl_obj_t obj, wgl_event_cb_t event_cb);
+wgl_res_t wgl_obj_del(wgl_obj_t obj);
+void wgl_obj_del_async(wgl_obj_t obj);
+void wgl_obj_clean(wgl_obj_t obj);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_OBJ_H */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_types.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_types.h
new file mode 100755
index 0000000..30b115f
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/inc/wgl_types.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_TYPES_H
+#define WAMR_GRAPHIC_LIBRARY_TYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+/**
+ * WGL error codes.
+ */
+enum {
+    WGL_RES_INV = 0, /*Typically indicates that the object is deleted (become 
invalid) in the action
+                       function or an operation was failed*/
+    WGL_RES_OK,      /*The object is valid (no deleted) after the action*/
+};
+typedef uint8_t wgl_res_t;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_TYPES_H */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/LICENCE.txt
 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/LICENCE.txt
new file mode 100755
index 0000000..beaef1d
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/LICENCE.txt
@@ -0,0 +1,8 @@
+MIT licence
+Copyright (c) 2016 Gábor Kiss-Vámosi
+
+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.
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_btn.h
 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_btn.h
new file mode 100755
index 0000000..7aa2391
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_btn.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_BTN_LVGL_COMPATIBLE_H
+#define WAMR_GRAPHIC_LIBRARY_BTN_LVGL_COMPATIBLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "../inc/wgl_btn.h"
+
+/** Possible states of a button.
+ * It can be used not only by buttons but other button-like objects too*/
+enum {
+    /**Released*/
+    LV_BTN_STATE_REL,
+
+    /**Pressed*/
+    LV_BTN_STATE_PR,
+
+    /**Toggled released*/
+    LV_BTN_STATE_TGL_REL,
+
+    /**Toggled pressed*/
+    LV_BTN_STATE_TGL_PR,
+
+    /**Inactive*/
+    LV_BTN_STATE_INA,
+
+    /**Number of states*/
+    _LV_BTN_STATE_NUM,
+};
+typedef wgl_btn_state_t lv_btn_state_t;
+
+/**Styles*/
+enum {
+    /** Release style */
+    LV_BTN_STYLE_REL,
+
+    /**Pressed style*/
+    LV_BTN_STYLE_PR,
+
+    /** Toggle released style*/
+    LV_BTN_STYLE_TGL_REL,
+
+    /** Toggle pressed style */
+    LV_BTN_STYLE_TGL_PR,
+
+    /** Inactive style*/
+    LV_BTN_STYLE_INA,
+};
+typedef wgl_btn_style_t lv_btn_style_t;
+
+
+#define lv_btn_create wgl_btn_create
+#define lv_btn_set_toggle wgl_btn_set_toggle
+#define lv_btn_set_state wgl_btn_set_state
+#define lv_btn_toggle wgl_btn_toggle
+#define lv_btn_set_ink_in_time wgl_btn_set_ink_in_time
+#define lv_btn_set_ink_wait_time wgl_btn_set_ink_wait_time
+#define lv_btn_set_ink_out_time wgl_btn_set_ink_out_time
+#define lv_btn_get_state wgl_btn_get_state
+#define lv_btn_get_toggle wgl_btn_get_toggle
+#define lv_btn_get_ink_in_time wgl_btn_get_ink_in_time
+#define lv_btn_get_ink_wait_time wgl_btn_get_ink_wait_time
+#define lv_btn_get_ink_out_time wgl_btn_get_ink_out_time
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_BTN_LVGL_COMPATIBLE_H */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_cb.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_cb.h
new file mode 100755
index 0000000..04e5d85
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_cb.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_CB_LVGL_COMPATIBLE_H
+#define WAMR_GRAPHIC_LIBRARY_CB_LVGL_COMPATIBLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "../inc/wgl_cb.h"
+
+/** Checkbox styles. */
+enum {
+    LV_CB_STYLE_BG, /**< Style of object background. */
+    LV_CB_STYLE_BOX_REL, /**< Style of box (released). */
+    LV_CB_STYLE_BOX_PR, /**< Style of box (pressed). */
+    LV_CB_STYLE_BOX_TGL_REL, /**< Style of box (released but checked). */
+    LV_CB_STYLE_BOX_TGL_PR, /**< Style of box (pressed and checked). */
+    LV_CB_STYLE_BOX_INA, /**< Style of disabled box */
+};
+typedef wgl_cb_style_t lv_cb_style_t;
+
+
+#define lv_cb_create wgl_cb_create
+#define lv_cb_set_text wgl_cb_set_text
+#define lv_cb_set_static_text wgl_cb_set_static_text
+#define lv_cb_get_text(cb) wgl_cb_get_text(cb, g_widget_text, 100)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_CB_LVGL_COMPATIBLE_H */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_label.h
 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_label.h
new file mode 100755
index 0000000..060e115
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_label.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_LABEL_LVGL_COMPATIBLE_H
+#define WAMR_GRAPHIC_LIBRARY_LABEL_LVGL_COMPATIBLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "../inc/wgl_label.h"
+
+/** Long mode behaviors. Used in 'lv_label_ext_t' */
+enum {
+    LV_LABEL_LONG_EXPAND,    /**< Expand the object size to the text size*/
+    LV_LABEL_LONG_BREAK,     /**< Keep the object width, break the too long 
lines and expand the object
+                                height*/
+    LV_LABEL_LONG_DOT,       /**< Keep the size and write dots at the end if 
the text is too long*/
+    LV_LABEL_LONG_SROLL,      /**< Keep the size and roll the text back and 
forth*/
+    LV_LABEL_LONG_SROLL_CIRC, /**< Keep the size and roll the text circularly*/
+    LV_LABEL_LONG_CROP,      /**< Keep the size and crop the text out of it*/
+};
+typedef wgl_label_long_mode_t lv_label_long_mode_t;
+
+/** Label align policy*/
+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 */
+};
+typedef wgl_label_align_t lv_label_align_t;
+
+/** Label styles*/
+enum {
+    LV_LABEL_STYLE_MAIN,
+};
+typedef wgl_label_style_t lv_label_style_t;
+
+
+#define lv_label_create wgl_label_create
+#define lv_label_set_text wgl_label_set_text
+#define lv_label_get_text(label) wgl_label_get_text(label, g_widget_text, 100)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_LABEL_LVGL_COMPATIBLE_H */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_list.h
 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_list.h
new file mode 100755
index 0000000..5f3c4b6
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_list.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_LIST_LVGL_COMPATIBLE_H
+#define WAMR_GRAPHIC_LIBRARY_LIST_LVGL_COMPATIBLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "../inc/wgl_list.h"
+
+/** List styles. */
+enum {
+    LV_LIST_STYLE_BG, /**< List background style */
+    LV_LIST_STYLE_SCRL, /**< List scrollable area style. */
+    LV_LIST_STYLE_SB, /**< List scrollbar style. */
+    LV_LIST_STYLE_EDGE_FLASH, /**< List edge flash style. */
+    LV_LIST_STYLE_BTN_REL, /**< Same meaning as the ordinary button styles. */
+    LV_LIST_STYLE_BTN_PR,
+    LV_LIST_STYLE_BTN_TGL_REL,
+    LV_LIST_STYLE_BTN_TGL_PR,
+    LV_LIST_STYLE_BTN_INA,
+};
+typedef wgl_list_style_t lv_list_style_t;
+
+
+#define lv_list_create wgl_list_create
+#define lv_list_add_btn wgl_list_add_btn
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_LIST_LVGL_COMPATIBLE_H */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_obj.h
 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_obj.h
new file mode 100755
index 0000000..1ea3ab8
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_obj.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_OBJ_LVGL_COMPATIBLE_H
+#define WAMR_GRAPHIC_LIBRARY_OBJ_LVGL_COMPATIBLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "../inc/wgl_obj.h"
+
+typedef void lv_obj_t;
+
+enum {
+    LV_EVENT_PRESSED,
+    LV_EVENT_PRESSING,
+    LV_EVENT_PRESS_LOST,
+    LV_EVENT_SHORT_CLICKED,
+    LV_EVENT_LONG_PRESSED,
+    LV_EVENT_LONG_PRESSED_REPEAT,
+    LV_EVENT_CLICKED,
+    LV_EVENT_RELEASED,
+    LV_EVENT_DRAG_BEGIN,
+    LV_EVENT_DRAG_END,
+    LV_EVENT_DRAG_THROW_BEGIN,
+    LV_EVENT_KEY,
+    LV_EVENT_FOCUSED,
+    LV_EVENT_DEFOCUSED,
+    LV_EVENT_VALUE_CHANGED,
+    LV_EVENT_INSERT,
+    LV_EVENT_REFRESH,
+    LV_EVENT_APPLY,
+    LV_EVENT_CANCEL,
+    LV_EVENT_DELETE,
+};
+typedef wgl_event_t lv_event_t;
+
+
+/** Object alignment. */
+enum {
+    LV_ALIGN_CENTER,
+    LV_ALIGN_IN_TOP_LEFT,
+    LV_ALIGN_IN_TOP_MID,
+    LV_ALIGN_IN_TOP_RIGHT,
+    LV_ALIGN_IN_BOTTOM_LEFT,
+    LV_ALIGN_IN_BOTTOM_MID,
+    LV_ALIGN_IN_BOTTOM_RIGHT,
+    LV_ALIGN_IN_LEFT_MID,
+    LV_ALIGN_IN_RIGHT_MID,
+    LV_ALIGN_OUT_TOP_LEFT,
+    LV_ALIGN_OUT_TOP_MID,
+    LV_ALIGN_OUT_TOP_RIGHT,
+    LV_ALIGN_OUT_BOTTOM_LEFT,
+    LV_ALIGN_OUT_BOTTOM_MID,
+    LV_ALIGN_OUT_BOTTOM_RIGHT,
+    LV_ALIGN_OUT_LEFT_TOP,
+    LV_ALIGN_OUT_LEFT_MID,
+    LV_ALIGN_OUT_LEFT_BOTTOM,
+    LV_ALIGN_OUT_RIGHT_TOP,
+    LV_ALIGN_OUT_RIGHT_MID,
+    LV_ALIGN_OUT_RIGHT_BOTTOM,
+};
+typedef wgl_align_t lv_align_t;
+
+
+enum {
+    LV_DRAG_DIR_HOR,
+    LV_DRAG_DIR_VER,
+    LV_DRAG_DIR_ALL,
+};
+
+typedef wgl_drag_dir_t lv_drag_dir_t;
+
+
+#define lv_obj_align wgl_obj_align
+#define lv_obj_set_event_cb wgl_obj_set_event_cb
+#define lv_obj_del wgl_obj_del
+#define lv_obj_del_async wgl_obj_del_async
+#define lv_obj_clean wgl_obj_clean
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_OBJ_LVGL_COMPATIBLE_H */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_types.h
 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_types.h
new file mode 100755
index 0000000..36157d1
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl-compatible/lv_types.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_TYPES_LVGL_COMPATIBLE_H
+#define WAMR_GRAPHIC_LIBRARY_TYPES_LVGL_COMPATIBLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "../inc/wgl_types.h"
+
+/**
+ * error codes.
+ */
+enum {
+    LV_RES_INV,
+    LV_RES_OK,
+};
+typedef wgl_res_t lv_res_t;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_TYPES_LVGL_COMPATIBLE_H */
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl.h
new file mode 100755
index 0000000..b8eb99c
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/lvgl.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_LVGL_COMPATIBLE_H
+#define WAMR_GRAPHIC_LIBRARY_LVGL_COMPATIBLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "wgl_shared_utils.h" /* shared types between app and native */
+#include "lvgl-compatible/lv_types.h"
+#include "lvgl-compatible/lv_obj.h"
+#include "lvgl-compatible/lv_btn.h"
+#include "lvgl-compatible/lv_cb.h"
+#include "lvgl-compatible/lv_label.h"
+#include "lvgl-compatible/lv_list.h"
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_LVGL_COMPATIBLE_H */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_btn.c 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_btn.c
new file mode 100755
index 0000000..5cf8c1c
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_btn.c
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wgl.h"
+#include "native_interface.h"
+
+
+#define ARGC sizeof(argv)/sizeof(uint32)
+#define CALL_BTN_NATIVE_FUNC(id) wasm_btn_native_call(id, (int32)argv, ARGC)
+
+wgl_obj_t wgl_btn_create(wgl_obj_t par, wgl_obj_t copy)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)par;
+    argv[1] = (uint32)copy;
+    CALL_BTN_NATIVE_FUNC(BTN_FUNC_ID_CREATE);
+    return (wgl_obj_t)argv[0];
+}
+
+void wgl_btn_set_toggle(wgl_obj_t btn, bool tgl)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)btn;
+    argv[1] = tgl;
+    CALL_BTN_NATIVE_FUNC(BTN_FUNC_ID_SET_TOGGLE);
+}
+
+void wgl_btn_set_state(wgl_obj_t btn, wgl_btn_state_t state)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)btn;
+    argv[1] = state;
+    CALL_BTN_NATIVE_FUNC(BTN_FUNC_ID_SET_STATE);
+}
+
+void wgl_btn_toggle(wgl_obj_t btn)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)btn;
+    CALL_BTN_NATIVE_FUNC(BTN_FUNC_ID_TOGGLE);
+}
+
+void wgl_btn_set_ink_in_time(wgl_obj_t btn, uint16_t time)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)btn;
+    argv[1] = time;
+    CALL_BTN_NATIVE_FUNC(BTN_FUNC_ID_SET_INK_IN_TIME);
+}
+
+void wgl_btn_set_ink_wait_time(wgl_obj_t btn, uint16_t time)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)btn;
+    argv[1] = time;
+    CALL_BTN_NATIVE_FUNC(BTN_FUNC_ID_SET_INK_WAIT_TIME);
+}
+
+void wgl_btn_set_ink_out_time(wgl_obj_t btn, uint16_t time)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)btn;
+    argv[1] = time;
+    CALL_BTN_NATIVE_FUNC(BTN_FUNC_ID_SET_INK_OUT_TIME);
+}
+
+//void wgl_btn_set_style(wgl_obj_t btn, wgl_btn_style_t type, const 
wgl_style_t * style)
+//{
+//    //TODO: pack style
+//    //wasm_btn_set_style(btn, type, style);
+//}
+//
+wgl_btn_state_t wgl_btn_get_state(const wgl_obj_t btn)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)btn;
+    CALL_BTN_NATIVE_FUNC(BTN_FUNC_ID_GET_STATE);
+    return (wgl_btn_state_t)argv[0];
+}
+
+bool wgl_btn_get_toggle(const wgl_obj_t btn)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)btn;
+    CALL_BTN_NATIVE_FUNC(BTN_FUNC_ID_GET_TOGGLE);
+    return (bool)argv[0];
+}
+
+uint16_t wgl_btn_get_ink_in_time(const wgl_obj_t btn)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)btn;
+    CALL_BTN_NATIVE_FUNC(BTN_FUNC_ID_GET_INK_IN_TIME);
+    return (uint16_t)argv[0];
+}
+
+uint16_t wgl_btn_get_ink_wait_time(const wgl_obj_t btn)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)btn;
+    CALL_BTN_NATIVE_FUNC(BTN_FUNC_ID_GET_INK_WAIT_TIME);
+    return (uint16_t)argv[0];
+}
+
+uint16_t wgl_btn_get_ink_out_time(const wgl_obj_t btn)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)btn;
+    CALL_BTN_NATIVE_FUNC(BTN_FUNC_ID_GET_INK_OUT_TIME);
+    return (uint16_t)argv[0];
+}
+//
+//const wgl_style_t * wgl_btn_get_style(const wgl_obj_t btn, wgl_btn_style_t 
type)
+//{
+//    //TODO: pack style
+//    //wasm_btn_get_style(btn, type);
+//    return NULL;
+//}
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_cb.c 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_cb.c
new file mode 100755
index 0000000..df646fb
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_cb.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wgl.h"
+#include "native_interface.h"
+
+#include <string.h>
+
+#define ARGC sizeof(argv)/sizeof(uint32)
+#define CALL_CB_NATIVE_FUNC(id) wasm_cb_native_call(id, (uint32)argv, ARGC)
+
+wgl_obj_t wgl_cb_create(wgl_obj_t par, const wgl_obj_t copy)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)par;
+    argv[1] = (uint32)copy;
+    CALL_CB_NATIVE_FUNC(CB_FUNC_ID_CREATE);
+    return (wgl_obj_t)argv[0];
+}
+
+void wgl_cb_set_text(wgl_obj_t cb, const char * txt)
+{
+    uint32 argv[3] = {0};
+    argv[0] = (uint32)cb;
+    argv[1] = (uint32)txt;
+    argv[2] = strlen(txt) + 1;
+    CALL_CB_NATIVE_FUNC(CB_FUNC_ID_SET_TEXT);
+}
+
+void wgl_cb_set_static_text(wgl_obj_t cb, const char * txt)
+{
+    uint32 argv[3] = {0};
+    argv[0] = (uint32)cb;
+    argv[1] = (uint32)txt;
+    argv[2] = strlen(txt) + 1;
+    CALL_CB_NATIVE_FUNC(CB_FUNC_ID_SET_STATIC_TEXT);
+}
+
+//void wgl_cb_set_style(wgl_obj_t cb, wgl_cb_style_t type, const wgl_style_t * 
style)
+//{
+//    //TODO:
+//}
+//
+
+unsigned int wgl_cb_get_text_length(wgl_obj_t cb)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)cb;
+    CALL_CB_NATIVE_FUNC(CB_FUNC_ID_GET_TEXT_LENGTH);
+    return argv[0];
+}
+
+char *wgl_cb_get_text(wgl_obj_t cb, char *buffer, int buffer_len)
+{
+    uint32 argv[3] = {0};
+    argv[0] = (uint32)cb;
+    argv[1] = (uint32)buffer;
+    argv[2] = buffer_len;
+    CALL_CB_NATIVE_FUNC(CB_FUNC_ID_GET_TEXT);
+    return (char *)argv[0];
+}
+
+//const wgl_style_t * wgl_cb_get_style(const wgl_obj_t cb, wgl_cb_style_t type)
+//{
+//    //TODO
+//    return NULL;
+//}
+//
+
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_label.c 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_label.c
new file mode 100755
index 0000000..3a14cdb
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_label.c
@@ -0,0 +1,262 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "wgl.h"
+#include "native_interface.h"
+#include <string.h>
+
+
+#define ARGC sizeof(argv)/sizeof(uint32)
+#define CALL_LABEL_NATIVE_FUNC(id) wasm_label_native_call(id, (uint32)argv, 
ARGC)
+
+wgl_obj_t wgl_label_create(wgl_obj_t par, wgl_obj_t copy)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)par;
+    argv[1] = (uint32)copy;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_CREATE);
+    return (wgl_obj_t)argv[0];
+}
+
+void wgl_label_set_text(wgl_obj_t label, const char * text)
+{
+    uint32 argv[3] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = (uint32)text;
+    argv[2] = strlen(text) + 1;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_SET_TEXT);
+}
+
+
+void wgl_label_set_array_text(wgl_obj_t label, const char * array, uint16_t 
size)
+{
+    uint32 argv[3] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = (uint32)array;
+    argv[2] = size;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_SET_ARRAY_TEXT);
+}
+
+
+void wgl_label_set_static_text(wgl_obj_t label, const char * text)
+{
+    uint32 argv[3] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = (uint32)text;
+    argv[2] = strlen(text) + 1;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_SET_STATIC_TEXT);
+}
+
+
+void wgl_label_set_long_mode(wgl_obj_t label, wgl_label_long_mode_t long_mode)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = long_mode;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_SET_LONG_MODE);
+}
+
+
+void wgl_label_set_align(wgl_obj_t label, wgl_label_align_t align)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = align;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_SET_ALIGN);
+}
+
+
+void wgl_label_set_recolor(wgl_obj_t label, bool en)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = en;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_SET_RECOLOR);
+}
+
+
+void wgl_label_set_body_draw(wgl_obj_t label, bool en)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = en;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_SET_BODY_DRAW);
+}
+
+
+void wgl_label_set_anim_speed(wgl_obj_t label, uint16_t anim_speed)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = anim_speed;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_SET_ANIM_SPEED);
+}
+
+
+void wgl_label_set_text_sel_start(wgl_obj_t label, uint16_t index)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = index;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_SET_TEXT_SEL_START);
+}
+
+
+void wgl_label_set_text_sel_end(wgl_obj_t label, uint16_t index)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = index;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_SET_TEXT_SEL_END);
+}
+
+unsigned int wgl_label_get_text_length(wgl_obj_t label)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)label;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_GET_TEXT_LENGTH);
+    return argv[0];
+}
+
+char * wgl_label_get_text(wgl_obj_t label, char *buffer, int buffer_len)
+{
+    uint32 argv[3] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = (uint32)buffer;
+    argv[2] = buffer_len;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_GET_TEXT);
+    return (char *)argv[0];
+}
+
+
+wgl_label_long_mode_t wgl_label_get_long_mode(const wgl_obj_t label)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)label;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_GET_LONG_MODE);
+    return (wgl_label_long_mode_t)argv[0];
+}
+
+
+wgl_label_align_t wgl_label_get_align(const wgl_obj_t label)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)label;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_GET_ALIGN);
+    return (wgl_label_align_t)argv[0];
+}
+
+
+bool wgl_label_get_recolor(const wgl_obj_t label)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)label;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_GET_RECOLOR);
+    return (bool)argv[0];
+}
+
+
+bool wgl_label_get_body_draw(const wgl_obj_t label)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)label;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_GET_BODY_DRAW);
+    return (bool)argv[0];
+}
+
+
+uint16_t wgl_label_get_anim_speed(const wgl_obj_t label)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)label;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_GET_ANIM_SPEED);
+    return (uint16_t)argv[0];
+}
+
+
+void wgl_label_get_letter_pos(const wgl_obj_t label, uint16_t index, 
wgl_point_t * pos)
+{
+    uint32 argv[4] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = index;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_GET_LETTER_POS);
+    pos->x = argv[2];
+    pos->y = argv[3];
+}
+
+
+uint16_t wgl_label_get_letter_on(const wgl_obj_t label, wgl_point_t * pos)
+{
+    uint32 argv[3] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = pos->x;
+    argv[2] = pos->y;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_GET_LETTER_POS);
+    return (uint16_t)argv[0];
+}
+
+
+bool wgl_label_is_char_under_pos(const wgl_obj_t label, wgl_point_t * pos)
+{
+    uint32 argv[3] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = pos->x;
+    argv[2] = pos->y;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_GET_LETTER_POS);
+    return (bool)argv[0];
+}
+
+
+uint16_t wgl_label_get_text_sel_start(const wgl_obj_t label)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)label;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_GET_TEXT_SEL_START);
+    return (uint16_t)argv[0];
+}
+
+
+uint16_t wgl_label_get_text_sel_end(const wgl_obj_t label)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)label;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_GET_TEXT_SEL_END);
+    return (uint16_t)argv[0];
+}
+
+
+void wgl_label_ins_text(wgl_obj_t label, uint32_t pos, const char * txt)
+{
+    uint32 argv[4] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = pos;
+    argv[2] = (uint32)txt;
+    argv[3] = strlen(txt) + 1;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_INS_TEXT);
+}
+
+
+void wgl_label_cut_text(wgl_obj_t label, uint32_t pos, uint32_t cnt)
+{
+    uint32 argv[3] = {0};
+    argv[0] = (uint32)label;
+    argv[1] = pos;
+    argv[2] = cnt;
+    CALL_LABEL_NATIVE_FUNC(LABEL_FUNC_ID_CUT_TEXT);
+}
+
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_list.c 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_list.c
new file mode 100755
index 0000000..ad580b7
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_list.c
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wgl.h"
+#include "native_interface.h"
+
+#include <string.h>
+
+#define ARGC sizeof(argv)/sizeof(uint32)
+#define CALL_LIST_NATIVE_FUNC(id) wasm_list_native_call(id, (int32)argv, ARGC)
+
+
+wgl_obj_t wgl_list_create(wgl_obj_t par, const wgl_obj_t copy)
+{
+    uint32 argv[2] = {0};
+    argv[0] = (uint32)par;
+    argv[1] = (uint32)copy;
+    CALL_LIST_NATIVE_FUNC(LIST_FUNC_ID_CREATE);
+    return (wgl_obj_t)argv[0];
+}
+//
+//
+//void wgl_list_clean(wgl_obj_t obj)
+//{
+//    wasm_list_clean(obj);
+//}
+//
+
+wgl_obj_t wgl_list_add_btn(wgl_obj_t list, const void * img_src, const char * 
txt)
+{
+    (void)img_src; /* doesn't support img src currently */
+
+    uint32 argv[3] = {0};
+    argv[0] = (uint32)list;
+    argv[1] = (uint32)txt;
+    argv[2] = strlen(txt) + 1;
+    CALL_LIST_NATIVE_FUNC(LIST_FUNC_ID_ADD_BTN);
+    return (wgl_obj_t)argv[0];
+}
+//
+//
+//bool wgl_list_remove(const wgl_obj_t list, uint16_t index)
+//{
+//    return wasm_list_remove(list, index);
+//}
+//
+//
+//void wgl_list_set_single_mode(wgl_obj_t list, bool mode)
+//{
+//    wasm_list_set_single_mode(list, mode);
+//}
+//
+//#if LV_USE_GROUP
+//
+//
+//void wgl_list_set_btn_selected(wgl_obj_t list, wgl_obj_t btn)
+//{
+//    wasm_list_set_btn_selected(list, btn);
+//}
+//#endif
+//
+//
+//void wgl_list_set_style(wgl_obj_t list, wgl_list_style_t type, const 
wgl_style_t * style)
+//{
+//    //TODO
+//}
+//
+//
+//bool wgl_list_get_single_mode(wgl_obj_t list)
+//{
+//    return wasm_list_get_single_mode(list);
+//}
+//
+//
+//const char * wgl_list_get_btn_text(const wgl_obj_t btn)
+//{
+//    return wasm_list_get_btn_text(btn);
+//}
+//
+//wgl_obj_t wgl_list_get_btn_label(const wgl_obj_t btn)
+//{
+//    return wasm_list_get_btn_label(btn);
+//}
+//
+//
+//wgl_obj_t wgl_list_get_btn_img(const wgl_obj_t btn)
+//{
+//    return wasm_list_get_btn_img(btn);
+//}
+//
+//
+//wgl_obj_t wgl_list_get_prev_btn(const wgl_obj_t list, wgl_obj_t prev_btn)
+//{
+//    return wasm_list_get_prev_btn(list, prev_btn);
+//}
+//
+//
+//wgl_obj_t wgl_list_get_next_btn(const wgl_obj_t list, wgl_obj_t prev_btn)
+//{
+//    return wasm_list_get_next_btn(list, prev_btn);
+//}
+//
+//
+//int32_t wgl_list_get_btn_index(const wgl_obj_t list, const wgl_obj_t btn)
+//{
+//    return wasm_list_get_btn_index(list, btn);
+//}
+//
+//
+//uint16_t wgl_list_get_size(const wgl_obj_t list)
+//{
+//    return wasm_list_get_size(list);
+//}
+//
+//#if LV_USE_GROUP
+//
+//wgl_obj_t wgl_list_get_btn_selected(const wgl_obj_t list)
+//{
+//    return wasm_list_get_btn_selected(list);
+//}
+//#endif
+//
+//
+//
+//const wgl_style_t * wgl_list_get_style(const wgl_obj_t list, 
wgl_list_style_t type)
+//{
+//    //TODO
+//    return NULL;
+//}
+//
+//
+//void wgl_list_up(const wgl_obj_t list)
+//{
+//    wasm_list_up(list);
+//}
+//
+//void wgl_list_down(const wgl_obj_t list)
+//{
+//    wasm_list_down(list);
+//}
+//
+//
+//void wgl_list_focus(const wgl_obj_t btn, wgl_anim_enable_t anim)
+//{
+//    wasm_list_focus(btn, anim);
+//}
+//
+
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_obj.c 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_obj.c
new file mode 100755
index 0000000..66fe925
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/src/wgl_obj.c
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wgl.h"
+#include "native_interface.h"
+#include <stdlib.h>
+#include <string.h>
+
+#define ARGC sizeof(argv)/sizeof(uint32)
+#define CALL_OBJ_NATIVE_FUNC(id) wasm_obj_native_call(id, (int32)argv, ARGC)
+
+typedef struct _obj_evt_cb {
+    struct _obj_evt_cb *next;
+
+    wgl_obj_t obj;
+
+    wgl_event_cb_t event_cb;
+} obj_evt_cb_t;
+
+static obj_evt_cb_t *g_obj_evt_cb_list = NULL;
+
+/* For lvgl compatible */
+char g_widget_text[100];
+
+wgl_res_t wgl_obj_del(wgl_obj_t obj)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)obj;
+    CALL_OBJ_NATIVE_FUNC(OBJ_FUNC_ID_DEL);
+    return (wgl_res_t)argv[0];
+}
+
+void wgl_obj_del_async(wgl_obj_t obj)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)obj;
+    CALL_OBJ_NATIVE_FUNC(OBJ_FUNC_ID_DEL_ASYNC);
+}
+
+void wgl_obj_clean(wgl_obj_t obj)
+{
+    uint32 argv[1] = {0};
+    argv[0] = (uint32)obj;
+    CALL_OBJ_NATIVE_FUNC(OBJ_FUNC_ID_CLEAN);
+}
+
+void wgl_obj_align(wgl_obj_t obj, const wgl_obj_t base, wgl_align_t align, 
wgl_coord_t x_mod, wgl_coord_t y_mod)
+{
+    uint32 argv[5] = {0};
+    argv[0] = (uint32)obj;
+    argv[1] = (uint32)base;
+    argv[2] = align;
+    argv[3] = x_mod;
+    argv[4] = y_mod;
+    CALL_OBJ_NATIVE_FUNC(OBJ_FUNC_ID_ALIGN);
+}
+
+wgl_event_cb_t wgl_obj_get_event_cb(const wgl_obj_t obj)
+{
+    obj_evt_cb_t *obj_evt_cb = g_obj_evt_cb_list;
+    while (obj_evt_cb != NULL) {
+        if (obj_evt_cb->obj == obj) {
+            return obj_evt_cb->event_cb;
+        }
+        obj_evt_cb = obj_evt_cb->next;
+    }
+
+    return NULL;
+}
+
+void wgl_obj_set_event_cb(wgl_obj_t obj, wgl_event_cb_t event_cb)
+{
+    obj_evt_cb_t *obj_evt_cb;
+    uint32 argv[1] = {0};
+
+    obj_evt_cb = g_obj_evt_cb_list;
+    while (obj_evt_cb) {
+        if (obj_evt_cb->obj == obj) {
+            obj_evt_cb->event_cb = event_cb;
+            return;
+        }
+    }
+
+    obj_evt_cb = (obj_evt_cb_t *)malloc(sizeof(*obj_evt_cb));
+    if (obj_evt_cb == NULL)
+        return;
+
+    memset(obj_evt_cb, 0, sizeof(*obj_evt_cb));
+    obj_evt_cb->obj = obj;
+    obj_evt_cb->event_cb = event_cb;
+
+    if (g_obj_evt_cb_list != NULL) {
+        obj_evt_cb->next = g_obj_evt_cb_list;
+        g_obj_evt_cb_list = obj_evt_cb;
+    } else {
+        g_obj_evt_cb_list = obj_evt_cb;
+    }
+
+    argv[0] = (uint32)obj;
+    CALL_OBJ_NATIVE_FUNC(OBJ_FUNC_ID_SET_EVT_CB);
+}
+
+#include <stdio.h>
+void on_widget_event(wgl_obj_t obj, wgl_event_t event)
+{
+    obj_evt_cb_t *obj_evt_cb = g_obj_evt_cb_list;
+
+    while (obj_evt_cb != NULL) {
+        if (obj_evt_cb->obj == obj) {
+            obj_evt_cb->event_cb(obj, event);
+            return;
+        }
+        obj_evt_cb = obj_evt_cb->next;
+    }
+}
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/wgl.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/wgl.h
new file mode 100755
index 0000000..2f1e794
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/gui/wgl.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_H
+#define WAMR_GRAPHIC_LIBRARY_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "wgl_shared_utils.h" /* shared types between app and native */
+
+#include "inc/wgl_types.h"
+#include "inc/wgl_obj.h"
+#include "inc/wgl_btn.h"
+#include "inc/wgl_cb.h"
+#include "inc/wgl_label.h"
+#include "inc/wgl_list.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_H */
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/sensor/sensor.c 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/sensor/sensor.c
new file mode 100755
index 0000000..53f413b
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/sensor/sensor.c
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "sensor.h"
+#include "native_interface.h"
+
+typedef struct _sensor {
+    struct _sensor * next;
+    char *name;
+    uint32 handle;
+    void (*sensor_callback)(sensor_t, attr_container_t *, void *);
+    void *user_data;
+} sensor;
+
+static sensor_t g_sensors = NULL;
+
+sensor_t sensor_open(const char* name, int index,
+        sensor_event_handler_f sensor_event_handler,
+        void *user_data)
+{
+    uint32 id = wasm_sensor_open((int32)name, index);
+    if (id == -1)
+        return NULL;
+
+    //create local node for holding the user callback
+    sensor_t sensor = (sensor_t) malloc(sizeof(struct _sensor));
+    if (sensor == NULL)
+        return NULL;
+
+    memset(sensor, 0, sizeof(struct _sensor));
+    sensor->handle = id;
+    sensor->name = strdup(name);
+    sensor->user_data = user_data;
+    sensor->sensor_callback = sensor_event_handler;
+
+    if (!sensor->name) {
+        free(sensor);
+        return NULL;
+    }
+
+    if (g_sensors == NULL) {
+        g_sensors = sensor;
+    } else {
+        sensor->next = g_sensors;
+        g_sensors = sensor;
+    }
+
+    return sensor;
+}
+
+bool sensor_config_with_attr_container(sensor_t sensor, attr_container_t *cfg)
+{
+    char *buffer = (char *)cfg;
+    int len = attr_container_get_serialize_length(cfg);
+
+    return wasm_sensor_config_with_attr_container(sensor->handle, 
(int32)buffer, len);
+}
+
+bool sensor_config(sensor_t sensor, int interval, int bit_cfg, int delay)
+{
+    bool ret = wasm_sensor_config(sensor->handle, interval, bit_cfg, delay);
+    return ret;
+}
+
+bool sensor_close(sensor_t sensor)
+{
+    wasm_sensor_close(sensor->handle);
+
+    // remove local node
+    sensor_t s = g_sensors;
+    sensor_t prev = NULL;
+    while (s) {
+        if (s == sensor) {
+            if (prev == NULL) {
+                g_sensors = s->next;
+            } else {
+                prev->next = s->next;
+            }
+            free(s->name);
+            free(s);
+            return true;
+        } else {
+            prev = s;
+            s = s->next;
+        }
+    }
+
+    return false;
+}
+
+/*
+ *
+ *  API for native layer to callback for sensor events
+ *
+ */
+
+void on_sensor_event(uint32 sensor_id, char * buffer, int len)
+{
+    attr_container_t * sensor_data = (attr_container_t *) buffer;
+
+    // lookup the sensor and call the handlers
+    sensor_t s = g_sensors;
+    sensor_t prev = NULL;
+    while (s) {
+        if (s->handle == sensor_id) {
+            s->sensor_callback(s, sensor_data, s->user_data);
+            break;
+        }
+
+        s = s->next;
+    }
+}
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/sensor/sensor.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/sensor/sensor.h
new file mode 100755
index 0000000..7aa4cb6
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/extension/sensor/sensor.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _AEE_SENSOR_H_
+#define _AEE_SENSOR_H_
+
+#include "attr_container.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* board producer define sensor */
+struct _sensor;
+typedef struct _sensor *sensor_t;
+
+/**
+ * @typedef sensor_event_handler_f
+ *
+ * @brief Define the signature of callback function for API
+ * sensor_open() to handle sensor event.
+ *
+ * @param sensor the sensor which the event belong to
+ * @param sensor_event the sensor event
+ * @param user_data user data associated with the sensor which is set when
+ * calling sensor_open().
+ *
+ * @see sensor_open
+ */
+typedef void (*sensor_event_handler_f)(sensor_t sensor,
+                                     attr_container_t *sensor_event,
+                                     void *user_data);
+
+/*
+ *****************
+ * Sensor APIs
+ *****************
+ */
+
+/**
+ * @brief Open sensor.
+ *
+ * @param name sensor name
+ * @param index sensor index
+ * @param handler callback function to handle the sensor event
+ * @param user_data user data
+ *
+ * @return the sensor opened if success, NULL otherwise
+ */
+sensor_t sensor_open(const char* name,
+                     int index,
+                     sensor_event_handler_f handler,
+                     void *user_data);
+
+/**
+ * @brief Configure sensor with interval/bit_cfg/delay values.
+ *
+ * @param sensor the sensor to be configured
+ * @param interval sensor event interval
+ * @param bit_cfg sensor bit config
+ * @param delay sensor delay
+ *
+ * @return true if success, false otherwise
+ */
+bool sensor_config(sensor_t sensor, int interval, int bit_cfg, int delay);
+
+/**
+ * @brief Configure sensor with attr_container_t object.
+ *
+ * @param sensor the sensor to be configured
+ * @param cfg the configuration
+ *
+ * @return true if success, false otherwise
+ */
+bool sensor_config_with_attr_container(sensor_t sensor, attr_container_t *cfg);
+
+/**
+ * @brief Close sensor.
+ *
+ * @param sensor the sensor to be closed
+ *
+ * @return true if success, false otherwise
+ */
+bool sensor_close(sensor_t sensor);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/wamr/core/iwasm/lib/app-libs/libc/lib_base.h 
b/scriptsrcs/wamr/core/iwasm/lib/app-libs/libc/lib_base.h
new file mode 100644
index 0000000..ce4e443
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/app-libs/libc/lib_base.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LIB_BASE_H_
+#define _LIB_BASE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void *malloc(size_t size);
+void *calloc(size_t n, size_t size);
+void free(void *ptr);
+int memcmp(const void *s1, const void *s2, size_t n);
+void *memcpy(void *dest, const void *src, size_t n);
+void *memmove(void *dest, const void *src, size_t n);
+void *memset(void *s, int c, size_t n);
+int putchar(int c);
+int snprintf(char *str, size_t size, const char *format, ...);
+int sprintf(char *str, const char *format, ...);
+char *strchr(const char *s, int c);
+int strcmp(const char *s1, const char *s2);
+char *strcpy(char *dest, const char *src);
+size_t strlen(const char *s);
+int strncmp(const char * str1, const char * str2, size_t n);
+char *strncpy(char *dest, const char *src, unsigned long n);
+int clock_gettime(clockid_t clk_id, struct timespec *tp);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native-interface/attr_container.c 
b/scriptsrcs/wamr/core/iwasm/lib/native-interface/attr_container.c
new file mode 100755
index 0000000..535beb6
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native-interface/attr_container.c
@@ -0,0 +1,841 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "attr_container.h"
+
+typedef union jvalue {
+    bool z;
+    int8_t b;
+    uint16_t c;
+    int16_t s;
+    int32_t i;
+    int64_t j;
+    float f;
+    double d;
+} jvalue;
+
+#define bh_memcpy_s(dest, dlen, src, slen) do {                         \
+    int _ret = slen == 0 ? 0 : b_memcpy_s (dest, dlen, src, slen);      \
+    (void)_ret;                                                         \
+  } while (0)
+
+static inline int16_t get_int16(const char *buf)
+{
+    int16_t ret;
+    bh_memcpy_s(&ret, sizeof(int16_t), buf, sizeof(int16_t));
+    return ret;
+}
+
+static inline uint16_t get_uint16(const char *buf)
+{
+    return get_int16(buf);
+}
+
+static inline int32_t get_int32(const char *buf)
+{
+    int32_t ret;
+    bh_memcpy_s(&ret, sizeof(int32_t), buf, sizeof(int32_t));
+    return ret;
+}
+
+static inline uint32_t get_uint32(const char *buf)
+{
+    return get_int32(buf);
+}
+
+static inline int64_t get_int64(const char *buf)
+{
+    int64_t ret;
+    bh_memcpy_s(&ret, sizeof(int64_t), buf, sizeof(int64_t));
+    return ret;
+}
+
+static inline uint64_t get_uint64(const char *buf)
+{
+    return get_int64(buf);
+}
+
+static inline void set_int16(char *buf, int16_t v)
+{
+    bh_memcpy_s(buf, sizeof(int16_t), &v, sizeof(int16_t));
+}
+
+static inline void set_uint16(char *buf, uint16_t v)
+{
+    bh_memcpy_s(buf, sizeof(uint16_t), &v, sizeof(uint16_t));
+}
+
+static inline void set_int32(char *buf, int32_t v)
+{
+    bh_memcpy_s(buf, sizeof(int32_t), &v, sizeof(int32_t));
+}
+
+static inline void set_uint32(char *buf, uint32_t v)
+{
+    bh_memcpy_s(buf, sizeof(uint32_t), &v, sizeof(uint32_t));
+}
+
+static inline void set_int64(char *buf, int64_t v)
+{
+    bh_memcpy_s(buf, sizeof(int64_t), &v, sizeof(int64_t));
+}
+
+static inline void set_uint64(char *buf, uint64_t v)
+{
+    bh_memcpy_s(buf, sizeof(uint64_t), &v, sizeof(uint64_t));
+}
+
+char*
+attr_container_get_attr_begin(const attr_container_t *attr_cont,
+        uint32_t *p_total_length, uint16_t *p_attr_num)
+{
+    char *p = (char*) attr_cont->buf;
+    uint16_t str_len, attr_num;
+    uint32_t total_length;
+
+    /* skip total length */
+    total_length = get_uint32(p);
+    p += sizeof(uint32_t);
+    if (!total_length)
+        return NULL;
+
+    /* tag length */
+    str_len = get_uint16(p);
+    p += sizeof(uint16_t);
+    if (!str_len)
+        return NULL;
+
+    /* tag content */
+    p += str_len;
+    if (p - attr_cont->buf >= total_length)
+        return NULL;
+
+    /* attribute num */
+    attr_num = get_uint16(p);
+    p += sizeof(uint16_t);
+    if (p - attr_cont->buf >= total_length)
+        return NULL;
+
+    if (p_total_length)
+        *p_total_length = total_length;
+
+    if (p_attr_num)
+        *p_attr_num = attr_num;
+
+    /* first attribute */
+    return p;
+}
+
+static char*
+attr_container_get_attr_next(const char *curr_attr)
+{
+    char *p = (char*) curr_attr;
+    uint8_t type;
+
+    /* key length and key */
+    p += sizeof(uint16_t) + get_uint16(p);
+    type = *p++;
+
+    /* Short type to Boolean type */
+    if (type >= ATTR_TYPE_SHORT && type <= ATTR_TYPE_BOOLEAN) {
+        p += 1 << (type & 3);
+        return p;
+    }
+    /* String type */
+    else if (type == ATTR_TYPE_STRING) {
+        p += sizeof(uint16_t) + get_uint16(p);
+        return p;
+    }
+    /* ByteArray type */
+    else if (type == ATTR_TYPE_BYTEARRAY) {
+        p += sizeof(uint32_t) + get_uint32(p);
+        return p;
+    }
+
+    return NULL;
+}
+
+static const char*
+attr_container_find_attr(const attr_container_t *attr_cont, const char *key)
+{
+    uint32_t total_length;
+    uint16_t str_len, attr_num, i;
+    const char *p = attr_cont->buf;
+
+    if (!key)
+        return NULL;
+
+    if (!(p = attr_container_get_attr_begin(attr_cont, &total_length, 
&attr_num)))
+        return NULL;
+
+    for (i = 0; i < attr_num; i++) {
+        /* key length */
+        if (!(str_len = get_uint16(p)))
+            return NULL;
+
+        if (str_len == strlen(key) + 1
+                && memcmp(p + sizeof(uint16_t), key, str_len) == 0) {
+            if (p + sizeof(uint16_t) + str_len - attr_cont->buf >= 
total_length)
+                return NULL;
+            return p;
+        }
+
+        if (!(p = attr_container_get_attr_next(p)))
+            return NULL;
+    }
+
+    return NULL;
+}
+
+char*
+attr_container_get_attr_end(const attr_container_t *attr_cont)
+{
+    uint32_t total_length;
+    uint16_t attr_num, i;
+    char *p;
+
+    if (!(p = attr_container_get_attr_begin(attr_cont, &total_length, 
&attr_num)))
+        return NULL;
+
+    for (i = 0; i < attr_num; i++)
+        if (!(p = attr_container_get_attr_next(p)))
+            return NULL;
+
+    return p;
+}
+
+static char*
+attr_container_get_msg_end(attr_container_t *attr_cont)
+{
+    char *p = attr_cont->buf;
+    return p + get_uint32(p);
+}
+
+uint16_t attr_container_get_attr_num(const attr_container_t *attr_cont)
+{
+    uint16_t str_len;
+    /* skip total length */
+    const char *p = attr_cont->buf + sizeof(uint32_t);
+
+    str_len = get_uint16(p);
+    /* skip tag length and tag */
+    p += sizeof(uint16_t) + str_len;
+
+    /* attribute num */
+    return get_uint16(p);
+}
+
+static void attr_container_inc_attr_num(attr_container_t *attr_cont)
+{
+    uint16_t str_len, attr_num;
+    /* skip total length */
+    char *p = attr_cont->buf + sizeof(uint32_t);
+
+    str_len = get_uint16(p);
+    /* skip tag length and tag */
+    p += sizeof(uint16_t) + str_len;
+
+    /* attribute num */
+    attr_num = get_uint16(p) + 1;
+    set_uint16(p, attr_num);
+}
+
+attr_container_t *
+attr_container_create(const char *tag)
+{
+    attr_container_t *attr_cont;
+    int length, tag_length;
+    char *p;
+
+    tag_length = tag ? strlen(tag) + 1 : 1;
+    length = offsetof(attr_container_t, buf) +
+    /* total length + tag length + tag + reserved 100 bytes */
+    sizeof(uint32_t) + sizeof(uint16_t) + tag_length + 100;
+
+    if (!(attr_cont = attr_container_malloc(length))) {
+        attr_container_printf(
+                "Create attr_container failed: allocate memory failed.\r\n");
+        return NULL;
+    }
+
+    memset(attr_cont, 0, length);
+    p = attr_cont->buf;
+
+    /* total length */
+    set_uint32(p, length - offsetof(attr_container_t, buf));
+    p += 4;
+
+    /* tag length, tag */
+    set_uint16(p, tag_length);
+    p += 2;
+    if (tag)
+        bh_memcpy_s(p, tag_length, tag, tag_length);
+
+    return attr_cont;
+}
+
+void attr_container_destroy(const attr_container_t *attr_cont)
+{
+    if (attr_cont)
+        attr_container_free((char*) attr_cont);
+}
+
+static bool check_set_attr(attr_container_t **p_attr_cont, const char *key)
+{
+    uint32_t flags;
+
+    if (!p_attr_cont || !*p_attr_cont || !key || strlen(key) == 0) {
+        attr_container_printf(
+                "Set attribute failed: invalid input arguments.\r\n");
+        return false;
+    }
+
+    flags = get_uint32((char*) *p_attr_cont);
+    if (flags & ATTR_CONT_READONLY_SHIFT) {
+        attr_container_printf(
+                "Set attribute failed: attribute container is readonly.\r\n");
+        return false;
+    }
+
+    return true;
+}
+
+bool attr_container_set_attr(attr_container_t **p_attr_cont, const char *key,
+        int type, const void *value, int value_length)
+{
+    attr_container_t *attr_cont, *attr_cont1;
+    uint16_t str_len;
+    uint32_t total_length, attr_len;
+    char *p, *p1, *attr_end, *msg_end, *attr_buf;
+
+    if (!check_set_attr(p_attr_cont, key)) {
+        return false;
+    }
+
+    attr_cont = *p_attr_cont;
+    p = attr_cont->buf;
+    total_length = get_uint32(p);
+
+    if (!(attr_end = attr_container_get_attr_end(attr_cont))) {
+        attr_container_printf("Set attr failed: get attr end failed.\r\n");
+        return false;
+    }
+
+    msg_end = attr_container_get_msg_end(attr_cont);
+
+    /* key len + key + '\0' + type */
+    attr_len = sizeof(uint16_t) + strlen(key) + 1 + 1;
+    if (type >= ATTR_TYPE_SHORT && type <= ATTR_TYPE_BOOLEAN)
+        attr_len += 1 << (type & 3);
+    else if (type == ATTR_TYPE_STRING)
+        attr_len += sizeof(uint16_t) + value_length;
+    else if (type == ATTR_TYPE_BYTEARRAY)
+        attr_len += sizeof(uint32_t) + value_length;
+
+    if (!(p = attr_buf = attr_container_malloc(attr_len))) {
+        attr_container_printf("Set attr failed: allocate memory failed.\r\n");
+        return false;
+    }
+
+    /* Set the attr buf */
+    str_len = strlen(key) + 1;
+    set_uint16(p, str_len);
+    p += sizeof(uint16_t);
+    bh_memcpy_s(p, str_len, key, str_len);
+    p += str_len;
+
+    *p++ = type;
+    if (type >= ATTR_TYPE_SHORT && type <= ATTR_TYPE_BOOLEAN)
+        bh_memcpy_s(p, 1 << (type & 3), value, 1 << (type & 3));
+    else if (type == ATTR_TYPE_STRING) {
+        set_uint16(p, value_length);
+        p += sizeof(uint16_t);
+        bh_memcpy_s(p, value_length, value, value_length);
+    } else if (type == ATTR_TYPE_BYTEARRAY) {
+        set_uint32(p, value_length);
+        p += sizeof(uint32_t);
+        bh_memcpy_s(p, value_length, value, value_length);
+    }
+
+    if ((p = (char*) attr_container_find_attr(attr_cont, key))) {
+        /* key found */
+        p1 = attr_container_get_attr_next(p);
+
+        if (p1 - p == attr_len) {
+            bh_memcpy_s(p, attr_len, attr_buf, attr_len);
+            attr_container_free(attr_buf);
+            return true;
+        }
+
+        if (p1 - p + msg_end - attr_end >= attr_len) {
+            memmove(p, p1, attr_end - p1);
+            bh_memcpy_s(p + (attr_end - p1), attr_len, attr_buf, attr_len);
+            attr_container_free(attr_buf);
+            return true;
+        }
+
+        total_length += attr_len + 100;
+        if (!(attr_cont1 = attr_container_malloc(
+                offsetof(attr_container_t, buf) + total_length))) {
+            attr_container_printf(
+                    "Set attr failed: allocate memory failed.\r\n");
+            attr_container_free(attr_buf);
+            return false;
+        }
+
+        bh_memcpy_s(attr_cont1, p - (char* )attr_cont, attr_cont,
+                p - (char* )attr_cont);
+        bh_memcpy_s((char* )attr_cont1 + (unsigned )(p - (char* )attr_cont),
+                attr_end - p1, p1, attr_end - p1);
+        bh_memcpy_s(
+                (char* )attr_cont1 + (unsigned )(p - (char* )attr_cont)
+                        + (unsigned )(attr_end - p1), attr_len, attr_buf,
+                attr_len);
+        p = attr_cont1->buf;
+        set_uint32(p, total_length);
+        *p_attr_cont = attr_cont1;
+        /* Free original buffer */
+        attr_container_free(attr_cont);
+        attr_container_free(attr_buf);
+        return true;
+    } else {
+        /* key not found */
+        if (msg_end - attr_end >= attr_len) {
+            bh_memcpy_s(attr_end, msg_end - attr_end, attr_buf, attr_len);
+            attr_container_inc_attr_num(attr_cont);
+            attr_container_free(attr_buf);
+            return true;
+        }
+
+        total_length += attr_len + 100;
+        if (!(attr_cont1 = attr_container_malloc(
+                offsetof(attr_container_t, buf) + total_length))) {
+            attr_container_printf(
+                    "Set attr failed: allocate memory failed.\r\n");
+            attr_container_free(attr_buf);
+            return false;
+        }
+
+        bh_memcpy_s(attr_cont1, attr_end - (char* )attr_cont, attr_cont,
+                attr_end - (char* )attr_cont);
+        bh_memcpy_s(
+                (char* )attr_cont1 + (unsigned )(attr_end - (char* )attr_cont),
+                attr_len, attr_buf, attr_len);
+        attr_container_inc_attr_num(attr_cont1);
+        p = attr_cont1->buf;
+        set_uint32(p, total_length);
+        *p_attr_cont = attr_cont1;
+        /* Free original buffer */
+        attr_container_free(attr_cont);
+        attr_container_free(attr_buf);
+        return true;
+    }
+
+    return false;
+}
+
+bool attr_container_set_short(attr_container_t **p_attr_cont, const char *key,
+        short value)
+{
+    return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_SHORT, &value, 
2);
+}
+
+bool attr_container_set_int(attr_container_t **p_attr_cont, const char *key,
+        int value)
+{
+    return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_INT, &value, 4);
+}
+
+bool attr_container_set_int64(attr_container_t **p_attr_cont, const char *key,
+        int64_t value)
+{
+    return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_INT64, &value, 
8);
+}
+
+bool attr_container_set_byte(attr_container_t **p_attr_cont, const char *key,
+        int8_t value)
+{
+    return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_BYTE, &value, 
1);
+}
+
+bool attr_container_set_uint16(attr_container_t **p_attr_cont, const char *key,
+        uint16_t value)
+{
+    return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_UINT16, &value,
+            2);
+}
+
+bool attr_container_set_float(attr_container_t **p_attr_cont, const char *key,
+        float value)
+{
+    return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_FLOAT, &value, 
4);
+}
+
+bool attr_container_set_double(attr_container_t **p_attr_cont, const char *key,
+        double value)
+{
+    return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_DOUBLE, &value,
+            8);
+}
+
+bool attr_container_set_bool(attr_container_t **p_attr_cont, const char *key,
+        bool value)
+{
+    int8_t value1 = value ? 1 : 0;
+    return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_BOOLEAN, 
&value1,
+            1);
+}
+
+bool attr_container_set_string(attr_container_t **p_attr_cont, const char *key,
+        const char *value)
+{
+    if (!value) {
+        attr_container_printf("Set attr failed: invald input arguments.\r\n");
+        return false;
+    }
+    return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_STRING, value,
+            strlen(value) + 1);;
+}
+
+bool attr_container_set_bytearray(attr_container_t **p_attr_cont,
+        const char *key, const int8_t *value, unsigned length)
+{
+    if (!value) {
+        attr_container_printf("Set attr failed: invald input arguments.\r\n");
+        return false;
+    }
+    return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_BYTEARRAY, 
value,
+            length);;
+}
+
+static const char*
+attr_container_get_attr(const attr_container_t *attr_cont, const char *key)
+{
+    const char *attr_addr;
+
+    if (!attr_cont || !key) {
+        attr_container_printf(
+                "Get attribute failed: invalid input arguments.\r\n");
+        return NULL;
+    }
+
+    if (!(attr_addr = attr_container_find_attr(attr_cont, key))) {
+        attr_container_printf("Get attribute failed: lookup key failed.\r\n");
+        return false;
+    }
+
+    /* key len + key + '\0' */
+    return attr_addr + 2 + strlen(key) + 1;
+}
+
+#define TEMPLATE_ATTR_BUF_TO_VALUE(attr, key, var_name) do {\
+    jvalue val;                                             \
+    const char *addr = attr_container_get_attr(attr, key);  \
+    uint8_t type;                                           \
+    if (!addr)                                              \
+      return 0;                                             \
+    val.j = 0;                                              \
+    type = *(uint8_t*)addr++;                               \
+    switch (type) {                                         \
+      case ATTR_TYPE_SHORT:                                 \
+      case ATTR_TYPE_INT:                                   \
+      case ATTR_TYPE_INT64:                                 \
+      case ATTR_TYPE_BYTE:                                  \
+      case ATTR_TYPE_UINT16:                                \
+      case ATTR_TYPE_FLOAT:                                 \
+      case ATTR_TYPE_DOUBLE:                                \
+      case ATTR_TYPE_BOOLEAN:                               \
+        bh_memcpy_s(&val, sizeof(val.var_name), addr, 1 << (type & 3)); \
+        break;                                              \
+      case ATTR_TYPE_STRING:                                \
+      {                                                     \
+        unsigned len= get_uint16(addr);                     \
+        addr += 2;                                          \
+        if (len > sizeof(val.var_name))                     \
+          len = sizeof(val.var_name);                       \
+        bh_memcpy_s(&val.var_name, sizeof(val.var_name), addr, len); \
+        break;                                              \
+      }                                                     \
+      case ATTR_TYPE_BYTEARRAY:                             \
+      {                                                     \
+        unsigned len= get_uint32(addr);                     \
+        addr += 4;                                          \
+        if (len > sizeof(val.var_name))                     \
+          len = sizeof(val.var_name);                       \
+        bh_memcpy_s(&val.var_name, sizeof(val.var_name), addr, len); \
+        break;                                              \
+      }                                                     \
+    }                                                       \
+    return val.var_name;                                    \
+  } while (0)
+
+short attr_container_get_as_short(const attr_container_t *attr_cont,
+        const char *key)
+{
+    TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, s);
+}
+
+int attr_container_get_as_int(const attr_container_t *attr_cont,
+        const char *key)
+{
+    TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, i);
+}
+
+int64_t attr_container_get_as_int64(const attr_container_t *attr_cont,
+        const char *key)
+{
+    TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, j);
+}
+
+int8_t attr_container_get_as_byte(const attr_container_t *attr_cont,
+        const char *key)
+{
+    TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, b);
+}
+
+uint16_t attr_container_get_as_uint16(const attr_container_t *attr_cont,
+        const char *key)
+{
+    TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, s);
+}
+
+float attr_container_get_as_float(const attr_container_t *attr_cont,
+        const char *key)
+{
+    TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, f);
+}
+
+double attr_container_get_as_double(const attr_container_t *attr_cont,
+        const char *key)
+{
+    TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, d);
+}
+
+bool attr_container_get_as_bool(const attr_container_t *attr_cont,
+        const char *key)
+{
+    TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, z);
+}
+
+const int8_t*
+attr_container_get_as_bytearray(const attr_container_t *attr_cont,
+        const char *key, unsigned *array_length)
+{
+    const char *addr = attr_container_get_attr(attr_cont, key);
+    uint8_t type;
+    uint32_t length;
+
+    if (!addr)
+        return NULL;
+
+    if (!array_length) {
+        attr_container_printf("Get attribute failed: invalid input 
arguments.");
+        return NULL;
+    }
+
+    type = *(uint8_t*) addr++;
+    switch (type) {
+    case ATTR_TYPE_SHORT:
+    case ATTR_TYPE_INT:
+    case ATTR_TYPE_INT64:
+    case ATTR_TYPE_BYTE:
+    case ATTR_TYPE_UINT16:
+    case ATTR_TYPE_FLOAT:
+    case ATTR_TYPE_DOUBLE:
+    case ATTR_TYPE_BOOLEAN:
+        length = 1 << (type & 3);
+        break;
+    case ATTR_TYPE_STRING:
+        length = get_uint16(addr);
+        addr += 2;
+        break;
+    case ATTR_TYPE_BYTEARRAY:
+        length = get_uint32(addr);
+        addr += 4;
+        break;
+    default:
+        return NULL;
+    }
+
+    *array_length = length;
+    return (const int8_t*) addr;
+}
+
+char*
+attr_container_get_as_string(const attr_container_t *attr_cont, const char 
*key)
+{
+    unsigned array_length;
+    return (char*) attr_container_get_as_bytearray(attr_cont, key,
+            &array_length);
+}
+
+const char*
+attr_container_get_tag(const attr_container_t *attr_cont)
+{
+    return attr_cont ?
+            attr_cont->buf + sizeof(uint32_t) + sizeof(uint16_t) : NULL;
+}
+
+bool attr_container_contain_key(const attr_container_t *attr_cont,
+        const char *key)
+{
+    if (!attr_cont || !key || !strlen(key)) {
+        attr_container_printf(
+                "Check contain key failed: invalid input arguments.\r\n");
+        return false;
+    }
+    return attr_container_find_attr(attr_cont, key) ? true : false;
+}
+
+unsigned int attr_container_get_serialize_length(
+        const attr_container_t *attr_cont)
+{
+    const char *p;
+
+    if (!attr_cont) {
+        attr_container_printf(
+                "Get container serialize length failed: invalid input 
arguments.\r\n");
+        return 0;
+    }
+
+    p = attr_cont->buf;
+    return sizeof(uint16_t) + get_uint32(p);
+}
+
+bool attr_container_serialize(char *buf, const attr_container_t *attr_cont)
+{
+    const char *p;
+    uint16_t flags;
+    uint32_t length;
+
+    if (!buf || !attr_cont) {
+        attr_container_printf(
+                "Container serialize failed: invalid input arguments.\r\n");
+        return false;
+    }
+
+    p = attr_cont->buf;
+    length = sizeof(uint16_t) + get_uint32(p);
+    bh_memcpy_s(buf, length, attr_cont, length);
+    /* Set readonly */
+    flags = get_uint16((const char*) attr_cont);
+    set_uint16(buf, flags | (1 << ATTR_CONT_READONLY_SHIFT));
+
+    return true;
+}
+
+bool attr_container_is_constant(const attr_container_t* attr_cont)
+{
+    uint16_t flags;
+
+    if (!attr_cont) {
+        attr_container_printf(
+                "Container check const: invalid input arguments.\r\n");
+        return false;
+    }
+
+    flags = get_uint16((const char*) attr_cont);
+    return (flags & (1 << ATTR_CONT_READONLY_SHIFT)) ? true : false;
+}
+
+void attr_container_dump(const attr_container_t *attr_cont)
+{
+    uint32_t total_length;
+    uint16_t attr_num, i, type;
+    const char *p, *tag, *key;
+    jvalue value;
+
+    if (!attr_cont)
+        return;
+
+    tag = attr_container_get_tag(attr_cont);
+    if (!tag)
+        return;
+
+    attr_container_printf("Attribute container dump:\n");
+    attr_container_printf("Tag: %s\n", tag);
+
+    p = attr_container_get_attr_begin(attr_cont, &total_length, &attr_num);
+    if (!p)
+        return;
+
+    attr_container_printf("Attribute list:\n");
+    for (i = 0; i < attr_num; i++) {
+        key = p + 2;
+        /* Skip key len and key */
+        p += 2 + get_uint16(p);
+        type = *p++;
+        attr_container_printf("  key: %s", key);
+
+        switch (type) {
+        case ATTR_TYPE_SHORT:
+            bh_memcpy_s(&value.s, sizeof(int16_t), p, sizeof(int16_t));
+            attr_container_printf(", type: short, value: 0x%x\n",
+                    value.s & 0xFFFF);
+            p += 2;
+            break;
+        case ATTR_TYPE_INT:
+            bh_memcpy_s(&value.i, sizeof(int32_t), p, sizeof(int32_t));
+            attr_container_printf(", type: int, value: 0x%x\n", value.i);
+            p += 4;
+            break;
+        case ATTR_TYPE_INT64:
+            bh_memcpy_s(&value.j, sizeof(uint64_t), p, sizeof(uint64_t));
+            attr_container_printf(", type: int64, value: 0x%llx\n", (long long 
unsigned int)(value.j));
+            p += 8;
+            break;
+        case ATTR_TYPE_BYTE:
+            bh_memcpy_s(&value.b, 1, p, 1);
+            attr_container_printf(", type: byte, value: 0x%x\n",
+                    value.b & 0xFF);
+            p++;
+            break;
+        case ATTR_TYPE_UINT16:
+            bh_memcpy_s(&value.c, sizeof(uint16_t), p, sizeof(uint16_t));
+            attr_container_printf(", type: uint16, value: 0x%x\n", value.c);
+            p += 2;
+            break;
+        case ATTR_TYPE_FLOAT:
+            bh_memcpy_s(&value.f, sizeof(float), p, sizeof(float));
+            attr_container_printf(", type: float, value: %f\n", value.f);
+            p += 4;
+            break;
+        case ATTR_TYPE_DOUBLE:
+            bh_memcpy_s(&value.d, sizeof(double), p, sizeof(double));
+            attr_container_printf(", type: double, value: %f\n", value.d);
+            p += 8;
+            break;
+        case ATTR_TYPE_BOOLEAN:
+            bh_memcpy_s(&value.z, 1, p, 1);
+            attr_container_printf(", type: bool, value: 0x%x\n", value.z);
+            p++;
+            break;
+        case ATTR_TYPE_STRING:
+            attr_container_printf(", type: string, value: %s\n",
+                    p + sizeof(uint16_t));
+            p += sizeof(uint16_t) + get_uint16(p);
+            break;
+        case ATTR_TYPE_BYTEARRAY:
+            attr_container_printf(", type: byte array, length: %d\n",
+                    get_uint32(p));
+            p += sizeof(uint32_t) + get_uint32(p);
+            break;
+        }
+    }
+
+    attr_container_printf("\n");
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native-interface/attr_container.h 
b/scriptsrcs/wamr/core/iwasm/lib/native-interface/attr_container.h
new file mode 100755
index 0000000..2b093bf
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native-interface/attr_container.h
@@ -0,0 +1,436 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _ATTR_CONTAINER_H_
+#define _ATTR_CONTAINER_H_
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include "bh_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Attribute type */
+enum {
+    ATTR_TYPE_BEGIN = 1,
+    ATTR_TYPE_SHORT = ATTR_TYPE_BEGIN,
+    ATTR_TYPE_INT,
+    ATTR_TYPE_INT64,
+    ATTR_TYPE_BYTE,
+    ATTR_TYPE_UINT16,
+    ATTR_TYPE_FLOAT,
+    ATTR_TYPE_DOUBLE,
+    ATTR_TYPE_BOOLEAN,
+    ATTR_TYPE_STRING,
+    ATTR_TYPE_BYTEARRAY,
+    ATTR_TYPE_END = ATTR_TYPE_BYTEARRAY
+};
+
+#define ATTR_CONT_READONLY_SHIFT    2
+
+typedef struct attr_container {
+    /* container flag:
+     * bit0, bit1 denote the implemenation algorithm, 00: buffer, 01: link list
+     * bit2 denotes the readonly flag: 1 is readonly and attr cannot be set
+     */
+    char flags[2];
+    /**
+     * Buffer format
+     * for buffer implementation:
+     *   buf length (4 bytes)
+     *   tag length (2 bytes)
+     *   tag
+     *   attr num (2bytes)
+     *   attr[0..n-1]:
+     *     attr key length (2 bytes)
+     *     attr type (1byte)
+     *     attr value (length depends on attr type)
+     */
+    char buf[1];
+} attr_container_t;
+
+/**
+ * Create attribute container
+ *
+ * @param tag tag of current attribute container
+ *
+ * @return the created attribute container, NULL if failed
+ */
+attr_container_t *
+attr_container_create(const char *tag);
+
+/**
+ * Destroy attribute container
+ *
+ * @param attr_cont the attribute container to destroy
+ */
+void
+attr_container_destroy(const attr_container_t *attr_cont);
+
+/**
+ * Set short attribute in attribute container
+ *
+ * @param p_attr_cont pointer to attribute container to set attribute, and
+ * return the new attribute container if it is re-created
+ * @param key the attribute key
+ * @param value the attribute value
+ *
+ * @return true if success, false otherwise
+ */
+bool
+attr_container_set_short(attr_container_t **p_attr_cont, const char *key,
+        short value);
+
+/**
+ * Set int attribute in attribute container
+ *
+ * @param p_attr_cont pointer to attribute container to set attribute, and
+ * return the new attribute container if it is re-created
+ * @param key the attribute key
+ * @param value the attribute value
+ *
+ * @return true if success, false otherwise
+ */
+bool
+attr_container_set_int(attr_container_t **p_attr_cont, const char *key,
+        int value);
+
+/**
+ * Set int64 attribute in attribute container
+ *
+ * @param p_attr_cont pointer to attribute container to set attribute, and
+ * return the new attribute container if it is re-created
+ * @param key the attribute key
+ * @param value the attribute value
+ *
+ * @return true if success, false otherwise
+ */
+bool
+attr_container_set_int64(attr_container_t **p_attr_cont, const char *key,
+        int64_t value);
+
+/**
+ * Set byte attribute in attribute container
+ *
+ * @param p_attr_cont pointer to attribute container to set attribute, and
+ * return the new attribute container if it is re-created
+ * @param key the attribute key
+ * @param value the attribute value
+ *
+ * @return true if success, false otherwise
+ */
+bool
+attr_container_set_byte(attr_container_t **p_attr_cont, const char *key,
+        int8_t value);
+
+/**
+ * Set uint16 attribute in attribute container
+ *
+ * @param p_attr_cont pointer to attribute container to set attribute, and
+ * return the new attribute container if it is re-created
+ * @param key the attribute key
+ * @param value the attribute value
+ *
+ * @return true if success, false otherwise
+ */
+bool
+attr_container_set_uint16(attr_container_t **p_attr_cont, const char *key,
+        uint16_t value);
+
+/**
+ * Set float attribute in attribute container
+ *
+ * @param p_attr_cont pointer to attribute container to set attribute, and
+ * return the new attribute container if it is re-created
+ * @param key the attribute key
+ * @param value the attribute value
+ *
+ * @return true if success, false otherwise
+ */
+bool
+attr_container_set_float(attr_container_t **p_attr_cont, const char *key,
+        float value);
+
+/**
+ * Set double attribute in attribute container
+ *
+ * @param p_attr_cont pointer to attribute container to set attribute, and
+ * return the new attribute container if it is re-created
+ * @param key the attribute key
+ * @param value the attribute value
+ *
+ * @return true if success, false otherwise
+ */
+bool
+attr_container_set_double(attr_container_t **p_attr_cont, const char *key,
+        double value);
+
+/**
+ * Set bool attribute in attribute container
+ *
+ * @param p_attr_cont pointer to attribute container to set attribute, and
+ * return the new attribute container if it is re-created
+ * @param key the attribute key
+ * @param value the attribute value
+ *
+ * @return true if success, false otherwise
+ */
+bool
+attr_container_set_bool(attr_container_t **p_attr_cont, const char *key,
+        bool value);
+
+/**
+ * Set string attribute in attribute container
+ *
+ * @param p_attr_cont pointer to attribute container to set attribute, and
+ * return the new attribute container if it is re-created
+ * @param key the attribute key
+ * @param value the attribute value
+ *
+ * @return true if success, false otherwise
+ */
+bool
+attr_container_set_string(attr_container_t **p_attr_cont, const char *key,
+        const char *value);
+
+/**
+ * Set bytearray attribute in attribute container
+ *
+ * @param p_attr_cont pointer to attribute container to set attribute, and
+ * return the new attribute container if it is re-created
+ * @param key the attribute key
+ * @param value the bytearray buffer
+ * @param length the bytearray length
+ *
+ * @return true if success, false otherwise
+ */
+bool
+attr_container_set_bytearray(attr_container_t **p_attr_cont, const char *key,
+        const int8_t *value, unsigned length);
+
+/**
+ * Get tag of current attribute container
+ *
+ * @param attr_cont the attribute container
+ *
+ * @return tag of current attribute container
+ */
+const char*
+attr_container_get_tag(const attr_container_t *attr_cont);
+
+/**
+ * Get attribute number of current attribute container
+ *
+ * @param attr_cont the attribute container
+ *
+ * @return attribute number of current attribute container
+ */
+uint16_t
+attr_container_get_attr_num(const attr_container_t *attr_cont);
+
+/**
+ * Whether the attribute container contains an attribute key.
+ *
+ * @param attr_cont the attribute container
+ * @param key the attribute key
+ *
+ * @return true if key is contained in message, false otherwise
+ */
+bool
+attr_container_contain_key(const attr_container_t *attr_cont, const char *key);
+
+/**
+ * Get attribute from attribute container and return it as short value,
+ * return 0 if attribute isn't found in message.
+ *
+ * @param attr_cont the attribute container
+ * @param key the attribute key
+ *
+ * @return the short value of the attribute, 0 if key isn't found
+ */
+short
+attr_container_get_as_short(const attr_container_t *attr_cont, const char 
*key);
+
+/**
+ * Get attribute from attribute container and return it as int value,
+ * return 0 if attribute isn't found in message.
+ *
+ * @param attr_cont the attribute container
+ * @param key the attribute key
+ *
+ * @return the int value of the attribute, 0 if key isn't found
+ */
+int
+attr_container_get_as_int(const attr_container_t *attr_cont, const char *key);
+
+/**
+ * Get attribute from attribute container and return it as int64 value,
+ * return 0 if attribute isn't found in attribute container.
+ *
+ * @param attr_cont the attribute container
+ * @param key the attribute key
+ *
+ * @return the long value of the attribute, 0 if key isn't found
+ */
+int64_t
+attr_container_get_as_int64(const attr_container_t *attr_cont, const char 
*key);
+
+/**
+ * Get attribute from attribute container and return it as byte value,
+ * return 0 if attribute isn't found in attribute container.
+ *
+ * @param attr_cont the attribute container
+ * @param key the attribute key
+ *
+ * @return the byte value of the attribute, 0 if key isn't found
+ */
+int8_t
+attr_container_get_as_byte(const attr_container_t *attr_cont, const char *key);
+
+/**
+ * Get attribute from attribute container and return it as uint16 value,
+ * return 0 if attribute isn't found in attribute container.
+ *
+ * @param attr_cont the attribute container
+ * @param key the attribute key
+ *
+ * @return the char value of the attribute, 0 if key isn't found
+ */
+uint16_t
+attr_container_get_as_uint16(const attr_container_t *attr_cont,
+        const char *key);
+
+/**
+ * Get attribute from attribute container and return it as float value,
+ * return 0 if attribute isn't found in attribute container.
+ *
+ * @param attr_cont the attribute container
+ * @param key the attribute key
+ *
+ * @return the float value of the attribute, 0 if key isn't found
+ */
+float
+attr_container_get_as_float(const attr_container_t *attr_cont, const char 
*key);
+
+/**
+ * Get attribute from attribute container and return it as double value,
+ * return 0 if attribute isn't found in attribute container.
+ *
+ * @param attr_cont the attribute container
+ * @param key the attribute key
+ *
+ * @return the double value of the attribute, 0 if key isn't found
+ */
+double
+attr_container_get_as_double(const attr_container_t *attr_cont,
+        const char *key);
+
+/**
+ * Get attribute from attribute container and return it as bool value,
+ * return false if attribute isn't found in attribute container.
+ *
+ * @param attr_cont the attribute container
+ * @param key the attribute key
+ *
+ * @return the bool value of the attribute, 0 if key isn't found
+ */
+bool
+attr_container_get_as_bool(const attr_container_t *attr_cont, const char *key);
+
+/**
+ * Get attribute from attribute container and return it as string value,
+ * return NULL if attribute isn't found in attribute container.
+ *
+ * @param attr_cont the attribute container
+ * @param key the attribute key
+ *
+ * @return the string value of the attribute, NULL if key isn't found
+ */
+char*
+attr_container_get_as_string(const attr_container_t *attr_cont,
+        const char *key);
+
+/**
+ * Get attribute from attribute container and return it as bytearray value,
+ * return 0 if attribute isn't found in attribute container.
+ *
+ * @param attr_cont the attribute container
+ * @param key the attribute key
+ *
+ * @return the bytearray value of the attribute, NULL if key isn't found
+ */
+const int8_t*
+attr_container_get_as_bytearray(const attr_container_t *attr_cont,
+        const char *key, unsigned *array_length);
+
+/**
+ * Get the buffer size of attribute container
+ *
+ * @param attr_cont the attribute container
+ *
+ * @return the buffer size of attribute container
+ */
+unsigned
+attr_container_get_serialize_length(const attr_container_t *attr_cont);
+
+/**
+ * Serialize attribute container to a buffer
+ *
+ * @param buf the buffer to receive the serialized data
+ * @param attr_cont the attribute container to be serialized
+ *
+ * @return true if success, false otherwise
+ */
+bool
+attr_container_serialize(char *buf, const attr_container_t *attr_cont);
+
+/**
+ * Whether the attribute container is const, or set attribute isn't supported
+ *
+ * @param attr_cont the attribute container
+ *
+ * @return true if const, false otherwise
+ */
+bool
+attr_container_is_constant(const attr_container_t* attr_cont);
+
+void
+attr_container_dump(const attr_container_t *attr_cont);
+
+#ifndef attr_container_malloc
+#define attr_container_malloc wa_malloc
+#endif
+
+#ifndef attr_container_free
+#define attr_container_free wa_free
+#endif
+
+#ifndef attr_container_printf
+#define attr_container_printf printf
+#endif
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif /* end of _ATTR_CONTAINER_H_ */
+
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native-interface/connection_api.h 
b/scriptsrcs/wamr/core/iwasm/lib/native-interface/connection_api.h
new file mode 100755
index 0000000..f55583b
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native-interface/connection_api.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CONNECTION_API_H_
+#define CONNECTION_API_H_
+#include "bh_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+uint32 wasm_open_connection(int32 name_offset, int32 args_offset, uint32 len);
+
+void wasm_close_connection(uint32 handle);
+
+int wasm_send_on_connection(uint32 handle, int32 data_offset, uint32 len);
+
+bool wasm_config_connection(uint32 handle, int32 cfg_offset, uint32 len);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* CONNECTION_API_H_ */
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native-interface/gui_api.h 
b/scriptsrcs/wamr/core/iwasm/lib/native-interface/gui_api.h
new file mode 100755
index 0000000..0b1dbb0
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native-interface/gui_api.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef GUI_API_H_
+#define GUI_API_H_
+#include "bh_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void wasm_obj_native_call(int32 func_id, uint32 argv_offset, uint32 argc);
+void wasm_btn_native_call(int32 func_id, uint32 argv_offset, uint32 argc);
+void wasm_label_native_call(int32 func_id, uint32 argv_offset, uint32 argc);
+void wasm_cb_native_call(int32 func_id, uint32 argv_offset, uint32 argc);
+void wasm_list_native_call(int32 func_id, uint32 argv_offset, uint32 argc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* GUI_API_H_ */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native-interface/native_interface.cmake 
b/scriptsrcs/wamr/core/iwasm/lib/native-interface/native_interface.cmake
new file mode 100755
index 0000000..b7d4429
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native-interface/native_interface.cmake
@@ -0,0 +1,23 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (NATIVE_INTERFACE_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${NATIVE_INTERFACE_DIR})
+
+
+file (GLOB_RECURSE source_all ${NATIVE_INTERFACE_DIR}/*.c)
+
+set (NATIVE_INTERFACE_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native-interface/native_interface.h 
b/scriptsrcs/wamr/core/iwasm/lib/native-interface/native_interface.h
new file mode 100755
index 0000000..0312b1f
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native-interface/native_interface.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef 
DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_NATIVE_INTERFACE_H_
+#define 
DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_NATIVE_INTERFACE_H_
+
+// note: the bh_plaform.h is the only head file separately
+//       implemented by both [app] and [native] worlds
+#include "bh_platform.h"
+
+#define get_module_inst() \
+    wasm_runtime_get_current_module_inst()
+
+#define validate_app_addr(offset, size) \
+    wasm_runtime_validate_app_addr(module_inst, offset, size)
+
+#define addr_app_to_native(offset) \
+    wasm_runtime_addr_app_to_native(module_inst, offset)
+
+#define addr_native_to_app(ptr) \
+    wasm_runtime_addr_native_to_app(module_inst, ptr)
+
+#define module_malloc(size) \
+    wasm_runtime_module_malloc(module_inst, size)
+
+#define module_free(offset) \
+    wasm_runtime_module_free(module_inst, offset)
+
+char *wa_strdup(const char *);
+
+bool
+wasm_response_send(int32 buffer_offset, int size);
+
+void wasm_register_resource(int32 url_offset);
+
+void wasm_post_request(int32 buffer_offset, int size);
+
+void wasm_sub_event(int32 url_offset);
+
+/*
+ *   *************  sensor interfaces  *************
+ */
+
+bool
+wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay);
+uint32
+wasm_sensor_open(int32 name_offset, int instance);
+bool
+wasm_sensor_config_with_attr_container(uint32 sensor, int32 buffer_offset,
+        int len);
+
+bool
+wasm_sensor_close(uint32 sensor);
+
+/*
+ *   *** timer interface ***
+ */
+
+typedef unsigned int timer_id_t;
+timer_id_t wasm_create_timer(int interval, bool is_period, bool auto_start);
+void wasm_timer_destory(timer_id_t timer_id);
+void wasm_timer_cancel(timer_id_t timer_id);
+void wasm_timer_restart(timer_id_t timer_id, int interval);
+uint32 wasm_get_sys_tick_ms(void);
+
+/*
+ *   *** connection interface ***
+ */
+uint32 wasm_open_connection(int32 name_offset, int32 args_offset, uint32 len);
+void wasm_close_connection(uint32 handle);
+int wasm_send_on_connection(uint32 handle, int32 data_offset, uint32 len);
+bool wasm_config_connection(uint32 handle, int32 cfg_offset, uint32 len);
+
+#include "gui_api.h"
+
+#endif /* DEPS_SSG_MICRO_RUNTIME_WASM_PO
+C_APP_LIBS_NATIVE_INTERFACE_NATIVE_INTERFACE_H_ */
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native-interface/readme.txt 
b/scriptsrcs/wamr/core/iwasm/lib/native-interface/readme.txt
new file mode 100755
index 0000000..e3b5904
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native-interface/readme.txt
@@ -0,0 +1,12 @@
+Attention: 
+=======
+Only add files are shared by both wasm application and native runtime into 
this directory!
+
+The c files are both compiled into the the WASM APP and native runtime.
+
+native_interface.h
+=============
+The interface declaration for the native API which are exposed to the WASM app
+
+Any API in this file should be incuded with EXPORT_WASM_API() somewhere.
+
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native-interface/restful_utils.c 
b/scriptsrcs/wamr/core/iwasm/lib/native-interface/restful_utils.c
new file mode 100755
index 0000000..71b5d78
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native-interface/restful_utils.c
@@ -0,0 +1,428 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <stdio.h>
+
+#include "native_interface.h"
+#include "shared_utils.h"
+
+/* Serialization of request and response message
+ *
+ * Choices:
+ * We considered a few options:
+ * 1. coap
+ * 2. flatbuffer
+ * 3. cbor
+ * 4. attr-containers of our own
+ * 5. customized serialization for request/response
+ *
+ * Now we choose the #5 mainly because we need to quickly get the URL for 
dispatching
+ * and sometimes we want to change the URL in the original packet. the request 
format:
+ * fixed part: version: (1 byte), code (1 byte), fmt(2 byte), mid (4 bytes), 
sender_id(4 bytes),  url_len(2 bytes), payload_len(4bytes)
+ * dynamic part: url (bytes in url_len), payload
+ *
+ * response format:
+ * fixed part: (1 byte), code (1 byte), fmt(2 byte), mid (4 bytes), 
sender_id(4 bytes),   payload_len(4bytes)
+ * dynamic part: payload
+ */
+#define REQUES_PACKET_VER 1
+#define REQUEST_PACKET_FIX_PART_LEN 18
+#define REQUEST_PACKET_URL_OFFSET REQUEST_PACKET_FIX_PART_LEN
+#define REQUEST_PACKET_URL_LEN  *((uint16*)( (char*) buffer + 12)))   //!!! to 
ensure little endian
+#define REQUEST_PACKET_PAYLOAD_LEN *((uint32*)( (char*) buffer + 14)))   //!!! 
to ensure little endian
+#define REQUEST_PACKET_URL(buffer) ((char*) buffer + REQUEST_PACKET_URL_OFFSET)
+#define REQUEST_PACKET_PAYLOAD(buffer)  ((char*) buffer + 
REQUEST_PACKET_URL_OFFSET + REQUEST_PACKET_URL_LEN(buffer))
+
+#define RESPONSE_PACKET_FIX_PART_LEN 16
+
+char * pack_request(request_t *request, int * size)
+{
+    int url_len = strlen(request->url) + 1;
+    int len = REQUEST_PACKET_FIX_PART_LEN + url_len + request->payload_len;
+    char * packet = (char*) wa_malloc(len);
+    if (packet == NULL)
+        return NULL;
+
+    // TODO: ensure little endian for words and dwords
+    *packet = REQUES_PACKET_VER;
+    *((uint8*) (packet + 1)) = request->action;
+    *((uint16*) (packet + 2)) = htons(request->fmt);
+    *((uint32*) (packet + 4)) = htonl(request->mid);
+    *((uint32*) (packet + 8)) = htonl(request->sender);
+    *((uint16*) (packet + 12)) = htons(url_len);
+    *((uint32*) (packet + 14)) = htonl(request->payload_len);
+    strcpy(packet + REQUEST_PACKET_URL_OFFSET, request->url);
+    memcpy(packet + REQUEST_PACKET_URL_OFFSET + url_len, request->payload,
+            request->payload_len);
+
+    *size = len;
+    return packet;
+}
+
+void free_req_resp_packet(char * packet)
+{
+    wa_free(packet);
+}
+
+request_t * unpack_request(char * packet, int size, request_t * request)
+{
+    if (*packet != REQUES_PACKET_VER) {
+        printf("version fail\n");
+        return NULL;
+    }
+    if (size < REQUEST_PACKET_FIX_PART_LEN) {
+        printf("size error: %d\n", size);
+        return NULL;
+    }
+    uint16 url_len = ntohs(*((uint16*) (packet + 12)));
+    uint32 payload_len = ntohl(*((uint32*) (packet + 14)));
+
+    if (size != ( REQUEST_PACKET_FIX_PART_LEN + url_len + payload_len)) {
+        printf("size error: %d, expect: %d\n", size,
+        REQUEST_PACKET_FIX_PART_LEN + url_len + payload_len);
+        return NULL;
+    }
+    if (*(packet + REQUEST_PACKET_FIX_PART_LEN + url_len - 1) != 0) {
+        printf("url not end with 0\n");
+        return NULL;
+    }
+
+    request->action = *((uint8*) (packet + 1));
+    request->fmt = ntohs(*((uint16*) (packet + 2)));
+    request->mid = ntohl(*((uint32*) (packet + 4)));
+    request->sender = ntohl(*((uint32*) (packet + 8)));
+    request->payload_len = payload_len;
+    request->url = REQUEST_PACKET_URL(packet);
+    if (payload_len > 0)
+        request->payload = packet + REQUEST_PACKET_URL_OFFSET + url_len;
+    else
+        request->payload = NULL;
+
+    return request;
+}
+
+char * pack_response(response_t *response, int * size)
+{
+    int len = RESPONSE_PACKET_FIX_PART_LEN + response->payload_len;
+    char * packet = (char*) wa_malloc(len);
+    if (packet == NULL)
+        return NULL;
+
+    // TODO: ensure little endian for words and dwords
+    *packet = REQUES_PACKET_VER;
+    *((uint8*) (packet + 1)) = response->status;
+    *((uint16*) (packet + 2)) = htons(response->fmt);
+    *((uint32*) (packet + 4)) = htonl(response->mid);
+    *((uint32*) (packet + 8)) = htonl(response->reciever);
+    *((uint32*) (packet + 12)) = htonl(response->payload_len);
+    memcpy(packet + RESPONSE_PACKET_FIX_PART_LEN, response->payload,
+            response->payload_len);
+
+    *size = len;
+    return packet;
+}
+
+response_t * unpack_response(char * packet, int size, response_t * response)
+{
+    if (*packet != REQUES_PACKET_VER)
+        return NULL;
+    if (size < RESPONSE_PACKET_FIX_PART_LEN)
+        return NULL;
+    uint32 payload_len = ntohl(*((uint32*) (packet + 12)));
+    if (size != ( RESPONSE_PACKET_FIX_PART_LEN + payload_len))
+        return NULL;
+
+    response->status = *((uint8*) (packet + 1));
+    response->fmt = ntohs(*((uint16*) (packet + 2)));
+    response->mid = ntohl(*((uint32*) (packet + 4)));
+    response->reciever = ntohl(*((uint32*) (packet + 8)));
+    response->payload_len = payload_len;
+    if (payload_len > 0)
+        response->payload = packet + RESPONSE_PACKET_FIX_PART_LEN;
+    else
+        response->payload = NULL;
+
+    return response;
+}
+
+request_t *clone_request(request_t *request)
+{
+    /* deep clone */
+    request_t *req = (request_t *) wa_malloc(sizeof(request_t));
+    if (req == NULL)
+        return NULL;
+
+    memset(req, 0, sizeof(*req));
+    req->action = request->action;
+    req->fmt = request->fmt;
+    req->url = wa_strdup(request->url);
+    req->sender = request->sender;
+    req->mid = request->mid;
+
+    if (req->url == NULL)
+        goto fail;
+
+    req->payload_len = request->payload_len;
+
+    if (request->payload_len) {
+        req->payload = (char *) wa_malloc(request->payload_len);
+        if (!req->payload)
+            goto fail;
+        memcpy(req->payload, request->payload, request->payload_len);
+    } else {
+        // when payload_len is 0, the payload may be used for carrying some 
handle or integer
+        req->payload = request->payload;
+    }
+
+    return req;
+
+    fail: request_cleaner(req);
+    return NULL;
+}
+
+void request_cleaner(request_t *request)
+{
+    if (request->url != NULL)
+        wa_free(request->url);
+    if (request->payload != NULL && request->payload_len > 0)
+        wa_free(request->payload);
+
+    wa_free(request);
+}
+
+void response_cleaner(response_t * response)
+{
+    if (response->payload != NULL && response->payload_len > 0)
+        wa_free(response->payload);
+
+    wa_free(response);
+}
+
+response_t * clone_response(response_t * response)
+{
+    response_t *clone = (response_t *) wa_malloc(sizeof(response_t));
+    if (clone == NULL)
+        return NULL;
+
+    memset(clone, 0, sizeof(*clone));
+    clone->fmt = response->fmt;
+    clone->mid = response->mid;
+    clone->status = response->status;
+    clone->reciever = response->reciever;
+    clone->payload_len = response->payload_len;
+    if (clone->payload_len) {
+        clone->payload = (char *) wa_malloc(response->payload_len);
+        if (!clone->payload)
+            goto fail;
+        memcpy(clone->payload, response->payload, response->payload_len);
+    } else {
+        // when payload_len is 0, the payload may be used for carrying some 
handle or integer
+        clone->payload = response->payload;
+    }
+    return clone;
+
+    fail: response_cleaner(clone);
+    return NULL;
+}
+
+response_t * set_response(response_t * response, int status, int fmt,
+        const char *payload, int payload_len)
+{
+    response->payload = (void *)payload;
+    response->payload_len = payload_len;
+    response->status = status;
+    response->fmt = fmt;
+    return response;
+}
+
+response_t * make_response_for_request(request_t * request,
+        response_t * response)
+{
+    response->mid = request->mid;
+    response->reciever = request->sender;
+
+    return response;
+}
+
+request_t * init_request(request_t * request, char *url, int action, int fmt,
+        void *payload, int payload_len)
+{
+    static unsigned int mid = 0;
+    request->url = url;
+    request->action = action;
+    request->fmt = fmt;
+    request->payload = payload;
+    request->payload_len = payload_len;
+    request->mid = ++mid;
+
+    return request;
+}
+
+/*
+ check if the "url" is starting with "leading_str"
+ return: 0 - not match; >0 - the offset of matched url, include any "/" at the 
end
+ notes:
+ 1. it ensures the leading_str "/abc" can pass "/abc/cde" and "/abc/, but fail 
"/ab" and "/abcd".
+ leading_str "/abc/" can pass "/abc"
+ 2. it omit the '/' at the first char
+ 3. it ensure the leading_str "/abc" can pass "/abc?cde
+ */
+
+int check_url_start(const char* url, int url_len, const char * leading_str)
+{
+    int offset = 0;
+    if (*leading_str == '/')
+        leading_str++;
+    if (url_len > 0 && *url == '/') {
+        url_len--;
+        url++;
+        offset++;
+    }
+
+    int len = strlen(leading_str);
+    if (len == 0)
+        return 0;
+
+    // ensure leading_str not end with "/"
+    if (leading_str[len - 1] == '/') {
+        len--;
+        if (len == 0)
+            return 0;
+    }
+
+    // equal length
+    if (url_len == len) {
+        if (memcmp(url, leading_str, url_len) == 0) {
+            return (offset + len);
+        } else {
+            return 0;
+        }
+    }
+
+    if (url_len < len)
+        return 0;
+
+    else if (memcmp(url, leading_str, len) != 0)
+        return 0;
+
+    else if (url[len] != '/' && url[len] != '?')
+        return 0;
+    else
+        return (offset + len + 1);
+}
+
+// * @pattern:
+// * sample 1: /abcd, match /abcd only
+// * sample 2: /abcd/ match match "/abcd" and "/abcd/*"
+// * sample 3: /abcd*, match any url started with "/abcd"
+// * sample 4: /abcd/*, exclude "/abcd"
+
+bool match_url(char * pattern, char * matched)
+{
+    if (*pattern == '/')
+        pattern++;
+    if (*matched == '/')
+        matched++;
+
+    int matched_len = strlen(matched);
+    if (matched_len == 0)
+        return false;
+
+    if (matched[matched_len - 1] == '/') {
+        matched_len--;
+        if (matched_len == 0)
+            return false;
+    }
+
+    int len = strlen(pattern);
+    if (len == 0)
+        return false;
+
+    if (pattern[len - 1] == '/') {
+        len--;
+        if (strncmp(pattern, matched, len) != 0)
+            return false;
+
+        if (len == matched_len)
+            return true;
+
+        if (matched_len > len && matched[len] == '/')
+            return true;
+
+        return false;
+
+    } else if (pattern[len - 1] == '*') {
+        if (pattern[len - 2] == '/') {
+            if (strncmp(pattern, matched, len - 1) == 0)
+                return true;
+
+            else
+                return false;
+        } else {
+            return (strncmp(pattern, matched, len - 1) == 0);
+        }
+    } else {
+        return (strcmp(pattern, matched) == 0);
+    }
+}
+
+/*
+ * get the value of the key from following format buffer:
+ *  key1=value1;key2=value2;key3=value3
+ */
+char * find_key_value(char * buffer, int buffer_len, char * key, char * value,
+        int value_len, char delimiter)
+{
+    char * p = buffer;
+    int remaining = buffer_len;
+    int key_len = strlen(key);
+
+    while (*p != 0 && remaining > 0) {
+        while (*p == ' ' || *p == delimiter) {
+            p++;
+            remaining--;
+        }
+
+        if (remaining <= key_len)
+            return NULL;
+
+        // find the key
+        if (0 == strncmp(p, key, key_len) && p[key_len] == '=') {
+            p += (key_len + 1);
+            remaining -= (key_len + 1);
+            char * v = value;
+            memset(value, 0, value_len);
+            value_len--;  // ensure last char is 0
+            while (*p != delimiter && remaining > 0 && value_len > 0) {
+                *v++ = *p++;
+                remaining--;
+                value_len--;
+            }
+            return value;
+        }
+
+        // goto next key
+        while (*p != delimiter && remaining > 0) {
+            p++;
+            remaining--;
+        }
+    }
+
+    return NULL;
+}
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native-interface/sensor_api.h 
b/scriptsrcs/wamr/core/iwasm/lib/native-interface/sensor_api.h
new file mode 100755
index 0000000..0f8a858
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native-interface/sensor_api.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef DEPS_IWASM_APP_LIBS_NATIVE_INTERFACE_SENSOR_API_H_
+#define DEPS_IWASM_APP_LIBS_NATIVE_INTERFACE_SENSOR_API_H_
+#include "bh_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+uint32
+wasm_sensor_open(const char* name, int instance);
+
+bool
+wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay);
+
+bool
+wasm_sensor_config_with_attr_container(uint32 sensor, char * buffer, int len);
+
+bool
+wasm_sensor_close(uint32 sensor);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DEPS_IWASM_APP_LIBS_NATIVE_INTERFACE_SENSOR_API_H_ */
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native-interface/shared_utils.h 
b/scriptsrcs/wamr/core/iwasm/lib/native-interface/shared_utils.h
new file mode 100755
index 0000000..693dcf9
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native-interface/shared_utils.h
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef 
DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_SHARED_UTILS_H_
+#define 
DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_SHARED_UTILS_H_
+
+#include "native_interface.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define FMT_ATTR_CONTAINER  99
+#define FMT_APP_RAW_BINARY  98
+
+/* the request structure */
+typedef struct request {
+    // message id
+    uint32 mid;
+
+    // url of the request
+    char *url;
+
+    // action of the request, can be PUT/GET/POST/DELETE
+    int action;
+
+    // payload format, currently only support attr_container_t type
+    int fmt;
+
+    // payload of the request, currently only support attr_container_t type
+    void *payload;
+
+    //length in bytes of the payload
+    int payload_len;
+
+    //sender of the request
+    unsigned long sender;
+} request_t;
+
+/* the response structure */
+typedef struct response {
+    // message id
+    uint32 mid;
+
+    // status of the response
+    int status;
+
+    // payload format
+    int fmt;
+
+    // payload of the response,
+    void *payload;
+
+    //length in bytes of the payload
+    int payload_len;
+
+    //receiver of the response
+    unsigned long reciever;
+} response_t;
+
+int check_url_start(const char* url, int url_len, const char * leading_str);
+bool match_url(char * pattern, char * matched);
+char * find_key_value(char * buffer, int buffer_len, char * key, char * value,
+        int value_len, char delimiter);
+
+request_t *clone_request(request_t *request);
+void request_cleaner(request_t *request);
+
+response_t * clone_response(response_t * response);
+void response_cleaner(response_t * response);
+
+/**
+ * @brief Set fields of response.
+ *
+ * @param response pointer of the response to be set
+ * @param status status of response
+ * @param fmt format of the response payload
+ * @param payload payload of the response
+ * @param payload_len length in bytes of the response payload
+ *
+ * @return pointer to the response
+ *
+ * @warning the response pointer MUST NOT be NULL
+ */
+response_t * set_response(response_t * response, int status, int fmt,
+        const char *payload, int payload_len);
+
+/**
+ * @brief Make a response for a request.
+ *
+ * @param request pointer of the request
+ * @param response pointer of the response to be made
+ *
+ * @return pointer to the response
+ *
+ * @warning the request and response pointers MUST NOT be NULL
+ */
+response_t * make_response_for_request(request_t * request,
+        response_t * response);
+
+/**
+ * @brief Initialize a request.
+ *
+ * @param request pointer of the request to be initialized
+ * @param url url of the request
+ * @param action action of the request
+ * @param fmt format of the request payload
+ * @param payload payload of the request
+ * @param payload_len length in bytes of the request payload
+ *
+ * @return pointer to the request
+ *
+ * @warning the request pointer MUST NOT be NULL
+ */
+request_t * init_request(request_t * request, char *url, int action, int fmt,
+        void *payload, int payload_len);
+
+char * pack_request(request_t *request, int * size);
+request_t * unpack_request(char * packet, int size, request_t * request);
+char * pack_response(response_t *response, int * size);
+response_t * unpack_response(char * packet, int size, response_t * response);
+void free_req_resp_packet(char * packet);
+
+#include "wgl_shared_utils.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* 
DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_SHARED_UTILS_H_ */
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native-interface/wasm_export.h 
b/scriptsrcs/wamr/core/iwasm/lib/native-interface/wasm_export.h
new file mode 100755
index 0000000..ed9d570
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native-interface/wasm_export.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_EXPORT_H
+#define _WASM_EXPORT_H
+
+#include <inttypes.h>
+#include <stdbool.h>
+
+/**
+ * API exported to WASM application
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Get current WASM module instance of the current native thread
+ *
+ * @return current WASM module instance of the current native thread, 0
+ *         if not found
+ * Note: the return type is uint64_t but not pointer type, because that
+ *       the we only supports WASM-32, in which the pointer type is
+ *       compiled to WASM i32 type, but the pointer type in native can be
+ *       32-bit and 64-bit. And if the native pointer is 64-bit, data loss
+ *       occurs after converting it to WASM i32 type.
+ */
+uint64_t
+wasm_runtime_get_current_module_inst();
+
+/**
+ * Validate the app address, check whether it belongs to WASM module
+ * instance's address space, or in its heap space or memory space.
+ *
+ * @param module_inst the WASM module instance
+ * @param app_offset the app address to validate, which is a relative address
+ * @param size the size bytes of the app address
+ *
+ * @return true if success, false otherwise.
+ */
+bool
+wasm_runtime_validate_app_addr(uint64_t module_inst,
+                               int32_t app_offset, uint32_t size);
+
+/**
+ * Validate the native address, check whether it belongs to WASM module
+ * instance's address space, or in its heap space or memory space.
+ *
+ * @param module_inst the WASM module instance
+ * @param native_ptr the native address to validate, which is an absolute
+ *        address
+ * @param size the size bytes of the app address
+ *
+ * @return true if success, false otherwise.
+ */
+bool
+wasm_runtime_validate_native_addr(uint64_t module_inst,
+                                  uint64_t native_ptr, uint32_t size);
+
+/**
+ * Convert app address(relative address) to native address(absolute address)
+ *
+ * @param module_inst the WASM module instance
+ * @param app_offset the app adress
+ *
+ * @return the native address converted
+ */
+uint64_t
+wasm_runtime_addr_app_to_native(uint64_t module_inst,
+                                int32_t app_offset);
+
+/**
+ * Convert native address(absolute address) to app address(relative address)
+ *
+ * @param module_inst the WASM module instance
+ * @param native_ptr the native address
+ *
+ * @return the app address converted
+ */
+int32_t
+wasm_runtime_addr_native_to_app(uint64_t module_inst,
+                                uint64_t native_ptr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _WASM_EXPORT_H */
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native-interface/wgl_shared_utils.h 
b/scriptsrcs/wamr/core/iwasm/lib/native-interface/wgl_shared_utils.h
new file mode 100755
index 0000000..0d64b43
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native-interface/wgl_shared_utils.h
@@ -0,0 +1,342 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WAMR_GRAPHIC_LIBRARY_SHARED_UTILS_H
+#define WAMR_GRAPHIC_LIBRARY_SHARED_UTILS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdbool.h>
+
+#include "../3rdparty/lv_conf.h"
+
+typedef lv_coord_t wgl_coord_t; /* lv_coord_t is defined in lv_conf.h */
+
+/**
+ * Represents a point on the screen.
+ */
+typedef struct
+{
+    lv_coord_t x;
+    lv_coord_t y;
+} wgl_point_t;
+
+/** Represents an area of the screen. */
+typedef struct
+{
+    lv_coord_t x1;
+    lv_coord_t y1;
+    lv_coord_t x2;
+    lv_coord_t y2;
+} wgl_area_t;
+
+
+/** Describes the properties of a glyph. */
+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*/
+    uint8_t bpp;   /**< Bit-per-pixel: 1, 2, 4, 8*/
+}wgl_font_glyph_dsc_t;
+
+/*Describe the properties of a font*/
+typedef struct _wgl_font_struct
+{
+    /** Get a glyph's  descriptor from a font*/
+    bool (*get_glyph_dsc)(const struct _wgl_font_struct *, 
wgl_font_glyph_dsc_t *, uint32_t letter, uint32_t letter_next);
+
+    /** Get a glyph's bitmap from a font*/
+    const uint8_t * (*get_glyph_bitmap)(const struct _wgl_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*/
+#if LV_USE_USER_DATA
+    wgl_font_user_data_t user_data; /**< Custom user data for font. */
+#endif
+} wgl_font_t;
+
+#if LV_COLOR_DEPTH == 1
+#define LV_COLOR_SIZE 8
+#elif LV_COLOR_DEPTH == 8
+#define LV_COLOR_SIZE 8
+#elif LV_COLOR_DEPTH == 16
+#define LV_COLOR_SIZE 16
+#elif LV_COLOR_DEPTH == 32
+#define LV_COLOR_SIZE 32
+#else
+#error "Invalid LV_COLOR_DEPTH in lv_conf.h! Set it to 1, 8, 16 or 32!"
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+typedef union
+{
+    uint8_t blue : 1;
+    uint8_t green : 1;
+    uint8_t red : 1;
+    uint8_t full : 1;
+} wgl_color1_t;
+
+typedef union
+{
+    struct
+    {
+        uint8_t blue : 2;
+        uint8_t green : 3;
+        uint8_t red : 3;
+    } ch;
+    uint8_t full;
+} wgl_color8_t;
+
+typedef union
+{
+    struct
+    {
+#if LV_COLOR_16_SWAP == 0
+        uint16_t blue : 5;
+        uint16_t green : 6;
+        uint16_t red : 5;
+#else
+        uint16_t green_h : 3;
+        uint16_t red : 5;
+        uint16_t blue : 5;
+        uint16_t green_l : 3;
+#endif
+    } ch;
+    uint16_t full;
+} wgl_color16_t;
+
+typedef union
+{
+    struct
+    {
+        uint8_t blue;
+        uint8_t green;
+        uint8_t red;
+        uint8_t alpha;
+    } ch;
+    uint32_t full;
+} wgl_color32_t;
+
+#if LV_COLOR_DEPTH == 1
+typedef uint8_t wgl_color_int_t;
+typedef wgl_color1_t wgl_color_t;
+#elif LV_COLOR_DEPTH == 8
+typedef uint8_t wgl_color_int_t;
+typedef wgl_color8_t wgl_color_t;
+#elif LV_COLOR_DEPTH == 16
+typedef uint16_t wgl_color_int_t;
+typedef wgl_color16_t wgl_color_t;
+#elif LV_COLOR_DEPTH == 32
+typedef uint32_t wgl_color_int_t;
+typedef wgl_color32_t wgl_color_t;
+#else
+#error "Invalid LV_COLOR_DEPTH in lv_conf.h! Set it to 1, 8, 16 or 32!"
+#endif
+
+typedef uint8_t wgl_opa_t;
+
+
+
+/*Border types (Use 'OR'ed values)*/
+enum {
+    WGL_BORDER_NONE     = 0x00,
+    WGL_BORDER_BOTTOM   = 0x01,
+    WGL_BORDER_TOP      = 0x02,
+    WGL_BORDER_LEFT     = 0x04,
+    WGL_BORDER_RIGHT    = 0x08,
+    WGL_BORDER_FULL     = 0x0F,
+    WGL_BORDER_INTERNAL = 0x10, /**< FOR matrix-like objects (e.g. Button 
matrix)*/
+};
+typedef uint8_t wgl_border_part_t;
+
+/*Shadow types*/
+enum {
+    WGL_SHADOW_BOTTOM = 0, /**< Only draw bottom shadow */
+    WGL_SHADOW_FULL,       /**< Draw shadow on all sides */
+};
+typedef uint8_t wgl_shadow_type_t;
+
+/**
+ * Objects in LittlevGL can be assigned a style - which holds information about
+ * how the object should be drawn.
+ *
+ * This allows for easy customization without having to modify the object's 
design
+ * function.
+ */
+typedef struct
+{
+    uint8_t glass : 1; /**< 1: Do not inherit this style*/
+
+    /** Object background. */
+    struct
+    {
+        wgl_color_t main_color; /**< Object's main background color. */
+        wgl_color_t grad_color; /**< Second color. If not equal to 
`main_color` a gradient will be drawn for the background. */
+        wgl_coord_t radius; /**< Object's corner radius. You can use 
#WGL_RADIUS_CIRCLE if you want to draw a circle. */
+        wgl_opa_t opa; /**< Object's opacity (0-255). */
+
+        struct
+        {
+            wgl_color_t color; /**< Border color */
+            wgl_coord_t width; /**< Border width */
+            wgl_border_part_t part; /**< Which borders to draw */
+            wgl_opa_t opa; /**< Border opacity. */
+        } border;
+
+
+        struct
+        {
+            wgl_color_t color;
+            wgl_coord_t width;
+            wgl_shadow_type_t type; /**< Which parts of the shadow to draw */
+        } shadow;
+
+        struct
+        {
+            wgl_coord_t top;
+            wgl_coord_t bottom;
+            wgl_coord_t left;
+            wgl_coord_t right;
+            wgl_coord_t inner;
+        } padding;
+    } body;
+
+    /** Style for text drawn by this object. */
+    struct
+    {
+        wgl_color_t color; /**< Text color */
+        wgl_color_t sel_color; /**< Text selection background color. */
+        const wgl_font_t * font;
+        wgl_coord_t letter_space; /**< Space between letters */
+        wgl_coord_t line_space; /**< Space between lines (vertical) */
+        wgl_opa_t opa; /**< Text opacity */
+    } text;
+
+    /**< Style of images. */
+    struct
+    {
+        wgl_color_t color; /**< Color to recolor the image with */
+        wgl_opa_t intense; /**< Opacity of recoloring (0 means no recoloring) 
*/
+        wgl_opa_t opa; /**< Opacity of whole image */
+    } image;
+
+    /**< Style of lines (not borders). */
+    struct
+    {
+        wgl_color_t color;
+        wgl_coord_t width;
+        wgl_opa_t opa;
+        uint8_t rounded : 1; /**< 1: rounded line endings*/
+    } line;
+} wgl_style_t;
+
+
+
+/* Object native function IDs */
+enum {
+    OBJ_FUNC_ID_DEL,
+    OBJ_FUNC_ID_DEL_ASYNC,
+    OBJ_FUNC_ID_CLEAN,
+    OBJ_FUNC_ID_SET_EVT_CB,
+    OBJ_FUNC_ID_ALIGN,
+
+    /* Number of functions */
+    _OBJ_FUNC_ID_NUM,
+};
+
+/* Button native function IDs */
+enum {
+    BTN_FUNC_ID_CREATE,
+    BTN_FUNC_ID_SET_TOGGLE,
+    BTN_FUNC_ID_SET_STATE,
+    BTN_FUNC_ID_TOGGLE,
+    BTN_FUNC_ID_SET_INK_IN_TIME,
+    BTN_FUNC_ID_SET_INK_WAIT_TIME,
+    BTN_FUNC_ID_SET_INK_OUT_TIME,
+    BTN_FUNC_ID_GET_STATE,
+    BTN_FUNC_ID_GET_TOGGLE,
+    BTN_FUNC_ID_GET_INK_IN_TIME,
+    BTN_FUNC_ID_GET_INK_WAIT_TIME,
+    BTN_FUNC_ID_GET_INK_OUT_TIME,
+    /* Number of functions */
+    _BTN_FUNC_ID_NUM,
+};
+
+/* Check box native function IDs */
+enum {
+    CB_FUNC_ID_CREATE,
+    CB_FUNC_ID_SET_TEXT,
+    CB_FUNC_ID_SET_STATIC_TEXT,
+    CB_FUNC_ID_GET_TEXT,
+    CB_FUNC_ID_GET_TEXT_LENGTH,
+
+    /* Number of functions */
+    _CB_FUNC_ID_NUM,
+};
+
+/* List native function IDs */
+enum {
+    LIST_FUNC_ID_CREATE,
+    LIST_FUNC_ID_ADD_BTN,
+
+    /* Number of functions */
+    _LIST_FUNC_ID_NUM,
+};
+
+/* Label native function IDs */
+enum {
+    LABEL_FUNC_ID_CREATE,
+    LABEL_FUNC_ID_SET_TEXT,
+    LABEL_FUNC_ID_SET_ARRAY_TEXT,
+    LABEL_FUNC_ID_SET_STATIC_TEXT,
+    LABEL_FUNC_ID_SET_LONG_MODE,
+    LABEL_FUNC_ID_SET_ALIGN,
+    LABEL_FUNC_ID_SET_RECOLOR,
+    LABEL_FUNC_ID_SET_BODY_DRAW,
+    LABEL_FUNC_ID_SET_ANIM_SPEED,
+    LABEL_FUNC_ID_SET_TEXT_SEL_START,
+    LABEL_FUNC_ID_SET_TEXT_SEL_END,
+    LABEL_FUNC_ID_GET_TEXT,
+    LABEL_FUNC_ID_GET_TEXT_LENGTH,
+    LABEL_FUNC_ID_GET_LONG_MODE,
+    LABEL_FUNC_ID_GET_ALIGN,
+    LABEL_FUNC_ID_GET_RECOLOR,
+    LABEL_FUNC_ID_GET_BODY_DRAW,
+    LABEL_FUNC_ID_GET_ANIM_SPEED,
+    LABEL_FUNC_ID_GET_LETTER_POS,
+    LABEL_FUNC_ID_GET_TEXT_SEL_START,
+    LABEL_FUNC_ID_GET_TEXT_SEL_END,
+    LABEL_FUNC_ID_INS_TEXT,
+    LABEL_FUNC_ID_CUT_TEXT,
+    /* Number of functions */
+    _LABEL_FUNC_ID_NUM,
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_SHARED_UTILS_H */
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native/base/base_lib_export.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/base/base_lib_export.c
new file mode 100755
index 0000000..353871b
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/base/base_lib_export.c
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "lib_export.h"
+#include "bh_platform.h"
+#include "wasm_export.h"
+
+#ifdef WASM_ENABLE_BASE_LIB
+#include "base_lib_export.h"
+#endif
+
+static uint64
+wasm_runtime_get_current_module_inst_wrapper()
+{
+    return (uint64)(uintptr_t)
+        wasm_runtime_get_current_module_inst();
+}
+
+static bool
+wasm_runtime_validate_app_addr_wrapper(uint32 inst_part0, uint32 inst_part1,
+                                       int32 app_offset, uint32 size)
+{
+    bool ret;
+    wasm_module_inst_t module_inst =
+        wasm_runtime_get_current_module_inst();
+    union { uint64 u64; uint32 parts[2]; } inst;
+
+    inst.parts[0] = inst_part0;
+    inst.parts[1] = inst_part1;
+
+    if (inst.u64 != (uint64)(uintptr_t)module_inst) {
+        printf("Invalid module instance\n");
+        return false;
+    }
+
+    ret = wasm_runtime_validate_app_addr(module_inst, app_offset, size);
+    if (!ret)
+        wasm_runtime_clear_exception(module_inst);
+    return ret;
+}
+
+static bool
+wasm_runtime_validate_native_addr_wrapper(uint32 inst_part0, uint32 inst_part1,
+                                          uint32 native_ptr_part0,
+                                          uint32 native_ptr_part1,
+                                          uint32 size)
+{
+    bool ret;
+    wasm_module_inst_t module_inst =
+        wasm_runtime_get_current_module_inst();
+    union { uint64 u64; uint32 parts[2]; } inst;
+    union { uint64 u64; uint32 parts[2]; } native_ptr;
+
+    inst.parts[0] = inst_part0;
+    inst.parts[1] = inst_part1;
+
+    if (inst.u64 != (uint64)(uintptr_t)module_inst) {
+        printf("Invalid module instance\n");
+        return false;
+    }
+
+    native_ptr.parts[0] = native_ptr_part0;
+    native_ptr.parts[1] = native_ptr_part1;
+    ret  = wasm_runtime_validate_native_addr(module_inst,
+                                             (void*)(uintptr_t)native_ptr.u64,
+                                             size);
+    if (!ret)
+        wasm_runtime_clear_exception(module_inst);
+    return ret;
+}
+
+static uint64
+wasm_runtime_addr_app_to_native_wrapper(uint32 inst_part0, uint32 inst_part1,
+                                        int32 app_offset)
+{
+    wasm_module_inst_t module_inst =
+        wasm_runtime_get_current_module_inst();
+    union { uint64 u64; uint32 parts[2]; } inst;
+
+    inst.parts[0] = inst_part0;
+    inst.parts[1] = inst_part1;
+
+    if (inst.u64 != (uint64)(uintptr_t)module_inst) {
+        printf("Invalid module instance\n");
+        return 0;
+    }
+    return (uint64)(uintptr_t)
+            wasm_runtime_addr_app_to_native(module_inst, app_offset);
+}
+
+static int32
+wasm_runtime_addr_native_to_app_wrapper(uint32 inst_part0, uint32 inst_part1,
+                                        uint32 native_ptr_part0,
+                                        uint32 native_ptr_part1)
+{
+    wasm_module_inst_t module_inst =
+        wasm_runtime_get_current_module_inst();
+    union { uint64 u64; uint32 parts[2]; } inst;
+    union { uint64 u64; uint32 parts[2]; } native_ptr;
+
+    inst.parts[0] = inst_part0;
+    inst.parts[1] = inst_part1;
+
+     if (inst.u64 != (uint64)(uintptr_t)module_inst) {
+         printf("Invalid module instance\n");
+         return 0;
+     }
+
+    native_ptr.parts[0] = native_ptr_part0;
+    native_ptr.parts[1] = native_ptr_part1;
+    return wasm_runtime_addr_native_to_app(module_inst,
+                                           (void*)(uintptr_t)native_ptr.u64);
+}
+
+static NativeSymbol extended_native_symbol_defs[] = {
+/* TODO: use macro EXPORT_WASM_API() or EXPORT_WASM_API2() to
+ add functions to register. */
+
+#ifdef WASM_ENABLE_BASE_LIB
+        EXPORT_WASM_API(wasm_register_resource),
+        EXPORT_WASM_API(wasm_response_send),
+        EXPORT_WASM_API(wasm_post_request),
+        EXPORT_WASM_API(wasm_sub_event),
+        EXPORT_WASM_API(wasm_create_timer),
+        EXPORT_WASM_API(wasm_timer_destory),
+        EXPORT_WASM_API(wasm_timer_cancel),
+        EXPORT_WASM_API(wasm_timer_restart),
+        EXPORT_WASM_API(wasm_get_sys_tick_ms),
+#endif
+        EXPORT_WASM_API2(wasm_runtime_get_current_module_inst),
+        EXPORT_WASM_API2(wasm_runtime_validate_app_addr),
+        EXPORT_WASM_API2(wasm_runtime_validate_native_addr),
+        EXPORT_WASM_API2(wasm_runtime_addr_app_to_native),
+        EXPORT_WASM_API2(wasm_runtime_addr_native_to_app),
+    };
+
+int get_base_lib_export_apis(NativeSymbol **p_base_lib_apis)
+{
+    *p_base_lib_apis = extended_native_symbol_defs;
+    return sizeof(extended_native_symbol_defs) / sizeof(NativeSymbol);
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native/base/base_lib_export.h 
b/scriptsrcs/wamr/core/iwasm/lib/native/base/base_lib_export.h
new file mode 100755
index 0000000..c3456b1
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/base/base_lib_export.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BASE_LIB_EXPORT_H_
+#define _BASE_LIB_EXPORT_H_
+
+#include "attr_container.h"
+#include "native_interface.h"
+
+#endif /* end of _BASE_LIB_EXPORT_H_ */
+
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native/base/request_response.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/base/request_response.c
new file mode 100755
index 0000000..641dc54
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/base/request_response.c
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "native_interface.h"
+#include "app_manager_export.h"
+#include "coap_ext.h"
+#include "wasm_export.h"
+
+extern void module_request_handler(request_t *request, void *user_data);
+
+bool wasm_response_send(int32 buffer_offset, int size)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *buffer = NULL;
+
+    if (!validate_app_addr(buffer_offset, size))
+        return false;
+
+    buffer = addr_app_to_native(buffer_offset);
+
+    if (buffer != NULL) {
+        response_t response[1];
+
+        if (NULL == unpack_response(buffer, size, response))
+            return false;
+
+        am_send_response(response);
+
+        return true;
+    }
+
+    return false;
+}
+
+void wasm_register_resource(int32 url_offset)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *url = NULL;
+
+    if (!validate_app_addr(url_offset, 1))
+        return;
+
+    url = addr_app_to_native(url_offset);
+
+    if (url != NULL) {
+        unsigned int mod_id = app_manager_get_module_id(Module_WASM_App);
+        am_register_resource(url, module_request_handler, mod_id);
+    }
+}
+
+void wasm_post_request(int32 buffer_offset, int size)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *buffer = NULL;
+
+    if (!validate_app_addr(buffer_offset, size))
+        return;
+
+    buffer = addr_app_to_native(buffer_offset);
+
+    if (buffer != NULL) {
+        request_t req[1];
+
+        if (!unpack_request(buffer, size, req))
+            return;
+
+        // TODO: add permission check, ensure app can't do harm
+
+        // set sender to help dispatch the response to the sender ap
+        unsigned int mod_id = app_manager_get_module_id(Module_WASM_App);
+        req->sender = mod_id;
+
+        if (req->action == COAP_EVENT) {
+            am_publish_event(req);
+            return;
+        }
+
+        am_dispatch_request(req);
+    }
+}
+
+void wasm_sub_event(int32 url_offset)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *url = NULL;
+
+    if (!validate_app_addr(url_offset, 1))
+        return;
+
+    url = addr_app_to_native(url_offset);
+
+    if (url != NULL) {
+        unsigned int mod_id = app_manager_get_module_id(Module_WASM_App);
+
+        am_register_event(url, mod_id);
+    }
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native/base/runtime_lib.h 
b/scriptsrcs/wamr/core/iwasm/lib/native/base/runtime_lib.h
new file mode 100755
index 0000000..bf4dccf
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/base/runtime_lib.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef LIB_BASE_RUNTIME_LIB_H_
+#define LIB_BASE_RUNTIME_LIB_H_
+
+#include "native_interface.h"
+
+#include "runtime_timer.h"
+
+void init_wasm_timer();
+timer_ctx_t get_wasm_timer_ctx();
+timer_ctx_t create_wasm_timer_ctx(unsigned int module_id, int prealloc_num);
+void destory_module_timer_ctx(unsigned int module_id);
+
+#endif /* LIB_BASE_RUNTIME_LIB_H_ */
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native/base/timer_wrapper.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/base/timer_wrapper.c
new file mode 100755
index 0000000..da5c894
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/base/timer_wrapper.c
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "runtime_timer.h"
+#include "app_manager_export.h"
+#include "module_wasm_app.h"
+#include "bh_list.h"
+#include "bh_thread.h"
+#include "bh_time.h"
+
+bh_list g_timer_ctx_list;
+korp_cond g_timer_ctx_list_cond;
+korp_mutex g_timer_ctx_list_mutex;
+typedef struct {
+    bh_list_link l;
+    timer_ctx_t timer_ctx;
+} timer_ctx_node_t;
+
+void wasm_timer_callback(timer_id_t id, unsigned int mod_id)
+{
+    module_data* module = module_data_list_lookup_id(mod_id);
+    if (module == NULL)
+        return;
+
+    // !!! the length parameter must be 0, so the receiver will
+    //     not free the payload pointer.
+    bh_post_msg(module->queue, TIMER_EVENT_WASM, (char *) id, 0);
+}
+
+///
+/// why we create a separate link for module timer contexts
+/// rather than traverse the module list?
+/// It helps to reduce the lock frequency for the module list.
+/// Also when we lock the module list and then call the callback for
+/// timer expire, the callback is request the list lock again for lookup
+/// the module from module id. It is for avoiding that situation.
+
+void * thread_modulers_timer_check(void * arg)
+{
+
+    int ms_to_expiry;
+    while (1) {
+        ms_to_expiry = -1;
+        vm_mutex_lock(&g_timer_ctx_list_mutex);
+        timer_ctx_node_t* elem = (timer_ctx_node_t*)
+                                 bh_list_first_elem(&g_timer_ctx_list);
+        while (elem) {
+            int next = check_app_timers(elem->timer_ctx);
+            if (next != -1) {
+                if (ms_to_expiry == -1 || ms_to_expiry > next)
+                    ms_to_expiry = next;
+            }
+
+            elem = (timer_ctx_node_t*) bh_list_elem_next(elem);
+        }
+        vm_mutex_unlock(&g_timer_ctx_list_mutex);
+
+        if (ms_to_expiry == -1)
+            ms_to_expiry = 60 * 1000;
+        vm_mutex_lock(&g_timer_ctx_list_mutex);
+        vm_cond_reltimedwait(&g_timer_ctx_list_cond, &g_timer_ctx_list_mutex,
+                             ms_to_expiry);
+        vm_mutex_unlock(&g_timer_ctx_list_mutex);
+    }
+}
+
+void wakeup_modules_timer_thread(timer_ctx_t ctx)
+{
+    vm_mutex_lock(&g_timer_ctx_list_mutex);
+    vm_cond_signal(&g_timer_ctx_list_cond);
+    vm_mutex_unlock(&g_timer_ctx_list_mutex);
+}
+
+void init_wasm_timer()
+{
+    korp_tid tm_tid;
+    bh_list_init(&g_timer_ctx_list);
+
+    vm_cond_init(&g_timer_ctx_list_cond);
+    /* temp solution for: thread_modulers_timer_check thread would recursive 
lock the mutex */
+    vm_recursive_mutex_init(&g_timer_ctx_list_mutex);
+
+    vm_thread_create(&tm_tid, thread_modulers_timer_check,
+                     NULL, BH_APPLET_PRESERVED_STACK_SIZE);
+}
+
+timer_ctx_t create_wasm_timer_ctx(unsigned int module_id, int prealloc_num)
+{
+    timer_ctx_t ctx = create_timer_ctx(wasm_timer_callback,
+                                       wakeup_modules_timer_thread,
+                                       prealloc_num,
+                                       module_id);
+
+    if (ctx == NULL)
+        return NULL;
+
+    timer_ctx_node_t * node = (timer_ctx_node_t*)
+                              bh_malloc(sizeof(timer_ctx_node_t));
+    if (node == NULL) {
+        destroy_timer_ctx(ctx);
+        return NULL;
+    }
+    memset(node, 0, sizeof(*node));
+    node->timer_ctx = ctx;
+
+    vm_mutex_lock(&g_timer_ctx_list_mutex);
+    bh_list_insert(&g_timer_ctx_list, node);
+    vm_mutex_unlock(&g_timer_ctx_list_mutex);
+
+    return ctx;
+}
+
+void destory_module_timer_ctx(unsigned int module_id)
+{
+    vm_mutex_lock(&g_timer_ctx_list_mutex);
+    timer_ctx_node_t* elem = (timer_ctx_node_t*)
+                             bh_list_first_elem(&g_timer_ctx_list);
+    while (elem) {
+        if (timer_ctx_get_owner(elem->timer_ctx) == module_id) {
+            bh_list_remove(&g_timer_ctx_list, elem);
+            destroy_timer_ctx(elem->timer_ctx);
+            bh_free(elem);
+            break;
+        }
+
+        elem = (timer_ctx_node_t*) bh_list_elem_next(elem);
+    }
+    vm_mutex_unlock(&g_timer_ctx_list_mutex);
+}
+
+timer_ctx_t get_wasm_timer_ctx()
+{
+    module_data * m = app_manager_get_module_data(Module_WASM_App);
+    if (m == NULL)
+        return NULL;
+    return m->timer_ctx;
+}
+
+timer_id_t wasm_create_timer(int interval, bool is_period, bool auto_start)
+{
+    return sys_create_timer(get_wasm_timer_ctx(), interval, is_period,
+                            auto_start);
+}
+
+void wasm_timer_destory(timer_id_t timer_id)
+{
+    sys_timer_destory(get_wasm_timer_ctx(), timer_id);
+}
+
+void wasm_timer_cancel(timer_id_t timer_id)
+{
+    sys_timer_cancel(get_wasm_timer_ctx(), timer_id);
+}
+
+void wasm_timer_restart(timer_id_t timer_id, int interval)
+{
+    sys_timer_restart(get_wasm_timer_ctx(), timer_id, interval);
+}
+
+extern uint32 get_sys_tick_ms();
+
+uint32 wasm_get_sys_tick_ms(void)
+{
+    return (uint32) bh_get_tick_ms();
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native/base/wasm_lib_base.cmake 
b/scriptsrcs/wamr/core/iwasm/lib/native/base/wasm_lib_base.cmake
new file mode 100755
index 0000000..de80a57
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/base/wasm_lib_base.cmake
@@ -0,0 +1,23 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (WASM_LIB_BASE_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${WASM_LIB_BASE_DIR})
+
+
+file (GLOB_RECURSE source_all ${WASM_LIB_BASE_DIR}/*.c)
+
+set (WASM_LIB_BASE_SOURCE ${source_all})
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/connection.inl 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/connection.inl
new file mode 100755
index 0000000..e736650
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/connection.inl
@@ -0,0 +1,20 @@
+/*
+* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+EXPORT_WASM_API(wasm_open_connection),
+EXPORT_WASM_API(wasm_close_connection),
+EXPORT_WASM_API(wasm_send_on_connection),
+EXPORT_WASM_API(wasm_config_connection),
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/connection_lib.h 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/connection_lib.h
new file mode 100755
index 0000000..49d2e39
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/connection_lib.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CONNECTION_LIB_H_
+#define CONNECTION_LIB_H_
+
+#include "attr_container.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ *****************
+ * This file defines connection library which should be implemented by 
different platforms
+ *****************
+ */
+
+/*
+ * @brief Open a connection.
+ *
+ * @param name name of the connection, "TCP", "UDP" or "UART"
+ * @param args connection arguments, such as: ip:127.0.0.1, port:8888
+ *
+ * @return 0~0xFFFFFFFE means id of the connection, otherwise(-1) means fail
+ */
+typedef uint32 (*connection_open_f)(const char *name, attr_container_t *args);
+
+/*
+ * @brief Close a connection.
+ *
+ * @param handle of the connection
+ */
+typedef void (*connection_close_f)(uint32 handle);
+
+/*
+ * @brief Send data to the connection in non-blocking manner.
+ *
+ * @param handle of the connection
+ * @param data data buffer to be sent
+ * @param len length of the data in byte
+ *
+ * @return actual length sent, -1 if fail
+ */
+typedef int (*connection_send_f)(uint32 handle, const char *data, int len);
+
+/*
+ * @brief Configure connection.
+ *
+ * @param handle of the connection
+ * @param cfg configurations
+ *
+ * @return true if success, false otherwise
+ */
+typedef bool (*connection_config_f)(uint32 handle, attr_container_t *cfg);
+
+/* Raw connection interface for platform to implement */
+typedef struct _connection_interface {
+    connection_open_f _open;
+    connection_close_f _close;
+    connection_send_f _send;
+    connection_config_f _config;
+} connection_interface_t;
+
+/* Platform must define this interface */
+extern connection_interface_t connection_impl;
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* CONNECTION_LIB_H_ */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/connection_wrapper.c
 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/connection_wrapper.c
new file mode 100755
index 0000000..7bcf586
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/connection_wrapper.c
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "connection_lib.h"
+#include "wasm_export.h"
+#include "native_interface.h"
+
+/* Note:
+ *
+ * This file is the consumer of connection lib which is implemented by 
different platforms
+ */
+
+
+uint32 wasm_open_connection(int32 name_offset, int32 args_offset, uint32 len)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    attr_container_t *args;
+    char *name, *args_buf;
+
+    if (!validate_app_addr(name_offset, 1) ||
+        !validate_app_addr(args_offset, len) ||
+        !(name = addr_app_to_native(name_offset)) ||
+        !(args_buf = addr_app_to_native(args_offset)))
+        return -1;
+
+    args = (attr_container_t *)args_buf;
+
+    if (connection_impl._open != NULL)
+        return connection_impl._open(name, args);
+
+    return -1;
+}
+
+void wasm_close_connection(uint32 handle)
+{
+    if (connection_impl._close != NULL)
+        connection_impl._close(handle);
+}
+
+int wasm_send_on_connection(uint32 handle, int32 data_offset, uint32 len)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *data;
+
+    if (!validate_app_addr(data_offset, len) ||
+        !(data = addr_app_to_native(data_offset)))
+     return -1;
+
+    if (connection_impl._send != NULL)
+        return connection_impl._send(handle, data, len);
+
+    return -1;
+}
+
+bool wasm_config_connection(uint32 handle, int32 cfg_offset, uint32 len)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *cfg_buf;
+    attr_container_t *cfg;
+
+    if (!validate_app_addr(cfg_offset, len) ||
+        !(cfg_buf = addr_app_to_native(cfg_offset)))
+     return false;
+
+    cfg = (attr_container_t *)cfg_buf;
+
+    if (connection_impl._config != NULL)
+        return connection_impl._config(handle, cfg);
+
+    return false;
+}
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_tcp.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_tcp.c
new file mode 100755
index 0000000..3a6bded
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_tcp.c
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "conn_tcp.h"
+
+#include <sys/socket.h>
+#include <netdb.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+int tcp_open(char *address, uint16 port)
+{
+    int sock, ret;
+    struct sockaddr_in servaddr;
+
+    memset(&servaddr, 0, sizeof(servaddr));
+    servaddr.sin_family = AF_INET;
+    servaddr.sin_addr.s_addr = inet_addr(address);
+    servaddr.sin_port = htons(port);
+
+    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+    if (sock == -1)
+        return -1;
+
+    ret = connect(sock, (struct sockaddr*)&servaddr, sizeof(servaddr));
+    if (ret == -1) {
+        close(sock);
+        return -1;
+    }
+
+    /* Put the socket in non-blocking mode */
+    if (fcntl(sock, F_SETFL, fcntl(sock, F_GETFL) | O_NONBLOCK) < 0) {
+        close(sock);
+        return -1;
+    }
+
+    return sock;
+}
+
+int tcp_send(int sock, const char *data, int size)
+{
+    return send(sock, data, size, 0);
+}
+
+int tcp_recv(int sock, char *buffer, int buf_size)
+{
+    return recv(sock, buffer, buf_size, 0);
+}
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_tcp.h 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_tcp.h
new file mode 100755
index 0000000..84caf2a
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_tcp.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CONN_LINUX_TCP_H_
+#define CONN_LINUX_TCP_H_
+
+#include "bh_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int tcp_open(char *address, uint16 port);
+
+int tcp_send(int sock, const char *data, int size);
+
+int tcp_recv(int sock, char *buffer, int buf_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_uart.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_uart.c
new file mode 100755
index 0000000..6ca848b
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_uart.c
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "conn_uart.h"
+
+#include <fcntl.h>
+#include <termios.h>
+#include <unistd.h>
+
+static int parse_baudrate(int baud)
+{
+    switch (baud) {
+        case 9600:
+            return B9600;
+        case 19200:
+            return B19200;
+        case 38400:
+            return B38400;
+        case 57600:
+            return B57600;
+        case 115200:
+            return B115200;
+        case 230400:
+            return B230400;
+        case 460800:
+            return B460800;
+        case 500000:
+            return B500000;
+        case 576000:
+            return B576000;
+        case 921600:
+            return B921600;
+        case 1000000:
+            return B1000000;
+        case 1152000:
+            return B1152000;
+        case 1500000:
+            return B1500000;
+        case 2000000:
+            return B2000000;
+        case 2500000:
+            return B2500000;
+        case 3000000:
+            return B3000000;
+        case 3500000:
+            return B3500000;
+        case 4000000:
+            return B4000000;
+        default:
+            return -1;
+    }
+}
+
+int uart_open(char* device, int baudrate)
+{
+    int uart_fd;
+    struct termios uart_term;
+
+    uart_fd = open(device, O_RDWR | O_NOCTTY);
+
+    if (uart_fd <= 0)
+        return -1;
+
+    memset(&uart_term, 0, sizeof(uart_term));
+    uart_term.c_cflag = parse_baudrate(baudrate) | CS8 | CLOCAL | CREAD;
+    uart_term.c_iflag = IGNPAR;
+    uart_term.c_oflag = 0;
+
+    /* set noncanonical mode */
+    uart_term.c_lflag = 0;
+    uart_term.c_cc[VTIME] = 30;
+    uart_term.c_cc[VMIN] = 1;
+    tcflush(uart_fd, TCIFLUSH);
+
+    if (tcsetattr(uart_fd, TCSANOW, &uart_term) != 0) {
+        close(uart_fd);
+        return -1;
+    }
+
+    /* Put the fd in non-blocking mode */
+    if (fcntl(uart_fd, F_SETFL, fcntl(uart_fd, F_GETFL) | O_NONBLOCK) < 0) {
+        close(uart_fd);
+        return -1;
+    }
+
+    return uart_fd;
+}
+
+int uart_send(int fd, const char *data, int size)
+{
+    return write(fd, data, size);
+}
+
+int uart_recv(int fd, char *buffer, int buf_size)
+{
+    return read(fd, buffer, buf_size);
+}
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_uart.h 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_uart.h
new file mode 100755
index 0000000..1e67811
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_uart.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CONN_LINUX_UART_H_
+#define CONN_LINUX_UART_H_
+
+#include "bh_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int uart_open(char* device, int baudrate);
+
+int uart_send(int fd, const char *data, int size);
+
+int uart_recv(int fd, char *buffer, int buf_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_udp.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_udp.c
new file mode 100755
index 0000000..d93c23f
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_udp.c
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "conn_udp.h"
+
+#include <sys/socket.h>
+#include <netdb.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+int udp_open(uint16 port)
+{
+    int sock, ret;
+    struct sockaddr_in addr;
+
+    sock = socket(AF_INET, SOCK_DGRAM, 0);
+    if (sock == -1)
+        return -1;
+
+    memset(&addr, 0, sizeof(addr));
+    addr.sin_family = AF_INET;
+    addr.sin_addr.s_addr = htonl(INADDR_ANY);
+    addr.sin_port = htons(port);
+
+    ret = bind(sock, (struct sockaddr*)&addr, sizeof(addr));
+    if (ret == -1)
+        return -1;
+
+    /* Put the socket in non-blocking mode */
+    if (fcntl(sock, F_SETFL, fcntl(sock, F_GETFL) | O_NONBLOCK) < 0) {
+        close(sock);
+        return -1;
+    }
+
+    return sock;
+}
+
+int udp_send(int sock, struct sockaddr *dest, const char *data, int size)
+{
+    return sendto(sock, data, size, MSG_CONFIRM, dest, sizeof(*dest));
+}
+
+int udp_recv(int sock, char *buffer, int buf_size)
+{
+    struct sockaddr_in remaddr;
+    socklen_t addrlen = sizeof(remaddr);
+
+    return recvfrom(sock,
+                    buffer,
+                    buf_size,
+                    0,
+                    (struct sockaddr *)&remaddr,
+                    &addrlen);
+}
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_udp.h 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_udp.h
new file mode 100755
index 0000000..f3cbf4b
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/conn_udp.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CONN_LINUX_UDP_H_
+#define CONN_LINUX_UDP_H_
+
+#include "bh_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int udp_open(uint16 port);
+
+int udp_send(int sock, struct sockaddr *dest, const char *data, int size);
+
+int udp_recv(int sock, char *buffer, int buf_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/connection_mgr.c
 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/connection_mgr.c
new file mode 100755
index 0000000..27c18cd
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/connection_mgr.c
@@ -0,0 +1,572 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Note:
+ * This file implements the linux version connection library which is
+ * defined in connection_lib.h.
+ * It also provides a reference implementation of connections manager.
+ */
+
+#include "connection_lib.h"
+#include "bh_thread.h"
+#include "app_manager_export.h"
+#include "module_wasm_app.h"
+#include "conn_tcp.h"
+#include "conn_udp.h"
+#include "conn_uart.h"
+#include "bh_definition.h"
+
+#include <unistd.h>
+#include <sys/epoll.h>
+#include <sys/types.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+
+#define MAX_EVENTS 10
+#define IO_BUF_SIZE 256
+
+/* Connection type */
+typedef enum conn_type {
+    CONN_TYPE_TCP,
+    CONN_TYPE_UDP,
+    CONN_TYPE_UART,
+    CONN_TYPE_UNKNOWN
+} conn_type_t;
+
+/* Sys connection */
+typedef struct sys_connection {
+    /* Next connection */
+    struct sys_connection *next;
+
+    /* Type */
+    conn_type_t type;
+
+    /* Handle to interact with wasm app */
+    uint32 handle;
+
+    /* Underlying connection ID, may be socket fd */
+    int fd;
+
+    /* Module id that the connection belongs to */
+    uint32 module_id;
+
+    /* Argument, such as dest addr for udp */
+    void *arg;
+} sys_connection_t;
+
+/* Epoll instance */
+static int epollfd;
+
+/* Connections list */
+static sys_connection_t *g_connections = NULL;
+
+/* Max handle */
+static uint32 g_handle_max = 0;
+
+/* Lock to protect g_connections and g_handle_max */
+static korp_mutex g_lock;
+
+/* Epoll events */
+static struct epoll_event epoll_events[MAX_EVENTS];
+
+/* Buffer to receive data */
+static char io_buf[IO_BUF_SIZE];
+
+static uint32 _conn_open(const char *name, attr_container_t *args);
+static void _conn_close(uint32 handle);
+static int _conn_send(uint32 handle, const char *data, int len);
+static bool _conn_config(uint32 handle, attr_container_t *cfg);
+
+/*
+ * Platform implementation of connection library
+ */
+connection_interface_t connection_impl = {
+        ._open = _conn_open,
+        ._close = _conn_close,
+        ._send = _conn_send,
+        ._config = _conn_config
+};
+
+static void add_connection(sys_connection_t *conn)
+{
+    vm_mutex_lock(&g_lock);
+
+    g_handle_max++;
+    if (g_handle_max == -1)
+        g_handle_max++;
+    conn->handle = g_handle_max;
+
+    if (g_connections) {
+        conn->next = g_connections;
+        g_connections = conn;
+    } else {
+        g_connections = conn;
+    }
+
+    vm_mutex_unlock(&g_lock);
+}
+
+#define FREE_CONNECTION(conn) do {      \
+    if (conn->arg)                      \
+        bh_free(conn->arg);             \
+    bh_free(conn);                      \
+} while (0)
+
+static int get_app_conns_num(uint32 module_id)
+{
+    sys_connection_t *conn;
+    int num = 0;
+
+    vm_mutex_lock(&g_lock);
+
+    conn = g_connections;
+    while (conn) {
+        if (conn->module_id == module_id)
+            num++;
+        conn = conn->next;
+    }
+
+    vm_mutex_unlock(&g_lock);
+
+    return num;
+}
+
+static sys_connection_t *find_connection(uint32 handle, bool remove_found)
+{
+    sys_connection_t *conn, *prev = NULL;
+
+    vm_mutex_lock(&g_lock);
+
+    conn = g_connections;
+    while (conn) {
+        if (conn->handle == handle) {
+            if (remove_found) {
+                if (prev != NULL) {
+                    prev->next = conn->next;
+                } else {
+                    g_connections = conn->next;
+                }
+            }
+            vm_mutex_unlock(&g_lock);
+            return conn;
+        } else {
+            prev = conn;
+            conn = conn->next;
+        }
+    }
+
+    vm_mutex_unlock(&g_lock);
+
+    return NULL;
+}
+
+static void cleanup_connections(uint32 module_id)
+{
+    sys_connection_t *conn, *prev = NULL;
+
+    vm_mutex_lock(&g_lock);
+
+    conn = g_connections;
+    while (conn) {
+        if (conn->module_id == module_id) {
+            epoll_ctl(epollfd, EPOLL_CTL_DEL, conn->fd, NULL);
+            close(conn->fd);
+
+            if (prev != NULL) {
+                prev->next = conn->next;
+                FREE_CONNECTION(conn);
+                conn = prev->next;
+            } else {
+                g_connections = conn->next;
+                FREE_CONNECTION(conn);
+                conn = g_connections;
+            }
+        } else {
+            prev = conn;
+            conn = conn->next;
+        }
+    }
+
+    vm_mutex_unlock(&g_lock);
+}
+
+static conn_type_t get_conn_type(const char *name)
+{
+    if (strcmp(name, "TCP") == 0)
+        return CONN_TYPE_TCP;
+    if (strcmp(name, "UDP") == 0)
+        return CONN_TYPE_UDP;
+    if (strcmp(name, "UART") == 0)
+        return CONN_TYPE_UART;
+
+    return CONN_TYPE_UNKNOWN;
+}
+
+/* --- connection lib function --- */
+static uint32 _conn_open(const char *name, attr_container_t *args)
+{
+    int fd;
+    sys_connection_t *conn;
+    struct epoll_event ev;
+    uint32 module_id = app_manager_get_module_id(Module_WASM_App);
+
+    if (get_app_conns_num(module_id) >= MAX_CONNECTION_PER_APP)
+        return -1;
+
+    conn = (sys_connection_t *)bh_malloc(sizeof(*conn));
+    if (conn == NULL)
+        return -1;
+
+    memset(conn, 0, sizeof(*conn));
+    conn->module_id = module_id;
+    conn->type = get_conn_type(name);
+
+    /* Generate a handle and add to list */
+    add_connection(conn);
+
+    if (conn->type == CONN_TYPE_TCP) {
+        char *address;
+        uint16 port;
+
+        /* Check and parse connection parameters */
+        if (!attr_container_contain_key(args, "address") ||
+            !attr_container_contain_key(args, "port"))
+            goto fail;
+
+        address = attr_container_get_as_string(args, "address");
+        port = attr_container_get_as_uint16(args, "port");
+
+        /* Connect to TCP server */
+        if ((fd = tcp_open(address, port)) == -1)
+            goto fail;
+
+    } else if (conn->type == CONN_TYPE_UDP) {
+        uint16 port;
+
+        /* Check and parse connection parameters */
+        if (!attr_container_contain_key(args, "bind port"))
+            goto fail;
+        port = attr_container_get_as_uint16(args, "bind port");
+
+        /* Bind port */
+        if ((fd = udp_open(port)) == -1)
+            goto fail;
+
+    } else if (conn->type == CONN_TYPE_UART) {
+        char *device;
+        int baud;
+
+        /* Check and parse connection parameters */
+        if (!attr_container_contain_key(args, "device") ||
+            !attr_container_contain_key(args, "baudrate"))
+            goto fail;
+        device = attr_container_get_as_string(args, "device");
+        baud = attr_container_get_as_int(args, "baudrate");
+
+        /* Open device */
+        if ((fd = uart_open(device, baud)) == -1)
+            goto fail;
+
+    }
+
+    conn->fd = fd;
+
+    /* Set current connection as event data */
+    ev.events = EPOLLIN;
+    ev.data.ptr = conn;
+
+    /* Monitor incoming data */
+    if (epoll_ctl(epollfd, EPOLL_CTL_ADD, fd, &ev) == -1) {
+        close(fd);
+        goto fail;
+    }
+
+    return conn->handle;
+
+fail:
+    find_connection(conn->handle, true);
+    bh_free(conn);
+    return -1;
+}
+
+/* --- connection lib function --- */
+static void _conn_close(uint32 handle)
+{
+    sys_connection_t *conn = find_connection(handle, true);
+
+    if (conn != NULL) {
+        epoll_ctl(epollfd, EPOLL_CTL_DEL, conn->fd, NULL);
+        close(conn->fd);
+        FREE_CONNECTION(conn);
+    }
+}
+
+/* --- connection lib function --- */
+static int _conn_send(uint32 handle, const char *data, int len)
+{
+    sys_connection_t *conn = find_connection(handle, false);
+
+    if (conn == NULL)
+        return -1;
+
+    if (conn->type == CONN_TYPE_TCP)
+        return tcp_send(conn->fd, data, len);
+
+    if (conn->type == CONN_TYPE_UDP) {
+        struct sockaddr *addr = (struct sockaddr *)conn->arg;
+        return udp_send(conn->fd, addr, data, len);
+    }
+
+    if (conn->type == CONN_TYPE_UART)
+        return uart_send(conn->fd, data, len);
+
+    return -1;
+}
+
+/* --- connection lib function --- */
+static bool _conn_config(uint32 handle, attr_container_t *cfg)
+{
+    sys_connection_t *conn = find_connection(handle, false);
+
+    if (conn == NULL)
+        return false;
+
+    if (conn->type == CONN_TYPE_UDP) {
+        char *address;
+        uint16_t port;
+        struct sockaddr_in *addr;
+
+        /* Parse remote address/port */
+        if (!attr_container_contain_key(cfg, "address") ||
+            !attr_container_contain_key(cfg, "port"))
+            return false;
+        address = attr_container_get_as_string(cfg, "address");
+        port = attr_container_get_as_uint16(cfg, "port");
+
+        if (conn->arg == NULL) {
+            addr = (struct sockaddr_in *)bh_malloc(sizeof(*addr));
+            if (addr == NULL)
+                return false;
+
+            memset(addr, 0, sizeof(*addr));
+            addr->sin_family = AF_INET;
+            addr->sin_addr.s_addr = inet_addr(address);
+            addr->sin_port = htons(port);
+
+            /* Set remote address as connection arg */
+            conn->arg = addr;
+        } else {
+            addr = (struct sockaddr_in *)conn->arg;
+            addr->sin_addr.s_addr = inet_addr(address);
+            addr->sin_port = htons(port);
+        }
+
+        return true;
+    }
+
+    return false;
+}
+
+/* --- connection manager reference implementation ---*/
+
+typedef struct connection_event {
+    uint32 handle;
+    char *data;
+    uint32 len;
+} connection_event_t;
+
+static void connection_event_cleaner(connection_event_t *conn_event)
+{
+    if (conn_event->data != NULL)
+        bh_free(conn_event->data);
+    bh_free(conn_event);
+}
+
+static void post_msg_to_module(sys_connection_t *conn,
+                               char *data,
+                               uint32 len)
+{
+    module_data *module = module_data_list_lookup_id(conn->module_id);
+    char *data_copy = NULL;
+    connection_event_t *conn_data_event;
+    bh_message_t msg;
+
+    if (module == NULL)
+        return;
+
+    conn_data_event = (connection_event_t 
*)bh_malloc(sizeof(*conn_data_event));
+    if (conn_data_event == NULL)
+        return;
+
+    if (len > 0) {
+        data_copy = (char *)bh_malloc(len);
+        if (data_copy == NULL) {
+            bh_free(conn_data_event);
+            return;
+        }
+        memcpy(data_copy, data, len);
+    }
+
+    memset(conn_data_event, 0, sizeof(*conn_data_event));
+    conn_data_event->handle = conn->handle;
+    conn_data_event->data = data_copy;
+    conn_data_event->len = len;
+
+    msg = bh_new_msg(CONNECTION_EVENT_WASM,
+                     conn_data_event,
+                     sizeof(*conn_data_event),
+                     connection_event_cleaner);
+    if (!msg) {
+        connection_event_cleaner(conn_data_event);
+        return;
+    }
+
+    bh_post_msg2(module->queue, msg);
+}
+
+static void* polling_thread_routine (void *arg)
+{
+    while (true) {
+        int i, n;
+
+        n = epoll_wait(epollfd, epoll_events, MAX_EVENTS, -1);
+
+        if (n == -1 && errno != EINTR)
+            continue;
+
+        for (i = 0; i < n; i++) {
+            sys_connection_t *conn
+                             = (sys_connection_t *)epoll_events[i].data.ptr;
+
+            if (conn->type == CONN_TYPE_TCP) {
+                int count = tcp_recv(conn->fd, io_buf, IO_BUF_SIZE);
+                if (count <= 0) {
+                    /* Connection is closed by peer */
+                    post_msg_to_module(conn, NULL, 0);
+                    _conn_close(conn->handle);
+                } else {
+                    /* Data is received */
+                    post_msg_to_module(conn, io_buf, count);
+                }
+            } else if (conn->type == CONN_TYPE_UDP) {
+                int count = udp_recv(conn->fd, io_buf, IO_BUF_SIZE);
+                if (count > 0)
+                    post_msg_to_module(conn, io_buf, count);
+            } else if (conn->type == CONN_TYPE_UART) {
+                int count = uart_recv(conn->fd, io_buf, IO_BUF_SIZE);
+                if (count > 0)
+                    post_msg_to_module(conn, io_buf, count);
+            }
+        }
+    }
+
+    return NULL;
+}
+
+void app_mgr_connection_event_callback(module_data *m_data, bh_message_t msg)
+{
+    uint32 argv[3];
+    wasm_function_inst_t func_on_conn_data;
+    bh_assert(CONNECTION_EVENT_WASM == bh_message_type(msg));
+    wasm_data *wasm_app_data = (wasm_data*) m_data->internal_data;
+    wasm_module_inst_t inst = wasm_app_data->wasm_module_inst;
+    connection_event_t *conn_event
+                       = (connection_event_t *)bh_message_payload(msg);
+    int32 data_offset;
+
+    if (conn_event == NULL)
+        return;
+
+    func_on_conn_data = wasm_runtime_lookup_function(inst, 
"_on_connection_data",
+                                                      "(i32i32i32)");
+    if (!func_on_conn_data) {
+        printf("Cannot find function _on_connection_data\n");
+        return;
+    }
+
+    /* 0 len means connection closed */
+    if (conn_event->len == 0) {
+        argv[0] = conn_event->handle;
+        argv[1] = 0;
+        argv[2] = 0;
+        if (!wasm_runtime_call_wasm(inst, NULL, func_on_conn_data, 3, argv)) {
+            printf(":Got exception running wasm code: %s\n",
+                    wasm_runtime_get_exception(inst));
+            wasm_runtime_clear_exception(inst);
+            return;
+        }
+    } else {
+        data_offset = wasm_runtime_module_dup_data(inst,
+                                                   conn_event->data,
+                                                   conn_event->len);
+        if (data_offset == 0) {
+            printf("Got exception running wasm code: %s\n",
+                    wasm_runtime_get_exception(inst));
+            wasm_runtime_clear_exception(inst);
+            return;
+        }
+
+        argv[0] = conn_event->handle;
+        argv[1] = (uint32) data_offset;
+        argv[2] = conn_event->len;
+        if (!wasm_runtime_call_wasm(inst, NULL, func_on_conn_data, 3, argv)) {
+            printf(":Got exception running wasm code: %s\n",
+                    wasm_runtime_get_exception(inst));
+            wasm_runtime_clear_exception(inst);
+            wasm_runtime_module_free(inst, data_offset);
+            return;
+        }
+        wasm_runtime_module_free(inst, data_offset);
+    }
+}
+
+bool init_connection_framework()
+{
+    korp_thread tid;
+
+    epollfd = epoll_create(MAX_EVENTS);
+    if (epollfd == -1)
+        return false;
+
+    if (vm_mutex_init(&g_lock) != BH_SUCCESS) {
+        close(epollfd);
+        return false;
+    }
+
+    if (!wasm_register_cleanup_callback(cleanup_connections)) {
+        goto fail;
+    }
+
+    if (!wasm_register_msg_callback(CONNECTION_EVENT_WASM,
+                               app_mgr_connection_event_callback)) {
+        goto fail;
+    }
+
+    if (vm_thread_create(&tid,
+                         polling_thread_routine,
+                         NULL,
+                         BH_APPLET_PRESERVED_STACK_SIZE) != BH_SUCCESS) {
+        goto fail;
+    }
+
+    return true;
+
+fail:
+    vm_mutex_destroy(&g_lock);
+    close(epollfd);
+    return false;
+}
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/connection_mgr.cmake
 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/connection_mgr.cmake
new file mode 100755
index 0000000..72ab455
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/linux/connection_mgr.cmake
@@ -0,0 +1,24 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (WASM_LIB_CONN_MGR_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${WASM_LIB_CONN_MGR_DIR})
+
+
+file (GLOB_RECURSE source_all ${WASM_LIB_CONN_MGR_DIR}/*.c)
+
+set (WASM_LIB_CONN_MGR_SOURCE ${source_all})
+
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/wasm_lib_conn.cmake
 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/wasm_lib_conn.cmake
new file mode 100755
index 0000000..2018706
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/wasm_lib_conn.cmake
@@ -0,0 +1,23 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (WASM_LIB_CONN_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${WASM_LIB_CONN_DIR})
+
+
+file (GLOB source_all ${WASM_LIB_CONN_DIR}/*.c)
+
+set (WASM_LIB_CONN_SOURCE ${source_all})
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/zephyr/connection_lib_impl.c
 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/zephyr/connection_lib_impl.c
new file mode 100755
index 0000000..3794370
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/connection/zephyr/connection_lib_impl.c
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Note:
+ * This file implements the linux version connection library which is
+ * defined in connection_lib.h.
+ * It also provides a reference impl of connections manager.
+ */
+
+#include "connection_lib.h"
+
+/*
+ * Platform implementation of connection library
+ */
+connection_interface_t connection_impl = {
+        ._open = NULL,
+        ._close = NULL,
+        ._send = NULL,
+        ._config = NULL
+};
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wamr_gui.inl 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wamr_gui.inl
new file mode 100755
index 0000000..49ce5bf
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wamr_gui.inl
@@ -0,0 +1,39 @@
+/*
+* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/* button */
+EXPORT_WASM_API(wasm_btn_native_call),
+
+/* obj */
+EXPORT_WASM_API(wasm_obj_native_call),
+
+/* label */
+EXPORT_WASM_API(wasm_label_native_call),
+
+/* cont */
+//EXPORT_WASM_API(wasm_cont_native_call),
+
+/* page */
+//EXPORT_WASM_API(wasm_page_native_call),
+
+/* list */
+EXPORT_WASM_API(wasm_list_native_call),
+
+/* drop down list */
+//EXPORT_WASM_API(wasm_ddlist_native_call),
+
+/* check box */
+EXPORT_WASM_API(wasm_cb_native_call),
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wasm_lib_gui.cmake 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wasm_lib_gui.cmake
new file mode 100755
index 0000000..d8af8c9
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wasm_lib_gui.cmake
@@ -0,0 +1,25 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (WASM_LIB_GUI_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+set (THIRD_PARTY_DIR ${WASM_LIB_GUI_DIR}/../../../3rdparty)
+
+include_directories(${WASM_LIB_GUI_DIR} ${THIRD_PARTY_DIR} 
${THIRD_PARTY_DIR}/lvgl)
+
+file (GLOB_RECURSE lvgl_source ${THIRD_PARTY_DIR}/lvgl/*.c)
+file (GLOB_RECURSE wrapper_source ${WASM_LIB_GUI_DIR}/*.c)
+
+set (WASM_LIB_GUI_SOURCE ${wrapper_source} ${lvgl_source})
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_btn_wrapper.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_btn_wrapper.c
new file mode 100755
index 0000000..7b41826
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_btn_wrapper.c
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "native_interface.h"
+#include "lvgl.h"
+#include "module_wasm_app.h"
+#include "wgl_native_utils.h"
+
+/* -------------------------------------------------------------------------
+ * Button widget native function wrappers
+ * -------------------------------------------------------------------------*/
+static int32 _btn_create(lv_obj_t *par, lv_obj_t *copy)
+{
+    return wgl_native_wigdet_create(WIDGET_TYPE_BTN, par, copy);
+}
+
+static WGLNativeFuncDef btn_native_func_defs[] = {
+    { BTN_FUNC_ID_CREATE, _btn_create, HAS_RET, 2, {0 | NULL_OK, 1 | NULL_OK, 
-1},  {-1} },
+    { BTN_FUNC_ID_SET_TOGGLE, lv_btn_set_toggle, NO_RET, 2, {0, -1}, {-1} },
+    { BTN_FUNC_ID_SET_STATE, lv_btn_set_state, NO_RET, 2, {0, -1}, {-1} },
+//    { BTN_FUNC_ID_SET_STYLE, _btn_set_style, NO_RET, 2, {0, -1}, {-1} },
+    { BTN_FUNC_ID_SET_INK_IN_TIME, lv_btn_set_ink_in_time, NO_RET, 2, {0, -1}, 
{-1} },
+    { BTN_FUNC_ID_SET_INK_OUT_TIME, lv_btn_set_ink_out_time, NO_RET, 2, {0, 
-1}, {-1} },
+    { BTN_FUNC_ID_SET_INK_WAIT_TIME, lv_btn_set_ink_wait_time, NO_RET, 2, {0, 
-1}, {-1} },
+    { BTN_FUNC_ID_GET_INK_IN_TIME, lv_btn_get_ink_in_time, HAS_RET, 1, {0, 
-1}, {-1} },
+    { BTN_FUNC_ID_GET_INK_OUT_TIME, lv_btn_get_ink_out_time, HAS_RET, 1, {0, 
-1}, {-1} },
+    { BTN_FUNC_ID_GET_INK_WAIT_TIME, lv_btn_get_ink_wait_time, HAS_RET, 1, {0, 
-1}, {-1} },
+    { BTN_FUNC_ID_GET_STATE, lv_btn_get_state, HAS_RET, 1, {0, -1}, {-1} },
+    { BTN_FUNC_ID_GET_TOGGLE, lv_btn_get_toggle, HAS_RET, 1, {0, -1}, {-1} },
+    { BTN_FUNC_ID_TOGGLE, lv_btn_toggle, NO_RET, 1, {0, -1}, {-1} },
+
+};
+
+/*************** Native Interface to Wasm App ***********/
+void wasm_btn_native_call(int32 func_id, uint32 argv_offset, uint32 argc)
+{
+    uint32 size = sizeof(btn_native_func_defs) / sizeof(WGLNativeFuncDef);
+
+    wgl_native_func_call(btn_native_func_defs,
+                         size,
+                         func_id,
+                         argv_offset,
+                         argc);
+}
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_cb_wrapper.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_cb_wrapper.c
new file mode 100755
index 0000000..4356433
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_cb_wrapper.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "lvgl.h"
+#include "wasm_export.h"
+#include "native_interface.h"
+#include "module_wasm_app.h"
+#include "wgl_native_utils.h"
+
+/* -------------------------------------------------------------------------
+ * Label widget native function wrappers
+ * -------------------------------------------------------------------------*/
+static int32 _cb_create(lv_obj_t *par, lv_obj_t *copy)
+{
+    return wgl_native_wigdet_create(WIDGET_TYPE_CB, par, copy);
+}
+
+static int32 _cb_get_text_length(lv_obj_t *cb)
+{
+    const char *text = lv_cb_get_text(cb);
+
+    if (text == NULL)
+        return 0;
+
+    return strlen(text);
+}
+
+static int32 _cb_get_text(lv_obj_t *cb, char *buffer, int buffer_len)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    const char *text = lv_cb_get_text(cb);
+
+    if (text == NULL)
+        return 0;
+
+    strncpy(buffer, text, buffer_len - 1);
+    buffer[buffer_len - 1] = '\0';
+
+    return addr_native_to_app(buffer);
+}
+
+static WGLNativeFuncDef cb_native_func_defs[] = {
+        { CB_FUNC_ID_CREATE, _cb_create, HAS_RET, 2, {0 | NULL_OK, 1 | 
NULL_OK, -1}, {-1} },
+        { CB_FUNC_ID_SET_TEXT, lv_cb_set_text, NO_RET, 2, {0, -1}, {1, -1} },
+        { CB_FUNC_ID_SET_STATIC_TEXT, lv_cb_set_static_text, NO_RET, 2, {0, 
-1}, {1, -1} },
+        { CB_FUNC_ID_GET_TEXT_LENGTH, _cb_get_text_length, HAS_RET, 1, {0, 
-1}, {-1} },
+        { CB_FUNC_ID_GET_TEXT, _cb_get_text, HAS_RET, 3, {0, -1}, {1, -1} },
+};
+
+/*************** Native Interface to Wasm App ***********/
+void wasm_cb_native_call(int32 func_id, uint32 argv_offset, uint32 argc)
+{
+    uint32 size = sizeof(cb_native_func_defs) / sizeof(WGLNativeFuncDef);
+
+    wgl_native_func_call(cb_native_func_defs,
+                         size,
+                         func_id,
+                         argv_offset,
+                         argc);
+}
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_cont_wrapper.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_cont_wrapper.c
new file mode 100755
index 0000000..709ed75
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_cont_wrapper.c
@@ -0,0 +1,18 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "lvgl.h"
+#include "module_wasm_app.h"
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_label_wrapper.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_label_wrapper.c
new file mode 100755
index 0000000..edf5ba4
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_label_wrapper.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "lvgl.h"
+#include "wasm_export.h"
+#include "native_interface.h"
+#include "module_wasm_app.h"
+#include "wgl_native_utils.h"
+
+/* -------------------------------------------------------------------------
+ * Label widget native function wrappers
+ * -------------------------------------------------------------------------*/
+static int32 _label_create(lv_obj_t *par, lv_obj_t *copy)
+{
+    return wgl_native_wigdet_create(WIDGET_TYPE_LABEL, par, copy);
+}
+
+static int32 _label_get_text_length(lv_obj_t *label)
+{
+    char *text = lv_label_get_text(label);
+
+    if (text == NULL)
+        return 0;
+
+    return strlen(text);
+}
+
+static int32 _label_get_text(lv_obj_t *label, char *buffer, int buffer_len)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *text = lv_label_get_text(label);
+
+    if (text == NULL)
+        return 0;
+
+    strncpy(buffer, text, buffer_len - 1);
+    buffer[buffer_len - 1] = '\0';
+
+    return addr_native_to_app(buffer);
+}
+
+static WGLNativeFuncDef label_native_func_defs[] = {
+        { LABEL_FUNC_ID_CREATE, _label_create, HAS_RET, 2, {0 | NULL_OK, 1 | 
NULL_OK, -1}, {-1} },
+        { LABEL_FUNC_ID_SET_TEXT, lv_label_set_text, NO_RET, 2, {0, -1}, {1, 
-1} },
+        { LABEL_FUNC_ID_GET_TEXT_LENGTH, _label_get_text_length, HAS_RET, 1, 
{0, -1}, {-1} },
+        { LABEL_FUNC_ID_GET_TEXT, _label_get_text, HAS_RET, 3, {0, -1}, {1, 
-1} },
+};
+
+/*************** Native Interface to Wasm App ***********/
+void wasm_label_native_call(int32 func_id, uint32 argv_offset, uint32 argc)
+{
+    uint32 size = sizeof(label_native_func_defs) / sizeof(WGLNativeFuncDef);
+
+    wgl_native_func_call(label_native_func_defs,
+                         size,
+                         func_id,
+                         argv_offset,
+                         argc);
+}
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_list_wrapper.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_list_wrapper.c
new file mode 100755
index 0000000..8822307
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_list_wrapper.c
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "native_interface.h"
+#include "lvgl.h"
+#include "module_wasm_app.h"
+#include "wgl_native_utils.h"
+
+/* -------------------------------------------------------------------------
+ * List widget native function wrappers
+ * -------------------------------------------------------------------------*/
+static int32 _list_create(lv_obj_t *par, lv_obj_t *copy)
+{
+    return wgl_native_wigdet_create(WIDGET_TYPE_LIST, par, copy);
+}
+
+static int32 _list_add_btn(lv_obj_t *list, const char *text)
+{
+    uint32 btn_obj_id;
+    lv_obj_t *btn;
+
+    btn = lv_list_add_btn(list, NULL, text);
+
+    if (btn == NULL)
+        return 0;
+
+    if (wgl_native_add_object(btn,
+                              app_manager_get_module_id(Module_WASM_App),
+                              &btn_obj_id))
+        return btn_obj_id; /* success return */
+
+    return 0;
+}
+
+static WGLNativeFuncDef list_native_func_defs[] = {
+    { LIST_FUNC_ID_CREATE, _list_create, HAS_RET, 2, {0 | NULL_OK, 1 | 
NULL_OK, -1},  {-1} },
+    { LIST_FUNC_ID_ADD_BTN, _list_add_btn, HAS_RET, 2, {0, -1}, {1, -1} },
+};
+
+/*************** Native Interface to Wasm App ***********/
+void wasm_list_native_call(int32 func_id, uint32 argv_offset, uint32 argc)
+{
+    uint32 size = sizeof(list_native_func_defs) / sizeof(WGLNativeFuncDef);
+
+    wgl_native_func_call(list_native_func_defs,
+                         size,
+                         func_id,
+                         argv_offset,
+                         argc);
+}
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_native_utils.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_native_utils.c
new file mode 100755
index 0000000..98bd85c
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_native_utils.c
@@ -0,0 +1,201 @@
+
+
+#include "wgl_native_utils.h"
+#include "lvgl.h"
+#include "module_wasm_app.h"
+#include "wasm_export.h"
+
+#include <stdint.h>
+
+#define THROW_EXC(msg) wasm_runtime_set_exception(get_module_inst(), msg);
+
+void
+wasm_runtime_set_exception(wasm_module_inst_t module, const char *exception);
+
+uint32 wgl_native_wigdet_create(int8 widget_type, lv_obj_t *par, lv_obj_t 
*copy)
+{
+    uint32 obj_id;
+    lv_obj_t *wigdet;
+
+    //TODO: limit total widget number
+
+    if (par == NULL)
+        par = lv_disp_get_scr_act(NULL);
+
+    if (widget_type == WIDGET_TYPE_BTN)
+        wigdet = lv_btn_create(par, copy);
+    else if (widget_type == WIDGET_TYPE_LABEL)
+        wigdet = lv_label_create(par, copy);
+    else if (widget_type == WIDGET_TYPE_CB)
+        wigdet = lv_cb_create(par, copy);
+    else if (widget_type == WIDGET_TYPE_LIST)
+        wigdet = lv_list_create(par, copy);
+    else if (widget_type == WIDGET_TYPE_DDLIST)
+        wigdet = lv_ddlist_create(par, copy);
+
+    if (wigdet == NULL)
+        return 0;
+
+    if (wgl_native_add_object(wigdet,
+                              app_manager_get_module_id(Module_WASM_App),
+                              &obj_id))
+        return obj_id; /* success return */
+
+    return 0;
+}
+
+static void invokeNative(intptr_t argv[], uint32 argc, void (*native_code)())
+{
+    switch(argc) {
+        case 0:
+            native_code();
+            break;
+        case 1:
+            native_code(argv[0]);
+            break;
+        case 2:
+            native_code(argv[0], argv[1]);
+            break;
+        case 3:
+            native_code(argv[0], argv[1], argv[2]);
+            break;
+        case 4:
+            native_code(argv[0], argv[1], argv[2], argv[3]);
+            break;
+        case 5:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4]);
+            break;
+        case 6:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
+            break;
+        case 7:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+                        argv[6]);
+            break;
+        case 8:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+                        argv[6], argv[7]);
+            break;
+        case 9:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+                        argv[6], argv[7], argv[8]);
+            break;
+        case 10:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+                        argv[6], argv[7], argv[8], argv[9]);
+            break;
+
+        default:
+            /* FIXME: If this happen, add more cases. */
+            wasm_runtime_set_exception(get_module_inst(),
+                    "the argument number of native function exceeds maximum");
+            return;
+    }
+}
+
+typedef void (*GenericFunctionPointer)();
+typedef int32 (*Int32FuncPtr)(intptr_t *, uint32, GenericFunctionPointer);
+typedef void (*VoidFuncPtr)(intptr_t *, uint32, GenericFunctionPointer);
+
+static Int32FuncPtr invokeNative_Int32 = (Int32FuncPtr)invokeNative;
+static VoidFuncPtr invokeNative_Void = (VoidFuncPtr)invokeNative;
+
+void wgl_native_func_call(WGLNativeFuncDef *funcs,
+                          uint32 size,
+                          int32 func_id,
+                          uint32 argv_offset,
+                          uint32 argc)
+{
+    WGLNativeFuncDef *func_def = funcs;
+    WGLNativeFuncDef *func_def_end = func_def + size;
+    uint32 *argv;
+    wasm_module_inst_t module_inst = get_module_inst();
+
+    if (!validate_app_addr(argv_offset, argc * sizeof(uint32)))
+        return;
+
+    argv = addr_app_to_native(argv_offset);
+
+    while (func_def < func_def_end) {
+        if (func_def->func_id == func_id) {
+            int i, obj_arg_num = 0, ptr_arg_num = 0;
+            intptr_t argv_copy_buf[16];
+            intptr_t *argv_copy = argv_copy_buf;
+
+            if (func_def->arg_num > 16) {
+                argv_copy = (intptr_t *)bh_malloc(func_def->arg_num *
+                                                  sizeof(intptr_t));
+                if (argv_copy == NULL)
+                    return;
+            }
+
+            /* Init argv_copy */
+            for (i = 0; i < func_def->arg_num; i++)
+                argv_copy[i] = (intptr_t)argv[i];
+
+            /* Validate object arguments */
+            i = 0;
+            for (; i < OBJ_ARG_NUM_MAX && func_def->obj_arg_indexes[i] != 0xff;
+                   i++, obj_arg_num++) {
+                uint8 index = func_def->obj_arg_indexes[i];
+                bool null_ok = index & NULL_OK;
+
+                index = index & (~NULL_OK);
+
+                /* Some API's allow to pass NULL obj, such as xxx_create() */
+                if (argv[index] == 0) {
+                    if (!null_ok) {
+                        THROW_EXC("the object id is 0 and invalid");
+                        goto fail;
+                    }
+                    /* Continue so that to pass null object validation */
+                    continue;
+                }
+
+                if (!wgl_native_validate_object(argv[index], (lv_obj_t 
**)&argv_copy[index])) {
+                    THROW_EXC("the object is invalid");
+                    goto fail;
+                }
+            }
+
+            /* Validate address arguments */
+            i = 0;
+            for (; i < PTR_ARG_NUM_MAX && func_def->ptr_arg_indexes[i] != 0xff;
+                   i++, ptr_arg_num++) {
+                uint8 index = func_def->ptr_arg_indexes[i];
+
+                /* The index+1 arg is the data size to be validated */
+                if (!validate_app_addr(argv[index], argv[index + 1]))
+                    goto fail;
+
+                /* Convert to native address before call lvgl function */
+                argv_copy[index] = (intptr_t)addr_app_to_native(argv[index]);
+            }
+
+            if (func_def->has_ret == NO_RET)
+                invokeNative_Void(argv_copy,
+                                  func_def->arg_num,
+                                  func_def->func_ptr);
+            else
+                argv[0] = invokeNative_Int32(argv_copy,
+                                             func_def->arg_num,
+                                             func_def->func_ptr);
+
+            if (argv_copy != argv_copy_buf)
+                bh_free(argv_copy);
+
+            /* success return */
+            return;
+
+        fail:
+            if (argv_copy != argv_copy_buf)
+                bh_free(argv_copy);
+            return;
+        }
+
+        func_def++;
+    }
+
+    THROW_EXC("the native widget function is not found!");
+}
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_native_utils.h 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_native_utils.h
new file mode 100755
index 0000000..e3d73b5
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_native_utils.h
@@ -0,0 +1,73 @@
+
+
+#ifndef WAMR_GRAPHIC_LIBRARY_NATIVE_UTILS_H
+#define WAMR_GRAPHIC_LIBRARY_NATIVE_UTILS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "bh_platform.h"
+#include "lvgl.h"
+
+#define OBJ_ARG_NUM_MAX 4
+#define PTR_ARG_NUM_MAX 4
+
+#define NULL_OK  0x80
+
+enum {
+    HAS_RET,
+    NO_RET
+};
+
+enum {
+  WIDGET_TYPE_BTN,
+  WIDGET_TYPE_LABEL,
+  WIDGET_TYPE_CB,
+  WIDGET_TYPE_LIST,
+  WIDGET_TYPE_DDLIST,
+
+  _WIDGET_TYPE_NUM,
+};
+
+typedef struct WGLNativeFuncDef {
+    /* Function id */
+    int32 func_id;
+
+    /* Native function pointer */
+    void *func_ptr;
+
+    /* whether has return value */
+    uint8 has_ret;
+
+    /* argument number */
+    uint8 arg_num;
+
+    /* low 7 bit: obj argument index
+     * highest 1 bit: allow obj be null or not
+     * -1 means the end of this array */
+    uint8 obj_arg_indexes[OBJ_ARG_NUM_MAX];
+
+    /* pointer argument indexes, -1 means the end of this array */
+    uint8 ptr_arg_indexes[PTR_ARG_NUM_MAX];
+} WGLNativeFuncDef;
+
+bool wgl_native_validate_object(int32 obj_id, lv_obj_t **obj);
+
+bool wgl_native_add_object(lv_obj_t *obj, uint32 module_id, uint32 *obj_id);
+
+uint32 wgl_native_wigdet_create(int8 widget_type,
+                                lv_obj_t *par,
+                                lv_obj_t *copy);
+
+void wgl_native_func_call(WGLNativeFuncDef *funcs,
+                          uint32 size,
+                          int32 func_id,
+                          uint32 argv_offset,
+                          uint32 argc);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WAMR_GRAPHIC_LIBRARY_NATIVE_UTILS_H */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_obj_wrapper.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_obj_wrapper.c
new file mode 100755
index 0000000..2b25e90
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/gui/wgl_obj_wrapper.c
@@ -0,0 +1,374 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "lvgl.h"
+#include "app_manager_export.h"
+#include "module_wasm_app.h"
+#include "bh_list.h"
+#include "bh_thread.h"
+#include "wgl_native_utils.h"
+
+
+typedef struct {
+    bh_list_link l;
+
+    /* The object id. */
+    uint32 obj_id;
+
+    /* The lv object */
+    lv_obj_t *obj;
+
+    /* Module id that the obj belongs to */
+    uint32 module_id;
+} object_node_t;
+
+typedef struct {
+    int32 obj_id;
+    lv_event_t event;
+} object_event_t;
+
+/* Max obj id */
+static uint32 g_obj_id_max = 0;
+
+static bh_list g_object_list;
+
+static korp_mutex g_object_list_mutex;
+
+static void app_mgr_object_event_callback(module_data *m_data, bh_message_t 
msg)
+{
+    uint32 argv[2];
+    wasm_function_inst_t func_on_object_event;
+    bh_assert(WIDGET_EVENT_WASM == bh_message_type(msg));
+    wasm_data *wasm_app_data = (wasm_data*) m_data->internal_data;
+    wasm_module_inst_t inst = wasm_app_data->wasm_module_inst;
+    object_event_t *object_event
+                       = (object_event_t *)bh_message_payload(msg);
+
+    if (object_event == NULL)
+        return;
+
+    func_on_object_event = wasm_runtime_lookup_function(inst, 
"_on_widget_event",
+                                                      "(i32i32)");
+    if (!func_on_object_event) {
+        printf("Cannot find function _on_object_event\n");
+        return;
+    }
+
+    argv[0] = object_event->obj_id;
+    argv[1] = object_event->event;
+    if (!wasm_runtime_call_wasm(inst, NULL, func_on_object_event, 2, argv)) {
+        printf(":Got exception running wasm code: %s\n",
+                wasm_runtime_get_exception(inst));
+        wasm_runtime_clear_exception(inst);
+        return;
+    }
+}
+
+static void cleanup_object_list(uint32 module_id)
+{
+    object_node_t *elem;
+
+    vm_mutex_lock(&g_object_list_mutex);
+
+    while (true) {
+        bool found = false;
+        elem = (object_node_t *)bh_list_first_elem(&g_object_list);
+        while (elem) {
+            /* delete the leaf node belongs to the module firstly */
+            if (module_id == elem->module_id &&
+                lv_obj_count_children(elem->obj) == 0) {
+                object_node_t *next = (object_node_t *)bh_list_elem_next(elem);
+
+                found = true;
+                lv_obj_del(elem->obj);
+                bh_list_remove(&g_object_list, elem);
+                bh_free(elem);
+                elem = next;
+            } else {
+                elem = (object_node_t *)bh_list_elem_next(elem);
+            }
+        }
+
+        if (!found)
+            break;
+    }
+
+    vm_mutex_unlock(&g_object_list_mutex);
+}
+
+static bool init_object_event_callback_framework()
+{
+    if (!wasm_register_cleanup_callback(cleanup_object_list)) {
+        goto fail;
+    }
+
+    if (!wasm_register_msg_callback(WIDGET_EVENT_WASM,
+                                    app_mgr_object_event_callback)) {
+        goto fail;
+    }
+
+    return true;
+
+fail:
+    return false;
+}
+
+bool wgl_native_validate_object(int32 obj_id, lv_obj_t **obj)
+{
+    object_node_t *elem;
+
+    vm_mutex_lock(&g_object_list_mutex);
+
+    elem = (object_node_t *)bh_list_first_elem(&g_object_list);
+    while (elem) {
+        if (obj_id == elem->obj_id) {
+            if (obj != NULL)
+                *obj = elem->obj;
+            vm_mutex_unlock(&g_object_list_mutex);
+            return true;
+        }
+        elem = (object_node_t *) bh_list_elem_next(elem);
+    }
+
+    vm_mutex_unlock(&g_object_list_mutex);
+
+    return false;
+}
+
+bool wgl_native_add_object(lv_obj_t *obj, uint32 module_id, uint32 *obj_id)
+{
+    object_node_t *node;
+
+    node = (object_node_t *) bh_malloc(sizeof(object_node_t));
+
+    if (node == NULL)
+        return false;
+
+    /* Generate an obj id */
+    g_obj_id_max++;
+    if (g_obj_id_max == -1)
+        g_obj_id_max = 1;
+
+    memset(node, 0, sizeof(*node));
+    node->obj = obj;
+    node->obj_id = g_obj_id_max;
+    node->module_id = module_id;
+
+    vm_mutex_lock(&g_object_list_mutex);
+    bh_list_insert(&g_object_list, node);
+    vm_mutex_unlock(&g_object_list_mutex);
+
+    if (obj_id != NULL)
+        *obj_id = node->obj_id;
+
+    return true;
+}
+
+static void _obj_del_recursive(lv_obj_t *obj)
+{
+    object_node_t *elem;
+    lv_obj_t * i;
+    lv_obj_t * i_next;
+
+    i = lv_ll_get_head(&(obj->child_ll));
+
+    while (i != NULL) {
+        /*Get the next object before delete this*/
+        i_next = lv_ll_get_next(&(obj->child_ll), i);
+
+        /*Call the recursive del to the child too*/
+        _obj_del_recursive(i);
+
+        /*Set i to the next node*/
+        i = i_next;
+    }
+
+    vm_mutex_lock(&g_object_list_mutex);
+
+    elem = (object_node_t *)bh_list_first_elem(&g_object_list);
+    while (elem) {
+        if (obj == elem->obj) {
+            bh_list_remove(&g_object_list, elem);
+            bh_free(elem);
+            vm_mutex_unlock(&g_object_list_mutex);
+            return;
+        }
+        elem = (object_node_t *) bh_list_elem_next(elem);
+    }
+
+    vm_mutex_unlock(&g_object_list_mutex);
+}
+
+static void _obj_clean_recursive(lv_obj_t *obj)
+{
+    lv_obj_t * i;
+    lv_obj_t * i_next;
+
+    i = lv_ll_get_head(&(obj->child_ll));
+
+    while (i != NULL) {
+        /*Get the next object before delete this*/
+        i_next = lv_ll_get_next(&(obj->child_ll), i);
+
+        /*Call the recursive del to the child too*/
+        _obj_del_recursive(i);
+
+        /*Set i to the next node*/
+        i = i_next;
+    }
+}
+
+static void post_widget_msg_to_module(object_node_t *object_node, lv_event_t 
event)
+{
+    module_data *module = module_data_list_lookup_id(object_node->module_id);
+    object_event_t *object_event;
+
+    if (module == NULL)
+        return;
+
+    object_event = (object_event_t *)bh_malloc(sizeof(*object_event));
+    if (object_event == NULL)
+        return;
+
+    memset(object_event, 0, sizeof(*object_event));
+    object_event->obj_id = object_node->obj_id;
+    object_event->event = event;
+
+    bh_post_msg(module->queue,
+                WIDGET_EVENT_WASM,
+                object_event,
+                sizeof(*object_event));
+}
+
+extern wasm_module_inst_t wasm_module_inst_unikraft;
+static void trigger_wasm_widget_event(object_node_t *object_node, lv_event_t 
event)
+{
+       uint32 argv[2];
+    wasm_function_inst_t func_on_object_event;
+
+       func_on_object_event = 
wasm_runtime_lookup_function(wasm_module_inst_unikraft, "on_widget_event", 
"(i32i32)");
+    if (!func_on_object_event) {
+        printf("Cannot find function _on_object_event\n");
+        return;
+    }
+
+    argv[0] = object_node->obj_id;
+    argv[1] = event;
+    if (!wasm_runtime_call_wasm(wasm_module_inst_unikraft, NULL, 
func_on_object_event, 2, argv)) {
+        printf(":Got exception running wasm code: %s\n", 
wasm_runtime_get_exception(wasm_module_inst_unikraft));
+        wasm_runtime_clear_exception(wasm_module_inst_unikraft);
+        return;
+    }
+}
+
+static void internal_lv_obj_event_cb(lv_obj_t *obj, lv_event_t event)
+{
+    object_node_t *elem;
+
+    vm_mutex_lock(&g_object_list_mutex);
+
+    elem = (object_node_t *)bh_list_first_elem(&g_object_list);
+    while (elem) {
+        if (obj == elem->obj) {
+            vm_mutex_unlock(&g_object_list_mutex);
+            trigger_wasm_widget_event(elem, event);
+            return;
+        }
+        elem = (object_node_t *) bh_list_elem_next(elem);
+    }
+
+    vm_mutex_unlock(&g_object_list_mutex);
+}
+
+static void* lv_task_handler_thread_routine (void *arg)
+{
+    korp_sem sem;
+
+    vm_sem_init(&sem, 0);
+
+    while (true) {
+        vm_sem_reltimedwait(&sem, 100);
+        lv_task_handler();
+    }
+
+    return NULL;
+}
+
+void wgl_init(void)
+{
+ //   korp_thread tid;
+
+ //   lv_init();
+
+    bh_list_init(&g_object_list);
+    vm_mutex_init(&g_object_list_mutex);
+    init_object_event_callback_framework();
+
+    /* new a thread, call lv_task_handler periodically */
+//    vm_thread_create(&tid,
+//                     lv_task_handler_thread_routine,
+//                     NULL,
+//                     BH_APPLET_PRESERVED_STACK_SIZE);
+}
+
+/* -------------------------------------------------------------------------
+ * Obj native function wrappers
+ * -------------------------------------------------------------------------*/
+static lv_res_t _obj_del(lv_obj_t *obj)
+{
+    /* Recursively delete object node in the list belong to this
+     * parent object including itself */
+    _obj_del_recursive(obj);
+
+    return lv_obj_del(obj);
+}
+
+static void _obj_clean(lv_obj_t *obj)
+{
+    /* Recursively delete child object node in the list belong to this
+     * parent object */
+    _obj_clean_recursive(obj);
+
+    /* Delete all of its children */
+    lv_obj_clean(obj);
+}
+
+static void _obj_set_event_cb(lv_obj_t *obj)
+{
+    lv_obj_set_event_cb(obj, internal_lv_obj_event_cb);
+}
+/* ------------------------------------------------------------------------- */
+
+
+static WGLNativeFuncDef obj_native_func_defs[] = {
+    { OBJ_FUNC_ID_DEL, _obj_del, HAS_RET, 1, {0, -1}, {-1} },
+    { OBJ_FUNC_ID_DEL_ASYNC, lv_obj_del_async, NO_RET, 1, {0, -1}, {-1} },
+    { OBJ_FUNC_ID_CLEAN, _obj_clean, NO_RET, 1, {0, -1}, {-1} },
+    { OBJ_FUNC_ID_ALIGN, lv_obj_align, NO_RET, 5, {0, 1 | NULL_OK, -1}, {-1} },
+    { OBJ_FUNC_ID_SET_EVT_CB, _obj_set_event_cb, NO_RET, 1, {0, -1}, {-1} },
+};
+
+/*************** Native Interface to Wasm App ***********/
+void wasm_obj_native_call(int32 func_id, uint32 argv_offset, uint32 argc)
+{
+    uint32 size = sizeof(obj_native_func_defs) / sizeof(WGLNativeFuncDef);
+
+    wgl_native_func_call(obj_native_func_defs,
+                         size,
+                         func_id,
+                         argv_offset,
+                         argc);
+}
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/runtime_sensor.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/runtime_sensor.c
new file mode 100755
index 0000000..ffaf482
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/runtime_sensor.c
@@ -0,0 +1,424 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "runtime_sensor.h"
+#include "app_manager_export.h"
+#include "module_wasm_app.h"
+#include "bh_thread.h"
+#include "bh_time.h"
+
+static sys_sensor_t * g_sys_sensors = NULL;
+static int g_sensor_id_max = 0;
+static sensor_client_t *find_sensor_client(sys_sensor_t * sensor,
+        unsigned int client_id, bool remove_if_found);
+
+void (*rechedule_sensor_callback)() = NULL;
+
+/*
+ *  API for the applications to call - don't call it from the runtime
+ *
+ */
+
+static void sensor_event_cleaner(sensor_event_data_t *sensor_event)
+{
+    if (sensor_event->data != NULL) {
+        if (sensor_event->data_fmt == FMT_ATTR_CONTAINER)
+            attr_container_destroy(sensor_event->data);
+        else
+            bh_free(sensor_event->data);
+    }
+
+    bh_free(sensor_event);
+}
+
+static void wasm_sensor_callback(void *client, uint32 sensor_id,
+                                 void *user_data)
+{
+    attr_container_t *sensor_data = (attr_container_t *) user_data;
+    attr_container_t *sensor_data_clone;
+    int sensor_data_len;
+    sensor_event_data_t *sensor_event;
+    bh_message_t msg;
+    sensor_client_t *c = (sensor_client_t *) client;
+
+    module_data *module = module_data_list_lookup_id(c->client_id);
+    if (module == NULL)
+        return;
+
+    if (sensor_data == NULL)
+      return;
+
+    sensor_data_len = attr_container_get_serialize_length(sensor_data);
+    sensor_data_clone = (attr_container_t *)bh_malloc(sensor_data_len);
+    if (sensor_data_clone == NULL)
+        return;
+
+    /* multiple sensor clients may use/free the sensor data, so make a copy */
+    memcpy(sensor_data_clone, sensor_data, sensor_data_len);
+
+    sensor_event = (sensor_event_data_t *)bh_malloc(sizeof(*sensor_event));
+    if (sensor_event == NULL) {
+        bh_free(sensor_data_clone);
+        return;
+    }
+
+    memset(sensor_event, 0, sizeof(*sensor_event));
+    sensor_event->sensor_id = sensor_id;
+    sensor_event->data = sensor_data_clone;
+    sensor_event->data_fmt = FMT_ATTR_CONTAINER;
+
+    msg = bh_new_msg(SENSOR_EVENT_WASM,
+                     sensor_event,
+                     sizeof(*sensor_event),
+                     sensor_event_cleaner);
+    if (!msg) {
+        sensor_event_cleaner(sensor_event);
+        return;
+    }
+
+    bh_post_msg2(module->queue, msg);
+}
+
+bool wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay)
+{
+    attr_container_t * attr_cont;
+    sensor_client_t * c;
+    sensor_obj_t s = find_sys_sensor_id(sensor);
+    if (s == NULL)
+        return false;
+
+    unsigned int mod_id = app_manager_get_module_id(Module_WASM_App);
+
+    vm_mutex_lock(&s->lock);
+
+    c = find_sensor_client(s, mod_id, false);
+    if (c == NULL) {
+        vm_mutex_unlock(&s->lock);
+        return false;
+    }
+
+    c->interval = interval;
+    c->bit_cfg = bit_cfg;
+    c->delay = delay;
+
+    vm_mutex_unlock(&s->lock);
+
+    if (s->config != NULL) {
+        attr_cont = attr_container_create("config sensor");
+        attr_container_set_int(&attr_cont, "interval", interval);
+        attr_container_set_int(&attr_cont, "bit_cfg", bit_cfg);
+        attr_container_set_int(&attr_cont, "delay", delay);
+        s->config(s, attr_cont);
+        attr_container_destroy(attr_cont);
+    }
+
+    refresh_read_interval(s);
+
+    reschedule_sensor_read();
+
+    return true;
+}
+
+uint32 wasm_sensor_open(int32 name_offset, int instance)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *name = NULL;
+
+    if (!validate_app_addr(name_offset, 1))
+        return -1;
+
+    name = addr_app_to_native(name_offset);
+
+    if (name != NULL) {
+        sensor_client_t *c;
+        sys_sensor_t *s = find_sys_sensor(name, instance);
+        if (s == NULL)
+            return -1;
+
+        unsigned int mod_id = app_manager_get_module_id(Module_WASM_App);
+
+        vm_mutex_lock(&s->lock);
+
+        c = find_sensor_client(s, mod_id, false);
+        if (c) {
+            // the app already opened this sensor
+            vm_mutex_unlock(&s->lock);
+            return -1;
+        }
+
+        sensor_client_t * client = (sensor_client_t*) bh_malloc(
+                sizeof(sensor_client_t));
+        if (client == NULL) {
+            vm_mutex_unlock(&s->lock);
+            return -1;
+        }
+
+        memset(client, 0, sizeof(sensor_client_t));
+        client->client_id = mod_id;
+        client->client_callback = (void *)wasm_sensor_callback;
+        client->interval = s->default_interval;
+        client->next = s->clients;
+        s->clients = client;
+
+        vm_mutex_unlock(&s->lock);
+
+        refresh_read_interval(s);
+
+        reschedule_sensor_read();
+
+        return s->sensor_id;
+    }
+
+    return -1;
+}
+
+bool wasm_sensor_config_with_attr_container(uint32 sensor, int32 buffer_offset,
+        int len)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *buffer = NULL;
+
+    if (!validate_app_addr(buffer_offset, len))
+        return false;
+
+    buffer = addr_app_to_native(buffer_offset);
+
+    if (buffer != NULL) {
+        attr_container_t *cfg = (attr_container_t *)buffer;
+        sensor_obj_t s = find_sys_sensor_id(sensor);
+        if (s == NULL)
+            return false;
+
+        if (s->config == NULL)
+            return false;
+
+        return s->config(s, cfg);
+    }
+
+    return false;
+}
+
+bool wasm_sensor_close(uint32 sensor)
+{
+    unsigned int mod_id = app_manager_get_module_id(Module_WASM_App);
+    unsigned int client_id = mod_id;
+    sensor_obj_t s = find_sys_sensor_id(sensor);
+    sensor_client_t *c;
+
+    if (s == NULL)
+        return false;
+
+    vm_mutex_lock(&s->lock);
+    if ((c = find_sensor_client(s, client_id, true)) != NULL)
+        bh_free(c);
+    vm_mutex_unlock(&s->lock);
+
+    refresh_read_interval(s);
+
+    reschedule_sensor_read();
+
+    return true;
+}
+
+/*
+ *
+ * sensor framework API - don't expose to the applications
+ *
+ */
+void set_sensor_reshceduler(void (*callback)())
+{
+    rechedule_sensor_callback = callback;
+}
+
+// used for other threads to wakeup the sensor read thread
+void reschedule_sensor_read()
+{
+    if (rechedule_sensor_callback)
+        rechedule_sensor_callback();
+}
+
+void refresh_read_interval(sensor_obj_t sensor)
+{
+    sensor_client_t *c;
+    uint32 interval = sensor->default_interval;
+    vm_mutex_lock(&sensor->lock);
+
+    c = sensor->clients;
+    if (c)
+        interval = c->interval;
+
+    while (c) {
+        if (c->interval < interval)
+            interval = c->interval;
+        c = c->next;
+    }
+
+    vm_mutex_unlock(&sensor->lock);
+
+    sensor->read_interval = interval;
+}
+
+sensor_obj_t add_sys_sensor(char * name, char * description, int instance,
+        uint32 default_interval, void * read_func, void * config_func)
+{
+    sys_sensor_t * s = (sys_sensor_t *) bh_malloc(sizeof(sys_sensor_t));
+    if (s == NULL)
+        return NULL;
+
+    memset(s, 0, sizeof(*s));
+    s->name = bh_strdup(name);
+    s->sensor_instance = instance;
+    s->default_interval = default_interval;
+
+    if (!s->name) {
+        bh_free(s);
+        return NULL;
+    }
+
+    if (description) {
+        s->description = bh_strdup(description);
+        if (!s->description) {
+            bh_free(s->name);
+            bh_free(s);
+            return NULL;
+        }
+    }
+
+    g_sensor_id_max++;
+    if (g_sensor_id_max == -1)
+        g_sensor_id_max++;
+    s->sensor_id = g_sensor_id_max;
+
+    s->read = read_func;
+    s->config = config_func;
+
+    if (g_sys_sensors == NULL) {
+        g_sys_sensors = s;
+    } else {
+        s->next = g_sys_sensors;
+        g_sys_sensors = s;
+    }
+
+    vm_mutex_init(&s->lock);
+
+    return s;
+}
+
+sensor_obj_t find_sys_sensor(const char* name, int instance)
+{
+    sys_sensor_t * s = g_sys_sensors;
+    while (s) {
+        if (strcmp(s->name, name) == 0 && s->sensor_instance == instance)
+            return s;
+
+        s = s->next;
+    }
+    return NULL;
+}
+
+sensor_obj_t find_sys_sensor_id(uint32 sensor_id)
+{
+    sys_sensor_t * s = g_sys_sensors;
+    while (s) {
+        if (s->sensor_id == sensor_id)
+            return s;
+
+        s = s->next;
+    }
+    return NULL;
+}
+
+sensor_client_t *find_sensor_client(sys_sensor_t * sensor,
+        unsigned int client_id, bool remove_if_found)
+{
+    sensor_client_t *prev = NULL, *c = sensor->clients;
+
+    while (c) {
+        sensor_client_t *next = c->next;
+        if (c->client_id == client_id) {
+            if (remove_if_found) {
+                if (prev)
+                    prev->next = next;
+                else
+                    sensor->clients = next;
+            }
+            return c;
+        } else {
+            c = c->next;
+        }
+    }
+
+    return NULL;
+}
+
+// return the milliseconds to next check
+int check_sensor_timers()
+{
+    int ms_to_next_check = -1;
+    uint32 now = (uint32) bh_get_tick_ms();
+
+    sys_sensor_t * s = g_sys_sensors;
+    while (s) {
+        uint32 last_read = s->last_read;
+        uint32 elpased_ms = bh_get_elpased_ms(&last_read);
+
+        if (s->read_interval <= 0 || s->clients == NULL) {
+            s = s->next;
+            continue;
+        }
+
+        if (elpased_ms >= s->read_interval) {
+            attr_container_t * data = s->read(s);
+            if (data) {
+                sensor_client_t * client = s->clients;
+                while (client) {
+                    client->client_callback(client, s->sensor_id, data);
+                    client = client->next;
+                }
+                attr_container_destroy(data);
+            }
+
+            s->last_read = now;
+
+            if (ms_to_next_check == -1 || (ms_to_next_check < 
s->read_interval))
+                ms_to_next_check = s->read_interval;
+        } else {
+            int remaining = s->read_interval - elpased_ms;
+            if (ms_to_next_check == -1 || (ms_to_next_check < remaining))
+                ms_to_next_check = remaining;
+
+        }
+
+        s = s->next;
+    }
+
+    return ms_to_next_check;
+}
+
+void sensor_cleanup_callback(uint32 module_id)
+{
+    sys_sensor_t * s = g_sys_sensors;
+
+    while (s) {
+        sensor_client_t *c;
+        vm_mutex_lock(&s->lock);
+        if ((c = find_sensor_client(s, module_id, true)) != NULL) {
+            bh_free(c);
+        }
+        vm_mutex_unlock(&s->lock);
+        s = s->next;
+    }
+}
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/runtime_sensor.h 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/runtime_sensor.h
new file mode 100755
index 0000000..ce53392
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/runtime_sensor.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef LIB_EXTENSION_RUNTIME_SENSOR_H_
+#define LIB_EXTENSION_RUNTIME_SENSOR_H_
+
+#include "bh_platform.h"
+#include "attr_container.h"
+struct _sys_sensor;
+typedef struct _sys_sensor* sensor_obj_t;
+
+typedef struct _sensor_client {
+    struct _sensor_client * next;
+    unsigned int client_id; // the app id
+    int interval;
+    int bit_cfg;
+    int delay;
+    void (*client_callback)(void * client, uint32, attr_container_t *);
+} sensor_client_t;
+
+typedef struct _sys_sensor {
+    struct _sys_sensor * next;
+    char * name;
+    int sensor_instance;
+    char * description;
+    uint32 sensor_id;
+    sensor_client_t * clients;
+    /* app, sensor mgr and app mgr may access the clients at the same time,
+     * so need a lock to protect the clients */
+    korp_mutex lock;
+    uint32 last_read;
+    uint32 read_interval;
+    uint32 default_interval;
+
+    attr_container_t * (*read)(void *); /* TODO: may support other type return 
value, such as 'cbor' */
+    bool (*config)(void *, void *);
+
+} sys_sensor_t;
+
+sensor_obj_t add_sys_sensor(char * name, char * description, int instance,
+        uint32 default_interval, void * read_func, void * config_func);
+sensor_obj_t find_sys_sensor(const char* name, int instance);
+sensor_obj_t find_sys_sensor_id(uint32 sensor_id);
+void refresh_read_interval(sensor_obj_t sensor);
+void sensor_cleanup_callback(uint32 module_id);
+int check_sensor_timers();
+void reschedule_sensor_read();
+
+uint32
+wasm_sensor_open(int32 name_offset, int instance);
+
+bool
+wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay);
+
+bool
+wasm_sensor_config_with_attr_container(uint32 sensor, int32 buffer_offset,
+        int len);
+
+bool
+wasm_sensor_close(uint32 sensor);
+
+#endif /* LIB_EXTENSION_RUNTIME_SENSOR_H_ */
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/runtime_sensor.inl 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/runtime_sensor.inl
new file mode 100755
index 0000000..ea8a6d3
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/runtime_sensor.inl
@@ -0,0 +1,20 @@
+/*
+* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+EXPORT_WASM_API(wasm_sensor_open),
+EXPORT_WASM_API(wasm_sensor_config),
+EXPORT_WASM_API(wasm_sensor_config_with_attr_container),
+EXPORT_WASM_API(wasm_sensor_close),
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/sensor_mgr_ref.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/sensor_mgr_ref.c
new file mode 100755
index 0000000..a509313
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/sensor_mgr_ref.c
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_common.h"
+#include "bh_queue.h"
+#include "bh_thread.h"
+#include "runtime_sensor.h"
+#include "attr_container.h"
+#include "module_wasm_app.h"
+#include "wasm_export.h"
+
+/*
+ *
+ *   One reference implementation for sensor manager
+ *
+ *
+ */
+static korp_cond cond;
+static korp_mutex mutex;
+
+void app_mgr_sensor_event_callback(module_data *m_data, bh_message_t msg)
+{
+    uint32 argv[3];
+    wasm_function_inst_t func_onSensorEvent;
+
+    bh_assert(SENSOR_EVENT_WASM == bh_message_type(msg));
+    wasm_data *wasm_app_data = (wasm_data*) m_data->internal_data;
+    wasm_module_inst_t inst = wasm_app_data->wasm_module_inst;
+
+    sensor_event_data_t *payload = (sensor_event_data_t*)
+                                   bh_message_payload(msg);
+    if (payload == NULL)
+        return;
+
+    func_onSensorEvent = wasm_runtime_lookup_function(inst, "_on_sensor_event",
+                                                      "(i32i32i32)");
+    if (!func_onSensorEvent) {
+        printf("Cannot find function onRequest\n");
+    } else {
+        int32 sensor_data_offset;
+        uint32 sensor_data_len;
+
+        if (payload->data_fmt == FMT_ATTR_CONTAINER) {
+            sensor_data_len = 
attr_container_get_serialize_length(payload->data);
+        } else {
+            printf("Unsupported sensor data format: %d\n", payload->data_fmt);
+            return;
+        }
+
+        sensor_data_offset = wasm_runtime_module_dup_data(inst, payload->data,
+                                                          sensor_data_len);
+        if (sensor_data_offset == 0) {
+            printf("Got exception running wasm code: %s\n",
+                   wasm_runtime_get_exception(inst));
+            wasm_runtime_clear_exception(inst);
+            return;
+        }
+
+        argv[0] = payload->sensor_id;
+        argv[1] = (uint32) sensor_data_offset;
+        argv[2] = sensor_data_len;
+
+        if (!wasm_runtime_call_wasm(inst, NULL, func_onSensorEvent, 3, argv)) {
+            printf(":Got exception running wasm code: %s\n",
+                   wasm_runtime_get_exception(inst));
+            wasm_runtime_clear_exception(inst);
+            wasm_runtime_module_free(inst, sensor_data_offset);
+            return;
+        }
+
+        wasm_runtime_module_free(inst, sensor_data_offset);
+    }
+}
+
+static attr_container_t * read_test_sensor(void * sensor)
+{
+    //luc: for test
+    attr_container_t *attr_obj = attr_container_create("read test sensor 
data");
+    if (attr_obj) {
+        attr_container_set_string(&attr_obj, "name", "read test sensor");
+        return attr_obj;
+    }
+    return NULL;
+}
+
+static bool config_test_sensor(void * s, void * config)
+{
+    return false;
+}
+
+static void thread_sensor_check(void * arg)
+{
+    while (1) {
+        int ms_to_expiry = check_sensor_timers();
+        if (ms_to_expiry == -1)
+            ms_to_expiry = 5000;
+        vm_mutex_lock(&mutex);
+        vm_cond_reltimedwait(&cond, &mutex, ms_to_expiry);
+        vm_mutex_unlock(&mutex);
+    }
+}
+
+static void cb_wakeup_thread()
+{
+    vm_cond_signal(&cond);
+}
+
+void set_sensor_reshceduler(void (*callback)());
+
+void init_sensor_framework()
+{
+    // init the mutext and conditions
+    korp_thread tid;
+    vm_cond_init(&cond);
+    vm_mutex_init(&mutex);
+
+    // add the sys sensor objects
+    add_sys_sensor("sensor_test", "This is a sensor for test", 0, 1000,
+                   read_test_sensor, config_test_sensor);
+
+    set_sensor_reshceduler(cb_wakeup_thread);
+
+    wasm_register_msg_callback(SENSOR_EVENT_WASM,
+                               app_mgr_sensor_event_callback);
+
+    wasm_register_cleanup_callback(sensor_cleanup_callback);
+
+    vm_thread_create(&tid, (void *)thread_sensor_check, NULL,
+                     BH_APPLET_PRESERVED_STACK_SIZE);
+}
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/wasm_lib_sensor.cmake 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/wasm_lib_sensor.cmake
new file mode 100755
index 0000000..9461f84
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/sensor/wasm_lib_sensor.cmake
@@ -0,0 +1,23 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (WASM_LIB_SENSOR_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${WASM_LIB_SENSOR_DIR})
+
+
+file (GLOB_RECURSE source_all ${WASM_LIB_SENSOR_DIR}/*.c)
+
+set (WASM_LIB_SENSOR_SOURCE ${source_all})
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/lib/native/extension/template/lib_export_template.c
 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/template/lib_export_template.c
new file mode 100755
index 0000000..6becf41
--- /dev/null
+++ 
b/scriptsrcs/wamr/core/iwasm/lib/native/extension/template/lib_export_template.c
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "lib-export.h"
+
+/* TODO: use macro EXPORT_WASM_API() or EXPORT_WASM_API2() to add functions to 
register. */
+
+NativeSymbol extended_native_symbol_defs[] = {
+
+/*EXPORT_WASM_API(publish_event)*/
+
+};
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native/libc/libc_wrapper.c 
b/scriptsrcs/wamr/core/iwasm/lib/native/libc/libc_wrapper.c
new file mode 100644
index 0000000..e711450
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/libc/libc_wrapper.c
@@ -0,0 +1,1082 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_native.h"
+#include "wasm_export.h"
+#include "wasm_log.h"
+#include "wasm_platform_log.h"
+#include <time.h>
+#if CONFIG_PLAT_RASPI
+#include <raspi/time.h>
+#endif
+
+void
+wasm_runtime_set_exception(wasm_module_inst_t module, const char *exception);
+
+uint32
+wasm_runtime_get_temp_ret(wasm_module_inst_t module);
+
+void
+wasm_runtime_set_temp_ret(wasm_module_inst_t module, uint32 temp_ret);
+
+uint32
+wasm_runtime_get_llvm_stack(wasm_module_inst_t module);
+
+void
+wasm_runtime_set_llvm_stack(wasm_module_inst_t module, uint32 llvm_stack);
+
+#define get_module_inst() \
+    wasm_runtime_get_current_module_inst()
+
+#define validate_app_addr(offset, size) \
+    wasm_runtime_validate_app_addr(module_inst, offset, size)
+
+#define addr_app_to_native(offset) \
+    wasm_runtime_addr_app_to_native(module_inst, offset)
+
+#define addr_native_to_app(ptr) \
+    wasm_runtime_addr_native_to_app(module_inst, ptr)
+
+#define module_malloc(size) \
+    wasm_runtime_module_malloc(module_inst, size)
+
+#define module_free(offset) \
+    wasm_runtime_module_free(module_inst, offset)
+
+static bool
+validate_str_addr(wasm_module_inst_t module_inst, int32 str_offset)
+{
+    int32 app_end_offset;
+    char *str, *str_end;
+
+    if (!wasm_runtime_get_app_addr_range(module_inst, str_offset,
+                                         NULL, &app_end_offset))
+        goto fail;
+
+    str = addr_app_to_native(str_offset);
+    str_end = str + (app_end_offset - str_offset);
+    while (str < str_end && *str != '\0')
+        str++;
+    if (str == str_end)
+        goto fail;
+    return true;
+
+fail:
+    wasm_runtime_set_exception(module_inst, "out of bounds memory access");
+    return false;
+}
+
+typedef int (*out_func_t)(int c, void *ctx);
+
+enum pad_type {
+    PAD_NONE,
+    PAD_ZERO_BEFORE,
+    PAD_SPACE_BEFORE,
+    PAD_SPACE_AFTER,
+};
+
+typedef char *_va_list;
+#define _INTSIZEOF(n)       \
+    ((sizeof(n) +  3) & ~3)
+#define _va_arg(ap, t)      \
+    (*(t*)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)))
+
+#define CHECK_VA_ARG(ap, t) do {                        \
+    if ((uint8*)ap + _INTSIZEOF(t) > native_end_addr)   \
+        goto fail;                                      \
+} while (0)
+
+/**
+ * @brief Output an unsigned int in hex format
+ *
+ * Output an unsigned int on output installed by platform at init time. Should
+ * be able to handle an unsigned int of any size, 32 or 64 bit.
+ * @param num Number to output
+ *
+ * @return N/A
+ */
+static void
+_printf_hex_uint(out_func_t out, void *ctx,
+                 const uint64 num, bool is_u64,
+                 enum pad_type padding,
+                 int min_width)
+{
+    int size = sizeof(num) * (is_u64 ? 2 : 1);
+    int found_largest_digit = 0;
+    int remaining = 8; /* 8 digits max */
+    int digits = 0;
+
+    for (; size; size--) {
+        char nibble = (num >> ((size - 1) << 2) & 0xf);
+
+        if (nibble || found_largest_digit || size == 1) {
+            found_largest_digit = 1;
+            nibble += nibble > 9 ? 87 : 48;
+            out((int) nibble, ctx);
+            digits++;
+            continue;
+        }
+
+        if (remaining-- <= min_width) {
+            if (padding == PAD_ZERO_BEFORE) {
+                out('0', ctx);
+            } else if (padding == PAD_SPACE_BEFORE) {
+                out(' ', ctx);
+            }
+        }
+    }
+
+    if (padding == PAD_SPACE_AFTER) {
+        remaining = min_width * 2 - digits;
+        while (remaining-- > 0) {
+            out(' ', ctx);
+        }
+    }
+}
+
+/**
+ * @brief Output an unsigned int in decimal format
+ *
+ * Output an unsigned int on output installed by platform at init time. Only
+ * works with 32-bit values.
+ * @param num Number to output
+ *
+ * @return N/A
+ */
+static void
+_printf_dec_uint(out_func_t out, void *ctx,
+                 const uint32 num,
+                 enum pad_type padding,
+                 int min_width)
+{
+    uint32 pos = 999999999;
+    uint32 remainder = num;
+    int found_largest_digit = 0;
+    int remaining = 10; /* 10 digits max */
+    int digits = 1;
+
+    /* make sure we don't skip if value is zero */
+    if (min_width <= 0) {
+        min_width = 1;
+    }
+
+    while (pos >= 9) {
+        if (found_largest_digit || remainder > pos) {
+            found_largest_digit = 1;
+            out((int) ((remainder / (pos + 1)) + 48), ctx);
+            digits++;
+        } else if (remaining <= min_width && padding < PAD_SPACE_AFTER) {
+            out((int) (padding == PAD_ZERO_BEFORE ? '0' : ' '), ctx);
+            digits++;
+        }
+        remaining--;
+        remainder %= (pos + 1);
+        pos /= 10;
+    }
+    out((int) (remainder + 48), ctx);
+
+    if (padding == PAD_SPACE_AFTER) {
+        remaining = min_width - digits;
+        while (remaining-- > 0) {
+            out(' ', ctx);
+        }
+    }
+}
+
+static void
+print_err(out_func_t out, void *ctx)
+{
+    out('E', ctx);
+    out('R', ctx);
+    out('R', ctx);
+}
+
+static bool
+_vprintf_wa(out_func_t out, void *ctx, const char *fmt, _va_list ap,
+            wasm_module_inst_t module_inst)
+{
+    int might_format = 0; /* 1 if encountered a '%' */
+    enum pad_type padding = PAD_NONE;
+    int min_width = -1;
+    int long_ctr = 0;
+    uint8 *native_end_addr;
+
+    if (!wasm_runtime_get_native_addr_range(module_inst, (uint8*)ap,
+                                            NULL, &native_end_addr))
+        goto fail;
+
+    /* fmt has already been adjusted if needed */
+
+    while (*fmt) {
+        if (!might_format) {
+            if (*fmt != '%') {
+                out((int) *fmt, ctx);
+            }
+            else {
+                might_format = 1;
+                min_width = -1;
+                padding = PAD_NONE;
+                long_ctr = 0;
+            }
+        }
+        else {
+            switch (*fmt) {
+            case '-':
+                padding = PAD_SPACE_AFTER;
+                goto still_might_format;
+
+            case '0':
+                if (min_width < 0 && padding == PAD_NONE) {
+                    padding = PAD_ZERO_BEFORE;
+                    goto still_might_format;
+                }
+                /* Fall through */
+            case '1' ... '9':
+                if (min_width < 0) {
+                    min_width = *fmt - '0';
+                } else {
+                    min_width = 10 * min_width + *fmt - '0';
+                }
+
+                if (padding == PAD_NONE) {
+                    padding = PAD_SPACE_BEFORE;
+                }
+                goto still_might_format;
+
+            case 'l':
+                long_ctr++;
+                /* Fall through */
+            case 'z':
+            case 'h':
+                /* FIXME: do nothing for these modifiers */
+                goto still_might_format;
+
+            case 'd':
+            case 'i': {
+                int32 d;
+
+                if (long_ctr < 2) {
+                    CHECK_VA_ARG(ap, int32);
+                    d = _va_arg(ap, int32);
+                }
+                else {
+                    int64 lld;
+                    CHECK_VA_ARG(ap, int64);
+                    lld = _va_arg(ap, int64);
+                    if (lld > INT32_MAX || lld < INT32_MIN) {
+                        print_err(out, ctx);
+                        break;
+                    }
+                    d = (int32)lld;
+                }
+
+                if (d < 0) {
+                    out((int)'-', ctx);
+                    d = -d;
+                    min_width--;
+                }
+                _printf_dec_uint(out, ctx, d, padding, min_width);
+                break;
+            }
+            case 'u': {
+                uint32 u;
+
+                if (long_ctr < 2) {
+                    CHECK_VA_ARG(ap, uint32);
+                    u = _va_arg(ap, uint32);
+                }
+                else {
+                    uint64 llu;
+                    CHECK_VA_ARG(ap, uint64);
+                    llu = _va_arg(ap, uint64);
+                    if (llu > INT32_MAX) {
+                        print_err(out, ctx);
+                        break;
+                    }
+                    u = (uint32)llu;
+                }
+                _printf_dec_uint(out, ctx, u, padding, min_width);
+                break;
+            }
+            case 'p':
+                out('0', ctx);
+                out('x', ctx);
+                /* left-pad pointers with zeros */
+                padding = PAD_ZERO_BEFORE;
+                min_width = 8;
+                /* Fall through */
+            case 'x':
+            case 'X': {
+                uint64 x;
+                bool is_ptr = (*fmt == 'p') ? true : false;
+
+                if (long_ctr < 2) {
+                    CHECK_VA_ARG(ap, uint32);
+                    x = _va_arg(ap, uint32);
+                } else {
+                    CHECK_VA_ARG(ap, uint64);
+                    x = _va_arg(ap, uint64);
+                }
+                _printf_hex_uint(out, ctx, x, !is_ptr, padding, min_width);
+                break;
+            }
+
+            case 's': {
+                char *s;
+                char *start;
+                int32 s_offset;
+
+                CHECK_VA_ARG(ap, uint32);
+                s_offset = _va_arg(ap, uint32);
+
+                if (!validate_str_addr(module_inst, s_offset)) {
+                    return false;
+                }
+
+                s = start = addr_app_to_native(s_offset);
+
+                while (*s)
+                    out((int) (*s++), ctx);
+
+                if (padding == PAD_SPACE_AFTER) {
+                    int remaining = min_width - (s - start);
+                    while (remaining-- > 0) {
+                        out(' ', ctx);
+                    }
+                }
+                break;
+            }
+
+            case 'c': {
+                int c;
+                CHECK_VA_ARG(ap, int);
+                c = _va_arg(ap, int);
+                out(c, ctx);
+                break;
+            }
+
+            case '%': {
+                out((int) '%', ctx);
+                break;
+            }
+
+            default:
+                out((int) '%', ctx);
+                out((int) *fmt, ctx);
+                break;
+            }
+
+            might_format = 0;
+        }
+
+still_might_format:
+        ++fmt;
+    }
+    return true;
+
+fail:
+    wasm_runtime_set_exception(module_inst, "out of bounds memory access");
+    return false;
+}
+
+struct str_context {
+    char *str;
+    int max;
+    int count;
+};
+
+static int
+sprintf_out(int c, struct str_context *ctx)
+{
+    if (!ctx->str || ctx->count >= ctx->max) {
+        ctx->count++;
+        return c;
+    }
+
+    if (ctx->count == ctx->max - 1) {
+        ctx->str[ctx->count++] = '\0';
+    } else {
+        ctx->str[ctx->count++] = c;
+    }
+
+    return c;
+}
+
+static int
+printf_out(int c, struct str_context *ctx)
+{
+    bh_printf("%c", c);
+    ctx->count++;
+    return c;
+}
+
+static inline _va_list
+get_va_list(uint32 *args)
+{
+    union {
+        uint32 u;
+        _va_list v;
+    } u;
+    u.u = args[0];
+    return u.v;
+}
+
+static bool
+parse_printf_args(wasm_module_inst_t module_inst, int32 fmt_offset,
+                  int32 va_list_offset, const char **p_fmt,
+                  _va_list *p_va_args)
+{
+    const char *fmt;
+    union {
+        uintptr_t u;
+        _va_list v;
+    } u;
+
+    if (!validate_str_addr(module_inst, fmt_offset)
+        || !validate_app_addr(va_list_offset, sizeof(int32)))
+        return false;
+
+    fmt = (const char*) addr_app_to_native(fmt_offset);
+    u.u = (uintptr_t) addr_app_to_native(va_list_offset);
+
+    *p_fmt = fmt;
+    *p_va_args = u.v;
+    return true;
+}
+
+static int
+_printf_wrapper(int32 fmt_offset, int32 va_list_offset)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    struct str_context ctx = { NULL, 0, 0 };
+    const char *fmt;
+    _va_list va_args;
+
+    if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, 
&va_args))
+        return 0;
+
+    if (!_vprintf_wa((out_func_t)printf_out, &ctx, fmt, va_args, module_inst))
+        return 0;
+    return ctx.count;
+}
+
+static int
+_sprintf_wrapper(int32 str_offset, int32 fmt_offset, int32 va_list_offset)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    int32 app_end_offset;
+    struct str_context ctx;
+    char *str;
+    const char *fmt;
+    _va_list va_args;
+
+    if (!wasm_runtime_get_app_addr_range(module_inst, str_offset,
+                                         NULL, &app_end_offset)) {
+        wasm_runtime_set_exception(module_inst, "out of bounds memory access");
+        return false;
+    }
+
+    str = addr_app_to_native(str_offset);
+
+    if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, 
&va_args))
+        return 0;
+
+    ctx.str = str;
+    ctx.max = app_end_offset - str_offset;
+    ctx.count = 0;
+
+    if (!_vprintf_wa((out_func_t)sprintf_out, &ctx, fmt, va_args, module_inst))
+        return 0;
+
+    if (ctx.count < ctx.max) {
+        str[ctx.count] = '\0';
+    }
+
+    return ctx.count;
+}
+
+static int
+_snprintf_wrapper(int32 str_offset, int32 size, int32 fmt_offset,
+                  int32 va_list_offset)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    struct str_context ctx;
+    char *str;
+    const char *fmt;
+    _va_list va_args;
+
+    if (!validate_app_addr(str_offset, size))
+        return 0;
+
+    str = addr_app_to_native(str_offset);
+
+    if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, 
&va_args))
+        return 0;
+
+    ctx.str = str;
+    ctx.max = size;
+    ctx.count = 0;
+
+    if (!_vprintf_wa((out_func_t)sprintf_out, &ctx, fmt, va_args, module_inst))
+        return 0;
+
+    if (ctx.count < ctx.max) {
+        str[ctx.count] = '\0';
+    }
+
+    return ctx.count;
+}
+
+static int
+_puts_wrapper(int32 str_offset)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    const char *str;
+
+    if (!validate_str_addr(module_inst, str_offset))
+        return 0;
+
+    str = addr_app_to_native(str_offset);
+    return bh_printf("%s\n", str);
+}
+
+static int
+_putchar_wrapper(int c)
+{
+    bh_printf("%c", c);
+    return 1;
+}
+
+static int32
+_strdup_wrapper(int32 str_offset)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *str, *str_ret;
+    uint32 len;
+    int32 str_ret_offset = 0;
+
+    if (!validate_str_addr(module_inst, str_offset))
+        return 0;
+
+    str = addr_app_to_native(str_offset);
+
+    if (str) {
+        len = strlen(str) + 1;
+
+        str_ret_offset = module_malloc(len);
+        if (str_ret_offset) {
+            str_ret = addr_app_to_native(str_ret_offset);
+            memcpy(str_ret, str, len);
+        }
+    }
+
+    return str_ret_offset;
+}
+
+static int32
+_memcmp_wrapper(int32 s1_offset, int32 s2_offset, int32 size)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    void *s1, *s2;
+
+    if (!validate_app_addr(s1_offset, size)
+        || !validate_app_addr(s2_offset, size))
+        return 0;
+
+    s1 = addr_app_to_native(s1_offset);
+    s2 = addr_app_to_native(s2_offset);
+    return memcmp(s1, s2, size);
+}
+
+static int32
+_memcpy_wrapper(int32 dst_offset, int32 src_offset, int32 size)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    void *dst, *src;
+
+    if (size == 0)
+        return dst_offset;
+
+    if (!validate_app_addr(dst_offset, size)
+        || !validate_app_addr(src_offset, size))
+        return dst_offset;
+
+    dst = addr_app_to_native(dst_offset);
+    src = addr_app_to_native(src_offset);
+    memcpy(dst, src, size);
+    return dst_offset;
+}
+
+static int32
+_memmove_wrapper(int32 dst_offset, int32 src_offset, int32 size)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    void *dst, *src;
+
+    if (!validate_app_addr(dst_offset, size)
+        || !validate_app_addr(src_offset, size))
+        return dst_offset;
+
+    dst = addr_app_to_native(dst_offset);
+    src = addr_app_to_native(src_offset);
+    memmove(dst, src, size);
+    return dst_offset;
+}
+
+static int32
+_memset_wrapper(int32 s_offset, int32 c, int32 size)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    void *s;
+
+    if (!validate_app_addr(s_offset, size))
+        return s_offset;
+
+    s = addr_app_to_native(s_offset);
+    memset(s, c, size);
+    return s_offset;
+}
+
+static int32
+_strchr_wrapper(int32 s_offset, int32 c)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    const char *s;
+    char *ret;
+
+    if (!validate_str_addr(module_inst, s_offset))
+        return s_offset;
+
+    s = addr_app_to_native(s_offset);
+    ret = strchr(s, c);
+    return ret ? addr_native_to_app(ret) : 0;
+}
+
+static int32
+_strcmp_wrapper(int32 s1_offset, int32 s2_offset)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    void *s1, *s2;
+
+    if (!validate_str_addr(module_inst, s1_offset)
+        || !validate_str_addr(module_inst, s2_offset))
+        return 0;
+
+    s1 = addr_app_to_native(s1_offset);
+    s2 = addr_app_to_native(s2_offset);
+    return strcmp(s1, s2);
+}
+
+static int32
+_strncmp_wrapper(int32 s1_offset, int32 s2_offset, uint32 size)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    void *s1, *s2;
+
+    if (!validate_app_addr(s1_offset, size)
+        || !validate_app_addr(s2_offset, size))
+        return 0;
+
+    s1 = addr_app_to_native(s1_offset);
+    s2 = addr_app_to_native(s2_offset);
+    return strncmp(s1, s2, size);
+}
+
+static int32
+_strcpy_wrapper(int32 dst_offset, int32 src_offset)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *dst, *src;
+    uint32 len;
+
+    if (!validate_str_addr(module_inst, src_offset))
+        return 0;
+
+    src = addr_app_to_native(src_offset);
+    len = strlen(src);
+
+    if (!validate_app_addr(dst_offset, len + 1))
+        return 0;
+
+    dst = addr_app_to_native(dst_offset);
+    strncpy(dst, src, len + 1);
+    return dst_offset;
+}
+
+static int32
+_strncpy_wrapper(int32 dst_offset, int32 src_offset, uint32 size)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *dst, *src;
+
+    if (!validate_app_addr(dst_offset, size)
+        || !validate_app_addr(src_offset, size))
+        return 0;
+
+    dst = addr_app_to_native(dst_offset);
+    src = addr_app_to_native(src_offset);
+    strncpy(dst, src, size);
+    return dst_offset;
+}
+
+static uint32
+_strlen_wrapper(int32 s_offset)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char *s;
+
+    if (!validate_str_addr(module_inst, s_offset))
+        return 0;
+
+    s = addr_app_to_native(s_offset);
+    return strlen(s);
+}
+
+static int32
+_malloc_wrapper(uint32 size)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    return module_malloc(size);
+}
+
+static int32
+_calloc_wrapper(uint32 nmemb, uint32 size)
+{
+    uint64 total_size = (uint64) nmemb * (uint64) size;
+    wasm_module_inst_t module_inst = get_module_inst();
+    uint32 ret_offset = 0;
+    uint8 *ret_ptr;
+
+    if (total_size > UINT32_MAX)
+        total_size = UINT32_MAX;
+
+    ret_offset = module_malloc((uint32 )total_size);
+    if (ret_offset) {
+        ret_ptr = addr_app_to_native(ret_offset);
+        memset(ret_ptr, 0, (uint32) total_size);
+    }
+
+    return ret_offset;
+}
+
+static void
+_free_wrapper(int32 ptr_offset)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+
+    if (!validate_app_addr(ptr_offset, 4))
+        return;
+    return module_free(ptr_offset);
+}
+
+static void
+setTempRet0_wrapper(uint32 temp_ret)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    wasm_runtime_set_temp_ret(module_inst, temp_ret);
+}
+
+static uint32
+getTempRet0_wrapper()
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    return wasm_runtime_get_temp_ret(module_inst);
+}
+
+static uint32
+_llvm_bswap_i16_wrapper(uint32 data)
+{
+    return (data & 0xFFFF0000)
+           | ((data & 0xFF) << 8)
+           | ((data & 0xFF00) >> 8);
+}
+
+static uint32
+_llvm_bswap_i32_wrapper(uint32 data)
+{
+    return ((data & 0xFF) << 24)
+           | ((data & 0xFF00) << 8)
+           | ((data & 0xFF0000) >> 8)
+           | ((data & 0xFF000000) >> 24);
+}
+
+static uint32
+_bitshift64Lshr_wrapper(uint32 uint64_part0, uint32 uint64_part1,
+                        uint32 bits)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    union {
+        uint64 value;
+        uint32 parts[2];
+    } u;
+
+    u.parts[0] = uint64_part0;
+    u.parts[1] = uint64_part1;
+
+    u.value >>= bits;
+    /* return low 32bit and save high 32bit to temp ret */
+    wasm_runtime_set_temp_ret(module_inst, (uint32) (u.value >> 32));
+    return (uint32) u.value;
+}
+
+static uint32
+_bitshift64Shl_wrapper(uint32 int64_part0, uint32 int64_part1,
+                       uint32 bits)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    union {
+        int64 value;
+        uint32 parts[2];
+    } u;
+
+    u.parts[0] = int64_part0;
+    u.parts[1] = int64_part1;
+
+    u.value <<= bits;
+    /* return low 32bit and save high 32bit to temp ret */
+    wasm_runtime_set_temp_ret(module_inst, (uint32) (u.value >> 32));
+    return (uint32) u.value;
+}
+
+static void
+_llvm_stackrestore_wrapper(uint32 llvm_stack)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    bh_printf("_llvm_stackrestore called!\n");
+    wasm_runtime_set_llvm_stack(module_inst, llvm_stack);
+}
+
+static uint32
+_llvm_stacksave_wrapper()
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    bh_printf("_llvm_stacksave called!\n");
+    return wasm_runtime_get_llvm_stack(module_inst);
+}
+
+static int32
+_emscripten_memcpy_big_wrapper(int32 dst_offset, int32 src_offset,
+                               uint32 size)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    void *dst, *src;
+
+    if (!validate_app_addr(dst_offset, size)
+        || !validate_app_addr(src_offset, size))
+        return dst_offset;
+
+    dst = addr_app_to_native(dst_offset);
+    src = addr_app_to_native(src_offset);
+
+    memcpy(dst, src, size);
+    return dst_offset;
+}
+
+static void
+abort_wrapper(int32 code)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char buf[32];
+    snprintf(buf, sizeof(buf), "env.abort(%i)", code);
+    wasm_runtime_set_exception(module_inst, buf);
+}
+
+static void
+abortStackOverflow_wrapper(int32 code)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char buf[32];
+    snprintf(buf, sizeof(buf), "env.abortStackOverflow(%i)", code);
+    wasm_runtime_set_exception(module_inst, buf);
+}
+
+static void
+nullFunc_X_wrapper(int32 code)
+{
+    wasm_module_inst_t module_inst = get_module_inst();
+    char buf[32];
+    snprintf(buf, sizeof(buf), "env.nullFunc_X(%i)", code);
+    wasm_runtime_set_exception(module_inst, buf);
+}
+
+static int
+_clock_gettime_wrapper(clockid_t clk_id, int32 tp_offset)
+{
+        wasm_module_inst_t module_inst = get_module_inst();
+    struct timespec *tp_native;
+
+    if (!validate_app_addr(tp_offset, sizeof(struct timespec *)))
+       return -1;
+
+    tp_native = addr_app_to_native(tp_offset);
+    #if CONFIG_PLAT_RASPI
+        // When running WAMR on the Raspberry Pi, we add support to WAMR for 
clock_gettime
+        // using the Raspberry Pi's system timer. Therefore, WAMR will need to 
include the
+        // raspi/time.h header to use the get_system_timer() function.
+        tp_native->tv_sec = get_system_timer();
+    #endif
+    return 0;
+}
+
+/*#define ENABLE_SPEC_TEST 1*/
+
+#ifdef ENABLE_SPEC_TEST
+static void
+print_i32_wrapper(int i32)
+{
+    bh_printf("%d\n", i32);
+}
+
+static void
+print_wrapper(int i32)
+{
+    bh_printf("%d\n", i32);
+}
+#endif
+
+/* TODO: add function parameter/result types check */
+#define REG_NATIVE_FUNC(module_name, func_name)     \
+    { #module_name, #func_name, func_name##_wrapper }
+
+typedef struct WASMNativeFuncDef {
+    const char *module_name;
+    const char *func_name;
+    void *func_ptr;
+} WASMNativeFuncDef;
+
+static WASMNativeFuncDef native_func_defs[] = {
+#ifdef ENABLE_SPEC_TEST
+    REG_NATIVE_FUNC(spectest, print_i32),
+    REG_NATIVE_FUNC(spectest, print),
+#endif
+    REG_NATIVE_FUNC(env, _printf),
+    REG_NATIVE_FUNC(env, _sprintf),
+    REG_NATIVE_FUNC(env, _snprintf),
+    REG_NATIVE_FUNC(env, _puts),
+    REG_NATIVE_FUNC(env, _putchar),
+    REG_NATIVE_FUNC(env, _memcmp),
+    REG_NATIVE_FUNC(env, _memcpy),
+    REG_NATIVE_FUNC(env, _memmove),
+    REG_NATIVE_FUNC(env, _memset),
+    REG_NATIVE_FUNC(env, _strchr),
+    REG_NATIVE_FUNC(env, _strcmp),
+    REG_NATIVE_FUNC(env, _strcpy),
+    REG_NATIVE_FUNC(env, _strlen),
+    REG_NATIVE_FUNC(env, _strncmp),
+    REG_NATIVE_FUNC(env, _strncpy),
+    REG_NATIVE_FUNC(env, _malloc),
+    REG_NATIVE_FUNC(env, _calloc),
+    REG_NATIVE_FUNC(env, _strdup),
+    REG_NATIVE_FUNC(env, _free),
+    REG_NATIVE_FUNC(env, setTempRet0),
+    REG_NATIVE_FUNC(env, getTempRet0),
+    REG_NATIVE_FUNC(env, _llvm_bswap_i16),
+    REG_NATIVE_FUNC(env, _llvm_bswap_i32),
+    REG_NATIVE_FUNC(env, _bitshift64Lshr),
+    REG_NATIVE_FUNC(env, _bitshift64Shl),
+    REG_NATIVE_FUNC(env, _llvm_stackrestore),
+    REG_NATIVE_FUNC(env, _llvm_stacksave),
+    REG_NATIVE_FUNC(env, _emscripten_memcpy_big),
+    REG_NATIVE_FUNC(env, abort),
+    REG_NATIVE_FUNC(env, abortStackOverflow),
+    REG_NATIVE_FUNC(env, nullFunc_X),
+    REG_NATIVE_FUNC(env, _clock_gettime)
+};
+
+void*
+wasm_native_func_lookup(const char *module_name, const char *func_name)
+{
+    uint32 size = sizeof(native_func_defs) / sizeof(WASMNativeFuncDef);
+    WASMNativeFuncDef *func_def = native_func_defs;
+    WASMNativeFuncDef *func_def_end = func_def + size;
+    void *ret;
+
+    if (!module_name || !func_name)
+        return NULL;
+
+    while (func_def < func_def_end) {
+        if (!strcmp(func_def->module_name, module_name)
+            && (!strcmp(func_def->func_name, func_name)
+                || (func_def->func_name[0] == '_'
+                    && !strcmp(func_def->func_name + 1, func_name))))
+            return (void*) (uintptr_t) func_def->func_ptr;
+        func_def++;
+    }
+
+    if ((ret = wasm_platform_native_func_lookup(module_name, func_name)))
+        return ret;
+
+    return NULL;
+}
+
+/*************************************
+ * Global Variables                  *
+ *************************************/
+
+typedef struct WASMNativeGlobalDef {
+    const char *module_name;
+    const char *global_name;
+    WASMValue global_data;
+} WASMNativeGlobalDef;
+
+static WASMNativeGlobalDef native_global_defs[] = {
+#ifdef ENABLE_SPEC_TEST
+    { "spectest", "global_i32", .global_data.u32 = 0 },
+#endif
+    { "env", "STACKTOP", .global_data.u32 = 0 },
+    { "env", "STACK_MAX", .global_data.u32 = 0 },
+    { "env", "ABORT", .global_data.u32 = 0 },
+    { "env", "memoryBase", .global_data.u32 = 0 },
+    { "env", "__memory_base", .global_data.u32 = 0 },
+    { "env", "tableBase", .global_data.u32 = 0 },
+    { "env", "__table_base", .global_data.u32 = 0 },
+    { "env", "DYNAMICTOP_PTR", .global_data.addr = 0 },
+    { "env", "tempDoublePtr", .global_data.addr = 0 },
+    { "global", "NaN", .global_data.u64 = 0x7FF8000000000000LL },
+    { "global", "Infinity", .global_data.u64 = 0x7FF0000000000000LL }
+};
+
+bool
+wasm_native_global_lookup(const char *module_name, const char *global_name,
+                          WASMGlobalImport *global)
+{
+    uint32 size = sizeof(native_global_defs) / sizeof(WASMNativeGlobalDef);
+    WASMNativeGlobalDef *global_def = native_global_defs;
+    WASMNativeGlobalDef *global_def_end = global_def + size;
+
+    if (!module_name || !global_name || !global)
+        return false;
+
+    /* Lookup constant globals which can be defined by table */
+    while (global_def < global_def_end) {
+        if (!strcmp(global_def->module_name, module_name)
+            && !strcmp(global_def->global_name, global_name)) {
+            global->global_data_linked = global_def->global_data;
+            return true;
+        }
+        global_def++;
+    }
+
+    return false;
+}
+
+bool
+wasm_native_init()
+{
+    /* TODO: qsort the function defs and global defs. */
+    return true;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/lib/native/libc/wasm_libc.cmake 
b/scriptsrcs/wamr/core/iwasm/lib/native/libc/wasm_libc.cmake
new file mode 100755
index 0000000..52e5512
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/lib/native/libc/wasm_libc.cmake
@@ -0,0 +1,23 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (WASM_LIBC_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${WASM_LIBC_DIR})
+
+
+file (GLOB_RECURSE source_all ${WASM_LIBC_DIR}/*.c)
+
+set (WASM_LIBC_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/iwasm/products/alios-things/iwasm.mk 
b/scriptsrcs/wamr/core/iwasm/products/alios-things/iwasm.mk
new file mode 100755
index 0000000..803578c
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/alios-things/iwasm.mk
@@ -0,0 +1,49 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+NAME := iwasm
+IWASM_ROOT := iwasm
+SHARED_LIB_ROOT := shared-lib
+
+GLOBAL_DEFINES += NVALGRIND
+GLOBAL_INCLUDES += ${IWASM_ROOT}/runtime/include \
+                   ${IWASM_ROOT}/runtime/platform/include \
+                   ${IWASM_ROOT}/runtime/platform/alios \
+                   ${IWASM_ROOT}/runtime/vmcore-wasm \
+                   ${SHARED_LIB_ROOT}/include \
+                   ${SHARED_LIB_ROOT}/platform/include \
+                   ${SHARED_LIB_ROOT}/platform/alios
+
+$(NAME)_SOURCES := ${IWASM_ROOT}/runtime/utils/wasm_hashmap.c \
+                   ${IWASM_ROOT}/runtime/utils/wasm_log.c \
+                   ${IWASM_ROOT}/runtime/utils/wasm_dlfcn.c \
+                   ${IWASM_ROOT}/runtime/platform/alios/wasm_native.c \
+                   ${IWASM_ROOT}/runtime/vmcore-wasm/wasm_application.c \
+                   ${IWASM_ROOT}/runtime/vmcore-wasm/wasm_interp.c \
+                   ${IWASM_ROOT}/runtime/vmcore-wasm/wasm_loader.c \
+                   ${IWASM_ROOT}/runtime/vmcore-wasm/wasm_runtime.c \
+                   ${IWASM_ROOT}/runtime/vmcore-wasm/invokeNative_general.c \
+                   ${IWASM_ROOT}/lib/native/libc/libc_wrapper.c \
+                   ${IWASM_ROOT}/lib/native/base/base_lib_export.c \
+                   ${SHARED_LIB_ROOT}/platform/alios/bh_platform.c \
+                   ${SHARED_LIB_ROOT}/platform/alios/bh_assert.c \
+                   ${SHARED_LIB_ROOT}/platform/alios/bh_thread.c \
+                   ${SHARED_LIB_ROOT}/platform/alios/bh_math.c \
+                   ${SHARED_LIB_ROOT}/mem-alloc/bh_memory.c \
+                   ${SHARED_LIB_ROOT}/mem-alloc/mem_alloc.c \
+                   ${SHARED_LIB_ROOT}/mem-alloc/ems/ems_kfc.c \
+                   ${SHARED_LIB_ROOT}/mem-alloc/ems/ems_alloc.c \
+                   ${SHARED_LIB_ROOT}/mem-alloc/ems/ems_hmu.c \
+                   src/main.c src/ext_lib_export.c
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/products/alios-things/src/ext_lib_export.c 
b/scriptsrcs/wamr/core/iwasm/products/alios-things/src/ext_lib_export.c
new file mode 100755
index 0000000..8d78f3a
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/alios-things/src/ext_lib_export.c
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "lib_export.h"
+
+static NativeSymbol extended_native_symbol_defs[] = { };
+
+#include "ext_lib_export.h"
diff --git a/scriptsrcs/wamr/core/iwasm/products/alios-things/src/main.c 
b/scriptsrcs/wamr/core/iwasm/products/alios-things/src/main.c
new file mode 100755
index 0000000..3362478
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/alios-things/src/main.c
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "bh_platform.h"
+#include "wasm_assert.h"
+#include "wasm_log.h"
+#include "wasm_platform_log.h"
+#include "wasm_thread.h"
+#include "wasm_export.h"
+#include "wasm_memory.h"
+#include "bh_memory.h"
+#include "test_wasm.h"
+
+static int app_argc;
+static char **app_argv;
+
+/**
+ * Find the unique main function from a WASM module instance
+ * and execute that function.
+ *
+ * @param module_inst the WASM module instance
+ * @param argc the number of arguments
+ * @param argv the arguments array
+ *
+ * @return true if the main function is called, false otherwise.
+ */
+bool
+wasm_application_execute_main(wasm_module_inst_t module_inst,
+                              int argc, char *argv[]);
+
+static void*
+app_instance_main(wasm_module_inst_t module_inst)
+{
+    const char *exception;
+
+    wasm_application_execute_main(module_inst, app_argc, app_argv);
+    if ((exception = wasm_runtime_get_exception(module_inst)))
+        wasm_printf("%s\n", exception);
+    return NULL;
+}
+
+static char global_heap_buf[256 * 1024] = { 0 };
+
+void iwasm_main(void *arg1)
+{
+    uint8 *wasm_file_buf = NULL;
+    int wasm_file_size;
+    wasm_module_t wasm_module = NULL;
+    wasm_module_inst_t wasm_module_inst = NULL;
+    char error_buf[128];
+#if WASM_ENABLE_LOG != 0
+    int log_verbose_level = 1;
+#endif
+
+    (void) arg1;
+
+    if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf))
+            != 0) {
+        wasm_printf("Init global heap failed.\n");
+        return;
+    }
+
+    /* initialize runtime environment */
+    if (!wasm_runtime_init())
+        goto fail1;
+
+#if WASM_ENABLE_LOG != 0
+    wasm_log_set_verbose_level(log_verbose_level);
+#endif
+
+    /* load WASM byte buffer from byte buffer of include file */
+    wasm_file_buf = (uint8*) wasm_test_file;
+    wasm_file_size = sizeof(wasm_test_file);
+
+    /* load WASM module */
+    if (!(wasm_module = wasm_runtime_load(wasm_file_buf, wasm_file_size,
+            error_buf, sizeof(error_buf)))) {
+        wasm_printf("%s\n", error_buf);
+        goto fail2;
+    }
+
+    /* instantiate the module */
+    if (!(wasm_module_inst = wasm_runtime_instantiate(wasm_module, 8 * 1024,
+            8 * 1024, error_buf, sizeof(error_buf)))) {
+        wasm_printf("%s\n", error_buf);
+        goto fail3;
+    }
+
+    app_instance_main(wasm_module_inst);
+
+    /* destroy the module instance */
+    wasm_runtime_deinstantiate(wasm_module_inst);
+
+    fail3:
+    /* unload the module */
+    wasm_runtime_unload(wasm_module);
+
+    fail2:
+    /* destroy runtime environment */
+    wasm_runtime_destroy();
+
+    fail1: bh_memory_destroy();
+}
+
+#define DEFAULT_THREAD_STACKSIZE (6 * 1024)
+#define DEFAULT_THREAD_PRIORITY 50
+
+bool iwasm_init(void)
+{
+    int ret = aos_task_new("wasm-main", iwasm_main, NULL,
+    DEFAULT_THREAD_STACKSIZE);
+    return ret == 0 ? true : false;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/products/alios-things/src/test_wasm.h 
b/scriptsrcs/wamr/core/iwasm/products/alios-things/src/test_wasm.h
new file mode 100755
index 0000000..aa9572b
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/alios-things/src/test_wasm.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+unsigned char wasm_test_file[] = { 0x00, 0x61, 0x73, 0x6D, 0x01, 0x00, 0x00,
+        0x00, 0x00, 0x0D, 0x06, 0x64, 0x79, 0x6C, 0x69, 0x6E, 0x6B, 0xC0, 0x80,
+        0x04, 0x04, 0x00, 0x00, 0x01, 0x13, 0x04, 0x60, 0x01, 0x7F, 0x00, 0x60,
+        0x01, 0x7F, 0x01, 0x7F, 0x60, 0x02, 0x7F, 0x7F, 0x01, 0x7F, 0x60, 0x00,
+        0x00, 0x02, 0x58, 0x06, 0x03, 0x65, 0x6E, 0x76, 0x05, 0x5F, 0x66, 0x72,
+        0x65, 0x65, 0x00, 0x00, 0x03, 0x65, 0x6E, 0x76, 0x07, 0x5F, 0x6D, 0x61,
+        0x6C, 0x6C, 0x6F, 0x63, 0x00, 0x01, 0x03, 0x65, 0x6E, 0x76, 0x07, 0x5F,
+        0x70, 0x72, 0x69, 0x6E, 0x74, 0x66, 0x00, 0x02, 0x03, 0x65, 0x6E, 0x76,
+        0x05, 0x5F, 0x70, 0x75, 0x74, 0x73, 0x00, 0x01, 0x03, 0x65, 0x6E, 0x76,
+        0x0D, 0x5F, 0x5F, 0x6D, 0x65, 0x6D, 0x6F, 0x72, 0x79, 0x5F, 0x62, 0x61,
+        0x73, 0x65, 0x03, 0x7F, 0x00, 0x03, 0x65, 0x6E, 0x76, 0x06, 0x6D, 0x65,
+        0x6D, 0x6F, 0x72, 0x79, 0x02, 0x00, 0x01, 0x03, 0x04, 0x03, 0x02, 0x03,
+        0x03, 0x06, 0x10, 0x03, 0x7F, 0x01, 0x41, 0x00, 0x0B, 0x7F, 0x01, 0x41,
+        0x00, 0x0B, 0x7F, 0x00, 0x41, 0x1B, 0x0B, 0x07, 0x33, 0x04, 0x12, 0x5F,
+        0x5F, 0x70, 0x6F, 0x73, 0x74, 0x5F, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E,
+        0x74, 0x69, 0x61, 0x74, 0x65, 0x00, 0x06, 0x05, 0x5F, 0x6D, 0x61, 0x69,
+        0x6E, 0x00, 0x04, 0x0B, 0x72, 0x75, 0x6E, 0x50, 0x6F, 0x73, 0x74, 0x53,
+        0x65, 0x74, 0x73, 0x00, 0x05, 0x04, 0x5F, 0x73, 0x74, 0x72, 0x03, 0x03,
+        0x0A, 0xBA, 0x01, 0x03, 0x9E, 0x01, 0x01, 0x01, 0x7F, 0x23, 0x01, 0x21,
+        0x00, 0x23, 0x01, 0x41, 0x10, 0x6A, 0x24, 0x01, 0x20, 0x00, 0x41, 0x08,
+        0x6A, 0x21, 0x02, 0x23, 0x00, 0x41, 0x1B, 0x6A, 0x10, 0x03, 0x1A, 0x41,
+        0x80, 0x08, 0x10, 0x01, 0x21, 0x01, 0x20, 0x01, 0x04, 0x7F, 0x20, 0x00,
+        0x20, 0x01, 0x36, 0x02, 0x00, 0x23, 0x00, 0x20, 0x00, 0x10, 0x02, 0x1A,
+        0x20, 0x01, 0x23, 0x00, 0x2C, 0x00, 0x0D, 0x3A, 0x00, 0x00, 0x20, 0x01,
+        0x23, 0x00, 0x2C, 0x00, 0x0E, 0x3A, 0x00, 0x01, 0x20, 0x01, 0x23, 0x00,
+        0x2C, 0x00, 0x0F, 0x3A, 0x00, 0x02, 0x20, 0x01, 0x23, 0x00, 0x2C, 0x00,
+        0x10, 0x3A, 0x00, 0x03, 0x20, 0x01, 0x23, 0x00, 0x2C, 0x00, 0x11, 0x3A,
+        0x00, 0x04, 0x20, 0x01, 0x23, 0x00, 0x2C, 0x00, 0x12, 0x3A, 0x00, 0x05,
+        0x20, 0x02, 0x20, 0x01, 0x36, 0x02, 0x00, 0x23, 0x00, 0x41, 0x13, 0x6A,
+        0x20, 0x02, 0x10, 0x02, 0x1A, 0x20, 0x01, 0x10, 0x00, 0x20, 0x00, 0x24,
+        0x01, 0x41, 0x00, 0x05, 0x23, 0x00, 0x41, 0x28, 0x6A, 0x10, 0x03, 0x1A,
+        0x20, 0x00, 0x24, 0x01, 0x41, 0x7F, 0x0B, 0x0B, 0x03, 0x00, 0x01, 0x0B,
+        0x14, 0x00, 0x23, 0x00, 0x41, 0x40, 0x6B, 0x24, 0x01, 0x23, 0x01, 0x41,
+        0x80, 0x80, 0x04, 0x6A, 0x24, 0x02, 0x10, 0x05, 0x0B, 0x0B, 0x3F, 0x01,
+        0x00, 0x23, 0x00, 0x0B, 0x39, 0x62, 0x75, 0x66, 0x20, 0x70, 0x74, 0x72,
+        0x3A, 0x20, 0x25, 0x70, 0x0A, 0x00, 0x31, 0x32, 0x33, 0x34, 0x0A, 0x00,
+        0x62, 0x75, 0x66, 0x3A, 0x20, 0x25, 0x73, 0x00, 0x48, 0x65, 0x6C, 0x6C,
+        0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x21, 0x00, 0x6D, 0x61, 0x6C,
+        0x6C, 0x6F, 0x63, 0x20, 0x62, 0x75, 0x66, 0x20, 0x66, 0x61, 0x69, 0x6C,
+        0x65, 0x64, 0x00, 0x50, 0x04, 0x6E, 0x61, 0x6D, 0x65, 0x01, 0x49, 0x07,
+        0x00, 0x05, 0x5F, 0x66, 0x72, 0x65, 0x65, 0x01, 0x07, 0x5F, 0x6D, 0x61,
+        0x6C, 0x6C, 0x6F, 0x63, 0x02, 0x07, 0x5F, 0x70, 0x72, 0x69, 0x6E, 0x74,
+        0x66, 0x03, 0x05, 0x5F, 0x70, 0x75, 0x74, 0x73, 0x04, 0x05, 0x5F, 0x6D,
+        0x61, 0x69, 0x6E, 0x05, 0x0B, 0x72, 0x75, 0x6E, 0x50, 0x6F, 0x73, 0x74,
+        0x53, 0x65, 0x74, 0x73, 0x06, 0x12, 0x5F, 0x5F, 0x70, 0x6F, 0x73, 0x74,
+        0x5F, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x69, 0x61, 0x74, 0x65,
+        0x00, 0x20, 0x10, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x4D, 0x61, 0x70,
+        0x70, 0x69, 0x6E, 0x67, 0x55, 0x52, 0x4C, 0x0E, 0x61, 0x2E, 0x6F, 0x75,
+        0x74, 0x2E, 0x77, 0x61, 0x73, 0x6D, 0x2E, 0x6D, 0x61, 0x70 };
diff --git a/scriptsrcs/wamr/core/iwasm/products/darwin/CMakeLists.txt 
b/scriptsrcs/wamr/core/iwasm/products/darwin/CMakeLists.txt
new file mode 100755
index 0000000..a88b155
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/darwin/CMakeLists.txt
@@ -0,0 +1,107 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cmake_minimum_required (VERSION 2.8)
+
+project (iwasm)
+
+set (PLATFORM "darwin")
+
+# Reset default linker flags
+set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
+set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
+
+# Enable repl mode if want to test spec cases
+# add_definitions(-DWASM_ENABLE_REPL)
+
+if (NOT ("$ENV{VALGRIND}" STREQUAL "YES"))
+  add_definitions(-DNVALGRIND)
+endif ()
+
+# Currently build as 64-bit by default.
+set (BUILD_AS_64BIT_SUPPORT "YES")
+
+if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES")
+  # Add -fPIC flag if build as 64-bit
+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+  set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} 
-fPIC")
+else ()
+  add_definitions (-m32)
+  set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32")
+  set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32")
+endif ()
+endif ()
+
+if (NOT CMAKE_BUILD_TYPE)
+  set(CMAKE_BUILD_TYPE Release)
+endif (NOT CMAKE_BUILD_TYPE)
+message ("CMAKE_BUILD_TYPE = " ${CMAKE_BUILD_TYPE})
+
+set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl")
+set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -Wall 
-Wno-unused-parameter -Wno-pedantic")
+
+set (CMAKE_MACOSX_RPATH True)
+
+set (SHARED_LIB_DIR ../../../shared-lib)
+
+include_directories (.
+                     ../../runtime/include
+                     ../../runtime/platform/include
+                     ${SHARED_LIB_DIR}/include)
+
+enable_language (ASM)
+
+include (../../runtime/platform/${PLATFORM}/platform.cmake)
+include (../../runtime/utils/utils.cmake)
+include (../../runtime/vmcore-wasm/vmcore.cmake)
+include (../../lib/native/base/wasm_lib_base.cmake)
+include (../../lib/native/libc/wasm_libc.cmake)
+include (${SHARED_LIB_DIR}/platform/${PLATFORM}/shared_platform.cmake)
+include (${SHARED_LIB_DIR}/mem-alloc/mem_alloc.cmake)
+include (${SHARED_LIB_DIR}/utils/shared_utils.cmake)
+
+add_library (vmlib
+             ${WASM_PLATFORM_LIB_SOURCE}
+             ${WASM_UTILS_LIB_SOURCE}
+             ${VMCORE_LIB_SOURCE}
+             ${WASM_LIB_BASE_DIR}/base_lib_export.c
+             ${WASM_LIBC_SOURCE}
+             ${PLATFORM_SHARED_SOURCE}
+             ${MEM_ALLOC_SHARED_SOURCE}
+             ${UTILS_SHARED_SOURCE})
+
+add_executable (iwasm main.c ext_lib_export.c)
+
+install (TARGETS iwasm DESTINATION bin)
+
+target_link_libraries (iwasm vmlib -lm -ldl -lpthread)
+
+add_library (libiwasm SHARED
+             ${WASM_PLATFORM_LIB_SOURCE}
+             ${WASM_UTILS_LIB_SOURCE}
+             ${VMCORE_LIB_SOURCE}
+             ${WASM_LIB_BASE_DIR}/base_lib_export.c
+             ${WASM_LIBC_SOURCE}
+             ${PLATFORM_SHARED_SOURCE}
+             ${MEM_ALLOC_SHARED_SOURCE}
+             ${UTILS_SHARED_SOURCE}
+             ext_lib_export.c)
+
+install (TARGETS libiwasm DESTINATION lib)
+
+set_target_properties (libiwasm PROPERTIES OUTPUT_NAME iwasm)
+
+target_link_libraries (libiwasm -lm -ldl -lpthread)
+
diff --git a/scriptsrcs/wamr/core/iwasm/products/darwin/ext_lib_export.c 
b/scriptsrcs/wamr/core/iwasm/products/darwin/ext_lib_export.c
new file mode 100755
index 0000000..8d78f3a
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/darwin/ext_lib_export.c
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "lib_export.h"
+
+static NativeSymbol extended_native_symbol_defs[] = { };
+
+#include "ext_lib_export.h"
diff --git a/scriptsrcs/wamr/core/iwasm/products/darwin/main.c 
b/scriptsrcs/wamr/core/iwasm/products/darwin/main.c
new file mode 100755
index 0000000..65f464c
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/darwin/main.c
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "bh_platform.h"
+#include "wasm_application.h"
+#include "wasm_assert.h"
+#include "wasm_log.h"
+#include "wasm_platform_log.h"
+#include "wasm_thread.h"
+#include "wasm_export.h"
+#include "wasm_memory.h"
+#include "bh_memory.h"
+
+static int app_argc;
+static char **app_argv;
+
+static int print_help()
+{
+    wasm_printf("Usage: iwasm [-options] wasm_file [args...]\n");
+    wasm_printf("options:\n");
+    wasm_printf("  -f|--function name     Specify function name to run in 
module\n"
+                "                         rather than main\n");
+#if WASM_ENABLE_LOG != 0
+    wasm_printf("  -v=X                   Set log verbose level (0 to 2, 
default is 1),\n"
+                "                         larger level with more log\n");
+#endif
+    wasm_printf("  --repl                 Start a very simple REPL 
(read-eval-print-loop) mode\n"
+                "                         that runs commands in the form of 
`FUNC ARG...`\n");
+    return 1;
+}
+
+static void*
+app_instance_main(wasm_module_inst_t module_inst)
+{
+    const char *exception;
+
+    wasm_application_execute_main(module_inst, app_argc, app_argv);
+    if ((exception = wasm_runtime_get_exception(module_inst)))
+        wasm_printf("%s\n", exception);
+    return NULL;
+}
+
+static void*
+app_instance_func(wasm_module_inst_t module_inst, const char *func_name)
+{
+    const char *exception;
+
+    wasm_application_execute_func(module_inst, func_name, app_argc - 1,
+                                  app_argv + 1);
+    if ((exception = wasm_runtime_get_exception(module_inst)))
+        wasm_printf("%s\n", exception);
+    return NULL;
+}
+
+/**
+ * Split a space separated strings into an array of strings
+ * Returns NULL on failure
+ * Memory must be freed by caller
+ * Based on: http://stackoverflow.com/a/11198630/471795
+ */
+static char **
+split_string(char *str, int *count)
+{
+    char **res = NULL;
+    char *p;
+    int idx = 0;
+
+    /* split string and append tokens to 'res' */
+    do {
+        p = strtok(str, " ");
+        str = NULL;
+        res = (char**) realloc(res, sizeof(char*) * (idx + 1));
+        if (res == NULL) {
+            return NULL;
+        }
+        res[idx++] = p;
+    } while (p);
+
+    if (count) {
+        *count = idx - 1;
+    }
+    return res;
+}
+
+static void*
+app_instance_repl(wasm_module_inst_t module_inst)
+{
+    char *cmd = NULL;
+    size_t len = 0;
+    ssize_t n;
+
+    while ((wasm_printf("webassembly> "), n = getline(&cmd, &len, stdin)) != 
-1) {
+        wasm_assert(n > 0);
+        if (cmd[n - 1] == '\n') {
+            if (n == 1)
+                continue;
+            else
+                cmd[n - 1] = '\0';
+        }
+        app_argv = split_string(cmd, &app_argc);
+        if (app_argv == NULL) {
+            LOG_ERROR("Wasm prepare param failed: split string failed.\n");
+            break;
+        }
+        if (app_argc != 0) {
+            wasm_application_execute_func(module_inst, app_argv[0],
+                                          app_argc - 1, app_argv + 1);
+        }
+        free(app_argv);
+    }
+    free(cmd);
+    return NULL;
+}
+
+#define USE_GLOBAL_HEAP_BUF 0
+
+#if USE_GLOBAL_HEAP_BUF != 0
+static char global_heap_buf[10 * 1024 * 1024] = { 0 };
+#endif
+
+int main(int argc, char *argv[])
+{
+    char *wasm_file = NULL;
+    const char *func_name = NULL;
+    uint8 *wasm_file_buf = NULL;
+    int wasm_file_size;
+    wasm_module_t wasm_module = NULL;
+    wasm_module_inst_t wasm_module_inst = NULL;
+    char error_buf[128];
+#if WASM_ENABLE_LOG != 0
+    int log_verbose_level = 1;
+#endif
+    bool is_repl_mode = false;
+
+    /* Process options.  */
+    for (argc--, argv++; argc > 0 && argv[0][0] == '-'; argc--, argv++) {
+        if (!strcmp(argv[0], "-f") || !strcmp(argv[0], "--function")) {
+            argc--, argv++;
+            if (argc < 2) {
+                print_help();
+                return 0;
+            }
+            func_name = argv[0];
+        }
+#if WASM_ENABLE_LOG != 0
+        else if (!strncmp(argv[0], "-v=", 3)) {
+            log_verbose_level = atoi(argv[0] + 3);
+            if (log_verbose_level < 0 || log_verbose_level > 2)
+                return print_help();
+        }
+#endif
+        else if (!strcmp(argv[0], "--repl"))
+            is_repl_mode = true;
+        else
+            return print_help();
+    }
+
+    if (argc == 0)
+        return print_help();
+
+    wasm_file = argv[0];
+    app_argc = argc;
+    app_argv = argv;
+
+#if USE_GLOBAL_HEAP_BUF != 0
+    if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf))
+        != 0) {
+        wasm_printf("Init memory with global heap buffer failed.\n");
+        return -1;
+    }
+#else
+    if (bh_memory_init_with_allocator(malloc, free)) {
+        wasm_printf("Init memory with memory allocator failed.\n");
+        return -1;
+    }
+#endif
+
+    /* initialize runtime environment */
+    if (!wasm_runtime_init())
+        goto fail1;
+
+    wasm_log_set_verbose_level(log_verbose_level);
+
+    /* load WASM byte buffer from WASM bin file */
+    if (!(wasm_file_buf = (uint8*) bh_read_file_to_buffer(wasm_file,
+                                                          &wasm_file_size)))
+        goto fail2;
+
+    /* load WASM module */
+    if (!(wasm_module = wasm_runtime_load(wasm_file_buf, wasm_file_size,
+                                          error_buf, sizeof(error_buf)))) {
+        wasm_printf("%s\n", error_buf);
+        goto fail3;
+    }
+
+    /* instantiate the module */
+    if (!(wasm_module_inst = wasm_runtime_instantiate(wasm_module,
+                                                      64 * 1024, /* stack size 
*/
+                                                      64 * 1024, /* heap size 
*/
+                                                      error_buf,
+                                                      sizeof(error_buf)))) {
+        wasm_printf("%s\n", error_buf);
+        goto fail4;
+    }
+
+    if (is_repl_mode)
+        app_instance_repl(wasm_module_inst);
+    else if (func_name)
+        app_instance_func(wasm_module_inst, func_name);
+    else
+        app_instance_main(wasm_module_inst);
+
+    /* destroy the module instance */
+    wasm_runtime_deinstantiate(wasm_module_inst);
+
+fail4:
+    /* unload the module */
+    wasm_runtime_unload(wasm_module);
+
+fail3:
+    /* free the file buffer */
+    wasm_free(wasm_file_buf);
+
+fail2:
+    /* destroy runtime environment */
+    wasm_runtime_destroy();
+
+fail1:
+    bh_memory_destroy();
+    return 0;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/products/linux-sgx/CMakeLists.txt 
b/scriptsrcs/wamr/core/iwasm/products/linux-sgx/CMakeLists.txt
new file mode 100755
index 0000000..4d590a8
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/linux-sgx/CMakeLists.txt
@@ -0,0 +1,90 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cmake_minimum_required (VERSION 2.8)
+
+project (iwasm)
+
+set (PLATFORM "linux-sgx")
+
+# Reset default linker flags
+set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
+set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
+
+add_definitions(-DUSE_SGX=1)
+add_definitions(-DOPS_INPUT_OUTPUT=1)
+add_definitions(-DOPS_UNSAFE_BUFFERS=0)
+add_definitions(-DWASM_ENABLE_LOG=0)
+add_definitions(-Dbh_printf=bh_printf_sgx)
+
+# Enable repl mode if want to test spec cases
+# add_definitions(-DWASM_ENABLE_REPL)
+
+if (NOT ("$ENV{VALGRIND}" STREQUAL "YES"))
+  add_definitions(-DNVALGRIND)
+endif ()
+
+# Currently build as 64-bit by default.
+set (BUILD_AS_64BIT_SUPPORT "YES")
+
+if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES")
+  # Add -fPIC flag if build as 64-bit
+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+  set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} 
-fPIC")
+else ()
+  add_definitions (-m32)
+  set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32")
+  set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32")
+endif ()
+endif ()
+
+if (NOT CMAKE_BUILD_TYPE)
+  set(CMAKE_BUILD_TYPE Release)
+endif (NOT CMAKE_BUILD_TYPE)
+message ("CMAKE_BUILD_TYPE = " ${CMAKE_BUILD_TYPE})
+
+set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")
+set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -Wall 
-Wno-unused-parameter -Wno-pedantic")
+
+set (SHARED_LIB_DIR ../../../shared-lib)
+
+include_directories (.
+                     ../../runtime/include
+                     ../../runtime/platform/include
+                     ${SHARED_LIB_DIR}/include
+                     $ENV{SGX_SDK}/include)
+
+enable_language (ASM)
+
+include (../../runtime/platform/${PLATFORM}/platform.cmake)
+include (../../runtime/utils/utils.cmake)
+include (../../runtime/vmcore-wasm/vmcore.cmake)
+include (../../lib/native/base/wasm_lib_base.cmake)
+include (../../lib/native/libc/wasm_libc.cmake)
+include (${SHARED_LIB_DIR}/platform/${PLATFORM}/shared_platform.cmake)
+include (${SHARED_LIB_DIR}/mem-alloc/mem_alloc.cmake)
+include (${SHARED_LIB_DIR}/utils/shared_utils.cmake)
+
+add_library (vmlib
+             ${WASM_PLATFORM_LIB_SOURCE}
+             ${WASM_UTILS_LIB_SOURCE}
+             ${VMCORE_LIB_SOURCE}
+             ${WASM_LIB_BASE_DIR}/base_lib_export.c
+             ${WASM_LIBC_SOURCE}
+             ${PLATFORM_SHARED_SOURCE}
+             ${MEM_ALLOC_SHARED_SOURCE}
+             ${UTILS_SHARED_SOURCE})
+
+add_library (extlib ext_lib_export.c)
diff --git a/scriptsrcs/wamr/core/iwasm/products/linux-sgx/ext_lib_export.c 
b/scriptsrcs/wamr/core/iwasm/products/linux-sgx/ext_lib_export.c
new file mode 100755
index 0000000..8d78f3a
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/linux-sgx/ext_lib_export.c
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "lib_export.h"
+
+static NativeSymbol extended_native_symbol_defs[] = { };
+
+#include "ext_lib_export.h"
diff --git a/scriptsrcs/wamr/core/iwasm/products/linux/CMakeLists.txt 
b/scriptsrcs/wamr/core/iwasm/products/linux/CMakeLists.txt
new file mode 100755
index 0000000..6e89367
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/linux/CMakeLists.txt
@@ -0,0 +1,104 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cmake_minimum_required (VERSION 2.8)
+
+project (iwasm)
+
+set (PLATFORM "linux")
+
+# Reset default linker flags
+set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
+set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
+
+# Enable repl mode if want to test spec cases
+# add_definitions(-DWASM_ENABLE_REPL)
+
+if (NOT ("$ENV{VALGRIND}" STREQUAL "YES"))
+  add_definitions(-DNVALGRIND)
+endif ()
+
+# Currently build as 64-bit by default.
+set (BUILD_AS_64BIT_SUPPORT "YES")
+
+if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES")
+  # Add -fPIC flag if build as 64-bit
+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+  set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} 
-fPIC")
+else ()
+  add_definitions (-m32)
+  set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32")
+  set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32")
+endif ()
+endif ()
+
+if (NOT CMAKE_BUILD_TYPE)
+  set(CMAKE_BUILD_TYPE Release)
+endif (NOT CMAKE_BUILD_TYPE)
+message ("CMAKE_BUILD_TYPE = " ${CMAKE_BUILD_TYPE})
+
+set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")
+set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -Wall 
-Wno-unused-parameter -Wno-pedantic")
+
+set (SHARED_LIB_DIR ../../../shared-lib)
+
+include_directories (.
+                     ../../runtime/include
+                     ../../runtime/platform/include
+                     ${SHARED_LIB_DIR}/include)
+
+enable_language (ASM)
+
+include (../../runtime/platform/${PLATFORM}/platform.cmake)
+include (../../runtime/utils/utils.cmake)
+include (../../runtime/vmcore-wasm/vmcore.cmake)
+include (../../lib/native/base/wasm_lib_base.cmake)
+include (../../lib/native/libc/wasm_libc.cmake)
+include (${SHARED_LIB_DIR}/platform/${PLATFORM}/shared_platform.cmake)
+include (${SHARED_LIB_DIR}/mem-alloc/mem_alloc.cmake)
+include (${SHARED_LIB_DIR}/utils/shared_utils.cmake)
+
+add_library (vmlib
+             ${WASM_PLATFORM_LIB_SOURCE}
+             ${WASM_UTILS_LIB_SOURCE}
+             ${VMCORE_LIB_SOURCE}
+             ${WASM_LIB_BASE_DIR}/base_lib_export.c
+             ${WASM_LIBC_SOURCE}
+             ${PLATFORM_SHARED_SOURCE}
+             ${MEM_ALLOC_SHARED_SOURCE}
+             ${UTILS_SHARED_SOURCE})
+
+add_executable (iwasm main.c ext_lib_export.c)
+
+install (TARGETS iwasm DESTINATION bin)
+
+target_link_libraries (iwasm vmlib -lm -ldl -lpthread)
+
+add_library (libiwasm SHARED
+             ${WASM_PLATFORM_LIB_SOURCE}
+             ${WASM_UTILS_LIB_SOURCE}
+             ${VMCORE_LIB_SOURCE}
+             ${WASM_LIB_BASE_DIR}/base_lib_export.c
+             ${WASM_LIBC_SOURCE}
+             ${PLATFORM_SHARED_SOURCE}
+             ${MEM_ALLOC_SHARED_SOURCE}
+             ${UTILS_SHARED_SOURCE})
+
+install (TARGETS libiwasm DESTINATION lib)
+
+set_target_properties (libiwasm PROPERTIES OUTPUT_NAME iwasm)
+
+target_link_libraries (libiwasm -lm -ldl -lpthread)
+
diff --git a/scriptsrcs/wamr/core/iwasm/products/linux/ext_lib_export.c 
b/scriptsrcs/wamr/core/iwasm/products/linux/ext_lib_export.c
new file mode 100755
index 0000000..8d78f3a
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/linux/ext_lib_export.c
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "lib_export.h"
+
+static NativeSymbol extended_native_symbol_defs[] = { };
+
+#include "ext_lib_export.h"
diff --git a/scriptsrcs/wamr/core/iwasm/products/linux/main.c 
b/scriptsrcs/wamr/core/iwasm/products/linux/main.c
new file mode 100644
index 0000000..f846243
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/linux/main.c
@@ -0,0 +1,275 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include <stdlib.h>
+#include <string.h>
+#include "bh_platform.h"
+#include "wasm_assert.h"
+#include "wasm_log.h"
+#include "wasm_platform_log.h"
+#include "wasm_thread.h"
+#include "wasm_export.h"
+#include "wasm_memory.h"
+#include "bh_memory.h"
+
+#include <uk/plat/memory.h>
+
+static int app_argc;
+static char **app_argv;
+
+static int print_help()
+{
+    wasm_printf("Usage: iwasm [-options] wasm_file [args...]\n");
+    wasm_printf("options:\n");
+    wasm_printf("  -f|--function name     Specify function name to run in 
module\n"
+                "                         rather than main\n");
+#if WASM_ENABLE_LOG != 0
+    wasm_printf("  -v=X                   Set log verbose level (0 to 2, 
default is 1),\n"
+                "                         larger level with more log\n");
+#endif
+    wasm_printf("  --repl                 Start a very simple REPL 
(read-eval-print-loop) mode\n"
+                "                         that runs commands in the form of 
`FUNC ARG...`\n");
+    return 1;
+}
+
+/**
+ * Find the unique main function from a WASM module instance
+ * and execute that function.
+ *
+ * @param module_inst the WASM module instance
+ * @param argc the number of arguments
+ * @param argv the arguments array
+ *
+ * @return true if the main function is called, false otherwise.
+ */
+bool
+wasm_application_execute_main(wasm_module_inst_t module_inst,
+                              int argc, char *argv[]);
+
+/**
+ * Find the specified function in argv[0] from WASM module of current instance
+ * and execute that function.
+ *
+ * @param module_inst the WASM module instance
+ * @param name the name of the function to execute
+ * @param argc the number of arguments
+ * @param argv the arguments array
+ *
+ * @return true if the specified function is called, false otherwise.
+ */
+bool
+wasm_application_execute_func(wasm_module_inst_t module_inst,
+                              const char *name, int argc, char *argv[]);
+
+static void*
+app_instance_main(wasm_module_inst_t module_inst)
+{
+    const char *exception;
+
+    wasm_application_execute_main(module_inst, app_argc, app_argv);
+    if ((exception = wasm_runtime_get_exception(module_inst)))
+        wasm_printf("%s\n", exception);
+    return NULL;
+}
+
+static void*
+app_instance_func(wasm_module_inst_t module_inst, const char *func_name)
+{
+    const char *exception;
+
+    wasm_application_execute_func(module_inst, func_name, app_argc - 1,
+                                  app_argv + 1);
+    if ((exception = wasm_runtime_get_exception(module_inst)))
+        wasm_printf("%s\n", exception);
+    return NULL;
+}
+
+/**
+ * Split a space separated strings into an array of strings
+ * Returns NULL on failure
+ * Memory must be freed by caller
+ * Based on: http://stackoverflow.com/a/11198630/471795
+ */
+static char **
+split_string(char *str, int *count)
+{
+    char **res = NULL;
+    char *p;
+    int idx = 0;
+
+    /* split string and append tokens to 'res' */
+    do {
+        p = strtok(str, " ");
+        str = NULL;
+        res = (char**) realloc(res, sizeof(char*) * (idx + 1));
+        if (res == NULL) {
+            return NULL;
+        }
+        res[idx++] = p;
+    } while (p);
+
+    if (count) {
+        *count = idx - 1;
+    }
+    return res;
+}
+
+static void*
+app_instance_repl(wasm_module_inst_t module_inst)
+{
+    char *cmd = NULL;
+    size_t len = 0;
+    ssize_t n;
+
+    while ((wasm_printf("webassembly> "), n = getline(&cmd, &len, stdin)) != 
-1) {
+        wasm_assert(n > 0);
+        if (cmd[n - 1] == '\n') {
+            if (n == 1)
+                continue;
+            else
+                cmd[n - 1] = '\0';
+        }
+        app_argv = split_string(cmd, &app_argc);
+        if (app_argv == NULL) {
+            LOG_ERROR("Wasm prepare param failed: split string failed.\n");
+            break;
+        }
+        if (app_argc != 0) {
+            wasm_application_execute_func(module_inst, app_argv[0],
+                                          app_argc - 1, app_argv + 1);
+        }
+        free(app_argv);
+    }
+    free(cmd);
+    return NULL;
+}
+
+#define USE_GLOBAL_HEAP_BUF 0
+
+#if USE_GLOBAL_HEAP_BUF != 0
+static char global_heap_buf[10 * 1024 * 1024] = { 0 };
+#endif
+
+int main(int argc, char *argv[])
+{
+    char *wasm_file = NULL;
+    const char *func_name = NULL;
+    uint8 *wasm_file_buf = NULL;
+    int wasm_file_size;
+    wasm_module_t wasm_module = NULL;
+    wasm_module_inst_t wasm_module_inst = NULL;
+    char error_buf[128];
+#if WASM_ENABLE_LOG != 0
+    int log_verbose_level = 1;
+#endif
+    bool is_repl_mode = false;
+    
+    /* Process options.  */
+    for (argc--, argv++; argc > 0 && argv[0][0] == '-'; argc--, argv++) {
+        if (!strcmp(argv[0], "-f") || !strcmp(argv[0], "--function")) {
+            argc--, argv++;
+            func_name = argv[0];
+        }
+#if WASM_ENABLE_LOG != 0
+        else if (!strncmp(argv[0], "-v=", 3)) {
+            log_verbose_level = atoi(argv[0] + 3);
+            if (log_verbose_level < 0 || log_verbose_level > 2)
+                return print_help();
+        }
+#endif
+        else if (!strcmp(argv[0], "--repl"))
+            is_repl_mode = true;
+    }
+
+    wasm_file = argv[0];
+    app_argc = argc;
+    app_argv = argv;
+
+#if USE_GLOBAL_HEAP_BUF != 0
+    if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf))
+        != 0) {
+        wasm_printf("Init memory with global heap buffer failed.\n");
+        return -1;
+    }
+#else
+    if (bh_memory_init_with_allocator(malloc, free)) {
+        wasm_printf("Init memory with memory allocator failed.\n");
+        return -1;
+    }
+#endif
+
+    /* initialize runtime environment */
+    if (!wasm_runtime_init())
+        goto fail1;
+
+    wasm_log_set_verbose_level(log_verbose_level);
+
+    /* load from initrd */
+    struct ukplat_memregion_desc img;
+    if (ukplat_memregion_find_initrd0(&img) >= 0) {
+      wasm_file_buf = (uint8*)img.base;
+      wasm_file_size = img.len;
+      
+      /* load WASM module */
+      if (!(wasm_module = wasm_runtime_load(wasm_file_buf, wasm_file_size,
+                                            error_buf, sizeof(error_buf)))) {
+          wasm_printf("%s\n", error_buf);
+          goto fail3;
+      }
+
+      /* instantiate the module */
+      if (!(wasm_module_inst = wasm_runtime_instantiate(wasm_module,
+                                                        64 * 1024, /* stack 
size */
+                                                        64 * 1024, /* heap 
size */
+                                                        error_buf,
+                                                        sizeof(error_buf)))) {
+          wasm_printf("%s\n", error_buf);
+          goto fail4;
+      }
+      app_instance_main(wasm_module_inst);
+    }
+    else if (is_repl_mode) {
+       printf("Entering REPL mode...\n");
+       app_instance_repl(wasm_module_inst);
+    }
+    else if (func_name)
+        app_instance_func(wasm_module_inst, func_name);
+    else
+      printf("warning: did not select --repl nor -initrd mode!\n");
+    
+    /* destroy the module instance */
+    wasm_runtime_deinstantiate(wasm_module_inst);
+
+fail4:
+    /* unload the module */
+    wasm_runtime_unload(wasm_module);
+
+fail3:
+    /* free the file buffer */
+    wasm_free(wasm_file_buf);
+
+fail2:
+    /* destroy runtime environment */
+    wasm_runtime_destroy();
+
+fail1:
+    bh_memory_destroy();
+    return 0;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/products/vxworks/CMakeLists.txt 
b/scriptsrcs/wamr/core/iwasm/products/vxworks/CMakeLists.txt
new file mode 100755
index 0000000..d8019e9
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/vxworks/CMakeLists.txt
@@ -0,0 +1,107 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cmake_minimum_required (VERSION 2.8)
+
+project (iwasm)
+
+set (PLATFORM "vxworks")
+
+# Specify the compiler driver provided in the VSB
+SET(CMAKE_C_COMPILER vx-cc)
+SET(CMAKE_AR vx-ar)
+SET(CMAKE_RANLIB vx-ranlib)
+
+# Reset default linker flags
+set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
+set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
+
+# Enable repl mode if want to test spec cases
+# add_definitions(-DWASM_ENABLE_REPL)
+
+if (NOT ("$ENV{VALGRIND}" STREQUAL "YES"))
+  add_definitions(-DNVALGRIND)
+endif ()
+
+# Currently build as 64-bit by default.
+set (BUILD_AS_64BIT_SUPPORT "YES")
+
+if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES")
+  # Add -fPIC flag if build as 64-bit
+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+  set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} 
-fPIC")
+else ()
+  add_definitions (-m32)
+  set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32")
+  set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32")
+endif ()
+endif ()
+
+if (NOT CMAKE_BUILD_TYPE)
+  set(CMAKE_BUILD_TYPE Release)
+endif (NOT CMAKE_BUILD_TYPE)
+message ("CMAKE_BUILD_TYPE = " ${CMAKE_BUILD_TYPE})
+
+set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")
+set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -Wall 
-Wno-unused-parameter -Wno-pedantic")
+
+set (SHARED_LIB_DIR ../../../shared-lib)
+
+include_directories (.
+                     ../../runtime/include
+                     ../../runtime/platform/include
+                     ${SHARED_LIB_DIR}/include)
+
+include (../../runtime/platform/${PLATFORM}/platform.cmake)
+include (../../runtime/utils/utils.cmake)
+include (../../runtime/vmcore-wasm/vmcore.cmake)
+include (../../lib/native/base/wasm_lib_base.cmake)
+include (../../lib/native/libc/wasm_libc.cmake)
+include (${SHARED_LIB_DIR}/platform/${PLATFORM}/shared_platform.cmake)
+include (${SHARED_LIB_DIR}/mem-alloc/mem_alloc.cmake)
+include (${SHARED_LIB_DIR}/utils/shared_utils.cmake)
+
+add_library (vmlib
+             ${WASM_PLATFORM_LIB_SOURCE}
+             ${WASM_UTILS_LIB_SOURCE}
+             ${VMCORE_LIB_SOURCE}
+             ${WASM_LIB_BASE_DIR}/base_lib_export.c
+             ${WASM_LIBC_SOURCE}
+             ${PLATFORM_SHARED_SOURCE}
+             ${MEM_ALLOC_SHARED_SOURCE}
+             ${UTILS_SHARED_SOURCE})
+
+add_executable (iwasm main.c ext_lib_export.c)
+
+install (TARGETS iwasm DESTINATION bin)
+
+target_link_libraries (iwasm vmlib -lm -ldl -lunix)
+
+add_library (libiwasm SHARED
+             ${WASM_PLATFORM_LIB_SOURCE}
+             ${WASM_UTILS_LIB_SOURCE}
+             ${VMCORE_LIB_SOURCE}
+             ${WASM_LIB_BASE_DIR}/base_lib_export.c
+             ${WASM_LIBC_SOURCE}
+             ${PLATFORM_SHARED_SOURCE}
+             ${MEM_ALLOC_SHARED_SOURCE}
+             ${UTILS_SHARED_SOURCE})
+
+install (TARGETS libiwasm DESTINATION lib)
+
+set_target_properties (libiwasm PROPERTIES OUTPUT_NAME iwasm)
+
+target_link_libraries (libiwasm -lm -ldl -lunix)
+
diff --git a/scriptsrcs/wamr/core/iwasm/products/vxworks/ext_lib_export.c 
b/scriptsrcs/wamr/core/iwasm/products/vxworks/ext_lib_export.c
new file mode 100755
index 0000000..8d78f3a
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/vxworks/ext_lib_export.c
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "lib_export.h"
+
+static NativeSymbol extended_native_symbol_defs[] = { };
+
+#include "ext_lib_export.h"
diff --git a/scriptsrcs/wamr/core/iwasm/products/vxworks/main.c 
b/scriptsrcs/wamr/core/iwasm/products/vxworks/main.c
new file mode 100755
index 0000000..a1a503f
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/vxworks/main.c
@@ -0,0 +1,267 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include <stdlib.h>
+#include <string.h>
+#include "wasm_assert.h"
+#include "wasm_log.h"
+#include "wasm_platform.h"
+#include "wasm_platform_log.h"
+#include "wasm_thread.h"
+#include "wasm_export.h"
+#include "wasm_memory.h"
+#include "bh_memory.h"
+
+static int app_argc;
+static char **app_argv;
+
+static int print_help()
+{
+    wasm_printf("Usage: iwasm [-options] wasm_file [args...]\n");
+    wasm_printf("options:\n");
+    wasm_printf("  -f|--function name     Specify function name to run in 
module\n"
+                "                         rather than main\n");
+#if WASM_ENABLE_LOG != 0
+    wasm_printf("  -v=X                   Set log verbose level (0 to 2, 
default is 1),\n"
+                "                         larger level with more log\n");
+#endif
+    wasm_printf("  --repl                 Start a very simple REPL 
(read-eval-print-loop) mode\n"
+                "                         that runs commands in the form of 
`FUNC ARG...`\n");
+    return 1;
+}
+
+/**
+ * Find the unique main function from a WASM module instance
+ * and execute that function.
+ *
+ * @param module_inst the WASM module instance
+ * @param argc the number of arguments
+ * @param argv the arguments array
+ *
+ * @return true if the main function is called, false otherwise.
+ */
+bool
+wasm_application_execute_main(wasm_module_inst_t module_inst,
+                              int argc, char *argv[]);
+
+/**
+ * Find the specified function in argv[0] from WASM module of current instance
+ * and execute that function.
+ *
+ * @param module_inst the WASM module instance
+ * @param name the name of the function to execute
+ * @param argc the number of arguments
+ * @param argv the arguments array
+ *
+ * @return true if the specified function is called, false otherwise.
+ */
+bool
+wasm_application_execute_func(wasm_module_inst_t module_inst,
+                              const char *name, int argc, char *argv[]);
+
+static void*
+app_instance_main(wasm_module_inst_t module_inst)
+{
+    const char *exception;
+
+    wasm_application_execute_main(module_inst, app_argc, app_argv);
+    if ((exception = wasm_runtime_get_exception(module_inst)))
+        wasm_printf("%s\n", exception);
+    return NULL;
+}
+
+static void*
+app_instance_func(wasm_module_inst_t module_inst, const char *func_name)
+{
+    const char *exception;
+
+    wasm_application_execute_func(module_inst, func_name, app_argc - 1,
+                                  app_argv + 1);
+    if ((exception = wasm_runtime_get_exception(module_inst)))
+        wasm_printf("%s\n", exception);
+    return NULL;
+}
+
+/**
+ * Split a space separated strings into an array of strings
+ * Returns NULL on failure
+ * Memory must be freed by caller
+ * Based on: http://stackoverflow.com/a/11198630/471795
+ */
+static char **
+split_string(char *str, int *count)
+{
+    char **res = NULL;
+    char *p;
+    int idx = 0;
+
+    /* split string and append tokens to 'res' */
+    do {
+        p = strtok(str, " ");
+        str = NULL;
+        res = (char**) realloc(res, sizeof(char*) * (idx + 1));
+        if (res == NULL) {
+            return NULL;
+        }
+        res[idx++] = p;
+    } while (p);
+
+    if (count) {
+        *count = idx - 1;
+    }
+    return res;
+}
+
+static void*
+app_instance_repl(wasm_module_inst_t module_inst)
+{
+    char *cmd = NULL;
+    size_t len = 0;
+    ssize_t n;
+
+    while ((wasm_printf("webassembly> "), n = getline(&cmd, &len, stdin)) != 
-1) {
+        wasm_assert(n > 0);
+        if (cmd[n - 1] == '\n') {
+            if (n == 1)
+                continue;
+            else
+                cmd[n - 1] = '\0';
+        }
+        app_argv = split_string(cmd, &app_argc);
+        if (app_argv == NULL) {
+            LOG_ERROR("Wasm prepare param failed: split string failed.\n");
+            break;
+        }
+        if (app_argc != 0) {
+            wasm_application_execute_func(module_inst, app_argv[0],
+                                          app_argc - 1, app_argv + 1);
+        }
+        free(app_argv);
+    }
+    free(cmd);
+    return NULL;
+}
+
+static char global_heap_buf[512 * 1024] = { 0 };
+
+int main(int argc, char *argv[])
+{
+    char *wasm_file = NULL;
+    const char *func_name = NULL;
+    uint8 *wasm_file_buf = NULL;
+    int wasm_file_size;
+    wasm_module_t wasm_module = NULL;
+    wasm_module_inst_t wasm_module_inst = NULL;
+    char error_buf[128];
+#if WASM_ENABLE_LOG != 0
+    int log_verbose_level = 1;
+#endif
+    bool is_repl_mode = false;
+
+    /* Process options.  */
+    for (argc--, argv++; argc > 0 && argv[0][0] == '-'; argc--, argv++) {
+        if (!strcmp(argv[0], "-f") || !strcmp(argv[0], "--function")) {
+            argc--, argv++;
+            if (argc < 2) {
+                print_help();
+                return 0;
+            }
+            func_name = argv[0];
+        }
+#if WASM_ENABLE_LOG != 0
+        else if (!strncmp(argv[0], "-v=", 3)) {
+            log_verbose_level = atoi(argv[0] + 3);
+            if (log_verbose_level < 0 || log_verbose_level > 2)
+                return print_help();
+        }
+#endif
+        else if (!strcmp(argv[0], "--repl"))
+            is_repl_mode = true;
+        else
+            return print_help();
+    }
+
+    if (argc == 0)
+        return print_help();
+
+    wasm_file = argv[0];
+    app_argc = argc;
+    app_argv = argv;
+
+    if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf))
+        != 0) {
+        wasm_printf("Init global heap failed.\n");
+        return -1;
+    }
+
+    /* initialize runtime environment */
+    if (!wasm_runtime_init())
+        goto fail1;
+
+    wasm_log_set_verbose_level(log_verbose_level);
+
+    /* load WASM byte buffer from WASM bin file */
+    if (!(wasm_file_buf = (uint8*) bh_read_file_to_buffer(wasm_file,
+                                                          &wasm_file_size)))
+        goto fail2;
+
+    /* load WASM module */
+    if (!(wasm_module = wasm_runtime_load(wasm_file_buf, wasm_file_size,
+                                          error_buf, sizeof(error_buf)))) {
+        wasm_printf("%s\n", error_buf);
+        goto fail3;
+    }
+
+    /* instantiate the module */
+    if (!(wasm_module_inst = wasm_runtime_instantiate(wasm_module,
+                                                      16 * 1024, /* stack size 
*/
+                                                      8 * 1024,  /* heap size 
*/
+                                                      error_buf,
+                                                      sizeof(error_buf)))) {
+        wasm_printf("%s\n", error_buf);
+        goto fail4;
+    }
+
+    if (is_repl_mode)
+        app_instance_repl(wasm_module_inst);
+    else if (func_name)
+        app_instance_func(wasm_module_inst, func_name);
+    else
+        app_instance_main(wasm_module_inst);
+
+    /* destroy the module instance */
+    wasm_runtime_deinstantiate(wasm_module_inst);
+
+fail4:
+    /* unload the module */
+    wasm_runtime_unload(wasm_module);
+
+fail3:
+    /* free the file buffer */
+    wasm_free(wasm_file_buf);
+
+fail2:
+    /* destroy runtime environment */
+    wasm_runtime_destroy();
+
+fail1:
+    bh_memory_destroy();
+    return 0;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/CMakeLists.txt 
b/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/CMakeLists.txt
new file mode 100755
index 0000000..0363741
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/CMakeLists.txt
@@ -0,0 +1,56 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cmake_minimum_required(VERSION 3.8.2)
+
+include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE)
+project(NONE)
+
+enable_language (ASM)
+
+add_definitions (-DNVALGRIND)
+
+set (IWASM_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/iwasm)
+set (SHARED_LIB_ROOT ${IWASM_ROOT}/../shared-lib)
+
+include_directories (${IWASM_ROOT}/runtime/include
+                     ${IWASM_ROOT}/runtime/platform/include
+                     ${IWASM_ROOT}/runtime/platform/zephyr
+                     ${IWASM_ROOT}/runtime/vmcore-wasm
+                     ${SHARED_LIB_ROOT}/include
+                     ${SHARED_LIB_ROOT}/platform/include
+                     ${SHARED_LIB_ROOT}/platform/zephyr)
+
+set (IWASM_SRCS ${IWASM_ROOT}/runtime/utils/wasm_hashmap.c
+                ${IWASM_ROOT}/runtime/utils/wasm_log.c
+                ${IWASM_ROOT}/runtime/utils/wasm_dlfcn.c
+                ${IWASM_ROOT}/runtime/platform/zephyr/wasm_native.c
+                ${IWASM_ROOT}/runtime/vmcore-wasm/wasm_application.c
+                ${IWASM_ROOT}/runtime/vmcore-wasm/wasm_interp.c
+                ${IWASM_ROOT}/runtime/vmcore-wasm/wasm_loader.c
+                ${IWASM_ROOT}/runtime/vmcore-wasm/wasm_runtime.c
+                ${IWASM_ROOT}/runtime/vmcore-wasm/invokeNative_general.c
+                ${IWASM_ROOT}/lib/native/libc/libc_wrapper.c
+                ${IWASM_ROOT}/lib/native/base/base_lib_export.c
+                ${SHARED_LIB_ROOT}/platform/zephyr/bh_platform.c
+                ${SHARED_LIB_ROOT}/platform/zephyr/bh_assert.c
+                ${SHARED_LIB_ROOT}/platform/zephyr/bh_thread.c
+                ${SHARED_LIB_ROOT}/platform/zephyr/bh_math.c
+                ${SHARED_LIB_ROOT}/mem-alloc/bh_memory.c
+                ${SHARED_LIB_ROOT}/mem-alloc/mem_alloc.c
+                ${SHARED_LIB_ROOT}/mem-alloc/ems/ems_kfc.c
+                ${SHARED_LIB_ROOT}/mem-alloc/ems/ems_alloc.c
+                ${SHARED_LIB_ROOT}/mem-alloc/ems/ems_hmu.c)
+
+target_sources(app PRIVATE ${IWASM_SRCS} src/main.c src/ext_lib_export.c)
diff --git a/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/prj.conf 
b/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/prj.conf
new file mode 100755
index 0000000..e69de29
diff --git 
a/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/src/ext_lib_export.c 
b/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/src/ext_lib_export.c
new file mode 100755
index 0000000..8d78f3a
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/src/ext_lib_export.c
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "lib_export.h"
+
+static NativeSymbol extended_native_symbol_defs[] = { };
+
+#include "ext_lib_export.h"
diff --git a/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/src/main.c 
b/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/src/main.c
new file mode 100755
index 0000000..da85a3b
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/src/main.c
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "bh_platform.h"
+#include "wasm_assert.h"
+#include "wasm_log.h"
+#include "wasm_platform_log.h"
+#include "wasm_thread.h"
+#include "wasm_export.h"
+#include "wasm_memory.h"
+#include "bh_memory.h"
+#include "test_wasm.h"
+
+#define CONFIG_GLOBAL_HEAP_BUF_SIZE 131072
+#define CONFIG_APP_STACK_SIZE 8192
+#define CONFIG_APP_HEAP_SIZE 8192
+#define CONFIG_MAIN_THREAD_STACK_SIZE 4096
+
+static int app_argc;
+static char **app_argv;
+
+/**
+ * Find the unique main function from a WASM module instance
+ * and execute that function.
+ *
+ * @param module_inst the WASM module instance
+ * @param argc the number of arguments
+ * @param argv the arguments array
+ *
+ * @return true if the main function is called, false otherwise.
+ */
+bool
+wasm_application_execute_main(wasm_module_inst_t module_inst,
+                              int argc, char *argv[]);
+
+static void*
+app_instance_main(wasm_module_inst_t module_inst)
+{
+    const char *exception;
+
+    wasm_application_execute_main(module_inst, app_argc, app_argv);
+    if ((exception = wasm_runtime_get_exception(module_inst)))
+        wasm_printf("%s\n", exception);
+    return NULL;
+}
+
+static char global_heap_buf[CONFIG_GLOBAL_HEAP_BUF_SIZE] = { 0 };
+
+void iwasm_main(void *arg1, void *arg2, void *arg3)
+{
+    uint8 *wasm_file_buf = NULL;
+    int wasm_file_size;
+    wasm_module_t wasm_module = NULL;
+    wasm_module_inst_t wasm_module_inst = NULL;
+    char error_buf[128];
+#if WASM_ENABLE_LOG != 0
+    int log_verbose_level = 1;
+#endif
+
+    (void) arg1;
+    (void) arg2;
+    (void) arg3;
+
+    if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf))
+        != 0) {
+        wasm_printf("Init global heap failed.\n");
+        return;
+    }
+
+    /* initialize runtime environment */
+    if (!wasm_runtime_init())
+        goto fail1;
+
+#if WASM_ENABLE_LOG != 0
+    wasm_log_set_verbose_level(log_verbose_level);
+#endif
+
+    /* load WASM byte buffer from byte buffer of include file */
+    wasm_file_buf = (uint8*) wasm_test_file;
+    wasm_file_size = sizeof(wasm_test_file);
+
+    /* load WASM module */
+    if (!(wasm_module = wasm_runtime_load(wasm_file_buf, wasm_file_size,
+                                          error_buf, sizeof(error_buf)))) {
+        wasm_printf("%s\n", error_buf);
+        goto fail2;
+    }
+
+    /* instantiate the module */
+    if (!(wasm_module_inst = wasm_runtime_instantiate(wasm_module,
+                                                      CONFIG_APP_STACK_SIZE,
+                                                      CONFIG_APP_HEAP_SIZE,
+                                                      error_buf,
+                                                      sizeof(error_buf)))) {
+        wasm_printf("%s\n", error_buf);
+        goto fail3;
+    }
+
+    app_instance_main(wasm_module_inst);
+
+    /* destroy the module instance */
+    wasm_runtime_deinstantiate(wasm_module_inst);
+
+    fail3:
+    /* unload the module */
+    wasm_runtime_unload(wasm_module);
+
+    fail2:
+    /* destroy runtime environment */
+    wasm_runtime_destroy();
+
+    fail1: bh_memory_destroy();
+}
+
+#define MAIN_THREAD_STACK_SIZE (CONFIG_MAIN_THREAD_STACK_SIZE)
+#define MAIN_THREAD_PRIORITY 5
+
+K_THREAD_STACK_DEFINE(iwasm_main_thread_stack, MAIN_THREAD_STACK_SIZE);
+static struct k_thread iwasm_main_thread;
+
+bool iwasm_init(void)
+{
+    k_tid_t tid = k_thread_create(&iwasm_main_thread, iwasm_main_thread_stack,
+                                  MAIN_THREAD_STACK_SIZE,
+                                  iwasm_main, NULL, NULL, NULL,
+                                  MAIN_THREAD_PRIORITY, 0, K_NO_WAIT);
+    return tid ? true : false;
+}
+
+void main(void)
+{
+    iwasm_init();
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/src/test_wasm.h 
b/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/src/test_wasm.h
new file mode 100755
index 0000000..aa9572b
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/products/zephyr/simple/src/test_wasm.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+unsigned char wasm_test_file[] = { 0x00, 0x61, 0x73, 0x6D, 0x01, 0x00, 0x00,
+        0x00, 0x00, 0x0D, 0x06, 0x64, 0x79, 0x6C, 0x69, 0x6E, 0x6B, 0xC0, 0x80,
+        0x04, 0x04, 0x00, 0x00, 0x01, 0x13, 0x04, 0x60, 0x01, 0x7F, 0x00, 0x60,
+        0x01, 0x7F, 0x01, 0x7F, 0x60, 0x02, 0x7F, 0x7F, 0x01, 0x7F, 0x60, 0x00,
+        0x00, 0x02, 0x58, 0x06, 0x03, 0x65, 0x6E, 0x76, 0x05, 0x5F, 0x66, 0x72,
+        0x65, 0x65, 0x00, 0x00, 0x03, 0x65, 0x6E, 0x76, 0x07, 0x5F, 0x6D, 0x61,
+        0x6C, 0x6C, 0x6F, 0x63, 0x00, 0x01, 0x03, 0x65, 0x6E, 0x76, 0x07, 0x5F,
+        0x70, 0x72, 0x69, 0x6E, 0x74, 0x66, 0x00, 0x02, 0x03, 0x65, 0x6E, 0x76,
+        0x05, 0x5F, 0x70, 0x75, 0x74, 0x73, 0x00, 0x01, 0x03, 0x65, 0x6E, 0x76,
+        0x0D, 0x5F, 0x5F, 0x6D, 0x65, 0x6D, 0x6F, 0x72, 0x79, 0x5F, 0x62, 0x61,
+        0x73, 0x65, 0x03, 0x7F, 0x00, 0x03, 0x65, 0x6E, 0x76, 0x06, 0x6D, 0x65,
+        0x6D, 0x6F, 0x72, 0x79, 0x02, 0x00, 0x01, 0x03, 0x04, 0x03, 0x02, 0x03,
+        0x03, 0x06, 0x10, 0x03, 0x7F, 0x01, 0x41, 0x00, 0x0B, 0x7F, 0x01, 0x41,
+        0x00, 0x0B, 0x7F, 0x00, 0x41, 0x1B, 0x0B, 0x07, 0x33, 0x04, 0x12, 0x5F,
+        0x5F, 0x70, 0x6F, 0x73, 0x74, 0x5F, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E,
+        0x74, 0x69, 0x61, 0x74, 0x65, 0x00, 0x06, 0x05, 0x5F, 0x6D, 0x61, 0x69,
+        0x6E, 0x00, 0x04, 0x0B, 0x72, 0x75, 0x6E, 0x50, 0x6F, 0x73, 0x74, 0x53,
+        0x65, 0x74, 0x73, 0x00, 0x05, 0x04, 0x5F, 0x73, 0x74, 0x72, 0x03, 0x03,
+        0x0A, 0xBA, 0x01, 0x03, 0x9E, 0x01, 0x01, 0x01, 0x7F, 0x23, 0x01, 0x21,
+        0x00, 0x23, 0x01, 0x41, 0x10, 0x6A, 0x24, 0x01, 0x20, 0x00, 0x41, 0x08,
+        0x6A, 0x21, 0x02, 0x23, 0x00, 0x41, 0x1B, 0x6A, 0x10, 0x03, 0x1A, 0x41,
+        0x80, 0x08, 0x10, 0x01, 0x21, 0x01, 0x20, 0x01, 0x04, 0x7F, 0x20, 0x00,
+        0x20, 0x01, 0x36, 0x02, 0x00, 0x23, 0x00, 0x20, 0x00, 0x10, 0x02, 0x1A,
+        0x20, 0x01, 0x23, 0x00, 0x2C, 0x00, 0x0D, 0x3A, 0x00, 0x00, 0x20, 0x01,
+        0x23, 0x00, 0x2C, 0x00, 0x0E, 0x3A, 0x00, 0x01, 0x20, 0x01, 0x23, 0x00,
+        0x2C, 0x00, 0x0F, 0x3A, 0x00, 0x02, 0x20, 0x01, 0x23, 0x00, 0x2C, 0x00,
+        0x10, 0x3A, 0x00, 0x03, 0x20, 0x01, 0x23, 0x00, 0x2C, 0x00, 0x11, 0x3A,
+        0x00, 0x04, 0x20, 0x01, 0x23, 0x00, 0x2C, 0x00, 0x12, 0x3A, 0x00, 0x05,
+        0x20, 0x02, 0x20, 0x01, 0x36, 0x02, 0x00, 0x23, 0x00, 0x41, 0x13, 0x6A,
+        0x20, 0x02, 0x10, 0x02, 0x1A, 0x20, 0x01, 0x10, 0x00, 0x20, 0x00, 0x24,
+        0x01, 0x41, 0x00, 0x05, 0x23, 0x00, 0x41, 0x28, 0x6A, 0x10, 0x03, 0x1A,
+        0x20, 0x00, 0x24, 0x01, 0x41, 0x7F, 0x0B, 0x0B, 0x03, 0x00, 0x01, 0x0B,
+        0x14, 0x00, 0x23, 0x00, 0x41, 0x40, 0x6B, 0x24, 0x01, 0x23, 0x01, 0x41,
+        0x80, 0x80, 0x04, 0x6A, 0x24, 0x02, 0x10, 0x05, 0x0B, 0x0B, 0x3F, 0x01,
+        0x00, 0x23, 0x00, 0x0B, 0x39, 0x62, 0x75, 0x66, 0x20, 0x70, 0x74, 0x72,
+        0x3A, 0x20, 0x25, 0x70, 0x0A, 0x00, 0x31, 0x32, 0x33, 0x34, 0x0A, 0x00,
+        0x62, 0x75, 0x66, 0x3A, 0x20, 0x25, 0x73, 0x00, 0x48, 0x65, 0x6C, 0x6C,
+        0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x21, 0x00, 0x6D, 0x61, 0x6C,
+        0x6C, 0x6F, 0x63, 0x20, 0x62, 0x75, 0x66, 0x20, 0x66, 0x61, 0x69, 0x6C,
+        0x65, 0x64, 0x00, 0x50, 0x04, 0x6E, 0x61, 0x6D, 0x65, 0x01, 0x49, 0x07,
+        0x00, 0x05, 0x5F, 0x66, 0x72, 0x65, 0x65, 0x01, 0x07, 0x5F, 0x6D, 0x61,
+        0x6C, 0x6C, 0x6F, 0x63, 0x02, 0x07, 0x5F, 0x70, 0x72, 0x69, 0x6E, 0x74,
+        0x66, 0x03, 0x05, 0x5F, 0x70, 0x75, 0x74, 0x73, 0x04, 0x05, 0x5F, 0x6D,
+        0x61, 0x69, 0x6E, 0x05, 0x0B, 0x72, 0x75, 0x6E, 0x50, 0x6F, 0x73, 0x74,
+        0x53, 0x65, 0x74, 0x73, 0x06, 0x12, 0x5F, 0x5F, 0x70, 0x6F, 0x73, 0x74,
+        0x5F, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x69, 0x61, 0x74, 0x65,
+        0x00, 0x20, 0x10, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x4D, 0x61, 0x70,
+        0x70, 0x69, 0x6E, 0x67, 0x55, 0x52, 0x4C, 0x0E, 0x61, 0x2E, 0x6F, 0x75,
+        0x74, 0x2E, 0x77, 0x61, 0x73, 0x6D, 0x2E, 0x6D, 0x61, 0x70 };
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/include/bh_memory.h 
b/scriptsrcs/wamr/core/iwasm/runtime/include/bh_memory.h
new file mode 100755
index 0000000..352137a
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/include/bh_memory.h
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_MEMORY_H
+#define _BH_MEMORY_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BH_KB (1024)
+#define BH_MB ((BH_KB)*1024)
+#define BH_GB ((BH_MB)*1024)
+
+/**
+ * Initialize memory allocator with a pool, the bh_malloc/bh_free function
+ * will malloc/free memory from the pool
+ *
+ * @param mem the pool buffer
+ * @param bytes the size bytes of the buffer
+ *
+ * @return 0 if success, -1 otherwise
+ */
+int bh_memory_init_with_pool(void *mem, unsigned int bytes);
+
+/**
+ * Initialize memory allocator with memory allocator, the bh_malloc/bh_free
+ * function will malloc/free memory with the allocator passed
+ *
+ * @param malloc_func the malloc function
+ * @param free_func the free function
+ *
+ * @return 0 if success, -1 otherwise
+ */
+int bh_memory_init_with_allocator(void *malloc_func, void *free_func);
+
+/**
+ * Destroy memory
+ */
+void bh_memory_destroy();
+
+/**
+ * Get the pool size of memory, if memory is initialized with allocator,
+ * return 1GB by default.
+ */
+int bh_memory_pool_size();
+
+#if BEIHAI_ENABLE_MEMORY_PROFILING == 0
+
+/**
+ * This function allocates a memory chunk from system
+ *
+ * @param size bytes need allocate
+ *
+ * @return the pointer to memory allocated
+ */
+void* bh_malloc(unsigned int size);
+
+/**
+ * This function frees memory chunk
+ *
+ * @param ptr the pointer to memory need free
+ */
+void bh_free(void *ptr);
+
+#else
+
+void* bh_malloc_profile(const char *file, int line, const char *func, unsigned 
int size);
+void bh_free_profile(const char *file, int line, const char *func, void *ptr);
+
+#define bh_malloc(size) bh_malloc_profile(__FILE__, __LINE__, __func__, size)
+#define bh_free(ptr) bh_free_profile(__FILE__, __LINE__, __func__, ptr)
+
+/**
+ * Print current memory profiling data
+ *
+ * @param file file name of the caller
+ * @param line line of the file of the caller
+ * @param func function name of the caller
+ */
+void memory_profile_print(const char *file, int line, const char *func, int 
alloc);
+
+/**
+ * Summarize memory usage and print it out
+ * Can use awk to analyze the output like below:
+ * awk -F: '{print $2,$4,$6,$8,$9}' OFS="\t" ./out.txt | sort -n -r -k 1
+ */
+void memory_usage_summarize();
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _BH_MEMORY_H */
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/include/ext_lib_export.h 
b/scriptsrcs/wamr/core/iwasm/runtime/include/ext_lib_export.h
new file mode 100755
index 0000000..a2f111f
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/include/ext_lib_export.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _EXT_LIB_EXPORT_H_
+#define _EXT_LIB_EXPORT_H_
+
+#include "lib_export.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int
+get_ext_lib_export_apis(NativeSymbol **p_ext_lib_apis)
+{
+    *p_ext_lib_apis = extended_native_symbol_defs;
+    return sizeof(extended_native_symbol_defs) / sizeof(NativeSymbol);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _EXT_LIB_EXPORT_H_ */
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/include/lib_export.h 
b/scriptsrcs/wamr/core/iwasm/runtime/include/lib_export.h
new file mode 100755
index 0000000..e5eb6b7
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/include/lib_export.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LIB_EXPORT_H_
+#define _LIB_EXPORT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct NativeSymbol {
+    const char *symbol;
+    void *func_ptr;
+} NativeSymbol;
+
+#define EXPORT_WASM_API(symbol)  {#symbol, symbol}
+#define EXPORT_WASM_API2(symbol) {#symbol, symbol##_wrapper}
+
+/**
+ * Get the exported APIs of base lib
+ *
+ * @param p_base_lib_apis return the exported API array of base lib
+ *
+ * @return the number of the exported API
+ */
+int
+get_base_lib_export_apis(NativeSymbol **p_base_lib_apis);
+
+/**
+ * Get the exported APIs of extended lib, this API isn't provided by WASM VM,
+ * it must be provided by developer to register the extended native APIs,
+ * for example, developer can register his native APIs to 
extended_native_symbol_defs,
+ * array, and include file ext_lib_export.h which implements this API.
+ * And if developer hasn't any native API to register, he can define an empty
+ * extended_native_symbol_defs array, and then include file ext_lib_export.h to
+ * implements this API.
+ *
+ * @param p_base_lib_apis return the exported API array of extend lib
+ *
+ * @return the number of the exported API
+ */
+int
+get_extend_lib_export_apis(NativeSymbol **p_base_lib_apis);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_application.h 
b/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_application.h
new file mode 100755
index 0000000..31813b2
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_application.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2019 Taobao (China) Inc.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_APPLICATION_H
+#define _WASM_APPLICATION_H
+
+//#include "wasm_runtime.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct WASMModuleInstance;
+
+/**
+ * Find the unique main function from a WASM module instance
+ * and execute that function.
+ *
+ * @param module_inst the WASM module instance
+ * @param argc the number of arguments
+ * @param argv the arguments array
+ *
+ * @return true if the main function is called, false otherwise and exception 
will be thrown,
+ *   the caller can call wasm_runtime_get_exception to get exception info.
+ */
+bool
+wasm_application_execute_main(struct WASMModuleInstance *module_inst,
+                              int argc, char *argv[]);
+
+/**
+ * Find the specified function in argv[0] from a WASM module instance
+ * and execute that function.
+ *
+ * @param module_inst the WASM module instance
+ * @param name the name of the function to execute
+ * @param argc the number of arguments
+ * @param argv the arguments array
+ *
+ * @return true if the specified function is called, false otherwise and 
exception will be thrown,
+ *   the caller can call wasm_runtime_get_exception to get exception info.
+ */
+bool
+wasm_application_execute_func(struct WASMModuleInstance *module_inst,
+                              char *name, int argc, char *argv[]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _WASM_APPLICATION_H */
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_dlfcn.h 
b/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_dlfcn.h
new file mode 100755
index 0000000..ce45de2
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_dlfcn.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_DLFCN_H
+#define _WASM_DLFCN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void *
+wasm_dlsym(void *handle, const char *symbol);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _WASM_DLFCN_H */
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_export.h 
b/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_export.h
new file mode 100755
index 0000000..e6c9df5
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_export.h
@@ -0,0 +1,430 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_EXPORT_H
+#define _WASM_EXPORT_H
+
+#include <inttypes.h>
+#include <stdbool.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Uninstantiated WASM module loaded from WASM binary file */
+struct WASMModule;
+typedef struct WASMModule *wasm_module_t;
+
+/* Instantiated WASM module */
+struct WASMModuleInstance;
+typedef struct WASMModuleInstance *wasm_module_inst_t;
+
+/* Function instance */
+struct WASMFunctionInstance;
+typedef struct WASMFunctionInstance *wasm_function_inst_t;
+
+/* WASM section */
+typedef struct wasm_section {
+    struct wasm_section *next;
+    /* section type */
+    int section_type;
+    /* section body, not include type and size */
+    uint8_t *section_body;
+    /* section body size */
+    uint32_t section_body_size;
+} wasm_section_t, *wasm_section_list_t;
+
+/* Execution environment, e.g. stack info */
+typedef struct WASMExecEnv {
+    uint8_t *stack;
+    uint32_t stack_size;
+} *wasm_exec_env_t;
+
+/* Package Type */
+typedef enum {
+    Wasm_Module_Bytecode = 0,
+    Wasm_Module_AoT,
+    Package_Type_Unknown = 0xFFFF
+} package_type_t;
+
+/**
+ * Initialize the WASM runtime environment.
+ *
+ * @return true if success, false otherwise
+ */
+bool
+wasm_runtime_init();
+
+/**
+ * Destroy the WASM runtime environment.
+ */
+void
+wasm_runtime_destroy();
+
+/**
+ * Get the package type of a buffer.
+ *
+ * @param buf the package buffer
+ * @param size the package buffer size
+ *
+ * @return the package type, return Package_Type_Unknown if the type is unknown
+ */
+package_type_t
+get_package_type(const uint8_t *buf, uint32_t size);
+
+/**
+ * Load a WASM module from a specified byte buffer.
+ *
+ * @param buf the byte buffer which contains the WASM binary data
+ * @param size the size of the buffer
+ * @param error_buf output of the exception info
+ * @param error_buf_size the size of the exception string
+ *
+ * @return return WASM module loaded, NULL if failed
+ */
+wasm_module_t
+wasm_runtime_load(const uint8_t *buf, uint32_t size,
+                  char *error_buf, uint32_t error_buf_size);
+
+/**
+ * Load a WASM module from a specified WASM section list.
+ *
+ * @param section_list the section list which contains each section data
+ * @param error_buf output of the exception info
+ * @param error_buf_size the size of the exception string
+ *
+ * @return return WASM module loaded, NULL if failed
+ */
+wasm_module_t
+wasm_runtime_load_from_sections(wasm_section_list_t section_list,
+                                char *error_buf, uint32_t error_buf_size);
+
+/**
+ * Unload a WASM module.
+ *
+ * @param module the module to be unloaded
+ */
+void
+wasm_runtime_unload(wasm_module_t module);
+
+/**
+ * Instantiate a WASM module.
+ *
+ * @param module the WASM module to instantiate
+ * @param stack_size the default stack size of the module instance, a stack
+ *        will be created when function wasm_runtime_call_wasm() is called
+ *        to run WASM function and the exec_env argument passed to
+ *        wasm_runtime_call_wasm() is NULL. That means this parameter is
+ *        ignored if exec_env is not NULL.
+ * @param heap_size the default heap size of the module instance, a heap will
+ *        be created besides the app memory space. Both wasm app and native
+ *        function can allocate memory from the heap. If heap_size is 0, the
+ *        default heap size will be used.
+ * @param error_buf buffer to output the error info if failed
+ * @param error_buf_size the size of the error buffer
+ *
+ * @return return the instantiated WASM module instance, NULL if failed
+ */
+wasm_module_inst_t
+wasm_runtime_instantiate(const wasm_module_t module,
+                         uint32_t stack_size, uint32_t heap_size,
+                         char *error_buf, uint32_t error_buf_size);
+
+/**
+ * Deinstantiate a WASM module instance, destroy the resources.
+ *
+ * @param module_inst the WASM module instance to destroy
+ */
+void
+wasm_runtime_deinstantiate(wasm_module_inst_t module_inst);
+
+#if WASM_ENABLE_EXT_MEMORY_SPACE != 0
+bool
+wasm_runtime_set_ext_memory(wasm_module_inst_t module_inst,
+                            uint8_t *ext_mem_data, uint32_t ext_mem_size,
+                            char *error_buf, uint32_t error_buf_size);
+#endif
+
+/**
+ * Load WASM module instance from AOT file.
+ *
+ * @param aot_file the AOT file of a WASM module
+ * @param aot_file_size the AOT file size
+ * @param heap_size the default heap size of the module instance, a heap will
+ *        be created besides the app memory space. Both wasm app and native
+ *        function can allocate memory from the heap. If heap_size is 0, the
+ *        default heap size will be used.
+ * @param error_buf buffer to output the error info if failed
+ * @param error_buf_size the size of the error buffer
+ *
+ * @return the instantiated WASM module instance, NULL if failed
+ */
+wasm_module_inst_t
+wasm_runtime_load_aot(uint8_t *aot_file, uint32_t aot_file_size,
+                      uint32_t heap_size,
+                      char *error_buf, uint32_t error_buf_size);
+
+/**
+ * Lookup an exported function in the WASM module instance.
+ *
+ * @param module_inst the module instance
+ * @param name the name of the function
+ * @param signature the signature of the function, use "i32"/"i64"/"f32"/"f64"
+ *        to represent the type of i32/i64/f32/f64, e.g. "(i32i64)" "(i32)f32"
+ *
+ * @return the function instance found, if the module instance is loaded from
+ *         the AOT file, the return value is the function pointer
+ */
+wasm_function_inst_t
+wasm_runtime_lookup_function(const wasm_module_inst_t module_inst,
+                             const char *name, const char *signature);
+
+/**
+ * Create execution environment.
+ *
+ * @param stack_size the stack size to execute a WASM function
+ *
+ * @return the execution environment
+ */
+wasm_exec_env_t
+wasm_runtime_create_exec_env(uint32_t stack_size);
+
+/**
+ * Destroy the execution environment.
+ *
+ * @param env the execution environment to destroy
+ */
+void
+wasm_runtime_destory_exec_env(wasm_exec_env_t env);
+
+/**
+ * Call the given WASM function of a WASM module instance with
+ * arguments (bytecode and AoT).
+ *
+ * @param module_inst the WASM module instance which the function belongs to
+ * @param exec_env the execution environment to call the function. If the 
module
+ *        instance is created by AoT mode, it is ignored and just set it to 
NULL.
+ *        If the module instance is created by bytecode mode and it is NULL,
+ *        a temporary env object will be created
+ * @param function the function to be called
+ * @param argc the number of arguments
+ * @param argv the arguments.  If the function method has return value,
+ *   the first (or first two in case 64-bit return value) element of
+ *   argv stores the return value of the called WASM function after this
+ *   function returns.
+ *
+ * @return true if success, false otherwise and exception will be thrown,
+ *   the caller can call wasm_runtime_get_exception to get exception info.
+ */
+bool
+wasm_runtime_call_wasm(wasm_module_inst_t module_inst,
+                       wasm_exec_env_t exec_env,
+                       wasm_function_inst_t function,
+                       uint32_t argc, uint32_t argv[]);
+
+/**
+ * Get exception info of the WASM module instance.
+ *
+ * @param module_inst the WASM module instance
+ *
+ * @return the exception string
+ */
+const char*
+wasm_runtime_get_exception(wasm_module_inst_t module_inst);
+
+/**
+ * Clear exception info of the WASM module instance.
+ *
+ * @param module_inst the WASM module instance
+ */
+void
+wasm_runtime_clear_exception(wasm_module_inst_t module_inst);
+
+/**
+ * Attach the current native thread to a WASM module instance.
+ * A native thread cannot be attached simultaneously to two WASM module
+ * instances. The WASM module instance will be attached to the native
+ * thread which it is instantiated in by default.
+ *
+ * @param module_inst the WASM module instance to attach
+ * @param thread_data the thread data that current native thread requires
+ *        the WASM module instance to store
+ *
+ * @return true if SUCCESS, false otherwise
+ */
+bool
+wasm_runtime_attach_current_thread(wasm_module_inst_t module_inst,
+                                   void *thread_data);
+
+/**
+ * Detach the current native thread from a WASM module instance.
+ *
+ * @param module_inst the WASM module instance to detach
+ */
+void
+wasm_runtime_detach_current_thread(wasm_module_inst_t module_inst);
+
+/**
+ * Get the thread data that the current native thread requires the WASM
+ * module instance to store when attaching.
+ *
+ * @return the thread data stored when attaching
+ */
+void*
+wasm_runtime_get_current_thread_data();
+
+/**
+ * Get current WASM module instance of the current native thread
+ *
+ * @return current WASM module instance of the current native thread, NULL
+ *         if not found
+ */
+wasm_module_inst_t
+wasm_runtime_get_current_module_inst();
+
+/**
+ * Allocate memory from the heap of WASM module instance
+ *
+ * @param module_inst the WASM module instance which contains heap
+ * @param size the size bytes to allocate
+ *
+ * @return the allocated memory address, which is a relative offset to the
+ *         base address of the module instance's memory space, the value range
+ *         is (-heap_size, 0). Note that it is not an absolute address.
+ *         Return non-zero if success, zero if failed.
+ */
+int32_t
+wasm_runtime_module_malloc(wasm_module_inst_t module_inst, uint32_t size);
+
+/**
+ * Free memory to the heap of WASM module instance
+ *
+ * @param module_inst the WASM module instance which contains heap
+ * @param ptr the pointer to free
+ */
+void
+wasm_runtime_module_free(wasm_module_inst_t module_inst, int32_t ptr);
+
+/**
+ * Allocate memory from the heap of WASM module instance and initialize
+ * the memory with src
+ *
+ * @param module_inst the WASM module instance which contains heap
+ * @param src the source data to copy
+ * @param size the size of the source data
+ *
+ * @return the allocated memory address, which is a relative offset to the
+ *         base address of the module instance's memory space, the value range
+ *         is (-heap_size, 0). Note that it is not an absolute address.
+ *         Return non-zero if success, zero if failed.
+ */
+int32_t
+wasm_runtime_module_dup_data(wasm_module_inst_t module_inst,
+                             const char *src, uint32_t size);
+
+/**
+ * Validate the app address, check whether it belongs to WASM module
+ * instance's address space, or in its heap space or memory space.
+ *
+ * @param module_inst the WASM module instance
+ * @param app_offset the app address to validate, which is a relative address
+ * @param size the size bytes of the app address
+ *
+ * @return true if success, false otherwise. If failed, an exception will
+ *         be thrown.
+ */
+bool
+wasm_runtime_validate_app_addr(wasm_module_inst_t module_inst,
+                               int32_t app_offset, uint32_t size);
+
+/**
+ * Validate the native address, check whether it belongs to WASM module
+ * instance's address space, or in its heap space or memory space.
+ *
+ * @param module_inst the WASM module instance
+ * @param native_ptr the native address to validate, which is an absolute
+ *        address
+ * @param size the size bytes of the app address
+ *
+ * @return true if success, false otherwise. If failed, an exception will
+ *         be thrown.
+ */
+bool
+wasm_runtime_validate_native_addr(wasm_module_inst_t module_inst,
+                                  void *native_ptr, uint32_t size);
+
+/**
+ * Convert app address(relative address) to native address(absolute address)
+ *
+ * @param module_inst the WASM module instance
+ * @param app_offset the app adress
+ *
+ * @return the native address converted
+ */
+void *
+wasm_runtime_addr_app_to_native(wasm_module_inst_t module_inst,
+                                int32_t app_offset);
+
+/**
+ * Convert native address(absolute address) to app address(relative address)
+ *
+ * @param module_inst the WASM module instance
+ * @param native_ptr the native address
+ *
+ * @return the app address converted
+ */
+int32_t
+wasm_runtime_addr_native_to_app(wasm_module_inst_t module_inst,
+                                void *native_ptr);
+
+/**
+ * Get the app address range (relative address) that a app address belongs to
+ *
+ * @param module_inst the WASM module instance
+ * @param app_offset the app address to retrieve
+ * @param p_app_start_offset buffer to output the app start offset if not NULL
+ * @param p_app_end_offset buffer to output the app end offset if not NULL
+ *
+ * @return true if success, false otherwise.
+ */
+bool
+wasm_runtime_get_app_addr_range(wasm_module_inst_t module_inst,
+                                int32_t app_offset,
+                                int32_t *p_app_start_offset,
+                                int32_t *p_app_end_offset);
+
+/**
+ * Get the native address range (absolute address) that a native address 
belongs to
+ *
+ * @param module_inst the WASM module instance
+ * @param native_ptr the native address to retrieve
+ * @param p_native_start_addr buffer to output the native start address if not 
NULL
+ * @param p_native_end_addr buffer to output the native end address if not NULL
+ *
+ * @return true if success, false otherwise.
+ */
+bool
+wasm_runtime_get_native_addr_range(wasm_module_inst_t module_inst,
+                                   uint8_t *native_ptr,
+                                   uint8_t **p_native_start_addr,
+                                   uint8_t **p_native_end_addr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _WASM_EXPORT_H */
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_hashmap.h 
b/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_hashmap.h
new file mode 100755
index 0000000..2296b1c
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_hashmap.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WASM_HASHMAP_H
+#define WASM_HASHMAP_H
+
+#include "bh_platform.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Maximum initial size of hash map */
+#define HASH_MAP_MAX_SIZE 65536
+
+struct HashMap;
+typedef struct HashMap HashMap;
+
+/* Hash function: to get the hash value of key. */
+typedef uint32 (*HashFunc)(const void *key);
+
+/* Key equal function: to check whether two keys are equal. */
+typedef bool (*KeyEqualFunc)(void *key1, void *key2);
+
+/* Key destroy function: to destroy the key, auto called
+   when an hash element is removed. */
+typedef void (*KeyDestroyFunc)(void *key);
+
+/* Value destroy function: to destroy the value, auto called
+   when an hash element is removed. */
+typedef void (*ValueDestroyFunc)(void *key);
+
+/**
+ * Create a hash map.
+ *
+ * @param size: the initial size of the hash map
+ * @param use_lock whether to lock the hash map when operating on it
+ * @param hash_func hash function of the key, must be specified
+ * @param key_equal_func key equal function, check whether two keys
+ *                       are equal, must be specified
+ * @param key_destroy_func key destroy function, called when an hash element
+ *                         is removed if it is not NULL
+ * @param value_destroy_func value destroy function, called when an hash
+ *                           element is removed if it is not NULL
+ *
+ * @return the hash map created, NULL if failed
+ */
+HashMap*
+wasm_hash_map_create(uint32 size, bool use_lock,
+                     HashFunc hash_func,
+                     KeyEqualFunc key_equal_func,
+                     KeyDestroyFunc key_destroy_func,
+                     ValueDestroyFunc value_destroy_func);
+
+/**
+ * Insert an element to the hash map
+ *
+ * @param map the hash map to insert element
+ * @key the key of the element
+ * @value the value of the element
+ *
+ * @return true if success, false otherwise
+ * Note: fail if key is NULL or duplicated key exists in the hash map,
+ */
+bool
+wasm_hash_map_insert(HashMap *map, void *key, void *value);
+
+/**
+ * Find an element in the hash map
+ *
+ * @param map the hash map to find element
+ * @key the key of the element
+ *
+ * @return the value of the found element if success, NULL otherwise
+ */
+void*
+wasm_hash_map_find(HashMap *map, void *key);
+
+/**
+ * Update an element in the hash map with new value
+ *
+ * @param map the hash map to update element
+ * @key the key of the element
+ * @value the new value of the element
+ * @p_old_value if not NULL, copies the old value to it
+ *
+ * @return true if success, false otherwise
+ * Note: the old value won't be destroyed by value destory function,
+ *       it will be copied to p_old_value for user to process.
+ */
+bool
+wasm_hash_map_update(HashMap *map, void *key, void *value,
+                     void **p_old_value);
+
+/**
+ * Remove an element from the hash map
+ *
+ * @param map the hash map to remove element
+ * @key the key of the element
+ * @p_old_key if not NULL, copies the old key to it
+ * @p_old_value if not NULL, copies the old value to it
+ *
+ * @return true if success, false otherwise
+ * Note: the old key and old value won't be destroyed by key destroy
+ *       function and value destroy function, they will be copied to
+ *       p_old_key and p_old_value for user to process.
+ */
+bool
+wasm_hash_map_remove(HashMap *map, void *key,
+                     void **p_old_key, void **p_old_value);
+
+/**
+ * Destroy the hashmap
+ *
+ * @param map the hash map to destroy
+ *
+ * @return true if success, false otherwise
+ * Note: the key destroy function and value destroy function will be
+ *       called to destroy each element's key and value if they are
+ *       not NULL.
+ */
+bool
+wasm_hash_map_destroy(HashMap *map);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* endof WASM_HASHMAP_H */
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_log.h 
b/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_log.h
new file mode 100755
index 0000000..cba03b0
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_log.h
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @brief This log system supports wrapping multiple outputs into one
+ * log message.  This is useful for outputting variable-length logs
+ * without additional memory overhead (the buffer for concatenating
+ * the message), e.g. exception stack trace, which cannot be printed
+ * by a single log calling without the help of an additional buffer.
+ * Avoiding additional memory buffer is useful for resource-constraint
+ * systems.  It can minimize the impact of log system on applications
+ * and logs can be printed even when no enough memory is available.
+ * Functions with prefix "_" are private functions.  Only macros that
+ * are not start with "_" are exposed and can be used.
+ */
+
+#ifndef _WASM_LOG_H
+#define _WASM_LOG_H
+
+#include "bh_platform.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * The following functions are the primitive operations of this log system.
+ * A normal usage of the log system is to call wasm_log_begin and then call
+ * wasm_log_printf or wasm_log_vprintf one or multiple times and then call
+ * wasm_log_end to wrap (mark) the previous outputs into one log message.
+ * The wasm_log and macros LOG_ERROR etc. can be used to output log messages
+ * by one log calling.
+ */
+int  _wasm_log_init (void);
+void _wasm_log_set_verbose_level (int level);
+bool _wasm_log_begin (int level);
+void _wasm_log_printf (const char *fmt, ...);
+void _wasm_log_vprintf (const char *fmt, va_list ap);
+void _wasm_log_end (void);
+void _wasm_log (int level, const char *file, int line,
+                const char *fmt, ...);
+
+#if WASM_ENABLE_LOG != 0
+# define wasm_log_init()               _wasm_log_init ()
+# define wasm_log_set_verbose_level(l) _wasm_log_set_verbose_level (l)
+# define wasm_log_begin(l)             _wasm_log_begin (l)
+# define wasm_log_printf(...)          _wasm_log_printf (__VA_ARGS__)
+# define wasm_log_vprintf(...)         _wasm_log_vprintf (__VA_ARGS__)
+# define wasm_log_end()                _wasm_log_end ()
+# define wasm_log(...)                 _wasm_log (__VA_ARGS__)
+#else  /* WASM_ENABLE_LOG != 0 */
+# define wasm_log_init()               0
+# define wasm_log_set_verbose_level(l) (void)0
+# define wasm_log_begin()              false
+# define wasm_log_printf(...)          (void)0
+# define wasm_log_vprintf(...)         (void)0
+# define wasm_log_end()                (void)0
+# define wasm_log(...)                 (void)0
+#endif  /* WASM_ENABLE_LOG != 0 */
+
+#define LOG_ERROR(...)          wasm_log (0, NULL, 0, __VA_ARGS__)
+#define LOG_WARNING(...)        wasm_log (1, NULL, 0, __VA_ARGS__)
+#define LOG_VERBOSE(...)        wasm_log (2, NULL, 0, __VA_ARGS__)
+
+#if defined(WASM_DEBUG)
+# define LOG_DEBUG(...)         _wasm_log (1, __FILE__, __LINE__, __VA_ARGS__)
+#else  /* defined(WASM_DEBUG) */
+# define LOG_DEBUG(...)         (void)0
+#endif  /* defined(WASM_DEBUG) */
+
+#define LOG_PROFILE_HEAP_GC(heap, size)                         \
+  LOG_VERBOSE("PROF.HEAP.GC: HEAP=%08X SIZE=%d", heap, size)
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif  /* _WASM_LOG_H */
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_vector.h 
b/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_vector.h
new file mode 100755
index 0000000..e11832e
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/include/wasm_vector.h
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_VECTOR_H
+#define _WASM_VECTOR_H
+
+#include "bh_platform.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DEFAULT_VECTOR_INIT_SIZE 8
+
+typedef struct Vector {
+    /* size of each element */
+    uint32 size_elem;
+    /* max element number */
+    uint32 max_elements;
+    /* current element num */
+    uint32 num_elements;
+    /* vector data allocated */
+    uint8 *data;
+} Vector;
+
+/**
+ * Initialize vector
+ *
+ * @param vector the vector to init
+ * @param init_length the initial length of the vector
+ * @param size_elem size of each element
+ *
+ * @return true if success, false otherwise
+ */
+bool
+wasm_vector_init(Vector *vector, uint32 init_length, uint32 size_elem);
+
+/**
+ * Set element of vector
+ *
+ * @param vector the vector to set
+ * @param index the index of the element to set
+ * @param elem_buf the element buffer which stores the element data
+ *
+ * @return true if success, false otherwise
+ */
+bool
+wasm_vector_set(Vector *vector, uint32 index, const void *elem_buf);
+
+/**
+ * Get element of vector
+ *
+ * @param vector the vector to get
+ * @param index the index of the element to get
+ * @param elem_buf the element buffer to store the element data,
+ *                 whose length must be no less than element size
+ *
+ * @return true if success, false otherwise
+ */
+bool
+wasm_vector_get(const Vector *vector, uint32 index, void *elem_buf);
+
+/**
+ * Insert element of vector
+ *
+ * @param vector the vector to insert
+ * @param index the index of the element to insert
+ * @param elem_buf the element buffer which stores the element data
+ *
+ * @return true if success, false otherwise
+ */
+bool
+wasm_vector_insert(Vector *vector, uint32 index, const void *elem_buf);
+
+/**
+ * Append element to the end of vector
+ *
+ * @param vector the vector to append
+ * @param elem_buf the element buffer which stores the element data
+ *
+ * @return true if success, false otherwise
+ */
+bool
+wasm_vector_append(Vector *vector, const void *elem_buf);
+
+/**
+ * Remove element from vector
+ *
+ * @param vector the vector to remove element
+ * @param index the index of the element to remove
+ * @param old_elem_buf if not NULL, copies the element data to the buffer
+ *
+ * @return true if success, false otherwise
+ */
+bool
+wasm_vector_remove(Vector *vector, uint32 index, void *old_elem_buf);
+
+/**
+ * Return the size of the vector
+ *
+ * @param vector the vector to get size
+ *
+ * @return return the size of the vector
+ */
+uint32
+wasm_vector_size(const Vector *vector);
+
+/**
+ * Destroy the vector
+ *
+ * @param vector the vector to destroy
+ *
+ * @return true if success, false otherwise
+ */
+bool
+wasm_vector_destroy(Vector *vector);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* endof _WASM_VECTOR_H */
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/platform/alios/wasm_native.c 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/alios/wasm_native.c
new file mode 100755
index 0000000..43276fe
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/alios/wasm_native.c
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_native.h"
+
+
+void*
+wasm_platform_native_func_lookup(const char *module_name,
+                                 const char *func_name)
+{
+    return NULL;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/platform/darwin/platform.cmake 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/darwin/platform.cmake
new file mode 100755
index 0000000..ea7f749
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/darwin/platform.cmake
@@ -0,0 +1,25 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+add_definitions (-D__POSIX__ -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=200809L)
+
+set (PLATFORM_LIB_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${PLATFORM_LIB_DIR})
+include_directories(${PLATFORM_LIB_DIR}/../include)
+
+file (GLOB_RECURSE source_all ${PLATFORM_LIB_DIR}/*.c)
+
+set (WASM_PLATFORM_LIB_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/platform/darwin/wasm_native.c 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/darwin/wasm_native.c
new file mode 100755
index 0000000..8feb841
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/darwin/wasm_native.c
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_native.h"
+
+void*
+wasm_platform_native_func_lookup(const char *module_name,
+                                 const char *func_name)
+{
+    return NULL;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wa_thread.h 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wa_thread.h
new file mode 100755
index 0000000..245dc5d
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wa_thread.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file wasm_thread.h
+ * @brief This file contains Beihai platform abstract layer interface for
+ *        thread relative function.
+ */
+
+#ifndef _WA_THREAD_H
+#define _WA_THREAD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "bh_thread.h"
+
+
+#define ws_thread_sys_init vm_thread_sys_init
+
+#define ws_thread_sys_destroy vm_thread_sys_destroy
+
+#define ws_self_thread vm_self_thread
+
+#define ws_tls_put(ptr) vm_tls_put(0, ptr)
+
+#define ws_tls_get() vm_tls_get(0)
+
+static inline int
+ws_mutex_init(korp_mutex *mutex, bool is_recursive)
+{
+    if (is_recursive)
+        return vm_recursive_mutex_init(mutex);
+    else
+        return vm_mutex_init(mutex);
+}
+
+#define ws_mutex_destroy vm_mutex_destroy
+
+#define ws_mutex_lock vm_mutex_lock
+
+#define ws_mutex_unlock vm_mutex_unlock
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _WA_THREAD_H */
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_assert.h 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_assert.h
new file mode 100755
index 0000000..687c8e5
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_assert.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_ASSERT_H
+#define _WASM_ASSERT_H
+
+#include "bh_assert.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define wasm_assert bh_assert
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _WASM_ASSERT_H */
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_config.h 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_config.h
new file mode 100755
index 0000000..06aa5e1
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_config.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_CONFIG_H
+#define _WASM_CONFIG_H
+
+#include "config.h"
+
+#endif /* end of _WASM_CONFIG_H */
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_memory.h 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_memory.h
new file mode 100755
index 0000000..549ba47
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_memory.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_MEMORY_H
+#define _WASM_MEMORY_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "bh_memory.h"
+
+#define wasm_malloc bh_malloc
+#define wasm_free bh_free
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _WASM_MEMORY_H */
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_platform_log.h 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_platform_log.h
new file mode 100755
index 0000000..e74de3f
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/include/wasm_platform_log.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_PLATFORM_LOG
+#define _WASM_PLATFORM_LOG
+
+#include "bh_platform.h"
+
+#define wasm_printf bh_printf
+
+#define wasm_vprintf vprintf
+
+#endif /* _WASM_PLATFORM_LOG */
diff --git 
a/scriptsrcs/wamr/core/iwasm/runtime/platform/linux-sgx/platform.cmake 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/linux-sgx/platform.cmake
new file mode 100755
index 0000000..c01fd0e
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/linux-sgx/platform.cmake
@@ -0,0 +1,25 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+add_definitions (-D__POSIX__ -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199309L)
+
+set (PLATFORM_LIB_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${PLATFORM_LIB_DIR})
+include_directories(${PLATFORM_LIB_DIR}/../include)
+
+file (GLOB_RECURSE source_all ${PLATFORM_LIB_DIR}/*.c)
+
+set (WASM_PLATFORM_LIB_SOURCE ${source_all})
+
diff --git 
a/scriptsrcs/wamr/core/iwasm/runtime/platform/linux-sgx/wasm_native.c 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/linux-sgx/wasm_native.c
new file mode 100755
index 0000000..59b081b
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/linux-sgx/wasm_native.c
@@ -0,0 +1,332 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE /* for O_DIRECT */
+#endif
+
+#include "wasm_native.h"
+#include "wasm_runtime.h"
+#include "wasm_log.h"
+#include "wasm_memory.h"
+#include "wasm_platform_log.h"
+
+#include <sys/ioctl.h>
+#include <sys/uio.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <pwd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+
+#define get_module_inst() \
+    wasm_runtime_get_current_module_inst()
+
+#define validate_app_addr(offset, size) \
+    wasm_runtime_validate_app_addr(module_inst, offset, size)
+
+#define addr_app_to_native(offset) \
+    wasm_runtime_addr_app_to_native(module_inst, offset)
+
+#define addr_native_to_app(ptr) \
+    wasm_runtime_addr_native_to_app(module_inst, ptr)
+
+#define module_malloc(size) \
+    wasm_runtime_module_malloc(module_inst, size)
+
+#define module_free(offset) \
+    wasm_runtime_module_free(module_inst, offset)
+
+
+static int32
+__syscall0_wrapper(int32 arg0)
+{
+    switch (arg0) {
+        case 199: /* getuid */
+            /* TODO */
+        default:
+            bh_printf("##_syscall0 called, syscall id: %d\n", arg0);
+    }
+    return 0;
+}
+
+static int32
+__syscall1_wrapper(int32 arg0, int32 arg1)
+{
+    switch (arg0) {
+        case 6: /* close */
+            /* TODO */
+        default:
+            bh_printf("##_syscall1 called, syscall id: %d\n", arg0);
+    }
+    return 0;
+}
+
+static int32
+__syscall2_wrapper(int32 arg0, int32 arg1, int32 arg2)
+{
+    switch (arg0) {
+        case 183: /* getcwd */
+            /* TODO */
+        default:
+            bh_printf("##_syscall2 called, syscall id: %d\n", arg0);
+    }
+    return 0;
+}
+
+static int32
+__syscall3_wrapper(int32 arg0, int32 arg1, int32 arg2, int32 arg3)
+{
+    WASMModuleInstance *module_inst = get_module_inst();
+
+    switch (arg0) {
+        case 146: /* writev */
+        {
+            /* Implement syscall 54 and syscall 146 to support printf()
+               for non SIDE_MODULE=1 mode */
+            struct iovec_app {
+                int32 iov_base_offset;
+                uint32 iov_len;
+            } *vec;
+            int32 vec_offset = arg2, str_offset;
+            uint32 iov_count = arg3, i;
+            int32 count = 0;
+            char *iov_base, *str;
+
+            if (!validate_app_addr(vec_offset, sizeof(struct iovec_app)))
+                return 0;
+
+            vec = (struct iovec_app *)addr_app_to_native(vec_offset);
+            for (i = 0; i < iov_count; i++, vec++) {
+                if (vec->iov_len > 0) {
+                    if (!validate_app_addr(vec->iov_base_offset, 1))
+                        return 0;
+                    iov_base = (char*)addr_app_to_native(vec->iov_base_offset);
+
+                    if (!(str_offset = module_malloc(vec->iov_len + 1)))
+                        return 0;
+
+                    str = addr_app_to_native(str_offset);
+
+                    memcpy(str, iov_base, vec->iov_len);
+                    str[vec->iov_len] = '\0';
+                    count += wasm_printf("%s", str);
+
+                    module_free(str_offset);
+                }
+            }
+            return count;
+        }
+        case 145: /* readv */
+        case 3: /* read*/
+        case 5: /* open */
+        case 221: /* fcntl */
+        /* TODO */
+        default:
+            bh_printf("##_syscall3 called, syscall id: %d\n", arg0);
+    }
+    return 0;
+}
+
+static int32
+__syscall4_wrapper(int32 arg0, int32 arg1, int32 arg2,
+                   int32 arg3, int32 arg4)
+{
+    bh_printf("##_syscall4 called, syscall id: %d\n", arg0);
+    return 0;
+}
+
+static int32
+__syscall5_wrapper(int32 arg0, int32 arg1, int32 arg2,
+                   int32 arg3, int32 arg4, int32 arg5)
+{
+    switch (arg0) {
+        case 140: /* llseek */
+            /* TODO */
+        default:
+            bh_printf("##_syscall5 called, args[0]: %d\n", arg0);
+    }
+    return 0;
+}
+
+#define GET_EMCC_SYSCALL_ARGS()                                     \
+  WASMModuleInstance *module_inst = get_module_inst();              \
+  int32 *args;                                                      \
+  if (!validate_app_addr(args_off, 1))                              \
+    return 0;                                                       \
+  args = addr_app_to_native(args_off)                               \
+
+#define EMCC_SYSCALL_WRAPPER0(id)                                   \
+  static int32 ___syscall##id##_wrapper(int32 _id) {                \
+    return __syscall0_wrapper(id);                                  \
+  }
+
+#define EMCC_SYSCALL_WRAPPER1(id)                                   \
+  static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\
+    GET_EMCC_SYSCALL_ARGS();                                        \
+    return __syscall1_wrapper(id, args[0]);                         \
+  }
+
+#define EMCC_SYSCALL_WRAPPER2(id)                                   \
+  static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\
+    GET_EMCC_SYSCALL_ARGS();                                        \
+    return __syscall2_wrapper(id, args[0], args[1]);                \
+  }
+
+#define EMCC_SYSCALL_WRAPPER3(id)                                   \
+  static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\
+    GET_EMCC_SYSCALL_ARGS();                                        \
+    return __syscall3_wrapper(id, args[0], args[1], args[2]);       \
+  }
+
+#define EMCC_SYSCALL_WRAPPER4(id)                                   \
+  static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\
+    GET_EMCC_SYSCALL_ARGS();                                        \
+    return __syscall4_wrapper(id, args[0], args[1], args[2], args[3]);\
+  }
+
+#define EMCC_SYSCALL_WRAPPER5(id)                                   \
+  static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\
+    GET_EMCC_SYSCALL_ARGS();                                        \
+    return __syscall5_wrapper(id, args[0], args[1], args[2],        \
+                              args[3], args[4]);                    \
+  }
+
+EMCC_SYSCALL_WRAPPER0(199)
+
+EMCC_SYSCALL_WRAPPER1(6)
+
+EMCC_SYSCALL_WRAPPER2(183)
+
+EMCC_SYSCALL_WRAPPER3(3)
+EMCC_SYSCALL_WRAPPER3(5)
+EMCC_SYSCALL_WRAPPER3(54)
+EMCC_SYSCALL_WRAPPER3(145)
+EMCC_SYSCALL_WRAPPER3(146)
+EMCC_SYSCALL_WRAPPER3(221)
+
+EMCC_SYSCALL_WRAPPER5(140)
+
+static int32
+getTotalMemory_wrapper()
+{
+    WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst();
+    WASMMemoryInstance *memory = module_inst->default_memory;
+    return NumBytesPerPage * memory->cur_page_count;
+}
+
+static int32
+enlargeMemory_wrapper()
+{
+    bool ret;
+    WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst();
+    WASMMemoryInstance *memory = module_inst->default_memory;
+    uint32 DYNAMICTOP_PTR_offset = module_inst->DYNAMICTOP_PTR_offset;
+    uint32 addr_data_offset = *(uint32*)(memory->global_data + 
DYNAMICTOP_PTR_offset);
+    uint32 *DYNAMICTOP_PTR = (uint32*)(memory->memory_data + addr_data_offset);
+    uint32 memory_size_expected = *DYNAMICTOP_PTR;
+    uint32 total_page_count = (memory_size_expected + NumBytesPerPage - 1) / 
NumBytesPerPage;
+
+    if (total_page_count < memory->cur_page_count) {
+        return 1;
+    }
+    else {
+        ret = wasm_runtime_enlarge_memory(module_inst, total_page_count -
+                                          memory->cur_page_count);
+        return ret ? 1 : 0;
+    }
+}
+
+static void
+_abort_wrapper(int32 code)
+{
+    WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst();
+    char buf[32];
+
+    snprintf(buf, sizeof(buf), "env.abort(%i)", code);
+    wasm_runtime_set_exception(module_inst, buf);
+}
+
+static void
+abortOnCannotGrowMemory_wrapper()
+{
+    WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst();
+    wasm_runtime_set_exception(module_inst, "abort on cannot grow memory");
+}
+
+static void
+___setErrNo_wrapper(int32 error_no)
+{
+    errno = error_no;
+}
+
+/* TODO: add function parameter/result types check */
+#define REG_NATIVE_FUNC(module_name, func_name) \
+    {#module_name, #func_name, func_name##_wrapper}
+
+typedef struct WASMNativeFuncDef {
+    const char *module_name;
+    const char *func_name;
+    void *func_ptr;
+} WASMNativeFuncDef;
+
+static WASMNativeFuncDef native_func_defs[] = {
+    REG_NATIVE_FUNC(env, __syscall0),
+    REG_NATIVE_FUNC(env, __syscall1),
+    REG_NATIVE_FUNC(env, __syscall2),
+    REG_NATIVE_FUNC(env, __syscall3),
+    REG_NATIVE_FUNC(env, __syscall4),
+    REG_NATIVE_FUNC(env, __syscall5),
+    REG_NATIVE_FUNC(env, ___syscall3),
+    REG_NATIVE_FUNC(env, ___syscall5),
+    REG_NATIVE_FUNC(env, ___syscall6),
+    REG_NATIVE_FUNC(env, ___syscall54),
+    REG_NATIVE_FUNC(env, ___syscall140),
+    REG_NATIVE_FUNC(env, ___syscall145),
+    REG_NATIVE_FUNC(env, ___syscall146),
+    REG_NATIVE_FUNC(env, ___syscall183),
+    REG_NATIVE_FUNC(env, ___syscall199),
+    REG_NATIVE_FUNC(env, ___syscall221),
+    REG_NATIVE_FUNC(env, _abort),
+    REG_NATIVE_FUNC(env, abortOnCannotGrowMemory),
+    REG_NATIVE_FUNC(env, enlargeMemory),
+    REG_NATIVE_FUNC(env, getTotalMemory),
+    REG_NATIVE_FUNC(env, ___setErrNo),
+};
+
+void*
+wasm_platform_native_func_lookup(const char *module_name,
+                                 const char *func_name)
+{
+    uint32 size = sizeof(native_func_defs) / sizeof(WASMNativeFuncDef);
+    WASMNativeFuncDef *func_def = native_func_defs;
+    WASMNativeFuncDef *func_def_end = func_def + size;
+
+    if (!module_name || !func_name)
+        return NULL;
+
+    while (func_def < func_def_end) {
+        if (!strcmp(func_def->module_name, module_name)
+            && !strcmp(func_def->func_name, func_name))
+            return (void*)(uintptr_t)func_def->func_ptr;
+        func_def++;
+    }
+
+    return NULL;
+}
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/platform/linux/platform.cmake 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/linux/platform.cmake
new file mode 100755
index 0000000..c01fd0e
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/linux/platform.cmake
@@ -0,0 +1,25 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+add_definitions (-D__POSIX__ -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199309L)
+
+set (PLATFORM_LIB_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${PLATFORM_LIB_DIR})
+include_directories(${PLATFORM_LIB_DIR}/../include)
+
+file (GLOB_RECURSE source_all ${PLATFORM_LIB_DIR}/*.c)
+
+set (WASM_PLATFORM_LIB_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/platform/linux/wasm_native.c 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/linux/wasm_native.c
new file mode 100755
index 0000000..c12e85c
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/linux/wasm_native.c
@@ -0,0 +1,346 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE /* for O_DIRECT */
+#endif
+
+#include "wasm_native.h"
+#include "wasm_runtime.h"
+#include "wasm_log.h"
+#include "wasm_memory.h"
+#include "wasm_platform_log.h"
+
+#include <sys/ioctl.h>
+#include <sys/uio.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <pwd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+
+#define get_module_inst() \
+    wasm_runtime_get_current_module_inst()
+
+#define validate_app_addr(offset, size) \
+    wasm_runtime_validate_app_addr(module_inst, offset, size)
+
+#define addr_app_to_native(offset) \
+    wasm_runtime_addr_app_to_native(module_inst, offset)
+
+#define addr_native_to_app(ptr) \
+    wasm_runtime_addr_native_to_app(module_inst, ptr)
+
+#define module_malloc(size) \
+    wasm_runtime_module_malloc(module_inst, size)
+
+#define module_free(offset) \
+    wasm_runtime_module_free(module_inst, offset)
+
+
+static int32
+__syscall0_wrapper(int32 arg0)
+{
+    switch (arg0) {
+        case 199: /* getuid */
+            /* TODO */
+        default:
+            printf("##_syscall0 called, syscall id: %d\n", arg0);
+    }
+    return 0;
+}
+
+static int32
+__syscall1_wrapper(int32 arg0, int32 arg1)
+{
+    switch (arg0) {
+        case 6: /* close */
+            /* TODO */
+        default:
+            printf("##_syscall1 called, syscall id: %d\n", arg0);
+    }
+    return 0;
+}
+
+static int32
+__syscall2_wrapper(int32 arg0, int32 arg1, int32 arg2)
+{
+    switch (arg0) {
+        case 183: /* getcwd */
+            /* TODO */
+        default:
+            printf("##_syscall2 called, syscall id: %d\n", arg0);
+    }
+    return 0;
+}
+
+static int32
+__syscall3_wrapper(int32 arg0, int32 arg1, int32 arg2, int32 arg3)
+{
+    WASMModuleInstance *module_inst = get_module_inst();
+
+    switch (arg0) {
+        case 54: /* ioctl */
+        {
+            /* Implement syscall 54 and syscall 146 to support printf()
+               for non SIDE_MODULE=1 mode */
+            struct winsize *wsz;
+
+            if (!validate_app_addr(arg3, sizeof(struct winsize)))
+                return 0;
+
+            wsz = (struct winsize*)addr_app_to_native(arg3);
+            return syscall(54, arg1, arg2, wsz);
+        }
+
+        case 146: /* writev */
+        {
+            /* Implement syscall 54 and syscall 146 to support printf()
+               for non SIDE_MODULE=1 mode */
+            struct iovec_app {
+                int32 iov_base_offset;
+                uint32 iov_len;
+            } *vec;
+            int32 vec_offset = arg2, str_offset;
+            uint32 iov_count = arg3, i;
+            int32 count = 0;
+            char *iov_base, *str;
+
+            if (!validate_app_addr(vec_offset, sizeof(struct iovec_app)))
+                return 0;
+
+            vec = (struct iovec_app *)addr_app_to_native(vec_offset);
+            for (i = 0; i < iov_count; i++, vec++) {
+                if (vec->iov_len > 0) {
+                    if (!validate_app_addr(vec->iov_base_offset, 1))
+                        return 0;
+                    iov_base = (char*)addr_app_to_native(vec->iov_base_offset);
+
+                    if (!(str_offset = module_malloc(vec->iov_len + 1)))
+                        return 0;
+
+                    str = addr_app_to_native(str_offset);
+
+                    memcpy(str, iov_base, vec->iov_len);
+                    str[vec->iov_len] = '\0';
+                    count += wasm_printf("%s", str);
+
+                    module_free(str_offset);
+                }
+            }
+            return count;
+        }
+        case 145: /* readv */
+        case 3: /* read*/
+        case 5: /* open */
+        case 221: /* fcntl */
+        /* TODO */
+        default:
+        printf("##_syscall3 called, syscall id: %d\n", arg0);
+    }
+    return 0;
+}
+
+static int32
+__syscall4_wrapper(int32 arg0, int32 arg1, int32 arg2,
+                   int32 arg3, int32 arg4)
+{
+    printf("##_syscall4 called, syscall id: %d\n", arg0);
+    return 0;
+}
+
+static int32
+__syscall5_wrapper(int32 arg0, int32 arg1, int32 arg2,
+                   int32 arg3, int32 arg4, int32 arg5)
+{
+    switch (arg0) {
+        case 140: /* llseek */
+            /* TODO */
+        default:
+            printf("##_syscall5 called, args[0]: %d\n", arg0);
+    }
+    return 0;
+}
+
+#define GET_EMCC_SYSCALL_ARGS()                                     \
+  WASMModuleInstance *module_inst = get_module_inst();              \
+  int32 *args;                                                      \
+  if (!validate_app_addr(args_off, 1))                              \
+    return 0;                                                       \
+  args = addr_app_to_native(args_off)                               \
+
+#define EMCC_SYSCALL_WRAPPER0(id)                                   \
+  static int32 ___syscall##id##_wrapper(int32 _id) {                \
+    return __syscall0_wrapper(id);                                  \
+  }
+
+#define EMCC_SYSCALL_WRAPPER1(id)                                   \
+  static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\
+    GET_EMCC_SYSCALL_ARGS();                                        \
+    return __syscall1_wrapper(id, args[0]);                         \
+  }
+
+#define EMCC_SYSCALL_WRAPPER2(id)                                   \
+  static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\
+    GET_EMCC_SYSCALL_ARGS();                                        \
+    return __syscall2_wrapper(id, args[0], args[1]);                \
+  }
+
+#define EMCC_SYSCALL_WRAPPER3(id)                                   \
+  static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\
+    GET_EMCC_SYSCALL_ARGS();                                        \
+    return __syscall3_wrapper(id, args[0], args[1], args[2]);       \
+  }
+
+#define EMCC_SYSCALL_WRAPPER4(id)                                   \
+  static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\
+    GET_EMCC_SYSCALL_ARGS();                                        \
+    return __syscall4_wrapper(id, args[0], args[1], args[2], args[3]);\
+  }
+
+#define EMCC_SYSCALL_WRAPPER5(id)                                   \
+  static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\
+    GET_EMCC_SYSCALL_ARGS();                                        \
+    return __syscall5_wrapper(id, args[0], args[1], args[2],        \
+                              args[3], args[4]);                    \
+  }
+
+EMCC_SYSCALL_WRAPPER0(199)
+
+EMCC_SYSCALL_WRAPPER1(6)
+
+EMCC_SYSCALL_WRAPPER2(183)
+
+EMCC_SYSCALL_WRAPPER3(3)
+EMCC_SYSCALL_WRAPPER3(5)
+EMCC_SYSCALL_WRAPPER3(54)
+EMCC_SYSCALL_WRAPPER3(145)
+EMCC_SYSCALL_WRAPPER3(146)
+EMCC_SYSCALL_WRAPPER3(221)
+
+EMCC_SYSCALL_WRAPPER5(140)
+
+static int32
+getTotalMemory_wrapper()
+{
+    WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst();
+    WASMMemoryInstance *memory = module_inst->default_memory;
+    return NumBytesPerPage * memory->cur_page_count;
+}
+
+static int32
+enlargeMemory_wrapper()
+{
+    bool ret;
+    WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst();
+    WASMMemoryInstance *memory = module_inst->default_memory;
+    uint32 DYNAMICTOP_PTR_offset = module_inst->DYNAMICTOP_PTR_offset;
+    uint32 addr_data_offset = *(uint32*)(memory->global_data + 
DYNAMICTOP_PTR_offset);
+    uint32 *DYNAMICTOP_PTR = (uint32*)(memory->memory_data + addr_data_offset);
+    uint32 memory_size_expected = *DYNAMICTOP_PTR;
+    uint32 total_page_count = (memory_size_expected + NumBytesPerPage - 1) / 
NumBytesPerPage;
+
+    if (total_page_count < memory->cur_page_count) {
+        return 1;
+    }
+    else {
+        ret = wasm_runtime_enlarge_memory(module_inst, total_page_count -
+                                          memory->cur_page_count);
+        return ret ? 1 : 0;
+    }
+}
+
+static void
+_abort_wrapper(int32 code)
+{
+    WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst();
+    char buf[32];
+
+    snprintf(buf, sizeof(buf), "env.abort(%i)", code);
+    wasm_runtime_set_exception(module_inst, buf);
+}
+
+static void
+abortOnCannotGrowMemory_wrapper()
+{
+    WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst();
+    wasm_runtime_set_exception(module_inst, "abort on cannot grow memory");
+}
+
+static void
+___setErrNo_wrapper(int32 error_no)
+{
+    errno = error_no;
+}
+
+/* TODO: add function parameter/result types check */
+#define REG_NATIVE_FUNC(module_name, func_name) \
+    {#module_name, #func_name, func_name##_wrapper}
+
+typedef struct WASMNativeFuncDef {
+    const char *module_name;
+    const char *func_name;
+    void *func_ptr;
+} WASMNativeFuncDef;
+
+static WASMNativeFuncDef native_func_defs[] = {
+    REG_NATIVE_FUNC(env, __syscall0),
+    REG_NATIVE_FUNC(env, __syscall1),
+    REG_NATIVE_FUNC(env, __syscall2),
+    REG_NATIVE_FUNC(env, __syscall3),
+    REG_NATIVE_FUNC(env, __syscall4),
+    REG_NATIVE_FUNC(env, __syscall5),
+    REG_NATIVE_FUNC(env, ___syscall3),
+    REG_NATIVE_FUNC(env, ___syscall5),
+    REG_NATIVE_FUNC(env, ___syscall6),
+    REG_NATIVE_FUNC(env, ___syscall54),
+    REG_NATIVE_FUNC(env, ___syscall140),
+    REG_NATIVE_FUNC(env, ___syscall145),
+    REG_NATIVE_FUNC(env, ___syscall146),
+    REG_NATIVE_FUNC(env, ___syscall183),
+    REG_NATIVE_FUNC(env, ___syscall199),
+    REG_NATIVE_FUNC(env, ___syscall221),
+    REG_NATIVE_FUNC(env, _abort),
+    REG_NATIVE_FUNC(env, abortOnCannotGrowMemory),
+    REG_NATIVE_FUNC(env, enlargeMemory),
+    REG_NATIVE_FUNC(env, getTotalMemory),
+    REG_NATIVE_FUNC(env, ___setErrNo),
+};
+
+void*
+wasm_platform_native_func_lookup(const char *module_name,
+                                 const char *func_name)
+{
+    uint32 size = sizeof(native_func_defs) / sizeof(WASMNativeFuncDef);
+    WASMNativeFuncDef *func_def = native_func_defs;
+    WASMNativeFuncDef *func_def_end = func_def + size;
+
+    if (!module_name || !func_name)
+        return NULL;
+
+    while (func_def < func_def_end) {
+        if (!strcmp(func_def->module_name, module_name)
+            && !strcmp(func_def->func_name, func_name))
+            return (void*)(uintptr_t)func_def->func_ptr;
+        func_def++;
+    }
+
+    return NULL;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/platform/vxworks/platform.cmake 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/vxworks/platform.cmake
new file mode 100755
index 0000000..c01fd0e
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/vxworks/platform.cmake
@@ -0,0 +1,25 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+add_definitions (-D__POSIX__ -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199309L)
+
+set (PLATFORM_LIB_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${PLATFORM_LIB_DIR})
+include_directories(${PLATFORM_LIB_DIR}/../include)
+
+file (GLOB_RECURSE source_all ${PLATFORM_LIB_DIR}/*.c)
+
+set (WASM_PLATFORM_LIB_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/platform/vxworks/wasm_native.c 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/vxworks/wasm_native.c
new file mode 100755
index 0000000..43276fe
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/vxworks/wasm_native.c
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_native.h"
+
+
+void*
+wasm_platform_native_func_lookup(const char *module_name,
+                                 const char *func_name)
+{
+    return NULL;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/platform/zephyr/wasm_native.c 
b/scriptsrcs/wamr/core/iwasm/runtime/platform/zephyr/wasm_native.c
new file mode 100755
index 0000000..43276fe
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/platform/zephyr/wasm_native.c
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_native.h"
+
+
+void*
+wasm_platform_native_func_lookup(const char *module_name,
+                                 const char *func_name)
+{
+    return NULL;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/utils/utils.cmake 
b/scriptsrcs/wamr/core/iwasm/runtime/utils/utils.cmake
new file mode 100755
index 0000000..a636cb4
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/utils/utils.cmake
@@ -0,0 +1,22 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (UTILS_LIB_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${UTILS_LIB_DIR})
+
+file (GLOB_RECURSE source_all ${UTILS_LIB_DIR}/*.c )
+
+set (WASM_UTILS_LIB_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_dlfcn.c 
b/scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_dlfcn.c
new file mode 100755
index 0000000..56439c7
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_dlfcn.c
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+
+
+static bool sort_flag = false;
+
+typedef struct NativeSymbol {
+    const char *symbol;
+    void *func_ptr;
+} NativeSymbol;
+
+static bool
+sort_symbol_ptr(NativeSymbol *ptr, int len)
+{
+    int i, j;
+    NativeSymbol temp;
+
+    for (i = 0; i < len - 1; ++i) {
+        for (j = i + 1; j < len; ++j) {
+            if (strcmp((ptr+i)->symbol, (ptr+j)->symbol) > 0) {
+                temp = ptr[i];
+                ptr[i] = ptr[j];
+                ptr[j] = temp;
+            }
+        }
+    }
+
+    return true;
+}
+
+static void *
+lookup_symbol(NativeSymbol *ptr, int len, const char *symbol)
+{
+    int low = 0, mid, ret;
+    int high = len - 1;
+
+    while (low <= high) {
+        mid = (low + high) / 2;
+        ret = strcmp(symbol, ptr[mid].symbol);
+
+        if (ret == 0)
+            return ptr[mid].func_ptr;
+        else if (ret < 0)
+            high = mid - 1;
+        else
+            low = mid + 1;
+    }
+
+    return NULL;
+}
+
+int
+get_base_lib_export_apis(NativeSymbol **p_base_lib_apis);
+
+int
+get_ext_lib_export_apis(NativeSymbol **p_ext_lib_apis);
+
+static NativeSymbol *base_native_symbol_defs;
+static NativeSymbol *ext_native_symbol_defs;
+static int base_native_symbol_len;
+static int ext_native_symbol_len;
+
+void *
+wasm_dlsym(void *handle, const char *symbol)
+{
+    void *ret;
+
+    if (!sort_flag) {
+        base_native_symbol_len = 
get_base_lib_export_apis(&base_native_symbol_defs);
+        ext_native_symbol_len = 
get_ext_lib_export_apis(&ext_native_symbol_defs);
+
+        if (base_native_symbol_len > 0)
+            sort_symbol_ptr(base_native_symbol_defs, base_native_symbol_len);
+
+        if (ext_native_symbol_len > 0)
+            sort_symbol_ptr(ext_native_symbol_defs, ext_native_symbol_len);
+
+        sort_flag = true;
+    }
+
+    if (!symbol)
+        return NULL;
+
+    if ((ret = lookup_symbol(base_native_symbol_defs, base_native_symbol_len,
+                             symbol))
+        || (ret = lookup_symbol(ext_native_symbol_defs, ext_native_symbol_len,
+                                symbol)))
+        return ret;
+
+    return NULL;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_hashmap.c 
b/scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_hashmap.c
new file mode 100755
index 0000000..f0a24a4
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_hashmap.c
@@ -0,0 +1,301 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_hashmap.h"
+#include "wasm_log.h"
+#include "wasm_thread.h"
+#include "wasm_memory.h"
+
+
+typedef struct HashMapElem {
+    void *key;
+    void *value;
+    struct HashMapElem *next;
+} HashMapElem;
+
+struct HashMap {
+    /* size of element array */
+    uint32 size;
+    /* lock for elements */
+    korp_mutex *lock;
+    /* hash function of key */
+    HashFunc hash_func;
+    /* key equal function */
+    KeyEqualFunc key_equal_func;
+    KeyDestroyFunc key_destroy_func;
+    ValueDestroyFunc value_destroy_func;
+    HashMapElem *elements[1];
+};
+
+HashMap*
+wasm_hash_map_create(uint32 size, bool use_lock,
+                     HashFunc hash_func,
+                     KeyEqualFunc key_equal_func,
+                     KeyDestroyFunc key_destroy_func,
+                     ValueDestroyFunc value_destroy_func)
+{
+    HashMap *map;
+    uint32 total_size;
+
+    if (size > HASH_MAP_MAX_SIZE) {
+        LOG_ERROR("HashMap create failed: size is too large.\n");
+        return NULL;
+    }
+
+    if (!hash_func || !key_equal_func) {
+        LOG_ERROR("HashMap create failed: hash function or key equal function "
+                " is NULL.\n");
+        return NULL;
+    }
+
+    total_size = offsetof(HashMap, elements) +
+                 sizeof(HashMapElem) * size +
+                 (use_lock ? sizeof(korp_mutex) : 0);
+
+    if (!(map = wasm_malloc(total_size))) {
+        LOG_ERROR("HashMap create failed: alloc memory failed.\n");
+        return NULL;
+    }
+
+    memset(map, 0, total_size);
+
+    if (use_lock) {
+        map->lock = (korp_mutex*)
+                    ((uint8*)map + offsetof(HashMap, elements) + 
sizeof(HashMapElem) * size);
+        if (ws_mutex_init(map->lock, false)) {
+            LOG_ERROR("HashMap create failed: init map lock failed.\n");
+            wasm_free(map);
+            return NULL;
+        }
+    }
+
+    map->size = size;
+    map->hash_func = hash_func;
+    map->key_equal_func = key_equal_func;
+    map->key_destroy_func = key_destroy_func;
+    map->value_destroy_func = value_destroy_func;
+    return map;
+}
+
+bool
+wasm_hash_map_insert(HashMap *map, void *key, void *value)
+{
+    uint32 index;
+    HashMapElem *elem;
+
+    if (!map || !key) {
+        LOG_ERROR("HashMap insert elem failed: map or key is NULL.\n");
+        return false;
+    }
+
+    if (map->lock) {
+        ws_mutex_lock(map->lock);
+    }
+
+    index = map->hash_func(key) % map->size;
+    elem = map->elements[index];
+    while (elem) {
+        if (map->key_equal_func(elem->key, key)) {
+            LOG_ERROR("HashMap insert elem failed: duplicated key found.\n");
+            goto fail;
+        }
+        elem = elem->next;
+    }
+
+    if (!(elem = wasm_malloc(sizeof(HashMapElem)))) {
+        LOG_ERROR("HashMap insert elem failed: alloc memory failed.\n");
+        goto fail;
+    }
+
+    elem->key = key;
+    elem->value = value;
+    elem->next = map->elements[index];
+    map->elements[index] = elem;
+
+    if (map->lock) {
+        ws_mutex_unlock(map->lock);
+    }
+    return true;
+
+fail:
+    if (map->lock) {
+        ws_mutex_unlock(map->lock);
+    }
+    return false;
+}
+
+void*
+wasm_hash_map_find(HashMap *map, void *key)
+{
+    uint32 index;
+    HashMapElem *elem;
+    void *value;
+
+    if (!map || !key) {
+        LOG_ERROR("HashMap find elem failed: map or key is NULL.\n");
+        return NULL;
+    }
+
+    if (map->lock) {
+        ws_mutex_lock(map->lock);
+    }
+
+    index = map->hash_func(key) % map->size;
+    elem = map->elements[index];
+
+    while (elem) {
+        if (map->key_equal_func(elem->key, key)) {
+            value = elem->value;
+            if (map->lock) {
+                ws_mutex_unlock(map->lock);
+            }
+            return value;
+        }
+        elem = elem->next;
+    }
+
+    if (map->lock) {
+        ws_mutex_unlock(map->lock);
+    }
+    return NULL;
+}
+
+bool
+wasm_hash_map_update(HashMap *map, void *key, void *value,
+                     void **p_old_value)
+{
+    uint32 index;
+    HashMapElem *elem;
+
+    if (!map || !key) {
+        LOG_ERROR("HashMap update elem failed: map or key is NULL.\n");
+        return false;
+    }
+
+    if (map->lock) {
+        ws_mutex_lock(map->lock);
+    }
+
+    index = map->hash_func(key) % map->size;
+    elem = map->elements[index];
+
+    while (elem) {
+        if (map->key_equal_func(elem->key, key)) {
+            if (p_old_value)
+                *p_old_value = elem->value;
+            elem->value = value;
+            if (map->lock) {
+                ws_mutex_unlock(map->lock);
+            }
+            return true;
+    }
+    elem = elem->next;
+    }
+
+    if (map->lock) {
+        ws_mutex_unlock(map->lock);
+    }
+    return false;
+}
+
+bool
+wasm_hash_map_remove(HashMap *map, void *key,
+                     void **p_old_key, void **p_old_value)
+{
+    uint32 index;
+    HashMapElem *elem, *prev;
+
+    if (!map || !key) {
+        LOG_ERROR("HashMap remove elem failed: map or key is NULL.\n");
+        return false;
+    }
+
+    if (map->lock) {
+        ws_mutex_lock(map->lock);
+    }
+
+    index = map->hash_func(key) % map->size;
+    prev = elem = map->elements[index];
+
+    while (elem) {
+        if (map->key_equal_func(elem->key, key)) {
+            if (p_old_key)
+                *p_old_key = elem->key;
+            if (p_old_value)
+                *p_old_value = elem->value;
+
+            if (elem == map->elements[index])
+                map->elements[index] = elem->next;
+            else
+                prev->next = elem->next;
+
+            wasm_free(elem);
+
+            if (map->lock) {
+                ws_mutex_unlock(map->lock);
+            }
+            return true;
+        }
+
+        prev = elem;
+        elem = elem->next;
+    }
+
+    if (map->lock) {
+        ws_mutex_unlock(map->lock);
+    }
+    return false;
+}
+
+bool
+wasm_hash_map_destroy(HashMap *map)
+{
+    uint32 index;
+    HashMapElem *elem, *next;
+
+    if (!map) {
+        LOG_ERROR("HashMap destroy failed: map is NULL.\n");
+        return false;
+    }
+
+    if (map->lock) {
+        ws_mutex_lock(map->lock);
+    }
+
+    for (index = 0; index < map->size; index++) {
+        elem = map->elements[index];
+        while (elem) {
+            next = elem->next;
+
+            if (map->key_destroy_func) {
+                map->key_destroy_func(elem->key);
+            }
+            if (map->value_destroy_func) {
+                map->value_destroy_func(elem->value);
+            }
+            wasm_free(elem);
+
+            elem = next;
+        }
+    }
+
+    if (map->lock) {
+        ws_mutex_unlock(map->lock);
+        ws_mutex_destroy(map->lock);
+    }
+    wasm_free(map);
+    return true;
+}
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_log.c 
b/scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_log.c
new file mode 100644
index 0000000..315359b
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_log.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_log.h"
+
+#include "wasm_platform_log.h"
+#include "wasm_thread.h"
+
+
+/**
+ * The verbose level of the log system.  Only those verbose logs whose
+ * levels are less than or equal to this value are outputed.
+ */
+static int log_verbose_level;
+
+/**
+ * The lock for protecting the global output stream of logs.
+ */
+static korp_mutex log_stream_lock;
+
+
+int
+_wasm_log_init ()
+{
+  log_verbose_level = 1;
+  return ws_mutex_init (&log_stream_lock, false);
+}
+
+void
+_wasm_log_set_verbose_level (int level)
+{
+  log_verbose_level = level;
+}
+
+bool
+_wasm_log_begin (int level)
+{
+  korp_tid self;
+
+  if (level > log_verbose_level) {
+    return false;
+  }
+
+  /* Try to own the log stream and start the log output.  */
+  ws_mutex_lock (&log_stream_lock);
+  self = ws_self_thread ();
+#ifdef CONFIG_LIBPTHREAD_EMBEDDED
+  wasm_printf ("[%X]: ", (int)self.p);  
+#else
+  wasm_printf ("[%X]: ", (int)self);
+#endif
+  return true;
+}
+
+void
+_wasm_log_vprintf (const char *fmt, va_list ap)
+{
+  wasm_vprintf (fmt, ap);
+}
+
+void
+_wasm_log_printf (const char *fmt, ...)
+{
+  va_list ap;
+  va_start (ap, fmt);
+  _wasm_log_vprintf (fmt, ap);
+  va_end (ap);
+}
+
+void
+_wasm_log_end ()
+{
+  ws_mutex_unlock (&log_stream_lock);
+}
+
+void
+_wasm_log (int level, const char *file, int line,
+           const char *fmt, ...)
+{
+  if (_wasm_log_begin (level)) {
+    va_list ap;
+
+    if (file)
+      _wasm_log_printf ("%s:%d ", file, line);
+
+    va_start (ap, fmt);
+    _wasm_log_vprintf (fmt, ap);
+    va_end (ap);
+
+    _wasm_log_end ();
+  }
+}
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_vector.c 
b/scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_vector.c
new file mode 100755
index 0000000..f04f4b3
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/utils/wasm_vector.c
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_log.h"
+#include "wasm_vector.h"
+#include "wasm_memory.h"
+
+
+static uint8*
+alloc_vector_data(uint32 length, uint32 size_elem)
+{
+    uint64 total_size = ((uint64)size_elem) * length;
+    uint8 *data;
+
+    if (total_size > UINT32_MAX) {
+        return NULL;
+    }
+
+    if ((data = wasm_malloc((uint32)total_size))) {
+        memset(data, 0, (uint32)total_size);
+    }
+
+    return data;
+}
+
+static bool
+extend_vector(Vector *vector, uint32 length)
+{
+    uint8 *data;
+
+    if (length <= vector->max_elements)
+        return true;
+
+    if (length < vector->size_elem * 3 / 2)
+        length = vector->size_elem * 3 / 2;
+
+    if (!(data = alloc_vector_data(length, vector->size_elem))) {
+        return false;
+    }
+
+    memcpy(data, vector->data, vector->size_elem * vector->max_elements);
+    free(vector->data);
+    vector->data = data;
+    vector->max_elements = length;
+    return true;
+}
+
+bool
+wasm_vector_init(Vector *vector, uint32 init_length, uint32 size_elem)
+{
+    if (!vector) {
+        LOG_ERROR("Init vector failed: vector is NULL.\n");
+        return false;
+    }
+
+    if (init_length == 0) {
+        init_length = 4;
+    }
+
+    if (!(vector->data = alloc_vector_data(init_length, size_elem))) {
+        LOG_ERROR("Init vector failed: alloc memory failed.\n");
+        return false;
+    }
+
+    vector->size_elem = size_elem;
+    vector->max_elements = init_length;
+    vector->num_elements = 0;
+    return true;
+}
+
+bool
+wasm_vector_set(Vector *vector, uint32 index, const void *elem_buf)
+{
+    if (!vector || !elem_buf) {
+        LOG_ERROR("Set vector elem failed: vector or elem buf is NULL.\n");
+        return false;
+    }
+
+    if (index >= vector->num_elements) {
+        LOG_ERROR("Set vector elem failed: invalid elem index.\n");
+        return false;
+    }
+
+    memcpy(vector->data + vector->size_elem * index,
+            elem_buf, vector->size_elem);
+    return true;
+}
+
+bool wasm_vector_get(const Vector *vector, uint32 index, void *elem_buf)
+{
+    if (!vector || !elem_buf) {
+        LOG_ERROR("Get vector elem failed: vector or elem buf is NULL.\n");
+        return false;
+    }
+
+    if (index >= vector->num_elements) {
+        LOG_ERROR("Get vector elem failed: invalid elem index.\n");
+        return false;
+    }
+
+    memcpy(elem_buf, vector->data + vector->size_elem * index,
+           vector->size_elem);
+    return true;
+}
+
+bool wasm_vector_insert(Vector *vector, uint32 index, const void *elem_buf)
+{
+    uint32 i;
+    uint8 *p;
+
+    if (!vector || !elem_buf) {
+        LOG_ERROR("Insert vector elem failed: vector or elem buf is NULL.\n");
+        return false;
+    }
+
+    if (index >= vector->num_elements) {
+        LOG_ERROR("Insert vector elem failed: invalid elem index.\n");
+        return false;
+    }
+
+    if (!extend_vector(vector, vector->num_elements + 1)) {
+        LOG_ERROR("Insert vector elem failed: extend vector failed.\n");
+        return false;
+    }
+
+    p = vector->data + vector->size_elem * vector->num_elements;
+    for (i = vector->num_elements - 1; i > index; i--) {
+        memcpy(p, p - vector->size_elem, vector->size_elem);
+        p -= vector->size_elem;
+    }
+
+    memcpy(p, elem_buf, vector->size_elem);
+    vector->num_elements++;
+    return true;
+}
+
+bool wasm_vector_append(Vector *vector, const void *elem_buf)
+{
+    if (!vector || !elem_buf) {
+        LOG_ERROR("Append vector elem failed: vector or elem buf is NULL.\n");
+        return false;
+    }
+
+    if (!extend_vector(vector, vector->num_elements + 1)) {
+        LOG_ERROR("Append ector elem failed: extend vector failed.\n");
+        return false;
+    }
+
+    memcpy(vector->data + vector->size_elem * vector->num_elements,
+           elem_buf, vector->size_elem);
+    vector->num_elements++;
+    return true;
+}
+
+bool
+wasm_vector_remove(Vector *vector, uint32 index, void *old_elem_buf)
+{
+    uint32 i;
+    uint8 *p;
+
+    if (!vector) {
+        LOG_ERROR("Remove vector elem failed: vector is NULL.\n");
+        return false;
+    }
+
+    if (index >= vector->num_elements) {
+        LOG_ERROR("Remove vector elem failed: invalid elem index.\n");
+        return false;
+    }
+
+    p = vector->data + vector->size_elem * index;
+
+    if (old_elem_buf) {
+        memcpy(old_elem_buf, p, vector->size_elem);
+    }
+
+    for (i = index; i < vector->num_elements - 1; i++) {
+        memcpy(p, p + vector->size_elem, vector->size_elem);
+        p += vector->size_elem;
+    }
+
+    vector->num_elements--;
+    return true;
+}
+
+uint32
+wasm_vector_size(const Vector *vector)
+{
+    return vector ? vector->num_elements : 0;
+}
+
+bool
+wasm_vector_destroy(Vector *vector)
+{
+    if (!vector) {
+        LOG_ERROR("Destroy vector elem failed: vector is NULL.\n");
+        return false;
+    }
+
+    if (vector->data)
+        wasm_free(vector->data);
+    memset(vector, 0, sizeof(Vector));
+    return true;
+}
diff --git 
a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/invokeNative_general.c 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/invokeNative_general.c
new file mode 100755
index 0000000..3cb34cf
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/invokeNative_general.c
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_runtime.h"
+
+void invokeNative(uint32 argv[], uint32 argc, void (*native_code)())
+{
+    WASMThread *self;
+    switch(argc) {
+        case 0:
+            native_code();
+            break;
+        case 1:
+            native_code(argv[0]);
+            break;
+        case 2:
+            native_code(argv[0], argv[1]);
+            break;
+        case 3:
+            native_code(argv[0], argv[1], argv[2]);
+            break;
+        case 4:
+            native_code(argv[0], argv[1], argv[2], argv[3]);
+            break;
+        case 5:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4]);
+            break;
+        case 6:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
+            break;
+        case 7:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6]);
+            break;
+        case 8:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7]);
+            break;
+        case 9:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7], argv[8]);
+            break;
+        case 10:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7], argv[8], argv[9]);
+            break;
+        case 11:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7], argv[8], argv[9], argv[10]);
+            break;
+        case 12:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7], argv[8], argv[9], argv[10], argv[11]);
+            break;
+        case 13:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12]);
+            break;
+        case 14:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13]);
+            break;
+        case 15:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], 
argv[14]);
+            break;
+        case 16:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], 
argv[14], argv[15]);
+            break;
+        case 17:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], 
argv[14], argv[15], argv[16]);
+            break;
+        case 18:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], 
argv[14], argv[15], argv[16], argv[17]);
+            break;
+        case 19:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], 
argv[14], argv[15], argv[16], argv[17], argv[18]);
+            break;
+        case 20:
+            native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], 
argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], 
argv[14], argv[15], argv[16], argv[17], argv[18], argv[19]);
+            break;
+        default:
+            /* FIXME: If this happen, add more cases. */
+            self = wasm_runtime_get_self();
+            wasm_runtime_set_exception(self->module_inst, "the argument number 
of native function exceeds maximum");
+            return;
+    }
+}
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/invokeNative_ia32.s 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/invokeNative_ia32.s
new file mode 100755
index 0000000..8c1d843
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/invokeNative_ia32.s
@@ -0,0 +1,56 @@
+// Copyright (C) 2019 Intel Corporation.  All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//    Licensed to the Apache Software Foundation (ASF) under one or more
+//    contributor license agreements.  See the NOTICE file distributed with
+//    this work for additional information regarding copyright ownership.
+//    The ASF licenses this file to You under the Apache License, Version 2.0
+//    (the "License"); you may not use this file except in compliance with
+//    the License.  You may obtain a copy of the License at
+// 
+//      http://www.apache.org/licenses/LICENSE-2.0
+// 
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+//
+//   Author: Ivan Volosyuk
+//
+    .text
+    .align 2
+.globl invokeNative
+    .type   invokeNative, @function
+invokeNative:
+
+    push    %ebp
+    movl    %esp, %ebp
+    push    %ecx
+    movl    8(%ebp), %eax           /* eax = argv */
+    movl    12(%ebp), %ecx          /* ecx = argc */
+    test    %ecx, %ecx
+    je      restore_ecx             /* if ecx == 0, skip pushing arguments */
+    leal    -4(%eax,%ecx,4), %eax   /* eax = eax + ecx * 4 - 4 */
+    subl    %esp, %eax              /* eax = eax - esp */
+1:
+    push    0(%esp,%eax)
+    loop    1b                      /* loop ecx counts */
+restore_ecx:
+    movl    -4(%ebp), %ecx          /* restore ecx */
+    movl    16(%ebp), %eax          /* eax = func_ptr */
+    call    *%eax
+    leave
+    ret
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/vmcore.cmake 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/vmcore.cmake
new file mode 100755
index 0000000..8e3d94c
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/vmcore.cmake
@@ -0,0 +1,28 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (VMCORE_LIB_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${VMCORE_LIB_DIR})
+include_directories(${VMCORE_LIB_DIR}/../include)
+
+if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES")
+file (GLOB_RECURSE source_all ${VMCORE_LIB_DIR}/*.c)
+else ()
+file (GLOB_RECURSE source_all ${VMCORE_LIB_DIR}/*.c ${VMCORE_LIB_DIR}/*.s)
+list (REMOVE_ITEM source_all ${VMCORE_LIB_DIR}/invokeNative_general.c)
+endif ()
+
+set (VMCORE_LIB_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm.h 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm.h
new file mode 100755
index 0000000..06b655e
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm.h
@@ -0,0 +1,405 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_H_
+#define _WASM_H_
+
+#include "bh_platform.h"
+#include "wasm_hashmap.h"
+#include "wasm_assert.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Value Type */
+#define VALUE_TYPE_I32 0x7F
+#define VALUE_TYPE_I64 0X7E
+#define VALUE_TYPE_F32 0x7D
+#define VALUE_TYPE_F64 0x7C
+#define VALUE_TYPE_VOID 0x00
+
+/* Table Element Type */
+#define TABLE_ELEM_TYPE_ANY_FUNC 0x70
+
+#define MaxMemoryPages 65536
+#define MaxTableElems UINT32_MAX
+#define NumBytesPerPage 65536
+#define NumBytesPerPageLog2 16
+#define MaxReturnValues 16
+
+#define INIT_EXPR_TYPE_I32_CONST 0x41
+#define INIT_EXPR_TYPE_I64_CONST 0x42
+#define INIT_EXPR_TYPE_F32_CONST 0x43
+#define INIT_EXPR_TYPE_F64_CONST 0x44
+#define INIT_EXPR_TYPE_GET_GLOBAL 0x23
+#define INIT_EXPR_TYPE_ERROR 0xff
+
+#define WASM_MAGIC_NUMBER 0x6d736100
+#define WASM_CURRENT_VERSION 1
+
+#define SECTION_TYPE_USER 0
+#define SECTION_TYPE_TYPE 1
+#define SECTION_TYPE_IMPORT 2
+#define SECTION_TYPE_FUNC 3
+#define SECTION_TYPE_TABLE 4
+#define SECTION_TYPE_MEMORY 5
+#define SECTION_TYPE_GLOBAL 6
+#define SECTION_TYPE_EXPORT 7
+#define SECTION_TYPE_START 8
+#define SECTION_TYPE_ELEM 9
+#define SECTION_TYPE_CODE 10
+#define SECTION_TYPE_DATA 11
+
+#define IMPORT_KIND_FUNC 0
+#define IMPORT_KIND_TABLE 1
+#define IMPORT_KIND_MEMORY 2
+#define IMPORT_KIND_GLOBAL 3
+
+#define EXPORT_KIND_FUNC 0
+#define EXPORT_KIND_TABLE 1
+#define EXPORT_KIND_MEMORY 2
+#define EXPORT_KIND_GLOBAL 3
+
+#define BLOCK_TYPE_BLOCK 0
+#define BLOCK_TYPE_LOOP 1
+#define BLOCK_TYPE_IF 2
+#define BLOCK_TYPE_FUNCTION 3
+
+#define CALL_TYPE_WRAPPER 0
+#define CALL_TYPE_C_INTRINSIC 1
+
+typedef union WASMValue {
+    int32 i32;
+    uint32 u32;
+    int64 i64;
+    uint64 u64;
+    float32 f32;
+    float64 f64;
+    uintptr_t addr;
+} WASMValue;
+
+typedef struct InitializerExpression {
+    /* type of INIT_EXPR_TYPE_XXX */
+    uint8 init_expr_type;
+    union {
+        int32 i32;
+        int64 i64;
+        float32 f32;
+        float64 f64;
+        uint32 global_index;
+    } u;
+} InitializerExpression;
+
+typedef struct WASMType {
+    uint32 param_count;
+    /* only one result is supported currently */
+    uint32 result_count;
+    /* types of params and results */
+    uint8 types[1];
+} WASMType;
+
+typedef struct WASMTable {
+    uint8 elem_type;
+    uint32 flags;
+    uint32 init_size;
+    /* specified if (flags & 1), else it is 0x10000 */
+    uint32 max_size;
+} WASMTable;
+
+typedef struct WASMMemory {
+    uint32 flags;
+    /* 64 kbytes one page by default */
+    uint32 init_page_count;
+    uint32 max_page_count;
+} WASMMemory;
+
+typedef struct WASMTableImport {
+    char *module_name;
+    char *field_name;
+    uint8 elem_type;
+    uint32 flags;
+    uint32 init_size;
+    /* specified if (flags & 1), else it is 0x10000 */
+    uint32 max_size;
+} WASMTableImport;
+
+typedef struct WASMMemoryImport {
+    char *module_name;
+    char *field_name;
+    uint32 flags;
+    /* 64 kbytes one page by default */
+    uint32 init_page_count;
+    uint32 max_page_count;
+} WASMMemoryImport;
+
+typedef struct WASMFunctionImport {
+    char *module_name;
+    char *field_name;
+    /* function type */
+    WASMType *func_type;
+    /* c intrinsic function or wrapper function */
+    uint32 call_type;
+    /* function pointer after linked */
+    void *func_ptr_linked;
+} WASMFunctionImport;
+
+typedef struct WASMGlobalImport {
+    char *module_name;
+    char *field_name;
+    uint8 type;
+    bool is_mutable;
+    bool is_addr;
+    /* global data after linked */
+    WASMValue global_data_linked;
+} WASMGlobalImport;
+
+typedef struct WASMImport {
+    uint8 kind;
+    union {
+        WASMFunctionImport function;
+        WASMTableImport table;
+        WASMMemoryImport memory;
+        WASMGlobalImport global;
+        struct {
+            char *module_name;
+            char *field_name;
+        } names;
+    } u;
+} WASMImport;
+
+typedef struct WASMFunction {
+    /* the type of function */
+    WASMType *func_type;
+    uint32 local_count;
+    uint8 *local_types;
+    uint32 max_stack_cell_num;
+    uint32 max_block_num;
+    uint32 code_size;
+    uint8 *code;
+} WASMFunction;
+
+typedef struct WASMGlobal {
+    uint8 type;
+    bool is_mutable;
+    bool is_addr;
+    InitializerExpression init_expr;
+} WASMGlobal;
+
+typedef struct WASMExport {
+    char *name;
+    uint8 kind;
+    uint32 index;
+} WASMExport;
+
+typedef struct WASMTableSeg {
+    uint32 table_index;
+    InitializerExpression base_offset;
+    uint32 function_count;
+    uint32 *func_indexes;
+} WASMTableSeg;
+
+typedef struct WASMDataSeg {
+    uint32 memory_index;
+    InitializerExpression base_offset;
+    uint32 data_length;
+    uint8 *data;
+} WASMDataSeg;
+
+typedef struct BlockAddr {
+    const uint8 *start_addr;
+    uint8 *else_addr;
+    uint8 *end_addr;
+} BlockAddr;
+
+#define BLOCK_ADDR_CACHE_SIZE 64
+#define BLOCK_ADDR_CONFLICT_SIZE 4
+
+typedef struct WASMModule {
+    uint32 type_count;
+    uint32 import_count;
+    uint32 function_count;
+    uint32 table_count;
+    uint32 memory_count;
+    uint32 global_count;
+    uint32 export_count;
+    uint32 table_seg_count;
+    uint32 data_seg_count;
+
+    uint32 import_function_count;
+    uint32 import_table_count;
+    uint32 import_memory_count;
+    uint32 import_global_count;
+
+    WASMImport *import_functions;
+    WASMImport *import_tables;
+    WASMImport *import_memories;
+    WASMImport *import_globals;
+
+    WASMType **types;
+    WASMImport *imports;
+    WASMFunction **functions;
+    WASMTable *tables;
+    WASMMemory *memories;
+    WASMGlobal *globals;
+    WASMExport *exports;
+    WASMTableSeg *table_segments;
+    WASMDataSeg **data_segments;
+    uint32 start_function;
+
+    HashMap *const_str_set;
+#if WASM_ENABLE_HASH_BLOCK_ADDR != 0
+    HashMap *branch_set;
+#else
+    BlockAddr 
block_addr_cache[BLOCK_ADDR_CACHE_SIZE][BLOCK_ADDR_CONFLICT_SIZE];
+#endif
+} WASMModule;
+
+typedef struct WASMBranchBlock {
+    uint8 block_type;
+    uint8 return_type;
+    uint8 *start_addr;
+    uint8 *else_addr;
+    uint8 *end_addr;
+    uint32 *frame_sp;
+    uint8 *frame_ref;
+} WASMBranchBlock;
+
+typedef struct WASMSection {
+    struct WASMSection *next;
+    /* section type */
+    int section_type;
+    /* section body, not include type and size */
+    const uint8_t *section_body;
+    /* section body size */
+    uint32_t section_body_size;
+} WASMSection;
+
+/* Execution environment, e.g. stack info */
+/**
+ * Align an unsigned value on a alignment boundary.
+ *
+ * @param v the value to be aligned
+ * @param b the alignment boundary (2, 4, 8, ...)
+ *
+ * @return the aligned value
+ */
+inline static unsigned
+align_uint (unsigned v, unsigned b)
+{
+    unsigned m = b - 1;
+    return (v + m) & ~m;
+}
+
+/**
+ * Return the hash value of c string.
+ */
+inline static uint32
+wasm_string_hash(const char *str)
+{
+    unsigned h = strlen(str);
+    const uint8 *p = (uint8*)str;
+    const uint8 *end = p + h;
+
+    while (p != end)
+        h = ((h << 5) - h) + *p++;
+    return h;
+}
+
+/**
+ * Whether two c strings are equal.
+ */
+inline static bool
+wasm_string_equal(const char *s1, const char *s2)
+{
+    return strcmp(s1, s2) == 0 ? true : false;
+}
+
+/**
+ * Return the byte size of value type.
+ *
+ */
+inline static uint32
+wasm_value_type_size(uint8 value_type)
+{
+    switch (value_type) {
+        case VALUE_TYPE_I32:
+        case VALUE_TYPE_F32:
+            return sizeof(int32);
+        case VALUE_TYPE_I64:
+        case VALUE_TYPE_F64:
+            return sizeof(int64);
+        default:
+            wasm_assert(0);
+    }
+    return 0;
+}
+
+inline static uint16
+wasm_value_type_cell_num(uint8 value_type)
+{
+    switch (value_type) {
+        case VALUE_TYPE_I32:
+        case VALUE_TYPE_F32:
+            return 1;
+        case VALUE_TYPE_I64:
+        case VALUE_TYPE_F64:
+            return 2;
+        default:
+            wasm_assert(0);
+    }
+    return 0;
+}
+
+inline static uint16
+wasm_get_cell_num(const uint8 *types, uint32 type_count)
+{
+    uint16 cell_num = 0;
+    uint32 i;
+    for (i = 0; i < type_count; i++)
+        cell_num += wasm_value_type_cell_num(types[i]);
+    return cell_num;
+}
+
+inline static uint16
+wasm_type_param_cell_num(const WASMType *type)
+{
+    return wasm_get_cell_num(type->types, type->param_count);
+}
+
+inline static uint16
+wasm_type_return_cell_num(const WASMType *type)
+{
+    return wasm_get_cell_num(type->types + type->param_count,
+                             type->result_count);
+}
+
+inline static bool
+wasm_type_equal(const WASMType *type1, const WASMType *type2)
+{
+    return (type1->param_count == type2->param_count
+            && type1->result_count == type2->result_count
+            && memcmp(type1->types, type2->types,
+                      type1->param_count + type1->result_count) == 0)
+        ? true : false;
+}
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif /* end of _WASM_H_ */
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_application.c 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_application.c
new file mode 100755
index 0000000..d3aef0c
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_application.c
@@ -0,0 +1,403 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include "wasm.h"
+#include "wasm_application.h"
+#include "wasm_interp.h"
+#include "wasm_runtime.h"
+#include "wasm_thread.h"
+#include "wasm_assert.h"
+#include "wasm_log.h"
+#include "wasm_memory.h"
+#include "wasm_platform_log.h"
+
+
+static WASMFunctionInstance*
+resolve_main_function(const WASMModuleInstance *module_inst)
+{
+    uint32 i;
+    for (i = 0; i < module_inst->export_func_count; i++)
+        if (!strcmp(module_inst->export_functions[i].name, "_main")
+            || !strcmp(module_inst->export_functions[i].name, "main"))
+            return module_inst->export_functions[i].function;
+
+    LOG_ERROR("WASM execute application failed: main function not found.\n");
+    return NULL;
+}
+
+static bool
+check_main_func_type(const WASMType *type)
+{
+    if (!(type->param_count == 0 || type->param_count == 2)
+        ||type->result_count > 1) {
+        LOG_ERROR("WASM execute application failed: invalid main function 
type.\n");
+        return false;
+    }
+
+    if (type->param_count == 2
+        && !(type->types[0] == VALUE_TYPE_I32
+        && type->types[1] == VALUE_TYPE_I32)) {
+        LOG_ERROR("WASM execute application failed: invalid main function 
type.\n");
+        return false;
+    }
+
+    if (type->result_count
+        && type->types[type->param_count] != VALUE_TYPE_I32) {
+        LOG_ERROR("WASM execute application failed: invalid main function 
type.\n");
+        return false;
+    }
+
+    return true;
+}
+
+bool
+wasm_application_execute_main(WASMModuleInstance *module_inst,
+                              int argc, char *argv[])
+{
+    WASMFunctionInstance *func = resolve_main_function(module_inst);
+    uint32 argc1 = 0, argv1[2] = { 0 };
+    uint32 total_argv_size = 0, total_size;
+    int32 argv_buf_offset, i;
+    char *argv_buf, *p;
+    int32 *argv_offsets;
+
+    if (!func || func->is_import_func)
+        return false;
+
+    if (!check_main_func_type(func->u.func->func_type))
+        return false;
+
+    if (func->u.func->func_type->param_count) {
+        for (i = 0; i < argc; i++)
+            total_argv_size += strlen(argv[i]) + 1;
+        total_argv_size = align_uint(total_argv_size, 4);
+
+        total_size = total_argv_size + sizeof(int32) * argc;
+
+        if (!(argv_buf_offset = wasm_runtime_module_malloc(module_inst, 
total_size)))
+            return false;
+
+        argv_buf = p = wasm_runtime_addr_app_to_native(module_inst, 
argv_buf_offset);
+        argv_offsets = (int32*)(p + total_argv_size);
+
+        for (i = 0; i < argc; i++) {
+            memcpy(p, argv[i], strlen(argv[i]) + 1);
+            argv_offsets[i] = argv_buf_offset + (p - argv_buf);
+            p += strlen(argv[i]) + 1;
+        }
+
+        argc1 = 2;
+        argv1[0] = argc;
+        argv1[1] = (uint32)wasm_runtime_addr_native_to_app(module_inst, 
argv_offsets);
+    }
+
+    return wasm_runtime_call_wasm(module_inst, NULL, func, argc1, argv1);
+}
+
+static WASMFunctionInstance*
+resolve_function(const WASMModuleInstance *module_inst, char *name)
+{
+    uint32 i;
+    for (i = 0; i < module_inst->export_func_count; i++)
+        if (!strcmp(module_inst->export_functions[i].name, name))
+            return module_inst->export_functions[i].function;
+    return NULL;
+}
+
+union ieee754_float {
+    float f;
+
+    /* This is the IEEE 754 single-precision format.  */
+    union {
+        struct {
+            unsigned int negative:1;
+            unsigned int exponent:8;
+            unsigned int mantissa:23;
+        } ieee_big_endian;
+        struct {
+            unsigned int mantissa:23;
+            unsigned int exponent:8;
+            unsigned int negative:1;
+        } ieee_little_endian;
+    } ieee;
+};
+
+union ieee754_double {
+    double d;
+
+    /* This is the IEEE 754 double-precision format.  */
+    union {
+        struct {
+            unsigned int negative:1;
+            unsigned int exponent:11;
+            /* Together these comprise the mantissa.  */
+            unsigned int mantissa0:20;
+            unsigned int mantissa1:32;
+        } ieee_big_endian;
+
+        struct {
+            /* Together these comprise the mantissa.  */
+            unsigned int mantissa1:32;
+            unsigned int mantissa0:20;
+            unsigned int exponent:11;
+            unsigned int negative:1;
+        } ieee_little_endian;
+    } ieee;
+};
+
+static union {
+    int a;
+    char b;
+} __ue = { .a = 1 };
+
+#define is_little_endian() (__ue.b == 1)
+
+bool
+wasm_application_execute_func(WASMModuleInstance *module_inst,
+                              char *name, int argc, char *argv[])
+{
+    WASMFunctionInstance *func;
+    WASMType *type;
+    uint32 argc1, *argv1;
+    int32 i, p;
+    const char *exception;
+
+    wasm_assert(argc >= 0);
+    func = resolve_function(module_inst, name);
+    if (!func || func->is_import_func) {
+        LOG_ERROR("Wasm lookup function %s failed.\n", name);
+        return false;
+    }
+
+    type = func->u.func->func_type;
+    if (type->param_count != (uint32)argc) {
+        LOG_ERROR("Wasm prepare param failed: invalid param count.\n");
+        return false;
+    }
+
+    argc1 = func->param_cell_num;
+    argv1 = wasm_malloc(sizeof(uint32) * (argc1 > 2 ? argc1 : 2));
+    if (argv1 == NULL) {
+        LOG_ERROR("Wasm prepare param failed: malloc failed.\n");
+        return false;
+    }
+
+    /* Parse arguments */
+    for (i = 0, p = 0; i < argc; i++) {
+        char *endptr;
+        wasm_assert(argv[i] != NULL);
+        if (argv[i][0] == '\0') {
+            LOG_ERROR("Wasm prepare param failed: invalid num (%s).\n", 
argv[i]);
+            goto fail;
+        }
+        switch (type->types[i]) {
+            case VALUE_TYPE_I32:
+                argv1[p++] = strtoul(argv[i], &endptr, 0);
+                break;
+            case VALUE_TYPE_I64:
+            {
+                union { uint64 val; uint32 parts[2]; } u;
+                u.val = strtoull(argv[i], &endptr, 0);
+                argv1[p++] = u.parts[0];
+                argv1[p++] = u.parts[1];
+                break;
+            }
+            case VALUE_TYPE_F32:
+            {
+                float32 f32 = strtof(argv[i], &endptr);
+                if (isnan(f32)) {
+                    if (argv[i][0] == '-') {
+                        f32 = -f32;
+                    }
+                    if (endptr[0] == ':') {
+                        uint32 sig;
+                        union ieee754_float u;
+                        sig = strtoul(endptr + 1, &endptr, 0);
+                        u.f = f32;
+                        if (is_little_endian())
+                            u.ieee.ieee_little_endian.mantissa = sig;
+                        else
+                            u.ieee.ieee_big_endian.mantissa = sig;
+                        f32 = u.f;
+                    }
+                }
+                *(float32*)&argv1[p++] = f32;
+                break;
+            }
+            case VALUE_TYPE_F64:
+            {
+                union { float64 val; uint32 parts[2]; } u;
+                u.val = strtod(argv[i], &endptr);
+                if (isnan(u.val)) {
+                    if (argv[i][0] == '-') {
+                        u.val = -u.val;
+                    }
+                    if (endptr[0] == ':') {
+                        uint64 sig;
+                        union ieee754_double ud;
+                        sig = strtoull(endptr + 1, &endptr, 0);
+                        ud.d = u.val;
+                        if (is_little_endian()) {
+                            ud.ieee.ieee_little_endian.mantissa0 = sig >> 32;
+                            ud.ieee.ieee_little_endian.mantissa1 = sig;
+                        }
+                        else {
+                            ud.ieee.ieee_big_endian.mantissa0 = sig >> 32;
+                            ud.ieee.ieee_big_endian.mantissa1 = sig;
+                        }
+                        u.val = ud.d;
+                    }
+                }
+                argv1[p++] = u.parts[0];
+                argv1[p++] = u.parts[1];
+                break;
+            }
+        }
+        if (*endptr != '\0' && *endptr != '_') {
+            LOG_ERROR("Wasm prepare param failed: invalid num (%s).\n", 
argv[i]);
+            goto fail;
+        }
+        if (errno != 0) {
+            LOG_ERROR("Wasm prepare param failed: errno %d.\n", errno);
+            goto fail;
+        }
+    }
+    wasm_assert(p == (int32)argc1);
+
+    wasm_runtime_set_exception(module_inst, NULL);
+    if (!wasm_runtime_call_wasm(module_inst, NULL, func, argc1, argv1)) {
+        exception = wasm_runtime_get_exception(module_inst);
+        wasm_printf("%s\n", exception);
+        goto fail;
+    }
+
+    /* print return value */
+    switch (type->types[type->param_count]) {
+        case VALUE_TYPE_I32:
+            wasm_printf("0x%x:i32", argv1[0]);
+            break;
+        case VALUE_TYPE_I64:
+        {
+            char buf[16];
+            union { uint64 val; uint32 parts[2]; } u;
+            u.parts[0] = argv1[0];
+            u.parts[1] = argv1[1];
+            if (sizeof(long) == 4)
+                snprintf(buf, sizeof(buf), "%s", "0x%llx:i64");
+            else
+                snprintf(buf, sizeof(buf), "%s", "0x%lx:i64");
+            wasm_printf(buf, u.val);
+            break;
+        }
+        case VALUE_TYPE_F32:
+            wasm_printf("%.7g:f32", *(float32*)argv1);
+        break;
+        case VALUE_TYPE_F64:
+        {
+            union { float64 val; uint32 parts[2]; } u;
+            u.parts[0] = argv1[0];
+            u.parts[1] = argv1[1];
+            wasm_printf("%.7g:f64", u.val);
+            break;
+        }
+    }
+    wasm_printf("\n");
+
+    wasm_free(argv1);
+    return true;
+
+fail:
+    wasm_free(argv1);
+    return false;
+}
+
+static bool
+check_type(uint8 type, const char *p)
+{
+    const char *str = "i32";
+
+    if (strlen(p) < 3)
+        return false;
+
+    switch (type) {
+        case VALUE_TYPE_I32:
+            str = "i32";
+            break;
+        case VALUE_TYPE_I64:
+            str = "i64";
+            break;
+        case VALUE_TYPE_F32:
+            str = "f32";
+            break;
+        case VALUE_TYPE_F64:
+            str = "f64";
+            break;
+    }
+    if (strncmp(p, str, 3))
+        return false;
+
+    return true;
+}
+
+static bool
+check_function_type(const WASMType *type,
+                    const char *signature)
+{
+    uint32 i;
+    const char *p = signature;
+
+    if (!p || *p++ != '(')
+        return false;
+
+    for (i = 0; i < type->param_count; i++) {
+        if (!check_type(type->types[i], p))
+            return false;
+        p += 3;
+    }
+
+    if (*p++ != ')')
+        return false;
+
+    if (type->result_count) {
+        if (!check_type(type->types[type->param_count], p))
+            return false;
+        p += 3;
+    }
+
+    if (*p != '\0')
+        return false;
+
+    return true;
+}
+
+WASMFunctionInstance*
+wasm_runtime_lookup_function(const WASMModuleInstance *module_inst,
+                             const char *name,
+                             const char *signature)
+{
+    uint32 i;
+    for (i = 0; i < module_inst->export_func_count; i++)
+        if (!strcmp(module_inst->export_functions[i].name, name)
+            && check_function_type(
+                module_inst->export_functions[i].function->u.func->func_type,
+                signature))
+            return module_inst->export_functions[i].function;
+    return NULL;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_interp.c 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_interp.c
new file mode 100644
index 0000000..84f504f
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_interp.c
@@ -0,0 +1,2261 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_interp.h"
+#include "wasm_runtime.h"
+#include "wasm_thread.h"
+#include "wasm_opcode.h"
+#include "wasm_loader.h"
+#include "wasm_log.h"
+#include "wasm_memory.h"
+
+#include <math.h>
+
+typedef int32 CellType_I32;
+typedef int64 CellType_I64;
+typedef float32 CellType_F32;
+typedef float64 CellType_F64;
+
+#define BR_TABLE_TMP_BUF_LEN 32
+
+/* 64-bit Memory accessors. */
+#if WASM_CPU_SUPPORTS_UNALIGNED_64BIT_ACCESS != 0
+#define PUT_I64_TO_ADDR(addr, value) do {       \
+    *(int64*)(addr) = (int64)(value);           \
+  } while (0)
+
+#define PUT_F64_TO_ADDR(addr, value) do {       \
+    *(float64*)(addr) = (float64)(value);       \
+  } while (0)
+
+#define GET_I64_FROM_ADDR(addr) (*(int64*)(addr))
+#define GET_F64_FROM_ADDR(addr) (*(float64*)(addr))
+#else  /* WASM_CPU_SUPPORTS_UNALIGNED_64BIT_ACCESS != 0 */
+#define PUT_I64_TO_ADDR(addr, value) do {       \
+    union { int64 val; uint32 parts[2]; } u;    \
+    u.val = (value);                            \
+    (addr)[0] = u.parts[0];                     \
+    (addr)[1] = u.parts[1];                     \
+  } while (0)
+#define PUT_F64_TO_ADDR(addr, value) do {       \
+    union { float64 val; uint32 parts[2]; } u;  \
+    u.val = (value);                            \
+    (addr)[0] = u.parts[0];                     \
+    (addr)[1] = u.parts[1];                     \
+  } while (0)
+
+static inline int64
+GET_I64_FROM_ADDR(uint32 *addr)
+{
+    union { int64 val; uint32 parts[2]; } u;
+    u.parts[0] = addr[0];
+    u.parts[1] = addr[1];
+    return u.val;
+}
+
+static inline float64
+GET_F64_FROM_ADDR (uint32 *addr)
+{
+    union { float64 val; uint32 parts[2]; } u;
+    u.parts[0] = addr[0];
+    u.parts[1] = addr[1];
+    return u.val;
+}
+#endif  /* WASM_CPU_SUPPORTS_UNALIGNED_64BIT_ACCESS != 0 */
+
+#if WASM_ENABLE_EXT_MEMORY_SPACE != 0
+#define CHECK_EXT_MEMORY_SPACE() \
+    else if (module->ext_mem_data                                              
 \
+             && module->ext_mem_base_offset <= offset1                         
 \
+             && offset1 < module->ext_mem_base_offset                          
 \
+                          + module->ext_mem_size) {                            
 \
+        maddr = module->ext_mem_data                                           
 \
+                + (offset1 - module->ext_mem_base_offset);                     
 \
+        if (maddr < module->ext_mem_data)                                      
 \
+          goto out_of_bounds;                                                  
 \
+        maddr1 = maddr + LOAD_SIZE[opcode - WASM_OP_I32_LOAD];                 
 \
+        if (maddr1 > module->ext_mem_data_end)                                 
 \
+          goto out_of_bounds;                                                  
 \
+    }
+#else
+#define CHECK_EXT_MEMORY_SPACE()
+#endif
+
+#define CHECK_MEMORY_OVERFLOW() do {                                           
 \
+    uint32 offset1 = offset + addr;                                            
 \
+    uint8 *maddr1;                                                             
 \
+    if (flags != 2)                                                            
 \
+      LOG_VERBOSE("unaligned load/store in wasm interp, flag is: %d.\n", 
flags);\
+    if (offset1 < offset)                                                      
 \
+      goto out_of_bounds;                                                      
 \
+    if (offset1 < heap_base_offset) {                                          
 \
+      maddr = memory->memory_data + offset1;                                   
 \
+      if (maddr < memory->base_addr)                                           
 \
+        goto out_of_bounds;                                                    
 \
+      maddr1 = maddr + LOAD_SIZE[opcode - WASM_OP_I32_LOAD];                   
 \
+      if (maddr1 > memory->end_addr)                                           
 \
+        goto out_of_bounds;                                                    
 \
+    }                                                                          
 \
+    else if (offset1 < memory->heap_base_offset                                
 \
+                       + (memory->heap_data_end - memory->heap_data)) {        
 \
+      maddr = memory->heap_data + offset1 - memory->heap_base_offset;          
 \
+      if (maddr < memory->heap_data)                                           
 \
+        goto out_of_bounds;                                                    
 \
+      maddr1 = maddr + LOAD_SIZE[opcode - WASM_OP_I32_LOAD];                   
 \
+      if (maddr1 > memory->heap_data_end)                                      
 \
+        goto out_of_bounds;                                                    
 \
+    }                                                                          
 \
+    CHECK_EXT_MEMORY_SPACE()                                                   
 \
+    else                                                                       
 \
+      goto out_of_bounds;                                                      
 \
+  } while (0)
+
+static inline uint32
+rotl32(uint32 n, unsigned int c)
+{
+    const unsigned int mask = (31);
+    c = c % 32;
+    c &= mask;
+    return (n<<c) | (n>>( (-c)&mask ));
+}
+
+static inline uint32
+rotr32(uint32 n, unsigned int c)
+{
+    const unsigned int mask = (31);
+    c = c % 32;
+    c &= mask;
+    return (n>>c) | (n<<( (-c)&mask ));
+}
+
+static inline uint64
+rotl64(uint64 n, unsigned int c)
+{
+    const unsigned int mask = (63);
+    c = c % 64;
+    c &= mask;
+    return (n<<c) | (n>>( (-c)&mask ));
+}
+
+static inline uint64
+rotr64(uint64 n, unsigned int c)
+{
+    const unsigned int mask = (63);
+    c = c % 64;
+    c &= mask;
+    return (n>>c) | (n<<( (-c)&mask ));
+}
+
+static inline double
+wa_fmax(double a, double b)
+{
+    double c = fmax(a, b);
+    if (c==0 && a==b)
+        return signbit(a) ? b : a;
+    return c;
+}
+
+static inline double
+wa_fmin(double a, double b)
+{
+    double c = fmin(a, b);
+    if (c==0 && a==b)
+        return signbit(a) ? a : b;
+    return c;
+}
+
+static inline uint32
+clz32(uint32 type)
+{
+    uint32 num = 0;
+    if (type == 0)
+        return 32;
+    while (!(type & 0x80000000)) {
+        num++;
+        type <<= 1;
+    }
+    return num;
+}
+
+static inline uint32
+clz64(uint64 type)
+{
+    uint32 num = 0;
+    if (type == 0)
+        return 64;
+    while (!(type & 0x8000000000000000LL)) {
+        num++;
+        type <<= 1;
+    }
+    return num;
+}
+
+static inline uint32
+ctz32(uint32 type)
+{
+    uint32 num = 0;
+    if (type == 0)
+        return 32;
+    while (!(type & 1)) {
+        num++;
+        type >>= 1;
+    }
+    return num;
+}
+
+static inline uint32
+ctz64(uint64 type)
+{
+    uint32 num = 0;
+    if (type == 0)
+        return 64;
+    while (!(type & 1)) {
+        num++;
+        type >>= 1;
+    }
+    return num;
+}
+
+static inline uint32
+popcount32(uint32 u)
+{
+    uint32 ret = 0;
+    while (u) {
+        u = (u & (u - 1));
+        ret++;
+    }
+    return ret;
+}
+
+static inline uint32
+popcount64(uint64 u)
+{
+    uint32 ret = 0;
+    while (u) {
+        u = (u & (u - 1));
+        ret++;
+    }
+    return ret;
+}
+
+static inline WASMGlobalInstance*
+get_global(const WASMModuleInstance *module, uint32 global_idx)
+{
+    if (global_idx >= module->global_count)
+        return NULL;
+
+    return module->globals + global_idx;
+}
+
+static inline uint8*
+get_global_addr(WASMMemoryInstance *memory, WASMGlobalInstance *global)
+{
+    return memory->global_data + global->data_offset;
+}
+
+static uint64
+read_leb(const uint8 *buf, uint32 *p_offset, uint32 maxbits, bool sign)
+{
+    uint64 result = 0;
+    uint32 shift = 0;
+    uint32 bcnt = 0;
+    uint64 byte;
+
+    while (true) {
+        byte = buf[*p_offset];
+        *p_offset += 1;
+        result |= ((byte & 0x7f) << shift);
+        shift += 7;
+        if ((byte & 0x80) == 0) {
+            break;
+        }
+        bcnt += 1;
+    }
+    if (sign && (shift < maxbits) && (byte & 0x40)) {
+        /* Sign extend */
+        result |= - (1 << shift);
+    }
+    return result;
+}
+
+#define PUSH_I32(value) do {                    \
+    *(int32*)frame_sp++ = (int32)(value);       \
+  } while (0)
+
+#define PUSH_F32(value) do {                    \
+    *(float32*)frame_sp++ = (float32)(value);   \
+  } while (0)
+
+#define PUSH_I64(value) do {                    \
+    PUT_I64_TO_ADDR(frame_sp, value);           \
+    frame_sp += 2;                              \
+  } while (0)
+
+#define PUSH_F64(value) do {                    \
+    PUT_F64_TO_ADDR(frame_sp, value);           \
+    frame_sp += 2;                              \
+  } while (0)
+
+#define PUSH_CSP(type, ret_type, start, else_, end) do {\
+    wasm_assert(frame_csp < frame->csp_boundary);         \
+    frame_csp->block_type = type;                       \
+    frame_csp->return_type = ret_type;                  \
+    frame_csp->start_addr = start;                      \
+    frame_csp->else_addr = else_;                       \
+    frame_csp->end_addr = end;                          \
+    frame_csp->frame_sp = frame_sp;                     \
+    frame_csp++;                                        \
+  } while (0)
+
+#define POP_I32() (--frame_sp, *(int32*)frame_sp)
+
+#define POP_F32() (--frame_sp, *(float32*)frame_sp)
+
+#define POP_I64() (frame_sp -= 2, GET_I64_FROM_ADDR(frame_sp))
+
+#define POP_F64() (frame_sp -= 2, GET_F64_FROM_ADDR(frame_sp))
+
+#define POP_CSP_CHECK_OVERFLOW(n) do {                          \
+    wasm_assert(frame_csp - n >= frame->csp_bottom);              \
+  } while (0)
+
+#define POP_CSP() do {                                          \
+    POP_CSP_CHECK_OVERFLOW(1);                                  \
+    --frame_csp;                                                \
+  } while (0)
+
+#define POP_CSP_N(n) do {                                       \
+    uint32 *frame_sp_old = frame_sp;                            \
+    POP_CSP_CHECK_OVERFLOW(n + 1);                              \
+    frame_csp -= n;                                             \
+    if ((frame_csp - 1)->block_type != BLOCK_TYPE_LOOP)         \
+      /* block block/if/function, jump to end of block */       \
+      frame_ip = (frame_csp - 1)->end_addr;                     \
+    else /* loop block, jump to start of block */               \
+      frame_ip = (frame_csp - 1)->start_addr;                   \
+    /* copy return value of block */                            \
+    frame_sp = (frame_csp - 1)->frame_sp;                       \
+    switch ((frame_csp - 1)->return_type) {                     \
+      case VALUE_TYPE_I32:                                      \
+        PUSH_I32(*(frame_sp_old - 1));                          \
+        break;                                                  \
+      case VALUE_TYPE_I64:                                      \
+        PUSH_I64(GET_I64_FROM_ADDR(frame_sp_old - 2));          \
+        break;                                                  \
+      case VALUE_TYPE_F32:                                      \
+        PUSH_F32(*(float32*)(frame_sp_old - 1));                \
+        break;                                                  \
+      case VALUE_TYPE_F64:                                      \
+        PUSH_F64(GET_F64_FROM_ADDR(frame_sp_old - 2));          \
+        break;                                                  \
+    }                                                           \
+  } while (0)
+
+#define local_off(n) (frame_lp + cur_func->local_offsets[n])
+
+#define LOCAL_I32(n) (*(int32*)(local_off(n)))
+
+#define SET_LOCAL_I32(N, val) do {              \
+    int n = (N);                                \
+    *(int32*)(local_off(n)) = (int32)(val);     \
+  } while (0)
+
+#define LOCAL_F32(n) (*(float32*)(local_off(n)))
+
+#define SET_LOCAL_F32(N, val) do {              \
+    int n = (N);                                \
+    *(float32*)(local_off(n)) = (float32)(val); \
+  } while (0)
+
+#define LOCAL_I64(n) (GET_I64_FROM_ADDR(local_off(n)))
+
+#define SET_LOCAL_I64(N, val) do {              \
+    int n = (N);                                \
+    PUT_I64_TO_ADDR(local_off(n), val);         \
+  } while (0)
+
+#define LOCAL_F64(n) (GET_F64_FROM_ADDR(local_off(n)))
+
+#define SET_LOCAL_F64(N, val) do {              \
+    int n = (N);                                \
+    PUT_F64_TO_ADDR(local_off(n), val);         \
+  } while (0)
+
+/* Pop the given number of elements from the given frame's stack.  */
+#define POP(N) do {                             \
+    int n = (N);                                \
+    frame_sp -= n;                              \
+  } while (0)
+
+#define SYNC_ALL_TO_FRAME() do {                \
+    frame->sp = frame_sp;                       \
+    frame->ip = frame_ip;                       \
+    frame->csp = frame_csp;                     \
+  } while (0)
+
+#define UPDATE_ALL_FROM_FRAME() do {            \
+    frame_sp = frame->sp;                       \
+    frame_ip = frame->ip;                       \
+    frame_csp = frame->csp;                     \
+  } while (0)
+
+#define read_leb_uint64(p, p_end, res) do {     \
+  uint32 _off = 0;                              \
+  res = read_leb(p, &_off, 64, false);          \
+  p += _off;                                    \
+} while (0)
+
+#define read_leb_int64(p, p_end, res) do {      \
+  uint32 _off = 0;                              \
+  res = (int64)read_leb(p, &_off, 64, true);    \
+  p += _off;                                    \
+} while (0)
+
+#define read_leb_uint32(p, p_end, res) do {     \
+  uint32 _off = 0;                              \
+  res = (uint32)read_leb(p, &_off, 32, false);  \
+  p += _off;                                    \
+} while (0)
+
+#define read_leb_int32(p, p_end, res) do {      \
+  uint32 _off = 0;                              \
+  res = (int32)read_leb(p, &_off, 32, true);    \
+  p += _off;                                    \
+} while (0)
+
+#define read_leb_uint8(p, p_end, res) do {      \
+  uint32 _off = 0;                              \
+  res = (uint8)read_leb(p, &_off, 7, false);    \
+  p += _off;                                    \
+} while (0)
+
+#define RECOVER_CONTEXT(new_frame) do {                              \
+    frame = (new_frame);                                             \
+    cur_func = frame->function;                                      \
+    prev_frame = frame->prev_frame;                                  \
+    frame_ip = frame->ip;                                            \
+    frame_ip_end = wasm_runtime_get_func_code_end(cur_func);         \
+    frame_lp = frame->lp;                                            \
+    frame_sp = frame->sp;                                            \
+    frame_csp = frame->csp;                                          \
+  } while (0)
+
+#if WASM_ENABLE_LABELS_AS_VALUES != 0
+#define GET_OPCODE() opcode = *(frame_ip - 1);
+#else
+#define GET_OPCODE() (void)0
+#endif
+
+#define DEF_OP_LOAD(operation) do {                                  \
+    uint32 offset, flags, addr;                                      \
+    GET_OPCODE();                                                    \
+    read_leb_uint32(frame_ip, frame_ip_end, flags);                  \
+    read_leb_uint32(frame_ip, frame_ip_end, offset);                 \
+    addr = POP_I32();                                                \
+    CHECK_MEMORY_OVERFLOW();                                         \
+    operation;                                                       \
+    (void)flags;                                                     \
+  } while (0)
+
+#define DEF_OP_STORE(sval_type, sval_op_type, operation) do {        \
+    uint32 offset, flags, addr;                                      \
+    sval_type sval;                                                  \
+    GET_OPCODE();                                                    \
+    read_leb_uint32(frame_ip, frame_ip_end, flags);                  \
+    read_leb_uint32(frame_ip, frame_ip_end, offset);                 \
+    sval = POP_##sval_op_type();                                     \
+    addr = POP_I32();                                                \
+    CHECK_MEMORY_OVERFLOW();                                         \
+    operation;                                                       \
+    (void)flags;                                                     \
+  } while (0)
+
+#define DEF_OP_I_CONST(ctype, src_op_type) do {                      \
+    ctype cval;                                                      \
+    read_leb_##ctype(frame_ip, frame_ip_end, cval);                  \
+    PUSH_##src_op_type(cval);                                        \
+  } while (0)
+
+#define DEF_OP_EQZ(src_op_type) do {                                 \
+    uint32 val;                                                      \
+    val = POP_##src_op_type() == 0;                                  \
+    PUSH_I32(val);                                                   \
+  } while (0)
+
+#define DEF_OP_CMP(src_type, src_op_type, cond) do {                 \
+    uint32 res;                                                      \
+    src_type val1, val2;                                             \
+    val2 = POP_##src_op_type();                                      \
+    val1 = POP_##src_op_type();                                      \
+    res = val1 cond val2;                                            \
+    PUSH_I32(res);                                                   \
+  } while (0)
+
+#define DEF_OP_BIT_COUNT(src_type, src_op_type, operation) do {      \
+    src_type val1, val2;                                             \
+    val1 = POP_##src_op_type();                                      \
+    val2 = operation(val1);                                          \
+    PUSH_##src_op_type(val2);                                        \
+  } while (0)
+
+#define DEF_OP_NUMERIC(src_type1, src_type2, src_op_type, operation) do {   \
+    frame_sp -= sizeof(src_type2)/sizeof(uint32);                           \
+    *(src_type1*)(frame_sp - sizeof(src_type1)/sizeof(uint32)) operation##= \
+    *(src_type2*)(frame_sp);                                                \
+  } while (0)
+
+#define DEF_OP_MATH(src_type, src_op_type, method) do {              \
+    src_type val;                                                    \
+    val = POP_##src_op_type();                                       \
+    PUSH_##src_op_type(method(val));                                 \
+  } while (0)
+
+#define DEF_OP_TRUNC(dst_type, dst_op_type, src_type, src_op_type,   \
+                     min_cond, max_cond) do {                        \
+    src_type value = POP_##src_op_type();                            \
+    if (isnan(value)) {                                              \
+      wasm_runtime_set_exception(module,                             \
+                                 "invalid conversion to integer");   \
+      goto got_exception;                                            \
+    }                                                                \
+    else if (value min_cond || value max_cond) {                     \
+      wasm_runtime_set_exception(module, "integer overflow");        \
+      goto got_exception;                                            \
+    }                                                                \
+    PUSH_##dst_op_type(((dst_type)value));                           \
+  } while (0)
+
+#define DEF_OP_CONVERT(dst_type, dst_op_type,                        \
+                       src_type, src_op_type) do {                   \
+    dst_type value = (dst_type)(src_type)POP_##src_op_type();        \
+    PUSH_##dst_op_type(value);                                       \
+  } while (0)
+
+#define GET_LOCAL_INDEX_AND_TYPE() do {                             \
+    param_count = cur_func->u.func->func_type->param_count;         \
+    local_count = cur_func->u.func->local_count;                    \
+    read_leb_uint32(frame_ip, frame_ip_end, local_idx);             \
+    wasm_assert(local_idx < param_count + local_count);             \
+    if (local_idx < param_count)                                    \
+      local_type = cur_func->u.func->func_type->types[local_idx];   \
+    else                                                            \
+      local_type =                                                  \
+        cur_func->u.func->local_types[local_idx - param_count];     \
+  } while (0)
+
+static inline int32
+sign_ext_8_32(int8 val)
+{
+    if (val & 0x80)
+        return val | 0xffffff00;
+    return val;
+}
+
+static inline int32
+sign_ext_16_32(int16 val)
+{
+    if (val & 0x8000)
+        return val | 0xffff0000;
+    return val;
+}
+
+static inline int64
+sign_ext_8_64(int8 val)
+{
+    if (val & 0x80)
+        return val | 0xffffffffffffff00;
+    return val;
+}
+
+static inline int64
+sign_ext_16_64(int16 val)
+{
+    if (val & 0x8000)
+        return val | 0xffffffffffff0000;
+    return val;
+}
+
+static inline int64
+sign_ext_32_64(int32 val)
+{
+    if (val & 0x80000000)
+        return val | 0xffffffff00000000;
+    return val;
+}
+
+static inline void
+word_copy(uint32 *dest, uint32 *src, unsigned num)
+{
+    for (; num > 0; num--)
+        *dest++ = *src++;
+}
+
+static inline WASMInterpFrame*
+ALLOC_FRAME(WASMThread *self, uint32 size, WASMInterpFrame *prev_frame)
+{
+    WASMInterpFrame *frame = wasm_thread_alloc_wasm_frame(self, size);
+
+    if (frame)
+        frame->prev_frame = prev_frame;
+    else {
+        wasm_runtime_set_exception(self->module_inst,
+                                   "WASM interp failed: stack overflow.");
+    }
+
+    return frame;
+}
+
+static inline void
+FREE_FRAME(WASMThread *self, WASMInterpFrame *frame)
+{
+    wasm_thread_free_wasm_frame(self, frame);
+}
+
+typedef void (*GenericFunctionPointer)();
+int64 invokeNative(uint32 *args, uint32 sz, GenericFunctionPointer f);
+
+typedef float64 (*Float64FuncPtr)(uint32*, uint32, GenericFunctionPointer);
+typedef float32 (*Float32FuncPtr)(uint32*, uint32, GenericFunctionPointer);
+typedef int64 (*Int64FuncPtr)(uint32*, uint32, GenericFunctionPointer);
+typedef int32 (*Int32FuncPtr)(uint32*, uint32, GenericFunctionPointer);
+typedef void (*VoidFuncPtr)(uint32*, uint32, GenericFunctionPointer);
+
+static Int64FuncPtr invokeNative_Int64 = (Int64FuncPtr)invokeNative;
+static Int32FuncPtr invokeNative_Int32 = (Int32FuncPtr)invokeNative;
+static Float64FuncPtr invokeNative_Float64 = (Float64FuncPtr)invokeNative;
+static Float32FuncPtr invokeNative_Float32 = (Float32FuncPtr)invokeNative;
+static VoidFuncPtr invokeNative_Void = (VoidFuncPtr)invokeNative;
+
+static void
+wasm_interp_call_func_native(WASMThread *self,
+                             WASMFunctionInstance *cur_func,
+                             WASMInterpFrame *prev_frame)
+{
+    unsigned local_cell_num = 2;
+    WASMInterpFrame *frame;
+    typedef void (*F)(WASMThread*, uint32 *argv);
+    union { F f; void *v; } u;
+    uint32 argv_buf[32], *argv, argc = cur_func->param_cell_num;
+
+    if (!(frame = ALLOC_FRAME
+                (self, wasm_interp_interp_frame_size(local_cell_num), 
prev_frame)))
+        return;
+
+    frame->function = cur_func;
+    frame->ip = NULL;
+    frame->sp = frame->lp + local_cell_num;
+
+    wasm_thread_set_cur_frame (self, frame);
+
+    if (argc <= 32)
+        argv = argv_buf;
+    else {
+        if (!(argv = wasm_malloc(sizeof(uint32) * argc))) {
+            wasm_runtime_set_exception(self->module_inst,
+                    "WASM call native failed: allocate memory failed.");
+            return;
+        }
+    }
+
+    word_copy(argv, frame->lp, argc);
+
+    u.v = cur_func->u.func_import->func_ptr_linked;
+    {
+        WASMType *func_type = cur_func->u.func_import->func_type;
+        uint8 ret_type = func_type->result_count
+                         ? func_type->types[func_type->param_count]
+                         : VALUE_TYPE_VOID;
+        GenericFunctionPointer f = (GenericFunctionPointer)(uintptr_t)u.v;
+
+        if (func_type->result_count == 0) {
+            invokeNative_Void(argv, argc, f);
+        }
+        else {
+            switch (ret_type) {
+                case VALUE_TYPE_I32:
+                    argv[0] = invokeNative_Int32(argv, argc, f);
+                    break;
+                case VALUE_TYPE_I64:
+                    PUT_I64_TO_ADDR(argv, invokeNative_Int64(argv, argc, f));
+                    break;
+                case VALUE_TYPE_F32:
+                    *(float32*)argv = invokeNative_Float32(argv, argc, f);
+                    break;
+                case VALUE_TYPE_F64:
+                    PUT_F64_TO_ADDR(argv, invokeNative_Float64(argv, argc, f));
+                    break;
+            }
+        }
+    }
+
+    if (cur_func->ret_cell_num == 1) {
+        prev_frame->sp[0] = argv[0];
+        prev_frame->sp++;
+    }
+    else if (cur_func->ret_cell_num == 2) {
+        prev_frame->sp[0] = argv[0];
+        prev_frame->sp[1] = argv[1];
+        prev_frame->sp += 2;
+    }
+
+    if (argc > 32)
+        wasm_free(argv);
+
+    FREE_FRAME(self, frame);
+    wasm_thread_set_cur_frame(self, prev_frame);
+}
+
+#if WASM_ENABLE_LABELS_AS_VALUES != 0
+
+#define HANDLE_OP(opcode) HANDLE_##opcode
+#define FETCH_OPCODE_AND_DISPATCH() goto *handle_table[*frame_ip++]
+#define HANDLE_OP_END() FETCH_OPCODE_AND_DISPATCH()
+
+#else   /* else of WASM_ENABLE_LABELS_AS_VALUES */
+
+#define HANDLE_OP(opcode) case opcode
+#define HANDLE_OP_END() continue
+
+#endif  /* end of WASM_ENABLE_LABELS_AS_VALUES */
+
+static void
+wasm_interp_call_func_bytecode(WASMThread *self,
+                               WASMFunctionInstance *cur_func,
+                               WASMInterpFrame *prev_frame)
+{
+  WASMModuleInstance *module = self->module_inst;
+  WASMMemoryInstance *memory = module->default_memory;
+  int32 heap_base_offset = memory ? memory->heap_base_offset : 0;
+  WASMTableInstance *table = module->default_table;
+  uint8 opcode_IMPDEP2 = WASM_OP_IMPDEP2;
+  WASMInterpFrame *frame = NULL;
+  /* Points to this special opcode so as to jump to the
+     call_method_from_entry.  */
+  register uint8  *frame_ip = &opcode_IMPDEP2; /* cache of frame->ip */
+  register uint32 *frame_lp = NULL;  /* cache of frame->lp */
+  register uint32 *frame_sp = NULL;  /* cache of frame->sp */
+  WASMBranchBlock *frame_csp = NULL;
+  uint8 *frame_ip_end = frame_ip + 1;
+  uint8 opcode, block_ret_type;
+  uint32 *depths = NULL;
+  uint32 depth_buf[BR_TABLE_TMP_BUF_LEN];
+  uint32 i, depth, cond, count, fidx, tidx, frame_size = 0, all_cell_num = 0;
+  int32 didx, val;
+  uint8 *else_addr, *end_addr;
+  uint8 *maddr = NULL;
+
+#if WASM_ENABLE_LABELS_AS_VALUES != 0
+  #define HANDLE_OPCODE(op) &&HANDLE_##op
+  DEFINE_GOTO_TABLE (handle_table);
+  #undef HANDLE_OPCODE
+#endif
+
+  /* Size of memory load.
+     This starts with the first memory load operator at opcode 0x28 */
+  uint32 LOAD_SIZE[] = {
+    4, 8, 4, 8, 1, 1, 2, 2, 1, 1, 2, 2, 4, 4,   /* loads */
+    4, 8, 4, 8, 1, 2, 1, 2, 4 };                /* stores */
+
+#if WASM_ENABLE_LABELS_AS_VALUES == 0
+  while (frame_ip < frame_ip_end) {
+    opcode = *frame_ip++;
+    switch (opcode) {
+#else
+      FETCH_OPCODE_AND_DISPATCH ();
+#endif
+      /* control instructions */
+      HANDLE_OP (WASM_OP_UNREACHABLE):
+        wasm_runtime_set_exception(module, "unreachable");
+        goto got_exception;
+
+      HANDLE_OP (WASM_OP_NOP):
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_BLOCK):
+        read_leb_uint32(frame_ip, frame_ip_end, block_ret_type);
+
+        if (!wasm_loader_find_block_addr(module->module,
+                                         frame_ip, frame_ip_end,
+                                         BLOCK_TYPE_BLOCK,
+                                         &else_addr, &end_addr,
+                                         NULL, 0)) {
+          wasm_runtime_set_exception(module, "find block address failed");
+          goto got_exception;
+        }
+
+        PUSH_CSP(BLOCK_TYPE_BLOCK, block_ret_type, frame_ip, NULL, end_addr);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_LOOP):
+        read_leb_uint32(frame_ip, frame_ip_end, block_ret_type);
+
+        if (!wasm_loader_find_block_addr(module->module,
+                                         frame_ip, frame_ip_end,
+                                         BLOCK_TYPE_LOOP,
+                                         &else_addr, &end_addr,
+                                         NULL, 0)) {
+          wasm_runtime_set_exception(module, "find block address failed");
+          goto got_exception;
+        }
+
+        PUSH_CSP(BLOCK_TYPE_LOOP, block_ret_type, frame_ip, NULL, end_addr);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_IF):
+        read_leb_uint32(frame_ip, frame_ip_end, block_ret_type);
+
+        if (!wasm_loader_find_block_addr(module->module,
+                                         frame_ip, frame_ip_end,
+                                         BLOCK_TYPE_IF,
+                                         &else_addr, &end_addr,
+                                         NULL, 0)) {
+          wasm_runtime_set_exception(module, "find block address failed");
+          goto got_exception;
+        }
+
+        cond = POP_I32();
+
+        PUSH_CSP(BLOCK_TYPE_IF, block_ret_type, frame_ip, else_addr, end_addr);
+
+        /* condition of the if branch is false, else condition is met */
+        if (cond == 0) {
+          /* if there is no else branch, go to the end addr */
+          if (else_addr == NULL) {
+            POP_CSP();
+            frame_ip = end_addr + 1;
+          }
+          /* if there is an else branch, go to the else addr */
+          else
+            frame_ip = else_addr + 1;
+        }
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_ELSE):
+        /* comes from the if branch in WASM_OP_IF */
+        frame_ip = (frame_csp - 1)->end_addr;
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_END):
+        if (frame_csp > frame->csp_bottom + 1) {
+          POP_CSP();
+        }
+        else { /* end of function, treat as WASM_OP_RETURN */
+          frame_sp -= cur_func->ret_cell_num;
+          for (i = 0; i < cur_func->ret_cell_num; i++) {
+            *prev_frame->sp++ = frame_sp[i];
+          }
+          goto return_func;
+        }
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_BR):
+        read_leb_uint32(frame_ip, frame_ip_end, depth);
+        POP_CSP_N(depth);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_BR_IF):
+        read_leb_uint32(frame_ip, frame_ip_end, depth);
+        cond = POP_I32();
+        if (cond)
+          POP_CSP_N(depth);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_BR_TABLE):
+        read_leb_uint32(frame_ip, frame_ip_end, count);
+        if (count <= BR_TABLE_TMP_BUF_LEN)
+          depths = depth_buf;
+        else {
+          if (!(depths = wasm_malloc(sizeof(uint32) * count))) {
+            wasm_runtime_set_exception(module,
+                                       "WASM interp failed: "
+                                       "allocate memory failed.");
+            goto got_exception;
+          }
+        }
+        for (i = 0; i < count; i++) {
+          read_leb_uint32(frame_ip, frame_ip_end, depths[i]);
+        }
+        read_leb_uint32(frame_ip, frame_ip_end, depth);
+        didx = POP_I32();
+        if (didx >= 0 && (uint32)didx < count) {
+          depth = depths[didx];
+        }
+        if (depths != depth_buf) {
+          wasm_free(depths);
+          depths = NULL;
+        }
+        POP_CSP_N(depth);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_RETURN):
+        frame_sp -= cur_func->ret_cell_num;
+        for (i = 0; i < cur_func->ret_cell_num; i++) {
+          *prev_frame->sp++ = frame_sp[i];
+        }
+        goto return_func;
+
+      HANDLE_OP (WASM_OP_CALL):
+        read_leb_uint32(frame_ip, frame_ip_end, fidx);
+        wasm_assert(fidx < module->function_count);
+        cur_func = module->functions + fidx;
+        goto call_func_from_interp;
+
+      HANDLE_OP (WASM_OP_CALL_INDIRECT):
+        {
+          WASMType *cur_type, *cur_func_type;
+          /* TODO: test */
+          read_leb_uint32(frame_ip, frame_ip_end, tidx);
+          if (tidx >= module->module->type_count) {
+            wasm_runtime_set_exception(module, "type index is overflow");
+            goto got_exception;
+          }
+          cur_type = module->module->types[tidx];
+
+          /* to skip 0x00 here */
+          frame_ip++;
+          val = POP_I32();
+
+          if (val < 0 || val >= (int32)table->cur_size) {
+            wasm_runtime_set_exception(module, "undefined element");
+            goto got_exception;
+          }
+
+          fidx = ((uint32*)table->base_addr)[val];
+          if (fidx >= module->function_count) {
+            wasm_runtime_set_exception(module, "function index is overflow");
+            goto got_exception;
+          }
+
+          cur_func = module->functions + fidx;
+
+          if (cur_func->is_import_func)
+            cur_func_type = cur_func->u.func_import->func_type;
+          else
+            cur_func_type = cur_func->u.func->func_type;
+          if (!wasm_type_equal(cur_type, cur_func_type)) {
+            wasm_runtime_set_exception(module, "indirect call type mismatch");
+            goto got_exception;
+          }
+          goto call_func_from_interp;
+        }
+
+      /* parametric instructions */
+      HANDLE_OP (WASM_OP_DROP):
+        {
+          wasm_runtime_set_exception(module,
+                                     "WASM interp failed: unsupported 
opcode.");
+          goto got_exception;
+        }
+
+      HANDLE_OP (WASM_OP_DROP_32):
+        {
+          frame_sp--;
+          HANDLE_OP_END ();
+        }
+
+      HANDLE_OP (WASM_OP_DROP_64):
+        {
+          frame_sp -= 2;
+          HANDLE_OP_END ();
+        }
+
+      HANDLE_OP (WASM_OP_SELECT):
+        {
+          wasm_runtime_set_exception(module,
+                                     "WASM interp failed: unsupported 
opcode.");
+          goto got_exception;
+        }
+
+      HANDLE_OP (WASM_OP_SELECT_32):
+        {
+          cond = POP_I32();
+          frame_sp--;
+          if (!cond)
+            *(frame_sp - 1) = *frame_sp;
+          HANDLE_OP_END ();
+        }
+
+      HANDLE_OP (WASM_OP_SELECT_64):
+        {
+          cond = POP_I32();
+          frame_sp -= 2;
+          if (!cond) {
+            *(frame_sp - 2) = *frame_sp;
+            *(frame_sp - 1) = *(frame_sp + 1);
+          }
+          HANDLE_OP_END ();
+        }
+
+      /* variable instructions */
+      HANDLE_OP (WASM_OP_GET_LOCAL):
+        {
+          uint32 local_idx, param_count, local_count;
+          uint8 local_type;
+
+          GET_LOCAL_INDEX_AND_TYPE();
+
+          switch (local_type) {
+            case VALUE_TYPE_I32:
+              PUSH_I32(LOCAL_I32(local_idx));
+              break;
+            case VALUE_TYPE_F32:
+              PUSH_F32(LOCAL_F32(local_idx));
+              break;
+            case VALUE_TYPE_I64:
+              PUSH_I64(LOCAL_I64(local_idx));
+              break;
+            case VALUE_TYPE_F64:
+              PUSH_F64(LOCAL_F64(local_idx));
+              break;
+            default:
+              wasm_runtime_set_exception(module,
+                                         "invalid local type");
+              goto got_exception;
+          }
+          (void)local_count;
+          HANDLE_OP_END ();
+        }
+
+      HANDLE_OP (WASM_OP_SET_LOCAL):
+        {
+          uint32 local_idx, param_count, local_count;
+          uint8 local_type;
+
+          GET_LOCAL_INDEX_AND_TYPE();
+
+          switch (local_type) {
+            case VALUE_TYPE_I32:
+              SET_LOCAL_I32(local_idx, POP_I32());
+              break;
+            case VALUE_TYPE_F32:
+              SET_LOCAL_F32(local_idx, POP_F32());
+              break;
+            case VALUE_TYPE_I64:
+              SET_LOCAL_I64(local_idx, POP_I64());
+              break;
+            case VALUE_TYPE_F64:
+              SET_LOCAL_F64(local_idx, POP_F64());
+              break;
+            default:
+              wasm_runtime_set_exception(module,
+                                         "invalid local type");
+              goto got_exception;
+          }
+          (void)local_count;
+          HANDLE_OP_END ();
+        }
+
+      HANDLE_OP (WASM_OP_TEE_LOCAL):
+        {
+          uint32 local_idx, param_count, local_count;
+          uint8 local_type;
+
+          GET_LOCAL_INDEX_AND_TYPE();
+
+          switch (local_type) {
+            case VALUE_TYPE_I32:
+              SET_LOCAL_I32(local_idx, *(frame_sp - 1));
+              break;
+            case VALUE_TYPE_F32:
+              SET_LOCAL_F32(local_idx, *(float32*)(frame_sp - 1));
+              break;
+            case VALUE_TYPE_I64:
+              SET_LOCAL_I64(local_idx, GET_I64_FROM_ADDR(frame_sp - 2));
+              break;
+            case VALUE_TYPE_F64:
+              SET_LOCAL_F64(local_idx, GET_F64_FROM_ADDR(frame_sp - 2));
+              break;
+            default:
+              wasm_runtime_set_exception(module, "invalid local type");
+              goto got_exception;
+          }
+          (void)local_count;
+          HANDLE_OP_END ();
+        }
+
+      HANDLE_OP (WASM_OP_GET_GLOBAL):
+        {
+          WASMGlobalInstance *global;
+          uint32 global_idx;
+
+          read_leb_uint32(frame_ip, frame_ip_end, global_idx);
+
+          global = get_global(module, global_idx);
+          wasm_assert(global && global_idx < module->global_count);
+
+          switch (global->type) {
+            case VALUE_TYPE_I32:
+              PUSH_I32(*(uint32*)get_global_addr(memory, global));
+              break;
+            case VALUE_TYPE_F32:
+              PUSH_F32(*(float32*)get_global_addr(memory, global));
+              break;
+            case VALUE_TYPE_I64:
+              PUSH_I64(*(uint64*)get_global_addr(memory, global));
+              break;
+            case VALUE_TYPE_F64:
+              PUSH_F64(*(float64*)get_global_addr(memory, global));
+              break;
+            default:
+              wasm_runtime_set_exception(module, "invalid global type");
+              goto got_exception;
+          }
+          HANDLE_OP_END ();
+        }
+
+      HANDLE_OP (WASM_OP_SET_GLOBAL):
+        {
+          WASMGlobalInstance *global;
+          uint32 global_idx;
+          uint8 *global_addr;
+
+          read_leb_uint32(frame_ip, frame_ip_end, global_idx);
+
+          global = get_global(module, global_idx);
+          wasm_assert(global && global_idx < module->global_count);
+
+          global_addr = get_global_addr(memory, global);
+          switch (global->type) {
+            case VALUE_TYPE_I32:
+              *(uint32*)global_addr = POP_I32();
+              break;
+            case VALUE_TYPE_F32:
+              *(float32*)global_addr = POP_F32();
+              break;
+            case VALUE_TYPE_I64:
+              PUT_I64_TO_ADDR((uint32*)global_addr, POP_I64());
+              break;
+            case VALUE_TYPE_F64:
+              PUT_F64_TO_ADDR((uint32*)global_addr, POP_F64());
+              break;
+            default:
+              wasm_runtime_set_exception(module, "invalid global type");
+              goto got_exception;
+          }
+          HANDLE_OP_END ();
+        }
+
+      /* memory load instructions */
+      HANDLE_OP (WASM_OP_I32_LOAD):
+      HANDLE_OP (WASM_OP_I64_LOAD):
+      HANDLE_OP (WASM_OP_F32_LOAD):
+      HANDLE_OP (WASM_OP_F64_LOAD):
+      HANDLE_OP (WASM_OP_I32_LOAD8_S):
+      HANDLE_OP (WASM_OP_I32_LOAD8_U):
+      HANDLE_OP (WASM_OP_I32_LOAD16_S):
+      HANDLE_OP (WASM_OP_I32_LOAD16_U):
+      HANDLE_OP (WASM_OP_I64_LOAD8_S):
+      HANDLE_OP (WASM_OP_I64_LOAD8_U):
+      HANDLE_OP (WASM_OP_I64_LOAD16_S):
+      HANDLE_OP (WASM_OP_I64_LOAD16_U):
+      HANDLE_OP (WASM_OP_I64_LOAD32_S):
+      HANDLE_OP (WASM_OP_I64_LOAD32_U):
+        {
+          uint32 offset, flags, addr;
+          GET_OPCODE();
+          read_leb_uint32(frame_ip, frame_ip_end, flags);
+          read_leb_uint32(frame_ip, frame_ip_end, offset);
+          addr = POP_I32();
+          CHECK_MEMORY_OVERFLOW();
+#if WASM_ENABLE_LABELS_AS_VALUES != 0
+          static const void *handle_load_table[] = {
+              &&HANDLE_LOAD_WASM_OP_I32_LOAD,
+              &&HANDLE_LOAD_WASM_OP_I64_LOAD,
+              &&HANDLE_LOAD_WASM_OP_F32_LOAD,
+              &&HANDLE_LOAD_WASM_OP_F64_LOAD,
+              &&HANDLE_LOAD_WASM_OP_I32_LOAD8_S,
+              &&HANDLE_LOAD_WASM_OP_I32_LOAD8_U,
+              &&HANDLE_LOAD_WASM_OP_I32_LOAD16_S,
+              &&HANDLE_LOAD_WASM_OP_I32_LOAD16_U,
+              &&HANDLE_LOAD_WASM_OP_I64_LOAD8_S,
+              &&HANDLE_LOAD_WASM_OP_I64_LOAD8_U,
+              &&HANDLE_LOAD_WASM_OP_I64_LOAD16_S,
+              &&HANDLE_LOAD_WASM_OP_I64_LOAD16_U,
+              &&HANDLE_LOAD_WASM_OP_I64_LOAD32_S,
+              &&HANDLE_LOAD_WASM_OP_I64_LOAD32_U
+          };
+          #define HANDLE_OP_LOAD(opcode) HANDLE_LOAD_##opcode
+          goto *handle_load_table[opcode - WASM_OP_I32_LOAD];
+#else
+          #define HANDLE_OP_LOAD(opcode) case opcode
+          switch (opcode)
+#endif
+          {
+            HANDLE_OP_LOAD(WASM_OP_I32_LOAD):
+              PUSH_I32(*(int32*)maddr);
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_I64_LOAD):
+              PUSH_I64(GET_I64_FROM_ADDR((uint32*)maddr));
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_F32_LOAD):
+              PUSH_F32(*(float32*)maddr);
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_F64_LOAD):
+              PUSH_F64(GET_F64_FROM_ADDR((uint32*)maddr));
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_I32_LOAD8_S):
+              PUSH_I32(sign_ext_8_32(*(int8*)maddr));
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_I32_LOAD8_U):
+              PUSH_I32((uint32)(*(uint8*)maddr));
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_I32_LOAD16_S):
+              PUSH_I32(sign_ext_16_32(*(int16*)maddr));
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_I32_LOAD16_U):
+              PUSH_I32((uint32)(*(uint16*)maddr));
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_I64_LOAD8_S):
+              PUSH_I64(sign_ext_8_64(*(int8*)maddr));
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_I64_LOAD8_U):
+              PUSH_I64((uint64)(*(uint8*)maddr));
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_I64_LOAD16_S):
+              PUSH_I64(sign_ext_16_64(*(int16*)maddr));
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_I64_LOAD16_U):
+              PUSH_I64((uint64)(*(uint16*)maddr));
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_I64_LOAD32_S):
+              PUSH_I64(sign_ext_32_64(*(int32*)maddr));
+              HANDLE_OP_END();
+            HANDLE_OP_LOAD(WASM_OP_I64_LOAD32_U):
+              PUSH_I64((uint64)(*(uint32*)maddr));
+              HANDLE_OP_END();
+          }
+          (void)flags;
+          HANDLE_OP_END ();
+        }
+
+      /* memory store instructions */
+      HANDLE_OP (WASM_OP_F32_STORE):
+        {
+          uint32 offset, flags, addr;
+          GET_OPCODE();
+          read_leb_uint32(frame_ip, frame_ip_end, flags);
+          read_leb_uint32(frame_ip, frame_ip_end, offset);
+          frame_sp--;
+          addr = POP_I32();
+          CHECK_MEMORY_OVERFLOW();
+          *(uint32*)maddr = frame_sp[1];
+          (void)flags;
+          HANDLE_OP_END ();
+        }
+
+      HANDLE_OP (WASM_OP_F64_STORE):
+        {
+          uint32 offset, flags, addr;
+          GET_OPCODE();
+          read_leb_uint32(frame_ip, frame_ip_end, flags);
+          read_leb_uint32(frame_ip, frame_ip_end, offset);
+          frame_sp -= 2;
+          addr = POP_I32();
+          CHECK_MEMORY_OVERFLOW();
+          *(uint32*)maddr = frame_sp[1];
+          *((uint32*)maddr + 1) = frame_sp[2];
+          (void)flags;
+          HANDLE_OP_END ();
+        }
+
+      HANDLE_OP (WASM_OP_I32_STORE):
+      HANDLE_OP (WASM_OP_I32_STORE8):
+      HANDLE_OP (WASM_OP_I32_STORE16):
+        {
+          uint32 offset, flags, addr;
+          uint32 sval;
+          GET_OPCODE();
+          read_leb_uint32(frame_ip, frame_ip_end, flags);
+          read_leb_uint32(frame_ip, frame_ip_end, offset);
+          sval = POP_I32();
+          addr = POP_I32();
+          CHECK_MEMORY_OVERFLOW();
+          switch (opcode) {
+            case WASM_OP_I32_STORE:
+              *(int32*)maddr = sval;
+              break;
+            case WASM_OP_I32_STORE8:
+              *(uint8*)maddr = (uint8)sval;
+              break;
+            case WASM_OP_I32_STORE16:
+              *(uint16*)maddr = (uint16)sval;
+              break;
+          }
+          (void)flags;
+          HANDLE_OP_END ();
+        }
+
+      HANDLE_OP (WASM_OP_I64_STORE):
+      HANDLE_OP (WASM_OP_I64_STORE8):
+      HANDLE_OP (WASM_OP_I64_STORE16):
+      HANDLE_OP (WASM_OP_I64_STORE32):
+        {
+          uint32 offset, flags, addr;
+          uint64 sval;
+          GET_OPCODE();
+          read_leb_uint32(frame_ip, frame_ip_end, flags);
+          read_leb_uint32(frame_ip, frame_ip_end, offset);
+          sval = POP_I64();
+          addr = POP_I32();
+          CHECK_MEMORY_OVERFLOW();
+          switch (opcode) {
+            case WASM_OP_I64_STORE:
+              PUT_I64_TO_ADDR((uint32*)maddr, sval);
+              break;
+            case WASM_OP_I64_STORE8:
+              *(uint8*)maddr = (uint8)sval;
+              break;
+            case WASM_OP_I64_STORE16:
+              *(uint16*)maddr = (uint16)sval;
+              break;
+            case WASM_OP_I64_STORE32:
+              *(uint32*)maddr = (uint32)sval;
+              break;
+          }
+          (void)flags;
+          HANDLE_OP_END ();
+        }
+
+      /* memory size and memory grow instructions */
+      HANDLE_OP (WASM_OP_MEMORY_SIZE):
+      {
+        uint32 reserved;
+        read_leb_uint32(frame_ip, frame_ip_end, reserved);
+        PUSH_I32(memory->cur_page_count);
+        (void)reserved;
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_MEMORY_GROW):
+      {
+        uint32 reserved, delta, prev_page_count = memory->cur_page_count;
+
+        read_leb_uint32(frame_ip, frame_ip_end, reserved);
+        delta = POP_I32();
+
+        if (!wasm_runtime_enlarge_memory(module, delta)) {
+          /* fail to memory.grow, return -1 */
+          PUSH_I32(-1);
+          if (wasm_runtime_get_exception(module)) {
+            printf("%s\n", wasm_runtime_get_exception(module));
+            wasm_runtime_set_exception(module, NULL);
+          }
+        }
+        else {
+          /* success, return previous page count */
+          PUSH_I32(prev_page_count);
+          /* update the memory instance ptr */
+          memory = module->default_memory;
+        }
+
+        (void)reserved;
+        HANDLE_OP_END ();
+      }
+
+      /* constant instructions */
+      HANDLE_OP (WASM_OP_I32_CONST):
+        DEF_OP_I_CONST(int32, I32);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_CONST):
+        DEF_OP_I_CONST(int64, I64);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_CONST):
+        {
+          uint8 *p_float = (uint8*)frame_sp++;
+          for (i = 0; i < sizeof(float32); i++)
+            *p_float++ = *frame_ip++;
+          HANDLE_OP_END ();
+        }
+
+      HANDLE_OP (WASM_OP_F64_CONST):
+        {
+          uint8 *p_float = (uint8*)frame_sp++;
+          frame_sp++;
+          for (i = 0; i < sizeof(float64); i++)
+            *p_float++ = *frame_ip++;
+          HANDLE_OP_END ();
+        }
+
+      /* comparison instructions of i32 */
+      HANDLE_OP (WASM_OP_I32_EQZ):
+        DEF_OP_EQZ(I32);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_EQ):
+        DEF_OP_CMP(uint32, I32, ==);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_NE):
+        DEF_OP_CMP(uint32, I32, !=);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_LT_S):
+        DEF_OP_CMP(int32, I32, <);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_LT_U):
+        DEF_OP_CMP(uint32, I32, <);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_GT_S):
+        DEF_OP_CMP(int32, I32, >);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_GT_U):
+        DEF_OP_CMP(uint32, I32, >);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_LE_S):
+        DEF_OP_CMP(int32, I32, <=);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_LE_U):
+        DEF_OP_CMP(uint32, I32, <=);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_GE_S):
+        DEF_OP_CMP(int32, I32, >=);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_GE_U):
+        DEF_OP_CMP(uint32, I32, >=);
+        HANDLE_OP_END ();
+
+      /* comparison instructions of i64 */
+      HANDLE_OP (WASM_OP_I64_EQZ):
+        DEF_OP_EQZ(I64);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_EQ):
+        DEF_OP_CMP(uint64, I64, ==);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_NE):
+        DEF_OP_CMP(uint64, I64, !=);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_LT_S):
+        DEF_OP_CMP(int64, I64, <);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_LT_U):
+        DEF_OP_CMP(uint64, I64, <);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_GT_S):
+        DEF_OP_CMP(int64, I64, >);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_GT_U):
+        DEF_OP_CMP(uint64, I64, >);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_LE_S):
+        DEF_OP_CMP(int64, I64, <=);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_LE_U):
+        DEF_OP_CMP(uint64, I64, <=);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_GE_S):
+        DEF_OP_CMP(int64, I64, >=);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_GE_U):
+        DEF_OP_CMP(uint64, I64, >=);
+        HANDLE_OP_END ();
+
+      /* comparison instructions of f32 */
+      HANDLE_OP (WASM_OP_F32_EQ):
+        DEF_OP_CMP(float32, F32, ==);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_NE):
+        DEF_OP_CMP(float32, F32, !=);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_LT):
+        DEF_OP_CMP(float32, F32, <);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_GT):
+        DEF_OP_CMP(float32, F32, >);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_LE):
+        DEF_OP_CMP(float32, F32, <=);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_GE):
+        DEF_OP_CMP(float32, F32, >=);
+        HANDLE_OP_END ();
+
+      /* comparison instructions of f64 */
+      HANDLE_OP (WASM_OP_F64_EQ):
+        DEF_OP_CMP(float64, F64, ==);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_NE):
+        DEF_OP_CMP(float64, F64, !=);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_LT):
+        DEF_OP_CMP(float64, F64, <);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_GT):
+        DEF_OP_CMP(float64, F64, >);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_LE):
+        DEF_OP_CMP(float64, F64, <=);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_GE):
+        DEF_OP_CMP(float64, F64, >=);
+        HANDLE_OP_END ();
+
+      /* numberic instructions of i32 */
+      HANDLE_OP (WASM_OP_I32_CLZ):
+        DEF_OP_BIT_COUNT(uint32, I32, clz32);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_CTZ):
+        DEF_OP_BIT_COUNT(uint32, I32, ctz32);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_POPCNT):
+        DEF_OP_BIT_COUNT(uint32, I32, popcount32);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_ADD):
+        DEF_OP_NUMERIC(uint32, uint32, I32, +);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_SUB):
+        DEF_OP_NUMERIC(uint32, uint32, I32, -);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_MUL):
+        DEF_OP_NUMERIC(uint32, uint32, I32, *);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_DIV_S):
+      {
+        int32 a, b;
+
+        b = POP_I32();
+        a = POP_I32();
+        if (a == (int32)0x80000000 && b == -1) {
+          wasm_runtime_set_exception(module, "integer overflow");
+          goto got_exception;
+        }
+        if (b == 0) {
+          wasm_runtime_set_exception(module, "integer divide by zero");
+          goto got_exception;
+        }
+        PUSH_I32(a / b);
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_I32_DIV_U):
+      {
+        uint32 a, b;
+
+        b = POP_I32();
+        a = POP_I32();
+        if (b == 0) {
+          wasm_runtime_set_exception(module, "integer divide by zero");
+          goto got_exception;
+        }
+        PUSH_I32(a / b);
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_I32_REM_S):
+      {
+        int32 a, b;
+
+        b = POP_I32();
+        a = POP_I32();
+        if (a == (int32)0x80000000 && b == -1) {
+          PUSH_I32(0);
+          HANDLE_OP_END ();
+        }
+        if (b == 0) {
+          wasm_runtime_set_exception(module, "integer divide by zero");
+          goto got_exception;
+        }
+        PUSH_I32(a % b);
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_I32_REM_U):
+      {
+        uint32 a, b;
+
+        b = POP_I32();
+        a = POP_I32();
+        if (b == 0) {
+          wasm_runtime_set_exception(module, "integer divide by zero");
+          goto got_exception;
+        }
+        PUSH_I32(a % b);
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_I32_AND):
+        DEF_OP_NUMERIC(uint32, uint32, I32, &);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_OR):
+        DEF_OP_NUMERIC(uint32, uint32, I32, |);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_XOR):
+        DEF_OP_NUMERIC(uint32, uint32, I32, ^);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_SHL):
+        DEF_OP_NUMERIC(uint32, uint32, I32, <<);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_SHR_S):
+        DEF_OP_NUMERIC(int32, uint32, I32, >>);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_SHR_U):
+        DEF_OP_NUMERIC(uint32, uint32, I32, >>);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_ROTL):
+      {
+        uint32 a, b;
+
+        b = POP_I32();
+        a = POP_I32();
+        PUSH_I32(rotl32(a, b));
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_I32_ROTR):
+      {
+        uint32 a, b;
+
+        b = POP_I32();
+        a = POP_I32();
+        PUSH_I32(rotr32(a, b));
+        HANDLE_OP_END ();
+      }
+
+      /* numberic instructions of i64 */
+      HANDLE_OP (WASM_OP_I64_CLZ):
+        DEF_OP_BIT_COUNT(uint64, I64, clz64);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_CTZ):
+        DEF_OP_BIT_COUNT(uint64, I64, ctz64);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_POPCNT):
+        DEF_OP_BIT_COUNT(uint64, I64, popcount64);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_ADD):
+        DEF_OP_NUMERIC(uint64, uint64, I64, +);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_SUB):
+        DEF_OP_NUMERIC(uint64, uint64, I64, -);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_MUL):
+        DEF_OP_NUMERIC(uint64, uint64, I64, *);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_DIV_S):
+      {
+        int64 a, b;
+
+        b = POP_I64();
+        a = POP_I64();
+        if (a == (int64)0x8000000000000000LL && b == -1) {
+          wasm_runtime_set_exception(module, "integer overflow");
+          goto got_exception;
+        }
+        if (b == 0) {
+          wasm_runtime_set_exception(module, "integer divide by zero");
+          goto got_exception;
+        }
+        PUSH_I64(a / b);
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_I64_DIV_U):
+      {
+        uint64 a, b;
+
+        b = POP_I64();
+        a = POP_I64();
+        if (b == 0) {
+          wasm_runtime_set_exception(module, "integer divide by zero");
+          goto got_exception;
+        }
+        PUSH_I64(a / b);
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_I64_REM_S):
+      {
+        int64 a, b;
+
+        b = POP_I64();
+        a = POP_I64();
+        if (a == (int64)0x8000000000000000LL && b == -1) {
+          PUSH_I64(0);
+          HANDLE_OP_END ();
+        }
+        if (b == 0) {
+          wasm_runtime_set_exception(module, "integer divide by zero");
+          goto got_exception;
+        }
+        PUSH_I64(a % b);
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_I64_REM_U):
+      {
+        uint64 a, b;
+
+        b = POP_I64();
+        a = POP_I64();
+        if (b == 0) {
+          wasm_runtime_set_exception(module, "integer divide by zero");
+          goto got_exception;
+        }
+        PUSH_I64(a % b);
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_I64_AND):
+        DEF_OP_NUMERIC(uint64, uint64, I64, &);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_OR):
+        DEF_OP_NUMERIC(uint64, uint64, I64, |);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_XOR):
+        DEF_OP_NUMERIC(uint64, uint64, I64, ^);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_SHL):
+        DEF_OP_NUMERIC(uint64, uint64, I64, <<);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_SHR_S):
+        DEF_OP_NUMERIC(int64, uint64, I64, >>);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_SHR_U):
+        DEF_OP_NUMERIC(uint64, uint64, I64, >>);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_ROTL):
+      {
+        uint64 a, b;
+
+        b = POP_I64();
+        a = POP_I64();
+        PUSH_I64(rotl64(a, b));
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_I64_ROTR):
+      {
+        uint64 a, b;
+
+        b = POP_I64();
+        a = POP_I64();
+        PUSH_I64(rotr64(a, b));
+        HANDLE_OP_END ();
+      }
+
+      /* numberic instructions of f32 */
+      HANDLE_OP (WASM_OP_F32_ABS):
+        DEF_OP_MATH(float32, F32, fabs);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_NEG):
+        DEF_OP_MATH(float32, F32, -);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_CEIL):
+        DEF_OP_MATH(float32, F32, ceil);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_FLOOR):
+        DEF_OP_MATH(float32, F32, floor);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_TRUNC):
+        DEF_OP_MATH(float32, F32, trunc);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_NEAREST):
+        DEF_OP_MATH(float32, F32, rint);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_SQRT):
+        DEF_OP_MATH(float32, F32, sqrt);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_ADD):
+        DEF_OP_NUMERIC(float32, float32, F32, +);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_SUB):
+        DEF_OP_NUMERIC(float32, float32, F32, -);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_MUL):
+        DEF_OP_NUMERIC(float32, float32, F32, *);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_DIV):
+        DEF_OP_NUMERIC(float32, float32, F32, /);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_MIN):
+      {
+        float32 a, b;
+
+        b = POP_F32();
+        a = POP_F32();
+        PUSH_F32(wa_fmin(a, b));
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_F32_MAX):
+      {
+        float32 a, b;
+
+        b = POP_F32();
+        a = POP_F32();
+        PUSH_F32(wa_fmax(a, b));
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_F32_COPYSIGN):
+      {
+        float32 a, b;
+
+        b = POP_F32();
+        a = POP_F32();
+        PUSH_F32(signbit(b) ? -fabs(a) : fabs(a));
+        HANDLE_OP_END ();
+      }
+
+      /* numberic instructions of f64 */
+      HANDLE_OP (WASM_OP_F64_ABS):
+        DEF_OP_MATH(float64, F64, fabs);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_NEG):
+        DEF_OP_MATH(float64, F64, -);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_CEIL):
+        DEF_OP_MATH(float64, F64, ceil);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_FLOOR):
+        DEF_OP_MATH(float64, F64, floor);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_TRUNC):
+        DEF_OP_MATH(float64, F64, trunc);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_NEAREST):
+        DEF_OP_MATH(float64, F64, rint);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_SQRT):
+        DEF_OP_MATH(float64, F64, sqrt);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_ADD):
+        DEF_OP_NUMERIC(float64, float64, F64, +);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_SUB):
+        DEF_OP_NUMERIC(float64, float64, F64, -);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_MUL):
+        DEF_OP_NUMERIC(float64, float64, F64, *);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_DIV):
+        DEF_OP_NUMERIC(float64, float64, F64, /);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_MIN):
+      {
+        float64 a, b;
+
+        b = POP_F64();
+        a = POP_F64();
+        PUSH_F64(wa_fmin(a, b));
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_F64_MAX):
+      {
+        float64 a, b;
+
+        b = POP_F64();
+        a = POP_F64();
+        PUSH_F64(wa_fmax(a, b));
+        HANDLE_OP_END ();
+      }
+
+      HANDLE_OP (WASM_OP_F64_COPYSIGN):
+      {
+        float64 a, b;
+
+        b = POP_F64();
+        a = POP_F64();
+        PUSH_F64(signbit(b) ? -fabs(a) : fabs(a));
+        HANDLE_OP_END ();
+      }
+
+      /* conversions of i32 */
+      HANDLE_OP (WASM_OP_I32_WRAP_I64):
+        {
+          int32 value = (int32)(POP_I64() & 0xFFFFFFFFLL);
+          PUSH_I32(value);
+          HANDLE_OP_END ();
+        }
+
+      HANDLE_OP (WASM_OP_I32_TRUNC_S_F32):
+        /* Copy the float32/float64 values from WAVM, need to test more.
+           We don't use INT32_MIN/INT32_MAX/UINT32_MIN/UINT32_MAX,
+           since float/double values of ieee754 cannot precisely represent
+           all int32/uint32/int64/uint64 values, e.g.:
+           UINT32_MAX is 4294967295, but (float32)4294967295 is 4294967296.0f,
+           but not 4294967295.0f. */
+        DEF_OP_TRUNC(int32, I32, float32, F32, <= -2147483904.0f,
+                                               >= 2147483648.0f);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_TRUNC_U_F32):
+        DEF_OP_TRUNC(uint32, I32, float32, F32, <= -1.0f,
+                                                >= 4294967296.0f);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_TRUNC_S_F64):
+        DEF_OP_TRUNC(int32, I32, float64, F64, <= -2147483649.0,
+                                               >= 2147483648.0);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I32_TRUNC_U_F64):
+        DEF_OP_TRUNC(uint32, I32, float64, F64, <= -1.0 ,
+                                                >= 4294967296.0);
+        HANDLE_OP_END ();
+
+      /* conversions of i64 */
+      HANDLE_OP (WASM_OP_I64_EXTEND_S_I32):
+        DEF_OP_CONVERT(int64, I64, int32, I32);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_EXTEND_U_I32):
+        DEF_OP_CONVERT(int64, I64, uint32, I32);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_TRUNC_S_F32):
+        DEF_OP_TRUNC(int64, I64, float32, F32, <= -9223373136366403584.0f,
+                                               >= 9223372036854775808.0f);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_TRUNC_U_F32):
+        DEF_OP_TRUNC(uint64, I64, float32, F32, <= -1.0f,
+                                                >= 18446744073709551616.0f);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_TRUNC_S_F64):
+        DEF_OP_TRUNC(int64, I64, float64, F64, <= -9223372036854777856.0,
+                                               >= 9223372036854775808.0);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_I64_TRUNC_U_F64):
+        DEF_OP_TRUNC(uint64, I64, float64, F64, <= -1.0,
+                                                >= 18446744073709551616.0);
+        HANDLE_OP_END ();
+
+      /* conversions of f32 */
+      HANDLE_OP (WASM_OP_F32_CONVERT_S_I32):
+        DEF_OP_CONVERT(float32, F32, int32, I32);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_CONVERT_U_I32):
+        DEF_OP_CONVERT(float32, F32, uint32, I32);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_CONVERT_S_I64):
+        DEF_OP_CONVERT(float32, F32, int64, I64);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_CONVERT_U_I64):
+        DEF_OP_CONVERT(float32, F32, uint64, I64);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F32_DEMOTE_F64):
+        DEF_OP_CONVERT(float32, F32, float64, F64);
+        HANDLE_OP_END ();
+
+      /* conversions of f64 */
+      HANDLE_OP (WASM_OP_F64_CONVERT_S_I32):
+        DEF_OP_CONVERT(float64, F64, int32, I32);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_CONVERT_U_I32):
+        DEF_OP_CONVERT(float64, F64, uint32, I32);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_CONVERT_S_I64):
+        DEF_OP_CONVERT(float64, F64, int64, I64);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_CONVERT_U_I64):
+        DEF_OP_CONVERT(float64, F64, uint64, I64);
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_F64_PROMOTE_F32):
+        DEF_OP_CONVERT(float64, F64, float32, F32);
+        HANDLE_OP_END ();
+
+      /* reinterpretations */
+      HANDLE_OP (WASM_OP_I32_REINTERPRET_F32):
+      HANDLE_OP (WASM_OP_I64_REINTERPRET_F64):
+      HANDLE_OP (WASM_OP_F32_REINTERPRET_I32):
+      HANDLE_OP (WASM_OP_F64_REINTERPRET_I64):
+        HANDLE_OP_END ();
+
+      HANDLE_OP (WASM_OP_IMPDEP2):
+        frame = prev_frame;
+        frame_ip = frame->ip;
+        frame_sp = frame->sp;
+        frame_csp = frame->csp;
+        goto call_func_from_entry;
+
+#if WASM_ENABLE_LABELS_AS_VALUES == 0
+      default:
+        wasm_runtime_set_exception(module,
+                                   "WASM interp failed: unsupported opcode.");
+        goto got_exception;
+    }
+#endif
+
+#if WASM_ENABLE_LABELS_AS_VALUES != 0
+      HANDLE_OP (WASM_OP_IMPDEP1):
+      HANDLE_OP (WASM_OP_UNUSED_0x06):
+      HANDLE_OP (WASM_OP_UNUSED_0x07):
+      HANDLE_OP (WASM_OP_UNUSED_0x08):
+      HANDLE_OP (WASM_OP_UNUSED_0x09):
+      HANDLE_OP (WASM_OP_UNUSED_0x0a):
+      HANDLE_OP (WASM_OP_UNUSED_0x12):
+      HANDLE_OP (WASM_OP_UNUSED_0x13):
+      HANDLE_OP (WASM_OP_UNUSED_0x14):
+      HANDLE_OP (WASM_OP_UNUSED_0x15):
+      HANDLE_OP (WASM_OP_UNUSED_0x16):
+      HANDLE_OP (WASM_OP_UNUSED_0x17):
+      HANDLE_OP (WASM_OP_UNUSED_0x18):
+      HANDLE_OP (WASM_OP_UNUSED_0x19):
+      HANDLE_OP (WASM_OP_UNUSED_0x1c):
+      HANDLE_OP (WASM_OP_UNUSED_0x1d):
+      HANDLE_OP (WASM_OP_UNUSED_0x1e):
+      HANDLE_OP (WASM_OP_UNUSED_0x1f):
+      HANDLE_OP (WASM_OP_UNUSED_0x25):
+      HANDLE_OP (WASM_OP_UNUSED_0x26):
+      HANDLE_OP (WASM_OP_UNUSED_0x27):
+      {
+        wasm_runtime_set_exception(module,
+                                   "WASM interp failed: unsupported opcode.");
+        goto got_exception;
+      }
+#endif
+
+#if WASM_ENABLE_LABELS_AS_VALUES == 0
+    continue;
+#else
+    FETCH_OPCODE_AND_DISPATCH ();
+#endif
+
+  call_func_from_interp:
+    /* Only do the copy when it's called from interpreter.  */
+    {
+      WASMInterpFrame *outs_area = wasm_thread_wasm_stack_top(self);
+      POP(cur_func->param_cell_num);
+      SYNC_ALL_TO_FRAME();
+      word_copy(outs_area->lp, frame_sp, cur_func->param_cell_num);
+      prev_frame = frame;
+    }
+
+  call_func_from_entry:
+    {
+      if (cur_func->is_import_func) {
+        wasm_interp_call_func_native(self, cur_func, prev_frame);
+        prev_frame = frame->prev_frame;
+        cur_func = frame->function;
+        UPDATE_ALL_FROM_FRAME();
+
+        memory = module->default_memory;
+        if (wasm_runtime_get_exception(module))
+          goto got_exception;
+      }
+      else {
+        WASMType *func_type;
+        uint8 ret_type;
+
+        all_cell_num = cur_func->param_cell_num + cur_func->local_cell_num
+                       + cur_func->u.func->max_stack_cell_num
+                       + cur_func->u.func->max_block_num * 
sizeof(WASMBranchBlock) / 4;
+        frame_size = wasm_interp_interp_frame_size(all_cell_num);
+
+        if (!(frame = ALLOC_FRAME(self, frame_size, prev_frame))) {
+          frame = prev_frame;
+          goto got_exception;
+        }
+
+        /* Initialize the interpreter context. */
+        frame->function = cur_func;
+        frame_ip = wasm_runtime_get_func_code(cur_func);
+        frame_ip_end = wasm_runtime_get_func_code_end(cur_func);
+        frame_lp = frame->lp;
+
+        frame_sp = frame->sp_bottom = frame_lp + cur_func->param_cell_num
+                                               + cur_func->local_cell_num;
+        frame->sp_boundary = frame->sp_bottom + 
cur_func->u.func->max_stack_cell_num;
+
+        frame_csp = frame->csp_bottom = (WASMBranchBlock*)frame->sp_boundary;
+        frame->csp_boundary = frame->csp_bottom + 
cur_func->u.func->max_block_num;
+
+        /* Initialize the local varialbes */
+        memset(frame_lp + cur_func->param_cell_num, 0,
+               cur_func->local_cell_num * 4);
+
+        /* Push function block as first block */
+        func_type = cur_func->u.func->func_type;
+        ret_type = func_type->result_count
+                   ? func_type->types[func_type->param_count]
+                   : VALUE_TYPE_VOID;
+        PUSH_CSP(BLOCK_TYPE_FUNCTION, ret_type,
+                 frame_ip, NULL, frame_ip_end - 1);
+
+        wasm_thread_set_cur_frame(self, (WASMRuntimeFrame*)frame);
+      }
+      HANDLE_OP_END ();
+    }
+
+  return_func:
+    {
+      FREE_FRAME(self, frame);
+      wasm_thread_set_cur_frame(self, (WASMRuntimeFrame*)prev_frame);
+
+      if (!prev_frame->ip)
+        /* Called from native. */
+        return;
+
+      RECOVER_CONTEXT(prev_frame);
+      HANDLE_OP_END ();
+    }
+
+  out_of_bounds:
+    wasm_runtime_set_exception(module, "out of bounds memory access");
+
+  got_exception:
+    if (depths && depths != depth_buf) {
+      wasm_free(depths);
+      depths = NULL;
+    }
+    return;
+
+#if WASM_ENABLE_LABELS_AS_VALUES == 0
+  }
+#else
+  FETCH_OPCODE_AND_DISPATCH ();
+#endif
+
+}
+
+void
+wasm_interp_call_wasm(WASMFunctionInstance *function,
+                      uint32 argc, uint32 argv[])
+{
+    WASMThread *self = wasm_runtime_get_self();
+    WASMRuntimeFrame *prev_frame = wasm_thread_get_cur_frame(self);
+    WASMInterpFrame *frame, *outs_area;
+
+    /* Allocate sufficient cells for all kinds of return values.  */
+    unsigned all_cell_num = 2, i;
+    /* This frame won't be used by JITed code, so only allocate interp
+       frame here.  */
+    unsigned frame_size = wasm_interp_interp_frame_size(all_cell_num);
+
+    if (argc != function->param_cell_num) {
+        char buf[128];
+        snprintf(buf, sizeof(buf),
+                 "invalid argument count %d, expected %d",
+                 argc, function->param_cell_num);
+        wasm_runtime_set_exception(self->module_inst, buf);
+        return;
+    }
+
+    /* TODO: check stack overflow. */
+
+    if (!(frame = ALLOC_FRAME(self, frame_size, (WASMInterpFrame*)prev_frame)))
+        return;
+
+    outs_area = wasm_thread_wasm_stack_top(self);
+    frame->function = NULL;
+    frame->ip = NULL;
+    /* There is no local variable. */
+    frame->sp = frame->lp + 0;
+
+    if (argc > 0)
+        word_copy(outs_area->lp, argv, argc);
+
+    wasm_thread_set_cur_frame(self, frame);
+
+    if (function->is_import_func)
+        wasm_interp_call_func_native(self, function, frame);
+    else
+        wasm_interp_call_func_bytecode(self, function, frame);
+
+    /* Output the return value to the caller */
+    if (!wasm_runtime_get_exception(self->module_inst)) {
+        for (i = 0; i < function->ret_cell_num; i++)
+            argv[i] = *(frame->sp + i - function->ret_cell_num);
+    }
+
+    wasm_thread_set_cur_frame(self, prev_frame);
+    FREE_FRAME(self, frame);
+}
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_interp.h 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_interp.h
new file mode 100755
index 0000000..84f4098
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_interp.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_INTERP_H
+#define _WASM_INTERP_H
+
+#include "wasm.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct WASMFunctionInstance;
+
+typedef struct WASMInterpFrame {
+  /* The frame of the caller that are calling the current function. */
+  struct WASMInterpFrame *prev_frame;
+
+  /* The current WASM function. */
+  struct WASMFunctionInstance *function;
+
+  /* Instruction pointer of the bytecode array.  */
+  uint8 *ip;
+
+  /* Operand stack top pointer of the current frame.  The bottom of
+     the stack is the next cell after the last local variable.  */
+  uint32 *sp_bottom;
+  uint32 *sp_boundary;
+  uint32 *sp;
+
+  WASMBranchBlock *csp_bottom;
+  WASMBranchBlock *csp_boundary;
+  WASMBranchBlock *csp;
+
+  /* Frame data, the layout is:
+     lp: param_cell_count + local_cell_count
+     sp_bottom to sp_boundary: stack of data
+     csp_bottom to csp_boundary: stack of block
+     ref to frame end: data types of local vairables and stack data
+     */
+  uint32 lp[1];
+} WASMInterpFrame;
+
+/**
+ * Calculate the size of interpreter area of frame of a function.
+ *
+ * @param all_cell_num number of all cells including local variables
+ * and the working stack slots
+ *
+ * @return the size of interpreter area of the frame
+ */
+static inline unsigned
+wasm_interp_interp_frame_size(unsigned all_cell_num)
+{
+  return align_uint(offsetof(WASMInterpFrame, lp) + all_cell_num * 5, 4);
+}
+
+void
+wasm_interp_call_wasm(struct WASMFunctionInstance *function,
+                      uint32 argc, uint32 argv[]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _WASM_INTERP_H */
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_loader.c 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_loader.c
new file mode 100755
index 0000000..dbf8a4d
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_loader.c
@@ -0,0 +1,3075 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_loader.h"
+#include "wasm.h"
+#include "wasm_native.h"
+#include "wasm_opcode.h"
+#include "wasm_runtime.h"
+#include "wasm_log.h"
+#include "wasm_memory.h"
+#include "wasm_dlfcn.h"
+
+/* Read a value of given type from the address pointed to by the given
+   pointer and increase the pointer to the position just after the
+   value being read.  */
+#define TEMPLATE_READ_VALUE(Type, p)                    \
+    (p += sizeof(Type), *(Type *)(p - sizeof(Type)))
+
+static void
+set_error_buf(char *error_buf, uint32 error_buf_size, const char *string)
+{
+    if (error_buf != NULL)
+        snprintf(error_buf, error_buf_size, "%s", string);
+}
+
+#define CHECK_BUF(buf, buf_end, length) do {                    \
+  if (buf + length > buf_end) {                                 \
+    set_error_buf(error_buf, error_buf_size, "unexpected end"); \
+    return false;                                               \
+  }                                                             \
+} while (0)
+
+static bool
+read_leb(const uint8 *buf, const uint8 *buf_end,
+         uint32 *p_offset, uint32 maxbits,
+         bool sign, uint64 *p_result,
+         char* error_buf, uint32 error_buf_size)
+{
+    uint64 result = 0;
+    uint32 shift = 0;
+    uint32 bcnt = 0;
+    uint64 byte;
+
+    while (true) {
+        CHECK_BUF(buf, buf_end, 1);
+        byte = buf[*p_offset];
+        *p_offset += 1;
+        result |= ((byte & 0x7f) << shift);
+        shift += 7;
+        if ((byte & 0x80) == 0) {
+            break;
+        }
+        bcnt += 1;
+    }
+    if (bcnt > (maxbits + 7 - 1) / 7) {
+        set_error_buf(error_buf, error_buf_size,
+                      "WASM module load failed: unsigned LEB overflow.");
+        return false;
+    }
+    if (sign && (shift < maxbits) && (byte & 0x40)) {
+        /* Sign extend */
+        result |= - (1 << shift);
+    }
+    *p_result = result;
+    return true;
+}
+
+#define read_uint8(p)  TEMPLATE_READ_VALUE(uint8, p)
+#define read_uint32(p) TEMPLATE_READ_VALUE(uint32, p)
+#define read_bool(p)   TEMPLATE_READ_VALUE(bool, p)
+
+#define read_leb_uint64(p, p_end, res) do {         \
+  uint32 off = 0;                                   \
+  uint64 res64;                                     \
+  if (!read_leb(p, p_end, &off, 64, false, &res64,  \
+                error_buf, error_buf_size))         \
+    return false;                                   \
+  p += off;                                         \
+  res = (uint64)res64;                              \
+} while (0)
+
+#define read_leb_int64(p, p_end, res) do {          \
+  uint32 off = 0;                                   \
+  uint64 res64;                                     \
+  if (!read_leb(p, p_end, &off, 64, true, &res64,   \
+                error_buf, error_buf_size))         \
+    return false;                                   \
+  p += off;                                         \
+  res = (int64)res64;                               \
+} while (0)
+
+#define read_leb_uint32(p, p_end, res) do {         \
+  uint32 off = 0;                                   \
+  uint64 res64;                                     \
+  if (!read_leb(p, p_end, &off, 32, false, &res64,  \
+                error_buf, error_buf_size))         \
+    return false;                                   \
+  p += off;                                         \
+  res = (uint32)res64;                              \
+} while (0)
+
+#define read_leb_int32(p, p_end, res) do {          \
+  uint32 off = 0;                                   \
+  uint64 res64;                                     \
+  if (!read_leb(p, p_end, &off, 32, true, &res64,   \
+                error_buf, error_buf_size))         \
+    return false;                                   \
+  p += off;                                         \
+  res = (uint32)res64;                              \
+} while (0)
+
+#define read_leb_uint8(p, p_end, res) do {          \
+  uint32 off = 0;                                   \
+  uint64 res64;                                     \
+  if (!read_leb(p, p_end, &off, 7, false, &res64,   \
+                error_buf, error_buf_size))         \
+    return false;                                   \
+  p += off;                                         \
+  res = (uint32)res64;                              \
+} while (0)
+
+static char*
+const_str_set_insert(const uint8 *str, int32 len, WASMModule *module,
+                     char* error_buf, uint32 error_buf_size)
+{
+    HashMap *set = module->const_str_set;
+    char *c_str = wasm_malloc(len + 1), *value;
+
+    if (!c_str) {
+        set_error_buf(error_buf, error_buf_size,
+                      "WASM module load failed: "
+                      "allocate memory failed.");
+        return NULL;
+    }
+
+    memcpy(c_str, str, len);
+    c_str[len] = '\0';
+
+    if ((value = wasm_hash_map_find(set, c_str))) {
+        wasm_free(c_str);
+        return value;
+    }
+
+    if (!wasm_hash_map_insert(set, c_str, c_str)) {
+        set_error_buf(error_buf, error_buf_size,
+                      "WASM module load failed: "
+                      "insert string to hash map failed.");
+        wasm_free(c_str);
+        return NULL;
+    }
+
+    return c_str;
+}
+
+static bool
+load_init_expr(const uint8 **p_buf, const uint8 *buf_end,
+               InitializerExpression *init_expr,
+               char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = *p_buf, *p_end = buf_end;
+    uint8 flag, end_byte, *p_float;
+    uint32 i;
+
+    CHECK_BUF(p, p_end, 1);
+    init_expr->init_expr_type = read_uint8(p);
+    flag = init_expr->init_expr_type;
+
+    switch (flag) {
+        /* i32.const */
+        case INIT_EXPR_TYPE_I32_CONST:
+            read_leb_int32(p, p_end, init_expr->u.i32);
+            break;
+            /* i64.const */
+        case INIT_EXPR_TYPE_I64_CONST:
+            read_leb_int64(p, p_end, init_expr->u.i64);
+            break;
+            /* f32.const */
+        case INIT_EXPR_TYPE_F32_CONST:
+            CHECK_BUF(p, p_end, 4);
+            p_float = (uint8*)&init_expr->u.f32;
+            for (i = 0; i < sizeof(float32); i++)
+                *p_float++ = *p++;
+            break;
+            /* f64.const */
+        case INIT_EXPR_TYPE_F64_CONST:
+            CHECK_BUF(p, p_end, 8);
+            p_float = (uint8*)&init_expr->u.f64;
+            for (i = 0; i < sizeof(float64); i++)
+                *p_float++ = *p++;
+            break;
+            /* get_global */
+        case INIT_EXPR_TYPE_GET_GLOBAL:
+            read_leb_uint32(p, p_end, init_expr->u.global_index);
+            break;
+        default:
+            set_error_buf(error_buf, error_buf_size, "type mismatch");
+            return false;
+    }
+    CHECK_BUF(p, p_end, 1);
+    end_byte = read_uint8(p);
+    if (end_byte != 0x0b) {
+        set_error_buf(error_buf, error_buf_size, "unexpected end");
+        return false;
+    }
+    *p_buf = p;
+
+    return true;
+}
+
+static bool
+load_type_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
+                  char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = buf, *p_end = buf_end, *p_org;
+    uint32 type_count, param_count, result_count, i, j;
+    uint8 flag;
+    WASMType *type;
+
+    read_leb_uint32(p, p_end, type_count);
+
+    if (type_count) {
+        module->type_count = type_count;
+        if (!(module->types = wasm_malloc(sizeof(WASMType*) * type_count))) {
+            set_error_buf(error_buf, error_buf_size,
+                          "Load type section failed: allocate memory failed.");
+            return false;
+        }
+
+        memset(module->types, 0, sizeof(WASMType*) * type_count);
+
+        for (i = 0; i < type_count; i++) {
+            CHECK_BUF(p, p_end, 1);
+            flag = read_uint8(p);
+            if (flag != 0x60) {
+                set_error_buf(error_buf, error_buf_size,
+                              "Load type section failed: invalid type flag.");
+                return false;
+            }
+
+            read_leb_uint32(p, p_end, param_count);
+
+            /* Resolve param count and result count firstly */
+            p_org = p;
+            CHECK_BUF(p, p_end, param_count);
+            p += param_count;
+            read_leb_uint32(p, p_end, result_count);
+            if (result_count > 1) {
+                set_error_buf(error_buf, error_buf_size,
+                              "Load type section failed: invalid result 
count.");
+                return false;
+            }
+            CHECK_BUF(p, p_end, result_count);
+            p = p_org;
+
+            if (!(type = module->types[i] = wasm_malloc(offsetof(WASMType, 
types) +
+                                        sizeof(uint8) * (param_count + 
result_count)))) {
+                set_error_buf(error_buf, error_buf_size,
+                              "Load type section failed: allocate memory 
failed.");
+                return false;
+            }
+
+            /* Resolve param types and result types */
+            type->param_count = param_count;
+            type->result_count = result_count;
+            for (j = 0; j < param_count; j++) {
+                CHECK_BUF(p, p_end, 1);
+                type->types[j] = read_uint8(p);
+            }
+            read_leb_uint32(p, p_end, result_count);
+            for (j = 0; j < result_count; j++) {
+                CHECK_BUF(p, p_end, 1);
+                type->types[param_count + j] = read_uint8(p);
+            }
+        }
+    }
+
+    if (p != p_end) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Load type section failed: invalid section size.");
+        return false;
+    }
+
+    LOG_VERBOSE("Load type section success.\n");
+    return true;
+}
+
+static bool
+load_table_import(const uint8 **p_buf, const uint8 *buf_end,
+                  WASMTableImport *table,
+                  char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = *p_buf, *p_end = buf_end;
+
+    read_leb_uint8(p, p_end, table->elem_type);
+    wasm_assert(table->elem_type == TABLE_ELEM_TYPE_ANY_FUNC);
+    read_leb_uint32(p, p_end, table->flags);
+    read_leb_uint32(p, p_end, table->init_size);
+    if (table->flags & 1)
+        read_leb_uint32(p, p_end, table->max_size);
+    else
+        table->max_size = 0x10000;
+
+    *p_buf = p;
+    return true;
+}
+
+static bool
+load_memory_import(const uint8 **p_buf, const uint8 *buf_end,
+                   WASMMemoryImport *memory,
+                   char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = *p_buf, *p_end = buf_end;
+    uint32 pool_size = bh_memory_pool_size();
+    uint32 max_page_count = pool_size * APP_MEMORY_MAX_GLOBAL_HEAP_PERCENT
+                            / NumBytesPerPage;
+
+    read_leb_uint32(p, p_end, memory->flags);
+    read_leb_uint32(p, p_end, memory->init_page_count);
+    if (memory->flags & 1) {
+        read_leb_uint32(p, p_end, memory->max_page_count);
+        if (memory->max_page_count > max_page_count)
+            memory->max_page_count = max_page_count;
+    }
+    else
+        /* Limit the maximum memory size to max_page_count */
+        memory->max_page_count = max_page_count;
+
+    *p_buf = p;
+    return true;
+}
+
+static bool
+load_table(const uint8 **p_buf, const uint8 *buf_end, WASMTable *table,
+           char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = *p_buf, *p_end = buf_end;
+
+    read_leb_uint8(p, p_end, table->elem_type);
+    wasm_assert(table->elem_type == TABLE_ELEM_TYPE_ANY_FUNC);
+    read_leb_uint32(p, p_end, table->flags);
+    read_leb_uint32(p, p_end, table->init_size);
+    if (table->flags & 1)
+        read_leb_uint32(p, p_end, table->max_size);
+    else
+        table->max_size = 0x10000;
+
+    *p_buf = p;
+    return true;
+}
+
+static bool
+load_memory(const uint8 **p_buf, const uint8 *buf_end, WASMMemory *memory,
+            char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = *p_buf, *p_end = buf_end;
+    uint32 pool_size = bh_memory_pool_size();
+    uint32 max_page_count = pool_size * APP_MEMORY_MAX_GLOBAL_HEAP_PERCENT
+                            / NumBytesPerPage;
+
+    read_leb_uint32(p, p_end, memory->flags);
+    read_leb_uint32(p, p_end, memory->init_page_count);
+    if (memory->flags & 1) {
+        read_leb_uint32(p, p_end, memory->max_page_count);
+        if (memory->max_page_count > max_page_count)
+            memory->max_page_count = max_page_count;
+    }
+    else
+        /* Limit the maximum memory size to max_page_count */
+        memory->max_page_count = max_page_count;
+
+    *p_buf = p;
+    return true;
+}
+
+static void*
+resolve_sym(const char *module_name, const char *field_name)
+{
+    void *sym;
+
+    if (strcmp(module_name, "env") != 0)
+        return NULL;
+
+    if (field_name[0] == '_'
+        && (sym = wasm_dlsym(NULL, field_name + 1)))
+        return sym;
+
+    if ((sym = wasm_dlsym(NULL, field_name)))
+        return sym;
+
+    return NULL;
+}
+
+static bool
+load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
+                    char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = buf, *p_end = buf_end, *p_old;
+    uint32 import_count, name_len, type_index, i, u32, flags;
+    WASMImport *import;
+    WASMImport *import_functions = NULL, *import_tables = NULL;
+    WASMImport *import_memories = NULL, *import_globals = NULL;
+    char *module_name, *field_name;
+    uint8 mutable, u8, kind;
+
+    read_leb_uint32(p, p_end, import_count);
+
+    if (import_count) {
+        module->import_count = import_count;
+        if (!(module->imports = wasm_malloc(sizeof(WASMImport) * 
import_count))) {
+            set_error_buf(error_buf, error_buf_size,
+                          "Load import section failed: allocate memory 
failed.");
+            return false;
+        }
+
+        memset(module->imports, 0, sizeof(WASMImport) * import_count);
+
+        p_old = p;
+
+        /* Scan firstly to get import count of each type */
+        for (i = 0; i < import_count; i++) {
+            /* module name */
+            read_leb_uint32(p, p_end, name_len);
+            CHECK_BUF(p, p_end, name_len);
+            p += name_len;
+
+            /* field name */
+            read_leb_uint32(p, p_end, name_len);
+            CHECK_BUF(p, p_end, name_len);
+            p += name_len;
+
+            read_leb_uint8(p, p_end, kind);
+
+            switch (kind) {
+                case IMPORT_KIND_FUNC: /* import function */
+                    read_leb_uint32(p, p_end, type_index);
+                    module->import_function_count++;
+                    break;
+
+                case IMPORT_KIND_TABLE: /* import table */
+                    read_leb_uint8(p, p_end, u8);
+                    read_leb_uint32(p, p_end, flags);
+                    read_leb_uint32(p, p_end, u32);
+                    if (flags & 1)
+                        read_leb_uint32(p, p_end, u32);
+                    module->import_table_count++;
+                    if (module->import_table_count > 1) {
+                        set_error_buf(error_buf, error_buf_size, "multiple 
tables");
+                        return false;
+                    }
+                    break;
+
+                case IMPORT_KIND_MEMORY: /* import memory */
+                    read_leb_uint32(p, p_end, flags);
+                    read_leb_uint32(p, p_end, u32);
+                    if (flags & 1)
+                        read_leb_uint32(p, p_end, u32);
+                    module->import_memory_count++;
+                    if (module->import_memory_count > 1) {
+                        set_error_buf(error_buf, error_buf_size, "multiple 
memories");
+                        return false;
+                    }
+                    break;
+
+                case IMPORT_KIND_GLOBAL: /* import global */
+                    read_leb_uint8(p, p_end, u8);
+                    read_leb_uint8(p, p_end, u8);
+                    module->import_global_count++;
+                    break;
+
+                default:
+                    set_error_buf(error_buf, error_buf_size,
+                                  "Load import section failed: invalid import 
type.");
+                    return false;
+            }
+        }
+
+        if (module->import_function_count)
+            import_functions = module->import_functions = module->imports;
+        if (module->import_table_count)
+            import_tables = module->import_tables =
+                module->imports + module->import_function_count;
+        if (module->import_memory_count)
+            import_memories = module->import_memories =
+                module->imports + module->import_function_count + 
module->import_table_count;
+        if (module->import_global_count)
+            import_globals = module->import_globals =
+                module->imports + module->import_function_count + 
module->import_table_count
+                + module->import_memory_count;
+
+        p = p_old;
+
+        /* Scan again to read the data */
+        for (i = 0; i < import_count; i++) {
+            /* load module name */
+            read_leb_uint32(p, p_end, name_len);
+            CHECK_BUF(p, p_end, name_len);
+            if (!(module_name = const_str_set_insert
+                        (p, name_len, module, error_buf, error_buf_size))) {
+                return false;
+            }
+            p += name_len;
+
+            /* load field name */
+            read_leb_uint32(p, p_end, name_len);
+            CHECK_BUF(p, p_end, name_len);
+            if (!(field_name = const_str_set_insert
+                        (p, name_len, module, error_buf, error_buf_size))) {
+                return false;
+            }
+            p += name_len;
+
+            read_leb_uint8(p, p_end, kind);
+            switch (kind) {
+                case IMPORT_KIND_FUNC: /* import function */
+                    import = import_functions++;
+                    read_leb_uint32(p, p_end, type_index);
+                    if (type_index >= module->type_count) {
+                        set_error_buf(error_buf, error_buf_size,
+                                      "Load import section failed: "
+                                      "invalid function type index.");
+                        return false;
+                    }
+                    import->u.function.func_type = module->types[type_index];
+
+                    if (!(import->u.function.func_ptr_linked = 
wasm_native_func_lookup
+                                (module_name, field_name))) {
+                        if (!(import->u.function.func_ptr_linked =
+                                    resolve_sym(module_name, field_name))) {
+                            if (error_buf != NULL)
+                                snprintf(error_buf, error_buf_size,
+                                         "Load import section failed: "
+                                         "resolve import function (%s, %s) 
failed.",
+                                         module_name, field_name);
+                            return false;
+
+                        }
+                        import->u.function.call_type = CALL_TYPE_C_INTRINSIC;
+                        break;
+                    }
+                    import->u.function.call_type = CALL_TYPE_WRAPPER;
+                    break;
+
+                case IMPORT_KIND_TABLE: /* import table */
+                    import = import_tables++;
+                    if (!load_table_import(&p, p_end, &import->u.table,
+                                error_buf, error_buf_size))
+                        return false;
+                    if (module->import_table_count > 1) {
+                        set_error_buf(error_buf, error_buf_size, "multiple 
tables");
+                        return false;
+                    }
+                    break;
+
+                case IMPORT_KIND_MEMORY: /* import memory */
+                    import = import_memories++;
+                    if (!load_memory_import(&p, p_end, &import->u.memory,
+                                error_buf, error_buf_size))
+                        return false;
+                    if (module->import_table_count > 1) {
+                        set_error_buf(error_buf, error_buf_size, "multiple 
memories");
+                        return false;
+                    }
+                    break;
+
+                case IMPORT_KIND_GLOBAL: /* import global */
+                    import = import_globals++;
+                    read_leb_uint8(p, p_end, import->u.global.type);
+                    read_leb_uint8(p, p_end, mutable);
+                    import->u.global.is_mutable = mutable & 1 ? true : false;
+                    if (!(wasm_native_global_lookup(module_name, field_name,
+                                                    &import->u.global))) {
+                        if (error_buf != NULL)
+                            snprintf(error_buf, error_buf_size,
+                                     "Load import section failed: "
+                                     "resolve import global (%s, %s) failed.",
+                                     module_name, field_name);
+                        return false;
+                    }
+                    break;
+
+                default:
+                    set_error_buf(error_buf, error_buf_size,
+                                  "Load import section failed: "
+                                  "invalid import type.");
+                    return false;
+            }
+            import->kind = kind;
+            import->u.names.module_name = module_name;
+            import->u.names.field_name = field_name;
+        }
+    }
+
+    if (p != p_end) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Load import section failed: "
+                      "invalid section size.");
+        return false;
+    }
+
+    LOG_VERBOSE("Load import section success.\n");
+    (void)u8;
+    (void)u32;
+    return true;
+}
+
+static bool
+load_function_section(const uint8 *buf, const uint8 *buf_end,
+                      const uint8 *buf_code, const uint8 *buf_code_end,
+                      WASMModule *module,
+                      char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = buf, *p_end = buf_end;
+    const uint8 *p_code = buf_code, *p_code_end, *p_code_save;
+    uint32 func_count, total_size;
+    uint32 code_count, code_size, type_index, i, j, k, local_type_index;
+    uint32 local_count, local_set_count, sub_local_count;
+    uint8 type;
+    WASMFunction *func;
+
+    read_leb_uint32(p, p_end, func_count);
+
+    read_leb_uint32(p_code, buf_code_end, code_count);
+    if (func_count != code_count) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Load function section failed: invalid function count.");
+        return false;
+    }
+
+    if (func_count) {
+        module->function_count = func_count;
+        if (!(module->functions = wasm_malloc(sizeof(WASMFunction*) * 
func_count))) {
+            set_error_buf(error_buf, error_buf_size,
+                          "Load function section failed: allocate memory 
failed.");
+            return false;
+        }
+
+        memset(module->functions, 0, sizeof(WASMFunction*) * func_count);
+
+        for (i = 0; i < func_count; i++) {
+            /* Resolve function type */
+            read_leb_uint32(p, p_end, type_index);
+            if (type_index >= module->type_count) {
+                set_error_buf(error_buf, error_buf_size,
+                              "Load function section failed: "
+                              "invalid function type index.");
+                return false;
+            }
+
+            read_leb_uint32(p_code, buf_code_end, code_size);
+            if (code_size == 0
+                || p_code + code_size > buf_code_end) {
+                set_error_buf(error_buf, error_buf_size,
+                              "Load function section failed: "
+                              "invalid function code size.");
+                return false;
+            }
+
+            /* Resolve local set count */
+            p_code_end = p_code + code_size;
+            local_count = 0;
+            read_leb_uint32(p_code, buf_code_end, local_set_count);
+            p_code_save = p_code;
+
+            /* Calculate total local count */
+            for (j = 0; j < local_set_count; j++) {
+                read_leb_uint32(p_code, buf_code_end, sub_local_count);
+                read_leb_uint8(p_code, buf_code_end, type);
+                local_count += sub_local_count;
+            }
+
+            /* Alloc memory, layout: function structure + local types */
+            code_size = p_code_end - p_code;
+            total_size = sizeof(WASMFunction) + local_count;
+
+            if (!(func = module->functions[i] = wasm_malloc(total_size))) {
+                set_error_buf(error_buf, error_buf_size,
+                              "Load function section failed: "
+                              "allocate memory failed.");
+                return false;
+            }
+
+            /* Set function type, local count, code size and code body */
+            memset(func, 0, total_size);
+            func->func_type = module->types[type_index];
+            func->local_count = local_count;
+            if (local_count > 0)
+                func->local_types = (uint8*)func + sizeof(WASMFunction);
+            func->code_size = code_size;
+            func->code = (uint8*)p_code;
+
+            /* Load each local type */
+            p_code = p_code_save;
+            local_type_index = 0;
+            for (j = 0; j < local_set_count; j++) {
+                read_leb_uint32(p_code, buf_code_end, sub_local_count);
+                if (local_type_index + sub_local_count <= local_type_index
+                    || local_type_index + sub_local_count > local_count) {
+                    set_error_buf(error_buf, error_buf_size,
+                                  "Load function section failed: "
+                                  "invalid local count.");
+                    return false;
+                }
+                read_leb_uint8(p_code, buf_code_end, type);
+                if (type < VALUE_TYPE_F64 || type > VALUE_TYPE_I32) {
+                    set_error_buf(error_buf, error_buf_size,
+                                  "Load function section failed: "
+                                  "invalid local type.");
+                    return false;
+                }
+                for (k = 0; k < sub_local_count; k++) {
+                    func->local_types[local_type_index++] = type;
+                }
+            }
+            p_code = p_code_end;
+        }
+    }
+
+    if (p != p_end) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Load function section failed: "
+                      "invalid section size.");
+        return false;
+    }
+
+    LOG_VERBOSE("Load function section success.\n");
+    return true;
+}
+
+static bool
+load_table_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
+                   char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = buf, *p_end = buf_end;
+    uint32 table_count, i;
+    WASMTable *table;
+
+    read_leb_uint32(p, p_end, table_count);
+    wasm_assert(table_count == 1);
+
+    if (table_count) {
+        if (table_count > 1) {
+            set_error_buf(error_buf, error_buf_size, "multiple memories");
+            return false;
+        }
+        module->table_count = table_count;
+        if (!(module->tables = wasm_malloc(sizeof(WASMTable) * table_count))) {
+            set_error_buf(error_buf, error_buf_size,
+                          "Load table section failed: "
+                          "allocate memory failed.");
+            return false;
+        }
+
+        memset(module->tables, 0, sizeof(WASMTable) * table_count);
+
+        /* load each table */
+        table = module->tables;
+        for (i = 0; i < table_count; i++, table++)
+            if (!load_table(&p, p_end, table, error_buf, error_buf_size))
+                return false;
+    }
+
+    if (p != p_end) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Load table section failed: invalid section size.");
+        return false;
+    }
+
+    LOG_VERBOSE("Load table section success.\n");
+    return true;
+}
+
+static bool
+load_memory_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
+                    char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = buf, *p_end = buf_end;
+    uint32 memory_count, i;
+    WASMMemory *memory;
+
+    read_leb_uint32(p, p_end, memory_count);
+    wasm_assert(memory_count == 1);
+
+    if (memory_count) {
+        if (memory_count > 1) {
+            set_error_buf(error_buf, error_buf_size, "multiple memories");
+            return false;
+        }
+        module->memory_count = memory_count;
+        if (!(module->memories = wasm_malloc(sizeof(WASMMemory) * 
memory_count))) {
+            set_error_buf(error_buf, error_buf_size,
+                         "Load memory section failed: "
+                         "allocate memory failed.");
+            return false;
+        }
+
+        memset(module->memories, 0, sizeof(WASMMemory) * memory_count);
+
+        /* load each memory */
+        memory = module->memories;
+        for (i = 0; i < memory_count; i++, memory++)
+            if (!load_memory(&p, p_end, memory, error_buf, error_buf_size))
+                return false;
+    }
+
+    if (p != p_end) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Load memory section failed: invalid section size.");
+        return false;
+    }
+
+    LOG_VERBOSE("Load memory section success.\n");
+    return true;
+}
+
+static bool
+load_global_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
+                    char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = buf, *p_end = buf_end;
+    uint32 global_count, i;
+    WASMGlobal *global;
+
+    read_leb_uint32(p, p_end, global_count);
+
+    if (global_count) {
+        module->global_count = global_count;
+        if (!(module->globals = wasm_malloc(sizeof(WASMGlobal) * 
global_count))) {
+            set_error_buf(error_buf, error_buf_size,
+                          "Load global section failed: "
+                          "allocate memory failed.");
+            return false;
+        }
+
+        memset(module->globals, 0, sizeof(WASMGlobal) * global_count);
+
+        global = module->globals;
+
+        for(i = 0; i < global_count; i++, global++) {
+            CHECK_BUF(p, p_end, 1);
+            global->type = read_uint8(p);
+            CHECK_BUF(p, p_end, 1);
+            global->is_mutable = read_bool(p);
+
+            /* initialize expression */
+            if (!load_init_expr(&p, p_end, &(global->init_expr), error_buf, 
error_buf_size))
+                return false;
+        }
+    }
+
+    if (p != p_end) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Load global section failed: invalid section size.");
+        return false;
+    }
+
+    LOG_VERBOSE("Load global section success.\n");
+    return true;
+}
+
+static bool
+load_export_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
+                    char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = buf, *p_end = buf_end;
+    uint32 export_count, i, index;
+    uint8 str_len;
+    WASMExport *export;
+
+    read_leb_uint32(p, p_end, export_count);
+
+    if (export_count) {
+        module->export_count = export_count;
+        if (!(module->exports = wasm_malloc(sizeof(WASMExport) * 
export_count))) {
+            set_error_buf(error_buf, error_buf_size,
+                          "Load export section failed: "
+                          "allocate memory failed.");
+            return false;
+        }
+
+        memset(module->exports, 0, sizeof(WASMExport) * export_count);
+
+        export = module->exports;
+        for (i = 0; i < export_count; i++, export++) {
+            read_leb_uint32(p, p_end, str_len);
+            CHECK_BUF(p, p_end, str_len);
+            if (!(export->name = const_str_set_insert(p, str_len, module,
+                            error_buf, error_buf_size))) {
+                return false;
+            }
+            p += str_len;
+            CHECK_BUF(p, p_end, 1);
+            export->kind = read_uint8(p);
+            read_leb_uint32(p, p_end, index);
+            export->index = index;
+
+            switch(export->kind) {
+                /*function index*/
+                case EXPORT_KIND_FUNC:
+                    if (index >= module->function_count + 
module->import_function_count) {
+                        set_error_buf(error_buf, error_buf_size,
+                                      "Load export section failed: "
+                                      "function index is out of range.");
+                        return false;
+                    }
+                    break;
+                /*table index*/
+                case EXPORT_KIND_TABLE:
+                    if (index >= module->table_count + 
module->import_table_count) {
+                        set_error_buf(error_buf, error_buf_size,
+                                      "Load export section failed: "
+                                      "table index is out of range.");
+                        return false;
+                    }
+                    break;
+                /*memory index*/
+                case EXPORT_KIND_MEMORY:
+                    if (index >= module->memory_count + 
module->import_memory_count) {
+                        set_error_buf(error_buf, error_buf_size,
+                                      "Load export section failed: "
+                                      "memory index is out of range.");
+                        return false;
+                    }
+                    break;
+                /*global index*/
+                case EXPORT_KIND_GLOBAL:
+                    if (index >= module->global_count + 
module->import_global_count) {
+                        set_error_buf(error_buf, error_buf_size,
+                                      "Load export section failed: "
+                                      "global index is out of range.");
+                        return false;
+                    }
+                    break;
+                default:
+                    set_error_buf(error_buf, error_buf_size,
+                                  "Load export section failed: "
+                                  "kind flag is unexpected.");
+                    return false;
+            }
+        }
+    }
+
+    if (p != p_end) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Load export section failed: "
+                      "invalid section size.");
+        return false;
+    }
+
+    LOG_VERBOSE("Load export section success.\n");
+    return true;
+}
+
+static bool
+load_table_segment_section(const uint8 *buf, const uint8 *buf_end, WASMModule 
*module,
+                           char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = buf, *p_end = buf_end;
+    uint32 table_segment_count, i, j, table_index, function_count, 
function_index;
+    WASMTableSeg *table_segment;
+
+    read_leb_uint32(p, p_end, table_segment_count);
+
+    if (table_segment_count) {
+        module->table_seg_count = table_segment_count;
+        if (!(module->table_segments = wasm_malloc
+                    (sizeof(WASMTableSeg) * table_segment_count))) {
+            set_error_buf(error_buf, error_buf_size,
+                          "Load table segment section failed: "
+                          "allocate memory failed.");
+            return false;
+        }
+
+        memset(module->table_segments, 0, sizeof(WASMTableSeg) * 
table_segment_count);
+
+        table_segment = module->table_segments;
+        for (i = 0; i < table_segment_count; i++, table_segment++) {
+            read_leb_uint32(p, p_end, table_index);
+            table_segment->table_index = table_index;
+
+            /* initialize expression */
+            if (!load_init_expr(&p, p_end, &(table_segment->base_offset),
+                                error_buf, error_buf_size))
+                return false;
+
+            read_leb_uint32(p, p_end, function_count);
+            table_segment->function_count = function_count;
+            if (!(table_segment->func_indexes = (uint32 *)
+                        wasm_malloc(sizeof(uint32) * function_count))) {
+                set_error_buf(error_buf, error_buf_size,
+                              "Load table segment section failed: "
+                              "allocate memory failed.");
+                return false;
+            }
+            for (j = 0; j < function_count; j++) {
+                read_leb_uint32(p, p_end, function_index);
+                table_segment->func_indexes[j] = function_index;
+            }
+        }
+    }
+
+    if (p != p_end) {
+        set_error_buf(error_buf, error_buf_size,
+                     "Load table segment section failed, "
+                     "invalid section size.");
+        return false;
+    }
+
+    LOG_VERBOSE("Load table segment section success.\n");
+    return true;
+}
+
+static bool
+load_data_segment_section(const uint8 *buf, const uint8 *buf_end,
+                          WASMModule *module,
+                          char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = buf, *p_end = buf_end;
+    uint32 data_seg_count, i, mem_index, data_seg_len;
+    WASMDataSeg *dataseg;
+    InitializerExpression init_expr;
+
+    read_leb_uint32(p, p_end, data_seg_count);
+
+    if (data_seg_count) {
+        module->data_seg_count = data_seg_count;
+        if (!(module->data_segments =
+                    wasm_malloc(sizeof(WASMDataSeg*) * data_seg_count))) {
+            set_error_buf(error_buf, error_buf_size,
+                          "Load data segment section failed: "
+                          "allocate memory failed.");
+            return false;
+        }
+
+        memset(module->data_segments, 0, sizeof(WASMDataSeg*) * 
data_seg_count);
+
+        for (i = 0; i < data_seg_count; i++) {
+            read_leb_uint32(p, p_end, mem_index);
+
+            if (!load_init_expr(&p, p_end, &init_expr, error_buf, 
error_buf_size))
+                return false;
+
+            read_leb_uint32(p, p_end, data_seg_len);
+
+            if (!(dataseg = module->data_segments[i] =
+                        wasm_malloc(sizeof(WASMDataSeg)))) {
+                set_error_buf(error_buf, error_buf_size,
+                              "Load data segment section failed: "
+                              "allocate memory failed.");
+                return false;
+            }
+
+            memcpy(&dataseg->base_offset, &init_expr, sizeof(init_expr));
+
+            dataseg->memory_index = mem_index;
+            dataseg->data_length = data_seg_len;
+            CHECK_BUF(p, p_end, data_seg_len);
+            dataseg->data = (uint8*)p;
+            p += data_seg_len;
+        }
+    }
+
+    if (p != p_end) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Load data segment section failed, "
+                      "invalid section size.");
+        return false;
+    }
+
+    LOG_VERBOSE("Load data segment section success.\n");
+    return true;
+}
+
+static bool
+load_code_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
+                  char *error_buf, uint32 error_buf_size)
+{
+    /* code has been loaded in function section, so pass it here */
+    /* TODO: should check if there really have section_size code bytes */
+    LOG_VERBOSE("Load code segment section success.\n");
+    return true;
+}
+
+static bool
+load_start_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
+                   char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *p = buf, *p_end = buf_end;
+    uint32 start_function;
+
+    read_leb_uint32(p, p_end, start_function);
+
+    if (start_function) {
+        if (start_function >= module->function_count + 
module->import_function_count) {
+            set_error_buf(error_buf, error_buf_size,
+                          "Load start section failed: "
+                          "function index is out of range.");
+            return false;
+        }
+        module->start_function = start_function;
+    }
+
+    if (p != p_end) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Load start section failed: "
+                      "invalid section size.");
+        return false;
+    }
+
+    LOG_VERBOSE("Load start section success.\n");
+    return true;
+}
+
+static bool
+wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func,
+                             char *error_buf, uint32 error_buf_size);
+
+static bool
+load_from_sections(WASMModule *module, WASMSection *sections,
+                   char *error_buf, uint32 error_buf_size)
+{
+    WASMSection *section = sections;
+    const uint8 *buf, *buf_end, *buf_code = NULL, *buf_code_end = NULL;
+    uint32 i;
+
+    while (section) {
+        if (section->section_type == SECTION_TYPE_CODE) {
+            buf_code = section->section_body;
+            buf_code_end = buf_code + section->section_body_size;
+            break;
+        }
+        section = section->next;
+    }
+
+    section = sections;
+    while (section) {
+        buf = section->section_body;
+        buf_end = buf + section->section_body_size;
+        switch (section->section_type) {
+            case SECTION_TYPE_USER:
+                /* unsupported user section, ignore it. */
+                break;
+            case SECTION_TYPE_TYPE:
+                if (!load_type_section(buf, buf_end, module, error_buf, 
error_buf_size))
+                    return false;
+                break;
+            case SECTION_TYPE_IMPORT:
+                if (!load_import_section(buf, buf_end, module, error_buf, 
error_buf_size))
+                    return false;
+                break;
+            case SECTION_TYPE_FUNC:
+                if (!buf_code) {
+                    set_error_buf(error_buf, error_buf_size,
+                                  "WASM module load failed: find code section 
failed.");
+                    return false;
+                }
+                if (!load_function_section(buf, buf_end, buf_code, 
buf_code_end,
+                            module, error_buf, error_buf_size))
+                    return false;
+                break;
+            case SECTION_TYPE_TABLE:
+                if (!load_table_section(buf, buf_end, module, error_buf, 
error_buf_size))
+                    return false;
+                break;
+            case SECTION_TYPE_MEMORY:
+                if (!load_memory_section(buf, buf_end, module, error_buf, 
error_buf_size))
+                    return false;
+                break;
+            case SECTION_TYPE_GLOBAL:
+                if (!load_global_section(buf, buf_end, module, error_buf, 
error_buf_size))
+                    return false;
+                break;
+            case SECTION_TYPE_EXPORT:
+                if (!load_export_section(buf, buf_end, module, error_buf, 
error_buf_size))
+                    return false;
+                break;
+            case SECTION_TYPE_START:
+                if (!load_start_section(buf, buf_end, module, error_buf, 
error_buf_size))
+                    return false;
+                break;
+            case SECTION_TYPE_ELEM:
+                if (!load_table_segment_section(buf, buf_end, module, 
error_buf, error_buf_size))
+                    return false;
+                break;
+            case SECTION_TYPE_CODE:
+                if (!load_code_section(buf, buf_end, module, error_buf, 
error_buf_size))
+                    return false;
+                break;
+            case SECTION_TYPE_DATA:
+                if (!load_data_segment_section(buf, buf_end, module, 
error_buf, error_buf_size))
+                    return false;
+                break;
+            default:
+                set_error_buf(error_buf, error_buf_size, "invalid section id");
+                return false;
+        }
+
+        section = section->next;
+    }
+
+    for (i = 0; i < module->function_count; i++) {
+        WASMFunction *func = module->functions[i];
+        if (!wasm_loader_prepare_bytecode(module, func, error_buf, 
error_buf_size))
+            return false;
+    }
+
+    return true;
+}
+
+#if WASM_ENABLE_HASH_BLOCK_ADDR != 0
+static uint32
+branch_set_hash(const void *key)
+{
+    return ((uintptr_t)key) ^ ((uintptr_t)key >> 16);
+}
+
+static bool
+branch_set_key_equal(void *start_addr1, void *start_addr2)
+{
+    return start_addr1 == start_addr2 ? true : false;
+}
+
+static void
+branch_set_value_destroy(void *value)
+{
+    wasm_free(value);
+}
+#endif
+
+#if BEIHAI_ENABLE_MEMORY_PROFILING != 0
+static void wasm_loader_free(void *ptr)
+{
+    wasm_free(ptr);
+}
+#else
+#define wasm_loader_free wasm_free
+#endif
+
+static WASMModule*
+create_module(char *error_buf, uint32 error_buf_size)
+{
+    WASMModule *module = wasm_malloc(sizeof(WASMModule));
+
+    if (!module) {
+        set_error_buf(error_buf, error_buf_size,
+                      "WASM module load failed: "
+                      "allocate memory failed.");
+        return NULL;
+    }
+
+    memset(module, 0, sizeof(WASMModule));
+
+    /* Set start_function to -1, means no start function */
+    module->start_function = (uint32)-1;
+
+    if (!(module->const_str_set = wasm_hash_map_create(32, false,
+                    (HashFunc)wasm_string_hash,
+                    (KeyEqualFunc)wasm_string_equal,
+                    NULL,
+                    wasm_loader_free)))
+        goto fail;
+
+#if WASM_ENABLE_HASH_BLOCK_ADDR != 0
+    if (!(module->branch_set = wasm_hash_map_create(64, true,
+                    branch_set_hash,
+                    branch_set_key_equal,
+                    NULL,
+                    branch_set_value_destroy)))
+        goto fail;
+#endif
+
+    return module;
+
+fail:
+    wasm_loader_unload(module);
+    return NULL;
+}
+
+WASMModule *
+wasm_loader_load_from_sections(WASMSection *section_list,
+                               char *error_buf, uint32 error_buf_size)
+{
+    WASMModule *module = create_module(error_buf, error_buf_size);
+    if (!module)
+        return NULL;
+
+    if (!load_from_sections(module, section_list, error_buf, error_buf_size)) {
+        wasm_loader_unload(module);
+        return NULL;
+    }
+
+    LOG_VERBOSE("Load module from sections success.\n");
+    return module;
+}
+
+static void
+destroy_sections(WASMSection *section_list)
+{
+    WASMSection *section = section_list, *next;
+    while (section) {
+        next = section->next;
+        wasm_free(section);
+        section = next;
+    }
+}
+
+static bool
+create_sections(const uint8 *buf, uint32 size,
+                WASMSection **p_section_list,
+                char *error_buf, uint32 error_buf_size)
+{
+    WASMSection *section_list_end = NULL, *section;
+    const uint8 *p = buf, *p_end = buf + size/*, *section_body*/;
+    uint8 section_type;
+    uint32 section_size;
+
+    p += 8;
+    while (p < p_end) {
+        CHECK_BUF(p, p_end, 1);
+        section_type = read_uint8(p);
+        if (section_type <= SECTION_TYPE_DATA) {
+            read_leb_uint32(p, p_end, section_size);
+            CHECK_BUF(p, p_end, section_size);
+
+            if (!(section = wasm_malloc(sizeof(WASMSection)))) {
+                set_error_buf(error_buf, error_buf_size,
+                              "WASM module load failed: "
+                              "allocate memory failed.");
+                return false;
+            }
+
+            memset(section, 0, sizeof(WASMSection));
+            section->section_type = section_type;
+            section->section_body = p;
+            section->section_body_size = section_size;
+
+            if (!*p_section_list)
+                *p_section_list = section_list_end = section;
+            else {
+                section_list_end->next = section;
+                section_list_end = section;
+            }
+
+            p += section_size;
+        }
+        else {
+            set_error_buf(error_buf, error_buf_size, "invalid section type");
+            return false;
+        }
+    }
+
+    return true;
+}
+
+static void
+exchange32(uint8* p_data)
+{
+    uint8 value = *p_data;
+    *p_data = *(p_data + 3);
+    *(p_data + 3) = value;
+
+    value = *(p_data + 1);
+    *(p_data + 1) = *(p_data + 2);
+    *(p_data + 2) = value;
+}
+
+static union {
+    int a;
+    char b;
+} __ue = { .a = 1 };
+
+#define is_little_endian() (__ue.b == 1)
+
+static bool
+load(const uint8 *buf, uint32 size, WASMModule *module,
+     char *error_buf, uint32 error_buf_size)
+{
+    const uint8 *buf_end = buf + size;
+    const uint8 *p = buf, *p_end = buf_end;
+    uint32 magic_number, version;
+    WASMSection *section_list = NULL;
+
+    CHECK_BUF(p, p_end, sizeof(uint32));
+    magic_number = read_uint32(p);
+    if (!is_little_endian())
+        exchange32((uint8*)&magic_number);
+
+    if (magic_number != WASM_MAGIC_NUMBER) {
+        set_error_buf(error_buf, error_buf_size, "magic header not detected");
+        return false;
+    }
+
+    CHECK_BUF(p, p_end, sizeof(uint32));
+    version = read_uint32(p);
+    if (!is_little_endian())
+        exchange32((uint8*)&version);
+
+    if (version != WASM_CURRENT_VERSION) {
+        set_error_buf(error_buf, error_buf_size, "unknown binary version");
+        return false;
+    }
+
+    if (!create_sections(buf, size, &section_list, error_buf, error_buf_size)
+        || !load_from_sections(module, section_list, error_buf, 
error_buf_size)) {
+        destroy_sections(section_list);
+        return false;
+    }
+
+    destroy_sections(section_list);
+    return true;
+}
+
+WASMModule*
+wasm_loader_load(const uint8 *buf, uint32 size, char *error_buf, uint32 
error_buf_size)
+{
+    WASMModule *module = wasm_malloc(sizeof(WASMModule));
+
+    if (!module) {
+        set_error_buf(error_buf, error_buf_size,
+                "WASM module load failed: allocate memory failed.");
+        return NULL;
+    }
+
+    memset(module, 0, sizeof(WASMModule));
+
+    /* Set start_function to -1, means no start function */
+    module->start_function = (uint32)-1;
+
+    if (!(module->const_str_set = wasm_hash_map_create(32, false,
+                                        (HashFunc)wasm_string_hash,
+                                        (KeyEqualFunc)wasm_string_equal,
+                                        NULL,
+                                        wasm_loader_free)))
+        goto fail;
+
+#if WASM_ENABLE_HASH_BLOCK_ADDR != 0
+    if (!(module->branch_set = wasm_hash_map_create(64, true,
+                                        branch_set_hash,
+                                        branch_set_key_equal,
+                                        NULL,
+                                        branch_set_value_destroy)))
+        goto fail;
+#endif
+
+    if (!load(buf, size, module, error_buf, error_buf_size))
+        goto fail;
+
+    LOG_VERBOSE("Load module success.\n");
+    return module;
+
+fail:
+    wasm_loader_unload(module);
+    return NULL;
+}
+
+void
+wasm_loader_unload(WASMModule *module)
+{
+    uint32 i;
+
+    if (!module)
+        return;
+
+    if (module->types) {
+        for (i = 0; i < module->type_count; i++) {
+            if (module->types[i])
+                wasm_free(module->types[i]);
+        }
+        wasm_free(module->types);
+    }
+
+    if (module->imports)
+        wasm_free(module->imports);
+
+    if (module->functions) {
+        for (i = 0; i < module->function_count; i++) {
+            if (module->functions[i])
+                wasm_free(module->functions[i]);
+        }
+        wasm_free(module->functions);
+    }
+
+    if (module->tables)
+        wasm_free(module->tables);
+
+    if (module->memories)
+        wasm_free(module->memories);
+
+    if (module->globals)
+        wasm_free(module->globals);
+
+    if (module->exports)
+        wasm_free(module->exports);
+
+    if (module->table_segments) {
+        for (i = 0; i < module->table_seg_count; i++) {
+            if (module->table_segments[i].func_indexes)
+                wasm_free(module->table_segments[i].func_indexes);
+        }
+        wasm_free(module->table_segments);
+    }
+
+    if (module->data_segments) {
+        for (i = 0; i < module->data_seg_count; i++) {
+            if (module->data_segments[i])
+                wasm_free(module->data_segments[i]);
+        }
+        wasm_free(module->data_segments);
+    }
+
+    if (module->const_str_set)
+        wasm_hash_map_destroy(module->const_str_set);
+
+#if WASM_ENABLE_HASH_BLOCK_ADDR != 0
+    if (module->branch_set)
+        wasm_hash_map_destroy(module->branch_set);
+#endif
+
+    wasm_free(module);
+}
+
+#if WASM_ENABLE_HASH_BLOCK_ADDR != 0
+typedef struct block_addr {
+    uint8 block_type;
+    uint8 *end_addr;
+    uint8 *else_addr;
+} block_addr;
+#endif
+
+bool
+wasm_loader_find_block_addr(WASMModule *module,
+                            const uint8 *start_addr,
+                            const uint8 *code_end_addr,
+                            uint8 block_type,
+                            uint8 **p_else_addr,
+                            uint8 **p_end_addr,
+                            char *error_buf,
+                            uint32 error_buf_size)
+{
+    const uint8 *p = start_addr, *p_end = code_end_addr;
+    uint8 *else_addr = NULL;
+    uint32 block_nested_depth = 1, count, i, u32, u64;
+    uint8 opcode, u8;
+
+#if WASM_ENABLE_HASH_BLOCK_ADDR != 0
+    HashMap *branch_set = module->branch_set;
+    block_addr *block;
+    if ((block = wasm_hash_map_find(branch_set, (void*)start_addr))) {
+        if (block->block_type != block_type)
+            return false;
+        if (block_type == BLOCK_TYPE_IF) /* if block */
+            *p_else_addr = block->else_addr;
+        *p_end_addr = block->end_addr;
+        return true;
+    }
+#else
+    BlockAddr block_stack[16] = { 0 }, *block;
+    uint32 j, t;
+
+    i = ((uintptr_t)start_addr) ^ ((uintptr_t)start_addr >> 16);
+    i = i % BLOCK_ADDR_CACHE_SIZE;
+    block = module->block_addr_cache[i];
+    for (j = 0; j < BLOCK_ADDR_CONFLICT_SIZE; j++) {
+        if (block[j].start_addr == start_addr) {
+            /* Cache hit */
+            *p_else_addr = block[j].else_addr;
+            *p_end_addr = block[j].end_addr;
+            return true;
+        }
+    }
+
+    /* Cache unhit */
+    block_stack[0].start_addr = start_addr;
+#endif
+
+    while (p < code_end_addr) {
+        opcode = *p++;
+
+        switch (opcode) {
+            case WASM_OP_UNREACHABLE:
+            case WASM_OP_NOP:
+                break;
+
+            case WASM_OP_BLOCK:
+            case WASM_OP_LOOP:
+            case WASM_OP_IF:
+                read_leb_uint32(p, p_end, u32); /* blocktype */
+#if WASM_ENABLE_HASH_BLOCK_ADDR == 0
+                if (block_nested_depth < 
sizeof(block_stack)/sizeof(BlockAddr)) {
+                    block_stack[block_nested_depth].start_addr = p;
+                    block_stack[block_nested_depth].else_addr = NULL;
+                }
+#endif
+                block_nested_depth++;
+                break;
+
+            case WASM_OP_ELSE:
+                if (block_type == BLOCK_TYPE_IF && block_nested_depth == 1)
+                    else_addr = (uint8*)(p - 1);
+#if WASM_ENABLE_HASH_BLOCK_ADDR == 0
+                if (block_nested_depth - 1 < 
sizeof(block_stack)/sizeof(BlockAddr))
+                    block_stack[block_nested_depth - 1].else_addr = (uint8*)(p 
- 1);
+#endif
+                break;
+
+            case WASM_OP_END:
+                if (block_nested_depth == 1) {
+                    if (block_type == BLOCK_TYPE_IF)
+                        *p_else_addr = else_addr;
+                    *p_end_addr = (uint8*)(p - 1);
+
+#if WASM_ENABLE_HASH_BLOCK_ADDR != 0
+                    if (block_type == BLOCK_TYPE_IF)
+                        block = wasm_malloc(sizeof(block_addr));
+                    else
+                        block = wasm_malloc(offsetof(block_addr, else_addr));
+
+                    if (block) {
+                        block->block_type = block_type;
+                        if (block_type == BLOCK_TYPE_IF)
+                            block->else_addr = else_addr;
+                        block->end_addr = (uint8*)(p - 1);
+
+                        if (!wasm_hash_map_insert(branch_set, 
(void*)start_addr, block))
+                            wasm_free(block);
+                    }
+#else
+                    block_stack[0].end_addr = (uint8*)(p - 1);
+                    for (t = 0; t < sizeof(block_stack)/sizeof(BlockAddr); 
t++) {
+                        start_addr = block_stack[t].start_addr;
+                        if (start_addr) {
+                            i = ((uintptr_t)start_addr) ^ 
((uintptr_t)start_addr >> 16);
+                            i = i % BLOCK_ADDR_CACHE_SIZE;
+                            block = module->block_addr_cache[i];
+                            for (j = 0; j < BLOCK_ADDR_CONFLICT_SIZE; j++)
+                                if (!block[j].start_addr)
+                                    break;
+
+                            if (j == BLOCK_ADDR_CONFLICT_SIZE) {
+                                memmove(block + 1, block, 
(BLOCK_ADDR_CONFLICT_SIZE - 1) *
+                                                          sizeof(BlockAddr));
+                                j = 0;
+
+                            }
+                            block[j].start_addr = block_stack[t].start_addr;
+                            block[j].else_addr = block_stack[t].else_addr;
+                            block[j].end_addr = block_stack[t].end_addr;
+                        }
+                        else
+                            break;
+                    }
+#endif
+                    return true;
+                }
+                else {
+                    block_nested_depth--;
+#if WASM_ENABLE_HASH_BLOCK_ADDR == 0
+                    if (block_nested_depth < 
sizeof(block_stack)/sizeof(BlockAddr))
+                        block_stack[block_nested_depth].end_addr = (uint8*)(p 
- 1);
+#endif
+                }
+                break;
+
+            case WASM_OP_BR:
+            case WASM_OP_BR_IF:
+                read_leb_uint32(p, p_end, u32); /* labelidx */
+                break;
+
+            case WASM_OP_BR_TABLE:
+                read_leb_uint32(p, p_end, count); /* lable num */
+                for (i = 0; i <= count; i++) /* lableidxs */
+                    read_leb_uint32(p, p_end, u32);
+                break;
+
+            case WASM_OP_RETURN:
+                break;
+
+            case WASM_OP_CALL:
+                read_leb_uint32(p, p_end, u32); /* funcidx */
+                break;
+
+            case WASM_OP_CALL_INDIRECT:
+                read_leb_uint32(p, p_end, u32); /* typeidx */
+                read_leb_uint8(p, p_end, u8); /* 0x00 */
+                break;
+
+            case WASM_OP_DROP:
+            case WASM_OP_SELECT:
+            case WASM_OP_DROP_32:
+            case WASM_OP_DROP_64:
+            case WASM_OP_SELECT_32:
+            case WASM_OP_SELECT_64:
+                break;
+
+            case WASM_OP_GET_LOCAL:
+            case WASM_OP_SET_LOCAL:
+            case WASM_OP_TEE_LOCAL:
+            case WASM_OP_GET_GLOBAL:
+            case WASM_OP_SET_GLOBAL:
+                read_leb_uint32(p, p_end, u32); /* localidx */
+                break;
+
+            case WASM_OP_I32_LOAD:
+            case WASM_OP_I64_LOAD:
+            case WASM_OP_F32_LOAD:
+            case WASM_OP_F64_LOAD:
+            case WASM_OP_I32_LOAD8_S:
+            case WASM_OP_I32_LOAD8_U:
+            case WASM_OP_I32_LOAD16_S:
+            case WASM_OP_I32_LOAD16_U:
+            case WASM_OP_I64_LOAD8_S:
+            case WASM_OP_I64_LOAD8_U:
+            case WASM_OP_I64_LOAD16_S:
+            case WASM_OP_I64_LOAD16_U:
+            case WASM_OP_I64_LOAD32_S:
+            case WASM_OP_I64_LOAD32_U:
+            case WASM_OP_I32_STORE:
+            case WASM_OP_I64_STORE:
+            case WASM_OP_F32_STORE:
+            case WASM_OP_F64_STORE:
+            case WASM_OP_I32_STORE8:
+            case WASM_OP_I32_STORE16:
+            case WASM_OP_I64_STORE8:
+            case WASM_OP_I64_STORE16:
+            case WASM_OP_I64_STORE32:
+                read_leb_uint32(p, p_end, u32); /* align */
+                read_leb_uint32(p, p_end, u32); /* offset */
+                break;
+
+            case WASM_OP_MEMORY_SIZE:
+            case WASM_OP_MEMORY_GROW:
+                read_leb_uint32(p, p_end, u32); /* 0x00 */
+                break;
+
+            case WASM_OP_I32_CONST:
+                read_leb_uint32(p, p_end, u32);
+                break;
+            case WASM_OP_I64_CONST:
+                read_leb_uint64(p, p_end, u64);
+                break;
+            case WASM_OP_F32_CONST:
+                p += sizeof(float32);
+                break;
+            case WASM_OP_F64_CONST:
+                p += sizeof(float64);
+                break;
+
+            case WASM_OP_I32_EQZ:
+            case WASM_OP_I32_EQ:
+            case WASM_OP_I32_NE:
+            case WASM_OP_I32_LT_S:
+            case WASM_OP_I32_LT_U:
+            case WASM_OP_I32_GT_S:
+            case WASM_OP_I32_GT_U:
+            case WASM_OP_I32_LE_S:
+            case WASM_OP_I32_LE_U:
+            case WASM_OP_I32_GE_S:
+            case WASM_OP_I32_GE_U:
+            case WASM_OP_I64_EQZ:
+            case WASM_OP_I64_EQ:
+            case WASM_OP_I64_NE:
+            case WASM_OP_I64_LT_S:
+            case WASM_OP_I64_LT_U:
+            case WASM_OP_I64_GT_S:
+            case WASM_OP_I64_GT_U:
+            case WASM_OP_I64_LE_S:
+            case WASM_OP_I64_LE_U:
+            case WASM_OP_I64_GE_S:
+            case WASM_OP_I64_GE_U:
+            case WASM_OP_F32_EQ:
+            case WASM_OP_F32_NE:
+            case WASM_OP_F32_LT:
+            case WASM_OP_F32_GT:
+            case WASM_OP_F32_LE:
+            case WASM_OP_F32_GE:
+            case WASM_OP_F64_EQ:
+            case WASM_OP_F64_NE:
+            case WASM_OP_F64_LT:
+            case WASM_OP_F64_GT:
+            case WASM_OP_F64_LE:
+            case WASM_OP_F64_GE:
+            case WASM_OP_I32_CLZ:
+            case WASM_OP_I32_CTZ:
+            case WASM_OP_I32_POPCNT:
+            case WASM_OP_I32_ADD:
+            case WASM_OP_I32_SUB:
+            case WASM_OP_I32_MUL:
+            case WASM_OP_I32_DIV_S:
+            case WASM_OP_I32_DIV_U:
+            case WASM_OP_I32_REM_S:
+            case WASM_OP_I32_REM_U:
+            case WASM_OP_I32_AND:
+            case WASM_OP_I32_OR:
+            case WASM_OP_I32_XOR:
+            case WASM_OP_I32_SHL:
+            case WASM_OP_I32_SHR_S:
+            case WASM_OP_I32_SHR_U:
+            case WASM_OP_I32_ROTL:
+            case WASM_OP_I32_ROTR:
+            case WASM_OP_I64_CLZ:
+            case WASM_OP_I64_CTZ:
+            case WASM_OP_I64_POPCNT:
+            case WASM_OP_I64_ADD:
+            case WASM_OP_I64_SUB:
+            case WASM_OP_I64_MUL:
+            case WASM_OP_I64_DIV_S:
+            case WASM_OP_I64_DIV_U:
+            case WASM_OP_I64_REM_S:
+            case WASM_OP_I64_REM_U:
+            case WASM_OP_I64_AND:
+            case WASM_OP_I64_OR:
+            case WASM_OP_I64_XOR:
+            case WASM_OP_I64_SHL:
+            case WASM_OP_I64_SHR_S:
+            case WASM_OP_I64_SHR_U:
+            case WASM_OP_I64_ROTL:
+            case WASM_OP_I64_ROTR:
+            case WASM_OP_F32_ABS:
+            case WASM_OP_F32_NEG:
+            case WASM_OP_F32_CEIL:
+            case WASM_OP_F32_FLOOR:
+            case WASM_OP_F32_TRUNC:
+            case WASM_OP_F32_NEAREST:
+            case WASM_OP_F32_SQRT:
+            case WASM_OP_F32_ADD:
+            case WASM_OP_F32_SUB:
+            case WASM_OP_F32_MUL:
+            case WASM_OP_F32_DIV:
+            case WASM_OP_F32_MIN:
+            case WASM_OP_F32_MAX:
+            case WASM_OP_F32_COPYSIGN:
+            case WASM_OP_F64_ABS:
+            case WASM_OP_F64_NEG:
+            case WASM_OP_F64_CEIL:
+            case WASM_OP_F64_FLOOR:
+            case WASM_OP_F64_TRUNC:
+            case WASM_OP_F64_NEAREST:
+            case WASM_OP_F64_SQRT:
+            case WASM_OP_F64_ADD:
+            case WASM_OP_F64_SUB:
+            case WASM_OP_F64_MUL:
+            case WASM_OP_F64_DIV:
+            case WASM_OP_F64_MIN:
+            case WASM_OP_F64_MAX:
+            case WASM_OP_F64_COPYSIGN:
+            case WASM_OP_I32_WRAP_I64:
+            case WASM_OP_I32_TRUNC_S_F32:
+            case WASM_OP_I32_TRUNC_U_F32:
+            case WASM_OP_I32_TRUNC_S_F64:
+            case WASM_OP_I32_TRUNC_U_F64:
+            case WASM_OP_I64_EXTEND_S_I32:
+            case WASM_OP_I64_EXTEND_U_I32:
+            case WASM_OP_I64_TRUNC_S_F32:
+            case WASM_OP_I64_TRUNC_U_F32:
+            case WASM_OP_I64_TRUNC_S_F64:
+            case WASM_OP_I64_TRUNC_U_F64:
+            case WASM_OP_F32_CONVERT_S_I32:
+            case WASM_OP_F32_CONVERT_U_I32:
+            case WASM_OP_F32_CONVERT_S_I64:
+            case WASM_OP_F32_CONVERT_U_I64:
+            case WASM_OP_F32_DEMOTE_F64:
+            case WASM_OP_F64_CONVERT_S_I32:
+            case WASM_OP_F64_CONVERT_U_I32:
+            case WASM_OP_F64_CONVERT_S_I64:
+            case WASM_OP_F64_CONVERT_U_I64:
+            case WASM_OP_F64_PROMOTE_F32:
+            case WASM_OP_I32_REINTERPRET_F32:
+            case WASM_OP_I64_REINTERPRET_F64:
+            case WASM_OP_F32_REINTERPRET_I32:
+            case WASM_OP_F64_REINTERPRET_I64:
+                break;
+
+            default:
+                if (error_buf)
+                    snprintf(error_buf, error_buf_size,
+                             "WASM loader find block addr failed: "
+                             "invalid opcode %02x.", opcode);
+                return false;
+        }
+    }
+
+    (void)u32;
+    (void)u64;
+    (void)u8;
+    return false;
+}
+
+#define REF_I32   VALUE_TYPE_I32
+#define REF_F32   VALUE_TYPE_F32
+#define REF_I64_1 VALUE_TYPE_I64
+#define REF_I64_2 VALUE_TYPE_I64
+#define REF_F64_1 VALUE_TYPE_F64
+#define REF_F64_2 VALUE_TYPE_F64
+
+typedef struct BranchBlock {
+    uint8 block_type;
+    uint8 return_type;
+    bool jumped_by_br;
+    uint8 *start_addr;
+    uint8 *else_addr;
+    uint8 *end_addr;
+    uint32 stack_cell_num;
+} BranchBlock;
+
+static void*
+memory_realloc(void *mem_old, uint32 size_old, uint32 size_new)
+{
+    uint8 *mem_new;
+    wasm_assert(size_new > size_old);
+    if ((mem_new = wasm_malloc(size_new))) {
+        memcpy(mem_new, mem_old, size_old);
+        memset(mem_new + size_old, 0, size_new - size_old);
+        wasm_free(mem_old);
+    }
+    return mem_new;
+}
+
+#define MEM_REALLOC(mem, size_old, size_new) do {           \
+    void *mem_new = memory_realloc(mem, size_old, size_new);\
+    if (!mem_new) {                                         \
+      set_error_buf(error_buf, error_buf_size,              \
+                    "WASM loader prepare bytecode failed: " \
+                    "allocate memory failed.");             \
+      goto fail;                                            \
+    }                                                       \
+    mem = mem_new;                                          \
+  } while (0)
+
+static bool
+check_stack_push(uint8 **p_frame_ref_bottom, uint8 **p_frame_ref_boundary,
+                 uint8 **p_frame_ref, uint32 *p_frame_ref_size,
+                 uint32 stack_cell_num,
+                 char *error_buf, uint32 error_buf_size)
+{
+    if (*p_frame_ref >= *p_frame_ref_boundary) {
+        MEM_REALLOC(*p_frame_ref_bottom, *p_frame_ref_size,
+                *p_frame_ref_size + 16);
+        *p_frame_ref_size += 16;
+        *p_frame_ref_boundary = *p_frame_ref_bottom + *p_frame_ref_size;
+        *p_frame_ref = *p_frame_ref_bottom + stack_cell_num;
+    }
+    return true;
+fail:
+    return false;
+}
+
+#define CHECK_STACK_PUSH() do {                                 \
+    if (!check_stack_push(&frame_ref_bottom, &frame_ref_boundary,\
+                          &frame_ref, &frame_ref_size,          \
+                          stack_cell_num,                       \
+                          error_buf, error_buf_size))           \
+      goto fail;                                                \
+  } while (0)
+
+static bool
+check_stack_pop(uint8 type, uint8 *frame_ref, uint32 stack_cell_num,
+                char *error_buf, uint32 error_buf_size,
+                const char *type_str)
+{
+    if (((type == VALUE_TYPE_I32 || type == VALUE_TYPE_F32)
+         && stack_cell_num < 1)
+        || ((type == VALUE_TYPE_I64 || type == VALUE_TYPE_F64)
+            && stack_cell_num < 2)) {
+        set_error_buf(error_buf, error_buf_size,
+                      "type mismatch: expected data but stack was empty");
+        return false;
+    }
+
+    if ((type == VALUE_TYPE_I32 && *(frame_ref - 1) != REF_I32)
+        || (type == VALUE_TYPE_F32 && *(frame_ref - 1) != REF_F32)
+        || (type == VALUE_TYPE_I64
+            && (*(frame_ref - 2) != REF_I64_1 || *(frame_ref - 1) != 
REF_I64_2))
+        || (type == VALUE_TYPE_F64
+            && (*(frame_ref - 2) != REF_F64_1 || *(frame_ref - 1) != 
REF_F64_2))) {
+        if (error_buf != NULL)
+            snprintf(error_buf, error_buf_size, "%s%s%s",
+                     "type mismatch: expected ", type_str, " but got other");
+        return false;
+    }
+    return true;
+}
+
+#define CHECK_STACK_POP(TYPE, type) do {                    \
+    if (!check_stack_pop(VALUE_TYPE_##TYPE,                 \
+                         frame_ref, stack_cell_num,         \
+                         error_buf, error_buf_size, #type)) \
+      goto fail;                                            \
+  } while (0)
+
+#define PUSH_I32() do {                         \
+    CHECK_STACK_PUSH();                         \
+    *frame_ref++ = REF_I32;                     \
+    stack_cell_num++;                           \
+    if (stack_cell_num > max_stack_cell_num)    \
+      max_stack_cell_num = stack_cell_num;      \
+  } while (0)
+
+#define PUSH_F32() do {                         \
+    CHECK_STACK_PUSH();                         \
+    *frame_ref++ = REF_F32;                     \
+    stack_cell_num++;                           \
+    if (stack_cell_num > max_stack_cell_num)    \
+      max_stack_cell_num = stack_cell_num;      \
+  } while (0)
+
+#define PUSH_I64() do {                         \
+    CHECK_STACK_PUSH();                         \
+    *frame_ref++ = REF_I64_1;                   \
+    stack_cell_num++;                           \
+    CHECK_STACK_PUSH();                         \
+    *frame_ref++ = REF_I64_2;                   \
+    stack_cell_num++;                           \
+    if (stack_cell_num > max_stack_cell_num)    \
+      max_stack_cell_num = stack_cell_num;      \
+  } while (0)
+
+#define PUSH_F64() do {                         \
+    CHECK_STACK_PUSH();                         \
+    *frame_ref++ = REF_F64_1;                   \
+    stack_cell_num++;                           \
+    CHECK_STACK_PUSH();                         \
+    *frame_ref++ = REF_F64_2;                   \
+    stack_cell_num++;                           \
+    if (stack_cell_num > max_stack_cell_num)    \
+      max_stack_cell_num = stack_cell_num;      \
+  } while (0)
+
+#define POP_I32() do {                          \
+    CHECK_STACK_POP(I32, i32);                  \
+    stack_cell_num--;                           \
+    frame_ref--;                                \
+  } while (0)
+
+#define POP_I64() do {                          \
+    CHECK_STACK_POP(I64, i64);                  \
+    stack_cell_num -= 2;                        \
+    frame_ref -= 2;                             \
+  } while (0)
+
+#define POP_F32() do {                          \
+    CHECK_STACK_POP(F32, f32);                  \
+    stack_cell_num--;                           \
+    frame_ref--;                                \
+  } while (0)
+
+#define POP_F64() do {                          \
+    CHECK_STACK_POP(F64, f64);                  \
+    stack_cell_num -= 2;                        \
+    frame_ref -= 2;                             \
+  } while (0)
+
+static bool
+push_type(uint8 type, uint8 **p_frame_ref_bottom,
+          uint8 **p_frame_ref_boundary,
+          uint8 **p_frame_ref, uint32 *p_frame_ref_size,
+          uint32 *p_stack_cell_num, uint32 *p_max_stack_cell_num,
+          char *error_buf, uint32 error_buf_size)
+{
+    uint8 *frame_ref = *p_frame_ref;
+    uint32 frame_ref_size = *p_frame_ref_size;
+    uint32 max_stack_cell_num = *p_max_stack_cell_num;
+    uint32 stack_cell_num = *p_stack_cell_num;
+
+    switch (type) {
+        case VALUE_TYPE_I64:
+        case VALUE_TYPE_F64:
+            if (!check_stack_push(p_frame_ref_bottom, p_frame_ref_boundary,
+                                  &frame_ref, &frame_ref_size,
+                                  stack_cell_num,
+                                  error_buf, error_buf_size))
+                goto fail;
+            *frame_ref++ = type;
+            stack_cell_num++;
+            if (stack_cell_num > max_stack_cell_num)
+                max_stack_cell_num = stack_cell_num;
+        case VALUE_TYPE_I32:
+        case VALUE_TYPE_F32:
+            if (!check_stack_push(p_frame_ref_bottom, p_frame_ref_boundary,
+                                  &frame_ref, &frame_ref_size,
+                                  stack_cell_num,
+                                  error_buf, error_buf_size))
+                goto fail;
+            *frame_ref++ = type;
+            stack_cell_num++;
+            if (stack_cell_num > max_stack_cell_num)
+                max_stack_cell_num = stack_cell_num;
+            break;
+    }
+
+    *p_frame_ref = frame_ref;
+    *p_frame_ref_size = frame_ref_size;
+    *p_max_stack_cell_num = max_stack_cell_num;
+    *p_stack_cell_num = stack_cell_num;
+    return true;
+fail:
+    return false;
+}
+
+#define PUSH_TYPE(type) do {                        \
+    if (!push_type(type, &frame_ref_bottom,         \
+            &frame_ref_boundary,                    \
+            &frame_ref, &frame_ref_size,            \
+            &stack_cell_num, &max_stack_cell_num,   \
+            error_buf, error_buf_size))             \
+        goto fail;                                  \
+  } while (0)
+
+static bool
+pop_type(uint8 type, uint8 **p_frame_ref, uint32 *p_stack_cell_num,
+         char *error_buf, uint32 error_buf_size)
+{
+    char *type_str[] = { "f64", "f32", "i64", "i32" };
+    switch (type) {
+        case VALUE_TYPE_I64:
+        case VALUE_TYPE_F64:
+            if (!check_stack_pop(type, *p_frame_ref, *p_stack_cell_num,
+                                 error_buf, error_buf_size,
+                                 type_str[type - VALUE_TYPE_F64]))
+                return false;
+            *p_frame_ref -= 2;
+            *p_stack_cell_num -= 2;
+            break;
+        case VALUE_TYPE_I32:
+        case VALUE_TYPE_F32:
+            if (!check_stack_pop(type, *p_frame_ref, *p_stack_cell_num,
+                                 error_buf, error_buf_size,
+                                 type_str[type - VALUE_TYPE_F64]))
+                return false;
+            *p_frame_ref -= 1;
+            *p_stack_cell_num -= 1;
+            break;
+    }
+    return true;
+}
+
+#define POP_TYPE(type) do {                         \
+    if (!pop_type(type, &frame_ref, &stack_cell_num,\
+                  error_buf, error_buf_size))       \
+      goto fail;                                    \
+  } while (0)
+
+#define CHECK_CSP_PUSH() do {                               \
+    if (frame_csp >= frame_csp_boundary) {                  \
+      MEM_REALLOC(frame_csp_bottom, frame_csp_size,         \
+                  frame_csp_size + 8 * sizeof(BranchBlock));\
+      frame_csp_size += 8 * sizeof(BranchBlock);            \
+      frame_csp_boundary = frame_csp_bottom +               \
+                    frame_csp_size / sizeof(BranchBlock);   \
+      frame_csp = frame_csp_bottom + csp_num;               \
+    }                                                       \
+  } while (0)
+
+#define CHECK_CSP_POP() do {                                \
+    if (csp_num < 1) {                                      \
+      set_error_buf(error_buf, error_buf_size,              \
+      "type mismatch: expected data but block stack was empty");\
+      goto fail;                                            \
+    }                                                       \
+  } while (0)
+
+#define PUSH_CSP(type, ret_type, _start_addr) do {  \
+    CHECK_CSP_PUSH();                               \
+    frame_csp->block_type = type;                   \
+    frame_csp->jumped_by_br = false;                \
+    frame_csp->return_type = ret_type;              \
+    frame_csp->start_addr = _start_addr;            \
+    frame_csp->else_addr = NULL;                    \
+    frame_csp->end_addr = NULL;                     \
+    frame_csp->stack_cell_num = stack_cell_num;     \
+    frame_csp++;                                    \
+    csp_num++;                                      \
+    if (csp_num > max_csp_num)                      \
+      max_csp_num = csp_num;                        \
+  } while (0)
+
+#define POP_CSP() do {                              \
+    CHECK_CSP_POP();                                \
+    frame_csp--;                                    \
+    csp_num--;                                      \
+  } while (0)
+
+#define GET_LOCAL_INDEX_AND_TYPE() do {             \
+    read_leb_uint32(p, p_end, local_idx);           \
+    if (local_idx >= param_count + local_count) {   \
+      set_error_buf(error_buf, error_buf_size,      \
+        "invalid index: local index out of range"); \
+      goto fail;                                    \
+    }                                               \
+    local_type = local_idx < param_count            \
+        ? param_types[local_idx]                    \
+        : local_types[local_idx - param_count];     \
+  } while (0)
+
+#define CHECK_BR(depth) do {                                        \
+    if (csp_num < depth + 1) {                                      \
+      set_error_buf(error_buf, error_buf_size, "type mismatch: "    \
+                    "expected data but block stack was empty");     \
+      goto fail;                                                    \
+    }                                                               \
+    if ((frame_csp - (depth + 1))->block_type != BLOCK_TYPE_LOOP) { \
+      uint8 tmp_ret_type = (frame_csp - (depth + 1))->return_type;  \
+      if ((tmp_ret_type == VALUE_TYPE_I32                           \
+            && (stack_cell_num < 1 || *(frame_ref - 1) != REF_I32)) \
+          || (tmp_ret_type == VALUE_TYPE_F32                        \
+              && (stack_cell_num < 1 || *(frame_ref - 1) != REF_F32))\
+          || (tmp_ret_type == VALUE_TYPE_I64                        \
+              && (stack_cell_num < 2                                \
+                  || *(frame_ref - 2) != REF_I64_1                  \
+                  || *(frame_ref - 1) != REF_I64_2))                \
+          || (tmp_ret_type == VALUE_TYPE_F64                        \
+              && (stack_cell_num < 2                                \
+                  || *(frame_ref - 2) != REF_F64_1                  \
+                  || *(frame_ref - 1) != REF_F64_2))) {             \
+        set_error_buf(error_buf, error_buf_size, "type mismatch: "  \
+              "expected data but stack was empty or other type");   \
+        goto fail;                                                  \
+      }                                                             \
+      (frame_csp - (depth + 1))->jumped_by_br = true;               \
+    }                                                               \
+  } while (0)
+
+static bool
+check_memory(WASMModule *module,
+             char *error_buf, uint32 error_buf_size)
+{
+    if (module->memory_count == 0
+        && module->import_memory_count == 0) {
+        set_error_buf(error_buf, error_buf_size,
+                      "load or store in module without default memory");
+        return false;
+    }
+    return true;
+}
+
+#define CHECK_MEMORY() do {                                 \
+    if (!check_memory(module, error_buf, error_buf_size))   \
+      goto fail;                                            \
+  } while (0)
+
+static bool
+wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func,
+                             char *error_buf, uint32 error_buf_size)
+{
+#if WASM_ENABLE_HASH_BLOCK_ADDR != 0
+    block_addr *block;
+#endif
+    uint8 *p = func->code, *p_end = func->code + func->code_size;
+    uint8 *frame_ref_bottom = NULL, *frame_ref_boundary, *frame_ref;
+    BranchBlock *frame_csp_bottom = NULL, *frame_csp_boundary, *frame_csp;
+    uint32 param_count, local_count, global_count;
+    uint32 max_stack_cell_num = 0, max_csp_num = 0;
+    uint32 stack_cell_num = 0, csp_num = 0;
+    uint32 frame_ref_size, frame_csp_size;
+    uint8 *param_types, ret_type, *local_types, local_type, global_type;
+    uint32 count, i, local_idx, global_idx, block_return_type, depth, u32;
+    int32 i32, i32_const = 0;
+    int64 i64;
+    uint8 opcode, u8;
+    bool return_value = false, is_i32_const = false;
+
+    global_count = module->import_global_count + module->global_count;
+
+    param_count = func->func_type->param_count;
+    param_types = func->func_type->types;
+    ret_type = func->func_type->result_count
+               ? param_types[param_count] : VALUE_TYPE_VOID;
+
+    local_count = func->local_count;
+    local_types = func->local_types;
+
+    frame_ref_size = 32;
+    if (!(frame_ref_bottom = frame_ref = wasm_malloc(frame_ref_size))) {
+        set_error_buf(error_buf, error_buf_size,
+                      "WASM loader prepare bytecode failed: "
+                      "allocate memory failed");
+        goto fail;
+    }
+    memset(frame_ref_bottom, 0, frame_ref_size);
+    frame_ref_boundary = frame_ref_bottom + frame_ref_size;
+
+    frame_csp_size = sizeof(BranchBlock) * 8;
+    if (!(frame_csp_bottom = frame_csp = wasm_malloc(frame_csp_size))) {
+        set_error_buf(error_buf, error_buf_size,
+                      "WASM loader prepare bytecode failed: "
+                      "allocate memory failed");
+        goto fail;
+    }
+
+    memset(frame_csp_bottom, 0, frame_csp_size);
+    frame_csp_boundary = frame_csp_bottom + 8;
+
+    PUSH_CSP(BLOCK_TYPE_FUNCTION, ret_type, p);
+    (frame_csp - 1)->jumped_by_br = true;
+
+    while (p < p_end) {
+        opcode = *p++;
+
+        switch (opcode) {
+            case WASM_OP_UNREACHABLE:
+                goto handle_op_br;
+
+            case WASM_OP_NOP:
+                break;
+
+            case WASM_OP_BLOCK:
+                read_leb_uint32(p, p_end, block_return_type);
+                PUSH_CSP(BLOCK_TYPE_BLOCK, block_return_type, p);
+                break;
+
+            case WASM_OP_LOOP:
+                read_leb_uint32(p, p_end, block_return_type);
+                PUSH_CSP(BLOCK_TYPE_LOOP, block_return_type, p);
+                break;
+
+            case WASM_OP_IF:
+                POP_I32();
+                read_leb_uint32(p, p_end, block_return_type);
+                PUSH_CSP(BLOCK_TYPE_IF, block_return_type, p);
+                if (!is_i32_const)
+                    (frame_csp - 1)->jumped_by_br = true;
+                else {
+                    if (!i32_const) {
+                        if(!wasm_loader_find_block_addr(module,
+                                                        (frame_csp - 
1)->start_addr,
+                                                        p_end,
+                                                        (frame_csp - 
1)->block_type,
+                                                        &(frame_csp - 
1)->else_addr,
+                                                        &(frame_csp - 
1)->end_addr,
+                                                        error_buf, 
error_buf_size))
+                            goto fail;
+
+                        if ((frame_csp - 1)->else_addr)
+                            p = (frame_csp - 1)->else_addr;
+                        else
+                            p = (frame_csp - 1)->end_addr;
+                    }
+                }
+                break;
+
+            case WASM_OP_ELSE:
+                if (csp_num < 2) {
+                    set_error_buf(error_buf, error_buf_size, "invalid else");
+                    goto fail;
+                }
+
+                if ((frame_csp - 1)->block_type != BLOCK_TYPE_IF) {
+                    set_error_buf(error_buf, error_buf_size, "invalid else");
+                    goto fail;
+                }
+
+                (frame_csp - 1)->else_addr = p - 1;
+                stack_cell_num = (frame_csp - 1)->stack_cell_num;
+                frame_ref = frame_ref_bottom + stack_cell_num;
+                break;
+
+            case WASM_OP_END:
+            {
+                POP_CSP();
+
+                POP_TYPE(frame_csp->return_type);
+                PUSH_TYPE(frame_csp->return_type);
+
+                if (csp_num > 0) {
+                    frame_csp->end_addr = p - 1;
+
+#if WASM_ENABLE_HASH_BLOCK_ADDR != 0
+                    if (wasm_hash_map_find(module->branch_set, 
(void*)frame_csp->start_addr))
+                        break;
+
+                    if (frame_csp->block_type == BLOCK_TYPE_IF)
+                        block = wasm_malloc(sizeof(block_addr));
+                    else
+                        block = wasm_malloc(offsetof(block_addr, else_addr));
+
+                    if (!block) {
+                        set_error_buf(error_buf, error_buf_size,
+                                      "WASM loader prepare bytecode failed: "
+                                      "allocate memory failed.");
+                        goto fail;
+                    }
+
+                    block->block_type = frame_csp->block_type;
+                    if (frame_csp->block_type == BLOCK_TYPE_IF)
+                        block->else_addr = (void*)frame_csp->else_addr;
+                    block->end_addr = (void*)frame_csp->end_addr;
+
+                    if (!wasm_hash_map_insert(module->branch_set, 
(void*)frame_csp->start_addr,
+                                              block)) {
+                        set_error_buf(error_buf, error_buf_size,
+                                      "WASM loader prepare bytecode failed: "
+                                      "allocate memory failed.");
+                        wasm_free(block);
+                        goto fail;
+                    }
+#endif
+                }
+                break;
+            }
+
+            case WASM_OP_BR:
+            {
+                read_leb_uint32(p, p_end, depth);
+                CHECK_BR(depth);
+
+handle_op_br:
+                for (i = 1; i <= csp_num; i++)
+                    if ((frame_csp - i)->jumped_by_br)
+                        break;
+
+                block_return_type = (frame_csp - i)->return_type;
+
+                if(!wasm_loader_find_block_addr(module,
+                                                (frame_csp - i)->start_addr,
+                                                p_end,
+                                                (frame_csp - i)->block_type,
+                                                &(frame_csp - i)->else_addr,
+                                                &(frame_csp - i)->end_addr,
+                                                error_buf, error_buf_size))
+                    goto fail;
+
+                stack_cell_num = (frame_csp - i)->stack_cell_num;
+                frame_ref = frame_ref_bottom + stack_cell_num;
+                csp_num -= i - 1;
+                frame_csp -= i - 1;
+
+                if ((frame_csp - 1)->block_type == BLOCK_TYPE_IF
+                        && (frame_csp - 1)->else_addr != NULL
+                        && p <= (frame_csp - 1)->else_addr)
+                    p = (frame_csp - 1)->else_addr;
+                else {
+                    p = (frame_csp - 1)->end_addr;
+                    PUSH_TYPE(block_return_type);
+                }
+
+                break;
+            }
+
+            case WASM_OP_BR_IF:
+                read_leb_uint32(p, p_end, depth);
+                POP_I32();
+                CHECK_BR(depth);
+                if (!is_i32_const)
+                    (frame_csp - (depth + 1))->jumped_by_br = true;
+                else {
+                    if (i32_const)
+                        goto handle_op_br;
+                }
+                break;
+
+            case WASM_OP_BR_TABLE:
+            {
+                read_leb_uint32(p, p_end, count);
+                POP_I32();
+
+                /* TODO: check the const */
+                for (i = 0; i <= count; i++) {
+                    read_leb_uint32(p, p_end, depth);
+                    CHECK_BR(depth);
+                }
+                goto handle_op_br;
+            }
+
+            case WASM_OP_RETURN:
+            {
+                POP_TYPE(ret_type);
+                PUSH_TYPE(ret_type);
+
+                if(!wasm_loader_find_block_addr(module,
+                                                (frame_csp - 1)->start_addr,
+                                                p_end,
+                                                (frame_csp - 1)->block_type,
+                                                &(frame_csp - 1)->else_addr,
+                                                &(frame_csp - 1)->end_addr,
+                                                error_buf, error_buf_size))
+                    goto fail;
+
+                stack_cell_num = (frame_csp - 1)->stack_cell_num;
+                frame_ref = frame_ref_bottom + stack_cell_num;
+                if ((frame_csp - 1)->block_type == BLOCK_TYPE_IF
+                    && p <= (frame_csp - 1)->else_addr) {
+                    p = (frame_csp - 1)->else_addr;
+                }
+                else {
+                    p = (frame_csp - 1)->end_addr;
+                    PUSH_TYPE((frame_csp - 1)->return_type);
+                }
+                break;
+            }
+
+            case WASM_OP_CALL:
+            {
+                WASMType *func_type;
+                uint32 func_idx;
+                int32 idx;
+
+                read_leb_uint32(p, p_end, func_idx);
+
+                if (func_idx >= module->import_function_count + 
module->function_count) {
+                    set_error_buf(error_buf, error_buf_size, "function index 
is overflow");
+                    goto fail;
+                }
+
+                if (func_idx < module->import_function_count)
+                    func_type = 
module->import_functions[func_idx].u.function.func_type;
+                else
+                    func_type =
+                        module->functions[func_idx - 
module->import_function_count]->func_type;
+
+                for (idx = func_type->param_count - 1; idx >= 0; idx--)
+                    POP_TYPE(func_type->types[idx]);
+
+                if (func_type->result_count)
+                    PUSH_TYPE(func_type->types[func_type->param_count]);
+                break;
+            }
+
+            case WASM_OP_CALL_INDIRECT:
+            {
+                int32 idx;
+                WASMType *func_type;
+                uint32 type_idx;
+
+                if (module->table_count == 0
+                    && module->import_table_count == 0) {
+                    set_error_buf(error_buf, error_buf_size,
+                                  "call indirect without default table");
+                    goto fail;
+                }
+
+                read_leb_uint32(p, p_end, type_idx);
+                read_leb_uint8(p, p_end, u8); /* 0x00 */
+                POP_I32();
+
+                if (type_idx >= module->type_count) {
+                    set_error_buf(error_buf, error_buf_size,
+                                  "function index is overflow");
+                    goto fail;
+                }
+
+                func_type = module->types[type_idx];
+
+                for (idx = func_type->param_count - 1; idx >= 0; idx--)
+                    POP_TYPE(func_type->types[idx]);
+
+                PUSH_TYPE(func_type->types[func_type->param_count]);
+                break;
+            }
+
+            case WASM_OP_DROP:
+            {
+                if (stack_cell_num <= 0) {
+                    set_error_buf(error_buf, error_buf_size,
+                                  "invalid drop: stack was empty");
+                    goto fail;
+                }
+
+                if (*(frame_ref - 1) == REF_I32
+                    || *(frame_ref - 1) == REF_F32) {
+                    frame_ref--;
+                    stack_cell_num--;
+                    *(p - 1) = WASM_OP_DROP_32;
+                }
+                else {
+                    if (stack_cell_num <= 1) {
+                        set_error_buf(error_buf, error_buf_size,
+                                      "invalid drop: stack was empty");
+                        goto fail;
+                    }
+                    frame_ref -= 2;
+                    stack_cell_num -= 2;
+                    *(p - 1) = WASM_OP_DROP_64;
+                }
+                break;
+            }
+
+            case WASM_OP_SELECT:
+            {
+                uint8 ref_type;
+
+                POP_I32();
+
+                if (stack_cell_num <= 0) {
+                    set_error_buf(error_buf, error_buf_size,
+                                  "invalid drop: stack was empty");
+                    goto fail;
+                }
+
+                switch (*(frame_ref - 1)) {
+                    case REF_I32:
+                    case REF_F32:
+                        *(p - 1) = WASM_OP_SELECT_32;
+                        break;
+                    case REF_I64_2:
+                    case REF_F64_2:
+                        *(p - 1) = WASM_OP_SELECT_64;
+                        break;
+                }
+
+                ref_type = *(frame_ref - 1);
+                POP_TYPE(ref_type);
+                POP_TYPE(ref_type);
+                PUSH_TYPE(ref_type);
+                break;
+            }
+
+            case WASM_OP_GET_LOCAL:
+            {
+                GET_LOCAL_INDEX_AND_TYPE();
+                PUSH_TYPE(local_type);
+                break;
+            }
+
+            case WASM_OP_SET_LOCAL:
+            {
+                GET_LOCAL_INDEX_AND_TYPE();
+                POP_TYPE(local_type);
+                break;
+            }
+
+            case WASM_OP_TEE_LOCAL:
+            {
+                GET_LOCAL_INDEX_AND_TYPE();
+                POP_TYPE(local_type);
+                PUSH_TYPE(local_type);
+                break;
+            }
+
+            case WASM_OP_GET_GLOBAL:
+            {
+                read_leb_uint32(p, p_end, global_idx);
+                if (global_idx >= global_count) {
+                    set_error_buf(error_buf, error_buf_size,
+                                  "invalid index: global index out of range");
+                    goto fail;
+                }
+
+                global_type = global_idx < module->import_global_count
+                              ? 
module->import_globals[global_idx].u.global.type
+                              :module->globals[global_idx - 
module->import_global_count].type;
+
+                PUSH_TYPE(global_type);
+                break;
+            }
+
+            case WASM_OP_SET_GLOBAL:
+            {
+                read_leb_uint32(p, p_end, global_idx);
+                if (global_idx >= global_count) {
+                    set_error_buf(error_buf, error_buf_size,
+                                  "invalid index: global index out of range");
+                    goto fail;
+                }
+
+                global_type = global_idx < module->import_global_count
+                              ? 
module->import_globals[global_idx].u.global.type
+                              : module->globals[global_idx - 
module->import_global_count].type;
+
+                POP_TYPE(global_type);
+                break;
+            }
+
+            case WASM_OP_I32_LOAD:
+            case WASM_OP_I32_LOAD8_S:
+            case WASM_OP_I32_LOAD8_U:
+            case WASM_OP_I32_LOAD16_S:
+            case WASM_OP_I32_LOAD16_U:
+                CHECK_MEMORY();
+                read_leb_uint32(p, p_end, u32); /* align */
+                read_leb_uint32(p, p_end, u32); /* offset */
+                POP_I32();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_I64_LOAD:
+            case WASM_OP_I64_LOAD8_S:
+            case WASM_OP_I64_LOAD8_U:
+            case WASM_OP_I64_LOAD16_S:
+            case WASM_OP_I64_LOAD16_U:
+            case WASM_OP_I64_LOAD32_S:
+            case WASM_OP_I64_LOAD32_U:
+                CHECK_MEMORY();
+                read_leb_uint32(p, p_end, u32); /* align */
+                read_leb_uint32(p, p_end, u32); /* offset */
+                POP_I32();
+                PUSH_I64();
+                break;
+
+            case WASM_OP_F32_LOAD:
+                CHECK_MEMORY();
+                read_leb_uint32(p, p_end, u32); /* align */
+                read_leb_uint32(p, p_end, u32); /* offset */
+                POP_I32();
+                PUSH_F32();
+                break;
+
+            case WASM_OP_F64_LOAD:
+                CHECK_MEMORY();
+                read_leb_uint32(p, p_end, u32); /* align */
+                read_leb_uint32(p, p_end, u32); /* offset */
+                POP_I32();
+                PUSH_F64();
+                break;
+
+            case WASM_OP_I32_STORE:
+            case WASM_OP_I32_STORE8:
+            case WASM_OP_I32_STORE16:
+                CHECK_MEMORY();
+                read_leb_uint32(p, p_end, u32); /* align */
+                read_leb_uint32(p, p_end, u32); /* offset */
+                POP_I32();
+                POP_I32();
+                break;
+
+            case WASM_OP_I64_STORE:
+            case WASM_OP_I64_STORE8:
+            case WASM_OP_I64_STORE16:
+            case WASM_OP_I64_STORE32:
+                CHECK_MEMORY();
+                read_leb_uint32(p, p_end, u32); /* align */
+                read_leb_uint32(p, p_end, u32); /* offset */
+                POP_I64();
+                POP_I32();
+                break;
+
+            case WASM_OP_F32_STORE:
+                CHECK_MEMORY();
+                read_leb_uint32(p, p_end, u32); /* align */
+                read_leb_uint32(p, p_end, u32); /* offset */
+                POP_F32();
+                POP_I32();
+                break;
+
+            case WASM_OP_F64_STORE:
+                CHECK_MEMORY();
+                read_leb_uint32(p, p_end, u32); /* align */
+                read_leb_uint32(p, p_end, u32); /* offset */
+                POP_F64();
+                POP_I32();
+                break;
+
+            case WASM_OP_MEMORY_SIZE:
+                CHECK_MEMORY();
+                read_leb_uint32(p, p_end, u32); /* 0x00 */
+                PUSH_I32();
+                break;
+
+            case WASM_OP_MEMORY_GROW:
+                CHECK_MEMORY();
+                read_leb_uint32(p, p_end, u32); /* 0x00 */
+                POP_I32();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_I32_CONST:
+                read_leb_int32(p, p_end, i32_const);
+                /* Currently we only track simple I32_CONST opcode. */
+                is_i32_const = true;
+                PUSH_I32();
+                break;
+
+            case WASM_OP_I64_CONST:
+                read_leb_int64(p, p_end, i64);
+                PUSH_I64();
+                break;
+
+            case WASM_OP_F32_CONST:
+                p += sizeof(float32);
+                PUSH_F32();
+                break;
+
+            case WASM_OP_F64_CONST:
+                p += sizeof(float64);
+                PUSH_F64();
+                break;
+
+            case WASM_OP_I32_EQZ:
+                POP_I32();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_I32_EQ:
+            case WASM_OP_I32_NE:
+            case WASM_OP_I32_LT_S:
+            case WASM_OP_I32_LT_U:
+            case WASM_OP_I32_GT_S:
+            case WASM_OP_I32_GT_U:
+            case WASM_OP_I32_LE_S:
+            case WASM_OP_I32_LE_U:
+            case WASM_OP_I32_GE_S:
+            case WASM_OP_I32_GE_U:
+                POP_I32();
+                POP_I32();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_I64_EQZ:
+                POP_I64();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_I64_EQ:
+            case WASM_OP_I64_NE:
+            case WASM_OP_I64_LT_S:
+            case WASM_OP_I64_LT_U:
+            case WASM_OP_I64_GT_S:
+            case WASM_OP_I64_GT_U:
+            case WASM_OP_I64_LE_S:
+            case WASM_OP_I64_LE_U:
+            case WASM_OP_I64_GE_S:
+            case WASM_OP_I64_GE_U:
+                POP_I64();
+                POP_I64();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_F32_EQ:
+            case WASM_OP_F32_NE:
+            case WASM_OP_F32_LT:
+            case WASM_OP_F32_GT:
+            case WASM_OP_F32_LE:
+            case WASM_OP_F32_GE:
+                POP_F32();
+                POP_F32();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_F64_EQ:
+            case WASM_OP_F64_NE:
+            case WASM_OP_F64_LT:
+            case WASM_OP_F64_GT:
+            case WASM_OP_F64_LE:
+            case WASM_OP_F64_GE:
+                POP_F64();
+                POP_F64();
+                PUSH_I32();
+                break;
+
+                break;
+
+            case WASM_OP_I32_CLZ:
+            case WASM_OP_I32_CTZ:
+            case WASM_OP_I32_POPCNT:
+                POP_I32();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_I32_ADD:
+            case WASM_OP_I32_SUB:
+            case WASM_OP_I32_MUL:
+            case WASM_OP_I32_DIV_S:
+            case WASM_OP_I32_DIV_U:
+            case WASM_OP_I32_REM_S:
+            case WASM_OP_I32_REM_U:
+            case WASM_OP_I32_AND:
+            case WASM_OP_I32_OR:
+            case WASM_OP_I32_XOR:
+            case WASM_OP_I32_SHL:
+            case WASM_OP_I32_SHR_S:
+            case WASM_OP_I32_SHR_U:
+            case WASM_OP_I32_ROTL:
+            case WASM_OP_I32_ROTR:
+                POP_I32();
+                POP_I32();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_I64_CLZ:
+            case WASM_OP_I64_CTZ:
+            case WASM_OP_I64_POPCNT:
+                POP_I64();
+                PUSH_I64();
+                break;
+
+            case WASM_OP_I64_ADD:
+            case WASM_OP_I64_SUB:
+            case WASM_OP_I64_MUL:
+            case WASM_OP_I64_DIV_S:
+            case WASM_OP_I64_DIV_U:
+            case WASM_OP_I64_REM_S:
+            case WASM_OP_I64_REM_U:
+            case WASM_OP_I64_AND:
+            case WASM_OP_I64_OR:
+            case WASM_OP_I64_XOR:
+            case WASM_OP_I64_SHL:
+            case WASM_OP_I64_SHR_S:
+            case WASM_OP_I64_SHR_U:
+            case WASM_OP_I64_ROTL:
+            case WASM_OP_I64_ROTR:
+                POP_I64();
+                POP_I64();
+                PUSH_I64();
+                break;
+
+            case WASM_OP_F32_ABS:
+            case WASM_OP_F32_NEG:
+            case WASM_OP_F32_CEIL:
+            case WASM_OP_F32_FLOOR:
+            case WASM_OP_F32_TRUNC:
+            case WASM_OP_F32_NEAREST:
+            case WASM_OP_F32_SQRT:
+                POP_F32();
+                PUSH_F32();
+                break;
+
+            case WASM_OP_F32_ADD:
+            case WASM_OP_F32_SUB:
+            case WASM_OP_F32_MUL:
+            case WASM_OP_F32_DIV:
+            case WASM_OP_F32_MIN:
+            case WASM_OP_F32_MAX:
+            case WASM_OP_F32_COPYSIGN:
+                POP_F32();
+                POP_F32();
+                PUSH_F32();
+                break;
+
+            case WASM_OP_F64_ABS:
+            case WASM_OP_F64_NEG:
+            case WASM_OP_F64_CEIL:
+            case WASM_OP_F64_FLOOR:
+            case WASM_OP_F64_TRUNC:
+            case WASM_OP_F64_NEAREST:
+            case WASM_OP_F64_SQRT:
+                POP_F64();
+                PUSH_F64();
+                break;
+
+            case WASM_OP_F64_ADD:
+            case WASM_OP_F64_SUB:
+            case WASM_OP_F64_MUL:
+            case WASM_OP_F64_DIV:
+            case WASM_OP_F64_MIN:
+            case WASM_OP_F64_MAX:
+            case WASM_OP_F64_COPYSIGN:
+                POP_F64();
+                POP_F64();
+                PUSH_F64();
+                break;
+
+            case WASM_OP_I32_WRAP_I64:
+                POP_I64();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_I32_TRUNC_S_F32:
+            case WASM_OP_I32_TRUNC_U_F32:
+                POP_F32();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_I32_TRUNC_S_F64:
+            case WASM_OP_I32_TRUNC_U_F64:
+                POP_F64();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_I64_EXTEND_S_I32:
+            case WASM_OP_I64_EXTEND_U_I32:
+                POP_I32();
+                PUSH_I64();
+                break;
+
+            case WASM_OP_I64_TRUNC_S_F32:
+            case WASM_OP_I64_TRUNC_U_F32:
+                POP_F32();
+                PUSH_I64();
+                break;
+
+            case WASM_OP_I64_TRUNC_S_F64:
+            case WASM_OP_I64_TRUNC_U_F64:
+                POP_F64();
+                PUSH_I64();
+                break;
+
+            case WASM_OP_F32_CONVERT_S_I32:
+            case WASM_OP_F32_CONVERT_U_I32:
+                POP_I32();
+                PUSH_F32();
+                break;
+
+            case WASM_OP_F32_CONVERT_S_I64:
+            case WASM_OP_F32_CONVERT_U_I64:
+                POP_I64();
+                PUSH_F32();
+                break;
+
+            case WASM_OP_F32_DEMOTE_F64:
+                POP_F64();
+                PUSH_F32();
+                break;
+
+            case WASM_OP_F64_CONVERT_S_I32:
+            case WASM_OP_F64_CONVERT_U_I32:
+                POP_I32();
+                PUSH_F64();
+                break;
+
+            case WASM_OP_F64_CONVERT_S_I64:
+            case WASM_OP_F64_CONVERT_U_I64:
+                POP_I64();
+                PUSH_F64();
+                break;
+
+            case WASM_OP_F64_PROMOTE_F32:
+                POP_F32();
+                PUSH_F64();
+                break;
+
+            case WASM_OP_I32_REINTERPRET_F32:
+                POP_F32();
+                PUSH_I32();
+                break;
+
+            case WASM_OP_I64_REINTERPRET_F64:
+                POP_F64();
+                PUSH_I64();
+                break;
+
+            case WASM_OP_F32_REINTERPRET_I32:
+                POP_I32();
+                PUSH_F32();
+                break;
+
+            case WASM_OP_F64_REINTERPRET_I64:
+                POP_I64();
+                PUSH_F64();
+                break;
+
+            default:
+                if (error_buf != NULL)
+                    snprintf(error_buf, error_buf_size,
+                             "WASM module load failed: "
+                             "invalid opcode %02x.", opcode);
+                goto fail;
+        }
+
+        if (opcode != WASM_OP_I32_CONST)
+            is_i32_const = false;
+    }
+
+    if (csp_num > 0) {
+        set_error_buf(error_buf, error_buf_size,
+                      "WASM module load failed: "
+                      "function body must end with END opcode.");
+        goto fail;
+    }
+
+    func->max_stack_cell_num = max_stack_cell_num;
+    func->max_block_num = max_csp_num;
+    return_value = true;
+
+fail:
+    if (frame_ref_bottom)
+        wasm_free(frame_ref_bottom);
+    if (frame_csp_bottom)
+        wasm_free(frame_csp_bottom);
+
+    (void)u8;
+    (void)u32;
+    (void)i32;
+    (void)i64;
+    return return_value;
+}
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_loader.h 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_loader.h
new file mode 100755
index 0000000..1a39396
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_loader.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef _WASM_LOADER_H
+#define _WASM_LOADER_H
+
+#include "wasm.h"
+#include "wasm_hashmap.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Load a WASM module from a specified byte buffer.
+ *
+ * @param buf the byte buffer which contains the WASM binary data
+ * @param size the size of the buffer
+ * @param error_buf output of the exception info
+ * @param error_buf_size the size of the exception string
+ *
+ * @return return module loaded, NULL if failed
+ */
+WASMModule*
+wasm_loader_load(const uint8 *buf, uint32 size, char *error_buf, uint32 
error_buf_size);
+
+/**
+ * Load a WASM module from a specified WASM section list.
+ *
+ * @param section_list the section list which contains each section data
+ * @param error_buf output of the exception info
+ * @param error_buf_size the size of the exception string
+ *
+ * @return return WASM module loaded, NULL if failed
+ */
+WASMModule*
+wasm_loader_load_from_sections(WASMSection *section_list,
+                               char *error_buf, uint32 error_buf_size);
+
+/**
+ * Unload a WASM module.
+ *
+ * @param module the module to be unloaded
+ */
+void
+wasm_loader_unload(WASMModule *module);
+
+/**
+ * Find address of related else opcode and end opcode of opcode block/loop/if
+ * according to the start address of opcode.
+ *
+ * @param module the module to find
+ * @param start_addr the next address of opcode block/loop/if
+ * @param code_end_addr the end address of function code block
+ * @param block_type the type of block, 0/1/2 denotes block/loop/if
+ * @param p_else_addr returns the else addr if found
+ * @param p_end_addr returns the end addr if found
+ * @param error_buf returns the error log for this function
+ * @param error_buf_size returns the error log string length
+ *
+ * @return true if success, false otherwise
+ */
+bool
+wasm_loader_find_block_addr(WASMModule *module,
+                            const uint8 *start_addr,
+                            const uint8 *code_end_addr,
+                            uint8 block_type,
+                            uint8 **p_else_addr,
+                            uint8 **p_end_addr,
+                            char *error_buf,
+                            uint32 error_buf_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _WASM_LOADER_H */
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_native.h 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_native.h
new file mode 100755
index 0000000..74b0fb0
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_native.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_NATIVE_H
+#define _WASM_NATIVE_H
+
+#include "wasm.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Initialize the native module, e.g. sort the function defs
+ * and the global defs.
+ *
+ * @return true if success, false otherwise
+ */
+bool
+wasm_native_init();
+
+/**
+ * Lookup native function implementation of a given import function.
+ *
+ * @param module_name the module name of the import function
+ * @param func_name the function name of the import function
+ *
+ * @return return the native function pointer if success, NULL otherwise
+ */
+void*
+wasm_native_func_lookup(const char *module_name, const char *func_name);
+
+/**
+ * Lookup global variable of a given import global
+ *
+ * @param module_name the module name of the import global
+ * @param global_name the global name of the import global
+ * @param global return the global data
+ *
+ * @param return true if success, false otherwise
+ */
+bool
+wasm_native_global_lookup(const char *module_name, const char *global_name,
+                          WASMGlobalImport *global);
+
+void* wasm_platform_native_func_lookup(const char *module_name,
+                                       const char *func_name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _WASM_NATIVE_H */
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_opcode.h 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_opcode.h
new file mode 100755
index 0000000..2917bf4
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_opcode.h
@@ -0,0 +1,472 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_OPCODE_H
+#define _WASM_OPCODE_H
+
+#include "wasm.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum WASMOpcode {
+    /* control instructions */
+    WASM_OP_UNREACHABLE   = 0x00, /* unreachable */
+    WASM_OP_NOP           = 0x01, /* nop */
+    WASM_OP_BLOCK         = 0x02, /* block */
+    WASM_OP_LOOP          = 0x03, /* loop */
+    WASM_OP_IF            = 0x04, /* if */
+    WASM_OP_ELSE          = 0x05, /* else */
+
+    WASM_OP_UNUSED_0x06   = 0x06,
+    WASM_OP_UNUSED_0x07   = 0x07,
+    WASM_OP_UNUSED_0x08   = 0x08,
+    WASM_OP_UNUSED_0x09   = 0x09,
+    WASM_OP_UNUSED_0x0a   = 0x0a,
+
+    WASM_OP_END           = 0x0b, /* end */
+    WASM_OP_BR            = 0x0c, /* br */
+    WASM_OP_BR_IF         = 0x0d, /* br if */
+    WASM_OP_BR_TABLE      = 0x0e, /* br table */
+    WASM_OP_RETURN        = 0x0f, /* return */
+    WASM_OP_CALL          = 0x10, /* call */
+    WASM_OP_CALL_INDIRECT = 0x11, /* call_indirect */
+
+    WASM_OP_UNUSED_0x12   = 0x12,
+    WASM_OP_UNUSED_0x13   = 0x13,
+    WASM_OP_UNUSED_0x14   = 0x14,
+    WASM_OP_UNUSED_0x15   = 0x15,
+    WASM_OP_UNUSED_0x16   = 0x16,
+    WASM_OP_UNUSED_0x17   = 0x17,
+    WASM_OP_UNUSED_0x18   = 0x18,
+    WASM_OP_UNUSED_0x19   = 0x19,
+
+    /* parametric instructions */
+    WASM_OP_DROP          = 0x1a, /* drop */
+    WASM_OP_SELECT        = 0x1b, /* select */
+
+    WASM_OP_UNUSED_0x1c   = 0x1c,
+    WASM_OP_UNUSED_0x1d   = 0x1d,
+    WASM_OP_UNUSED_0x1e   = 0x1e,
+    WASM_OP_UNUSED_0x1f   = 0x1f,
+
+    /* variable instructions */
+    WASM_OP_GET_LOCAL     = 0x20, /* get_local */
+    WASM_OP_SET_LOCAL     = 0x21, /* set_local */
+    WASM_OP_TEE_LOCAL     = 0x22, /* tee_local */
+    WASM_OP_GET_GLOBAL    = 0x23, /* get_global */
+    WASM_OP_SET_GLOBAL    = 0x24, /* set_global */
+
+    WASM_OP_UNUSED_0x25   = 0x25,
+    WASM_OP_UNUSED_0x26   = 0x26,
+    WASM_OP_UNUSED_0x27   = 0x27,
+
+    /* memory instructions */
+    WASM_OP_I32_LOAD      = 0x28, /* i32.load */
+    WASM_OP_I64_LOAD      = 0x29, /* i64.load */
+    WASM_OP_F32_LOAD      = 0x2a, /* f32.load */
+    WASM_OP_F64_LOAD      = 0x2b, /* f64.load */
+    WASM_OP_I32_LOAD8_S   = 0x2c, /* i32.load8_s */
+    WASM_OP_I32_LOAD8_U   = 0x2d, /* i32.load8_u */
+    WASM_OP_I32_LOAD16_S  = 0x2e, /* i32.load16_s */
+    WASM_OP_I32_LOAD16_U  = 0x2f, /* i32.load16_u */
+    WASM_OP_I64_LOAD8_S   = 0x30, /* i64.load8_s */
+    WASM_OP_I64_LOAD8_U   = 0x31, /* i64.load8_u */
+    WASM_OP_I64_LOAD16_S  = 0x32, /* i64.load16_s */
+    WASM_OP_I64_LOAD16_U  = 0x33, /* i64.load16_u */
+    WASM_OP_I64_LOAD32_S  = 0x34, /* i32.load32_s */
+    WASM_OP_I64_LOAD32_U  = 0x35, /* i32.load32_u */
+    WASM_OP_I32_STORE     = 0x36, /* i32.store */
+    WASM_OP_I64_STORE     = 0x37, /* i64.store */
+    WASM_OP_F32_STORE     = 0x38, /* f32.store */
+    WASM_OP_F64_STORE     = 0x39, /* f64.store */
+    WASM_OP_I32_STORE8    = 0x3a, /* i32.store8 */
+    WASM_OP_I32_STORE16   = 0x3b, /* i32.store16 */
+    WASM_OP_I64_STORE8    = 0x3c, /* i64.store8 */
+    WASM_OP_I64_STORE16   = 0x3d, /* i64.sotre16 */
+    WASM_OP_I64_STORE32   = 0x3e, /* i64.store32 */
+    WASM_OP_MEMORY_SIZE   = 0x3f, /* memory.size */
+    WASM_OP_MEMORY_GROW   = 0x40, /* memory.grow */
+
+    /* constant instructions */
+    WASM_OP_I32_CONST     = 0x41, /* i32.const */
+    WASM_OP_I64_CONST     = 0x42, /* i64.const */
+    WASM_OP_F32_CONST     = 0x43, /* f32.const */
+    WASM_OP_F64_CONST     = 0x44, /* f64.const */
+
+    /* comparison instructions */
+    WASM_OP_I32_EQZ       = 0x45, /* i32.eqz */
+    WASM_OP_I32_EQ        = 0x46, /* i32.eq */
+    WASM_OP_I32_NE        = 0x47, /* i32.ne */
+    WASM_OP_I32_LT_S      = 0x48, /* i32.lt_s */
+    WASM_OP_I32_LT_U      = 0x49, /* i32.lt_u */
+    WASM_OP_I32_GT_S      = 0x4a, /* i32.gt_s */
+    WASM_OP_I32_GT_U      = 0x4b, /* i32.gt_u */
+    WASM_OP_I32_LE_S      = 0x4c, /* i32.le_s */
+    WASM_OP_I32_LE_U      = 0x4d, /* i32.le_u */
+    WASM_OP_I32_GE_S      = 0x4e, /* i32.ge_s */
+    WASM_OP_I32_GE_U      = 0x4f, /* i32.ge_u */
+
+    WASM_OP_I64_EQZ       = 0x50, /* i64.eqz */
+    WASM_OP_I64_EQ        = 0x51, /* i64.eq */
+    WASM_OP_I64_NE        = 0x52, /* i64.ne */
+    WASM_OP_I64_LT_S      = 0x53, /* i64.lt_s */
+    WASM_OP_I64_LT_U      = 0x54, /* i64.lt_u */
+    WASM_OP_I64_GT_S      = 0x55, /* i64.gt_s */
+    WASM_OP_I64_GT_U      = 0x56, /* i64.gt_u */
+    WASM_OP_I64_LE_S      = 0x57, /* i64.le_s */
+    WASM_OP_I64_LE_U      = 0x58, /* i64.le_u */
+    WASM_OP_I64_GE_S      = 0x59, /* i64.ge_s */
+    WASM_OP_I64_GE_U      = 0x5a, /* i64.ge_u */
+
+    WASM_OP_F32_EQ        = 0x5b, /* f32.eq */
+    WASM_OP_F32_NE        = 0x5c, /* f32.ne */
+    WASM_OP_F32_LT        = 0x5d, /* f32.lt */
+    WASM_OP_F32_GT        = 0x5e, /* f32.gt */
+    WASM_OP_F32_LE        = 0x5f, /* f32.le */
+    WASM_OP_F32_GE        = 0x60, /* f32.ge */
+
+    WASM_OP_F64_EQ        = 0x61, /* f64.eq */
+    WASM_OP_F64_NE        = 0x62, /* f64.ne */
+    WASM_OP_F64_LT        = 0x63, /* f64.lt */
+    WASM_OP_F64_GT        = 0x64, /* f64.gt */
+    WASM_OP_F64_LE        = 0x65, /* f64.le */
+    WASM_OP_F64_GE        = 0x66, /* f64.ge */
+
+    /* numeric operators */
+    WASM_OP_I32_CLZ       = 0x67, /* i32.clz */
+    WASM_OP_I32_CTZ       = 0x68, /* i32.ctz */
+    WASM_OP_I32_POPCNT    = 0x69, /* i32.popcnt */
+    WASM_OP_I32_ADD       = 0x6a, /* i32.add */
+    WASM_OP_I32_SUB       = 0x6b, /* i32.sub */
+    WASM_OP_I32_MUL       = 0x6c, /* i32.mul */
+    WASM_OP_I32_DIV_S     = 0x6d, /* i32.div_s */
+    WASM_OP_I32_DIV_U     = 0x6e, /* i32.div_u */
+    WASM_OP_I32_REM_S     = 0x6f, /* i32.rem_s */
+    WASM_OP_I32_REM_U     = 0x70, /* i32.rem_u */
+    WASM_OP_I32_AND       = 0x71, /* i32.and */
+    WASM_OP_I32_OR        = 0x72, /* i32.or */
+    WASM_OP_I32_XOR       = 0x73, /* i32.xor */
+    WASM_OP_I32_SHL       = 0x74, /* i32.shl */
+    WASM_OP_I32_SHR_S     = 0x75, /* i32.shr_s */
+    WASM_OP_I32_SHR_U     = 0x76, /* i32.shr_u */
+    WASM_OP_I32_ROTL      = 0x77, /* i32.rotl */
+    WASM_OP_I32_ROTR      = 0x78, /* i32.rotr */
+
+    WASM_OP_I64_CLZ       = 0x79, /* i64.clz */
+    WASM_OP_I64_CTZ       = 0x7a, /* i64.ctz */
+    WASM_OP_I64_POPCNT    = 0x7b, /* i64.popcnt */
+    WASM_OP_I64_ADD       = 0x7c, /* i64.add */
+    WASM_OP_I64_SUB       = 0x7d, /* i64.sub */
+    WASM_OP_I64_MUL       = 0x7e, /* i64.mul */
+    WASM_OP_I64_DIV_S     = 0x7f, /* i64.div_s */
+    WASM_OP_I64_DIV_U     = 0x80, /* i64.div_u */
+    WASM_OP_I64_REM_S     = 0x81, /* i64.rem_s */
+    WASM_OP_I64_REM_U     = 0x82, /* i64.rem_u */
+    WASM_OP_I64_AND       = 0x83, /* i64.and */
+    WASM_OP_I64_OR        = 0x84, /* i64.or */
+    WASM_OP_I64_XOR       = 0x85, /* i64.xor */
+    WASM_OP_I64_SHL       = 0x86, /* i64.shl */
+    WASM_OP_I64_SHR_S     = 0x87, /* i64.shr_s */
+    WASM_OP_I64_SHR_U     = 0x88, /* i64.shr_u */
+    WASM_OP_I64_ROTL      = 0x89, /* i64.rotl */
+    WASM_OP_I64_ROTR      = 0x8a, /* i64.rotr */
+
+    WASM_OP_F32_ABS       = 0x8b, /* f32.abs */
+    WASM_OP_F32_NEG       = 0x8c, /* f32.neg */
+    WASM_OP_F32_CEIL      = 0x8d, /* f32.ceil */
+    WASM_OP_F32_FLOOR     = 0x8e, /* f32.floor */
+    WASM_OP_F32_TRUNC     = 0x8f, /* f32.trunc */
+    WASM_OP_F32_NEAREST   = 0x90, /* f32.nearest */
+    WASM_OP_F32_SQRT      = 0x91, /* f32.sqrt */
+    WASM_OP_F32_ADD       = 0x92, /* f32.add */
+    WASM_OP_F32_SUB       = 0x93, /* f32.sub */
+    WASM_OP_F32_MUL       = 0x94, /* f32.mul */
+    WASM_OP_F32_DIV       = 0x95, /* f32.div */
+    WASM_OP_F32_MIN       = 0x96, /* f32.min */
+    WASM_OP_F32_MAX       = 0x97, /* f32.max */
+    WASM_OP_F32_COPYSIGN  = 0x98, /* f32.copysign */
+
+    WASM_OP_F64_ABS       = 0x99, /* f64.abs */
+    WASM_OP_F64_NEG       = 0x9a, /* f64.neg */
+    WASM_OP_F64_CEIL      = 0x9b, /* f64.ceil */
+    WASM_OP_F64_FLOOR     = 0x9c, /* f64.floor */
+    WASM_OP_F64_TRUNC     = 0x9d, /* f64.trunc */
+    WASM_OP_F64_NEAREST   = 0x9e, /* f64.nearest */
+    WASM_OP_F64_SQRT      = 0x9f, /* f64.sqrt */
+    WASM_OP_F64_ADD       = 0xa0, /* f64.add */
+    WASM_OP_F64_SUB       = 0xa1, /* f64.sub */
+    WASM_OP_F64_MUL       = 0xa2, /* f64.mul */
+    WASM_OP_F64_DIV       = 0xa3, /* f64.div */
+    WASM_OP_F64_MIN       = 0xa4, /* f64.min */
+    WASM_OP_F64_MAX       = 0xa5, /* f64.max */
+    WASM_OP_F64_COPYSIGN  = 0xa6, /* f64.copysign */
+
+    /* conversions */
+    WASM_OP_I32_WRAP_I64      = 0xa7, /* i32.wrap/i64 */
+    WASM_OP_I32_TRUNC_S_F32   = 0xa8, /* i32.trunc_s/f32 */
+    WASM_OP_I32_TRUNC_U_F32   = 0xa9, /* i32.trunc_u/f32 */
+    WASM_OP_I32_TRUNC_S_F64   = 0xaa, /* i32.trunc_s/f64 */
+    WASM_OP_I32_TRUNC_U_F64   = 0xab, /* i32.trunc_u/f64 */
+
+    WASM_OP_I64_EXTEND_S_I32  = 0xac, /* i64.extend_s/i32 */
+    WASM_OP_I64_EXTEND_U_I32  = 0xad, /* i64.extend_u/i32 */
+    WASM_OP_I64_TRUNC_S_F32   = 0xae, /* i64.trunc_s/f32 */
+    WASM_OP_I64_TRUNC_U_F32   = 0xaf, /* i64.trunc_u/f32 */
+    WASM_OP_I64_TRUNC_S_F64   = 0xb0, /* i64.trunc_s/f64 */
+    WASM_OP_I64_TRUNC_U_F64   = 0xb1, /* i64.trunc_u/f64 */
+
+    WASM_OP_F32_CONVERT_S_I32 = 0xb2, /* f32.convert_s/i32 */
+    WASM_OP_F32_CONVERT_U_I32 = 0xb3, /* f32.convert_u/i32 */
+    WASM_OP_F32_CONVERT_S_I64 = 0xb4, /* f32.convert_s/i64 */
+    WASM_OP_F32_CONVERT_U_I64 = 0xb5, /* f32.convert_u/i64 */
+    WASM_OP_F32_DEMOTE_F64    = 0xb6, /* f32.demote/f64 */
+
+    WASM_OP_F64_CONVERT_S_I32 = 0xb7, /* f64.convert_s/i32 */
+    WASM_OP_F64_CONVERT_U_I32 = 0xb8, /* f64.convert_u/i32 */
+    WASM_OP_F64_CONVERT_S_I64 = 0xb9, /* f64.convert_s/i64 */
+    WASM_OP_F64_CONVERT_U_I64 = 0xba, /* f64.convert_u/i64 */
+    WASM_OP_F64_PROMOTE_F32   = 0xbb, /* f64.promote/f32 */
+
+    /* reinterpretations */
+    WASM_OP_I32_REINTERPRET_F32   = 0xbc, /* i32.reinterpret/f32 */
+    WASM_OP_I64_REINTERPRET_F64   = 0xbd, /* i64.reinterpret/f64 */
+    WASM_OP_F32_REINTERPRET_I32   = 0xbe, /* f32.reinterpret/i32 */
+    WASM_OP_F64_REINTERPRET_I64   = 0xbf, /* f64.reinterpret/i64 */
+
+    /* drop/select specified types*/
+    WASM_OP_DROP_32   = 0xc0,
+    WASM_OP_DROP_64   = 0xc1,
+    WASM_OP_SELECT_32 = 0xc2,
+    WASM_OP_SELECT_64 = 0xc3,
+
+    WASM_OP_IMPDEP1       = WASM_OP_SELECT_64 + 1,
+    WASM_OP_IMPDEP2       = WASM_OP_IMPDEP1 + 1
+} WASMOpcode;
+
+#ifdef __cplusplus
+}
+#endif
+
+/*
+ * Macro used to generate computed goto tables for the C interpreter.
+ */
+#define WASM_INSTRUCTION_NUM 256
+
+#define DEFINE_GOTO_TABLE(_name)                             \
+static const void *_name[WASM_INSTRUCTION_NUM] = {           \
+  HANDLE_OPCODE (WASM_OP_UNREACHABLE),   /* 0x00 */          \
+  HANDLE_OPCODE (WASM_OP_NOP),           /* 0x01 */          \
+  HANDLE_OPCODE (WASM_OP_BLOCK),         /* 0x02 */          \
+  HANDLE_OPCODE (WASM_OP_LOOP),          /* 0x03 */          \
+  HANDLE_OPCODE (WASM_OP_IF),            /* 0x04 */          \
+  HANDLE_OPCODE (WASM_OP_ELSE),          /* 0x05 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x06),   /* 0x06 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x07),   /* 0x07 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x08),   /* 0x08 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x09),   /* 0x09 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x0a),   /* 0x0a */          \
+  HANDLE_OPCODE (WASM_OP_END),           /* 0x0b */          \
+  HANDLE_OPCODE (WASM_OP_BR),            /* 0x0c */          \
+  HANDLE_OPCODE (WASM_OP_BR_IF),         /* 0x0d */          \
+  HANDLE_OPCODE (WASM_OP_BR_TABLE),      /* 0x0e */          \
+  HANDLE_OPCODE (WASM_OP_RETURN),        /* 0x0f */          \
+  HANDLE_OPCODE (WASM_OP_CALL),          /* 0x10 */          \
+  HANDLE_OPCODE (WASM_OP_CALL_INDIRECT), /* 0x11 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x12),   /* 0x12 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x13),   /* 0x13 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x14),   /* 0x14 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x15),   /* 0x15 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x16),   /* 0x16 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x17),   /* 0x17 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x18),   /* 0x18 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x19),   /* 0x19 */          \
+  HANDLE_OPCODE (WASM_OP_DROP),          /* 0x1a */          \
+  HANDLE_OPCODE (WASM_OP_SELECT),        /* 0x1b */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x1c),   /* 0x1c */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x1d),   /* 0x1d */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x1e),   /* 0x1e */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x1f),   /* 0x1f */          \
+  HANDLE_OPCODE (WASM_OP_GET_LOCAL),     /* 0x20 */          \
+  HANDLE_OPCODE (WASM_OP_SET_LOCAL),     /* 0x21 */          \
+  HANDLE_OPCODE (WASM_OP_TEE_LOCAL),     /* 0x22 */          \
+  HANDLE_OPCODE (WASM_OP_GET_GLOBAL),    /* 0x23 */          \
+  HANDLE_OPCODE (WASM_OP_SET_GLOBAL),    /* 0x24 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x25),   /* 0x25 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x26),   /* 0x26 */          \
+  HANDLE_OPCODE (WASM_OP_UNUSED_0x27),   /* 0x27 */          \
+  HANDLE_OPCODE (WASM_OP_I32_LOAD),      /* 0x28 */          \
+  HANDLE_OPCODE (WASM_OP_I64_LOAD),      /* 0x29 */          \
+  HANDLE_OPCODE (WASM_OP_F32_LOAD),      /* 0x2a */          \
+  HANDLE_OPCODE (WASM_OP_F64_LOAD),      /* 0x2b */          \
+  HANDLE_OPCODE (WASM_OP_I32_LOAD8_S),   /* 0x2c */          \
+  HANDLE_OPCODE (WASM_OP_I32_LOAD8_U),   /* 0x2d */          \
+  HANDLE_OPCODE (WASM_OP_I32_LOAD16_S),  /* 0x2e */          \
+  HANDLE_OPCODE (WASM_OP_I32_LOAD16_U),  /* 0x2f */          \
+  HANDLE_OPCODE (WASM_OP_I64_LOAD8_S),   /* 0x30 */          \
+  HANDLE_OPCODE (WASM_OP_I64_LOAD8_U),   /* 0x31 */          \
+  HANDLE_OPCODE (WASM_OP_I64_LOAD16_S),  /* 0x32 */          \
+  HANDLE_OPCODE (WASM_OP_I64_LOAD16_U),  /* 0x33 */          \
+  HANDLE_OPCODE (WASM_OP_I64_LOAD32_S),  /* 0x34 */          \
+  HANDLE_OPCODE (WASM_OP_I64_LOAD32_U),  /* 0x35 */          \
+  HANDLE_OPCODE (WASM_OP_I32_STORE),     /* 0x36 */          \
+  HANDLE_OPCODE (WASM_OP_I64_STORE),     /* 0x37 */          \
+  HANDLE_OPCODE (WASM_OP_F32_STORE),     /* 0x38 */          \
+  HANDLE_OPCODE (WASM_OP_F64_STORE),     /* 0x39 */          \
+  HANDLE_OPCODE (WASM_OP_I32_STORE8),    /* 0x3a */          \
+  HANDLE_OPCODE (WASM_OP_I32_STORE16),   /* 0x3b */          \
+  HANDLE_OPCODE (WASM_OP_I64_STORE8),    /* 0x3c */          \
+  HANDLE_OPCODE (WASM_OP_I64_STORE16),   /* 0x3d */          \
+  HANDLE_OPCODE (WASM_OP_I64_STORE32),   /* 0x3e */          \
+  HANDLE_OPCODE (WASM_OP_MEMORY_SIZE),   /* 0x3f */          \
+  HANDLE_OPCODE (WASM_OP_MEMORY_GROW),   /* 0x40 */          \
+  HANDLE_OPCODE (WASM_OP_I32_CONST),     /* 0x41 */          \
+  HANDLE_OPCODE (WASM_OP_I64_CONST),     /* 0x42 */          \
+  HANDLE_OPCODE (WASM_OP_F32_CONST),     /* 0x43 */          \
+  HANDLE_OPCODE (WASM_OP_F64_CONST),     /* 0x44 */          \
+  HANDLE_OPCODE (WASM_OP_I32_EQZ),       /* 0x45 */          \
+  HANDLE_OPCODE (WASM_OP_I32_EQ),        /* 0x46 */          \
+  HANDLE_OPCODE (WASM_OP_I32_NE),        /* 0x47 */          \
+  HANDLE_OPCODE (WASM_OP_I32_LT_S),      /* 0x48 */          \
+  HANDLE_OPCODE (WASM_OP_I32_LT_U),      /* 0x49 */          \
+  HANDLE_OPCODE (WASM_OP_I32_GT_S),      /* 0x4a */          \
+  HANDLE_OPCODE (WASM_OP_I32_GT_U),      /* 0x4b */          \
+  HANDLE_OPCODE (WASM_OP_I32_LE_S),      /* 0x4c */          \
+  HANDLE_OPCODE (WASM_OP_I32_LE_U),      /* 0x4d */          \
+  HANDLE_OPCODE (WASM_OP_I32_GE_S),      /* 0x4e */          \
+  HANDLE_OPCODE (WASM_OP_I32_GE_U),      /* 0x4f */          \
+  HANDLE_OPCODE (WASM_OP_I64_EQZ),       /* 0x50 */          \
+  HANDLE_OPCODE (WASM_OP_I64_EQ),        /* 0x51 */          \
+  HANDLE_OPCODE (WASM_OP_I64_NE),        /* 0x52 */          \
+  HANDLE_OPCODE (WASM_OP_I64_LT_S),      /* 0x53 */          \
+  HANDLE_OPCODE (WASM_OP_I64_LT_U),      /* 0x54 */          \
+  HANDLE_OPCODE (WASM_OP_I64_GT_S),      /* 0x55 */          \
+  HANDLE_OPCODE (WASM_OP_I64_GT_U),      /* 0x56 */          \
+  HANDLE_OPCODE (WASM_OP_I64_LE_S),      /* 0x57 */          \
+  HANDLE_OPCODE (WASM_OP_I64_LE_U),      /* 0x58 */          \
+  HANDLE_OPCODE (WASM_OP_I64_GE_S),      /* 0x59 */          \
+  HANDLE_OPCODE (WASM_OP_I64_GE_U),      /* 0x5a */          \
+  HANDLE_OPCODE (WASM_OP_F32_EQ),        /* 0x5b */          \
+  HANDLE_OPCODE (WASM_OP_F32_NE),        /* 0x5c */          \
+  HANDLE_OPCODE (WASM_OP_F32_LT),        /* 0x5d */          \
+  HANDLE_OPCODE (WASM_OP_F32_GT),        /* 0x5e */          \
+  HANDLE_OPCODE (WASM_OP_F32_LE),        /* 0x5f */          \
+  HANDLE_OPCODE (WASM_OP_F32_GE),        /* 0x60 */          \
+  HANDLE_OPCODE (WASM_OP_F64_EQ),        /* 0x61 */          \
+  HANDLE_OPCODE (WASM_OP_F64_NE),        /* 0x62 */          \
+  HANDLE_OPCODE (WASM_OP_F64_LT),        /* 0x63 */          \
+  HANDLE_OPCODE (WASM_OP_F64_GT),        /* 0x64 */          \
+  HANDLE_OPCODE (WASM_OP_F64_LE),        /* 0x65 */          \
+  HANDLE_OPCODE (WASM_OP_F64_GE),        /* 0x66 */          \
+  HANDLE_OPCODE (WASM_OP_I32_CLZ),       /* 0x67 */          \
+  HANDLE_OPCODE (WASM_OP_I32_CTZ),       /* 0x68 */          \
+  HANDLE_OPCODE (WASM_OP_I32_POPCNT),    /* 0x69 */          \
+  HANDLE_OPCODE (WASM_OP_I32_ADD),       /* 0x6a */          \
+  HANDLE_OPCODE (WASM_OP_I32_SUB),       /* 0x6b */          \
+  HANDLE_OPCODE (WASM_OP_I32_MUL),       /* 0x6c */          \
+  HANDLE_OPCODE (WASM_OP_I32_DIV_S),     /* 0x6d */          \
+  HANDLE_OPCODE (WASM_OP_I32_DIV_U),     /* 0x6e */          \
+  HANDLE_OPCODE (WASM_OP_I32_REM_S),     /* 0x6f */          \
+  HANDLE_OPCODE (WASM_OP_I32_REM_U),     /* 0x70 */          \
+  HANDLE_OPCODE (WASM_OP_I32_AND),       /* 0x71 */          \
+  HANDLE_OPCODE (WASM_OP_I32_OR),        /* 0x72 */          \
+  HANDLE_OPCODE (WASM_OP_I32_XOR),       /* 0x73 */          \
+  HANDLE_OPCODE (WASM_OP_I32_SHL),       /* 0x74 */          \
+  HANDLE_OPCODE (WASM_OP_I32_SHR_S),     /* 0x75 */          \
+  HANDLE_OPCODE (WASM_OP_I32_SHR_U),     /* 0x76 */          \
+  HANDLE_OPCODE (WASM_OP_I32_ROTL),      /* 0x77 */          \
+  HANDLE_OPCODE (WASM_OP_I32_ROTR),      /* 0x78 */          \
+  HANDLE_OPCODE (WASM_OP_I64_CLZ),       /* 0x79 */          \
+  HANDLE_OPCODE (WASM_OP_I64_CTZ),       /* 0x7a */          \
+  HANDLE_OPCODE (WASM_OP_I64_POPCNT),    /* 0x7b */          \
+  HANDLE_OPCODE (WASM_OP_I64_ADD),       /* 0x7c */          \
+  HANDLE_OPCODE (WASM_OP_I64_SUB),       /* 0x7d */          \
+  HANDLE_OPCODE (WASM_OP_I64_MUL),       /* 0x7e */          \
+  HANDLE_OPCODE (WASM_OP_I64_DIV_S),     /* 0x7f */          \
+  HANDLE_OPCODE (WASM_OP_I64_DIV_U),     /* 0x80 */          \
+  HANDLE_OPCODE (WASM_OP_I64_REM_S),     /* 0x81 */          \
+  HANDLE_OPCODE (WASM_OP_I64_REM_U),     /* 0x82 */          \
+  HANDLE_OPCODE (WASM_OP_I64_AND),       /* 0x83 */          \
+  HANDLE_OPCODE (WASM_OP_I64_OR),        /* 0x84 */          \
+  HANDLE_OPCODE (WASM_OP_I64_XOR),       /* 0x85 */          \
+  HANDLE_OPCODE (WASM_OP_I64_SHL),       /* 0x86 */          \
+  HANDLE_OPCODE (WASM_OP_I64_SHR_S),     /* 0x87 */          \
+  HANDLE_OPCODE (WASM_OP_I64_SHR_U),     /* 0x88 */          \
+  HANDLE_OPCODE (WASM_OP_I64_ROTL),      /* 0x89 */          \
+  HANDLE_OPCODE (WASM_OP_I64_ROTR),      /* 0x8a */          \
+  HANDLE_OPCODE (WASM_OP_F32_ABS),       /* 0x8b */          \
+  HANDLE_OPCODE (WASM_OP_F32_NEG),       /* 0x8c */          \
+  HANDLE_OPCODE (WASM_OP_F32_CEIL),      /* 0x8d */          \
+  HANDLE_OPCODE (WASM_OP_F32_FLOOR),     /* 0x8e */          \
+  HANDLE_OPCODE (WASM_OP_F32_TRUNC),     /* 0x8f */          \
+  HANDLE_OPCODE (WASM_OP_F32_NEAREST),   /* 0x90 */          \
+  HANDLE_OPCODE (WASM_OP_F32_SQRT),      /* 0x91 */          \
+  HANDLE_OPCODE (WASM_OP_F32_ADD),       /* 0x92 */          \
+  HANDLE_OPCODE (WASM_OP_F32_SUB),       /* 0x93 */          \
+  HANDLE_OPCODE (WASM_OP_F32_MUL),       /* 0x94 */          \
+  HANDLE_OPCODE (WASM_OP_F32_DIV),       /* 0x95 */          \
+  HANDLE_OPCODE (WASM_OP_F32_MIN),       /* 0x96 */          \
+  HANDLE_OPCODE (WASM_OP_F32_MAX),       /* 0x97 */          \
+  HANDLE_OPCODE (WASM_OP_F32_COPYSIGN),  /* 0x98 */          \
+  HANDLE_OPCODE (WASM_OP_F64_ABS),       /* 0x99 */          \
+  HANDLE_OPCODE (WASM_OP_F64_NEG),       /* 0x9a */          \
+  HANDLE_OPCODE (WASM_OP_F64_CEIL),      /* 0x9b */          \
+  HANDLE_OPCODE (WASM_OP_F64_FLOOR),     /* 0x9c */          \
+  HANDLE_OPCODE (WASM_OP_F64_TRUNC),     /* 0x9d */          \
+  HANDLE_OPCODE (WASM_OP_F64_NEAREST),   /* 0x9e */          \
+  HANDLE_OPCODE (WASM_OP_F64_SQRT),      /* 0x9f */          \
+  HANDLE_OPCODE (WASM_OP_F64_ADD),       /* 0xa0 */          \
+  HANDLE_OPCODE (WASM_OP_F64_SUB),       /* 0xa1 */          \
+  HANDLE_OPCODE (WASM_OP_F64_MUL),       /* 0xa2 */          \
+  HANDLE_OPCODE (WASM_OP_F64_DIV),       /* 0xa3 */          \
+  HANDLE_OPCODE (WASM_OP_F64_MIN),       /* 0xa4 */          \
+  HANDLE_OPCODE (WASM_OP_F64_MAX),       /* 0xa5 */          \
+  HANDLE_OPCODE (WASM_OP_F64_COPYSIGN),  /* 0xa6 */          \
+  HANDLE_OPCODE (WASM_OP_I32_WRAP_I64),      /* 0xa7 */      \
+  HANDLE_OPCODE (WASM_OP_I32_TRUNC_S_F32),   /* 0xa8 */      \
+  HANDLE_OPCODE (WASM_OP_I32_TRUNC_U_F32),   /* 0xa9 */      \
+  HANDLE_OPCODE (WASM_OP_I32_TRUNC_S_F64),   /* 0xaa */      \
+  HANDLE_OPCODE (WASM_OP_I32_TRUNC_U_F64),   /* 0xab */      \
+  HANDLE_OPCODE (WASM_OP_I64_EXTEND_S_I32),  /* 0xac */      \
+  HANDLE_OPCODE (WASM_OP_I64_EXTEND_U_I32),  /* 0xad */      \
+  HANDLE_OPCODE (WASM_OP_I64_TRUNC_S_F32),   /* 0xae */      \
+  HANDLE_OPCODE (WASM_OP_I64_TRUNC_U_F32),   /* 0xaf */      \
+  HANDLE_OPCODE (WASM_OP_I64_TRUNC_S_F64),   /* 0xb0 */      \
+  HANDLE_OPCODE (WASM_OP_I64_TRUNC_U_F64),   /* 0xb1 */      \
+  HANDLE_OPCODE (WASM_OP_F32_CONVERT_S_I32), /* 0xb2 */      \
+  HANDLE_OPCODE (WASM_OP_F32_CONVERT_U_I32), /* 0xb3 */      \
+  HANDLE_OPCODE (WASM_OP_F32_CONVERT_S_I64), /* 0xb4 */      \
+  HANDLE_OPCODE (WASM_OP_F32_CONVERT_U_I64), /* 0xb5 */      \
+  HANDLE_OPCODE (WASM_OP_F32_DEMOTE_F64),    /* 0xb6 */      \
+  HANDLE_OPCODE (WASM_OP_F64_CONVERT_S_I32), /* 0xb7 */      \
+  HANDLE_OPCODE (WASM_OP_F64_CONVERT_U_I32), /* 0xb8 */      \
+  HANDLE_OPCODE (WASM_OP_F64_CONVERT_S_I64), /* 0xb9 */      \
+  HANDLE_OPCODE (WASM_OP_F64_CONVERT_U_I64), /* 0xba */      \
+  HANDLE_OPCODE (WASM_OP_F64_PROMOTE_F32),   /* 0xbb */      \
+  HANDLE_OPCODE (WASM_OP_I32_REINTERPRET_F32),   /* 0xbc */  \
+  HANDLE_OPCODE (WASM_OP_I64_REINTERPRET_F64),   /* 0xbd */  \
+  HANDLE_OPCODE (WASM_OP_F32_REINTERPRET_I32),   /* 0xbe */  \
+  HANDLE_OPCODE (WASM_OP_F64_REINTERPRET_I64),   /* 0xbf */  \
+  HANDLE_OPCODE (WASM_OP_DROP_32),       /* 0xc0 */          \
+  HANDLE_OPCODE (WASM_OP_DROP_64),       /* 0xc1 */          \
+  HANDLE_OPCODE (WASM_OP_SELECT_32),     /* 0xc2 */          \
+  HANDLE_OPCODE (WASM_OP_SELECT_64),     /* 0xc3 */          \
+  HANDLE_OPCODE (WASM_OP_IMPDEP1),       /* 0xc4 */          \
+  HANDLE_OPCODE (WASM_OP_IMPDEP2),       /* 0xc5 */          \
+}
+
+#endif /* end of _WASM_OPCODE_H */
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c
new file mode 100755
index 0000000..eec38bc
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c
@@ -0,0 +1,1421 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_runtime.h"
+#include "wasm_thread.h"
+#include "wasm_loader.h"
+#include "wasm_native.h"
+#include "wasm_interp.h"
+#include "wasm_log.h"
+#include "wasm_platform_log.h"
+#include "wasm_memory.h"
+#include "mem_alloc.h"
+
+
+static void
+set_error_buf(char *error_buf, uint32 error_buf_size, const char *string)
+{
+    if (error_buf != NULL)
+        snprintf(error_buf, error_buf_size, "%s", string);
+}
+
+bool
+wasm_runtime_init()
+{
+    if (bh_platform_init() != 0)
+        return false;
+
+    if (wasm_log_init() != 0)
+        return false;
+
+    if (ws_thread_sys_init() != 0)
+        return false;
+
+    wasm_runtime_set_tlr(NULL);
+
+    wasm_native_init();
+    return true;
+}
+
+void
+wasm_runtime_destroy()
+{
+    wasm_runtime_set_tlr(NULL);
+    ws_thread_sys_destroy();
+}
+
+static void
+init_wasm_stack(WASMStack *wasm_stack, uint8 *stack, uint32 stack_size)
+{
+    wasm_stack->top = wasm_stack->bottom = stack;
+    wasm_stack->top_boundary = stack + stack_size;
+}
+
+bool
+wasm_runtime_call_wasm(WASMModuleInstance *module_inst,
+                       WASMExecEnv *exec_env,
+                       WASMFunctionInstance *function,
+                       unsigned argc, uint32 argv[])
+{
+    if (!exec_env) {
+        if (!module_inst->wasm_stack) {
+            if (!(module_inst->wasm_stack =
+                        wasm_malloc(module_inst->wasm_stack_size))) {
+                wasm_runtime_set_exception(module_inst, "allocate memory 
failed.");
+                return false;
+            }
+        }
+
+        init_wasm_stack(&module_inst->main_tlr.wasm_stack,
+                        module_inst->wasm_stack, module_inst->wasm_stack_size);
+    }
+    else {
+        uintptr_t stack = (uintptr_t)exec_env->stack;
+        uint32 stack_size;
+
+        /* Set to 8 bytes align */
+        stack = (stack + 7) & ~7;
+        stack_size = exec_env->stack_size - (stack - 
(uintptr_t)exec_env->stack);
+
+        if (!exec_env->stack || exec_env->stack_size <= 0
+            || exec_env->stack_size < stack - (uintptr_t)exec_env->stack) {
+            wasm_runtime_set_exception(module_inst, "Invalid execution stack 
info.");
+            return false;
+        }
+
+        init_wasm_stack(&module_inst->main_tlr.wasm_stack, (uint8*)stack, 
stack_size);
+    }
+
+    wasm_interp_call_wasm(function, argc, argv);
+    return !wasm_runtime_get_exception(module_inst) ? true : false;
+}
+
+void
+wasm_runtime_set_exception(WASMModuleInstance *module_inst,
+                           const char *exception)
+{
+    if (exception)
+        snprintf(module_inst->cur_exception,
+                 sizeof(module_inst->cur_exception),
+                 "Exception: %s", exception);
+    else
+        module_inst->cur_exception[0] = '\0';
+}
+
+const char*
+wasm_runtime_get_exception(WASMModuleInstance *module_inst)
+{
+    if (module_inst->cur_exception[0] == '\0')
+        return NULL;
+    else
+        return module_inst->cur_exception;
+}
+
+void
+wasm_runtime_clear_exception(WASMModuleInstance *module_inst)
+{
+    wasm_runtime_set_exception(module_inst, NULL);
+}
+
+WASMModule*
+wasm_runtime_load(const uint8 *buf, uint32 size,
+                  char *error_buf, uint32 error_buf_size)
+{
+    return wasm_loader_load(buf, size, error_buf, error_buf_size);
+}
+
+WASMModule*
+wasm_runtime_load_from_sections(WASMSection *section_list,
+                                char *error_buf, uint32_t error_buf_size)
+{
+    return wasm_loader_load_from_sections(section_list,
+                                          error_buf, error_buf_size);
+}
+
+void
+wasm_runtime_unload(WASMModule *module)
+{
+    wasm_loader_unload(module);
+}
+
+/**
+ * Destroy memory instances.
+ */
+static void
+memories_deinstantiate(WASMMemoryInstance **memories, uint32 count)
+{
+    uint32 i;
+    if (memories) {
+        for (i = 0; i < count; i++)
+            if (memories[i]) {
+                if (memories[i]->heap_handle)
+                    mem_allocator_destroy(memories[i]->heap_handle);
+                wasm_free(memories[i]->heap_data);
+                wasm_free(memories[i]);
+            }
+        wasm_free(memories);
+  }
+}
+
+static WASMMemoryInstance*
+memory_instantiate(uint32 init_page_count, uint32 max_page_count,
+                   uint32 addr_data_size, uint32 global_data_size,
+                   uint32 heap_size,
+                   char *error_buf, uint32 error_buf_size)
+{
+    WASMMemoryInstance *memory;
+    uint32 total_size = offsetof(WASMMemoryInstance, base_addr) +
+                        NumBytesPerPage * init_page_count +
+                        addr_data_size + global_data_size;
+
+    /* Allocate memory space, addr data and global data */
+    if (!(memory = wasm_malloc(total_size))) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Instantiate memory failed: allocate memory failed.");
+        return NULL;
+    }
+
+    memset(memory, 0, total_size);
+    memory->cur_page_count = init_page_count;
+    memory->max_page_count = max_page_count;
+
+    memory->addr_data = memory->base_addr;
+    memory->addr_data_size = addr_data_size;
+
+    memory->memory_data = memory->addr_data + addr_data_size;
+
+    memory->global_data = memory->memory_data +
+                          NumBytesPerPage * memory->cur_page_count;;
+    memory->global_data_size = global_data_size;
+
+    memory->end_addr = memory->global_data + global_data_size;
+
+    /* Allocate heap space */
+    if (!(memory->heap_data = wasm_malloc(heap_size))) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Instantiate memory failed: allocate memory failed.");
+        goto fail1;
+    }
+    memory->heap_data_end = memory->heap_data + heap_size;
+
+    /* Initialize heap */
+    if (!(memory->heap_handle = mem_allocator_create
+                (memory->heap_data, heap_size))) {
+        goto fail2;
+    }
+
+#if WASM_ENABLE_MEMORY_GROW != 0
+    memory->heap_base_offset = DEFAULT_APP_HEAP_BASE_OFFSET;
+#else
+    memory->heap_base_offset = memory->end_addr - memory->memory_data;
+#endif
+
+    return memory;
+
+fail2:
+    wasm_free(memory->heap_data);
+
+fail1:
+    wasm_free(memory);
+    return NULL;
+}
+
+/**
+ * Instantiate memories in a module.
+ */
+static WASMMemoryInstance**
+memories_instantiate(const WASMModule *module, uint32 addr_data_size,
+                     uint32 global_data_size, uint32 heap_size,
+                     char *error_buf, uint32 error_buf_size)
+{
+    WASMImport *import;
+    uint32 mem_index = 0, i, memory_count =
+        module->import_memory_count + module->memory_count;
+    uint32 total_size;
+    WASMMemoryInstance **memories, *memory;
+
+    if (memory_count == 0 && global_data_size > 0)
+        memory_count = 1;
+
+    total_size = sizeof(WASMMemoryInstance*) * memory_count;
+    memories = wasm_malloc(total_size);
+
+    if (!memories) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Instantiate memory failed: "
+                      "allocate memory failed.");
+        return NULL;
+    }
+
+    memset(memories, 0, total_size);
+
+    /* instantiate memories from import section */
+    import = module->import_memories;
+    for (i = 0; i < module->import_memory_count; i++, import++) {
+        if (!(memory = memories[mem_index++] =
+                    memory_instantiate(import->u.memory.init_page_count,
+                                       import->u.memory. max_page_count,
+                                       addr_data_size, global_data_size,
+                                       heap_size, error_buf, error_buf_size))) 
{
+            set_error_buf(error_buf, error_buf_size,
+                         "Instantiate memory failed: "
+                         "allocate memory failed.");
+            memories_deinstantiate(memories, memory_count);
+            return NULL;
+        }
+    }
+
+    /* instantiate memories from memory section */
+    for (i = 0; i < module->memory_count; i++) {
+        if (!(memory = memories[mem_index++] =
+                    memory_instantiate(module->memories[i].init_page_count,
+                                       module->memories[i].max_page_count,
+                                       addr_data_size, global_data_size,
+                                       heap_size, error_buf, error_buf_size))) 
{
+            set_error_buf(error_buf, error_buf_size,
+                          "Instantiate memory failed: "
+                          "allocate memory failed.");
+            memories_deinstantiate(memories, memory_count);
+            return NULL;
+        }
+    }
+
+    if (mem_index == 0) {
+        /* no import memory and define memory, but has global variables */
+        if (!(memory = memories[mem_index++] =
+                    memory_instantiate(0, 0, addr_data_size, global_data_size,
+                                       heap_size, error_buf, error_buf_size))) 
{
+            set_error_buf(error_buf, error_buf_size,
+                          "Instantiate memory failed: "
+                          "allocate memory failed.\n");
+            memories_deinstantiate(memories, memory_count);
+            return NULL;
+        }
+    }
+
+    wasm_assert(mem_index == memory_count);
+    return memories;
+}
+
+/**
+ * Destroy table instances.
+ */
+static void
+tables_deinstantiate(WASMTableInstance **tables, uint32 count)
+{
+    uint32 i;
+    if (tables) {
+        for (i = 0; i < count; i++)
+            if (tables[i])
+                wasm_free(tables[i]);
+        wasm_free(tables);
+    }
+}
+
+/**
+ * Instantiate tables in a module.
+ */
+static WASMTableInstance**
+tables_instantiate(const WASMModule *module,
+                   char *error_buf, uint32 error_buf_size)
+{
+    WASMImport *import;
+    uint32 table_index = 0, i, table_count =
+        module->import_table_count + module->table_count;
+    uint32 total_size = sizeof(WASMTableInstance*) * table_count;
+    WASMTableInstance **tables = wasm_malloc(total_size), *table;
+
+    if (!tables) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Instantiate table failed: "
+                      "allocate memory failed.");
+        return NULL;
+    }
+
+    memset(tables, 0, total_size);
+
+    /* instantiate tables from import section */
+    import = module->import_tables;
+    for (i = 0; i < module->import_table_count; i++, import++) {
+        total_size = offsetof(WASMTableInstance, base_addr) +
+                     sizeof(uint32) * import->u.table.init_size;
+        if (!(table = tables[table_index++] = wasm_malloc(total_size))) {
+            set_error_buf(error_buf, error_buf_size,
+                          "Instantiate table failed: "
+                          "allocate memory failed.");
+            tables_deinstantiate(tables, table_count);
+            return NULL;
+        }
+
+        memset(table, 0, total_size);
+        table->cur_size = import->u.table.init_size;
+        table->max_size = import->u.table.max_size;
+    }
+
+    /* instantiate tables from table section */
+    for (i = 0; i < module->table_count; i++) {
+        total_size = offsetof(WASMTableInstance, base_addr) +
+                     sizeof(uint32) * module->tables[i].init_size;
+        if (!(table = tables[table_index++] = wasm_malloc(total_size))) {
+            set_error_buf(error_buf, error_buf_size,
+                          "Instantiate table failed: "
+                          "allocate memory failed.");
+            tables_deinstantiate(tables, table_count);
+            return NULL;
+        }
+
+        memset(table, 0, total_size);
+        table->cur_size = module->tables[i].init_size;
+        table->max_size = module->tables[i].max_size;
+    }
+
+    wasm_assert(table_index == table_count);
+    return tables;
+}
+
+/**
+ * Destroy function instances.
+ */
+static void
+functions_deinstantiate(WASMFunctionInstance *functions, uint32 count)
+{
+    if (functions) {
+        uint32 i;
+
+        for (i = 0; i < count; i++)
+            if (functions[i].local_offsets)
+                wasm_free(functions[i].local_offsets);
+        wasm_free(functions);
+    }
+}
+
+static bool
+function_init_local_offsets(WASMFunctionInstance *func)
+{
+    uint16 local_offset = 0;
+    WASMType *param_type = func->u.func->func_type;
+    uint32 param_count = param_type->param_count;
+    uint8 *param_types = param_type->types;
+    uint32 local_count = func->u.func->local_count;
+    uint8 *local_types = func->u.func->local_types;
+    uint32 i, total_size = (param_count + local_count) * sizeof(uint16);
+
+    if (!(func->local_offsets = wasm_malloc(total_size)))
+        return false;
+
+    for (i = 0; i < param_count; i++) {
+        func->local_offsets[i] = local_offset;
+        local_offset += wasm_value_type_cell_num(param_types[i]);
+    }
+
+    for (i = 0; i < local_count; i++) {
+        func->local_offsets[param_count + i] = local_offset;
+        local_offset += wasm_value_type_cell_num(local_types[i]);
+    }
+
+    wasm_assert(local_offset == func->param_cell_num + func->local_cell_num);
+    return true;
+}
+
+/**
+ * Instantiate functions in a module.
+ */
+static WASMFunctionInstance*
+functions_instantiate(const WASMModule *module,
+                      char *error_buf, uint32 error_buf_size)
+{
+    WASMImport *import;
+    uint32 i, function_count =
+        module->import_function_count + module->function_count;
+    uint32 total_size = sizeof(WASMFunctionInstance) * function_count;
+    WASMFunctionInstance *functions = wasm_malloc(total_size), *function;
+
+    if (!functions) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Instantiate function failed: "
+                      "allocate memory failed.");
+        return NULL;
+    }
+
+    memset(functions, 0, total_size);
+
+    /* instantiate functions from import section */
+    function = functions;
+    import = module->import_functions;
+    for (i = 0; i < module->import_function_count; i++, import++) {
+        function->is_import_func = true;
+        function->u.func_import = &import->u.function;
+
+        function->param_cell_num =
+            wasm_type_param_cell_num(import->u.function.func_type);
+        function->ret_cell_num =
+            wasm_type_return_cell_num(import->u.function.func_type);
+        function->local_cell_num = 0;
+
+        function++;
+    }
+
+    /* instantiate functions from function section */
+    for (i = 0; i < module->function_count; i++) {
+        function->is_import_func = false;
+        function->u.func = module->functions[i];
+
+        function->param_cell_num =
+            wasm_type_param_cell_num(function->u.func->func_type);
+        function->ret_cell_num =
+            wasm_type_return_cell_num(function->u.func->func_type);
+        function->local_cell_num =
+            wasm_get_cell_num(function->u.func->local_types,
+                              function->u.func->local_count);
+
+        if (!function_init_local_offsets(function)) {
+            functions_deinstantiate(functions, function_count);
+            return NULL;
+        }
+
+        function++;
+    }
+
+    wasm_assert((uint32)(function - functions) == function_count);
+    return functions;
+}
+
+/**
+ * Destroy global instances.
+ */
+static void
+globals_deinstantiate(WASMGlobalInstance *globals)
+{
+    if (globals)
+        wasm_free(globals);
+}
+
+/**
+ * Instantiate globals in a module.
+ */
+static WASMGlobalInstance*
+globals_instantiate(const WASMModule *module,
+                    uint32 *p_addr_data_size,
+                    uint32 *p_global_data_size,
+                    char *error_buf, uint32 error_buf_size)
+{
+    WASMImport *import;
+    uint32 addr_data_offset = 0, global_data_offset = 0;
+    uint32 i, global_count =
+        module->import_global_count + module->global_count;
+    uint32 total_size = sizeof(WASMGlobalInstance) * global_count;
+    WASMGlobalInstance *globals = wasm_malloc(total_size), *global;
+
+    if (!globals) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Instantiate global failed: "
+                      "allocate memory failed.");
+        return NULL;
+    }
+
+    memset(globals, 0, total_size);
+
+    /* instantiate globals from import section */
+    global = globals;
+    import = module->import_globals;
+    for (i = 0; i < module->import_global_count; i++, import++) {
+        WASMGlobalImport *global_import = &import->u.global;
+        global->type = global_import->type;
+        global->is_mutable = global_import->is_mutable;
+        global->is_addr = global_import->is_addr;
+        global->initial_value = global_import->global_data_linked;
+        global->data_offset = global_data_offset;
+        global_data_offset += wasm_value_type_size(global->type);
+
+        if (global->is_addr)
+            addr_data_offset += sizeof(uint32);
+
+        global++;
+    }
+
+    /* instantiate globals from global section */
+    for (i = 0; i < module->global_count; i++) {
+        global->type = module->globals[i].type;
+        global->is_mutable = module->globals[i].is_mutable;
+        global->is_addr = module->globals[i].is_addr;
+
+        global->data_offset = global_data_offset;
+        global_data_offset += wasm_value_type_size(global->type);
+
+        if (global->is_addr)
+            addr_data_offset += sizeof(uint32);
+
+        global++;
+    }
+
+    wasm_assert((uint32)(global - globals) == global_count);
+    *p_addr_data_size = addr_data_offset;
+    *p_global_data_size = global_data_offset;
+    return globals;
+}
+
+static void
+globals_instantiate_fix(WASMGlobalInstance *globals,
+                        const WASMModule *module,
+                        WASMModuleInstance *module_inst)
+{
+    WASMGlobalInstance *global = globals;
+    WASMImport *import = module->import_globals;
+    uint32 i;
+
+    /* Fix globals from import section */
+    for (i = 0; i < module->import_global_count; i++, import++, global++) {
+        if (!strcmp(import->u.names.module_name, "env")) {
+            if (!strcmp(import->u.names.field_name, "memoryBase")
+                || !strcmp(import->u.names.field_name, "__memory_base")) {
+                global->initial_value.addr = 0;
+            }
+            else if (!strcmp(import->u.names.field_name, "tableBase")
+                     || !strcmp(import->u.names.field_name, "__table_base")) {
+                global->initial_value.addr = 0;
+            }
+            else if (!strcmp(import->u.names.field_name, "DYNAMICTOP_PTR")) {
+                global->initial_value.i32 =
+                    NumBytesPerPage * 
module_inst->default_memory->cur_page_count;
+                module_inst->DYNAMICTOP_PTR_offset = global->data_offset;
+            }
+            else if (!strcmp(import->u.names.field_name, "STACKTOP")) {
+                global->initial_value.i32 = 0;
+            }
+            else if (!strcmp(import->u.names.field_name, "STACK_MAX")) {
+                /* Unused in emcc wasm bin actually. */
+                global->initial_value.i32 = 0;
+            }
+        }
+    }
+
+    for (i = 0; i < module->global_count; i++) {
+        InitializerExpression *init_expr = &module->globals[i].init_expr;
+
+        if (init_expr->init_expr_type == INIT_EXPR_TYPE_GET_GLOBAL) {
+            wasm_assert(init_expr->u.global_index < 
module->import_global_count);
+            global->initial_value = 
globals[init_expr->u.global_index].initial_value;
+        }
+        else {
+            memcpy(&global->initial_value, &init_expr->u, sizeof(int64));
+        }
+        global++;
+    }
+}
+
+/**
+ * Return export function count in module export section.
+ */
+static uint32
+get_export_function_count(const WASMModule *module)
+{
+    WASMExport *export = module->exports;
+    uint32 count = 0, i;
+
+    for (i = 0; i < module->export_count; i++, export++)
+        if (export->kind == EXPORT_KIND_FUNC)
+            count++;
+
+    return count;
+}
+
+/**
+ * Destroy export function instances.
+ */
+static void
+export_functions_deinstantiate(WASMExportFuncInstance *functions)
+{
+    if (functions)
+        wasm_free(functions);
+}
+
+/**
+ * Instantiate export functions in a module.
+ */
+static WASMExportFuncInstance*
+export_functions_instantiate(const WASMModule *module,
+                             WASMModuleInstance *module_inst,
+                             uint32 export_func_count,
+                             char *error_buf, uint32 error_buf_size)
+{
+    WASMExportFuncInstance *export_funcs, *export_func;
+    WASMExport *export = module->exports;
+    uint32 i, total_size = sizeof(WASMExportFuncInstance) * export_func_count;
+
+    if (!(export_func = export_funcs = wasm_malloc(total_size))) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Instantiate export function failed: "
+                      "allocate memory failed.");
+        return NULL;
+    }
+
+    memset(export_funcs, 0, total_size);
+
+    for (i = 0; i < module->export_count; i++, export++)
+        if (export->kind == EXPORT_KIND_FUNC) {
+            wasm_assert(export->index >= module->import_function_count
+                        && export->index < module->import_function_count
+                           + module->function_count);
+            export_func->name = export->name;
+            export_func->function = &module_inst->functions[export->index];
+            export_func++;
+        }
+
+    wasm_assert((uint32)(export_func - export_funcs) == export_func_count);
+    return export_funcs;
+}
+
+void
+wasm_runtime_deinstantiate(WASMModuleInstance *module_inst);
+
+static bool
+execute_post_inst_function(WASMModuleInstance *module_inst)
+{
+    WASMFunctionInstance *post_inst_func = NULL;
+    WASMType *post_inst_func_type;
+    uint32 i;
+
+    for (i = 0; i < module_inst->export_func_count; i++)
+        if (!strcmp(module_inst->export_functions[i].name, 
"__post_instantiate")) {
+            post_inst_func = module_inst->export_functions[i].function;
+            break;
+        }
+
+    if (!post_inst_func)
+        /* Not found */
+        return true;
+
+    post_inst_func_type = post_inst_func->u.func->func_type;
+    if (post_inst_func_type->param_count != 0
+        || post_inst_func_type->result_count != 0)
+        /* Not a valid function type, ignore it */
+        return true;
+
+    return wasm_runtime_call_wasm(module_inst, NULL, post_inst_func, 0, NULL);
+}
+
+static bool
+execute_start_function(WASMModuleInstance *module_inst)
+{
+    WASMFunctionInstance *func = module_inst->start_function;
+
+    if (!func)
+        return true;
+
+    wasm_assert(!func->is_import_func && func->param_cell_num == 0
+            && func->ret_cell_num == 0);
+
+    return wasm_runtime_call_wasm(module_inst, NULL, func, 0, NULL);
+}
+
+/**
+ * Instantiate module
+ */
+WASMModuleInstance*
+wasm_runtime_instantiate(WASMModule *module,
+                         uint32 stack_size, uint32 heap_size,
+                         char *error_buf, uint32 error_buf_size)
+{
+    WASMModuleInstance *module_inst;
+    WASMTableSeg *table_seg;
+    WASMDataSeg *data_seg;
+    WASMGlobalInstance *globals = NULL, *global;
+    uint32 global_count, addr_data_size = 0, global_data_size = 0, i;
+    uint32 base_offset, length, memory_size;
+    uint8 *global_data, *global_data_end, *addr_data, *addr_data_end;
+    uint8 *memory_data;
+    uint32 *table_data;
+
+    if (!module)
+        return NULL;
+
+    /* Check heap size */
+    heap_size = align_uint(heap_size, 8);
+    if (heap_size == 0)
+        heap_size = APP_HEAP_SIZE_DEFAULT;
+    if (heap_size < APP_HEAP_SIZE_MIN)
+        heap_size = APP_HEAP_SIZE_MIN;
+    if (heap_size > APP_HEAP_SIZE_MAX)
+        heap_size = APP_HEAP_SIZE_MAX;
+
+    /* Instantiate global firstly to get the mutable data size */
+    global_count = module->import_global_count + module->global_count;
+    if (global_count &&
+        !(globals = globals_instantiate(module, &addr_data_size,
+                                        &global_data_size,
+                                        error_buf, error_buf_size)))
+        return NULL;
+
+    /* Allocate the memory */
+    if (!(module_inst = wasm_malloc(sizeof(WASMModuleInstance)))) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Instantiate module failed: allocate memory failed.");
+        globals_deinstantiate(globals);
+        return NULL;
+    }
+
+    memset(module_inst, 0, sizeof(WASMModuleInstance));
+    module_inst->global_count = global_count;
+    module_inst->globals = globals;
+
+    module_inst->memory_count =
+        module->import_memory_count + module->memory_count;
+    module_inst->table_count =
+        module->import_table_count + module->table_count;
+    module_inst->function_count =
+        module->import_function_count + module->function_count;
+    module_inst->export_func_count = get_export_function_count(module);
+
+    /* Instantiate memories/tables/functions */
+    if (((module_inst->memory_count > 0 || global_count > 0)
+         && !(module_inst->memories =
+             memories_instantiate(module, addr_data_size, global_data_size,
+                                  heap_size, error_buf, error_buf_size)))
+        || (module_inst->table_count > 0
+            && !(module_inst->tables = tables_instantiate(module,
+                                                          error_buf,
+                                                          error_buf_size)))
+        || (module_inst->function_count > 0
+            && !(module_inst->functions = functions_instantiate(module,
+                                                                error_buf,
+                                                                
error_buf_size)))
+        || (module_inst->export_func_count > 0
+            && !(module_inst->export_functions = export_functions_instantiate(
+                    module, module_inst, module_inst->export_func_count,
+                    error_buf, error_buf_size)))) {
+        wasm_runtime_deinstantiate(module_inst);
+        return NULL;
+    }
+
+    if (module_inst->memory_count || global_count > 0) {
+        WASMMemoryInstance *memory;
+
+        memory = module_inst->default_memory = module_inst->memories[0];
+        memory_data = module_inst->default_memory->memory_data;
+
+        /* fix import memoryBase */
+        globals_instantiate_fix(globals, module, module_inst);
+
+        /* Initialize the global data */
+        addr_data = memory->addr_data;
+        addr_data_end = addr_data + addr_data_size;
+        global_data = memory->global_data;
+        global_data_end = global_data + global_data_size;
+        global = globals;
+        for (i = 0; i < global_count; i++, global++) {
+            switch (global->type) {
+                case VALUE_TYPE_I32:
+                case VALUE_TYPE_F32:
+                    if (!global->is_addr)
+                        *(int32*)global_data = global->initial_value.i32;
+                    else {
+                        *(int32*)addr_data = global->initial_value.i32;
+                        /* Store the offset to memory data for global of addr 
*/
+                        *(int32*)global_data = addr_data - memory_data;
+                        addr_data += sizeof(int32);
+                    }
+                    global_data += sizeof(int32);
+                    break;
+                case VALUE_TYPE_I64:
+                case VALUE_TYPE_F64:
+                    wasm_assert(!global->is_addr);
+                    memcpy(global_data, &global->initial_value.i64, 
sizeof(int64));
+                    global_data += sizeof(int64);
+                    break;
+                default:
+                    wasm_assert(0);
+            }
+        }
+        wasm_assert(addr_data == addr_data_end);
+        wasm_assert(global_data == global_data_end);
+
+        global = globals + module->import_global_count;
+        for (i = 0; i < module->global_count; i++, global++) {
+            InitializerExpression *init_expr = &module->globals[i].init_expr;
+
+            if (init_expr->init_expr_type == INIT_EXPR_TYPE_GET_GLOBAL
+                && globals[init_expr->u.global_index].is_addr) {
+                uint8 *global_data_dst = memory->global_data + 
global->data_offset;
+                uint8 *global_data_src =
+                    memory->global_data + 
globals[init_expr->u.global_index].data_offset;
+                *(uintptr_t*)global_data_dst = *(uintptr_t*)global_data_src;
+            }
+        }
+
+        /* Initialize the memory data with data segment section */
+        if (module_inst->default_memory->cur_page_count > 0) {
+            for (i = 0; i < module->data_seg_count; i++) {
+                data_seg = module->data_segments[i];
+                wasm_assert(data_seg->memory_index == 0);
+                wasm_assert(data_seg->base_offset.init_expr_type ==
+                            INIT_EXPR_TYPE_I32_CONST
+                            || data_seg->base_offset.init_expr_type ==
+                            INIT_EXPR_TYPE_GET_GLOBAL);
+
+                if (data_seg->base_offset.init_expr_type == 
INIT_EXPR_TYPE_GET_GLOBAL) {
+                    wasm_assert(data_seg->base_offset.u.global_index < 
global_count
+                                && 
globals[data_seg->base_offset.u.global_index].type ==
+                                VALUE_TYPE_I32);
+                    data_seg->base_offset.u.i32 =
+                        
globals[data_seg->base_offset.u.global_index].initial_value.i32;
+                }
+
+                base_offset = (uint32)data_seg->base_offset.u.i32;
+                length = data_seg->data_length;
+                memory_size = NumBytesPerPage * 
module_inst->default_memory->cur_page_count;
+
+                if (length > 0
+                    && (base_offset >= memory_size
+                        || base_offset + length > memory_size)) {
+                    set_error_buf(error_buf, error_buf_size,
+                            "Instantiate module failed: data segment out of 
range.");
+                    wasm_runtime_deinstantiate(module_inst);
+                    return NULL;
+                }
+
+                memcpy(memory_data + base_offset, data_seg->data, length);
+            }
+        }
+    }
+
+    if (module_inst->table_count) {
+        module_inst->default_table = module_inst->tables[0];
+
+        /* Initialize the table data with table segment section */
+        table_data = (uint32*)module_inst->default_table->base_addr;
+        table_seg = module->table_segments;
+        for (i = 0; i < module->table_seg_count; i++, table_seg++) {
+            wasm_assert(table_seg->table_index == 0);
+            wasm_assert(table_seg->base_offset.init_expr_type ==
+                        INIT_EXPR_TYPE_I32_CONST
+                        || table_seg->base_offset.init_expr_type ==
+                        INIT_EXPR_TYPE_GET_GLOBAL);
+
+            if (table_seg->base_offset.init_expr_type ==
+                    INIT_EXPR_TYPE_GET_GLOBAL) {
+                wasm_assert(table_seg->base_offset.u.global_index < 
global_count
+                            && 
globals[table_seg->base_offset.u.global_index].type ==
+                            VALUE_TYPE_I32);
+                table_seg->base_offset.u.i32 =
+                    
globals[table_seg->base_offset.u.global_index].initial_value.i32;
+            }
+            if ((uint32)table_seg->base_offset.u.i32 <
+                    module_inst->default_table->cur_size) {
+                length = table_seg->function_count;
+                if (table_seg->base_offset.u.i32 + length >
+                        module_inst->default_table->cur_size)
+                    length = module_inst->default_table->cur_size
+                             - table_seg->base_offset.u.i32;
+                memcpy(table_data + table_seg->base_offset.u.i32,
+                       table_seg->func_indexes, length * sizeof(uint32));
+            }
+        }
+    }
+
+    if (module->start_function != (uint32)-1) {
+        wasm_assert(module->start_function >= module->import_function_count);
+        module_inst->start_function =
+            &module_inst->functions[module->start_function];
+    }
+
+    module_inst->module = module;
+
+    /* module instance type */
+    module_inst->module_type = Wasm_Module_Bytecode;
+
+    /* Initialize the thread related data */
+    if (stack_size == 0)
+        stack_size = DEFAULT_WASM_STACK_SIZE;
+    module_inst->wasm_stack_size = stack_size;
+    module_inst->main_tlr.module_inst = module_inst;
+
+    /* Bind thread data with current native thread:
+       set thread local root to current thread. */
+    wasm_runtime_set_tlr(&module_inst->main_tlr);
+    module_inst->main_tlr.handle = ws_self_thread();
+
+    /* Execute __post_instantiate and start function */
+    if (!execute_post_inst_function(module_inst)
+        || !execute_start_function(module_inst)) {
+        set_error_buf(error_buf, error_buf_size,
+                      module_inst->cur_exception);
+        wasm_runtime_deinstantiate(module_inst);
+        return NULL;
+    }
+
+    (void)addr_data_end;
+    (void)global_data_end;
+    return module_inst;
+}
+
+void
+wasm_runtime_deinstantiate(WASMModuleInstance *module_inst)
+{
+    if (!module_inst)
+        return;
+
+    if (module_inst->memory_count > 0)
+        memories_deinstantiate(module_inst->memories, 
module_inst->memory_count);
+    else if (module_inst->memories != NULL && module_inst->global_count > 0)
+        /* No imported memory and defined memory, the memory is created when
+           global count > 0. */
+        memories_deinstantiate(module_inst->memories, 1);
+
+    tables_deinstantiate(module_inst->tables, module_inst->table_count);
+    functions_deinstantiate(module_inst->functions, 
module_inst->function_count);
+    globals_deinstantiate(module_inst->globals);
+    export_functions_deinstantiate(module_inst->export_functions);
+
+    if (module_inst->wasm_stack)
+        wasm_free(module_inst->wasm_stack);
+
+    wasm_free(module_inst);
+}
+
+#if WASM_ENABLE_EXT_MEMORY_SPACE != 0
+bool
+wasm_runtime_set_ext_memory(WASMModuleInstance *module_inst,
+                            uint8 *ext_mem_data, uint32 ext_mem_size,
+                            char *error_buf, uint32 error_buf_size)
+{
+    if (module_inst->ext_mem_data) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Set external memory failed: "
+                      "an external memory has been set.");
+        return false;
+    }
+
+    if (!ext_mem_data
+        || ext_mem_size > 1 * BH_GB
+        || ext_mem_data + ext_mem_size < ext_mem_data) {
+        set_error_buf(error_buf, error_buf_size,
+                      "Set external memory failed: "
+                      "invalid input.");
+        return false;
+    }
+
+    module_inst->ext_mem_data = ext_mem_data;
+    module_inst->ext_mem_data_end = ext_mem_data + ext_mem_size;
+    module_inst->ext_mem_size = ext_mem_size;
+    module_inst->ext_mem_base_offset = DEFAULT_EXT_MEM_BASE_OFFSET;
+
+    return true;
+}
+#endif
+
+bool
+wasm_runtime_enlarge_memory(WASMModuleInstance *module, int inc_page_count)
+{
+#if WASM_ENABLE_MEMORY_GROW != 0
+    WASMMemoryInstance *memory = module->default_memory;
+    WASMMemoryInstance *new_memory;
+    uint32 total_page_count = inc_page_count + memory->cur_page_count;
+    uint32 total_size = offsetof(WASMMemoryInstance, base_addr) +
+                        memory->addr_data_size +
+                        NumBytesPerPage * total_page_count +
+                        memory->global_data_size;
+
+    if (inc_page_count <= 0)
+        /* No need to enlarge memory */
+        return true;
+
+    if (total_page_count < memory->cur_page_count /* integer overflow */
+        || total_page_count > memory->max_page_count) {
+        wasm_runtime_set_exception(module, "fail to enlarge memory.");
+        return false;
+    }
+
+    if (!(new_memory = wasm_malloc(total_size))) {
+        wasm_runtime_set_exception(module, "fail to enlarge memory.");
+        return false;
+    }
+
+    new_memory->cur_page_count = total_page_count;
+    new_memory->max_page_count = memory->max_page_count;
+
+    new_memory->addr_data = new_memory->base_addr;
+    new_memory->addr_data_size = memory->addr_data_size;
+
+    new_memory->memory_data = new_memory->addr_data + 
new_memory->addr_data_size;
+
+    new_memory->global_data = new_memory->memory_data +
+                              NumBytesPerPage * total_page_count;
+    new_memory->global_data_size = memory->global_data_size;
+
+    new_memory->end_addr = new_memory->global_data + memory->global_data_size;
+
+    /* Copy addr data and memory data */
+    memcpy(new_memory->addr_data, memory->addr_data,
+           memory->global_data - memory->addr_data);
+    /* Copy global data */
+    memcpy(new_memory->global_data, memory->global_data,
+           memory->global_data_size);
+    /* Init free space of new memory */
+    memset(new_memory->memory_data + NumBytesPerPage * memory->cur_page_count,
+           0, NumBytesPerPage * (total_page_count - memory->cur_page_count));
+
+    new_memory->heap_data = memory->heap_data;
+    new_memory->heap_data_end = memory->heap_data_end;
+    new_memory->heap_handle = memory->heap_handle;
+    new_memory->heap_base_offset = memory->heap_base_offset;
+
+    module->memories[0] = module->default_memory = new_memory;
+    wasm_free(memory);
+    return true;
+#else
+    wasm_runtime_set_exception(module, "unsupported operation: enlarge 
memory.");
+    return false;
+#endif
+}
+
+PackageType
+get_package_type(const uint8 *buf, uint32 size)
+{
+    if (buf && size > 4) {
+        if (buf[0] == '\0' && buf[1] == 'a' && buf[2] == 's' && buf[3] == 'm')
+            return Wasm_Module_Bytecode;
+        if (buf[0] == '\0' && buf[1] == 'a' && buf[2] == 'o' && buf[3] == 't')
+            return Wasm_Module_AoT;
+    }
+    return Package_Type_Unknown;
+}
+
+WASMExecEnv*
+wasm_runtime_create_exec_env(uint32 stack_size)
+{
+    WASMExecEnv *exec_env = wasm_malloc(sizeof(WASMExecEnv));
+    if (exec_env) {
+        if (!(exec_env->stack = wasm_malloc(stack_size))) {
+            wasm_free(exec_env);
+            return NULL;
+        }
+        exec_env->stack_size = stack_size;
+    }
+    return exec_env;
+}
+
+void
+wasm_runtime_destory_exec_env(WASMExecEnv *env)
+{
+    if (env) {
+        wasm_free(env->stack);
+        wasm_free(env);
+    }
+}
+
+bool
+wasm_runtime_attach_current_thread(WASMModuleInstance *module_inst,
+                                   void *thread_data)
+{
+    wasm_runtime_set_tlr(&module_inst->main_tlr);
+    module_inst->main_tlr.handle = ws_self_thread();
+    module_inst->thread_data = thread_data;
+    return true;
+}
+
+void
+wasm_runtime_detach_current_thread(WASMModuleInstance *module_inst)
+{
+    module_inst->thread_data = NULL;
+}
+
+void*
+wasm_runtime_get_current_thread_data()
+{
+    WASMThread *tlr = wasm_runtime_get_self();
+    return (tlr && tlr->module_inst) ? tlr->module_inst->thread_data : NULL;
+}
+
+WASMModuleInstance *
+wasm_runtime_get_current_module_inst()
+{
+    WASMThread *tlr = wasm_runtime_get_self();
+    return tlr ? tlr->module_inst : NULL;
+}
+
+int32
+wasm_runtime_module_malloc(WASMModuleInstance *module_inst, uint32 size)
+{
+    WASMMemoryInstance *memory = module_inst->default_memory;
+    uint8 *addr = mem_allocator_malloc(memory->heap_handle, size);
+    if (!addr) {
+        wasm_runtime_set_exception(module_inst, "out of memory");
+        return 0;
+    }
+    return memory->heap_base_offset + (addr - memory->heap_data);
+}
+
+void
+wasm_runtime_module_free(WASMModuleInstance *module_inst, int32 ptr)
+{
+    if (ptr) {
+        WASMMemoryInstance *memory = module_inst->default_memory;
+        uint8 *addr = memory->heap_data + (ptr - memory->heap_base_offset);
+        if (memory->heap_data < addr && addr < memory->heap_data_end)
+            mem_allocator_free(memory->heap_handle, addr);
+    }
+}
+
+int32
+wasm_runtime_module_dup_data(WASMModuleInstance *module_inst,
+                             const char *src, uint32 size)
+{
+    int32 buffer_offset = wasm_runtime_module_malloc(module_inst, size);
+    if (buffer_offset != 0) {
+        char *buffer;
+        buffer = wasm_runtime_addr_app_to_native(module_inst, buffer_offset);
+        memcpy(buffer, src, size);
+    }
+    return buffer_offset;
+}
+
+bool
+wasm_runtime_validate_app_addr(WASMModuleInstance *module_inst,
+                               int32 app_offset, uint32 size)
+{
+    WASMMemoryInstance *memory;
+    uint8 *addr;
+
+    /* integer overflow check */
+    if(app_offset + size < app_offset) {
+        goto fail;
+    }
+
+    memory = module_inst->default_memory;
+    if (0 <= app_offset
+        && app_offset < memory->heap_base_offset) {
+        addr = memory->memory_data + app_offset;
+        if (!(memory->base_addr <= addr && addr + size <= memory->end_addr))
+            goto fail;
+        return true;
+    }
+    else if (memory->heap_base_offset < app_offset
+             && app_offset < memory->heap_base_offset
+                             + (memory->heap_data_end - memory->heap_data)) {
+        addr = memory->heap_data + (app_offset - memory->heap_base_offset);
+        if (!(memory->heap_data <= addr && addr + size <= 
memory->heap_data_end))
+            goto fail;
+        return true;
+    }
+#if WASM_ENABLE_EXT_MEMORY_SPACE != 0
+    else if (module_inst->ext_mem_data
+             && module_inst->ext_mem_base_offset <= app_offset
+             && app_offset < module_inst->ext_mem_base_offset
+                             + module_inst->ext_mem_size) {
+        addr = module_inst->ext_mem_data
+               + (app_offset - module_inst->ext_mem_base_offset);
+        if (!(module_inst->ext_mem_data <= addr
+              && addr + size <= module_inst->ext_mem_data_end))
+            goto fail;
+
+        return true;
+    }
+#endif
+
+fail:
+    wasm_runtime_set_exception(module_inst, "out of bounds memory access");
+    return false;
+}
+
+bool
+wasm_runtime_validate_native_addr(WASMModuleInstance *module_inst,
+                                  void *native_ptr, uint32 size)
+{
+    uint8 *addr = native_ptr;
+    WASMMemoryInstance *memory = module_inst->default_memory;
+
+    if (addr + size < addr) {
+        goto fail;
+    }
+
+    if ((memory->base_addr <= addr && addr + size <= memory->end_addr)
+        || (memory->heap_data <= addr && addr + size <= memory->heap_data_end)
+#if WASM_ENABLE_EXT_MEMORY_SPACE != 0
+        || (module_inst->ext_mem_data
+            && module_inst->ext_mem_data <= addr
+            && addr + size <= module_inst->ext_mem_data_end)
+#endif
+       )
+        return true;
+
+fail:
+    wasm_runtime_set_exception(module_inst, "out of bounds memory access");
+    return false;
+}
+
+void *
+wasm_runtime_addr_app_to_native(WASMModuleInstance *module_inst,
+                                int32 app_offset)
+{
+    WASMMemoryInstance *memory = module_inst->default_memory;
+    if (0 <= app_offset && app_offset < memory->heap_base_offset)
+        return memory->memory_data + app_offset;
+    else if (memory->heap_base_offset < app_offset
+             && app_offset < memory->heap_base_offset
+                             + (memory->heap_data_end - memory->heap_data))
+        return memory->heap_data + (app_offset - memory->heap_base_offset);
+#if WASM_ENABLE_EXT_MEMORY_SPACE != 0
+    else if (module_inst->ext_mem_data
+             && module_inst->ext_mem_base_offset <= app_offset
+             && app_offset < module_inst->ext_mem_base_offset
+                             + module_inst->ext_mem_size)
+        return module_inst->ext_mem_data
+               + (app_offset - module_inst->ext_mem_base_offset);
+#endif
+    else
+        return NULL;
+}
+
+int32
+wasm_runtime_addr_native_to_app(WASMModuleInstance *module_inst,
+                                void *native_ptr)
+{
+    WASMMemoryInstance *memory = module_inst->default_memory;
+    if (memory->base_addr <= (uint8*)native_ptr
+        && (uint8*)native_ptr < memory->end_addr)
+        return (uint8*)native_ptr - memory->memory_data;
+    else if (memory->heap_data <= (uint8*)native_ptr
+             && (uint8*)native_ptr < memory->heap_data_end)
+        return memory->heap_base_offset
+               + ((uint8*)native_ptr - memory->heap_data);
+#if WASM_ENABLE_EXT_MEMORY_SPACE != 0
+    else if (module_inst->ext_mem_data
+             && module_inst->ext_mem_data <= (uint8*)native_ptr
+             && (uint8*)native_ptr < module_inst->ext_mem_data_end)
+        return module_inst->ext_mem_base_offset
+               + ((uint8*)native_ptr - module_inst->ext_mem_data);
+#endif
+    else
+        return 0;
+}
+
+bool
+wasm_runtime_get_app_addr_range(WASMModuleInstance *module_inst,
+                                int32 app_offset,
+                                int32 *p_app_start_offset,
+                                int32 *p_app_end_offset)
+{
+    int32 app_start_offset, app_end_offset;
+    WASMMemoryInstance *memory = module_inst->default_memory;
+
+    if (0 <= app_offset && app_offset < memory->heap_base_offset) {
+        app_start_offset = 0;
+        app_end_offset = NumBytesPerPage * memory->cur_page_count;
+    }
+    else if (memory->heap_base_offset < app_offset
+             && app_offset < memory->heap_base_offset
+                             + (memory->heap_data_end - memory->heap_data)) {
+        app_start_offset = memory->heap_base_offset;
+        app_end_offset = memory->heap_base_offset
+                         + (memory->heap_data_end - memory->heap_data);
+    }
+#if WASM_ENABLE_EXT_MEMORY_SPACE != 0
+    else if (module_inst->ext_mem_data
+             && module_inst->ext_mem_base_offset <= app_offset
+             && app_offset < module_inst->ext_mem_base_offset
+                             + module_inst->ext_mem_size) {
+        app_start_offset = module_inst->ext_mem_base_offset;
+        app_end_offset = app_start_offset + module_inst->ext_mem_size;
+    }
+#endif
+    else
+        return false;
+
+    if (p_app_start_offset)
+        *p_app_start_offset = app_start_offset;
+    if (p_app_end_offset)
+        *p_app_end_offset = app_end_offset;
+    return true;
+}
+
+bool
+wasm_runtime_get_native_addr_range(WASMModuleInstance *module_inst,
+                                   uint8 *native_ptr,
+                                   uint8 **p_native_start_addr,
+                                   uint8 **p_native_end_addr)
+{
+    uint8 *native_start_addr, *native_end_addr;
+    WASMMemoryInstance *memory = module_inst->default_memory;
+
+    if (memory->base_addr <= (uint8*)native_ptr
+        && (uint8*)native_ptr < memory->end_addr) {
+        native_start_addr = memory->memory_data;
+        native_end_addr = memory->memory_data
+                          + NumBytesPerPage * memory->cur_page_count;
+    }
+    else if (memory->heap_data <= (uint8*)native_ptr
+             && (uint8*)native_ptr < memory->heap_data_end) {
+        native_start_addr = memory->heap_data;
+        native_end_addr = memory->heap_data_end;
+    }
+#if WASM_ENABLE_EXT_MEMORY_SPACE != 0
+    else if (module_inst->ext_mem_data
+             && module_inst->ext_mem_data <= (uint8*)native_ptr
+             && (uint8*)native_ptr < module_inst->ext_mem_data_end) {
+        native_start_addr = module_inst->ext_mem_data;
+        native_end_addr = module_inst->ext_mem_data_end;
+    }
+#endif
+    else
+        return false;
+
+    if (p_native_start_addr)
+        *p_native_start_addr = native_start_addr;
+    if (p_native_end_addr)
+        *p_native_end_addr = native_end_addr;
+    return true;
+}
+
+
+uint32
+wasm_runtime_get_temp_ret(WASMModuleInstance *module_inst)
+{
+    return module_inst->temp_ret;
+}
+
+void
+wasm_runtime_set_temp_ret(WASMModuleInstance *module_inst,
+                          uint32 temp_ret)
+{
+    module_inst->temp_ret = temp_ret;
+}
+
+uint32
+wasm_runtime_get_llvm_stack(WASMModuleInstance *module_inst)
+{
+    return module_inst->llvm_stack;
+}
+
+void
+wasm_runtime_set_llvm_stack(WASMModuleInstance *module_inst,
+                            uint32 llvm_stack)
+{
+    module_inst->llvm_stack = llvm_stack;
+}
+
+WASMModuleInstance*
+wasm_runtime_load_aot(uint8 *aot_file, uint32 aot_file_size,
+                      uint32 heap_size,
+                      char *error_buf, uint32 error_buf_size)
+{
+    (void)aot_file;
+    (void)aot_file_size;
+    (void)heap_size;
+    (void)error_buf;
+    (void)error_buf_size;
+    return NULL;
+}
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_runtime.h 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_runtime.h
new file mode 100755
index 0000000..30ef58c
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_runtime.h
@@ -0,0 +1,323 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_RUNTIME_H
+#define _WASM_RUNTIME_H
+
+#include "wasm.h"
+#include "wasm_thread.h"
+#include "wasm_hashmap.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct WASMMemoryInstance {
+    /* Current page count */
+    uint32 cur_page_count;
+    /* Maximum page count */
+    uint32 max_page_count;
+    /* Data of import globals with address info, like _stdin/_stdout/_stderr,
+       stdin/stdout/stderr is stored here, but the actual addr info, or offset
+       to memory_data is stored in global_data section */
+    uint8 *addr_data;
+    /* Size of addr_data */
+    uint32 addr_data_size;
+
+    /* Heap data base address */
+    uint8 *heap_data;
+    /* Heap data end address */
+    uint8 *heap_data_end;
+    /* The heap created */
+    void *heap_handle;
+    /* Heap base offset of wasm app */
+    int32 heap_base_offset;
+
+    /* Memory data */
+    uint8 *memory_data;
+    /* Global data of global instances */
+    uint8 *global_data;
+    uint32 global_data_size;
+
+    /* End address of memory */
+    uint8 *end_addr;
+
+    /* Base address, the layout is:
+       addr_data + thunk_argv data + thunk arg offsets +
+       memory data + global data
+       memory data init size is: NumBytesPerPage * cur_page_count
+       addr data size and global data size is calculated in module 
instantiating
+       Note: when memory is re-allocated, the addr data, thunk argv data, thunk
+             argv offsets and memory data must be copied to new memory also.
+     */
+    uint8 base_addr[1];
+} WASMMemoryInstance;
+
+typedef struct WASMTableInstance {
+    /* The element type, TABLE_ELEM_TYPE_ANY_FUNC currently */
+    uint8 elem_type;
+    /* Current size */
+    uint32 cur_size;
+    /* Maximum size */
+    uint32 max_size;
+    /* Base address */
+    uint8 base_addr[1];
+} WASMTableInstance;
+
+typedef struct WASMGlobalInstance {
+    /* value type, VALUE_TYPE_I32/I64/F32/F64 */
+    uint8 type;
+    /* mutable or constant */
+    bool is_mutable;
+    bool is_addr;
+    /* data offset to base_addr of WASMMemoryInstance */
+    uint32 data_offset;
+    /* initial value */
+    WASMValue initial_value;
+} WASMGlobalInstance;
+
+typedef struct WASMFunctionInstance {
+    /* whether it is import function or WASM function */
+    bool is_import_func;
+    /* cell num of parameters */
+    uint16 param_cell_num;
+    /* cell num of return type */
+    uint16 ret_cell_num;
+    /* cell num of local variables, 0 for import function */
+    uint16 local_cell_num;
+    uint16 *local_offsets;
+    union {
+        WASMFunctionImport *func_import;
+        WASMFunction *func;
+    } u;
+} WASMFunctionInstance;
+
+typedef struct WASMExportFuncInstance {
+    char *name;
+    WASMFunctionInstance *function;
+} WASMExportFuncInstance;
+
+/* Package Type */
+typedef enum {
+    Wasm_Module_Bytecode = 0,
+    Wasm_Module_AoT,
+    Package_Type_Unknown = 0xFFFF
+} PackageType;
+
+typedef struct WASMModuleInstance {
+    /* Module instance type, for module instance loaded from
+       WASM bytecode binary, this field is Wasm_Module_Bytecode;
+       for module instance loaded from AOT package, this field is
+       Wasm_Module_AoT, and this structure should be treated as
+       WASMAOTContext structure. */
+    uint32 module_type;
+
+    uint32 memory_count;
+    uint32 table_count;
+    uint32 global_count;
+    uint32 function_count;
+    uint32 export_func_count;
+
+    WASMMemoryInstance **memories;
+    WASMTableInstance **tables;
+    WASMGlobalInstance *globals;
+    WASMFunctionInstance *functions;
+    WASMExportFuncInstance *export_functions;
+
+    WASMMemoryInstance *default_memory;
+    WASMTableInstance *default_table;
+
+    WASMFunctionInstance *start_function;
+
+    WASMModule *module;
+
+    uint32 DYNAMICTOP_PTR_offset;
+    uint32 temp_ret;
+    uint32 llvm_stack;
+
+#if WASM_ENABLE_EXT_MEMORY_SPACE != 0
+    int32 ext_mem_base_offset;
+    uint8 *ext_mem_data;
+    uint8 *ext_mem_data_end;
+    uint32 ext_mem_size;
+#endif
+
+    /* Default WASM stack size of threads of this Module instance. */
+    uint32 wasm_stack_size;
+
+    /* Default WASM stack */
+    uint8 *wasm_stack;
+
+    /* The exception buffer of wasm interpreter for current thread. */
+    char cur_exception[128];
+
+    /* The thread data of the attaching thread */
+    void *thread_data;
+
+    /* Main Thread */
+    WASMThread main_tlr;
+} WASMModuleInstance;
+
+/* Execution environment, e.g. stack info */
+typedef struct WASMExecEnv {
+    uint8_t *stack;
+    uint32_t stack_size;
+} WASMExecEnv;
+
+struct WASMInterpFrame;
+typedef struct WASMInterpFrame WASMRuntimeFrame;
+
+/**
+ * Return the current thread.
+ *
+ * @return the current thread
+ */
+static inline WASMThread*
+wasm_runtime_get_self()
+{
+    return (WASMThread*)ws_tls_get();
+}
+
+/**
+ * Set self as the current thread.
+ *
+ * @param self the thread to be set as current thread
+ */
+static inline void
+wasm_runtime_set_tlr(WASMThread *self)
+{
+    ws_tls_put(self);
+}
+
+/**
+ * Return the code block of a function.
+ *
+ * @param func the WASM function instance
+ *
+ * @return the code block of the function
+ */
+static inline uint8*
+wasm_runtime_get_func_code(WASMFunctionInstance *func)
+{
+    return func->is_import_func ? NULL : func->u.func->code;
+}
+
+/**
+ * Return the code block end of a function.
+ *
+ * @param func the WASM function instance
+ *
+ * @return the code block end of the function
+ */
+static inline uint8*
+wasm_runtime_get_func_code_end(WASMFunctionInstance *func)
+{
+    return func->is_import_func
+           ? NULL : func->u.func->code + func->u.func->code_size;
+}
+
+/**
+ * Call the given WASM function of a WASM module instance with arguments 
(bytecode and AoT).
+ *
+ * @param module_inst the WASM module instance which the function belongs to
+ * @param exec_env the execution environment to call the function. If the 
module instance
+ *   is created by AoT mode, it is ignored and just set it to NULL. If the 
module instance
+ *   is created by bytecode mode and it is NULL, a temporary env object will 
be created
+ * @param function the function to be called
+ * @param argc the number of arguments
+ * @param argv the arguments.  If the function method has return value,
+ *   the first (or first two in case 64-bit return value) element of
+ *   argv stores the return value of the called WASM function after this
+ *   function returns.
+ *
+ * @return true if success, false otherwise and exception will be thrown,
+ *   the caller can call wasm_runtime_get_exception to get exception info.
+ */
+bool
+wasm_runtime_call_wasm(WASMModuleInstance *module,
+                       WASMExecEnv *exec_env,
+                       WASMFunctionInstance *function,
+                       unsigned argc, uint32 argv[]);
+
+/**
+ * Set current exception string to global exception string.
+ *
+ * @param module the wasm module instance
+ *
+ * @param exception current exception string
+ */
+void
+wasm_runtime_set_exception(WASMModuleInstance *module,
+                           const char *exception);
+
+/**
+ * Get current exception string.
+ *
+ * @param module the wasm module instance
+ *
+ * @return return exception string if exception is thrown, NULL otherwise
+ */
+const char*
+wasm_runtime_get_exception(WASMModuleInstance *module);
+
+/**
+ * Enlarge wasm memory data space.
+ *
+ * @param module the wasm module instance
+ * @param inc_page_count denote the page number to increase
+ * @return return true if enlarge successfully, false otherwise
+ */
+bool
+wasm_runtime_enlarge_memory(WASMModuleInstance *module, int inc_page_count);
+
+/* See wasm-export.h for description */
+WASMModuleInstance *
+wasm_runtime_get_current_module_inst();
+
+/* See wasm-export.h for description */
+int32
+wasm_runtime_module_malloc(WASMModuleInstance *module_inst, uint32 size);
+
+/* See wasm-export.h for description */
+void
+wasm_runtime_module_free(WASMModuleInstance *module_inst, int32 ptr);
+
+/* See wasm-export.h for description */
+bool
+wasm_runtime_validate_app_addr(WASMModuleInstance *module_inst,
+                               int32 app_offset, uint32 size);
+
+/* See wasm-export.h for description */
+bool
+wasm_runtime_validate_native_addr(WASMModuleInstance *module_inst,
+                                  void *native_ptr, uint32 size);
+
+/* See wasm-export.h for description */
+void *
+wasm_runtime_addr_app_to_native(WASMModuleInstance *module_inst,
+                                int32 app_offset);
+
+/* See wasm-export.h for description */
+int32
+wasm_runtime_addr_native_to_app(WASMModuleInstance *module_inst,
+                                void *native_ptr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _WASM_RUNTIME_H */
+
diff --git a/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_thread.h 
b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_thread.h
new file mode 100755
index 0000000..a1844f1
--- /dev/null
+++ b/scriptsrcs/wamr/core/iwasm/runtime/vmcore-wasm/wasm_thread.h
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _WASM_RUNTIME_THREAD_H
+#define _WASM_RUNTIME_THREAD_H
+
+#include "wasm_assert.h"
+#include "wa_thread.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct WASMModuleInstance;
+struct WASMInterpFrame;
+
+typedef struct WASMStack {
+    /* The bottom of the stack, must be 8-bytes align. */
+    uint8 *bottom;
+    /* Top cell index which is free. */
+    uint8 *top;
+    /* The top boundary of the stack. */
+    uint8 *top_boundary;
+} WASMStack;
+
+typedef struct WASMThread {
+    /* Previous thread's tlr of an instance. */
+    struct WASMThread *prev;
+
+    /* Next thread's tlr of an instance. */
+    struct WASMThread *next;
+
+    /* The WASM module instance of current thread */
+    struct WASMModuleInstance *module_inst;
+
+    /* Current frame of current thread. */
+    struct WASMInterpFrame *cur_frame;
+
+    /* The boundary of native stack. When interpreter detects that native
+       frame may overrun this boundary, it will throw a stack overflow
+       exception. */
+    void *native_stack_boundary;
+
+    /* The WASM stack of current thread. */
+    WASMStack wasm_stack;
+
+    /* The native thread handle of current thread. */
+    korp_tid handle;
+
+    /* Current suspend count of this thread.  */
+    uint32 suspend_count;
+} WASMThread;
+
+/**
+ * Allocate a WASM frame from the WASM stack.
+ *
+ * @param tlr the current thread
+ * @param size size of the WASM frame, it must be a multiple of 4
+ *
+ * @return the WASM frame if there is enough space in the stack area
+ * with a protection area, NULL otherwise
+ */
+static inline void*
+wasm_thread_alloc_wasm_frame(WASMThread *tlr, unsigned size)
+{
+    uint8 *addr = tlr->wasm_stack.top;
+
+    wasm_assert(!(size & 3));
+
+    /* The outs area size cannot be larger than the frame size, so
+       multiplying by 2 is enough. */
+    if (addr + size * 2 > tlr->wasm_stack.top_boundary) {
+        /* WASM stack overflow. */
+        /* When throwing SOE, the preserved space must be enough. */
+        /*wasm_assert(!tlr->throwing_soe);*/
+        return NULL;
+    }
+
+    tlr->wasm_stack.top += size;
+
+    return addr;
+}
+
+static inline void
+wasm_thread_free_wasm_frame(WASMThread *tlr, void *prev_top)
+{
+    wasm_assert((uint8 *)prev_top >= tlr->wasm_stack.bottom);
+    tlr->wasm_stack.top = (uint8 *)prev_top;
+}
+
+/**
+ * Get the current WASM stack top pointer.
+ *
+ * @param tlr the current thread
+ *
+ * @return the current WASM stack top pointer
+ */
+static inline void*
+wasm_thread_wasm_stack_top(WASMThread *tlr)
+{
+    return tlr->wasm_stack.top;
+}
+
+/**
+ * Set the current frame pointer.
+ *
+ * @param tlr the current thread
+ * @param frame the WASM frame to be set for the current thread
+ */
+static inline void
+wasm_thread_set_cur_frame(WASMThread *tlr, struct WASMInterpFrame *frame)
+{
+    tlr->cur_frame = frame;
+}
+
+/**
+ * Get the current frame pointer.
+ *
+ * @param tlr the current thread
+ *
+ * @return the current frame pointer
+ */
+static inline struct WASMInterpFrame*
+wasm_thread_get_cur_frame(WASMThread *tlr)
+{
+    return tlr->cur_frame;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of _WASM_RUNTIME_THREAD_H */
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/LICENSE 
b/scriptsrcs/wamr/core/shared-lib/coap/LICENSE
new file mode 100755
index 0000000..031fe36
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/LICENSE
@@ -0,0 +1,38 @@
+Contiki is licensed under the 3-clause BSD license. This license gives
+everyone the right to use and distribute the code, either in binary or
+source code format, as long as the copyright license is retained in
+the source code.
+
+The copyright for different parts of the code is held by different
+people and organizations, but the code is licensed under the same type
+of license. The license text is:
+
+  * Copyright (c) (Year), (Name of copyright holder)
+  * All rights reserved.
+  *
+  * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions
+  * are met:
+  * 1. Redistributions of source code must retain the above copyright
+  *    notice, this list of conditions and the following disclaimer.
+  * 2. Redistributions in binary form must reproduce the above copyright
+  *    notice, this list of conditions and the following disclaimer in the
+  *    documentation and/or other materials provided with the distribution.
+  *
+  * 3. Neither the name of the copyright holder nor the names of its
+  *    contributors may be used to endorse or promote products derived
+  *    from this software without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
+  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+      * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+  * OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/Makefile 
b/scriptsrcs/wamr/core/shared-lib/coap/Makefile
new file mode 100755
index 0000000..9135326
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/Makefile
@@ -0,0 +1,19 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+COAP_ROOT=${ZEPHYR_BASE}/subsys/aee/Beihai/runtime/utils/coap
+subdir-ccflags-y += -I${COAP_ROOT}/er-coap -I${COAP_ROOT}/extension
+
+obj-y += er-coap/
+obj-y += extension/
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/er-coap/Makefile 
b/scriptsrcs/wamr/core/shared-lib/coap/er-coap/Makefile
new file mode 100755
index 0000000..d2ba2cd
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/er-coap/Makefile
@@ -0,0 +1,15 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+obj-y += er-coap.o
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap-conf.h 
b/scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap-conf.h
new file mode 100755
index 0000000..8491fe7
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap-conf.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the Contiki operating system.
+ */
+
+/**
+ * \file
+ *      Collection of default configuration values.
+ * \author
+ *      Matthias Kovatsch <kovatsch@xxxxxxxxxxx>
+ */
+
+#ifndef ER_COAP_CONF_H_
+#define ER_COAP_CONF_H_
+
+/* Features that can be disabled to achieve smaller memory footprint */
+#define COAP_LINK_FORMAT_FILTERING     0
+#define COAP_PROXY_OPTION_PROCESSING   0
+
+/* Listening port for the CoAP REST Engine */
+#ifndef COAP_SERVER_PORT
+#define COAP_SERVER_PORT               COAP_DEFAULT_PORT
+#endif
+
+/* The number of concurrent messages that can be stored for retransmission in 
the transaction layer. */
+#ifndef COAP_MAX_OPEN_TRANSACTIONS
+#define COAP_MAX_OPEN_TRANSACTIONS     4
+#endif /* COAP_MAX_OPEN_TRANSACTIONS */
+
+/* Maximum number of failed request attempts before action */
+#ifndef COAP_MAX_ATTEMPTS
+#define COAP_MAX_ATTEMPTS              4
+#endif /* COAP_MAX_ATTEMPTS */
+
+/* Conservative size limit, as not all options have to be set at the same 
time. Check when Proxy-Uri option is used */
+#ifndef COAP_MAX_HEADER_SIZE    /*     Hdr                  CoF  If-Match      
   Obs Blo strings   */
+#define COAP_MAX_HEADER_SIZE           512
+//(4 + COAP_TOKEN_LEN + 3 + 1 + COAP_ETAG_LEN + 4 + 4 + 30)  /* 65 */
+#endif /* COAP_MAX_HEADER_SIZE */
+
+/* Number of observer slots (each takes abot xxx bytes) */
+#ifndef COAP_MAX_OBSERVERS
+#define COAP_MAX_OBSERVERS    COAP_MAX_OPEN_TRANSACTIONS - 1
+#endif /* COAP_MAX_OBSERVERS */
+
+/* Interval in notifies in which NON notifies are changed to CON notifies to 
check client. */
+#define COAP_OBSERVE_REFRESH_INTERVAL  20
+
+#endif /* ER_COAP_CONF_H_ */
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap-constants.h 
b/scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap-constants.h
new file mode 100755
index 0000000..8ed6d90
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap-constants.h
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the Contiki operating system.
+ */
+
+/**
+ * \file
+ *      Collection of constants specified in the CoAP standard.
+ * \author
+ *      Matthias Kovatsch <kovatsch@xxxxxxxxxxx>
+ */
+
+#ifndef ER_COAP_CONSTANTS_H_
+#define ER_COAP_CONSTANTS_H_
+
+#define COAP_DEFAULT_PORT                    5683
+
+#define COAP_DEFAULT_MAX_AGE                 60
+#define COAP_RESPONSE_TIMEOUT                3
+#define COAP_RESPONSE_RANDOM_FACTOR          1.5
+#define COAP_MAX_RETRANSMIT                  4
+
+#define COAP_HEADER_LEN                      4  /* | version:0x03 type:0x0C 
tkl:0xF0 | code | mid:0x00FF | mid:0xFF00 | */
+#define COAP_TOKEN_LEN                       8  /* The maximum number of bytes 
for the Token */
+#define COAP_ETAG_LEN                        8  /* The maximum number of bytes 
for the ETag */
+
+#define COAP_HEADER_VERSION_MASK             0xC0
+#define COAP_HEADER_VERSION_POSITION         6
+#define COAP_HEADER_TYPE_MASK                0x30
+#define COAP_HEADER_TYPE_POSITION            4
+#define COAP_HEADER_TOKEN_LEN_MASK           0x0F
+#define COAP_HEADER_TOKEN_LEN_POSITION       0
+
+#define COAP_HEADER_OPTION_DELTA_MASK        0xF0
+#define COAP_HEADER_OPTION_SHORT_LENGTH_MASK 0x0F
+
+/* CoAP message types */
+typedef enum {
+    COAP_TYPE_CON, /* confirmables */
+    COAP_TYPE_NON, /* non-confirmables */
+    COAP_TYPE_ACK, /* acknowledgements */
+    COAP_TYPE_RST /* reset */
+} coap_message_type_t;
+
+/* CoAP request method codes */
+typedef enum {
+    COAP_GET = 1, COAP_POST, COAP_PUT, COAP_DELETE
+} coap_method_t;
+
+/* CoAP response codes */
+typedef enum {
+    NO_ERROR = 0,
+
+    CREATED_2_01 = 65, /* CREATED */
+    DELETED_2_02 = 66, /* DELETED */
+    VALID_2_03 = 67, /* NOT_MODIFIED */
+    CHANGED_2_04 = 68, /* CHANGED */
+    CONTENT_2_05 = 69, /* OK */
+    CONTINUE_2_31 = 95, /* CONTINUE */
+
+    BAD_REQUEST_4_00 = 128, /* BAD_REQUEST */
+    UNAUTHORIZED_4_01 = 129, /* UNAUTHORIZED */
+    BAD_OPTION_4_02 = 130, /* BAD_OPTION */
+    FORBIDDEN_4_03 = 131, /* FORBIDDEN */
+    NOT_FOUND_4_04 = 132, /* NOT_FOUND */
+    METHOD_NOT_ALLOWED_4_05 = 133, /* METHOD_NOT_ALLOWED */
+    NOT_ACCEPTABLE_4_06 = 134, /* NOT_ACCEPTABLE */
+    PRECONDITION_FAILED_4_12 = 140, /* BAD_REQUEST */
+    REQUEST_ENTITY_TOO_LARGE_4_13 = 141, /* REQUEST_ENTITY_TOO_LARGE */
+    UNSUPPORTED_MEDIA_TYPE_4_15 = 143, /* UNSUPPORTED_MEDIA_TYPE */
+
+    INTERNAL_SERVER_ERROR_5_00 = 160, /* INTERNAL_SERVER_ERROR */
+    NOT_IMPLEMENTED_5_01 = 161, /* NOT_IMPLEMENTED */
+    BAD_GATEWAY_5_02 = 162, /* BAD_GATEWAY */
+    SERVICE_UNAVAILABLE_5_03 = 163, /* SERVICE_UNAVAILABLE */
+    GATEWAY_TIMEOUT_5_04 = 164, /* GATEWAY_TIMEOUT */
+    PROXYING_NOT_SUPPORTED_5_05 = 165, /* PROXYING_NOT_SUPPORTED */
+
+    /* Erbium errors */
+    MEMORY_ALLOCATION_ERROR = 192, PACKET_SERIALIZATION_ERROR,
+
+    /* Erbium hooks */
+    MANUAL_RESPONSE, PING_RESPONSE
+} coap_status_t;
+
+/* CoAP header option numbers */
+typedef enum {
+    COAP_OPTION_IF_MATCH = 1, /* 0-8 B */
+    COAP_OPTION_URI_HOST = 3, /* 1-255 B */
+    COAP_OPTION_ETAG = 4, /* 1-8 B */
+    COAP_OPTION_IF_NONE_MATCH = 5, /* 0 B */
+    COAP_OPTION_OBSERVE = 6, /* 0-3 B */
+    COAP_OPTION_URI_PORT = 7, /* 0-2 B */
+    COAP_OPTION_LOCATION_PATH = 8, /* 0-255 B */
+    COAP_OPTION_URI_PATH = 11, /* 0-255 B */
+    COAP_OPTION_CONTENT_FORMAT = 12, /* 0-2 B */
+    COAP_OPTION_MAX_AGE = 14, /* 0-4 B */
+    COAP_OPTION_URI_QUERY = 15, /* 0-255 B */
+    COAP_OPTION_ACCEPT = 17, /* 0-2 B */
+    COAP_OPTION_LOCATION_QUERY = 20, /* 0-255 B */
+    COAP_OPTION_BLOCK2 = 23, /* 1-3 B */
+    COAP_OPTION_BLOCK1 = 27, /* 1-3 B */
+    COAP_OPTION_SIZE2 = 28, /* 0-4 B */
+    COAP_OPTION_PROXY_URI = 35, /* 1-1034 B */
+    COAP_OPTION_PROXY_SCHEME = 39, /* 1-255 B */
+    COAP_OPTION_SIZE1 = 60, /* 0-4 B */
+} coap_option_t;
+
+/* CoAP Content-Formats */
+typedef enum {
+    TEXT_PLAIN = 0,
+    TEXT_XML = 1,
+    TEXT_CSV = 2,
+    TEXT_HTML = 3,
+    IMAGE_GIF = 21,
+    IMAGE_JPEG = 22,
+    IMAGE_PNG = 23,
+    IMAGE_TIFF = 24,
+    AUDIO_RAW = 25,
+    VIDEO_RAW = 26,
+    APPLICATION_LINK_FORMAT = 40,
+    APPLICATION_XML = 41,
+    APPLICATION_OCTET_STREAM = 42,
+    APPLICATION_RDF_XML = 43,
+    APPLICATION_SOAP_XML = 44,
+    APPLICATION_ATOM_XML = 45,
+    APPLICATION_XMPP_XML = 46,
+    APPLICATION_EXI = 47,
+    APPLICATION_FASTINFOSET = 48,
+    APPLICATION_SOAP_FASTINFOSET = 49,
+    APPLICATION_JSON = 50,
+    APPLICATION_X_OBIX_BINARY = 51
+} coap_content_format_t;
+
+#endif /* ER_COAP_CONSTANTS_H_ */
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap.c 
b/scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap.c
new file mode 100755
index 0000000..88e6183
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap.c
@@ -0,0 +1,1131 @@
+/*
+ * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the Contiki operating system.
+ */
+
+/**
+ * \file
+ *      An implementation of the Constrained Application Protocol (RFC).
+ * \author
+ *      Matthias Kovatsch <kovatsch@xxxxxxxxxxx>
+ */
+
+#include <string.h>
+#include <stdio.h>
+//#include "contiki.h"
+//#include "sys/cc.h"
+//#include "contiki-net.h"
+
+#include "bh_common.h"
+#include "er-coap.h"
+/*#include "er-coap-transactions.h"*/
+
+#define DEBUG 0
+#if DEBUG
+#include <stdio.h>
+#define PRINTF(...) printf(__VA_ARGS__)
+#define PRINT6ADDR(addr) 
PRINTF("[%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]",
 ((uint8_t *)addr)[0], ((uint8_t *)addr)[1], ((uint8_t *)addr)[2], ((uint8_t 
*)addr)[3], ((uint8_t *)addr)[4], ((uint8_t *)addr)[5], ((uint8_t *)addr)[6], 
((uint8_t *)addr)[7], ((uint8_t *)addr)[8], ((uint8_t *)addr)[9], ((uint8_t 
*)addr)[10], ((uint8_t *)addr)[11], ((uint8_t *)addr)[12], ((uint8_t 
*)addr)[13], ((uint8_t *)addr)[14], ((uint8_t *)addr)[15])
+#define PRINTLLADDR(lladdr) PRINTF("[%02x:%02x:%02x:%02x:%02x:%02x]", 
(lladdr)->addr[0], (lladdr)->addr[1], (lladdr)->addr[2], (lladdr)->addr[3], 
(lladdr)->addr[4], (lladdr)->addr[5])
+#else
+#define PRINTF(...)
+#define PRINT6ADDR(addr)
+#define PRINTLLADDR(addr)
+#endif
+
+/*---------------------------------------------------------------------------*/
+/*- Variables ---------------------------------------------------------------*/
+/*---------------------------------------------------------------------------*/
+static uint16_t current_mid = 0;
+
+coap_status_t erbium_status_code = NO_ERROR;
+char *coap_error_message = "";
+/*---------------------------------------------------------------------------*/
+/*- Local helper functions --------------------------------------------------*/
+/*---------------------------------------------------------------------------*/
+uint16_t coap_log_2(uint16_t value)
+{
+    uint16_t result = 0;
+
+    do {
+        value = value >> 1;
+        result++;
+    } while (value);
+
+    return result ? result - 1 : result;
+}
+/*---------------------------------------------------------------------------*/
+uint32_t coap_parse_int_option(uint8_t *bytes, size_t length)
+{
+    uint32_t var = 0;
+    int i = 0;
+
+    while (i < length) {
+        var <<= 8;
+        var |= bytes[i++];
+    }
+    return var;
+}
+/*---------------------------------------------------------------------------*/
+static uint8_t coap_option_nibble(unsigned int value)
+{
+    if (value < 13) {
+        return value;
+    } else if (value <= 0xFF + 13) {
+        return 13;
+    } else {
+        return 14;
+    }
+}
+/*---------------------------------------------------------------------------*/
+static size_t coap_set_option_header(unsigned int delta, size_t length,
+        uint8_t *buffer)
+{
+    size_t written = 0;
+
+    buffer[0] = coap_option_nibble(delta) << 4 | coap_option_nibble(length);
+
+    /* avoids code duplication without function overhead */
+    unsigned int *x = &delta;
+
+    do {
+        if (*x > 268) {
+            buffer[++written] = (*x - 269) >> 8;
+            buffer[++written] = (*x - 269);
+        } else if (*x > 12) {
+            buffer[++written] = (*x - 13);
+        }
+    } while (x != (unsigned int*) &length && (x = (unsigned int*) &length));
+
+    PRINTF("WRITTEN %u B opt header\n", 1 + written);
+
+    return ++written;
+}
+/*---------------------------------------------------------------------------*/
+size_t coap_serialize_int_option(unsigned int number,
+        unsigned int current_number, uint8_t *buffer, uint32_t value)
+{
+    size_t i = 0;
+
+    if (0xFF000000 & value) {
+        ++i;
+    }
+    if (0xFFFF0000 & value) {
+        ++i;
+    }
+    if (0xFFFFFF00 & value) {
+        ++i;
+    }
+    // if(0xFFFFFFFF & value) {
+    ++i;
+    // }
+    PRINTF("OPTION %u (delta %u, len %u)\n", number, number - current_number,
+            i);
+
+    i = coap_set_option_header(number - current_number, i, buffer);
+
+    if (0xFF000000 & value) {
+        buffer[i++] = (uint8_t)(value >> 24);
+    }
+    if (0xFFFF0000 & value) {
+        buffer[i++] = (uint8_t)(value >> 16);
+    }
+    if (0xFFFFFF00 & value) {
+        buffer[i++] = (uint8_t)(value >> 8);
+    }
+    // if(0xFFFFFFFF & value) {
+    buffer[i++] = (uint8_t)(value);
+    // }
+    return i;
+}
+/*---------------------------------------------------------------------------*/
+size_t coap_serialize_array_option(unsigned int number,
+        unsigned int current_number, uint8_t *buffer, uint8_t *array,
+        size_t length, char split_char)
+{
+    size_t i = 0;
+
+    PRINTF("ARRAY type %u, len %u, full [%.*s]\n", number, length, length,
+            array);
+
+    if (split_char != '\0') {
+        int j;
+        uint8_t *part_start = array;
+        uint8_t *part_end = NULL;
+        size_t temp_length;
+
+        for (j = 0; j <= length + 1; ++j) {
+            PRINTF("STEP %u/%u (%c)\n", j, length, array[j]);
+            if (array[j] == split_char || j == length) {
+                part_end = array + j;
+                temp_length = part_end - part_start;
+
+                i += coap_set_option_header(number - current_number,
+                        temp_length, &buffer[i]);
+                bh_memcpy_s(&buffer[i], temp_length, part_start, temp_length);
+                i += temp_length;
+
+                PRINTF("OPTION type %u, delta %u, len %u, part [%.*s]\n", 
number,
+                        number - current_number, i, temp_length, part_start);
+
+                ++j; /* skip the splitter */
+                current_number = number;
+                part_start = array + j;
+            }
+        } /* for */
+    } else {
+        i += coap_set_option_header(number - current_number, length,
+                &buffer[i]);
+        bh_memcpy_s(&buffer[i], length, array, length);
+        i += length;
+
+        PRINTF("OPTION type %u, delta %u, len %u\n", number,
+                number - current_number, length);
+    }
+
+    return i;
+}
+/*---------------------------------------------------------------------------*/
+void coap_merge_multi_option(char **dst, size_t *dst_len, uint8_t *option,
+        size_t option_len, char separator)
+{
+    /* merge multiple options */
+    if (*dst_len > 0) {
+        /* dst already contains an option: concatenate */
+        (*dst)[*dst_len] = separator;
+        *dst_len += 1;
+
+        /* memmove handles 2-byte option headers */
+        memmove((*dst) + (*dst_len), option, option_len);
+
+        *dst_len += option_len;
+    } else {
+        /* dst is empty: set to option */
+        *dst = (char *) option;
+        *dst_len = option_len;
+    }
+}
+/*---------------------------------------------------------------------------*/
+#if 0
+static int
+coap_get_variable(const char *buffer, size_t length, const char *name,
+        const char **output)
+{
+    const char *start = NULL;
+    const char *end = NULL;
+    const char *value_end = NULL;
+    size_t name_len = 0;
+
+    /*initialize the output buffer first */
+    *output = 0;
+
+    name_len = strlen(name);
+    end = buffer + length;
+
+    for(start = buffer; start + name_len < end; ++start) {
+        if((start == buffer || start[-1] == '&') && start[name_len] == '='
+                && strncmp(name, start, name_len) == 0) {
+
+            /* Point start to variable value */
+            start += name_len + 1;
+
+            /* Point end to the end of the value */
+            value_end = (const char *)memchr(start, '&', end - start);
+            if(value_end == NULL) {
+                value_end = end;
+            }
+            *output = start;
+
+            return value_end - start;
+        }
+    }
+    return 0;
+}
+#endif
+/*---------------------------------------------------------------------------*/
+/*- Internal API ------------------------------------------------------------*/
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------*/
+uint16_t coap_get_mid()
+{
+    return ++current_mid;
+}
+
+/*---------------------------------------------------------------------------*/
+void coap_init_message(void *packet, coap_message_type_t type, uint8_t code,
+        uint16_t mid)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    /* Important thing */
+    memset(coap_pkt, 0, sizeof(coap_packet_t));
+
+    coap_pkt->type = type;
+    coap_pkt->code = code;
+    coap_pkt->mid = mid;
+}
+#if 0
+/*---------------------------------------------------------------------------*/
+size_t
+coap_serialize_message(void *packet, uint8_t *buffer)
+{
+    coap_packet_t *const coap_pkt = (coap_packet_t *)packet;
+    uint8_t *option;
+    unsigned int current_number = 0;
+
+    /* Initialize */
+    coap_pkt->buffer = buffer;
+    coap_pkt->version = 1;
+
+    PRINTF("-Serializing MID %u to %p, ", coap_pkt->mid, coap_pkt->buffer);
+
+    /* set header fields */
+    coap_pkt->buffer[0] = 0x00;
+    coap_pkt->buffer[0] |= COAP_HEADER_VERSION_MASK
+    & (coap_pkt->version) << COAP_HEADER_VERSION_POSITION;
+    coap_pkt->buffer[0] |= COAP_HEADER_TYPE_MASK
+    & (coap_pkt->type) << COAP_HEADER_TYPE_POSITION;
+    coap_pkt->buffer[0] |= COAP_HEADER_TOKEN_LEN_MASK
+    & (coap_pkt->token_len) << COAP_HEADER_TOKEN_LEN_POSITION;
+    coap_pkt->buffer[1] = coap_pkt->code;
+    coap_pkt->buffer[2] = (uint8_t)((coap_pkt->mid) >> 8);
+    coap_pkt->buffer[3] = (uint8_t)(coap_pkt->mid);
+
+    /* empty packet, dont need to do more stuff */
+    if(!coap_pkt->code) {
+        PRINTF("-Done serializing empty message at %p-\n", option);
+        return 4;
+    }
+
+    /* set Token */
+    PRINTF("Token (len %u)", coap_pkt->token_len);
+    option = coap_pkt->buffer + COAP_HEADER_LEN;
+    for(current_number = 0; current_number < coap_pkt->token_len;
+            ++current_number) {
+        PRINTF(" %02X", coap_pkt->token[current_number]);
+        *option = coap_pkt->token[current_number];
+        ++option;
+    }
+    PRINTF("-\n");
+
+    /* Serialize options */
+    current_number = 0;
+
+    PRINTF("-Serializing options at %p-\n", option);
+
+    /* The options must be serialized in the order of their number */
+    COAP_SERIALIZE_BYTE_OPTION(COAP_OPTION_IF_MATCH, if_match, "If-Match");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_URI_HOST, uri_host, '\0',
+            "Uri-Host");
+    COAP_SERIALIZE_BYTE_OPTION(COAP_OPTION_ETAG, etag, "ETag");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_IF_NONE_MATCH,
+            content_format -
+            coap_pkt->
+            content_format /* hack to get a zero field */,
+            "If-None-Match");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_OBSERVE, observe, "Observe");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_URI_PORT, uri_port, "Uri-Port");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_LOCATION_PATH, location_path, '/',
+            "Location-Path");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_URI_PATH, uri_path, '/',
+            "Uri-Path");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_CONTENT_FORMAT, content_format,
+            "Content-Format");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_MAX_AGE, max_age, "Max-Age");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_URI_QUERY, uri_query, '&',
+            "Uri-Query");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_ACCEPT, accept, "Accept");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_LOCATION_QUERY, location_query,
+            '&', "Location-Query");
+    COAP_SERIALIZE_BLOCK_OPTION(COAP_OPTION_BLOCK2, block2, "Block2");
+    COAP_SERIALIZE_BLOCK_OPTION(COAP_OPTION_BLOCK1, block1, "Block1");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_SIZE2, size2, "Size2");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_PROXY_URI, proxy_uri, '\0',
+            "Proxy-Uri");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_PROXY_SCHEME, proxy_scheme, '\0',
+            "Proxy-Scheme");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_SIZE1, size1, "Size1");
+
+    PRINTF("-Done serializing at %p----\n", option);
+
+    /* Pack payload */
+    if((option - coap_pkt->buffer) <= COAP_MAX_HEADER_SIZE) {
+        /* Payload marker */
+        if(coap_pkt->payload_len) {
+            *option = 0xFF;
+            ++option;
+        }
+        memmove(option, coap_pkt->payload, coap_pkt->payload_len);
+    } else {
+        /* an error occurred: caller must check for !=0 */
+        coap_pkt->buffer = NULL;
+        coap_error_message = "Serialized header exceeds COAP_MAX_HEADER_SIZE";
+        return 0;
+    }
+
+    PRINTF("-Done %u B (header len %u, payload len %u)-\n",
+            coap_pkt->payload_len + option - buffer, option - buffer,
+            coap_pkt->payload_len);
+
+    PRINTF("Dump [0x%02X %02X %02X %02X  %02X %02X %02X %02X]\n",
+            coap_pkt->buffer[0],
+            coap_pkt->buffer[1],
+            coap_pkt->buffer[2],
+            coap_pkt->buffer[3],
+            coap_pkt->buffer[4],
+            coap_pkt->buffer[5], coap_pkt->buffer[6], coap_pkt->buffer[7]
+    );
+
+    return (option - buffer) + coap_pkt->payload_len; /* packet length */
+}
+
+/*---------------------------------------------------------------------------*/
+coap_status_t
+coap_parse_message(void *packet, uint8_t *data, uint16_t data_len)
+{
+    coap_packet_t *const coap_pkt = (coap_packet_t *)packet;
+
+    /* initialize packet */
+    memset(coap_pkt, 0, sizeof(coap_packet_t));
+
+    /* pointer to packet bytes */
+    coap_pkt->buffer = data;
+
+    /* parse header fields */
+    coap_pkt->version = (COAP_HEADER_VERSION_MASK & coap_pkt->buffer[0])
+    >> COAP_HEADER_VERSION_POSITION;
+    coap_pkt->type = (COAP_HEADER_TYPE_MASK & coap_pkt->buffer[0])
+    >> COAP_HEADER_TYPE_POSITION;
+    coap_pkt->token_len =
+    MIN(COAP_TOKEN_LEN,
+            (COAP_HEADER_TOKEN_LEN_MASK & coap_pkt->
+                    buffer[0]) >> COAP_HEADER_TOKEN_LEN_POSITION);
+    coap_pkt->code = coap_pkt->buffer[1];
+    coap_pkt->mid = coap_pkt->buffer[2] << 8 | coap_pkt->buffer[3];
+
+    if(coap_pkt->version != 1) {
+        coap_error_message = "CoAP version must be 1";
+        return BAD_REQUEST_4_00;
+    }
+
+    uint8_t *current_option = data + COAP_HEADER_LEN;
+
+    bh_memcpy_s(coap_pkt->token, COAP_TOKEN_LEN, current_option, 
coap_pkt->token_len);
+    PRINTF("Token (len %u) [0x%02X%02X%02X%02X%02X%02X%02X%02X]\n",
+            coap_pkt->token_len, coap_pkt->token[0], coap_pkt->token[1],
+            coap_pkt->token[2], coap_pkt->token[3], coap_pkt->token[4],
+            coap_pkt->token[5], coap_pkt->token[6], coap_pkt->token[7]
+    ); /*FIXME always prints 8 bytes */
+
+    /* parse options */
+    memset(coap_pkt->options, 0, sizeof(coap_pkt->options));
+    current_option += coap_pkt->token_len;
+
+    unsigned int option_number = 0;
+    unsigned int option_delta = 0;
+    size_t option_length = 0;
+
+    while(current_option < data + data_len) {
+        /* payload marker 0xFF, currently only checking for 0xF* because rest 
is reserved */
+        if((current_option[0] & 0xF0) == 0xF0) {
+            coap_pkt->payload = ++current_option;
+            coap_pkt->payload_len = data_len - (coap_pkt->payload - data);
+
+            /* also for receiving, the Erbium upper bound is 
REST_MAX_CHUNK_SIZE */
+            if(coap_pkt->payload_len > REST_MAX_CHUNK_SIZE) {
+                coap_pkt->payload_len = REST_MAX_CHUNK_SIZE;
+                /* null-terminate payload */
+            }
+            coap_pkt->payload[coap_pkt->payload_len] = '\0';
+
+            break;
+        }
+
+        option_delta = current_option[0] >> 4;
+        option_length = current_option[0] & 0x0F;
+        ++current_option;
+
+        /* avoids code duplication without function overhead */
+        unsigned int *x = &option_delta;
+
+        do {
+            if(*x == 13) {
+                *x += current_option[0];
+                ++current_option;
+            } else if(*x == 14) {
+                *x += 255;
+                *x += current_option[0] << 8;
+                ++current_option;
+                *x += current_option[0];
+                ++current_option;
+            }
+        }while(x != (unsigned int*)&option_length && (x = (unsigned 
int*)&option_length));
+
+        option_number += option_delta;
+
+        PRINTF("OPTION %u (delta %u, len %u): ", option_number, option_delta,
+                option_length);
+
+        SET_OPTION(coap_pkt, option_number);
+
+        switch(option_number) {
+            case COAP_OPTION_CONTENT_FORMAT:
+            coap_pkt->content_format = coap_parse_int_option(current_option,
+                    option_length);
+            PRINTF("Content-Format [%u]\n", coap_pkt->content_format);
+            break;
+            case COAP_OPTION_MAX_AGE:
+            coap_pkt->max_age = coap_parse_int_option(current_option,
+                    option_length);
+            PRINTF("Max-Age [%lu]\n", coap_pkt->max_age);
+            break;
+            case COAP_OPTION_ETAG:
+            coap_pkt->etag_len = MIN(COAP_ETAG_LEN, option_length);
+            bh_memcpy_s(coap_pkt->etag, COAP_ETAG_LEN, current_option, 
coap_pkt->etag_len);
+            PRINTF("ETag %u [0x%02X%02X%02X%02X%02X%02X%02X%02X]\n",
+                    coap_pkt->etag_len, coap_pkt->etag[0], coap_pkt->etag[1],
+                    coap_pkt->etag[2], coap_pkt->etag[3], coap_pkt->etag[4],
+                    coap_pkt->etag[5], coap_pkt->etag[6], coap_pkt->etag[7]
+            ); /*FIXME always prints 8 bytes */
+            break;
+            case COAP_OPTION_ACCEPT:
+            coap_pkt->accept = coap_parse_int_option(current_option, 
option_length);
+            PRINTF("Accept [%u]\n", coap_pkt->accept);
+            break;
+            case COAP_OPTION_IF_MATCH:
+            /* TODO support multiple ETags */
+            coap_pkt->if_match_len = MIN(COAP_ETAG_LEN, option_length);
+            bh_memcpy_s(coap_pkt->if_match, COAP_ETAG_LEN, current_option, 
coap_pkt->if_match_len);
+            PRINTF("If-Match %u [0x%02X%02X%02X%02X%02X%02X%02X%02X]\n",
+                    coap_pkt->if_match_len, coap_pkt->if_match[0],
+                    coap_pkt->if_match[1], coap_pkt->if_match[2],
+                    coap_pkt->if_match[3], coap_pkt->if_match[4],
+                    coap_pkt->if_match[5], coap_pkt->if_match[6],
+                    coap_pkt->if_match[7]
+            ); /* FIXME always prints 8 bytes */
+            break;
+            case COAP_OPTION_IF_NONE_MATCH:
+            coap_pkt->if_none_match = 1;
+            PRINTF("If-None-Match\n");
+            break;
+
+            case COAP_OPTION_PROXY_URI:
+#if COAP_PROXY_OPTION_PROCESSING
+            coap_pkt->proxy_uri = (char *)current_option;
+            coap_pkt->proxy_uri_len = option_length;
+#endif
+            PRINTF("Proxy-Uri NOT IMPLEMENTED [%.*s]\n", 
coap_pkt->proxy_uri_len,
+                    coap_pkt->proxy_uri);
+            coap_error_message = "This is a constrained server (Contiki)";
+            return PROXYING_NOT_SUPPORTED_5_05;
+            break;
+            case COAP_OPTION_PROXY_SCHEME:
+#if COAP_PROXY_OPTION_PROCESSING
+            coap_pkt->proxy_scheme = (char *)current_option;
+            coap_pkt->proxy_scheme_len = option_length;
+#endif
+            PRINTF("Proxy-Scheme NOT IMPLEMENTED [%.*s]\n",
+                    coap_pkt->proxy_scheme_len, coap_pkt->proxy_scheme);
+            coap_error_message = "This is a constrained server (Contiki)";
+            return PROXYING_NOT_SUPPORTED_5_05;
+            break;
+
+            case COAP_OPTION_URI_HOST:
+            coap_pkt->uri_host = (char *)current_option;
+            coap_pkt->uri_host_len = option_length;
+            PRINTF("Uri-Host [%.*s]\n", coap_pkt->uri_host_len, 
coap_pkt->uri_host);
+            break;
+            case COAP_OPTION_URI_PORT:
+            coap_pkt->uri_port = coap_parse_int_option(current_option,
+                    option_length);
+            PRINTF("Uri-Port [%u]\n", coap_pkt->uri_port);
+            break;
+            case COAP_OPTION_URI_PATH:
+            /* coap_merge_multi_option() operates in-place on the IPBUF, but 
final packet field should be const string -> cast to string */
+            coap_merge_multi_option((char **)&(coap_pkt->uri_path),
+                    &(coap_pkt->uri_path_len), current_option,
+                    option_length, '/');
+            PRINTF("Uri-Path [%.*s]\n", coap_pkt->uri_path_len, 
coap_pkt->uri_path);
+            break;
+            case COAP_OPTION_URI_QUERY:
+            /* coap_merge_multi_option() operates in-place on the IPBUF, but 
final packet field should be const string -> cast to string */
+            coap_merge_multi_option((char **)&(coap_pkt->uri_query),
+                    &(coap_pkt->uri_query_len), current_option,
+                    option_length, '&');
+            PRINTF("Uri-Query [%.*s]\n", coap_pkt->uri_query_len,
+                    coap_pkt->uri_query);
+            break;
+
+            case COAP_OPTION_LOCATION_PATH:
+            /* coap_merge_multi_option() operates in-place on the IPBUF, but 
final packet field should be const string -> cast to string */
+            coap_merge_multi_option((char **)&(coap_pkt->location_path),
+                    &(coap_pkt->location_path_len), current_option,
+                    option_length, '/');
+            PRINTF("Location-Path [%.*s]\n", coap_pkt->location_path_len,
+                    coap_pkt->location_path);
+            break;
+            case COAP_OPTION_LOCATION_QUERY:
+            /* coap_merge_multi_option() operates in-place on the IPBUF, but 
final packet field should be const string -> cast to string */
+            coap_merge_multi_option((char **)&(coap_pkt->location_query),
+                    &(coap_pkt->location_query_len), current_option,
+                    option_length, '&');
+            PRINTF("Location-Query [%.*s]\n", coap_pkt->location_query_len,
+                    coap_pkt->location_query);
+            break;
+
+            case COAP_OPTION_OBSERVE:
+            coap_pkt->observe = coap_parse_int_option(current_option,
+                    option_length);
+            PRINTF("Observe [%lu]\n", coap_pkt->observe);
+            break;
+            case COAP_OPTION_BLOCK2:
+            coap_pkt->block2_num = coap_parse_int_option(current_option,
+                    option_length);
+            coap_pkt->block2_more = (coap_pkt->block2_num & 0x08) >> 3;
+            coap_pkt->block2_size = 16 << (coap_pkt->block2_num & 0x07);
+            coap_pkt->block2_offset = (coap_pkt->block2_num & ~0x0000000F)
+            << (coap_pkt->block2_num & 0x07);
+            coap_pkt->block2_num >>= 4;
+            PRINTF("Block2 [%lu%s (%u B/blk)]\n", coap_pkt->block2_num,
+                    coap_pkt->block2_more ? "+" : "", coap_pkt->block2_size);
+            break;
+            case COAP_OPTION_BLOCK1:
+            coap_pkt->block1_num = coap_parse_int_option(current_option,
+                    option_length);
+            coap_pkt->block1_more = (coap_pkt->block1_num & 0x08) >> 3;
+            coap_pkt->block1_size = 16 << (coap_pkt->block1_num & 0x07);
+            coap_pkt->block1_offset = (coap_pkt->block1_num & ~0x0000000F)
+            << (coap_pkt->block1_num & 0x07);
+            coap_pkt->block1_num >>= 4;
+            PRINTF("Block1 [%lu%s (%u B/blk)]\n", coap_pkt->block1_num,
+                    coap_pkt->block1_more ? "+" : "", coap_pkt->block1_size);
+            break;
+            case COAP_OPTION_SIZE2:
+            coap_pkt->size2 = coap_parse_int_option(current_option, 
option_length);
+            PRINTF("Size2 [%lu]\n", coap_pkt->size2);
+            break;
+            case COAP_OPTION_SIZE1:
+            coap_pkt->size1 = coap_parse_int_option(current_option, 
option_length);
+            PRINTF("Size1 [%lu]\n", coap_pkt->size1);
+            break;
+            default:
+            PRINTF("unknown (%u)\n", option_number);
+            /* check if critical (odd) */
+            if(option_number & 1) {
+                coap_error_message = "Unsupported critical option";
+                return BAD_OPTION_4_02;
+            }
+        }
+
+        current_option += option_length;
+    } /* for */
+    PRINTF("-Done parsing-------\n");
+
+    return NO_ERROR;
+}
+/*---------------------------------------------------------------------------*/
+/*- REST Engine API ---------------------------------------------------------*/
+/*---------------------------------------------------------------------------*/
+int
+coap_get_query_variable(void *packet, const char *name, const char **output)
+{
+    coap_packet_t *const coap_pkt = (coap_packet_t *)packet;
+
+    if(IS_OPTION(coap_pkt, COAP_OPTION_URI_QUERY)) {
+        return coap_get_variable(coap_pkt->uri_query, coap_pkt->uri_query_len,
+                name, output);
+    }
+    return 0;
+}
+int
+coap_get_post_variable(void *packet, const char *name, const char **output)
+{
+    coap_packet_t *const coap_pkt = (coap_packet_t *)packet;
+
+    if(coap_pkt->payload_len) {
+        return coap_get_variable((const char *)coap_pkt->payload,
+                coap_pkt->payload_len, name, output);
+    }
+    return 0;
+}
+#endif
+/*---------------------------------------------------------------------------*/
+int coap_set_status_code(void *packet, unsigned int code)
+{
+    if (code <= 0xFF) {
+        ((coap_packet_t *) packet)->code = (uint8_t) code;
+        return 1;
+    } else {
+        return 0;
+    }
+}
+/*---------------------------------------------------------------------------*/
+int coap_set_token(void *packet, const uint8_t *token, size_t token_len)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    coap_pkt->token_len = MIN(COAP_TOKEN_LEN, token_len);
+    bh_memcpy_s(coap_pkt->token, COAP_TOKEN_LEN, token, coap_pkt->token_len);
+
+    return coap_pkt->token_len;
+}
+/*---------------------------------------------------------------------------*/
+/*- CoAP REST Implementation API --------------------------------------------*/
+/*---------------------------------------------------------------------------*/
+int coap_get_header_content_format(void *packet, unsigned int *format)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_CONTENT_FORMAT)) {
+        return 0;
+    }
+    *format = coap_pkt->content_format;
+    return 1;
+}
+int coap_set_header_content_format(void *packet, unsigned int format)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    coap_pkt->content_format = (coap_content_format_t) format;
+    SET_OPTION(coap_pkt, COAP_OPTION_CONTENT_FORMAT);
+    return 1;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_accept(void *packet, unsigned int *accept)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_ACCEPT)) {
+        return 0;
+    }
+    *accept = coap_pkt->accept;
+    return 1;
+}
+int coap_set_header_accept(void *packet, unsigned int accept)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    coap_pkt->accept = (coap_content_format_t) accept;
+    SET_OPTION(coap_pkt, COAP_OPTION_ACCEPT);
+    return 1;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_max_age(void *packet, uint32_t *age)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_MAX_AGE)) {
+        *age = COAP_DEFAULT_MAX_AGE;
+    } else {
+        *age = coap_pkt->max_age;
+    }
+    return 1;
+}
+int coap_set_header_max_age(void *packet, uint32_t age)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    coap_pkt->max_age = age;
+    SET_OPTION(coap_pkt, COAP_OPTION_MAX_AGE);
+    return 1;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_etag(void *packet, const uint8_t **etag)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_ETAG)) {
+        return 0;
+    }
+    *etag = coap_pkt->etag;
+    return coap_pkt->etag_len;
+}
+int coap_set_header_etag(void *packet, const uint8_t *etag, size_t etag_len)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    coap_pkt->etag_len = MIN(COAP_ETAG_LEN, etag_len);
+    bh_memcpy_s(coap_pkt->etag, COAP_ETAG_LEN, etag, coap_pkt->etag_len);
+
+    SET_OPTION(coap_pkt, COAP_OPTION_ETAG);
+    return coap_pkt->etag_len;
+}
+/*---------------------------------------------------------------------------*/
+/*FIXME support multiple ETags */
+int coap_get_header_if_match(void *packet, const uint8_t **etag)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_IF_MATCH)) {
+        return 0;
+    }
+    *etag = coap_pkt->if_match;
+    return coap_pkt->if_match_len;
+}
+int coap_set_header_if_match(void *packet, const uint8_t *etag, size_t 
etag_len)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    coap_pkt->if_match_len = MIN(COAP_ETAG_LEN, etag_len);
+    bh_memcpy_s(coap_pkt->if_match, COAP_ETAG_LEN, etag,
+            coap_pkt->if_match_len);
+
+    SET_OPTION(coap_pkt, COAP_OPTION_IF_MATCH);
+    return coap_pkt->if_match_len;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_if_none_match(void *packet)
+{
+    return IS_OPTION((coap_packet_t *)packet,
+            COAP_OPTION_IF_NONE_MATCH) ? 1 : 0;
+}
+int coap_set_header_if_none_match(void *packet)
+{
+    SET_OPTION((coap_packet_t * )packet, COAP_OPTION_IF_NONE_MATCH);
+    return 1;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_proxy_uri(void *packet, const char **uri)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_PROXY_URI)) {
+        return 0;
+    }
+    *uri = coap_pkt->proxy_uri;
+    return coap_pkt->proxy_uri_len;
+}
+int coap_set_header_proxy_uri(void *packet, const char *uri)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    /*TODO Provide alternative that sets Proxy-Scheme and Uri-* options and 
provide er-coap-conf define */
+
+    coap_pkt->proxy_uri = uri;
+    coap_pkt->proxy_uri_len = strlen(uri);
+
+    SET_OPTION(coap_pkt, COAP_OPTION_PROXY_URI);
+    return coap_pkt->proxy_uri_len;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_uri_host(void *packet, const char **host)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_URI_HOST)) {
+        return 0;
+    }
+    *host = coap_pkt->uri_host;
+    return coap_pkt->uri_host_len;
+}
+int coap_set_header_uri_host(void *packet, const char *host)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    coap_pkt->uri_host = host;
+    coap_pkt->uri_host_len = strlen(host);
+
+    SET_OPTION(coap_pkt, COAP_OPTION_URI_HOST);
+    return coap_pkt->uri_host_len;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_uri_path(void *packet, const char **path)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_URI_PATH)) {
+        return 0;
+    }
+    *path = coap_pkt->uri_path;
+    return coap_pkt->uri_path_len;
+}
+int coap_set_header_uri_path(void *packet, const char *path)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+//  while(path[0] == '/')
+//    ++path;
+
+    coap_pkt->uri_path = path;
+    coap_pkt->uri_path_len = strlen(path);
+
+    SET_OPTION(coap_pkt, COAP_OPTION_URI_PATH);
+    return coap_pkt->uri_path_len;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_uri_query(void *packet, const char **query)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_URI_QUERY)) {
+        return 0;
+    }
+    *query = coap_pkt->uri_query;
+    return coap_pkt->uri_query_len;
+}
+int coap_set_header_uri_query(void *packet, const char *query)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    while (query[0] == '?')
+        ++query;
+
+    coap_pkt->uri_query = query;
+    coap_pkt->uri_query_len = strlen(query);
+
+    SET_OPTION(coap_pkt, COAP_OPTION_URI_QUERY);
+    return coap_pkt->uri_query_len;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_location_path(void *packet, const char **path)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_LOCATION_PATH)) {
+        return 0;
+    }
+    *path = coap_pkt->location_path;
+    return coap_pkt->location_path_len;
+}
+int coap_set_header_location_path(void *packet, const char *path)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    char *query;
+
+    while (path[0] == '/')
+        ++path;
+
+    if ((query = strchr(path, '?'))) {
+        coap_set_header_location_query(packet, query + 1);
+        coap_pkt->location_path_len = query - path;
+    } else {
+        coap_pkt->location_path_len = strlen(path);
+    }
+    coap_pkt->location_path = path;
+
+    if (coap_pkt->location_path_len > 0) {
+        SET_OPTION(coap_pkt, COAP_OPTION_LOCATION_PATH);
+    }
+    return coap_pkt->location_path_len;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_location_query(void *packet, const char **query)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_LOCATION_QUERY)) {
+        return 0;
+    }
+    *query = coap_pkt->location_query;
+    return coap_pkt->location_query_len;
+}
+int coap_set_header_location_query(void *packet, const char *query)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    while (query[0] == '?')
+        ++query;
+
+    coap_pkt->location_query = query;
+    coap_pkt->location_query_len = strlen(query);
+
+    SET_OPTION(coap_pkt, COAP_OPTION_LOCATION_QUERY);
+    return coap_pkt->location_query_len;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_observe(void *packet, uint32_t *observe)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_OBSERVE)) {
+        return 0;
+    }
+    *observe = coap_pkt->observe;
+    return 1;
+}
+int coap_set_header_observe(void *packet, uint32_t observe)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    coap_pkt->observe = observe;
+    SET_OPTION(coap_pkt, COAP_OPTION_OBSERVE);
+    return 1;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_block2(void *packet, uint32_t *num, uint8_t *more,
+        uint32_t *size, uint32_t *offset)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_BLOCK2)) {
+        return 0;
+    }
+    /* pointers may be NULL to get only specific block parameters */
+    if (num != NULL) {
+        *num = coap_pkt->block2_num;
+    }
+    if (more != NULL) {
+        *more = coap_pkt->block2_more;
+    }
+    if (size != NULL) {
+        *size = coap_pkt->block2_size;
+    }
+    if (offset != NULL) {
+        *offset = coap_pkt->block2_offset;
+    }
+    return 1;
+}
+int coap_set_header_block2(void *packet, uint32_t num, uint8_t more,
+        uint32_t size)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (size < 16) {
+        return 0;
+    }
+    if (size > 2048) {
+        return 0;
+    }
+    if (num > 0x0FFFFF) {
+        return 0;
+    }
+    coap_pkt->block2_num = num;
+    coap_pkt->block2_more = more ? 1 : 0;
+    coap_pkt->block2_size = size;
+
+    SET_OPTION(coap_pkt, COAP_OPTION_BLOCK2);
+    return 1;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_block1(void *packet, uint32_t *num, uint8_t *more,
+        uint16_t *size, uint32_t *offset)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_BLOCK1)) {
+        return 0;
+    }
+    /* pointers may be NULL to get only specific block parameters */
+    if (num != NULL) {
+        *num = coap_pkt->block1_num;
+    }
+    if (more != NULL) {
+        *more = coap_pkt->block1_more;
+    }
+    if (size != NULL) {
+        *size = coap_pkt->block1_size;
+    }
+    if (offset != NULL) {
+        *offset = coap_pkt->block1_offset;
+    }
+    return 1;
+}
+int coap_set_header_block1(void *packet, uint32_t num, uint8_t more,
+        uint16_t size)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (size < 16) {
+        return 0;
+    }
+    if (size > 2048) {
+        return 0;
+    }
+    if (num > 0x0FFFFF) {
+        return 0;
+    }
+    coap_pkt->block1_num = num;
+    coap_pkt->block1_more = more;
+    coap_pkt->block1_size = size;
+
+    SET_OPTION(coap_pkt, COAP_OPTION_BLOCK1);
+    return 1;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_size2(void *packet, uint32_t *size)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_SIZE2)) {
+        return 0;
+    }
+    *size = coap_pkt->size2;
+    return 1;
+}
+int coap_set_header_size2(void *packet, uint32_t size)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    coap_pkt->size2 = size;
+    SET_OPTION(coap_pkt, COAP_OPTION_SIZE2);
+    return 1;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_header_size1(void *packet, uint32_t *size)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (!IS_OPTION(coap_pkt, COAP_OPTION_SIZE1)) {
+        return 0;
+    }
+    *size = coap_pkt->size1;
+    return 1;
+}
+int coap_set_header_size1(void *packet, uint32_t size)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    coap_pkt->size1 = size;
+    SET_OPTION(coap_pkt, COAP_OPTION_SIZE1);
+    return 1;
+}
+/*---------------------------------------------------------------------------*/
+int coap_get_payload(void *packet, const uint8_t **payload)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    if (coap_pkt->payload) {
+        *payload = coap_pkt->payload;
+        return coap_pkt->payload_len;
+    } else {
+        *payload = NULL;
+        return 0;
+    }
+}
+int coap_set_payload(void *packet, const void *payload, size_t length)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    coap_pkt->payload = (uint8_t *) payload;
+    coap_pkt->payload_len = MIN(REST_MAX_CHUNK_SIZE, length);
+
+    return coap_pkt->payload_len;
+}
+/*---------------------------------------------------------------------------*/
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap.h 
b/scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap.h
new file mode 100755
index 0000000..7c15465
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/er-coap/er-coap.h
@@ -0,0 +1,370 @@
+/*
+ * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the Contiki operating system.
+ */
+
+/**
+ * \file
+ *      An implementation of the Constrained Application Protocol (RFC).
+ * \author
+ *      Matthias Kovatsch <kovatsch@xxxxxxxxxxx>
+ */
+
+#ifndef ER_COAP_H_
+#define ER_COAP_H_
+
+#include "../extension/coap_platforms.h"
+#include <stddef.h> /* for size_t */
+#include <stdint.h>
+//#include "contiki-net.h"
+#include "er-coap-constants.h"
+#include "er-coap-conf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* sanity check for configured values */
+#define COAP_MAX_PACKET_SIZE  (COAP_MAX_HEADER_SIZE + REST_MAX_CHUNK_SIZE)
+/*#if COAP_MAX_PACKET_SIZE > (UIP_BUFSIZE - UIP_IPH_LEN - UIP_UDPH_LEN)
+ #error "UIP_CONF_BUFFER_SIZE too small for REST_MAX_CHUNK_SIZE"
+ #endif
+ */
+
+/* ------------------------------------------------------ */
+/* ------  section added by the coap request  ---------   */
+/* ------------------------------------------------------ */
+
+//typedef int (*restful_response_handler)(void *response,void *data);
+#define RX_TIMEOUT (-1)
+typedef int (*Tx_Data)(void * coap_ctx, const uip_ipaddr_t *dst_addr, void 
*buf, int len);
+typedef int (*Rx_Data) (void * coap_ctx, void *buf, int len, int timeout);
+typedef int (*Request_Handler) (void * coap_ctx, void *);
+
+typedef int (*CoAP_Res_Handler) (void * request, void * response, char 
**out_payload, int * payload_len);
+
+typedef struct _coap_resource_handler
+{
+       struct _coap_resource_handler * next;
+       char * url;
+       CoAP_Res_Handler get_handler;
+       CoAP_Res_Handler put_handler;
+       CoAP_Res_Handler post_handler;
+       CoAP_Res_Handler other_handler;  // create | delete
+}coap_resource_handler_t;
+
+
+
+typedef struct res_block_state
+{
+       struct res_block_state * next;
+       char * url;
+       void * buffer;
+       int buffer_size;
+       uint32_t block_num;
+       uint16_t block_size;
+                   uint16_t content_fmt;
+       uint32_t last_access;
+       uint8_t  is_get;
+} res_block_state_t;
+
+
+typedef struct peer_block_state
+{
+       struct peer_block_state * next;
+       struct net_addr_coap peer_addr;
+       res_block_state_t * list;
+}peer_block_state_t;
+
+
+typedef struct coap_context {
+  uint8_t  * buf;
+  uint32_t buf_len;            // the data length
+  uint32_t buf_size;  // the malloced buffer size
+
+  struct net_addr_coap my_addr;
+
+  // the address associated with current buffer
+  struct net_addr_coap src_addr;
+
+  uint8_t status;
+  uint8_t is_used;
+  uint8_t response_on_not_found;
+  uint16_t default_retrans_cnt;
+  uint32_t default_retrans_ms;
+
+  Tx_Data tx_data;
+  Rx_Data rx_data;
+
+  int socket;
+  char * user_data;
+
+  peer_block_state_t * blockwise_list;
+  coap_resource_handler_t * resource_handlers;
+
+  void * transactions;
+  void * transaction_lock;
+  uint32_t last_checktime;
+
+  void * request_handler;
+
+#ifdef WITH_DTLS
+struct dtls_context_t *dtls_context;
+dtls_handler_t dtls_handler;
+struct process *process;
+#endif /* WITH_DTLS */
+
+} coap_context_t;
+
+int add_resource_handler(coap_context_t * coap_ctx, coap_resource_handler_t * 
handler);
+
+
+// coap_context_t * coap_context_new(uip_ipaddr_t *my_addr, uint16_t my_port); 
//CANNOTBUILD
+void coap_context_close(coap_context_t *coap_ctx);
+void coap_ctx_send(coap_context_t *coap_ctx, uint8_t *data,
+                  uint16_t length);
+
+/* ---------------- end of section ------------------ */
+
+
+/* use Erbium CoAP for the REST Engine. Must come before include of 
rest-engine.h. */
+//#define REST coap_rest_implementation
+//#include "rest-engine.h"
+
+/* REST_MAX_CHUNK_SIZE can be different from 2^x so we need to get next lower 
2^x for COAP_MAX_BLOCK_SIZE */
+#ifndef COAP_MAX_BLOCK_SIZE
+#define COAP_MAX_BLOCK_SIZE           (REST_MAX_CHUNK_SIZE < 32 ? 16 : \
+                                       (REST_MAX_CHUNK_SIZE < 64 ? 32 : \
+                                        (REST_MAX_CHUNK_SIZE < 128 ? 64 : \
+                                         (REST_MAX_CHUNK_SIZE < 256 ? 128 : \
+                                          (REST_MAX_CHUNK_SIZE < 512 ? 256 : \
+                                          (REST_MAX_CHUNK_SIZE < 1024 ? 512 : \
+                                          (REST_MAX_CHUNK_SIZE < 2048 ? 1024 : 
2048)))))))
+#endif /* COAP_MAX_BLOCK_SIZE */
+
+/* direct access into the buffer */
+#define UIP_IP_BUF   ((struct uip_ip_hdr *)&uip_buf[UIP_LLH_LEN])
+#ifdef NETSTACK_CONF_WITH_IPV6
+#define UIP_UDP_BUF  ((struct uip_udp_hdr *)&uip_buf[uip_l2_l3_hdr_len])
+#else
+#define UIP_UDP_BUF  ((struct uip_udp_hdr *)&uip_buf[UIP_LLH_LEN + 
UIP_IPH_LEN])
+#endif
+
+/* bitmap for set options */
+enum { OPTION_MAP_SIZE = sizeof(uint8_t) * 8 };
+
+#define SET_OPTION(packet, opt) ((packet)->options[opt / OPTION_MAP_SIZE] |= 1 
<< (opt % OPTION_MAP_SIZE))
+#define IS_OPTION(packet, opt) ((packet)->options[opt / OPTION_MAP_SIZE] & (1 
<< (opt % OPTION_MAP_SIZE)))
+
+/* parsed message struct */
+typedef struct {
+  uint8_t *buffer; /* pointer to CoAP header / incoming packet buffer / memory 
to serialize packet */
+
+  uint8_t version;
+  coap_message_type_t type;
+  uint8_t code;
+  uint16_t mid;
+
+  uint8_t token_len;
+  uint8_t token[COAP_TOKEN_LEN];
+
+  uint8_t options[COAP_OPTION_SIZE1 / OPTION_MAP_SIZE + 1]; /* bitmap to check 
if option is set */
+
+  coap_content_format_t content_format; /* parse options once and store; 
allows setting options in random order  */
+  uint32_t max_age;
+  uint8_t etag_len;
+  uint8_t etag[COAP_ETAG_LEN];
+  size_t proxy_uri_len;
+  const char *proxy_uri;
+  size_t proxy_scheme_len;
+  const char *proxy_scheme;
+  size_t uri_host_len;
+  const char *uri_host;
+  size_t location_path_len;
+  const char *location_path;
+  uint16_t uri_port;
+  size_t location_query_len;
+  const char *location_query;
+  size_t uri_path_len;
+  const char *uri_path;
+  int32_t observe;
+  coap_content_format_t accept;
+  uint8_t if_match_len;
+  uint8_t if_match[COAP_ETAG_LEN];
+  uint32_t block2_num;
+  uint8_t block2_more;
+  uint32_t block2_size;
+  uint32_t block2_offset;
+  uint32_t block1_num;
+  uint8_t block1_more;
+  uint32_t block1_size;
+  uint32_t block1_offset;
+  uint32_t size2;
+  uint32_t size1;
+  size_t uri_query_len;
+  const char *uri_query;
+  uint8_t if_none_match;
+
+  uint32_t payload_len;
+  uint8_t *payload;
+} coap_packet_t;
+
+/* option format serialization */
+#define COAP_SERIALIZE_INT_OPTION(number, field, text) \
+  if(IS_OPTION(coap_pkt, number)) { \
+    PRINTF(text " [%u]\n", coap_pkt->field); \
+    option += coap_serialize_int_option(number, current_number, option, 
coap_pkt->field); \
+    current_number = number; \
+  }
+#define COAP_SERIALIZE_BYTE_OPTION(number, field, text) \
+  if(IS_OPTION(coap_pkt, number)) { \
+    PRINTF(text " %u [0x%02X%02X%02X%02X%02X%02X%02X%02X]\n", 
coap_pkt->field##_len, \
+           coap_pkt->field[0], \
+           coap_pkt->field[1], \
+           coap_pkt->field[2], \
+           coap_pkt->field[3], \
+           coap_pkt->field[4], \
+           coap_pkt->field[5], \
+           coap_pkt->field[6], \
+           coap_pkt->field[7] \
+           ); /* FIXME always prints 8 bytes */ \
+    option += coap_serialize_array_option(number, current_number, option, 
coap_pkt->field, coap_pkt->field##_len, '\0'); \
+    current_number = number; \
+  }
+#define COAP_SERIALIZE_STRING_OPTION(number, field, splitter, text) \
+  if(IS_OPTION(coap_pkt, number)) { \
+    PRINTF(text " [%.*s]\n", coap_pkt->field##_len, coap_pkt->field); \
+    option += coap_serialize_array_option(number, current_number, option, 
(uint8_t *)coap_pkt->field, coap_pkt->field##_len, splitter); \
+    current_number = number; \
+  }
+#define COAP_SERIALIZE_BLOCK_OPTION(number, field, text) \
+  if(IS_OPTION(coap_pkt, number)) \
+  { \
+    PRINTF(text " [%lu%s (%u B/blk)]\n", coap_pkt->field##_num, 
coap_pkt->field##_more ? "+" : "", coap_pkt->field##_size); \
+    uint32_t block = coap_pkt->field##_num << 4; \
+    if(coap_pkt->field##_more) { block |= 0x8; } \
+    block |= 0xF & coap_log_2(coap_pkt->field##_size / 16); \
+    PRINTF(text " encoded: 0x%lX\n", block); \
+    option += coap_serialize_int_option(number, current_number, option, 
block); \
+    current_number = number; \
+  }
+
+/* to store error code and human-readable payload */
+extern coap_status_t erbium_status_code;
+extern char *coap_error_message;
+
+void coap_init_connection(uint16_t port);
+uint16_t coap_get_mid(void);
+
+void coap_init_message(void *packet, coap_message_type_t type, uint8_t code,
+                       uint16_t mid);
+size_t coap_serialize_message(void *packet, uint8_t *buffer);
+void coap_send_message(coap_context_t*, uip_ipaddr_t *addr, uint16_t port, 
uint8_t *data,
+                       uint16_t length);
+coap_status_t coap_parse_message(void *request, uint8_t *data,
+                                 uint16_t data_len);
+
+int coap_get_query_variable(void *packet, const char *name,
+                            const char **output);
+int coap_get_post_variable(void *packet, const char *name,
+                           const char **output);
+
+/*---------------------------------------------------------------------------*/
+
+int coap_set_status_code(void *packet, unsigned int code);
+
+int coap_set_token(void *packet, const uint8_t *token, size_t token_len);
+
+int coap_get_header_content_format(void *packet, unsigned int *format);
+int coap_set_header_content_format(void *packet, unsigned int format);
+
+int coap_get_header_accept(void *packet, unsigned int *accept);
+int coap_set_header_accept(void *packet, unsigned int accept);
+
+int coap_get_header_max_age(void *packet, uint32_t *age);
+int coap_set_header_max_age(void *packet, uint32_t age);
+
+int coap_get_header_etag(void *packet, const uint8_t **etag);
+int coap_set_header_etag(void *packet, const uint8_t *etag, size_t etag_len);
+
+int coap_get_header_if_match(void *packet, const uint8_t **etag);
+int coap_set_header_if_match(void *packet, const uint8_t *etag,
+                             size_t etag_len);
+
+int coap_get_header_if_none_match(void *packet);
+int coap_set_header_if_none_match(void *packet);
+
+int coap_get_header_proxy_uri(void *packet, const char **uri); /* in-place 
string might not be 0-terminated. */
+int coap_set_header_proxy_uri(void *packet, const char *uri);
+
+int coap_get_header_proxy_scheme(void *packet, const char **scheme); /* 
in-place string might not be 0-terminated. */
+int coap_set_header_proxy_scheme(void *packet, const char *scheme);
+
+int coap_get_header_uri_host(void *packet, const char **host); /* in-place 
string might not be 0-terminated. */
+int coap_set_header_uri_host(void *packet, const char *host);
+
+int coap_get_header_uri_path(void *packet, const char **path); /* in-place 
string might not be 0-terminated. */
+int coap_set_header_uri_path(void *packet, const char *path);
+
+int coap_get_header_uri_query(void *packet, const char **query); /* in-place 
string might not be 0-terminated. */
+int coap_set_header_uri_query(void *packet, const char *query);
+
+int coap_get_header_location_path(void *packet, const char **path); /* 
in-place string might not be 0-terminated. */
+int coap_set_header_location_path(void *packet, const char *path); /* also 
splits optional query into Location-Query option. */
+
+int coap_get_header_location_query(void *packet, const char **query); /* 
in-place string might not be 0-terminated. */
+int coap_set_header_location_query(void *packet, const char *query);
+
+int coap_get_header_observe(void *packet, uint32_t *observe);
+int coap_set_header_observe(void *packet, uint32_t observe);
+
+int coap_get_header_block2(void *packet, uint32_t *num, uint8_t *more,
+                           uint32_t *size, uint32_t *offset);
+int coap_set_header_block2(void *packet, uint32_t num, uint8_t more,
+                           uint32_t size);
+
+int coap_get_header_block1(void *packet, uint32_t *num, uint8_t *more,
+                           uint16_t *size, uint32_t *offset);
+int coap_set_header_block1(void *packet, uint32_t num, uint8_t more,
+                           uint16_t size);
+
+int coap_get_header_size2(void *packet, uint32_t *size);
+int coap_set_header_size2(void *packet, uint32_t size);
+
+int coap_get_header_size1(void *packet, uint32_t *size);
+int coap_set_header_size1(void *packet, uint32_t size);
+
+int coap_get_payload(void *packet, const uint8_t **payload);
+int coap_set_payload(void *packet, const void *payload, size_t length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ER_COAP_H_ */
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/extension/Makefile 
b/scriptsrcs/wamr/core/shared-lib/coap/extension/Makefile
new file mode 100755
index 0000000..69f8873
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/extension/Makefile
@@ -0,0 +1,15 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+obj-y += coap_over_tcp.o
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/extension/coap_conversion.c 
b/scriptsrcs/wamr/core/shared-lib/coap/extension/coap_conversion.c
new file mode 100755
index 0000000..4c0819c
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/extension/coap_conversion.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "coap_ext.h"
+
+char * coap_get_full_url_alloc(coap_packet_t * request)
+{
+    const char *url = NULL;
+    const char * query = NULL;
+    int url_len = coap_get_header_uri_path(request, &url);
+    int query_len = coap_get_header_uri_query(request, &query);
+
+    if (url_len == 0)
+        return NULL;
+
+    char * url_alloc = (char*) bh_malloc(url_len + 1 + query_len + 1);
+    memcpy(url_alloc, url, url_len);
+    url_alloc[url_len] = 0;
+
+    // make the url looks like /abc?e=f
+    if (query_len != 0) {
+        strcat(url_alloc, "&");
+        memcpy(url_alloc + strlen(url_alloc), query, query_len);
+        url_alloc[url_len + 1 + query_len] = 0;
+    }
+
+    return url_alloc;
+}
+
+void convert_request_to_coap_packet(request_t * req, coap_packet_t * packet)
+{
+    coap_init_message(packet, COAP_TYPE_NON, req->action, req->mid);
+    coap_set_token(packet, (uint8_t *) &req->mid, sizeof(req->mid));
+    coap_set_header_content_format(packet, req->fmt);
+
+    coap_set_header_uri_path(packet, req->url);
+
+    coap_set_payload(packet, req->payload, req->payload_len);
+
+    packet->mid = req->mid;
+}
+
+void convert_response_to_coap_packet(response_t * response,
+        coap_packet_t * packet)
+{
+    coap_init_message(packet, COAP_TYPE_NON, response->status, response->mid);
+    coap_set_token(packet, (uint8_t *) &response->mid, sizeof(response->mid));
+    coap_set_header_content_format(packet, response->fmt);
+    coap_set_payload(packet, response->payload, response->payload_len);
+
+    packet->mid = response->mid;
+}
+
+// return: the length of url.
+//         note: the url is probably not end with 0 due to coap packing design.
+int convert_coap_packet_to_request(coap_packet_t *packet, request_t *request)
+{
+    const char *url = NULL;
+    int url_len = coap_get_header_uri_path(packet, &url);
+
+    memset(request, 0, sizeof(*request));
+
+    request->action = packet->code;
+    request->fmt = packet->content_format;
+    if (packet->token_len == 4) {
+        request->mid = *((unsigned long *) packet->token);
+    } else {
+        request->mid = packet->mid;
+    }
+    request->payload = packet->payload;
+    request->payload_len = packet->payload_len;
+    request->url = (char *)url;
+    return url_len;
+}
+
+void convert_coap_packet_to_response(coap_packet_t *packet,
+        response_t *response)
+{
+    memset(response, 0, sizeof(*response));
+
+    response->status = packet->code;
+    response->fmt = packet->content_format;
+    if (packet->token_len == 4) {
+        response->mid = *((unsigned long *) packet->token);
+    } else {
+        response->mid = packet->mid;
+    }
+
+    response->payload = packet->payload;
+    response->payload_len = packet->payload_len;
+    return;
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/extension/coap_ext.h 
b/scriptsrcs/wamr/core/shared-lib/coap/extension/coap_ext.h
new file mode 100755
index 0000000..a71596b
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/extension/coap_ext.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef COAP_EXTENSION_COAP_EXT_H_
+#define COAP_EXTENSION_COAP_EXT_H_
+
+#include "er-coap.h"
+#include "shared_utils.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define COAP_EVENT (COAP_DELETE + 2)
+
+char * coap_get_full_url_alloc(coap_packet_t * request);
+
+coap_status_t coap_parse_message_tcp(void *packet, uint8_t *data,
+        uint32_t data_len);
+
+int coap_serialize_message_tcp(void *packet, uint8_t ** buffer_out);
+int coap_set_payload_tcp(void *packet, const void *payload, size_t length);
+uint8_t coap_is_request(coap_packet_t * coap_message);
+
+uint16_t coap_find_mid(uint8_t *buffer);
+uint8_t coap_find_code(uint8_t *buffer);
+void coap_change_mid(uint8_t *buffer, uint16_t id);
+
+int add_resource_handler(coap_context_t * coap_ctx,
+        coap_resource_handler_t * handler);
+uint32_t check_blockwise_timeout_ms(coap_context_t * coap_ctx, int 
timeout_sec);
+
+int convert_coap_packet_to_request(coap_packet_t *packet, request_t *request);
+void convert_coap_packet_to_response(coap_packet_t *packet,
+        response_t *response);
+
+void convert_response_to_coap_packet(response_t * response,
+        coap_packet_t * packet);
+void convert_request_to_coap_packet(request_t * req, coap_packet_t * packet);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* COAP_EXTENSION_COAP_EXT_H_ */
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/extension/coap_over_tcp.c 
b/scriptsrcs/wamr/core/shared-lib/coap/extension/coap_over_tcp.c
new file mode 100755
index 0000000..ae50e4c
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/extension/coap_over_tcp.c
@@ -0,0 +1,481 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include "bh_common.h"
+#include "er-coap.h"
+#include "coap_ext.h"
+#include "er-coap-constants.h"
+
+#define DEBUG 0
+#if DEBUG
+#include <stdio.h>
+#define PRINTF(...) printf(__VA_ARGS__)
+#define PRINT6ADDR(addr) 
PRINTF("[%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]",
 ((uint8_t *)addr)[0], ((uint8_t *)addr)[1], ((uint8_t *)addr)[2], ((uint8_t 
*)addr)[3], ((uint8_t *)addr)[4], ((uint8_t *)addr)[5], ((uint8_t *)addr)[6], 
((uint8_t *)addr)[7], ((uint8_t *)addr)[8], ((uint8_t *)addr)[9], ((uint8_t 
*)addr)[10], ((uint8_t *)addr)[11], ((uint8_t *)addr)[12], ((uint8_t 
*)addr)[13], ((uint8_t *)addr)[14], ((uint8_t *)addr)[15])
+#define PRINTLLADDR(lladdr) PRINTF("[%02x:%02x:%02x:%02x:%02x:%02x]", 
(lladdr)->addr[0], (lladdr)->addr[1], (lladdr)->addr[2], (lladdr)->addr[3], 
(lladdr)->addr[4], (lladdr)->addr[5])
+#else
+#define PRINTF(...)
+#define PRINT6ADDR(addr)
+#define PRINTLLADDR(addr)
+#endif
+
+extern size_t
+coap_serialize_array_option(unsigned int number, unsigned int current_number,
+        uint8_t *buffer, uint8_t *array, size_t length, char split_char);
+extern size_t
+coap_serialize_int_option(unsigned int number, unsigned int current_number,
+        uint8_t *buffer, uint32_t value);
+extern uint16_t coap_log_2(uint16_t value);
+extern uint32_t coap_parse_int_option(uint8_t *bytes, size_t length);
+extern void
+coap_merge_multi_option(char **dst, size_t *dst_len, uint8_t *option,
+        size_t option_len, char separator);
+
+/*
+ *
+ 0                   1                   2                   3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ |Len=15 |  TKL  | Extended Length (32 bits)
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ |               |    Code       |  Token (if any, TKL bytes) ...
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ |   Options (if any) ...
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ |1 1 1 1 1 1 1 1|    Payload (if any) ...
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ */
+
+int coap_set_payload_tcp(void *packet, const void *payload, size_t length)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    coap_pkt->payload = (uint8_t *) payload;
+    coap_pkt->payload_len = MIN(REST_MAX_CHUNK_SIZE, length);
+
+    return coap_pkt->payload_len;
+}
+
+#if 0
+static size_t coap_calc_ext_len_field(int len)
+{
+    if(len < 13)
+    return 0;
+    else if(len <= (0xFF+13))
+    return 1;
+    else if(len <= (0xFFFF+269))
+    return 2;
+    else if(len < (0xFFFFFFFF+65805))
+    return 4;
+    else
+    return 0;
+}
+#endif
+
+static size_t coap_max_options_offset(void *packet)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+    return 6 + coap_pkt->token_len;
+}
+
+int coap_serialize_message_tcp(void *packet, uint8_t ** buffer_out)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+    uint8_t buffer[128];
+
+    uint8_t *option = buffer;
+    unsigned int current_number = 0;
+
+    if (coap_pkt->uri_path_len > 100) {
+        *buffer_out = 0;
+        return -1;
+    }
+
+    /* Serialize options */
+    current_number = 0;
+    if (0 == coap_pkt->token_len) {
+        bh_memcpy_s(coap_pkt->token, COAP_TOKEN_LEN, &coap_pkt->mid,
+                sizeof(coap_pkt->mid));
+        coap_pkt->token_len = sizeof(coap_pkt->mid);
+    }PRINTF("-Serializing options at %p-\n", option);
+
+    /* The options must be serialized in the order of their number */
+    COAP_SERIALIZE_BYTE_OPTION(COAP_OPTION_IF_MATCH, if_match, "If-Match");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_URI_HOST, uri_host, '\0',
+            "Uri-Host");
+    COAP_SERIALIZE_BYTE_OPTION(COAP_OPTION_ETAG, etag, "ETag");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_IF_NONE_MATCH,
+            content_format - coap_pkt-> content_format /* hack to get a zero 
field */,
+            "If-None-Match");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_OBSERVE, observe, "Observe");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_URI_PORT, uri_port, "Uri-Port");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_LOCATION_PATH, location_path, '/',
+            "Location-Path");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_URI_PATH, uri_path, 0, //'/',
+            "Uri-Path");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_CONTENT_FORMAT, content_format,
+            "Content-Format");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_MAX_AGE, max_age, "Max-Age");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_URI_QUERY, uri_query, '&',
+            "Uri-Query");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_ACCEPT, accept, "Accept");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_LOCATION_QUERY, location_query,
+            '&', "Location-Query");
+    COAP_SERIALIZE_BLOCK_OPTION(COAP_OPTION_BLOCK2, block2, "Block2");
+    COAP_SERIALIZE_BLOCK_OPTION(COAP_OPTION_BLOCK1, block1, "Block1");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_SIZE2, size2, "Size2");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_PROXY_URI, proxy_uri, '\0',
+            "Proxy-Uri");
+    COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_PROXY_SCHEME, proxy_scheme, '\0',
+            "Proxy-Scheme");
+    COAP_SERIALIZE_INT_OPTION(COAP_OPTION_SIZE1, size1, "Size1");
+
+    /* Pack payload */
+    if (coap_pkt->payload_len) {
+        *option = 0xFF;
+        ++option;
+    }
+    uint32_t option_len = option - &buffer[0];
+
+    uint8_t * p = (uint8_t *) os_malloc(
+            coap_max_options_offset(packet) + option_len
+                    + coap_pkt->payload_len);
+    if (p == NULL)
+        return 0;
+    *buffer_out = p;
+
+    uint8_t first_4bits;
+
+    *p = (coap_pkt->token_len & 0xF);
+    uint32_t len = option_len + coap_pkt->payload_len;
+
+    if (len < 13) {
+        first_4bits = len;
+        *p++ |= first_4bits << 4;
+    } else if (len <= (0xFF + 13)) {
+        first_4bits = 13;
+        *p++ |= first_4bits << 4;
+        *p++ = len - 13;
+    } else if (len <= (0xFFFF + 269)) {
+        first_4bits = 14;
+        *p++ |= first_4bits << 4;
+        len -= 269;
+        *p = (uint8_t)(len >> 8);
+        p++;
+        *p = (uint8_t)(len & 0xFF);
+        p++;
+    } else {
+        first_4bits = 15;
+        *p++ |= first_4bits << 4;
+
+        len -= 65805;
+        *p++ = (uint8_t)(len >> 24);
+        *p++ = (uint8_t)(len >> 16);
+        *p++ = (uint8_t)(len >> 8);
+        *p++ = (uint8_t)(len & 0xFF);
+    }
+
+    *p = coap_pkt->code;
+    p++;
+
+    if (coap_pkt->token_len)
+        bh_memcpy_s(p, coap_pkt->token_len, coap_pkt->token,
+                coap_pkt->token_len);
+    p += coap_pkt->token_len;
+
+    bh_memcpy_s(p, option_len, buffer, option_len);
+    p += option_len;
+
+    bh_memcpy_s(p, coap_pkt->payload_len, coap_pkt->payload,
+            coap_pkt->payload_len);
+    p += coap_pkt->payload_len;
+
+    return (p - *buffer_out); /* packet length */
+}
+
+coap_status_t coap_parse_message_tcp(void *packet, uint8_t *data,
+        uint32_t data_len)
+{
+    coap_packet_t * const coap_pkt = (coap_packet_t *) packet;
+
+    /* initialize packet */
+    memset(coap_pkt, 0, sizeof(coap_packet_t));
+
+    /* pointer to packet bytes */
+    coap_pkt->buffer = data;
+
+    /* parse header fields */
+    coap_pkt->version = 1;
+    coap_pkt->type = COAP_TYPE_NON;
+    coap_pkt->token_len = MIN(COAP_TOKEN_LEN, data[0] & 0xF);
+    coap_pkt->mid = 0;
+
+    uint8_t *p = data;
+    uint8_t first_4bits = data[0] >> 4;
+
+    uint32_t options_payload_size;
+    uint8_t ext_len_field = 0;
+    if (first_4bits < 13) {
+        options_payload_size = first_4bits;
+        p++;
+    } else if (first_4bits == 13) {
+        ext_len_field = 1;
+        options_payload_size = data[1] + 13;
+        p += 2;
+    } else if (first_4bits == 14) {
+        ext_len_field = 2;
+        options_payload_size = (uint16_t)(data[1] << 8) + data[2] + 269;
+        p += 3;
+    } else if (first_4bits == 15) {
+        ext_len_field = 4;
+        options_payload_size = (data[1] << 24) + (data[2] << 16)
+                + (data[3] << 8) + data[4] + 65805;
+        p += 5;
+    }
+
+    // check the data size is smaller than the size indicated by the packet
+    if (ext_len_field + coap_pkt->token_len + 2 + options_payload_size
+            > data_len)
+        return BAD_REQUEST_4_00;
+
+    coap_pkt->code = *p++;
+    if (coap_pkt->token_len)
+        bh_memcpy_s(coap_pkt->token, COAP_TOKEN_LEN, p, coap_pkt->token_len);
+
+    if (coap_pkt->token_len >= 2) {
+        union {
+            uint16_t *mid;
+            uint8_t *token;
+        } mid_token_union;
+
+        mid_token_union.token = coap_pkt->token;
+        coap_pkt->mid = *(mid_token_union.mid);
+    }
+
+    p += coap_pkt->token_len;
+
+    uint8_t *current_option = p;
+    uint8_t * option_start = p;
+
+    /* parse options */
+    memset(coap_pkt->options, 0, sizeof(coap_pkt->options));
+
+    unsigned int option_number = 0;
+    unsigned int option_delta = 0;
+    size_t option_length = 0;
+
+    while (current_option < data + data_len) {
+        /* payload marker 0xFF, currently only checking for 0xF* because rest 
is reserved */
+        if ((current_option[0] & 0xF0) == 0xF0) {
+            coap_pkt->payload = ++current_option;
+            coap_pkt->payload_len = options_payload_size
+                    - (coap_pkt->payload - option_start);
+            //coap_pkt->payload_len = data_len - (coap_pkt->payload - data);
+            break;
+        }
+
+        option_delta = current_option[0] >> 4;
+        option_length = current_option[0] & 0x0F;
+        ++current_option;
+
+        /* avoids code duplication without function overhead */
+        unsigned int *x = &option_delta;
+
+        do {
+            if (*x == 13) {
+                *x += current_option[0];
+                ++current_option;
+            } else if (*x == 14) {
+                *x += 255;
+                *x += current_option[0] << 8;
+                ++current_option;
+                *x += current_option[0];
+                ++current_option;
+            }
+        } while (x != (unsigned int*) &option_length && (x =
+                (unsigned int*) &option_length));
+        option_length = *x;
+        option_number += option_delta;
+
+        PRINTF("OPTION %u (delta %u, len %u): ", option_number, option_delta,
+                option_length);
+
+        SET_OPTION(coap_pkt, option_number);
+
+        switch (option_number) {
+
+        case COAP_OPTION_CONTENT_FORMAT:
+            coap_pkt->content_format = coap_parse_int_option(current_option,
+                    option_length);
+            PRINTF("Content-Format [%u]\n", coap_pkt->content_format);
+            break;
+        case COAP_OPTION_MAX_AGE:
+            coap_pkt->max_age = coap_parse_int_option(current_option,
+                    option_length);
+            PRINTF("Max-Age [%lu]\n", coap_pkt->max_age);
+            break;
+        case COAP_OPTION_ETAG:
+            coap_pkt->etag_len = MIN(COAP_ETAG_LEN, option_length);
+            bh_memcpy_s(coap_pkt->etag, COAP_ETAG_LEN, current_option,
+                    coap_pkt->etag_len);
+            PRINTF("ETag %u [0x%02X%02X%02X%02X%02X%02X%02X%02X]\n",
+                    coap_pkt->etag_len, coap_pkt->etag[0], coap_pkt->etag[1],
+                    coap_pkt->etag[2], coap_pkt->etag[3], coap_pkt->etag[4],
+                    coap_pkt->etag[5], coap_pkt->etag[6], coap_pkt->etag[7]
+            ); /*FIXME always prints 8 bytes */
+            break;
+        case COAP_OPTION_ACCEPT:
+            coap_pkt->accept = coap_parse_int_option(current_option,
+                    option_length);
+            PRINTF("Accept [%u]\n", coap_pkt->accept);
+            break;
+        case COAP_OPTION_IF_MATCH:
+            /* TODO support multiple ETags */
+            coap_pkt->if_match_len = MIN(COAP_ETAG_LEN, option_length);
+            bh_memcpy_s(coap_pkt->if_match, COAP_ETAG_LEN, current_option,
+                    coap_pkt->if_match_len);
+            PRINTF("If-Match %u [0x%02X%02X%02X%02X%02X%02X%02X%02X]\n",
+                    coap_pkt->if_match_len, coap_pkt->if_match[0],
+                    coap_pkt->if_match[1], coap_pkt->if_match[2],
+                    coap_pkt->if_match[3], coap_pkt->if_match[4],
+                    coap_pkt->if_match[5], coap_pkt->if_match[6],
+                    coap_pkt->if_match[7]
+            ); /* FIXME always prints 8 bytes */
+            break;
+        case COAP_OPTION_IF_NONE_MATCH:
+            coap_pkt->if_none_match = 1;
+            PRINTF("If-None-Match\n");
+            break;
+
+        case COAP_OPTION_PROXY_URI:
+#if COAP_PROXY_OPTION_PROCESSING
+            coap_pkt->proxy_uri = (char *)current_option;
+            coap_pkt->proxy_uri_len = option_length;
+#endif
+            PRINTF("Proxy-Uri NOT IMPLEMENTED [%.*s]\n", 
coap_pkt->proxy_uri_len,
+                    coap_pkt->proxy_uri);
+            coap_error_message = "This is a constrained server (Contiki)";
+            return PROXYING_NOT_SUPPORTED_5_05;
+            break;
+        case COAP_OPTION_PROXY_SCHEME:
+#if COAP_PROXY_OPTION_PROCESSING
+            coap_pkt->proxy_scheme = (char *)current_option;
+            coap_pkt->proxy_scheme_len = option_length;
+#endif
+            PRINTF("Proxy-Scheme NOT IMPLEMENTED [%.*s]\n",
+                    coap_pkt->proxy_scheme_len, coap_pkt->proxy_scheme);
+            coap_error_message = "This is a constrained server (Contiki)";
+            return PROXYING_NOT_SUPPORTED_5_05;
+            break;
+
+        case COAP_OPTION_URI_HOST:
+            coap_pkt->uri_host = (char *) current_option;
+            coap_pkt->uri_host_len = option_length;
+            PRINTF("Uri-Host [%.*s]\n", coap_pkt->uri_host_len, 
coap_pkt->uri_host);
+            break;
+        case COAP_OPTION_URI_PORT:
+            coap_pkt->uri_port = coap_parse_int_option(current_option,
+                    option_length);
+            PRINTF("Uri-Port [%u]\n", coap_pkt->uri_port);
+            break;
+        case COAP_OPTION_URI_PATH:
+            /* coap_merge_multi_option() operates in-place on the IPBUF, but 
final packet field should be const string -> cast to string */
+            coap_merge_multi_option((char **) &(coap_pkt->uri_path),
+                    &(coap_pkt->uri_path_len), current_option, option_length,
+                    '/');
+            PRINTF("Uri-Path [%.*s]\n", coap_pkt->uri_path_len, 
coap_pkt->uri_path);
+            break;
+        case COAP_OPTION_URI_QUERY:
+            /* coap_merge_multi_option() operates in-place on the IPBUF, but 
final packet field should be const string -> cast to string */
+            coap_merge_multi_option((char **) &(coap_pkt->uri_query),
+                    &(coap_pkt->uri_query_len), current_option, option_length,
+                    '&');
+            PRINTF("Uri-Query [%.*s]\n", coap_pkt->uri_query_len,
+                    coap_pkt->uri_query);
+            break;
+
+        case COAP_OPTION_LOCATION_PATH:
+            /* coap_merge_multi_option() operates in-place on the IPBUF, but 
final packet field should be const string -> cast to string */
+            coap_merge_multi_option((char **) &(coap_pkt->location_path),
+                    &(coap_pkt->location_path_len), current_option,
+                    option_length, '/');
+            PRINTF("Location-Path [%.*s]\n", coap_pkt->location_path_len,
+                    coap_pkt->location_path);
+            break;
+        case COAP_OPTION_LOCATION_QUERY:
+            /* coap_merge_multi_option() operates in-place on the IPBUF, but 
final packet field should be const string -> cast to string */
+            coap_merge_multi_option((char **) &(coap_pkt->location_query),
+                    &(coap_pkt->location_query_len), current_option,
+                    option_length, '&');
+            PRINTF("Location-Query [%.*s]\n", coap_pkt->location_query_len,
+                    coap_pkt->location_query);
+            break;
+
+        case COAP_OPTION_OBSERVE:
+            coap_pkt->observe = coap_parse_int_option(current_option,
+                    option_length);
+            PRINTF("Observe [%lu]\n", coap_pkt->observe);
+            break;
+        case COAP_OPTION_BLOCK2:
+            coap_pkt->block2_num = coap_parse_int_option(current_option,
+                    option_length);
+            coap_pkt->block2_more = (coap_pkt->block2_num & 0x08) >> 3;
+            coap_pkt->block2_size = 16 << (coap_pkt->block2_num & 0x07);
+            coap_pkt->block2_offset = (coap_pkt->block2_num & ~0x0000000F)
+                    << (coap_pkt->block2_num & 0x07);
+            coap_pkt->block2_num >>= 4;
+            PRINTF("Block2 [%lu%s (%u B/blk)]\n", coap_pkt->block2_num,
+                    coap_pkt->block2_more ? "+" : "", coap_pkt->block2_size);
+            break;
+        case COAP_OPTION_BLOCK1:
+            coap_pkt->block1_num = coap_parse_int_option(current_option,
+                    option_length);
+            coap_pkt->block1_more = (coap_pkt->block1_num & 0x08) >> 3;
+            coap_pkt->block1_size = 16 << (coap_pkt->block1_num & 0x07);
+            coap_pkt->block1_offset = (coap_pkt->block1_num & ~0x0000000F)
+                    << (coap_pkt->block1_num & 0x07);
+            coap_pkt->block1_num >>= 4;
+            PRINTF("Block1 [%lu%s (%u B/blk)]\n", coap_pkt->block1_num,
+                    coap_pkt->block1_more ? "+" : "", coap_pkt->block1_size);
+            break;
+        case COAP_OPTION_SIZE2:
+            coap_pkt->size2 = coap_parse_int_option(current_option,
+                    option_length);
+            PRINTF("Size2 [%lu]\n", coap_pkt->size2);
+            break;
+        case COAP_OPTION_SIZE1:
+            coap_pkt->size1 = coap_parse_int_option(current_option,
+                    option_length);
+            PRINTF("Size1 [%lu]\n", coap_pkt->size1);
+            break;
+        default:
+            PRINTF("unknown (%u)\n", option_number);
+            /* check if critical (odd) */
+            if (option_number & 1) {
+                coap_error_message = "Unsupported critical option";
+                return BAD_OPTION_4_02;
+            }
+        }
+
+        current_option += option_length;
+    } /* for */
+    PRINTF("-Done parsing-------\n");
+
+    return NO_ERROR;
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/extension/coap_platforms.h 
b/scriptsrcs/wamr/core/shared-lib/coap/extension/coap_platforms.h
new file mode 100755
index 0000000..e3a1ac4
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/extension/coap_platforms.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef COAP_PLATFORMS_H_
+#define COAP_PLATFORMS_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include "bh_platform.h"
+#include <stdint.h>
+#include <string.h>
+#include <stdlib.h>
+/*#include "list_coap.h"*/
+#include <stdbool.h>
+
+#define COAP_TRANS_LOCK(ctx) coap_lock(ctx->transaction_lock)
+#define COAP_TRANS_UNLOCK(ctx )  coap_unlock(ctx->transaction_lock)
+
+/* REST_MAX_CHUNK_SIZE is the max size of payload.
+ * The maximum buffer size that is provided for resource responses and must be 
respected due to the limited IP buffer.
+ * Larger data must be handled by the resource and will be sent chunk-wise 
through a TCP stream or CoAP blocks.
+ */
+#ifndef REST_MAX_CHUNK_SIZE
+#define REST_MAX_CHUNK_SIZE     (1024*1024)
+#endif
+
+#ifndef MIN
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#endif /* MIN */
+
+#define CLOCK_SECOND 1000
+
+typedef enum {
+    A_Raw, A_Sock_Addr, A_IP_Addr, A_Custom
+} Net_Addr_Type;
+
+#define NET_ADDR_RAW_SIZE 32
+
+typedef struct net_addr_coap {
+    Net_Addr_Type addr_type;
+    union {
+        char raw[NET_ADDR_RAW_SIZE];
+        struct sockaddr_in sock_addr;
+    } u;
+    uint16_t port;
+    uint16_t addr_len;
+} net_addr_t;
+
+#define uip_ipaddr_t struct net_addr_coap
+
+#define memb_free(x, y)  free(x)
+
+void set_addr_ip(uip_ipaddr_t *, char * ip, int port);
+uip_ipaddr_t * new_net_addr(Net_Addr_Type type);
+void copy_net_addr(uip_ipaddr_t * dest, uip_ipaddr_t * src);
+bool compare_net_addr(uip_ipaddr_t * dest, uip_ipaddr_t * src);
+
+uint32_t get_elpased_ms(uint32_t * last_system_clock);
+uint32_t get_platform_time();
+uint32_t get_platform_time_sec();
+
+void coap_sleep_ms(uint32_t ms);
+void coap_lock(void *);
+void coap_unlock(void *);
+void * coap_create_lock();
+void coap_free_lock(void *);
+
+void *xalloc(uint32_t size);
+
+#define os_malloc   bh_malloc
+#define os_free     bh_free
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* COAP_PLATFORMS_H_ */
diff --git a/scriptsrcs/wamr/core/shared-lib/coap/lib_coap.cmake 
b/scriptsrcs/wamr/core/shared-lib/coap/lib_coap.cmake
new file mode 100755
index 0000000..8a35f3c
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/coap/lib_coap.cmake
@@ -0,0 +1,23 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (LIB_COAP_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${LIB_COAP_DIR}/er-coap)
+include_directories(${LIB_COAP_DIR}/extension)
+
+file (GLOB_RECURSE source_all ${LIB_COAP_DIR}/*.c)
+
+set (LIB_COAP_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/shared-lib/include/bh_common.h 
b/scriptsrcs/wamr/core/shared-lib/include/bh_common.h
new file mode 100755
index 0000000..a8176dc
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/include/bh_common.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_COMMON_H
+#define _BH_COMMON_H
+
+#include "bh_assert.h"
+#include "bh_definition.h"
+#include "bh_platform.h"
+#include "bh_log.h"
+#include "bh_list.h"
+
+typedef void (*bh_print_function_t)(const char* message);
+void bh_set_print_function(bh_print_function_t pf);
+
+#define bh_memcpy_s(dest, dlen, src, slen) do {                         \
+    int _ret = slen == 0 ? 0 : b_memcpy_s (dest, dlen, src, slen);      \
+    (void)_ret;                                                         \
+    bh_assert (_ret == 0);                                              \
+  } while (0)
+
+#define bh_strcat_s(dest, dlen, src) do {                               \
+    int _ret = b_strcat_s (dest, dlen, src);                            \
+    (void)_ret;                                                         \
+    bh_assert (_ret == 0);                                              \
+  } while (0)
+
+#define bh_strcpy_s(dest, dlen, src) do {                               \
+    int _ret = b_strcpy_s (dest, dlen, src);                            \
+    (void)_ret;                                                         \
+    bh_assert (_ret == 0);                                              \
+  } while (0)
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/include/bh_list.h 
b/scriptsrcs/wamr/core/shared-lib/include/bh_list.h
new file mode 100755
index 0000000..01644dc
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/include/bh_list.h
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_LIST_H
+#define _BH_LIST_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "korp_types.h" /*For bool type*/
+#include "bh_platform.h"
+
+/* List user should embedded bh_list_link into list elem data structure
+ * definition. And bh_list_link data field should be the first field.
+ * For example, if we would like to use bh_list for our own data type A,
+ * A must be defined as a structure like below:
+ *     struct A {
+ *         bh_list_link l;
+ *         ...
+ *     };
+ *
+ * bh_list_link is defined as a structure (not typedef void*).
+ * It will make extend list into bi-direction easy.
+ */
+typedef struct _bh_list_link {
+    struct _bh_list_link *next;
+} bh_list_link;
+
+typedef struct _bh_list {
+    bh_list_link head;
+    uint32 len;
+} bh_list;
+
+/* Beihai list operation return value */
+typedef enum _bh_list_status {
+    BH_LIST_SUCCESS = 0, BH_LIST_ERROR = -1
+} bh_list_status;
+
+/**
+ * Initialize a list.
+ *
+ * @param list    pointer to list.
+ * @return        <code>BH_LIST_ERROR</code> if OK;
+ *                <code>BH_LIST_ERROR</code> if list pointer is NULL.
+ */
+bh_list_status bh_list_init(bh_list *list);
+
+/**
+ * Insert an elem pointer into list. The list node memory is maintained by 
list while
+ * elem memory is the responsibility of list user.
+ *
+ * @param list    pointer to list.
+ * @param elem    pointer to elem that will be inserted into list.
+ * @return        <code>BH_LIST_ERROR</code> if OK;
+ *                <code>BH_LIST_ERROR</code> if input is invalid or no memory 
available.
+ */
+extern bh_list_status _bh_list_insert(bh_list *list, void *elem);
+
+#ifdef _INSTRUMENT_TEST_ENABLED
+extern bh_list_status bh_list_insert_instr(bh_list *list, void *elem, const 
char*func_name);
+#define bh_list_insert(list, elem) bh_list_insert_instr(list, elem, 
__FUNCTION__)
+#else
+#define bh_list_insert _bh_list_insert
+#endif
+
+/**
+ * Remove an elem pointer from list. The list node memory is maintained by 
list while
+ * elem memory is the responsibility of list user.
+ *
+ * @param list    pointer to list.
+ * @param elem    pointer to elem that will be inserted into list.
+ * @return        <code>BH_LIST_ERROR</code> if OK;
+ *                <code>BH_LIST_ERROR</code> if element does not exist in 
given list.
+ */
+bh_list_status bh_list_remove(bh_list *list, void *elem);
+
+/**
+ * Get the list length.
+ *
+ * @param list    pointer to list.
+ * @return        the length of the list.
+ */
+uint32 bh_list_length(bh_list *list);
+
+/**
+ * Get the first elem in the list.
+ *
+ * @param list    pointer to list.
+ * @return        pointer to the first node.
+ */
+void* bh_list_first_elem(bh_list *list);
+
+/**
+ * Get the next elem of given list input elem.
+ *
+ * @param node    pointer to list node.
+ * @return        pointer to next list node.
+ */
+void* bh_list_elem_next(void *node);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _BH_LIST_H */
+
diff --git a/scriptsrcs/wamr/core/shared-lib/include/bh_log.h 
b/scriptsrcs/wamr/core/shared-lib/include/bh_log.h
new file mode 100755
index 0000000..c2e45fe
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/include/bh_log.h
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @file   bh_log.h
+ * @date   Tue Nov  8 18:19:10 2011
+ *
+ * @brief This log system supports wrapping multiple outputs into one
+ * log message.  This is useful for outputting variable-length logs
+ * without additional memory overhead (the buffer for concatenating
+ * the message), e.g. exception stack trace, which cannot be printed
+ * by a single log calling without the help of an additional buffer.
+ * Avoiding additional memory buffer is useful for resource-constraint
+ * systems.  It can minimize the impact of log system on applications
+ * and logs can be printed even when no enough memory is available.
+ * Functions with prefix "_" are private functions.  Only macros that
+ * are not start with "_" are exposed and can be used.
+ */
+
+#ifndef _BH_LOG_H
+#define _BH_LOG_H
+
+#include <stdarg.h>
+
+#include "korp_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * The following functions are the primitive operations of this log
+ * system.  A normal usage of the log system is to call bh_log_printf
+ * or bh_log_vprintf one or multiple times and then call bh_log_commit
+ * to wrap (mark) the previous outputs into one log message.  The
+ * bh_log and macros LOG_ERROR etc. can be used to output log messages
+ * that can be wrapped into one log calling.
+ */
+int _bh_log_init(void);
+void _bh_log_set_verbose_level(int level);
+void _bh_log_printf(const char *fmt, ...);
+void _bh_log_vprintf(const char *fmt, va_list ap);
+void _bh_log_commit(void);
+
+#if BEIHAI_ENABLE_LOG != 0
+# define bh_log_init()               _bh_log_init ()
+# define bh_log_set_verbose_level(l) _bh_log_set_verbose_level (l)
+# define bh_log_printf(...)          _bh_log_printf (__VA_ARGS__)
+# define bh_log_vprintf(...)         _bh_log_vprintf (__VA_ARGS__)
+# define bh_log_commit()             _bh_log_commit ()
+#else  /* BEIHAI_ENABLE_LOG != 0 */
+# define bh_log_init()               0
+# define bh_log_set_verbose_level(l) (void)0
+# define bh_log_printf(...)          (void)0
+# define bh_log_vprintf(...)         (void)0
+# define bh_log_commit()             (void)0
+#endif  /* BEIHAI_ENABLE_LOG != 0 */
+
+void _bh_log(const char *tag, const char *file, int line, const char *fmt, 
...);
+
+/* Always print fatal message */
+# define LOG_FATAL(...)         _bh_log ("V0.", NULL, 0, __VA_ARGS__)
+
+#if BEIHAI_ENABLE_LOG != 0
+# define LOG_ERROR(...)         _bh_log ("V1.", NULL, 0, __VA_ARGS__)
+# define LOG_WARNING(...)       _bh_log ("V2.", NULL, 0, __VA_ARGS__)
+# define LOG_INFO_RELEASE(...)  _bh_log ("V3.", NULL, 0, __VA_ARGS__)
+# define LOG_INFO_APP_DEV(...)  _bh_log ("V4.", NULL, 0, __VA_ARGS__)
+# define LOG_VERBOSE(...)       _bh_log ("V5.", NULL, 0, __VA_ARGS__)
+# if BEIHAI_ENABLE_MEMORY_PROFILING != 0
+#  define LOG_PROFILE(...)      _bh_log ("V3.", NULL, 0, __VA_ARGS__)
+# else
+#  define LOG_PROFILE(...)      (void)0
+#endif
+# if BEIHAI_ENABLE_QUEUE_PROFILING != 0
+#  define LOG_QUEUE_PROFILE(...) _bh_log ("V3.", NULL, 0, __VA_ARGS__)
+# else
+#  define LOG_QUEUE_PROFILE(...) (void)0
+#endif
+# if BEIHAI_ENABLE_GC_STAT_PROFILING != 0
+#  define LOG_GC_STAT_PROFILE(...) _bh_log ("V3.", NULL, 0, __VA_ARGS__)
+# else
+#  define LOG_GC_STAT_PROFILE(...) (void)0
+#endif
+#else  /* BEIHAI_ENABLE_LOG != 0 */
+# define LOG_ERROR(...)         (void)0
+# define LOG_WARNING(...)       (void)0
+# define LOG_INFO_APP_DEV(...)  (void)0
+# define LOG_INFO_RELEASE(...)  (void)0
+# define LOG_VERBOSE(...)       (void)0
+# define LOG_PROFILE(...)       (void)0
+# define LOG_QUEUE_PROFILE(...) (void)0
+# define LOG_GC_STAT_PROFILE(...) (void)0
+#endif  /* BEIHAI_ENABLE_LOG != 0 */
+
+#define LOG_PROFILE_INSTANCE_HEAP_CREATED(heap)                 \
+  LOG_PROFILE ("PROF.INSTANCE.HEAP_CREATED: HEAP=%08X", heap)
+#define LOG_PROFILE_INSTANCE_THREAD_STARTED(heap)                   \
+  LOG_PROFILE ("PROF.INSTANCE.THREAD_STARTED: HEAP=%08X", heap)
+#define LOG_PROFILE_HEAP_ALLOC(heap, size)                          \
+  LOG_PROFILE ("PROF.HEAP.ALLOC: HEAP=%08X SIZE=%d", heap, size)
+#define LOG_PROFILE_HEAP_FREE(heap, size)                           \
+  LOG_PROFILE ("PROF.HEAP.FREE: HEAP=%08X SIZE=%d", heap, size)
+#define LOG_PROFILE_HEAP_NEW(heap, size)                            \
+  LOG_PROFILE ("PROF.HEAP.NEW: HEAP=%08X SIZE=%d", heap, size)
+#define LOG_PROFILE_HEAP_GC(heap, size)                         \
+  LOG_PROFILE ("PROF.HEAP.GC: HEAP=%08X SIZE=%d", heap, size)
+#define LOG_PROFILE_STACK_PUSH(used)                \
+  LOG_PROFILE ("PROF.STACK.PUSH: USED=%d", used)
+#define LOG_PROFILE_STACK_POP()                 \
+  LOG_PROFILE ("PROF.STACK.POP")
+
+/* Please add your component ahead of LOG_COM_MAX */
+enum {
+    LOG_COM_APP_MANAGER = 0,
+    LOG_COM_GC,
+    LOG_COM_HMC,
+    LOG_COM_UTILS,
+    LOG_COM_VERIFIER_JEFF,
+    LOG_COM_VMCORE_JEFF,
+    LOG_COM_MAX
+};
+
+#if defined(BH_DEBUG)
+void log_parse_coms(const char *coms);
+int bh_log_dcom_is_enabled(int component);
+
+#define LOG_DEBUG(component, ...) do {                          \
+    if (bh_log_dcom_is_enabled (component))                     \
+      _bh_log ("V6: ", __FILE__, __LINE__, __VA_ARGS__);        \
+  } while (0)
+
+#else  /* defined(BH_DEBUG) */
+
+#define LOG_DEBUG(component, ...) (void)0
+
+#endif  /* defined(BH_DEBUG) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* _BH_LOG_H */
diff --git a/scriptsrcs/wamr/core/shared-lib/include/bh_memory.h 
b/scriptsrcs/wamr/core/shared-lib/include/bh_memory.h
new file mode 100755
index 0000000..352137a
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/include/bh_memory.h
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_MEMORY_H
+#define _BH_MEMORY_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BH_KB (1024)
+#define BH_MB ((BH_KB)*1024)
+#define BH_GB ((BH_MB)*1024)
+
+/**
+ * Initialize memory allocator with a pool, the bh_malloc/bh_free function
+ * will malloc/free memory from the pool
+ *
+ * @param mem the pool buffer
+ * @param bytes the size bytes of the buffer
+ *
+ * @return 0 if success, -1 otherwise
+ */
+int bh_memory_init_with_pool(void *mem, unsigned int bytes);
+
+/**
+ * Initialize memory allocator with memory allocator, the bh_malloc/bh_free
+ * function will malloc/free memory with the allocator passed
+ *
+ * @param malloc_func the malloc function
+ * @param free_func the free function
+ *
+ * @return 0 if success, -1 otherwise
+ */
+int bh_memory_init_with_allocator(void *malloc_func, void *free_func);
+
+/**
+ * Destroy memory
+ */
+void bh_memory_destroy();
+
+/**
+ * Get the pool size of memory, if memory is initialized with allocator,
+ * return 1GB by default.
+ */
+int bh_memory_pool_size();
+
+#if BEIHAI_ENABLE_MEMORY_PROFILING == 0
+
+/**
+ * This function allocates a memory chunk from system
+ *
+ * @param size bytes need allocate
+ *
+ * @return the pointer to memory allocated
+ */
+void* bh_malloc(unsigned int size);
+
+/**
+ * This function frees memory chunk
+ *
+ * @param ptr the pointer to memory need free
+ */
+void bh_free(void *ptr);
+
+#else
+
+void* bh_malloc_profile(const char *file, int line, const char *func, unsigned 
int size);
+void bh_free_profile(const char *file, int line, const char *func, void *ptr);
+
+#define bh_malloc(size) bh_malloc_profile(__FILE__, __LINE__, __func__, size)
+#define bh_free(ptr) bh_free_profile(__FILE__, __LINE__, __func__, ptr)
+
+/**
+ * Print current memory profiling data
+ *
+ * @param file file name of the caller
+ * @param line line of the file of the caller
+ * @param func function name of the caller
+ */
+void memory_profile_print(const char *file, int line, const char *func, int 
alloc);
+
+/**
+ * Summarize memory usage and print it out
+ * Can use awk to analyze the output like below:
+ * awk -F: '{print $2,$4,$6,$8,$9}' OFS="\t" ./out.txt | sort -n -r -k 1
+ */
+void memory_usage_summarize();
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _BH_MEMORY_H */
+
diff --git a/scriptsrcs/wamr/core/shared-lib/include/bh_queue.h 
b/scriptsrcs/wamr/core/shared-lib/include/bh_queue.h
new file mode 100755
index 0000000..a30c112
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/include/bh_queue.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_QUEUE_H
+#define _BH_QUEUE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "korp_types.h" /*For bool type*/
+#include "bh_platform.h"
+
+struct _bh_queue_node;
+typedef struct _bh_queue_node * bh_message_t;
+struct bh_queue;
+typedef struct bh_queue bh_queue;
+
+typedef void (*bh_queue_handle_msg_callback)(void *message);
+
+#define bh_queue_malloc bh_malloc
+#define bh_queue_free bh_free
+
+#define bh_queue_mutex korp_mutex
+#define bh_queue_sem korp_sem
+#define bh_queue_cond korp_cond
+
+#define bh_queue_mutex_init vm_mutex_init
+#define bh_queue_mutex_destroy vm_mutex_destroy
+#define bh_queue_mutex_lock vm_mutex_lock
+#define bh_queue_mutex_unlock vm_mutex_unlock
+
+#define bh_queue_sem_init vm_sem_init
+#define bh_queue_sem_destroy vm_sem_destroy
+#define bh_queue_sem_wait vm_sem_wait
+#define bh_queue_sem_reltimedwait vm_sem_reltimedwait
+#define bh_queue_sem_post vm_sem_post
+
+#define bh_queue_cond_init vm_cond_init
+#define bh_queue_cond_destroy vm_cond_destroy
+#define bh_queue_cond_wait vm_cond_wait
+#define bh_queue_cond_timedwait vm_cond_reltimedwait
+#define bh_queue_cond_signal vm_cond_signal
+#define bh_queue_cond_broadcast vm_cond_broadcast
+
+typedef void (*bh_msg_cleaner)(void *msg);
+
+bh_queue *
+bh_queue_create();
+
+void
+bh_queue_destroy(bh_queue *queue);
+
+char * bh_message_payload(bh_message_t message);
+int bh_message_payload_len(bh_message_t message);
+int bh_message_type(bh_message_t message);
+
+bh_message_t bh_new_msg(unsigned short tag, void *body, unsigned int len,
+        void * handler);
+void bh_free_msg(bh_message_t msg);
+bool bh_post_msg(bh_queue *queue, unsigned short tag, void *body,
+        unsigned int len);
+bool bh_post_msg2(bh_queue *queue, bh_message_t msg);
+
+bh_message_t bh_get_msg(bh_queue *queue, int timeout);
+
+unsigned
+bh_queue_get_message_count(bh_queue *queue);
+
+void
+bh_queue_enter_loop_run(bh_queue *queue,
+        bh_queue_handle_msg_callback handle_cb);
+
+void
+bh_queue_enter_loop_run1(bh_queue *queue,
+        bh_queue_handle_msg_callback handle_cb);
+
+void
+bh_queue_exit_loop_run(bh_queue *queue);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _BH_QUEUE_H */
+
diff --git a/scriptsrcs/wamr/core/shared-lib/include/bni.h 
b/scriptsrcs/wamr/core/shared-lib/include/bni.h
new file mode 100755
index 0000000..36e797f
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/include/bni.h
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @file   bni.h
+ * @date   Mon Jul  2 16:54:58 2012
+ *
+ * @brief  Beihai native interface.
+ */
+
+#ifndef BNI_H
+#define BNI_H
+
+#include "bh_types.h"
+
+/* Primitive types */
+typedef uint8 jboolean;
+typedef int8 jbyte;
+typedef uint16 jchar;
+typedef int16 jshort;
+typedef int32 jint;
+typedef int64 jlong;
+typedef float jfloat;
+typedef double jdouble;
+typedef jint jsize;
+
+/* Predefined Java class types.  */
+struct _jobject;
+typedef struct _jobject *jobject;
+struct _jclass;
+typedef struct _jclass *jclass;
+struct _jstring;
+typedef struct _jstring *jstring;
+
+/* Values of jboolean: */
+#define BNI_FALSE  0
+#define BNI_TRUE   1
+
+/**
+ * Return the length of the array object.
+ *
+ * @param array Java array object
+ *
+ * @return the length of the Java array
+ */
+#define bni_array_length(array) ((jsize)((uint32)(array)->__length >> 2))
+
+/**
+ * Return the address of the first element of array object.
+ *
+ * @param array Java array object
+ *
+ * @return the address of the first element of array object
+ */
+#define bni_array_elem(array) ((array)->__elem)
+
+/**
+ * Find the Java class with given class name.
+ *
+ * @param name Java class name
+ *
+ * @return class object of the Java class if found, NULL otherwise
+ *
+ * @throws OutOfMemoryError if VM runs out of memory.
+ */
+jclass
+bni_find_class(const char *name);
+
+/**
+ * Throw an exception of given class with message.
+ *
+ * @param clazz class object of a subclass of java.lang.Throwable
+ * @param msg message for the exception or NULL if no message
+ *
+ * @return 0 if succeeds, nonzero otherwise
+ */
+jint
+bni_throw_new(jclass clazz, const char *msg);
+
+/**
+ * Throw a NullPointerException.
+ *
+ * @throws NullPointerException
+ */
+void
+bni_throw_npe(void);
+
+/**
+ * Throw an ArrayIndexOutOfBoundsException
+ *
+ * @param index the index used to access the array
+ *
+ * @throws ArrayIndexOutOfBoundsException
+ */
+void
+bni_throw_aioobe(int index);
+
+/**
+ * Determine whether an exception is being thrown.
+ *
+ * @return exception object if exception is thrown, NULL otherwise
+ */
+jobject
+bni_exception_occurred(void);
+
+/**
+ * Print the current exception to error-reporting channel.
+ */
+void
+bni_exception_describe(void);
+
+/**
+ * Clear the currently thrown exception.
+ */
+void
+bni_exception_clear(void);
+
+/**
+ * Return the Unicode character number of a string.
+ *
+ * @param str Java string object
+ *
+ * @return the Unicode character number of the string
+ */
+jsize
+bni_string_length(jstring str);
+
+/**
+ * Return the length in bytes of the modified UTF-8 representation of
+ * a string.
+ *
+ * @param str Java string object
+ * @param start start offset in the string
+ * @param len number of Unicode characters
+ *
+ * @return the UTF-8 length of the string
+ *
+ * @throws StringIndexOutOfBoundsException on index overflow.
+ */
+jsize
+bni_string_utf_length(jstring str, jsize start, jsize len);
+
+/**
+ * Copies len number of Unicode characters beginning at offset start
+ * to the given buffer buf.
+ *
+ * @param str Java string object
+ * @param start start offset in the string
+ * @param len number of Unicode characters to copy
+ * @param buf buffer for storing the result
+ */
+void
+bni_string_region(jstring str, jsize start, jsize len, jchar *buf);
+
+/**
+ * Translates len number of Unicode characters beginning at offset
+ * start into modified UTF-8 encoding and place the result in the
+ * given buffer buf.
+ *
+ * @param str Java string object
+ * @param start start offset in the string
+ * @param len number of Unicode characters to copy
+ * @param buf buffer for storing the result
+ *
+ * @throws StringIndexOutOfBoundsException on index overflow.
+ */
+void
+bni_string_utf_region(jstring str, jsize start, jsize len, char *buf);
+
+/**
+ * Translate Unicode characters into modified UTF-8 encoding and return
+ * the result.
+ *
+ * @param str Java string object
+ *
+ * @return the UTF-8 encoding string if succeeds, NULL otherwise
+ */
+char *
+bni_string_get_utf_chars(jstring str);
+
+/**
+ * Get the given Java object's class index.
+ *
+ * @param obj Java object
+ *
+ * @return -1 if obj is an array, class index of the object otherwise
+ */
+jint
+bni_object_class_index(jobject obj);
+
+/**
+ * Allocate memory from the current instance's private heap.
+ *
+ * @param size bytes to allocate
+ *
+ * @return pointer to the allocated memory
+ *
+ * @throws OutOfMemoryError if VM runs out of memory.
+ */
+void*
+bni_malloc(unsigned size);
+
+/**
+ * Allocate memory from the current instance's private heap and clear
+ * to zero.
+ *
+ * @param size bytes to allocate
+ *
+ * @return pointer to the allocated memory
+ *
+ * @throws OutOfMemoryError if VM runs out of memory.
+ */
+void*
+bni_calloc(unsigned size);
+
+/**
+ * Free the memory allocated from the current instance's private heap.
+ *
+ * @param ptr pointer to the memory in current instance's private heap
+ */
+void
+bni_free(void *ptr);
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/include/config.h 
b/scriptsrcs/wamr/core/shared-lib/include/config.h
new file mode 100755
index 0000000..a7c2a8b
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/include/config.h
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONFIG_H_
+
+/* Memory allocator ems */
+#define MEM_ALLOCATOR_EMS 0
+
+/* Memory allocator tlsf */
+#define MEM_ALLOCATOR_TLSF 1
+
+/* Default memory allocator */
+#define DEFAULT_MEM_ALLOCATOR MEM_ALLOCATOR_EMS
+
+/* Beihai log system */
+#define BEIHAI_ENABLE_LOG 1
+
+/* Beihai debugger support */
+#define BEIHAI_ENABLE_TOOL_AGENT 1
+
+/* Beihai debug monitoring server, must define
+ BEIHAI_ENABLE_TOOL_AGENT firstly */
+#define BEIHAI_ENABLE_TOOL_AGENT_BDMS 1
+
+/* enable no signature on sdv since verify doesn't work as lacking public key 
*/
+#ifdef CONFIG_SDV
+#define BEIHAI_ENABLE_NO_SIGNATURE 1
+#else
+#define BEIHAI_ENABLE_NO_SIGNATURE 0
+#endif
+
+/* WASM VM log system */
+#ifndef WASM_ENABLE_LOG
+#define WASM_ENABLE_LOG 1
+#endif
+
+/* WASM Interpreter labels-as-values feature */
+#define WASM_ENABLE_LABELS_AS_VALUES 1
+
+/* WASM Branch Block address hashmap */
+#define WASM_ENABLE_HASH_BLOCK_ADDR 0
+
+/* Heap and stack profiling */
+#define BEIHAI_ENABLE_MEMORY_PROFILING 0
+
+/* Max app number of all modules */
+#define MAX_APP_INSTALLATIONS 3
+
+/* Default timer number in one app */
+#define DEFAULT_TIMERS_PER_APP 20
+
+/* Max timer number in one app */
+#define MAX_TIMERS_PER_APP 30
+
+/* Max connection number in one app */
+#define MAX_CONNECTION_PER_APP 20
+
+/* Max resource registration number in one app */
+#define RESOURCE_REGISTRATION_NUM_MAX 16
+
+/* Max length of resource/event url */
+#define RESOUCE_EVENT_URL_LEN_MAX 256
+
+/* Default length of queue */
+#define DEFAULT_QUEUE_LENGTH 50
+
+/* Default watchdog interval in ms */
+#define DEFAULT_WATCHDOG_INTERVAL (3 * 60 * 1000)
+
+/* Workflow heap size */
+/*
+#define WORKING_FLOW_HEAP_SIZE 0
+*/
+
+/* Support memory.grow opcode and enlargeMemory function */
+#define WASM_ENABLE_MEMORY_GROW 1
+
+/* The max percentage of global heap that app memory space can grow */
+#define APP_MEMORY_MAX_GLOBAL_HEAP_PERCENT 1 / 3
+
+/* Default base offset of app heap space */
+#define DEFAULT_APP_HEAP_BASE_OFFSET (1 * BH_GB)
+
+/* Default min/max heap size of each app */
+#define APP_HEAP_SIZE_DEFAULT (8 * 1024)
+#define APP_HEAP_SIZE_MIN (2 * 1024)
+#define APP_HEAP_SIZE_MAX (1024 * 1024)
+
+/* Default wasm stack size of each app */
+#ifdef __x86_64__
+#define DEFAULT_WASM_STACK_SIZE (12 * 1024)
+#else
+#define DEFAULT_WASM_STACK_SIZE (8 * 1024)
+#endif
+
+/* Default/min/max stack size of each app thread */
+#ifndef __ZEPHYR__
+#define APP_THREAD_STACK_SIZE_DEFAULT (20 * 1024)
+#define APP_THREAD_STACK_SIZE_MIN (16 * 1024)
+#define APP_THREAD_STACK_SIZE_MAX (256 * 1024)
+#else
+#define APP_THREAD_STACK_SIZE_DEFAULT (4 * 1024)
+#define APP_THREAD_STACK_SIZE_MIN (2 * 1024)
+#define APP_THREAD_STACK_SIZE_MAX (256 * 1024)
+#endif
+#endif
+
+/* External memory space provided by user,
+   but not wasm memory space and app heap space */
+#ifndef WASM_ENABLE_EXT_MEMORY_SPACE
+#define WASM_ENABLE_EXT_MEMORY_SPACE 0
+#endif
+
+/* Default base offset of external memory space */
+#define DEFAULT_EXT_MEM_BASE_OFFSET (-2 * BH_GB)
+
+#ifndef bh_printf
+#define bh_printf printf
+#endif
+
diff --git a/scriptsrcs/wamr/core/shared-lib/include/errcode.h 
b/scriptsrcs/wamr/core/shared-lib/include/errcode.h
new file mode 100755
index 0000000..5fc81cb
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/include/errcode.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @file   errcode.h
+ * @date   Wed Feb 29 18:58:30 2012
+ *
+ * @brief  Host-visible error code definition
+ */
+
+#ifndef BEIHAI_ERRCODE_H
+#define BEIHAI_ERRCODE_H
+
+/**
+ * Responses to all remote requests from host to Beihai runtime has a
+ * return error code, which is used to indicate the processing result:
+ * successful or any error occurs.  The following definitions include
+ * all those error codes that may be returned to host.
+ */
+enum {
+    BHE_SUCCESS = 0x000, /* Successful */
+
+    /* General errors: 0x100 */
+    BHE_OUT_OF_MEMORY = 0x101, /* Out of memory */
+    BHE_BAD_PARAMETER = 0x102, /* Bad parameters to native */
+    BHE_INSUFFICIENT_BUFFER = 0x103,
+    BHE_MUTEX_INIT_FAIL = 0x104,
+    BHE_COND_INIT_FAIL = 0x105, /* Cond init fail is not return to
+     * host now, it may be used later.
+     */
+    BHE_WD_TIMEOUT = 0x106, /* Watchdog time out */
+
+    /* Communication: 0x200 */
+    BHE_MAILBOX_NOT_FOUND = 0x201, /* Mailbox not found */
+    BHE_MSG_QUEUE_IS_FULL = 0x202, /* Message queue is full */
+    BHE_MAILBOX_DENIED = 0x203, /* Mailbox is denied by firewall */
+
+    /* Applet manager: 0x300 */
+    BHE_LOAD_JEFF_FAIL = 0x303, /* JEFF file load fail, OOM or file
+     * format error not distinct by
+     * current JEFF loading
+     * process (bool jeff_loader_load).
+     */
+    BHE_PACKAGE_NOT_FOUND = 0x304, /* Request operation on a package,
+     * but it does not exist.
+     */
+    BHE_EXIST_LIVE_SESSION = 0x305, /* Uninstall package fail because of
+     * live session exist.
+     */
+    BHE_VM_INSTANCE_INIT_FAIL = 0x306, /* VM instance init fail when create
+     * session.
+     */
+    BHE_QUERY_PROP_NOT_SUPPORT = 0x307, /* Query applet property that Beihai
+     * does not support.
+     */
+    BHE_INVALID_BPK_FILE = 0x308, /* Incorrect Beihai package format */
+
+    BHE_VM_INSTNACE_NOT_FOUND = 0x312, /* VM instance not found */
+    BHE_STARTING_JDWP_FAIL = 0x313, /* JDWP agent starting fail */
+    BHE_GROUP_CHECK_FAIL = 0x314, /* Group access checking fail*/
+
+    /* Applet instance: 0x400 */
+    BHE_UNCAUGHT_EXCEPTION = 0x401, /* uncaught exception */
+    BHE_APPLET_BAD_PARAMETER = 0x402, /* Bad parameters to applet */
+    BHE_APPLET_SMALL_BUFFER = 0x403, /* Small response buffer */
+
+    /*TODO: Should be removed these UI error code when integrate with ME 9 */
+    /* UI: 0x500 */
+    BHE_UI_EXCEPTION = 0x501,
+    BHE_UI_ILLEGAL_USE = 0x502,
+    BHE_UI_ILLEGAL_PARAMETER = 0x503,
+    BHE_UI_NOT_INITIALIZED = 0x504,
+    BHE_UI_NOT_SUPPORTED = 0x505,
+    BHE_UI_OUT_OF_RESOURCES = 0x506
+};
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/include/jeff_export.h 
b/scriptsrcs/wamr/core/shared-lib/include/jeff_export.h
new file mode 100755
index 0000000..360bba7
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/include/jeff_export.h
@@ -0,0 +1,615 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @file   jeff-export.h
+ * @date   Wed Aug  3 18:17:30 2011
+ *
+ * @brief Exported interface for operating or executing JEFF files.
+ * All interface names start with "jeff_", which is the namespace name
+ * of this module.
+ */
+
+#ifndef JEFF_EXPORT_H
+#define JEFF_EXPORT_H
+
+#include "bni.h"
+#include "korp_types.h"
+
+/********************************************************************
+ *                  Exported internal types
+ ********************************************************************/
+
+/**
+ * JEFF file handle type
+ */
+struct JeffFileHeaderLinked;
+typedef struct JeffFileHeaderLinked *jeff_file_t;
+
+/**
+ * JEFF class type
+ */
+struct JeffClassHeaderLinked;
+typedef struct JeffClassHeaderLinked *jeff_class_t;
+
+/**
+ * VM instance handle type
+ */
+struct JeffInstanceLocalRoot;
+typedef struct JeffInstanceLocalRoot *jeff_instance_t;
+
+/**
+ * Record of one native method's definition.
+ */
+struct JeffNativeMethodDef {
+    /* Mangled name of the native method.  NULL for initialization
+     functions.  */
+    const char *mangled_name;
+
+    /* Points to the native C function.  */
+    void (*func_ptr)(uint32 *);
+
+    /* Return size type of the native function.  */
+    uint32 return_size_type;
+};
+
+/********************************************************************
+ *    Interface for operating global environment of the JEFF VM
+ ********************************************************************/
+
+/**
+ * Load the core library from the given file buffer and initialize the
+ * runtime environment (global objects etc.) of the VM.  The thread
+ * calls this function becomes the supervisor thread, which belongs to
+ * a unique supervisor instance.  Currently, if this init failed,
+ * partially initialized states of the VM runtime environment won't be
+ * cleaned up, so the VM must be shutdown and restarted.  method_defs
+ * points to an array of native method definition records.
+ * Initialization functions must be in the front of the array and
+ * following native method definitions must be sorted by their mangled
+ * names.
+ *
+ * @param file the JEFF file of the core library
+ * @param file_size the size of the JEFF file of the core library
+ * @param method_defs native method definition records
+ * @param method_defs_num number of native method records
+ * @param heap the heap for the current (supervisor) instance
+ *
+ * @return true if succeeds, otherwise the error cannot be recovered
+ */
+bool
+jeff_runtime_init(jeff_file_t file, unsigned file_size,
+        struct JeffNativeMethodDef *method_defs, unsigned method_defs_num,
+        void *heap);
+
+/**
+ * Load a JEFF file into the VM from the given file buffer.  It can be
+ * called from any VM thread.
+ *
+ * @param file the JEFF file to be loaded
+ * @param size the size of the JEFF file
+ * @param is_library whether the JEFF file is a library
+ * @param allow_to_load a function that returns true if classes in the
+ * given package is allowed to be loaded.  The NULL function pointer
+ * allows all packages.
+ * @param allow_to_link a function that returns true if classes in the
+ * given package is allowed to be linked to.  The NULL function
+ * pointer allows all packages.
+ *
+ * @return true if succeeds, otherwise detailed error information is
+ * passed to vmci_diagnostic_print.  The caller can catch it by
+ * implementing that function.
+ */
+bool
+jeff_runtime_load(jeff_file_t file, unsigned size, bool is_library,
+        bool (*allow_to_load)(const uint8 *pname, unsigned len),
+        bool (*allow_to_link)(const uint8 *pname, unsigned plen,
+                const uint8 *cname, unsigned clen));
+
+/**
+ * Unload a JEFF file from the VM.  All resources related to the JEFF
+ * file except the JEFF file itself are released.  It can be called
+ * from any VM thread.
+ *
+ * @param file the JEFF file to be unloaded
+ *
+ * @return true if succeeds, otherwise detailed error information is
+ * passed to vmci_diagnostic_print.  The caller can catch it by
+ * implementing that function.
+ */
+bool
+jeff_runtime_unload(jeff_file_t file);
+
+/**
+ * Return the JEFF file with the given file uid.
+ *
+ * @param fuid the unique id of a loaded JEFF file
+ *
+ * @return the JEFF file is exists, otherwise NULL
+ */
+jeff_file_t
+jeff_runtime_fuid_to_file(unsigned fuid);
+
+/**
+ * Return the file uid of the given JEFF file.
+ *
+ * @param file a loaded JEFF file
+ *
+ * @return the unique id of the given JEFF file
+ */
+unsigned
+jeff_runtime_file_to_fuid(jeff_file_t file);
+
+/**
+ * Create a supervisor thread belonging to the supervisor instance.
+ * Threads that may interact with VM core must be either the main
+ * thread of supervisor instance (which calls jeff_runtime_init) or
+ * created by this function so that VM core required data structures
+ * can be set up correctly.
+ *
+ * @param start_routine the start routine of the new thread
+ * @param arg argument to the start routine
+ *
+ * @return true if succeeds, false otherwise
+ */
+bool
+jeff_runtime_create_supervisor_thread(void* (*start_routine)(void *),
+        void *arg);
+
+/**
+ * Create a supervisor thread belonging to the supervisor instance.
+ * Threads that may interact with VM core must be either the main
+ * thread of supervisor instance (which calls jeff_runtime_init) or
+ * created by this function so that VM core required data structures
+ * can be set up correctly.
+ *
+ * @param start_routine the start routine of the new thread
+ * @param arg argument to the start routine
+ * @param prio thread priority
+ *
+ * @return true if succeeds, false otherwise
+ */
+bool
+jeff_runtime_create_supervisor_thread_with_prio(void* (*start_routine)(void *),
+        void *arg, int prio);
+
+/********************************************************************
+ *      Interface for operating instance local environment
+ ********************************************************************/
+
+/**
+ * Create a VM instance with the given JEFF file as its main file,
+ * (i.e. the file containing the main class of the VM instance).  This
+ * function can be called from any VM thread, but it must be isolated
+ * from JEFF file's unloading operation so that the main file won't be
+ * unloaded before it's locked by the new instance.  All instance
+ * local memory except stacks of threads are allocated from the given
+ * heap.  If succeeds, it increases reference count of the main_file
+ * and returns the handle of the new VM instance.  The new instance's
+ * main thread will run the start_routine with argument arg.  If the
+ * cleanup_routine is not NULL, it will be called after start_routine
+ * returns and just before the main thread exits.  It will also be
+ * called after the instance is destroied.  It is guaranteed to be
+ * called exactly once no matter how the instance terminates.
+ *
+ * @param main_file the main JEFF file of the new instance
+ * @param heap the private heap of the new instance
+ * @param stack_depth the maximal nesting levels of Java methods of
+ * the new instance.  It must be <= 16 * 1024.  Otherwise the instance
+ * creation will fail.
+ * @param start_routine start routine of the main thread.  Don't
+ * destroy the heap or inform other thread to do this at the end of
+ * this routine since after it returns, VM core will call destroy
+ * functions on objects allocated in this heap (e.g. locks and
+ * condition variables).  Do the destroying or informing of destroying
+ * in the cleanup_routine.
+ * @param arg the instance argument that will be passed to the start
+ * routine.  It can be get or set by jeff_runtime_get_instance_arg and
+ * jeff_runtime_set_instance arg from threads of the instance.  The
+ * caller can use it to store instance local data.
+ * @param cleanup_routine the optional cleanup routine for the
+ * instance, which may be NULL.  It may be executed in the end of the
+ * main thread of the created instance by this function if this
+ * instance exits normally, or it may be executed in a thread of other
+ * instance in case this instance is being killed by that instance.
+ * In both cases, this routine regards it is executed in a thread of
+ * this instance (the instance created by this function) because
+ * jeff_runtime_get_instance_arg will always return the argument of
+ * this instance.
+ *
+ * @return the VM instance handle if succeeds, NULL otherwise
+ */
+jeff_instance_t
+jeff_runtime_create_instance(jeff_file_t main_file, void *heap,
+        unsigned stack_depth, void* (*start_routine)(void *), void *arg,
+        void (*cleanup_routine)(void));
+
+/**
+ * Destroy the given VM instance and decrease the reference count of
+ * its main file and all explicitly used JEFF files.  It can be called
+ * from any VM thread.  If there are alive threads of the instance,
+ * they will be terminated mandatorily and then the cleanup routine is
+ * called if it's not NULL.
+ *
+ * @param handle the handle of the instance to be destroyed
+ */
+void
+jeff_runtime_destroy_instance(jeff_instance_t handle);
+
+/**
+ * Retrieve the current instance's argument.
+ *
+ * @return the current instance's argument
+ */
+void*
+jeff_runtime_get_instance_arg(void);
+
+/**
+ * Set the current instance's argument.
+ *
+ * @return the new argument for the current instance
+ */
+void
+jeff_runtime_set_instance_arg(void *arg);
+
+/**
+ * Retrieve the current instance's heap.
+ *
+ * @return the current instance's heap
+ */
+void*
+jeff_runtime_get_instance_heap(void);
+
+/**
+ * Suspend all threads of the given VM instance.  This function can
+ * only be called from thread that is not of the given VM instance.
+ *
+ * @param handle the handle of the instance to be suspended
+ */
+void
+jeff_runtime_suspend_instance(jeff_instance_t handle);
+
+/**
+ * Resume all threads of the given VM instance.  This function can
+ * only be called from thread that is not of the given VM instance.
+ *
+ * @param handle the handle of the instance to be resumed
+ */
+void
+jeff_runtime_resume_instance(jeff_instance_t handle);
+
+/**
+ * Interrupt all threads of the given VM instance.  This function can
+ * only be called from thread that is not of the given VM instance.
+ *
+ * @param handle the handle of the instance to be interrupted
+ * @param by_force whether the interruption is by force
+ */
+void
+jeff_runtime_interrupt_instance(jeff_instance_t handle, bool by_force);
+
+/**
+ * Wait for the given VM instance to terminate.
+ *
+ * @param ilr the VM instance to be waited for
+ * @param mills wait millseconds to return
+ */
+void
+jeff_runtime_wait_for_instance(jeff_instance_t ilr, int mills);
+
+/********************************************************************
+ *       Interface for operating thread local environment
+ ********************************************************************/
+
+/**
+ * Return true if there is an uncaught exception (thrown during
+ * running an application or applet command).
+ *
+ * @return true if there is an uncaught exception
+ */
+bool
+jeff_runtime_check_uncaught_exception(void);
+
+/**
+ * Print qualified name of the uncaught exception (and stack trace if
+ * enabled) by calling vmci_diagnostic_print.
+ */
+void
+jeff_runtime_print_uncaught_exception(void);
+
+/**
+ * Clear the uncaught exception.
+ */
+void
+jeff_runtime_reset_uncaught_exception(void);
+
+/**
+ * Change current thread to a safe state (VMWAIT).  After calling this
+ * and before calling jeff_runtime_exit_safe_state, all operations
+ * must be safe, i.e. no GC or system level resource operations are
+ * allowed because in a safe state, the VM instance is assumed to be
+ * able to perform GC, JDWP or termination at any time.  Usually, this
+ * function is called just before the native code is going to wait for
+ * something and the exiting safe state function is called just after
+ * the waiting returns.
+ */
+void
+jeff_runtime_enter_safe_state(void);
+
+/**
+ * Change current thread to an unsafe state (RUNNING) so that unsafe
+ * operations can also be done.
+ */
+void
+jeff_runtime_exit_safe_state(void);
+
+/**
+ * Set thread local error code for the current thread.
+ *
+ * @param code the error code to be set
+ */
+void
+jeff_runtime_set_error(unsigned code);
+
+/**
+ * Get the last error code of current thread.
+ *
+ * @return the last error code of current thread
+ */
+unsigned
+jeff_runtime_get_error(void);
+
+/********************************************************************
+ *                  Interface for GC support
+ ********************************************************************/
+
+/**
+ * Traverse all objects of the given heap that are global or locate in
+ * threads' frames and return them by calling vmci_gc_rootset_elem.
+ * This function will suspend all threads except the current one of
+ * the VM instance owning the given heap before traversing.  It
+ * traverses either all or none of the rootset objects, and returns
+ * true and false respectively.  If it returns false, the GC process
+ * shouldn't proceed and is not necessary to unmark anything because
+ * no objects are marked.  The function jeff_runtime_gc_finished must
+ * be called if and only if this function returns true so as to resume
+ * threads that are suspended during GC process.
+ *
+ * @param heap the heap for which rootset objects are looked up
+ *
+ * @return true if succeeds, false otherwise
+ */
+bool
+jeff_runtime_traverse_gc_rootset(void *heap);
+
+/**
+ * Get the reference offset table of the given object.  If the
+ * returned value R >= 0, *ret points to the reference offset table of
+ * the object and R is the number of offsets in the table.  Otherwise,
+ * if the returned value R < 0, all reference fields of the object
+ * must be in a continuous region (usually the object is an array),
+ * then *ret is the offset to the first field in the region and R is
+ * the number of such fields in the region.
+ *
+ * @param obj pointer to the Java object
+ * @param ret points to a pointer for storing the reference offset
+ * table if return value >= 0, or for storing the offset to the first
+ * object reference in the Java object if return value < 0
+ *
+ * @return number of offsets in the reference_offset table if >= 0, or
+ * number of object references in the object if < 0
+ */
+int
+jeff_object_get_reference_offsets(const jobject obj, uint16 **ret);
+
+/**
+ * Inform the containing VM instance that GC has finished and all
+ * suspended threads can be resumed.  This function must be called if
+ * and only if jeff_runtime_traverse_gc_rootset returns true.
+ */
+void
+jeff_runtime_gc_finished(void);
+
+/********************************************************************
+ *              Interface for tooling support
+ ********************************************************************/
+
+/**
+ * This function is used to suspend the main thread of VM instance so
+ * that debugger can have chance to connect to the VM instance, set
+ * breakpoints and do any other debug settings.  It must be called
+ * from the main thread of VM instance at the point just after VM
+ * instance initialization finishes and just before application code
+ * is to be executed.
+ */
+void
+jeff_tool_suspend_self(void);
+
+/**
+ * Start up tool agent thread for the given VM instance.  It can be
+ * called from any VM thread.
+ *
+ * @param handle the VM instance for which tool agent is started up
+ * @param queue queue of the tool agent
+ * @return true if succeeds, false otherwise
+ */
+bool
+jeff_tool_start_agent(jeff_instance_t handle, void *queue);
+
+/********************************************************************
+ *              Interface for toolkit support
+ ********************************************************************/
+
+/**
+ * Return the JEFF class pointer of the given class name.
+ *
+ * @param class_name the qualified class name
+ *
+ * @return the JEFF class pointer
+ */
+jeff_class_t
+jeff_tool_get_jeff_class(const char *class_name);
+
+/**
+ * Get the mangled class name of the given class.
+ *
+ * @param clz the JEFF class
+ * @param buf buffer for returning the mangled name
+ * @param buf_size size of the buffer
+ *
+ * @return actual size of the mangled class name including the
+ * terminating null byte
+ */
+unsigned
+jeff_tool_get_mangled_class_name(jeff_class_t clz, char *buf,
+        unsigned buf_size);
+
+/**
+ * Get class index of given class in its containing JEFF file.
+ *
+ * @param clz the JEFF class
+ *
+ * @return class index in the containing JEFF file
+ */
+int
+jeff_tool_get_class_index(jeff_class_t clz);
+
+/**
+ * Callback handler prototype for traversing fields of class.
+ *
+ * @param arg argument passed to the handler from caller
+ * @param access_flag access flag of the method
+ * @param name the field name
+ * @param descriptor mangled field type descriptor
+ * @param offset the offset of the field in the class
+ * @param size size of the field
+ */
+typedef void
+(*JeffToolFieldHandler)(void *arg, unsigned access_flag, const char *name,
+        const char *descriptor, unsigned offset, unsigned size);
+
+/**
+ * Traverse all fields of the given class, including those inherited
+ * from super classes.  The fields are traversed in the same order as
+ * the field layout of the class.
+ *
+ * @param arg argument to be passed to the handler
+ * @param clz the JEFF class
+ * @param instance instance fields or static fielts
+ * @param handler the callback handler for each field
+ */
+void
+jeff_tool_foreach_field(void *arg, jeff_class_t clz, bool instance,
+        JeffToolFieldHandler handler);
+
+/**
+ * Callback handler prototype for traversing methods of class.
+ *
+ * @param arg argument passed to the handler from caller
+ * @param access_flag access flag of the method
+ * @param name mangled name of the method
+ * @param descriptor mangled method arguments descriptor
+ * @param retune_type mangled descriptor of method's return type
+ */
+typedef void
+(*JeffToolMethodHandler)(void *arg, unsigned access_flag, const char *name,
+        const char *descriptor, const char *return_type);
+
+/**
+ * Traverse all methods of the given class.
+ *
+ * @param arg argument to be passed to the handler
+ * @param clz the JEFF class
+ * @param handler the callback handler for each method
+ */
+void
+jeff_tool_foreach_method(void *arg, jeff_class_t clz,
+        JeffToolMethodHandler handler);
+
+/**
+ * Callback handler prototype for traversing classes of main file.
+ *
+ * @param arg argument passed to the handler from caller
+ * @param clz pointer to one class in the main file
+ */
+typedef void
+(*JeffToolClassHandler)(void *arg, jeff_class_t clz);
+
+/**
+ * Traverse all classes of the main file.
+ *
+ * @param arg argument to be passed to the handler
+ * @param handler the callback handler for each class
+ */
+void
+jeff_tool_foreach_class(void *arg, JeffToolClassHandler handler);
+
+/********************************************************************
+ *              Interface for executing applications
+ ********************************************************************/
+
+/**
+ * Initialize global environment for executing Java applications.
+ *
+ * @return true if succeeds, false otherwise
+ */
+bool
+jeff_application_env_init(void);
+
+/**
+ * Find the unique class containing a public static "main
+ * ([Ljava.lang.String;)V" method from the main JEFF file of the
+ * current instance and execute that method.
+ *
+ * @param argc the number of arguments
+ * @param argv the arguments array
+ *
+ * @return true if the main method is called, false otherwise (e.g. an
+ * exception occurs when preparing the arguments Java string array)
+ */
+bool
+jeff_application_execute(int argc, char *argv[]);
+
+/********************************************************************
+ *              Interface for executing applets
+ ********************************************************************/
+
+/**
+ * Initialize global environment for executing applets.
+ *
+ * @return true if succeeds, false otherwise
+ */
+bool
+jeff_applet_env_init(void);
+
+/**
+ * Start to run from com.intel.runtime.core.RuntimeContext.main with a
+ * default message queue size and a default service class object.  If
+ * the main JEFF file of the current VM instance contains exactly one
+ * class that is derived from com.intel.util.IntelApplet, then use it
+ * as the default service class.
+ *
+ * @param queue_size the default main message queue size
+ * @param default_service_class qualified class name of the default
+ * service class (entry point class), which must be in the main JEFF
+ * file.  If NULL, find the default main class with rules described
+ * above.
+ *
+ * @return true if succeeds, false otherwise
+ */
+bool
+jeff_applet_start(int queue_size, const char *default_service_class);
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/include/korp_types.h 
b/scriptsrcs/wamr/core/shared-lib/include/korp_types.h
new file mode 100755
index 0000000..daf6d6f
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/include/korp_types.h
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _KORP_TYPES_H
+#define _KORP_TYPES_H
+
+#include "bh_platform.h"
+/* all types used in kORP should be explicit sized */
+typedef struct _korp_object korp_object;
+
+typedef unsigned int obj_info;
+typedef korp_object* ref;
+
+#define BYTES_OF_OBJ_INFO 4
+#define BYTES_OF_REF     4
+
+/* don't change the number, it's hardcoded in kORP */
+enum _korp_array_type {
+    ARRAY_UINT8 = 0, /* bytes_of_uint8 = 1 << ARRAY_UINT8 */
+    ARRAY_UINT16 = 1, /* bytes_of_uint16 = 1 << ARRAY_UINT16 */
+    ARRAY_UINT32 = 2, /* bytes_of_uint32 = 1 << ARRAY_UINT32 */
+    ARRAY_UINT64 = 3, /* bytes_of_uint64 = 1 << ARRAY_UINT64 */
+    ARRAY_BOOLEAN = 4,
+    ARRAY_CHAR = 5,
+    ARRAY_FLOAT = 6,
+    ARRAY_DOUBLE = 7,
+    ARRAY_BYTE = 8,
+    ARRAY_SHORT = 9,
+    ARRAY_INT = 10,
+    ARRAY_LONG = 11,
+    ARRAY_REF = 12 /* for calculation */
+};
+
+enum _korp_java_type {
+    JAVA_TYPE_WRONG = 0,
+    JAVA_TYPE_BYTE = 'B',
+    JAVA_TYPE_CHAR = 'C',
+    JAVA_TYPE_DOUBLE = 'D',
+    JAVA_TYPE_FLOAT = 'F',
+    JAVA_TYPE_INT = 'I',
+    JAVA_TYPE_LONG = 'J',
+    JAVA_TYPE_SHORT = 'S',
+    JAVA_TYPE_BOOLEAN = 'Z',
+    JAVA_TYPE_CLASS = 'L',
+    JAVA_TYPE_ARRAY = '[',
+    JAVA_TYPE_VOID = 'V',
+    JAVA_TYPE_STRING = '$' /* for TAG_String const value */
+};
+
+enum korp_modifier_type {
+    MOD_PUBLIC = 0x0001, /* Class      Field   Method  */
+    MOD_PRIVATE = 0x0002, /*                   Field   Method  */
+    MOD_PROTECTED = 0x0004, /*                 Field   Method  */
+    MOD_STATIC = 0x0008, /*                    Field   Method  */
+    MOD_FINAL = 0x0010, /* Class       Field   Method  */
+    MOD_SUPER = 0x0020, /* Class                    */
+    MOD_SYNCHRONIZED = 0x0020, /*                                      Method  
*/
+    MOD_VOLATILE = 0x0040, /*                  Field           */
+    MOD_TRANSIENT = 0x0080, /*                 Field           */
+    MOD_NATIVE = 0x0100, /*                                    Method  */
+    MOD_INTERFACE = 0x0200, /* Class                    */
+    MOD_ABSTRACT = 0x0400, /* Class                    Method  */
+    MOD_STRICT = 0x0800 /*                  Method  */
+};
+
+/* object header, used to access object info */
+struct _korp_object {
+    obj_info header; /* object header (I) */
+};
+
+#define HASH_TABLE_SIZE 359
+
+#ifndef NULL
+#define NULL (void*)0
+#endif
+
+#define KORP_ERROR (-1)
+
+#ifndef __cplusplus
+#define true 1
+#define false 0
+#define inline __inline
+#endif
+
+/* forwarded declarations */
+typedef struct _korp_string_pool korp_string_pool;
+typedef struct _korp_class_table korp_class_table;
+
+typedef enum _korp_loader_exception {
+    LD_OK = 0,
+    LD_NoClassDefFoundError,
+    LD_ClassFormatError,
+    LD_ClassCircularityError,
+    LD_IncompatibleClassChangeError,
+    LD_AbstractMethodError, /* occurs during preparation */
+    LD_IllegalAccessError,
+    LD_InstantiationError,
+    LD_NoSuchFieldError,
+    LD_NoSuchMethodError,
+    LD_UnsatisfiedLinkError,
+    LD_VerifyError
+} korp_loader_exception;
+
+typedef enum _korp_java_type korp_java_type;
+typedef enum _korp_array_type korp_array_type;
+
+/* typedef struct _korp_thread korp_thread; */
+typedef struct _korp_method korp_method;
+typedef struct _korp_field korp_field;
+typedef struct _korp_class korp_class;
+typedef struct _korp_string korp_string;
+typedef struct _korp_package korp_package;
+typedef struct _korp_class_loader korp_class_loader;
+typedef struct _korp_ref_array korp_ref_array;
+
+typedef struct _korp_entry korp_entry;
+typedef struct _korp_preloaded korp_preloaded;
+typedef struct _korp_env korp_env;
+
+typedef struct _korp_java_array korp_java_array;
+typedef struct _korp_uint8_array korp_uint8_array;
+
+typedef struct _korp_vm_thread_list korp_vm_thread_list;
+
+#define korp_uint8      korp_uint32
+#define korp_uint16     korp_uint32
+#define korp_boolean    korp_uint32
+#define korp_char       korp_uint32
+#define korp_short      korp_uint32
+#define korp_int        korp_uint32
+#define korp_float      korp_uint32
+
+#define korp_long       korp_uint64
+#define korp_double     korp_uint64
+
+#define korp_boolean_array      korp_uint8_array
+#define korp_char_array         korp_uint8_array
+#define korp_short_array        korp_uint16_array
+#define korp_int_array          korp_uint32_array
+#define korp_float_array        korp_uint32_array
+#define korp_double_array       korp_uint64_array
+#define korp_long_array         korp_uint64_array
+
+#define korp_code       korp_uint8_array
+
+#endif /* #ifndef _KORP_TYPES_H */
+
diff --git a/scriptsrcs/wamr/core/shared-lib/include/mem_alloc.h 
b/scriptsrcs/wamr/core/shared-lib/include/mem_alloc.h
new file mode 100755
index 0000000..acda4a9
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/include/mem_alloc.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __MEM_ALLOC_H
+#define __MEM_ALLOC_H
+
+#include <inttypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void *mem_allocator_t;
+
+mem_allocator_t
+mem_allocator_create(void *mem, uint32_t size);
+
+void
+mem_allocator_destroy(mem_allocator_t allocator);
+
+void *
+mem_allocator_malloc(mem_allocator_t allocator, uint32_t size);
+
+void
+mem_allocator_free(mem_allocator_t allocator, void *ptr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef __MEM_ALLOC_H */
+
diff --git a/scriptsrcs/wamr/core/shared-lib/mem-alloc/bh_memory.c 
b/scriptsrcs/wamr/core/shared-lib/mem-alloc/bh_memory.c
new file mode 100755
index 0000000..f0a6641
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/mem-alloc/bh_memory.c
@@ -0,0 +1,330 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_config.h"
+#include "bh_platform.h"
+#include "bh_memory.h"
+#include "mem_alloc.h"
+#include <stdlib.h>
+
+#if BEIHAI_ENABLE_MEMORY_PROFILING != 0
+#include "bh_thread.h"
+
+/* Memory profile data of a function */
+typedef struct memory_profile {
+  struct memory_profile *next;
+  const char *function_name;
+  const char *file_name;
+  int line_in_file;
+  int malloc_num;
+  int free_num;
+  int total_malloc;
+  int total_free;
+} memory_profile_t;
+
+/* Memory in use which grows when bh_malloc was called
+ * and decreases when bh_free was called */
+static unsigned int memory_in_use = 0;
+
+/* Memory profile data list */
+static memory_profile_t *memory_profiles_list = NULL;
+
+/* Lock of the memory profile list */
+static korp_mutex profile_lock;
+#endif
+
+#ifndef MALLOC_MEMORY_FROM_SYSTEM
+
+typedef enum Memory_Mode {
+    MEMORY_MODE_UNKNOWN = 0,
+    MEMORY_MODE_POOL,
+    MEMORY_MODE_ALLOCATOR
+} Memory_Mode;
+
+static Memory_Mode memory_mode = MEMORY_MODE_UNKNOWN;
+
+static mem_allocator_t pool_allocator = NULL;
+
+static void *(*malloc_func)(unsigned int size) = NULL;
+static void (*free_func)(void *ptr) = NULL;
+
+static unsigned int global_pool_size;
+
+int bh_memory_init_with_pool(void *mem, unsigned int bytes)
+{
+    mem_allocator_t _allocator = mem_allocator_create(mem, bytes);
+
+    if (_allocator) {
+        memory_mode = MEMORY_MODE_POOL;
+        pool_allocator = _allocator;
+#if BEIHAI_ENABLE_MEMORY_PROFILING != 0
+        vm_mutex_init(&profile_lock);
+#endif
+        global_pool_size = bytes;
+        return 0;
+    }
+    bh_printf("Init memory with pool (%p, %u) failed.\n", mem, bytes);
+    return -1;
+}
+
+int bh_memory_init_with_allocator(void *_malloc_func, void *_free_func)
+{
+    if (_malloc_func && _free_func && _malloc_func != _free_func) {
+        memory_mode = MEMORY_MODE_ALLOCATOR;
+        malloc_func = _malloc_func;
+        free_func = _free_func;
+#if BEIHAI_ENABLE_MEMORY_PROFILING != 0
+        vm_mutex_init(&profile_lock);
+#endif
+        return 0;
+    }
+    bh_printf("Init memory with allocator (%p, %p) failed.\n", _malloc_func,
+            _free_func);
+    return -1;
+}
+
+void bh_memory_destroy()
+{
+#if BEIHAI_ENABLE_MEMORY_PROFILING != 0
+    vm_mutex_destroy(&profile_lock);
+#endif
+    if (memory_mode == MEMORY_MODE_POOL)
+        mem_allocator_destroy(pool_allocator);
+    memory_mode = MEMORY_MODE_UNKNOWN;
+}
+
+int bh_memory_pool_size()
+{
+    if (memory_mode == MEMORY_MODE_POOL)
+        return global_pool_size;
+    else
+        return 1 * BH_GB;
+}
+
+void* bh_malloc_internal(unsigned int size)
+{
+    if (memory_mode == MEMORY_MODE_UNKNOWN) {
+        bh_printf("bh_malloc failed: memory hasn't been initialize.\n");
+        return NULL;
+    } else if (memory_mode == MEMORY_MODE_POOL) {
+        return mem_allocator_malloc(pool_allocator, size);
+    } else {
+        return malloc_func(size);
+    }
+}
+
+void bh_free_internal(void *ptr)
+{
+    if (memory_mode == MEMORY_MODE_UNKNOWN) {
+        bh_printf("bh_free failed: memory hasn't been initialize.\n");
+    } else if (memory_mode == MEMORY_MODE_POOL) {
+        mem_allocator_free(pool_allocator, ptr);
+    } else {
+        free_func(ptr);
+    }
+}
+
+#if BEIHAI_ENABLE_MEMORY_PROFILING != 0
+void* bh_malloc_profile(const char *file,
+                        int line,
+                        const char *func,
+                        unsigned int size)
+{
+    void *p = bh_malloc_internal(size + 8);
+
+    if (p) {
+        memory_profile_t *profile;
+
+        vm_mutex_lock(&profile_lock);
+
+        profile = memory_profiles_list;
+        while (profile) {
+            if (strcmp(profile->function_name, func) == 0
+                && strcmp(profile->file_name, file) == 0) {
+                break;
+            }
+            profile = profile->next;
+        }
+
+        if (profile) {
+            profile->total_malloc += size;/* TODO: overflow check */
+            profile->malloc_num++;
+        } else {
+            profile = bh_malloc_internal(sizeof(memory_profile_t));
+            if (!profile) {
+              vm_mutex_unlock(&profile_lock);
+              memcpy(p, &size, sizeof(size));
+              return (char *)p + 8;
+            }
+
+            memset(profile, 0, sizeof(memory_profile_t));
+            profile->file_name = file;
+            profile->line_in_file = line;
+            profile->function_name = func;
+            profile->malloc_num = 1;
+            profile->total_malloc = size;
+            profile->next = memory_profiles_list;
+            memory_profiles_list = profile;
+        }
+
+        vm_mutex_unlock(&profile_lock);
+
+        memcpy(p, &size, sizeof(size));
+        memory_in_use += size;
+
+        memory_profile_print(file, line, func, size);
+
+        return (char *)p + 8;
+    }
+
+    return NULL;
+}
+
+void bh_free_profile(const char *file, int line, const char *func, void *ptr)
+{
+    unsigned int size = *(unsigned int *)((char *)ptr - 8);
+    memory_profile_t *profile;
+
+    bh_free_internal((char *)ptr - 8);
+
+    if (memory_in_use >= size)
+        memory_in_use -= size;
+
+    vm_mutex_lock(&profile_lock);
+
+    profile = memory_profiles_list;
+    while (profile) {
+        if (strcmp(profile->function_name, func) == 0
+            && strcmp(profile->file_name, file) == 0) {
+            break;
+        }
+        profile = profile->next;
+    }
+
+    if (profile) {
+        profile->total_free += size;/* TODO: overflow check */
+        profile->free_num++;
+    } else {
+        profile = bh_malloc_internal(sizeof(memory_profile_t));
+        if (!profile) {
+            vm_mutex_unlock(&profile_lock);
+            return;
+        }
+
+        memset(profile, 0, sizeof(memory_profile_t));
+        profile->file_name = file;
+        profile->line_in_file = line;
+        profile->function_name = func;
+        profile->free_num = 1;
+        profile->total_free = size;
+        profile->next = memory_profiles_list;
+        memory_profiles_list = profile;
+    }
+
+    vm_mutex_unlock(&profile_lock);
+}
+
+/**
+ * Summarize memory usage and print it out
+ * Can use awk to analyze the output like below:
+ * awk -F: '{print $2,$4,$6,$8,$9}' OFS="\t" ./out.txt | sort -n -r -k 1
+ */
+void memory_usage_summarize()
+{
+    memory_profile_t *profile;
+
+    vm_mutex_lock(&profile_lock);
+
+    profile = memory_profiles_list;
+    while (profile) {
+        bh_printf("malloc:%d:malloc_num:%d:free:%d:free_num:%d:%s\n",
+            profile->total_malloc,
+            profile->malloc_num,
+            profile->total_free,
+            profile->free_num,
+            profile->function_name);
+        profile = profile->next;
+    }
+
+    vm_mutex_unlock(&profile_lock);
+}
+
+void memory_profile_print(const char *file,
+                          int line,
+                          const char *func,
+                          int alloc)
+{
+    bh_printf("location:%s@%d:used:%d:contribution:%d\n",
+           func, line, memory_in_use, alloc);
+}
+
+#else
+
+void* bh_malloc(unsigned int size)
+{
+    return bh_malloc_internal(size);
+}
+
+void bh_free(void *ptr)
+{
+    bh_free_internal(ptr);
+}
+#endif
+
+#else /* else of MALLOC_MEMORY_FROM_SYSTEM */
+
+#if BEIHAI_ENABLE_MEMORY_PROFILING == 0
+
+void* bh_malloc(unsigned int size)
+{
+    return malloc(size);
+}
+
+void bh_free(void *ptr)
+{
+    if (ptr)
+        free(ptr);
+}
+
+#else /* else of BEIHAI_ENABLE_MEMORY_PROFILING */
+
+void* bh_malloc_profile(const char *file,
+                        int line,
+                        const char *func,
+                        unsigned int size)
+{
+    (void)file;
+    (void)line;
+    (void)func;
+
+    (void)memory_profiles_list;
+    (void)profile_lock;
+    (void)memory_in_use;
+
+    return malloc(size);
+}
+
+void bh_free_profile(const char *file, int line, const char *func, void *ptr)
+{
+    (void)file;
+    (void)line;
+    (void)func;
+
+    if (ptr)
+        free(ptr);
+}
+#endif /* end of BEIHAI_ENABLE_MEMORY_PROFILING */
+#endif /* end of MALLOC_MEMORY_FROM_SYSTEM*/
diff --git a/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_alloc.c 
b/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_alloc.c
new file mode 100755
index 0000000..2c27b71
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_alloc.c
@@ -0,0 +1,590 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ems_gc_internal.h"
+
+#if !defined(NVALGRIND)
+#include <valgrind/memcheck.h>
+#endif
+
+static int hmu_is_in_heap(gc_heap_t* heap, hmu_t* hmu)
+{
+    return heap && hmu && (gc_uint8*) hmu >= heap->base_addr
+            && (gc_uint8*) hmu < heap->base_addr + heap->current_size;
+}
+
+/* Remove a node from the tree it belongs to*/
+
+/* @p can not be NULL*/
+/* @p can not be the ROOT node*/
+
+/* Node @p will be removed from the tree and left,right,parent pointers of 
node @p will be*/
+/*  set to be NULL. Other fields will not be touched.*/
+/* The tree will be re-organized so that the order conditions are still 
satisified.*/
+BH_STATIC void remove_tree_node(hmu_tree_node_t *p)
+{
+    hmu_tree_node_t *q = NULL, **slot = NULL;
+
+    bh_assert(p);
+    bh_assert(p->parent); /* @p can not be the ROOT node*/
+
+    /* get the slot which holds pointer to node p*/
+    if (p == p->parent->right) {
+        slot = &p->parent->right;
+    } else {
+        bh_assert(p == p->parent->left); /* @p should be a child of its 
parent*/
+        slot = &p->parent->left;
+    }
+
+    /* algorithms used to remove node p*/
+    /* case 1: if p has no left child, replace p with its right child*/
+    /* case 2: if p has no right child, replace p with its left child*/
+    /* case 3: otherwise, find p's predecessor, remove it from the tree and 
replace p with it.*/
+    /*         use predecessor can keep the left <= root < right condition.*/
+
+    if (!p->left) {
+        /* move right child up*/
+        *slot = p->right;
+        if (p->right)
+            p->right->parent = p->parent;
+
+        p->left = p->right = p->parent = NULL;
+        return;
+    }
+
+    if (!p->right) {
+        /* move left child up*/
+        *slot = p->left;
+        p->left->parent = p->parent; /* p->left can never be NULL.*/
+
+        p->left = p->right = p->parent = NULL;
+        return;
+    }
+
+    /* both left & right exist, find p's predecessor at first*/
+    q = p->left;
+    while (q->right)
+        q = q->right;
+    remove_tree_node(q); /* remove from the tree*/
+
+    *slot = q;
+    q->parent = p->parent;
+    q->left = p->left;
+    q->right = p->right;
+    if (q->left)
+        q->left->parent = q;
+    if (q->right)
+        q->right->parent = q;
+
+    p->left = p->right = p->parent = NULL;
+}
+
+static void unlink_hmu(gc_heap_t *heap, hmu_t *hmu)
+{
+    gc_size_t size;
+
+    bh_assert(gci_is_heap_valid(heap));
+    bh_assert(
+            hmu && (gc_uint8*) hmu >= heap->base_addr
+                    && (gc_uint8*) hmu < heap->base_addr + heap->current_size);
+    bh_assert(hmu_get_ut(hmu) == HMU_FC);
+
+    size = hmu_get_size(hmu);
+
+    if (HMU_IS_FC_NORMAL(size)) {
+        int node_idx = size >> 3;
+        hmu_normal_node_t* node = heap->kfc_normal_list[node_idx].next;
+        hmu_normal_node_t** p = &(heap->kfc_normal_list[node_idx].next);
+        while (node) {
+            if ((hmu_t*) node == hmu) {
+                *p = node->next;
+                break;
+            }
+            p = &(node->next);
+            node = node->next;
+        }
+
+        if (!node) {
+            bh_printf("[GC_ERROR]couldn't find the node in the normal list");
+        }
+    } else {
+        remove_tree_node((hmu_tree_node_t *) hmu);
+    }
+}
+
+static void hmu_set_free_size(hmu_t *hmu)
+{
+    gc_size_t size;
+    bh_assert(hmu && hmu_get_ut(hmu) == HMU_FC);
+
+    size = hmu_get_size(hmu);
+    *((int*) ((char*) hmu + size) - 1) = size;
+}
+
+/* Add free chunk back to KFC*/
+
+/* @heap should not be NULL and it should be a valid heap*/
+/* @hmu should not be NULL and it should be a HMU of length @size inside 
@heap*/
+/* @hmu should be aligned to 8*/
+/* @size should be positive and multiple of 8*/
+
+/* @hmu with size @size will be added into KFC as a new FC.*/
+void gci_add_fc(gc_heap_t *heap, hmu_t *hmu, gc_size_t size)
+{
+    hmu_normal_node_t *np = NULL;
+    hmu_tree_node_t *root = NULL, *tp = NULL, *node = NULL;
+    int node_idx;
+
+    bh_assert(gci_is_heap_valid(heap));
+    bh_assert(
+            hmu && (gc_uint8*) hmu >= heap->base_addr
+                    && (gc_uint8*) hmu < heap->base_addr + heap->current_size);
+    bh_assert(((gc_uint32) hmu_to_obj(hmu) & 7) == 0);
+    bh_assert(
+            size > 0
+                    && ((gc_uint8*) hmu) + size
+                            <= heap->base_addr + heap->current_size);
+    bh_assert(!(size & 7));
+
+    hmu_set_ut(hmu, HMU_FC);
+    hmu_set_size(hmu, size);
+    hmu_set_free_size(hmu);
+
+    if (HMU_IS_FC_NORMAL(size)) {
+        np = (hmu_normal_node_t*) hmu;
+
+        node_idx = size >> 3;
+        np->next = heap->kfc_normal_list[node_idx].next;
+        heap->kfc_normal_list[node_idx].next = np;
+        return;
+    }
+
+    /* big block*/
+    node = (hmu_tree_node_t*) hmu;
+    node->size = size;
+    node->left = node->right = node->parent = NULL;
+
+    /* find proper node to link this new node to*/
+    root = &heap->kfc_tree_root;
+    tp = root;
+    bh_assert(tp->size < size);
+    while (1) {
+        if (tp->size < size) {
+            if (!tp->right) {
+                tp->right = node;
+                node->parent = tp;
+                break;
+            }
+            tp = tp->right;
+        } else /* tp->size >= size*/
+        {
+            if (!tp->left) {
+                tp->left = node;
+                node->parent = tp;
+                break;
+            }
+            tp = tp->left;
+        }
+    }
+}
+
+/* Find a proper hmu for required memory size*/
+
+/* @heap should not be NULL and it should be a valid heap*/
+/* @size should cover the header and it should be 8 bytes aligned*/
+
+/* GC will not be performed here.*/
+/* Heap extension will not be performed here.*/
+
+/* A proper HMU will be returned. This HMU can include the header and given 
size. The returned HMU will be aligned to 8 bytes.*/
+/* NULL will be returned if there are no proper HMU.*/
+BH_STATIC hmu_t *alloc_hmu(gc_heap_t *heap, gc_size_t size)
+{
+    hmu_normal_node_t *node = NULL, *p = NULL;
+    int node_idx = 0, init_node_idx = 0;
+    hmu_tree_node_t *root = NULL, *tp = NULL, *last_tp = NULL;
+    hmu_t *next, *rest;
+
+    bh_assert(gci_is_heap_valid(heap));
+    bh_assert(size > 0 && !(size & 7));
+
+    if (size < GC_SMALLEST_SIZE)
+        size = GC_SMALLEST_SIZE;
+
+    /* check normal list at first*/
+    if (HMU_IS_FC_NORMAL(size)) {
+        /* find a non-empty slot in normal_node_list with good size*/
+        init_node_idx = (int) (size >> 3);
+        for (node_idx = init_node_idx; node_idx < HMU_NORMAL_NODE_CNT;
+                node_idx++) {
+            node = heap->kfc_normal_list + node_idx;
+            if (node->next)
+                break;
+            node = NULL;
+        }
+
+        /* not found in normal list*/
+        if (node) {
+            bh_assert(node_idx >= init_node_idx);
+
+            p = node->next;
+            node->next = p->next;
+            bh_assert(((gc_int32) hmu_to_obj(p) & 7) == 0);
+
+            if ((gc_size_t) node_idx
+                    != init_node_idx&& ((gc_size_t)node_idx << 3) >= size + 
GC_SMALLEST_SIZE) { /* with bigger size*/
+                rest = (hmu_t*) (((char *) p) + size);
+                gci_add_fc(heap, rest, (node_idx << 3) - size);
+                hmu_mark_pinuse(rest);
+            } else {
+                size = node_idx << 3;
+                next = (hmu_t*) ((char*) p + size);
+                if (hmu_is_in_heap(heap, next))
+                    hmu_mark_pinuse(next);
+            }
+
+#if GC_STAT_DATA != 0
+            heap->total_free_size -= size;
+            if ((heap->current_size - heap->total_free_size)
+                    > heap->highmark_size)
+                heap->highmark_size = heap->current_size
+                        - heap->total_free_size;
+#endif
+
+            hmu_set_size((hmu_t* ) p, size);
+            return (hmu_t*) p;
+        }
+    }
+
+    /* need to find a node in tree*/
+    root = &heap->kfc_tree_root;
+
+    /* find the best node*/
+    bh_assert(root);
+    tp = root->right;
+    while (tp) {
+        if (tp->size < size) {
+            tp = tp->right;
+            continue;
+        }
+
+        /* record the last node with size equal to or bigger than given size*/
+        last_tp = tp;
+        tp = tp->left;
+    }
+
+    if (last_tp) {
+        bh_assert(last_tp->size >= size);
+
+        /* alloc in last_p*/
+
+        /* remove node last_p from tree*/
+        remove_tree_node(last_tp);
+
+        if (last_tp->size >= size + GC_SMALLEST_SIZE) {
+            rest = (hmu_t*) ((char*) last_tp + size);
+            gci_add_fc(heap, rest, last_tp->size - size);
+            hmu_mark_pinuse(rest);
+        } else {
+            size = last_tp->size;
+            next = (hmu_t*) ((char*) last_tp + size);
+            if (hmu_is_in_heap(heap, next))
+                hmu_mark_pinuse(next);
+        }
+
+#if GC_STAT_DATA != 0
+        heap->total_free_size -= size;
+        if ((heap->current_size - heap->total_free_size) > heap->highmark_size)
+            heap->highmark_size = heap->current_size - heap->total_free_size;
+#endif
+        hmu_set_size((hmu_t* ) last_tp, size);
+        return (hmu_t*) last_tp;
+    }
+
+    return NULL;
+}
+
+/* Find a proper HMU for given size*/
+
+/* @heap should not be NULL and it should be a valid heap*/
+/* @size should cover the header and it should be 8 bytes aligned*/
+
+/* This function will try several ways to satisfy the allocation request.*/
+/*  1. Find a proper on available HMUs.*/
+/*  2. GC will be triggered if 1 failed.*/
+/*  3. Find a proper on available HMUS.*/
+/*  4. Return NULL if 3 failed*/
+
+/* A proper HMU will be returned. This HMU can include the header and given 
size. The returned HMU will be aligned to 8 bytes.*/
+/* NULL will be returned if there are no proper HMU.*/
+BH_STATIC hmu_t* alloc_hmu_ex(gc_heap_t *heap, gc_size_t size)
+{
+    hmu_t *ret = NULL;
+
+    bh_assert(gci_is_heap_valid(heap));
+    bh_assert(size > 0 && !(size & 7));
+
+#ifdef GC_IN_EVERY_ALLOCATION
+    gci_gc_heap(heap);
+    ret = alloc_hmu(heap, size);
+#else
+
+# if GC_STAT_DATA != 0
+    if (heap->gc_threshold < heap->total_free_size)
+        ret = alloc_hmu(heap, size);
+# else
+    ret = alloc_hmu(heap, size);
+# endif
+
+    if (ret)
+        return ret;
+
+    /*gci_gc_heap(heap);*//* disable gc claim currently */
+    ret = alloc_hmu(heap, size);
+#endif
+    return ret;
+}
+
+unsigned long g_total_malloc = 0;
+unsigned long g_total_free = 0;
+
+gc_object_t _gc_alloc_vo_i_heap(void *vheap,
+        gc_size_t size ALLOC_EXTRA_PARAMETERS)
+{
+    gc_heap_t* heap = (gc_heap_t*) vheap;
+    hmu_t *hmu = NULL;
+    gc_object_t ret = (gc_object_t) NULL;
+    gc_size_t tot_size = 0;
+
+    /* align size*/
+    tot_size = GC_ALIGN_8(size + HMU_SIZE + OBJ_PREFIX_SIZE + 
OBJ_SUFFIX_SIZE); /* hmu header, prefix, suffix*/
+    if (tot_size < size)
+        return NULL;
+
+    gct_vm_mutex_lock(&heap->lock);
+
+    hmu = alloc_hmu_ex(heap, tot_size);
+    if (!hmu)
+        goto FINISH;
+
+    g_total_malloc += tot_size;
+
+    hmu_set_ut(hmu, HMU_VO);
+    hmu_unfree_vo(hmu);
+
+#if defined(GC_VERIFY)
+    hmu_init_prefix_and_suffix(hmu, tot_size, file_name, line_number);
+#endif
+
+    ret = hmu_to_obj(hmu);
+
+#if BH_ENABLE_MEMORY_PROFILING != 0
+    bh_printf("HEAP.ALLOC: heap: %p, size: %u", heap, size);
+#endif
+
+    FINISH:
+    gct_vm_mutex_unlock(&heap->lock);
+
+    return ret;
+}
+
+/* see ems_gc.h for description*/
+gc_object_t _gc_alloc_jo_i_heap(void *vheap,
+        gc_size_t size ALLOC_EXTRA_PARAMETERS)
+{
+    gc_heap_t* heap = (gc_heap_t*) vheap;
+    gc_object_t ret = (gc_object_t) NULL;
+    hmu_t *hmu = NULL;
+    gc_size_t tot_size = 0;
+
+    bh_assert(gci_is_heap_valid(heap));
+
+    /* align size*/
+    tot_size = GC_ALIGN_8(size + HMU_SIZE + OBJ_PREFIX_SIZE + 
OBJ_SUFFIX_SIZE); /* hmu header, prefix, suffix*/
+    if (tot_size < size)
+        return NULL;
+
+    hmu = alloc_hmu_ex(heap, tot_size);
+    if (!hmu)
+        goto FINISH;
+
+    /* reset all fields*/
+    memset((char*) hmu + sizeof(*hmu), 0, tot_size - sizeof(*hmu));
+
+    /* hmu->header = 0; */
+    hmu_set_ut(hmu, HMU_JO);
+    hmu_unmark_jo(hmu);
+
+#if defined(GC_VERIFY)
+    hmu_init_prefix_and_suffix(hmu, tot_size, file_name, line_number);
+#endif
+    ret = hmu_to_obj(hmu);
+
+#if BH_ENABLE_MEMORY_PROFILING != 0
+    bh_printf("HEAP.ALLOC: heap: %p, size: %u", heap, size);
+#endif
+
+    FINISH:
+
+    return ret;
+}
+
+/* Do some checking to see if given pointer is a possible valid heap*/
+
+/* Return GC_TRUE if all checking passed*/
+/* Return GC_FALSE otherwise*/
+int gci_is_heap_valid(gc_heap_t *heap)
+{
+    if (!heap)
+        return GC_FALSE;
+    if (heap->heap_id != (gc_handle_t) heap)
+        return GC_FALSE;
+
+    return GC_TRUE;
+}
+
+int gc_free_i_heap(void *vheap, gc_object_t obj ALLOC_EXTRA_PARAMETERS)
+{
+    gc_heap_t* heap = (gc_heap_t*) vheap;
+    hmu_t *hmu = NULL;
+    hmu_t *prev = NULL;
+    hmu_t *next = NULL;
+    gc_size_t size = 0;
+    hmu_type_t ut;
+    int ret = GC_SUCCESS;
+
+    if (!obj) {
+        return GC_SUCCESS;
+    }
+
+    hmu = obj_to_hmu(obj);
+
+    gct_vm_mutex_lock(&heap->lock);
+
+    if ((gc_uint8 *) hmu >= heap->base_addr
+            && (gc_uint8 *) hmu < heap->base_addr + heap->current_size) {
+#ifdef GC_VERIFY
+        hmu_verify(hmu);
+#endif
+        ut = hmu_get_ut(hmu);
+        if (ut == HMU_VO) {
+            if (hmu_is_vo_freed(hmu)) {
+                bh_assert(0);
+                ret = GC_ERROR;
+                goto out;
+            }
+
+            size = hmu_get_size(hmu);
+
+            g_total_free += size;
+
+#if GC_STAT_DATA != 0
+            heap->total_free_size += size;
+#endif
+#if BH_ENABLE_MEMORY_PROFILING != 0
+            bh_printf("HEAP.FREE, heap: %p, size: %u\n",heap, size);
+#endif
+
+            if (!hmu_get_pinuse(hmu)) {
+                prev = (hmu_t*) ((char*) hmu - *((int*) hmu - 1));
+
+                if (hmu_is_in_heap(heap, prev) && hmu_get_ut(prev) == HMU_FC) {
+                    size += hmu_get_size(prev);
+                    hmu = prev;
+                    unlink_hmu(heap, prev);
+                }
+            }
+
+            next = (hmu_t*) ((char*) hmu + size);
+            if (hmu_is_in_heap(heap, next)) {
+                if (hmu_get_ut(next) == HMU_FC) {
+                    size += hmu_get_size(next);
+                    unlink_hmu(heap, next);
+                    next = (hmu_t*) ((char*) hmu + size);
+                }
+            }
+
+            gci_add_fc(heap, hmu, size);
+
+            if (hmu_is_in_heap(heap, next)) {
+                hmu_unmark_pinuse(next);
+            }
+
+        } else {
+            ret = GC_ERROR;
+            goto out;
+        }
+        ret = GC_SUCCESS;
+        goto out;
+    }
+
+    out:
+    gct_vm_mutex_unlock(&heap->lock);
+    return ret;
+}
+
+void gc_dump_heap_stats(gc_heap_t *heap)
+{
+    bh_printf("heap: %p, heap start: %p\n", heap, heap->base_addr);
+    bh_printf(
+            "total malloc: totalfree: %u, current: %u, highmark: %u, gc cnt: 
%u\n",
+            heap->total_free_size, heap->current_size, heap->highmark_size,
+            heap->total_gc_count);
+    bh_printf("g_total_malloc=%lu, g_total_free=%lu, occupied=%lu\n",
+            g_total_malloc, g_total_free, g_total_malloc - g_total_free);
+}
+
+#ifdef GC_TEST
+
+void gci_dump(char* buf, gc_heap_t *heap)
+{
+    hmu_t *cur = NULL, *end = NULL;
+    hmu_type_t ut;
+    gc_size_t size;
+    int i = 0;
+    int p;
+    char inuse;
+    int mark;
+
+    cur = (hmu_t*)heap->base_addr;
+    end = (hmu_t*)((char*)heap->base_addr + heap->current_size);
+
+    while(cur < end)
+    {
+        ut = hmu_get_ut(cur);
+        size = hmu_get_size(cur);
+        p = hmu_get_pinuse(cur);
+        mark = hmu_is_jo_marked (cur);
+
+        if(ut == HMU_VO)
+        inuse = 'V';
+        else if(ut == HMU_JO)
+        inuse = hmu_is_jo_marked(cur) ? 'J' : 'j';
+        else if(ut == HMU_FC)
+        inuse = 'F';
+
+        bh_assert(size > 0);
+
+        buf += sprintf(buf, "#%d %08x %x %x %d %c %d\n", i, (char*) cur - 
(char*) heap->base_addr, ut, p, mark, inuse, hmu_obj_size(size));
+
+        cur = (hmu_t*)((char *)cur + size);
+        i++;
+    }
+
+    bh_assert(cur == end);
+}
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_gc.h 
b/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_gc.h
new file mode 100755
index 0000000..2da6241
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_gc.h
@@ -0,0 +1,341 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file   ems_gc.h
+ * @date   Wed Aug  3 10:46:38 2011
+ *
+ * @brief  This file defines GC modules types and interfaces.
+ *
+ *
+ */
+
+#ifndef _EMS_GC_H
+#define _EMS_GC_H
+
+#include "bh_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*Pre-compile configuration can be done here or on Makefiles*/
+/*#define GC_EMBEDDED or GC_STANDALONE*/
+/*#define GC_DEBUG*/
+/*#define GC_TEST // TEST mode is a sub-mode of STANDALONE*/
+/* #define GC_ALLOC_TRACE */
+/* #define GC_STAT */
+#ifndef GC_STAT_DATA
+#define GC_STAT_DATA 1
+#endif
+
+#define GC_HEAD_PADDING 4
+
+/* Standalone GC is used for testing.*/
+#ifndef GC_EMBEDDED
+#    ifndef GC_STANDALONE
+#        define GC_STANDALONE
+#    endif
+#endif
+
+#if defined(GC_EMBEDDED) && defined(GC_STANDALONE)
+#    error "Can not define GC_EMBEDDED and GC_STANDALONE at the same time"
+#endif
+
+#ifdef BH_TEST
+#    ifndef GC_TEST
+#        define GC_TEST
+#    endif
+#endif
+
+#ifdef BH_DEBUG
+/*instrument mode ignore GC_DEBUG feature, for instrument testing 
gc_alloc_vo_i_heap only has func_name parameter*/
+#if !defined INSTRUMENT_TEST_ENABLED && !defined GC_DEBUG
+#        define GC_DEBUG
+#endif
+#endif
+
+#if defined(GC_EMBEDDED) && defined(GC_TEST)
+#    error "Can not defined GC_EMBEDDED and GC_TEST at the same time"
+#endif
+
+typedef void *gc_handle_t;
+typedef void *gc_object_t;
+
+#define NULL_REF ((gc_object_t)NULL)
+
+#define GC_SUCCESS (0)
+#define GC_ERROR (-1)
+
+#define GC_TRUE (1)
+#define GC_FALSE (0)
+
+#define GC_MAX_HEAP_SIZE (256 * BH_KB)
+
+typedef int64 gc_int64;
+
+typedef unsigned int gc_uint32;
+typedef signed int gc_int32;
+typedef unsigned short gc_uint16;
+typedef signed short gc_int16;
+typedef unsigned char gc_uint8;
+typedef signed char gc_int8;
+typedef gc_uint32 gc_size_t;
+
+typedef enum {
+    MMT_SHARED = 0,
+    MMT_INSTANCE = 1,
+    MMT_APPMANAGER = MMT_SHARED,
+    MMT_VERIFIER = MMT_SHARED,
+    MMT_JHI = MMT_SHARED,
+    MMT_LOADER = MMT_SHARED,
+    MMT_APPLET = MMT_INSTANCE,
+    MMT_INTERPRETER = MMT_INSTANCE
+} gc_mm_t;
+
+#ifdef GC_STAT
+#define GC_HEAP_STAT_SIZE (128 / 4)
+
+typedef struct {
+    int usage;
+    int usage_block;
+    int vo_usage;
+    int jo_usage;
+    int free;
+    int free_block;
+    int vo_free;
+    int jo_free;
+    int usage_sizes[GC_HEAP_STAT_SIZE];
+    int free_sizes[GC_HEAP_STAT_SIZE];
+}gc_stat_t;
+
+extern void gc_heap_stat(void* heap, gc_stat_t* gc_stat);
+extern void __gc_print_stat(void *heap, int verbose);
+
+#define gc_print_stat __gc_print_stat
+
+#else
+
+#define gc_print_stat(heap, verbose)
+
+#endif
+
+#if GC_STAT_DATA != 0
+
+typedef enum {
+    GC_STAT_TOTAL = 0,
+    GC_STAT_FREE,
+    GC_STAT_HIGHMARK,
+    GC_STAT_COUNT,
+    GC_STAT_TIME,
+    GC_STAT_MAX_1,
+    GC_STAT_MAX_2,
+    GC_STAT_MAX_3,
+    GC_STAT_MAX
+} GC_STAT_INDEX;
+
+#endif
+
+/*////////////// Exported APIs*/
+
+/**
+ * GC initialization from a buffer
+ *
+ * @param buf the buffer to be initialized to a heap
+ * @param buf_size the size of buffer
+ *
+ * @return gc handle if success, NULL otherwise
+ */
+extern gc_handle_t gc_init_with_pool(char *buf, gc_size_t buf_size);
+
+/**
+ * Destroy heap which is initilized from a buffer
+ *
+ * @param handle handle to heap needed destory
+ *
+ * @return GC_SUCCESS if success
+ *         GC_ERROR for bad parameters or failed system resource freeing.
+ */
+extern int gc_destroy_with_pool(gc_handle_t handle);
+
+#if GC_STAT_DATA != 0
+
+/**
+ * Get Heap Stats
+ *
+ * @param stats [out] integer array to save heap stats
+ * @param size [in] the size of stats
+ * @param mmt [in] type of heap, MMT_SHARED or MMT_INSTANCE
+ */
+extern void* gc_heap_stats(void *heap, int* stats, int size, gc_mm_t mmt);
+
+/**
+ * Set GC threshold factor
+ *
+ * @param heap [in] the heap to set
+ * @param factor [in] the threshold size is free_size * factor / 1000
+ *
+ * @return GC_SUCCESS if success.
+ */
+extern int gc_set_threshold_factor(void *heap, unsigned int factor);
+
+#endif
+
+/*////// Allocate heap object*/
+
+/* There are two versions of allocate functions. The functions with _i suffix 
should be only used*/
+/*  internally. Functions without _i suffix are just wrappers with the 
corresponded functions with*/
+/*  _i suffix. Allocation operation code position are record under DEBUG model 
for debugging.*/
+#ifdef GC_DEBUG
+#    define ALLOC_EXTRA_PARAMETERS ,const char*file_name,int line_number
+#    define ALLOC_EXTRA_ARGUMENTS , __FILE__, __LINE__
+#    define ALLOC_PASSDOWN_EXTRA_ARGUMENTS , file_name, line_number
+#    define gc_alloc_vo_h(heap, size) gc_alloc_vo_i_heap(heap, size, __FILE__, 
__LINE__)
+#    define gc_free_h(heap, obj) gc_free_i_heap(heap, obj, __FILE__, __LINE__)
+#else
+#    define ALLOC_EXTRA_PARAMETERS
+#    define ALLOC_EXTRA_ARGUMENTS
+#    define ALLOC_PASSDOWN_EXTRA_ARGUMENTS
+#    define gc_alloc_vo_h                    gc_alloc_vo_i_heap
+#    define gc_free_h                        gc_free_i_heap
+#endif
+
+/**
+ * Invoke a GC
+ *
+ * @param heap
+ *
+ * @return GC_SUCCESS if success
+ */
+extern int gci_gc_heap(void *heap);
+
+/**
+ * Allocate VM Object in specific heap.
+ *
+ * @param heap heap to allocate.
+ * @param size bytes to allocate.
+ *
+ * @return pointer to VM object allocated
+ *         NULL if failed.
+ */
+extern gc_object_t _gc_alloc_vo_i_heap(void *heap,
+        gc_size_t size ALLOC_EXTRA_PARAMETERS);
+extern gc_object_t _gc_alloc_jo_i_heap(void *heap,
+        gc_size_t size ALLOC_EXTRA_PARAMETERS);
+#ifdef INSTRUMENT_TEST_ENABLED
+extern gc_object_t gc_alloc_vo_i_heap_instr(void *heap, gc_size_t size, const 
char* func_name );
+extern gc_object_t gc_alloc_jo_i_heap_instr(void *heap, gc_size_t size, const 
char* func_name);
+#    define gc_alloc_vo_i_heap(heap, size) gc_alloc_vo_i_heap_instr(heap, 
size, __FUNCTION__)
+#    define gc_alloc_jo_i_heap(heap, size) gc_alloc_jo_i_heap_instr(heap, 
size, __FUNCTION__)
+#else
+#    define gc_alloc_vo_i_heap _gc_alloc_vo_i_heap
+#    define gc_alloc_jo_i_heap _gc_alloc_jo_i_heap
+#endif
+
+/**
+ * Allocate Java object in specific heap.
+ *
+ * @param heap heap to allocate.
+ * @param size bytes to allocate.
+ *
+ * @return pointer to Java object allocated
+ *         NULL if failed.
+ */
+extern gc_object_t _gc_alloc_jo_i_heap(void *heap,
+        gc_size_t size ALLOC_EXTRA_PARAMETERS);
+
+/**
+ * Free VM object
+ *
+ * @param heap heap to free.
+ * @param obj pointer to object need free.
+ *
+ * @return GC_SUCCESS if success
+ */
+extern int gc_free_i_heap(void *heap, gc_object_t obj ALLOC_EXTRA_PARAMETERS);
+
+/**
+ * Add ref to rootset of gc for current instance.
+ *
+ * @param obj pointer to real load of a valid Java object managed by gc for 
current instance.
+ *
+ * @return GC_SUCCESS if success.
+ *         GC_ERROR for invalid parameters.
+ */
+extern int gc_add_root(void* heap, gc_object_t obj);
+
+/*////////////// Imported APIs which should be implemented in other 
components*/
+
+/*////// Java object layout related APIs*/
+
+/**
+ * Get Java object size from corresponding VM module
+ *
+ * @param obj pointer to the real load of a Java object.
+ *
+ * @return size of java object.
+ */
+extern gc_size_t vm_get_java_object_size(gc_object_t obj);
+
+/**
+ * Get reference list of this object
+ *
+ * @param obj [in] pointer to java object.
+ * @param is_compact_mode [in] indicate the java object mode. GC_TRUE or 
GC_FALSE.
+ * @param ref_num [out] the size of ref_list.
+ * @param ref_list [out] if is_compact_mode is GC_FALSE, this parameter will 
be set to a list of offset.
+ * @param ref_start_offset [out] If is_compact_mode is GC_TRUE, this parameter 
will be set to the start offset of the references in this object.
+ *
+ * @return GC_SUCCESS if success.
+ *         GC_ERROR when error occurs.
+ */
+extern int vm_get_java_object_ref_list(gc_object_t obj, int *is_compact_mode,
+        gc_size_t *ref_num, gc_uint16 **ref_list, gc_uint32 *ref_start_offset);
+
+/**
+ * Get gc handle for current instance
+ *
+ *
+ * @return instance heap handle.
+ */
+extern gc_handle_t app_manager_get_cur_applet_heap(void);
+
+/**
+ * Begin current instance heap rootset enumeration
+ *
+ *
+ * @return GC_SUCCESS if success.
+ *         GC_ERROR when error occurs.
+ */
+extern int vm_begin_rootset_enumeration(void *heap);
+
+#ifdef _INSTRUMENT_TEST_ENABLED
+extern int vm_begin_rootset_enumeration_instr(void *heap, const 
char*func_name);
+#define vm_begin_rootset_enumeration(heap) 
vm_begin_rootset_enumeration_instr(heap, __FUNCTION__)
+#else
+#define vm_begin_rootset_enumeration _vm_begin_rootset_enumeration
+#endif    /* INSTUMENT_TEST_ENABLED*/
+
+#ifndef offsetof
+#define offsetof(Type, field) ((size_t)(&((Type *)0)->field))
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_gc_internal.h 
b/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_gc_internal.h
new file mode 100755
index 0000000..51308d2
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_gc_internal.h
@@ -0,0 +1,282 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _EMS_GC_INTERNAL_H
+#define _EMS_GC_INTERNAL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "bh_platform.h"
+#include "bh_thread.h"
+#include "bh_memory.h"
+#include "bh_assert.h"
+#include "ems_gc.h"
+
+/* basic block managed by EMS gc is the so-called HMU (heap memory unit)*/
+typedef enum _hmu_type_enum
+{
+    HMU_TYPE_MIN = 0,
+    HMU_TYPE_MAX = 3,
+    HMU_JO = 3,
+    HMU_VO = 2,
+    HMU_FC = 1,
+    HMU_FM = 0
+}hmu_type_t;
+
+typedef struct _hmu_struct
+{
+    gc_uint32 header;
+}hmu_t;
+
+#if defined(GC_VERIFY)
+
+#define GC_OBJECT_PREFIX_PADDING_CNT 3
+#define GC_OBJECT_SUFFIX_PADDING_CNT 4
+#define GC_OBJECT_PADDING_VALUE (0x12345678)
+
+typedef struct _gc_object_prefix
+{
+    const char *file_name;
+    gc_int32 line_no;
+    gc_int32 size;
+    gc_uint32 padding[GC_OBJECT_PREFIX_PADDING_CNT];
+}gc_object_prefix_t;
+
+#define OBJ_PREFIX_SIZE (sizeof(gc_object_prefix_t))
+
+typedef struct _gc_object_suffix
+{
+    gc_uint32 padding[GC_OBJECT_SUFFIX_PADDING_CNT];
+}gc_object_suffix_t;
+
+#define OBJ_SUFFIX_SIZE (sizeof(gc_object_suffix_t))
+
+extern void hmu_init_prefix_and_suffix(hmu_t *hmu, gc_size_t tot_size, const 
char *file_name, int line_no);
+extern void hmu_verify(hmu_t *hmu);
+
+#define SKIP_OBJ_PREFIX(p) ((void*)((gc_uint8*)(p) + OBJ_PREFIX_SIZE))
+#define SKIP_OBJ_SUFFIX(p) ((void*)((gc_uint8*)(p) + OBJ_SUFFIX_SIZE))
+
+#define OBJ_EXTRA_SIZE (HMU_SIZE + OBJ_PREFIX_SIZE + OBJ_SUFFIX_SIZE)
+
+#else
+
+#define OBJ_PREFIX_SIZE 0
+#define OBJ_SUFFIX_SIZE 0
+
+#define SKIP_OBJ_PREFIX(p) ((void*)((gc_uint8*)(p) + OBJ_PREFIX_SIZE))
+#define SKIP_OBJ_SUFFIX(p) ((void*)((gc_uint8*)(p) + OBJ_SUFFIX_SIZE))
+
+#define OBJ_EXTRA_SIZE (HMU_SIZE + OBJ_PREFIX_SIZE + OBJ_SUFFIX_SIZE)
+
+#endif /* GC_DEBUG*/
+
+#define hmu_obj_size(s) ((s)-OBJ_EXTRA_SIZE)
+
+#define GC_ALIGN_8(s) (((int)(s) + 7) & ~7)
+
+#define GC_SMALLEST_SIZE GC_ALIGN_8(HMU_SIZE + OBJ_PREFIX_SIZE + 
OBJ_SUFFIX_SIZE + 8)
+#define GC_GET_REAL_SIZE(x) GC_ALIGN_8(HMU_SIZE + OBJ_PREFIX_SIZE + 
OBJ_SUFFIX_SIZE + (((x) > 8) ? (x): 8))
+
+/*////// functions for bit operation*/
+
+#define SETBIT(v, offset) (v) |= (1 << (offset))
+#define GETBIT(v, offset) ((v) & (1 << (offset)) ? 1 : 0)
+#define CLRBIT(v, offset) (v) &= ~(1 << (offset))
+
+#define SETBITS(v, offset, size, value) do {        \
+        (v) &= ~(((1 << size) - 1) << offset);      \
+        (v) |= value << offset;                     \
+    } while(0)
+#define CLRBITS(v, offset, size) (v) &= ~(((1 << size) - 1) << offset)
+#define GETBITS(v, offset, size) (((v) & (((1 << size) - 1) << offset)) >> 
offset)
+
+/*////// gc object layout definition*/
+
+#define HMU_SIZE (sizeof(hmu_t))
+
+#define hmu_to_obj(hmu) (gc_object_t)(SKIP_OBJ_PREFIX((hmu_t*) (hmu) + 1))
+#define obj_to_hmu(obj) ((hmu_t *)((gc_uint8*)(obj) - OBJ_PREFIX_SIZE) - 1)
+
+#define HMU_UT_SIZE      2
+#define HMU_UT_OFFSET    30
+
+#define hmu_get_ut(hmu) GETBITS ((hmu)->header, HMU_UT_OFFSET, HMU_UT_SIZE)
+#define hmu_set_ut(hmu, type) SETBITS ((hmu)->header, HMU_UT_OFFSET, 
HMU_UT_SIZE, type)
+#define hmu_is_ut_valid(tp) (tp >= HMU_TYPE_MIN && tp <= HMU_TYPE_MAX)
+
+/* P in use bit means the previous chunk is in use */
+#define HMU_P_OFFSET 29
+
+#define hmu_mark_pinuse(hmu) SETBIT ((hmu)->header, HMU_P_OFFSET)
+#define hmu_unmark_pinuse(hmu) CLRBIT ((hmu)->header, HMU_P_OFFSET)
+#define hmu_get_pinuse(hmu) GETBIT ((hmu)->header, HMU_P_OFFSET)
+
+#define HMU_JO_VT_SIZE   27
+#define HMU_JO_VT_OFFSET 0
+#define HMU_JO_MB_OFFSET 28
+
+#define hmu_mark_jo(hmu) SETBIT ((hmu)->header, HMU_JO_MB_OFFSET)
+#define hmu_unmark_jo(hmu) CLRBIT ((hmu)->header, HMU_JO_MB_OFFSET)
+#define hmu_is_jo_marked(hmu) GETBIT ((hmu)->header, HMU_JO_MB_OFFSET)
+
+#define HMU_SIZE_SIZE 27
+#define HMU_SIZE_OFFSET 0
+
+#define HMU_VO_FB_OFFSET 28
+
+#define hmu_is_vo_freed(hmu) GETBIT ((hmu)->header, HMU_VO_FB_OFFSET)
+#define hmu_unfree_vo(hmu) CLRBIT ((hmu)->header, HMU_VO_FB_OFFSET)
+
+#define hmu_get_size(hmu) GETBITS ((hmu)->header, HMU_SIZE_OFFSET, 
HMU_SIZE_SIZE)
+#define hmu_set_size(hmu, size) SETBITS ((hmu)->header, HMU_SIZE_OFFSET, 
HMU_SIZE_SIZE, size)
+
+/*////// HMU free chunk management*/
+
+#define HMU_NORMAL_NODE_CNT 32
+#define HMU_FC_NORMAL_MAX_SIZE ((HMU_NORMAL_NODE_CNT - 1) << 3)
+#define HMU_IS_FC_NORMAL(size) ((size) < HMU_FC_NORMAL_MAX_SIZE)
+#if HMU_FC_NORMAL_MAX_SIZE >= GC_MAX_HEAP_SIZE
+#error "Too small GC_MAX_HEAP_SIZE"
+#endif
+
+typedef struct _hmu_normal_node
+{
+    hmu_t hmu_header;
+    struct _hmu_normal_node *next;
+}hmu_normal_node_t;
+
+typedef struct _hmu_tree_node
+{
+    hmu_t hmu_header;
+    gc_size_t size;
+    struct _hmu_tree_node *left;
+    struct _hmu_tree_node *right;
+    struct _hmu_tree_node *parent;
+}hmu_tree_node_t;
+
+typedef struct _gc_heap_struct
+{
+    gc_handle_t heap_id; /* for double checking*/
+
+    gc_uint8 *base_addr;
+    gc_size_t current_size;
+    gc_size_t max_size;
+
+    korp_mutex lock;
+
+    hmu_normal_node_t kfc_normal_list[HMU_NORMAL_NODE_CNT];
+
+    /* order in kfc_tree is: size[left] <= size[cur] < size[right]*/
+    hmu_tree_node_t kfc_tree_root;
+
+    /* for rootset enumeration of private heap*/
+    void *root_set;
+
+    /* whether the fast mode of marking process that requires
+     additional memory fails.  When the fast mode fails, the
+     marking process can still be done in the slow mode, which
+     doesn't need additional memory (by walking through all
+     blocks and marking sucessors of marked nodes until no new
+     node is marked).  TODO: slow mode is not implemented.  */
+    unsigned is_fast_marking_failed : 1;
+
+#if GC_STAT_DATA != 0
+    gc_size_t highmark_size;
+    gc_size_t init_size;
+    gc_size_t total_gc_count;
+    gc_size_t total_free_size;
+    gc_size_t gc_threshold;
+    gc_size_t gc_threshold_factor;
+    gc_int64 total_gc_time;
+#endif
+}gc_heap_t;
+
+/*////// MISC internal used APIs*/
+
+extern void gci_add_fc(gc_heap_t *heap, hmu_t *hmu, gc_size_t size);
+extern int gci_is_heap_valid(gc_heap_t *heap);
+
+#ifdef GC_DEBUG
+extern void gci_verify_heap(gc_heap_t *heap);
+extern void gci_dump(char* buf, gc_heap_t *heap);
+#endif
+
+#if GC_STAT_DATA != 0
+
+/* the default GC threshold size is free_size * GC_DEFAULT_THRESHOLD_FACTOR / 
1000 */
+#define GC_DEFAULT_THRESHOLD_FACTOR 400
+
+static inline void gc_update_threshold(gc_heap_t *heap)
+{
+    heap->gc_threshold = heap->total_free_size * heap->gc_threshold_factor / 
1000;
+}
+#endif
+
+/*////// MISC data structures*/
+
+#define MARK_NODE_OBJ_CNT 256
+
+/* mark node is used for gc marker*/
+typedef struct _mark_node_struct
+{
+    /* number of to-expand objects can be saved in this node*/
+    gc_size_t cnt;
+
+    /* the first unused index*/
+    int idx;
+
+    /* next node on the node list*/
+    struct _mark_node_struct *next;
+
+    /* the actual to-expand objects list*/
+    gc_object_t set[MARK_NODE_OBJ_CNT];
+}mark_node_t;
+
+/*////// Imported APIs wrappers under TEST mode*/
+
+#ifdef GC_TEST
+extern int (*gct_vm_get_java_object_ref_list)(
+        gc_object_t obj,
+        int *is_compact_mode, /* can be set to GC_TRUE, or GC_FALSE */
+        gc_size_t *ref_num,
+        gc_uint16 **ref_list,
+        gc_uint32 *ref_start_offset);
+extern int (*gct_vm_mutex_init)(korp_mutex *mutex);
+extern int (*gct_vm_mutex_destroy)(korp_mutex *mutex);
+extern int (*gct_vm_mutex_lock)(korp_mutex *mutex);
+extern int (*gct_vm_mutex_unlock)(korp_mutex *mutex);
+extern gc_handle_t (*gct_vm_get_gc_handle_for_current_instance)(void);
+extern int (*gct_vm_begin_rootset_enumeration)(void* heap);
+extern int (*gct_vm_gc_finished)(void);
+#else
+#define gct_vm_get_java_object_ref_list             bh_get_java_object_ref_list
+#define gct_vm_mutex_init                           vm_mutex_init
+#define gct_vm_mutex_destroy                        vm_mutex_destroy
+#define gct_vm_mutex_lock                           vm_mutex_lock
+#define gct_vm_mutex_unlock                         vm_mutex_unlock
+#define gct_vm_get_gc_handle_for_current_instance   
app_manager_get_cur_applet_heap
+#define gct_vm_begin_rootset_enumeration            
vm_begin_rootset_enumeration
+#define gct_vm_gc_finished                          jeff_runtime_gc_finished
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_hmu.c 
b/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_hmu.c
new file mode 100755
index 0000000..6b612d8
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_hmu.c
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ems_gc_internal.h"
+
+#if defined(GC_VERIFY)
+/* Set default value to prefix and suffix*/
+
+/* @hmu should not be NULL and it should have been correctly initilized 
(except for prefix and suffix part)*/
+/* @tot_size is offered here because hmu_get_size can not be used till now. 
@tot_size should not be smaller than OBJ_EXTRA_SIZE.*/
+/*  For VO, @tot_size should be equal to object total size.*/
+void hmu_init_prefix_and_suffix(hmu_t *hmu, gc_size_t tot_size, const char 
*file_name, int line_no)
+{
+    gc_object_prefix_t *prefix = NULL;
+    gc_object_suffix_t *suffix = NULL;
+    gc_uint32 i = 0;
+
+    bh_assert(hmu);
+    bh_assert(hmu_get_ut(hmu) == HMU_JO || hmu_get_ut(hmu) == HMU_VO);
+    bh_assert(tot_size >= OBJ_EXTRA_SIZE);
+    bh_assert(!(tot_size & 7));
+    bh_assert(hmu_get_ut(hmu) != HMU_VO || hmu_get_size(hmu) >= tot_size);
+
+    prefix = (gc_object_prefix_t *)(hmu + 1);
+    suffix = (gc_object_suffix_t *)((gc_uint8*)hmu + tot_size - 
OBJ_SUFFIX_SIZE);
+    prefix->file_name = file_name;
+    prefix->line_no = line_no;
+    prefix->size = tot_size;
+    for(i = 0;i < GC_OBJECT_PREFIX_PADDING_CNT;i++)
+    {
+        prefix->padding[i] = GC_OBJECT_PADDING_VALUE;
+    }
+    for(i = 0;i < GC_OBJECT_SUFFIX_PADDING_CNT;i++)
+    {
+        suffix->padding[i] = GC_OBJECT_PADDING_VALUE;
+    }
+}
+
+void hmu_verify(hmu_t *hmu)
+{
+    gc_object_prefix_t *prefix = NULL;
+    gc_object_suffix_t *suffix = NULL;
+    gc_uint32 i = 0;
+    hmu_type_t ut;
+    gc_size_t size = 0;
+    int is_padding_ok = 1;
+
+    bh_assert(hmu);
+    ut = hmu_get_ut(hmu);
+    bh_assert(hmu_is_ut_valid(ut));
+
+    prefix = (gc_object_prefix_t *)(hmu + 1);
+    size = prefix->size;
+    suffix = (gc_object_suffix_t *)((gc_uint8*)hmu + size - OBJ_SUFFIX_SIZE);
+
+    if(ut == HMU_VO || ut == HMU_JO)
+    {
+        /* check padding*/
+        for(i = 0;i < GC_OBJECT_PREFIX_PADDING_CNT;i++)
+        {
+            if(prefix->padding[i] != GC_OBJECT_PADDING_VALUE)
+            {
+                is_padding_ok = 0;
+                break;
+            }
+        }
+        for(i = 0;i < GC_OBJECT_SUFFIX_PADDING_CNT;i++)
+        {
+            if(suffix->padding[i] != GC_OBJECT_PADDING_VALUE)
+            {
+                is_padding_ok = 0;
+                break;
+            }
+        }
+
+        if(!is_padding_ok)
+        {
+            printf("Invalid padding for object created at %s:%d",
+                    (prefix->file_name ? prefix->file_name : ""), 
prefix->line_no);
+        }
+        bh_assert(is_padding_ok);
+    }
+}
+#endif
+
diff --git a/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_kfc.c 
b/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_kfc.c
new file mode 100755
index 0000000..4409d65
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/mem-alloc/ems/ems_kfc.c
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ems_gc_internal.h"
+
+#if !defined(NVALGRIND)
+#include <valgrind/memcheck.h>
+#endif
+
+#define HEAP_INC_FACTOR 1
+
+/* Check if current platform is compatible with current GC design*/
+
+/* Return GC_ERROR if not;*/
+/* Return GC_SUCCESS otherwise.*/
+int gci_check_platform()
+{
+#define CHECK(x, y)  do {                                       \
+  if((x) != (y)) {                                              \
+    bh_printf("Platform checking failed on LINE %d at FILE %s.",\
+           __LINE__, __FILE__);                                 \
+    return GC_ERROR;                                            \
+  }                                                             \
+} while(0)
+
+    CHECK(8, sizeof(gc_int64));
+    CHECK(4, sizeof(gc_uint32));
+    CHECK(4, sizeof(gc_int32));
+    CHECK(2, sizeof(gc_uint16));
+    CHECK(2, sizeof(gc_int16));
+    CHECK(1, sizeof(gc_int8));
+    CHECK(1, sizeof(gc_uint8));
+    CHECK(4, sizeof(gc_size_t));
+    /*CHECK(4, sizeof(void *));*/
+
+    return GC_SUCCESS;
+}
+
+gc_handle_t gc_init_with_pool(char *buf, gc_size_t buf_size)
+{
+    char *buf_end = buf + buf_size;
+    char *buf_aligned = (char*) (((uintptr_t) buf + 7) & ~7);
+    char *base_addr = buf_aligned + sizeof(gc_heap_t);
+    gc_heap_t *heap = (gc_heap_t*) buf_aligned;
+    gc_size_t heap_max_size;
+    hmu_normal_node_t *p = NULL;
+    hmu_tree_node_t *root = NULL, *q = NULL;
+    int i = 0, ret;
+
+    /* check system compatibility*/
+    if (gci_check_platform() == GC_ERROR) {
+        bh_printf("Check platform compatibility failed");
+        return NULL;
+    }
+
+    if (buf_size < 1024) {
+        bh_printf("[GC_ERROR]heap_init_size(%d) < 1024", buf_size);
+        return NULL;
+    }
+
+    base_addr = (char*) (((uintptr_t) base_addr + 7) & ~7) + GC_HEAD_PADDING;
+    heap_max_size = (buf_end - base_addr) & ~7;
+
+    memset(heap, 0, sizeof *heap);
+    memset(base_addr, 0, heap_max_size);
+
+    ret = gct_vm_mutex_init(&heap->lock);
+    if (ret != BHT_OK) {
+        bh_printf("[GC_ERROR]failed to init lock ");
+        return NULL;
+    }
+
+#ifdef BH_FOOTPRINT
+    bh_printf("\nINIT HEAP 0x%08x %d\n", base_addr, heap_max_size);
+#endif
+
+    /* init all data structures*/
+    heap->max_size = heap_max_size;
+    heap->current_size = heap_max_size;
+    heap->base_addr = (gc_uint8*) base_addr;
+    heap->heap_id = (gc_handle_t) heap;
+
+#if GC_STAT_DATA != 0
+    heap->total_free_size = heap->current_size;
+    heap->highmark_size = 0;
+    heap->total_gc_count = 0;
+    heap->total_gc_time = 0;
+    heap->gc_threshold_factor = GC_DEFAULT_THRESHOLD_FACTOR;
+    gc_update_threshold(heap);
+#endif
+
+    for (i = 0; i < HMU_NORMAL_NODE_CNT; i++) {
+        /* make normal node look like a FC*/
+        p = &heap->kfc_normal_list[i];
+        memset(p, 0, sizeof *p);
+        hmu_set_ut(&p->hmu_header, HMU_FC);
+        hmu_set_size(&p->hmu_header, sizeof *p);
+    }
+
+    root = &heap->kfc_tree_root;
+    memset(root, 0, sizeof *root);
+    root->size = sizeof *root;
+    hmu_set_ut(&root->hmu_header, HMU_FC);
+    hmu_set_size(&root->hmu_header, sizeof *root);
+
+    q = (hmu_tree_node_t *) heap->base_addr;
+    memset(q, 0, sizeof *q);
+    hmu_set_ut(&q->hmu_header, HMU_FC);
+    hmu_set_size(&q->hmu_header, heap->current_size);
+
+    hmu_mark_pinuse(&q->hmu_header);
+    root->right = q;
+    q->parent = root;
+    q->size = heap->current_size;
+
+    bh_assert(
+            root->size <= HMU_FC_NORMAL_MAX_SIZE
+                    && HMU_FC_NORMAL_MAX_SIZE < q->size); /*@NOTIFY*/
+
+#if BH_ENABLE_MEMORY_PROFILING != 0
+    bh_printf("heap is successfully initialized with max_size=%u.",
+            heap_max_size);
+#endif
+    return heap;
+}
+
+int gc_destroy_with_pool(gc_handle_t handle)
+{
+    gc_heap_t *heap = (gc_heap_t *) handle;
+    gct_vm_mutex_destroy(&heap->lock);
+    memset(heap->base_addr, 0, heap->max_size);
+    memset(heap, 0, sizeof(gc_heap_t));
+    return GC_SUCCESS;
+}
+
+#if defined(GC_VERIFY)
+/* Verify heap integrity*/
+/* @heap should not be NULL and it should be a valid heap*/
+void gci_verify_heap(gc_heap_t *heap)
+{
+    hmu_t *cur = NULL, *end = NULL;
+
+    bh_assert(heap && gci_is_heap_valid(heap));
+    cur = (hmu_t *)heap->base_addr;
+    end = (hmu_t *)(heap->base_addr + heap->current_size);
+    while(cur < end)
+    {
+        hmu_verify(cur);
+        cur = (hmu_t *)((gc_uint8*)cur + hmu_get_size(cur));
+    }
+    bh_assert(cur == end);
+}
+#endif
+
+void* gc_heap_stats(void *heap_arg, int* stats, int size, gc_mm_t mmt)
+{
+    (void) mmt;
+    int i;
+    gc_heap_t *heap = (gc_heap_t *) heap_arg;
+
+    for (i = 0; i < size; i++) {
+        switch (i) {
+        case GC_STAT_TOTAL:
+            stats[i] = heap->current_size;
+            break;
+        case GC_STAT_FREE:
+            stats[i] = heap->total_free_size;
+            break;
+        case GC_STAT_HIGHMARK:
+            stats[i] = heap->highmark_size;
+            break;
+        case GC_STAT_COUNT:
+            stats[i] = heap->total_gc_count;
+            break;
+        case GC_STAT_TIME:
+            stats[i] = (int) heap->total_gc_time;
+            break;
+        default:
+            break;
+        }
+    }
+    return heap;
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/mem-alloc/mem_alloc.c 
b/scriptsrcs/wamr/core/shared-lib/mem-alloc/mem_alloc.c
new file mode 100755
index 0000000..c19d669
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/mem-alloc/mem_alloc.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mem_alloc.h"
+#include "config.h"
+
+#if DEFAULT_MEM_ALLOCATOR == MEM_ALLOCATOR_EMS
+
+#include "ems/ems_gc.h"
+
+mem_allocator_t mem_allocator_create(void *mem, uint32_t size)
+{
+    return gc_init_with_pool((char *) mem, size);
+}
+
+void mem_allocator_destroy(mem_allocator_t allocator)
+{
+    gc_destroy_with_pool((gc_handle_t) allocator);
+}
+
+void *
+mem_allocator_malloc(mem_allocator_t allocator, uint32_t size)
+{
+    return gc_alloc_vo_h((gc_handle_t) allocator, size);
+}
+
+void mem_allocator_free(mem_allocator_t allocator, void *ptr)
+{
+    if (ptr)
+        gc_free_h((gc_handle_t) allocator, ptr);
+}
+
+#else /* else of DEFAULT_MEM_ALLOCATOR */
+
+#include "tlsf/tlsf.h"
+#include "bh_thread.h"
+
+typedef struct mem_allocator_tlsf {
+    tlsf_t tlsf;
+    korp_mutex lock;
+}mem_allocator_tlsf;
+
+mem_allocator_t
+mem_allocator_create(void *mem, uint32_t size)
+{
+    mem_allocator_tlsf *allocator_tlsf;
+    tlsf_t tlsf;
+    char *mem_aligned = (char*)(((uintptr_t)mem + 3) & ~3);
+
+    if (size < 1024) {
+        printf("Create mem allocator failed: pool size must be "
+                "at least 1024 bytes.\n");
+        return NULL;
+    }
+
+    size -= mem_aligned - (char*)mem;
+    mem = (void*)mem_aligned;
+
+    tlsf = tlsf_create_with_pool(mem, size);
+    if (!tlsf) {
+        printf("Create mem allocator failed: tlsf_create_with_pool failed.\n");
+        return NULL;
+    }
+
+    allocator_tlsf = tlsf_malloc(tlsf, sizeof(mem_allocator_tlsf));
+    if (!allocator_tlsf) {
+        printf("Create mem allocator failed: tlsf_malloc failed.\n");
+        tlsf_destroy(tlsf);
+        return NULL;
+    }
+
+    allocator_tlsf->tlsf = tlsf;
+
+    if (vm_mutex_init(&allocator_tlsf->lock)) {
+        printf("Create mem allocator failed: tlsf_malloc failed.\n");
+        tlsf_free(tlsf, allocator_tlsf);
+        tlsf_destroy(tlsf);
+        return NULL;
+    }
+
+    return allocator_tlsf;
+}
+
+void
+mem_allocator_destroy(mem_allocator_t allocator)
+{
+    mem_allocator_tlsf *allocator_tlsf = (mem_allocator_tlsf *)allocator;
+    tlsf_t tlsf = allocator_tlsf->tlsf;
+
+    vm_mutex_destroy(&allocator_tlsf->lock);
+    tlsf_free(tlsf, allocator_tlsf);
+    tlsf_destroy(tlsf);
+}
+
+void *
+mem_allocator_malloc(mem_allocator_t allocator, uint32_t size)
+{
+    void *ret;
+    mem_allocator_tlsf *allocator_tlsf = (mem_allocator_tlsf *)allocator;
+
+    if (size == 0)
+    /* tlsf doesn't allow to allocate 0 byte */
+    size = 1;
+
+    vm_mutex_lock(&allocator_tlsf->lock);
+    ret = tlsf_malloc(allocator_tlsf->tlsf, size);
+    vm_mutex_unlock(&allocator_tlsf->lock);
+    return ret;
+}
+
+void
+mem_allocator_free(mem_allocator_t allocator, void *ptr)
+{
+    if (ptr) {
+        mem_allocator_tlsf *allocator_tlsf = (mem_allocator_tlsf *)allocator;
+        vm_mutex_lock(&allocator_tlsf->lock);
+        tlsf_free(allocator_tlsf->tlsf, ptr);
+        vm_mutex_unlock(&allocator_tlsf->lock);
+    }
+}
+
+#endif /* end of DEFAULT_MEM_ALLOCATOR */
+
diff --git a/scriptsrcs/wamr/core/shared-lib/mem-alloc/mem_alloc.cmake 
b/scriptsrcs/wamr/core/shared-lib/mem-alloc/mem_alloc.cmake
new file mode 100755
index 0000000..28372ad
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/mem-alloc/mem_alloc.cmake
@@ -0,0 +1,27 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+set (MEM_ALLOC_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${MEM_ALLOC_DIR})
+
+file (GLOB_RECURSE source_all
+      ${MEM_ALLOC_DIR}/ems/*.c
+      ${MEM_ALLOC_DIR}/tlsf/*.c
+      ${MEM_ALLOC_DIR}/mem_alloc.c
+      ${MEM_ALLOC_DIR}/bh_memory.c)
+
+set (MEM_ALLOC_SHARED_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/CMakeLists.txt 
b/scriptsrcs/wamr/core/shared-lib/platform/CMakeLists.txt
new file mode 100755
index 0000000..036ad4e
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/CMakeLists.txt
@@ -0,0 +1,31 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+include_directories (./include ../include ./${PLATFORM})
+
+add_definitions (-D__POSIX__ -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199309L 
-D_BSD_SOURCE)
+
+file (GLOB_RECURSE source_all ${PLATFORM}/*.c)
+add_library (supportlib ${source_all})
+
+target_link_libraries (supportlib -pthread -lrt)
+
+if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
+ add_library (supportlib_ut ${source_all})
+
+ set_target_properties (supportlib_ut PROPERTIES COMPILE_DEFINITIONS BH_TEST=1)
+
+ target_link_libraries (supportlib_ut -pthread -lrt)
+endif ()
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/Makefile 
b/scriptsrcs/wamr/core/shared-lib/platform/Makefile
new file mode 100755
index 0000000..6e8435d
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/Makefile
@@ -0,0 +1,15 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+obj-y += zephyr/
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/alios/COPYRIGHT 
b/scriptsrcs/wamr/core/shared-lib/platform/alios/COPYRIGHT
new file mode 100755
index 0000000..a0e1c83
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/alios/COPYRIGHT
@@ -0,0 +1,126 @@
+# $FreeBSD$
+#      @(#)COPYRIGHT   8.2 (Berkeley) 3/21/94
+
+The compilation of software known as FreeBSD is distributed under the
+following terms:
+
+Copyright (c) 1992-2019 The FreeBSD Project.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+The 4.4BSD and 4.4BSD-Lite software is distributed under the following
+terms:
+
+All of the documentation and software included in the 4.4BSD and 4.4BSD-Lite
+Releases is copyrighted by The Regents of the University of California.
+
+Copyright 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
+       The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+This product includes software developed by the University of
+California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+The Institute of Electrical and Electronics Engineers and the American
+National Standards Committee X3, on Information Processing Systems have
+given us permission to reprint portions of their documentation.
+
+In the following statement, the phrase ``this text'' refers to portions
+of the system documentation.
+
+Portions of this text are reprinted and reproduced in electronic form in
+the second BSD Networking Software Release, from IEEE Std 1003.1-1988, IEEE
+Standard Portable Operating System Interface for Computer Environments
+(POSIX), copyright C 1988 by the Institute of Electrical and Electronics
+Engineers, Inc.  In the event of any discrepancy between these versions
+and the original IEEE Standard, the original IEEE Standard is the referee
+document.
+
+In the following statement, the phrase ``This material'' refers to portions
+of the system documentation.
+
+This material is reproduced with permission from American National
+Standards Committee X3, on Information Processing Systems.  Computer and
+Business Equipment Manufacturers Association (CBEMA), 311 First St., NW,
+Suite 500, Washington, DC 20001-2178.  The developmental work of
+Programming Language C was completed by the X3J11 Technical Committee.
+
+The views and conclusions contained in the software and documentation are
+those of the authors and should not be interpreted as representing official
+policies, either expressed or implied, of the Regents of the University
+of California.
+
+
+NOTE: The copyright of UC Berkeley's Berkeley Software Distribution ("BSD")
+source has been updated.  The copyright addendum may be found at
+ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change and is
+included below.
+
+July 22, 1999
+
+To All Licensees, Distributors of Any Version of BSD:
+
+As you know, certain of the Berkeley Software Distribution ("BSD") source
+code files require that further distributions of products containing all or
+portions of the software, acknowledge within their advertising materials
+that such products contain software developed by UC Berkeley and its
+contributors.
+
+Specifically, the provision reads:
+
+"     * 3. All advertising materials mentioning features or use of this 
software
+      *    must display the following acknowledgement:
+      *    This product includes software developed by the University of
+      *    California, Berkeley and its contributors."
+
+Effective immediately, licensees and distributors are no longer required to
+include the acknowledgement within advertising materials.  Accordingly, the
+foregoing paragraph of those BSD Unix files containing it is hereby deleted
+in its entirety.
+
+William Hoskins
+Director, Office of Technology Licensing
+University of California, Berkeley
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_assert.c 
b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_assert.c
new file mode 100755
index 0000000..ba80166
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_assert.c
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include "bh_assert.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef BH_TEST
+#include <setjmp.h>
+#endif
+
+#ifdef BH_TEST
+/* for exception throwing */
+jmp_buf bh_test_jb;
+#endif
+
+void bh_assert_internal(int v, const char *file_name, int line_number, const 
char *expr_string)
+{
+  if(v) return;
+
+  if(!file_name) file_name = "NULL FILENAME";
+  if(!expr_string) expr_string = "NULL EXPR_STRING";
+
+  printf("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string, 
file_name, line_number);
+
+#ifdef BH_TEST
+  longjmp(bh_test_jb, 1);
+#endif
+
+  aos_reboot();
+}
+
+void bh_debug_internal(const char *file_name, int line_number, const char 
*fmt, ...)
+{
+#ifndef JEFF_TEST_VERIFIER
+  va_list args;
+
+  va_start(args, fmt);
+  bh_assert(file_name);
+
+  printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number);
+  vprintf(fmt, args);
+
+  va_end(args);
+  printf("\n");
+#endif
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_definition.c 
b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_definition.c
new file mode 100755
index 0000000..635e8fe
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_definition.c
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_definition.h"
+#include "bh_platform.h"
+
+int bh_return(int ret)
+{
+  return ret;
+}
+
+#define RSIZE_MAX 0x7FFFFFFF
+
+int b_memcpy_s(void * s1, unsigned int s1max,
+               const void * s2, unsigned int n)
+{
+  char *dest = (char*)s1;
+  char *src = (char*)s2;
+  if (n == 0) {
+    return 0;
+  }
+
+  if (s1 == NULL || s1max > RSIZE_MAX) {
+    return -1;
+  }
+  if (s2 == NULL || n > s1max) {
+    memset(dest, 0, s1max);
+    return -1;
+  }
+  memcpy(dest, src, n);
+  return 0;
+}
+
+int b_strcat_s(char * s1, size_t s1max, const char * s2)
+{
+  if (NULL == s1 || NULL == s2
+      || s1max < (strlen(s1) + strlen(s2) + 1)
+      || s1max > RSIZE_MAX) {
+    return -1;
+  }
+
+  strcat(s1, s2);
+  return 0;
+}
+
+int b_strcpy_s(char * s1, size_t s1max, const char * s2)
+{
+  if (NULL == s1 || NULL == s2
+      || s1max < (strlen(s2) + 1)
+      || s1max > RSIZE_MAX) {
+    return -1;
+  }
+
+  strcpy(s1, s2);
+  return 0;
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_math.c 
b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_math.c
new file mode 100755
index 0000000..27e9531
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_math.c
@@ -0,0 +1,585 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2004 David Schultz <das@xxxxxxxxxxx>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include "bh_platform.h"
+
+#define __FDLIBM_STDC__
+
+typedef uint32_t u_int32_t;
+typedef uint64_t u_int64_t;
+
+typedef union u32double_tag {
+  int *pint;
+  double *pdouble;
+} U32DOUBLE;
+
+static inline int *
+pdouble2pint(double *pdouble)
+{
+  U32DOUBLE u;
+  u.pdouble = pdouble;
+  return u.pint;
+}
+
+typedef union
+{
+  double value;
+  struct
+  {
+    u_int32_t lsw;
+    u_int32_t msw;
+  } parts;
+  struct
+  {
+    u_int64_t w;
+  } xparts;
+} ieee_double_shape_type_little;
+
+typedef union
+{
+  double value;
+  struct
+  {
+    u_int32_t msw;
+    u_int32_t lsw;
+  } parts;
+  struct
+  {
+    u_int64_t w;
+  } xparts;
+} ieee_double_shape_type_big;
+
+typedef union {
+       double  d;
+       struct {
+               unsigned int    manl    :32;
+               unsigned int    manh    :20;
+               unsigned int    exp     :11;
+               unsigned int    sign    :1;
+       } bits;
+} IEEEd2bits_L;
+
+typedef union {
+       double  d;
+       struct {
+               unsigned int    sign    :1;
+               unsigned int    exp     :11;
+               unsigned int    manh    :20;
+               unsigned int    manl    :32;
+       } bits;
+} IEEEd2bits_B;
+
+static union {
+    int a;
+    char b;
+} __ue = { .a = 1 };
+
+#define is_little_endian() (__ue.b == 1)
+
+#define __HIL(x) *(1+pdouble2pint(&x))
+#define __LOL(x) *(pdouble2pint(&x))
+#define __HIB(x) *(int*)&x
+#define __LOB(x) *(1+(int*)&x)
+
+/* Get two 32 bit ints from a double.  */
+
+#define EXTRACT_WORDS_L(ix0,ix1,d)                             \
+do {                                                           \
+  ieee_double_shape_type_little ew_u;                          \
+  ew_u.value = (d);                                            \
+  (ix0) = ew_u.parts.msw;                                      \
+  (ix1) = ew_u.parts.lsw;                                      \
+} while (0)
+
+/* Set a double from two 32 bit ints.  */
+
+#define INSERT_WORDS_L(d,ix0,ix1)                              \
+do {                                                           \
+  ieee_double_shape_type_little iw_u;                          \
+  iw_u.parts.msw = (ix0);                                      \
+  iw_u.parts.lsw = (ix1);                                      \
+  (d) = iw_u.value;                                            \
+} while (0)
+
+/* Get two 32 bit ints from a double.  */
+
+#define EXTRACT_WORDS_B(ix0,ix1,d)                             \
+do {                                                           \
+  ieee_double_shape_type_big ew_u;                             \
+  ew_u.value = (d);                                            \
+  (ix0) = ew_u.parts.msw;                                      \
+  (ix1) = ew_u.parts.lsw;                                      \
+} while (0)
+
+/* Set a double from two 32 bit ints.  */
+
+#define INSERT_WORDS_B(d,ix0,ix1)                              \
+do {                                                           \
+  ieee_double_shape_type_big iw_u;                             \
+  iw_u.parts.msw = (ix0);                                      \
+  iw_u.parts.lsw = (ix1);                                      \
+  (d) = iw_u.value;                                            \
+} while (0)
+
+/* Get the more significant 32 bit int from a double.  */
+#define GET_HIGH_WORD_L(i,d)                                   \
+do {                                                           \
+  ieee_double_shape_type_little gh_u;                          \
+  gh_u.value = (d);                                            \
+  (i) = gh_u.parts.msw;                                                \
+} while (0)
+
+/* Get the more significant 32 bit int from a double.  */
+#define GET_HIGH_WORD_B(i,d)                                   \
+do {                                                           \
+  ieee_double_shape_type_big gh_u;                             \
+  gh_u.value = (d);                                            \
+  (i) = gh_u.parts.msw;                                                \
+} while (0)
+
+/* Set the more significant 32 bits of a double from an int.  */
+#define SET_HIGH_WORD_L(d,v)                                   \
+do {                                                           \
+  ieee_double_shape_type_little sh_u;                          \
+  sh_u.value = (d);                                            \
+  sh_u.parts.msw = (v);                                                \
+  (d) = sh_u.value;                                            \
+} while (0)
+
+/* Set the more significant 32 bits of a double from an int.  */
+#define SET_HIGH_WORD_B(d,v)                                   \
+do {                                                           \
+  ieee_double_shape_type_big sh_u;                             \
+  sh_u.value = (d);                                            \
+  sh_u.parts.msw = (v);                                                \
+  (d) = sh_u.value;                                            \
+} while (0)
+
+/* Macro wrappers.  */
+#define EXTRACT_WORDS(ix0,ix1,d) do {   \
+    if (is_little_endian())             \
+        EXTRACT_WORDS_L(ix0,ix1,d);     \
+    else                                \
+        EXTRACT_WORDS_B(ix0,ix1,d);     \
+} while (0)
+
+#define INSERT_WORDS(d,ix0,ix1) do {    \
+    if (is_little_endian())             \
+        INSERT_WORDS_L(d,ix0,ix1);      \
+    else                                \
+        INSERT_WORDS_B(d,ix0,ix1);      \
+} while (0)
+
+#define GET_HIGH_WORD(i,d)              \
+    do {                                \
+        if (is_little_endian())         \
+            GET_HIGH_WORD_L(i,d);       \
+        else                            \
+            GET_HIGH_WORD_B(i,d);       \
+    } while (0)
+
+#define SET_HIGH_WORD(d,v)              \
+    do {                                \
+        if (is_little_endian())         \
+            SET_HIGH_WORD_L(d,v);       \
+        else                            \
+            SET_HIGH_WORD_B(d,v);       \
+    } while (0)
+
+#define __HI(x) (is_little_endian() ? __HIL(x) : __HIB(x))
+
+#define __LO(x) (is_little_endian() ? __LOL(x) : __LOB(x))
+
+/*
+ * Attempt to get strict C99 semantics for assignment with non-C99 compilers.
+ */
+#if FLT_EVAL_METHOD == 0 || __GNUC__ == 0
+#define        STRICT_ASSIGN(type, lval, rval) ((lval) = (rval))
+#else
+#define        STRICT_ASSIGN(type, lval, rval) do {    \
+       volatile type __lval;                   \
+                                               \
+       if (sizeof(type) >= sizeof(long double))        \
+               (lval) = (rval);                \
+       else {                                  \
+               __lval = (rval);                \
+               (lval) = __lval;                \
+       }                                       \
+} while (0)
+#endif
+
+#ifdef __FDLIBM_STDC__
+static const double huge = 1.0e300;
+#else
+static double huge = 1.0e300;
+#endif
+
+#ifdef __STDC__
+static const double
+#else
+static double
+#endif
+tiny  = 1.0e-300;
+
+#ifdef __STDC__
+static const double
+#else
+static double
+#endif
+one=  1.00000000000000000000e+00; /* 0x3FF00000, 0x00000000 */
+
+#ifdef __STDC__
+static const double
+#else
+static double
+#endif
+TWO52[2]={
+  4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
+ -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */
+};
+
+static double freebsd_sqrt(double x);
+static double freebsd_floor(double x);
+static double freebsd_ceil(double x);
+static double freebsd_fabs(double x);
+static double freebsd_rint(double x);
+static int freebsd_isnan(double x);
+
+static double freebsd_sqrt(double x)           /* wrapper sqrt */
+{
+       double z;
+       int32_t sign = (int)0x80000000;
+       int32_t ix0,s0,q,m,t,i;
+       u_int32_t r,t1,s1,ix1,q1;
+
+       EXTRACT_WORDS(ix0,ix1,x);
+
+    /* take care of Inf and NaN */
+       if((ix0&0x7ff00000)==0x7ff00000) {
+           return x*x+x;               /* sqrt(NaN)=NaN, sqrt(+inf)=+inf
+                                          sqrt(-inf)=sNaN */
+       }
+    /* take care of zero */
+       if(ix0<=0) {
+           if(((ix0&(~sign))|ix1)==0) return x;/* sqrt(+-0) = +-0 */
+           else if(ix0<0)
+               return (x-x)/(x-x);             /* sqrt(-ve) = sNaN */
+       }
+    /* normalize x */
+       m = (ix0>>20);
+       if(m==0) {                              /* subnormal x */
+           while(ix0==0) {
+               m -= 21;
+               ix0 |= (ix1>>11); ix1 <<= 21;
+           }
+           for(i=0;(ix0&0x00100000)==0;i++) ix0<<=1;
+           m -= i-1;
+           ix0 |= (ix1>>(32-i));
+           ix1 <<= i;
+       }
+       m -= 1023;      /* unbias exponent */
+       ix0 = (ix0&0x000fffff)|0x00100000;
+       if(m&1){        /* odd m, double x to make it even */
+           ix0 += ix0 + ((ix1&sign)>>31);
+           ix1 += ix1;
+       }
+       m >>= 1;        /* m = [m/2] */
+
+    /* generate sqrt(x) bit by bit */
+       ix0 += ix0 + ((ix1&sign)>>31);
+       ix1 += ix1;
+       q = q1 = s0 = s1 = 0;   /* [q,q1] = sqrt(x) */
+       r = 0x00200000;         /* r = moving bit from right to left */
+
+       while(r!=0) {
+           t = s0+r;
+           if(t<=ix0) {
+               s0   = t+r;
+               ix0 -= t;
+               q   += r;
+           }
+           ix0 += ix0 + ((ix1&sign)>>31);
+           ix1 += ix1;
+           r>>=1;
+       }
+
+       r = sign;
+       while(r!=0) {
+           t1 = s1+r;
+           t  = s0;
+           if((t<ix0)||((t==ix0)&&(t1<=ix1))) {
+               s1  = t1+r;
+               if(((t1&sign)==sign)&&(s1&sign)==0) s0 += 1;
+               ix0 -= t;
+               if (ix1 < t1) ix0 -= 1;
+               ix1 -= t1;
+               q1  += r;
+           }
+           ix0 += ix0 + ((ix1&sign)>>31);
+           ix1 += ix1;
+           r>>=1;
+       }
+
+    /* use floating add to find out rounding direction */
+       if((ix0|ix1)!=0) {
+           z = one-tiny; /* trigger inexact flag */
+           if (z>=one) {
+               z = one+tiny;
+               if (q1==(u_int32_t)0xffffffff) { q1=0; q += 1;}
+               else if (z>one) {
+                   if (q1==(u_int32_t)0xfffffffe) q+=1;
+                   q1+=2;
+               } else
+                   q1 += (q1&1);
+           }
+       }
+       ix0 = (q>>1)+0x3fe00000;
+       ix1 =  q1>>1;
+       if ((q&1)==1) ix1 |= sign;
+       ix0 += (m <<20);
+
+       INSERT_WORDS(z,ix0,ix1);
+
+       return z;
+}
+
+static double freebsd_floor(double x)
+{
+       int32_t i0,i1,j0;
+       u_int32_t i,j;
+
+       EXTRACT_WORDS(i0,i1,x);
+
+       j0 = ((i0>>20)&0x7ff)-0x3ff;
+       if(j0<20) {
+           if(j0<0) {  /* raise inexact if x != 0 */
+               if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
+                   if(i0>=0) {i0=i1=0;}
+                   else if(((i0&0x7fffffff)|i1)!=0)
+                       { i0=0xbff00000;i1=0;}
+               }
+           } else {
+               i = (0x000fffff)>>j0;
+               if(((i0&i)|i1)==0) return x; /* x is integral */
+               if(huge+x>0.0) {        /* raise inexact flag */
+                   if(i0<0) i0 += (0x00100000)>>j0;
+                   i0 &= (~i); i1=0;
+               }
+           }
+       } else if (j0>51) {
+           if(j0==0x400) return x+x;   /* inf or NaN */
+           else return x;              /* x is integral */
+       } else {
+           i = ((u_int32_t)(0xffffffff))>>(j0-20);
+           if((i1&i)==0) return x;     /* x is integral */
+           if(huge+x>0.0) {            /* raise inexact flag */
+               if(i0<0) {
+                   if(j0==20) i0+=1;
+                   else {
+                       j = i1+(1<<(52-j0));
+                       if(j<i1) i0 +=1 ;       /* got a carry */
+                       i1=j;
+                   }
+               }
+               i1 &= (~i);
+           }
+       }
+
+       INSERT_WORDS(x,i0,i1);
+
+       return x;
+}
+
+static double freebsd_ceil(double x)
+{
+       int32_t i0,i1,j0;
+       u_int32_t i,j;
+       EXTRACT_WORDS(i0,i1,x);
+       j0 = ((i0>>20)&0x7ff)-0x3ff;
+       if(j0<20) {
+           if(j0<0) {  /* raise inexact if x != 0 */
+               if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
+                   if(i0<0) {i0=0x80000000;i1=0;}
+                   else if((i0|i1)!=0) { i0=0x3ff00000;i1=0;}
+               }
+           } else {
+               i = (0x000fffff)>>j0;
+               if(((i0&i)|i1)==0) return x; /* x is integral */
+               if(huge+x>0.0) {        /* raise inexact flag */
+                   if(i0>0) i0 += (0x00100000)>>j0;
+                   i0 &= (~i); i1=0;
+               }
+           }
+       } else if (j0>51) {
+           if(j0==0x400) return x+x;   /* inf or NaN */
+           else return x;              /* x is integral */
+       } else {
+           i = ((u_int32_t)(0xffffffff))>>(j0-20);
+           if((i1&i)==0) return x;     /* x is integral */
+           if(huge+x>0.0) {            /* raise inexact flag */
+               if(i0>0) {
+                   if(j0==20) i0+=1;
+                   else {
+                       j = i1 + (1<<(52-j0));
+                       if(j<i1) i0+=1; /* got a carry */
+                       i1 = j;
+                   }
+               }
+               i1 &= (~i);
+           }
+       }
+       INSERT_WORDS(x,i0,i1);
+       return x;
+}
+
+static double freebsd_rint(double x)
+{
+       int32_t i0,j0,sx;
+       u_int32_t i,i1;
+       double w,t;
+       EXTRACT_WORDS(i0,i1,x);
+       sx = (i0>>31)&1;
+       j0 = ((i0>>20)&0x7ff)-0x3ff;
+       if(j0<20) {
+           if(j0<0) {
+               if(((i0&0x7fffffff)|i1)==0) return x;
+               i1 |= (i0&0x0fffff);
+               i0 &= 0xfffe0000;
+               i0 |= ((i1|-i1)>>12)&0x80000;
+               SET_HIGH_WORD(x,i0);
+               STRICT_ASSIGN(double,w,TWO52[sx]+x);
+               t =  w-TWO52[sx];
+               GET_HIGH_WORD(i0,t);
+               SET_HIGH_WORD(t,(i0&0x7fffffff)|(sx<<31));
+               return t;
+           } else {
+               i = (0x000fffff)>>j0;
+               if(((i0&i)|i1)==0) return x; /* x is integral */
+               i>>=1;
+               if(((i0&i)|i1)!=0) {
+                   /*
+                    * Some bit is set after the 0.5 bit.  To avoid the
+                    * possibility of errors from double rounding in
+                    * w = TWO52[sx]+x, adjust the 0.25 bit to a lower
+                    * guard bit.  We do this for all j0<=51.  The
+                    * adjustment is trickiest for j0==18 and j0==19
+                    * since then it spans the word boundary.
+                    */
+                   if(j0==19) i1 = 0x40000000; else
+                   if(j0==18) i1 = 0x80000000; else
+                   i0 = (i0&(~i))|((0x20000)>>j0);
+               }
+           }
+       } else if (j0>51) {
+           if(j0==0x400) return x+x;   /* inf or NaN */
+           else return x;              /* x is integral */
+       } else {
+           i = ((u_int32_t)(0xffffffff))>>(j0-20);
+           if((i1&i)==0) return x;     /* x is integral */
+           i>>=1;
+           if((i1&i)!=0) i1 = (i1&(~i))|((0x40000000)>>(j0-20));
+       }
+       INSERT_WORDS(x,i0,i1);
+       STRICT_ASSIGN(double,w,TWO52[sx]+x);
+       return w-TWO52[sx];
+}
+
+static int freebsd_isnan(double d)
+{
+       if (is_little_endian()) {
+         IEEEd2bits_L u;
+         u.d = d;
+         return (u.bits.exp == 2047 && (u.bits.manl != 0 || u.bits.manh != 0));
+       }
+       else {
+      IEEEd2bits_B u;
+         u.d = d;
+         return (u.bits.exp == 2047 && (u.bits.manl != 0 || u.bits.manh != 0));
+       }
+}
+
+static double freebsd_fabs(double x)
+{
+       u_int32_t high;
+       GET_HIGH_WORD(high,x);
+       SET_HIGH_WORD(x,high&0x7fffffff);
+        return x;
+}
+
+double sqrt(double x)
+{
+  return freebsd_sqrt(x);
+}
+
+double floor(double x)
+{
+  return freebsd_floor(x);
+}
+
+double ceil(double x)
+{
+  return freebsd_ceil(x);
+}
+
+double fmin(double x, double y)
+{
+  return x < y ? x : y;
+}
+
+double fmax(double x, double y)
+{
+  return x > y ? x : y;
+}
+
+double rint(double x)
+{
+  return freebsd_rint(x);
+}
+
+double fabs(double x)
+{
+  return freebsd_fabs(x);
+}
+
+int isnan(double x)
+{
+  return freebsd_isnan(x);
+}
+
+double trunc(double x)
+{
+  return (x > 0) ? freebsd_floor(x) : freebsd_ceil(x);
+}
+
+int signbit(double x)
+{
+  return ((__HI(x) & 0x80000000) >> 31);
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_platform.c 
b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_platform.c
new file mode 100755
index 0000000..f8ca573
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_platform.c
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include <stdlib.h>
+#include <string.h>
+
+char *bh_strdup(const char *s)
+{
+    char *s1 = NULL;
+    if (s && (s1 = bh_malloc(strlen(s) + 1)))
+        memcpy(s1, s, strlen(s) + 1);
+    return s1;
+}
+
+int bh_platform_init()
+{
+    return 0;
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_platform.h 
b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_platform.h
new file mode 100755
index 0000000..e23958c
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_platform.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_PLATFORM_H
+#define _BH_PLATFORM_H
+
+#include "bh_config.h"
+#include "bh_types.h"
+#include "bh_memory.h"
+#include <aos/kernel.h>
+#include <inttypes.h>
+#include <stdbool.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <limits.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+/* Platform name */
+#define BH_PLATFORM "AliOS-Things"
+
+#define BH_APPLET_PRESERVED_STACK_SIZE (2 * BH_KB)
+
+/* Default thread priority */
+#define BH_THREAD_DEFAULT_PRIORITY 30
+
+#define BH_ROUTINE_MODIFIER
+
+/* Invalid thread tid */
+#define INVALID_THREAD_ID NULL
+
+#define BH_WAIT_FOREVER AOS_WAIT_FOREVER
+
+typedef uint64_t uint64;
+typedef int64_t int64;
+
+#define wa_malloc bh_malloc
+#define wa_free bh_free
+#define wa_strdup bh_strdup
+
+typedef aos_task_t korp_thread;
+typedef korp_thread *korp_tid;
+typedef aos_task_t *aos_tid_t;
+typedef aos_mutex_t korp_mutex;
+typedef aos_sem_t korp_sem;
+
+struct bh_thread_wait_node;
+typedef struct bh_thread_wait_node *bh_thread_wait_list;
+typedef struct korp_cond {
+  aos_mutex_t wait_list_lock;
+  bh_thread_wait_list thread_wait_list;
+} korp_cond;
+
+typedef void* (*thread_start_routine_t)(void*);
+
+/* Unit test framework is based on C++, where the declaration of
+   snprintf is different.  */
+#ifndef __cplusplus
+int snprintf(char *buffer, size_t count, const char *format, ...);
+#endif
+
+#ifndef NULL
+#define NULL ((void*)0)
+#endif
+
+/**
+ * Return the offset of the given field in the given type.
+ *
+ * @param Type the type containing the filed
+ * @param field the field in the type
+ *
+ * @return the offset of field in Type
+ */
+#ifndef offsetof
+#define offsetof(Type, field) ((size_t)(&((Type *)0)->field))
+#endif
+
+extern void bh_assert_internal(int v, const char *file_name, int line_number, 
const char *expr_string);
+#define bh_assert(expr) bh_assert_internal((int)(expr), __FILE__, __LINE__, # 
expr)
+
+extern int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned 
int n);
+extern int b_strcat_s(char * s1, size_t s1max, const char * s2);
+extern int b_strcpy_s(char * s1, size_t s1max, const char * s2);
+
+/* math functions */
+double sqrt(double x);
+double floor(double x);
+double ceil(double x);
+double fmin(double x, double y);
+double fmax(double x, double y);
+double rint(double x);
+double fabs(double x);
+double trunc(double x);
+int signbit(double x);
+int isnan(double x);
+
+int bh_platform_init();
+
+#endif /* end of _BH_PLATFORM_H */
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_platform_log.c 
b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_platform_log.c
new file mode 100755
index 0000000..db0ac60
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_platform_log.c
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include <stdio.h>
+
+
+void bh_log_emit(const char *fmt, va_list ap)
+{
+  vprintf(fmt, ap);
+}
+
+int bh_fprintf(FILE *stream, const char *fmt, ...)
+{
+  (void)stream;
+  va_list ap;
+  int ret;
+
+  va_start(ap, fmt);
+  ret = vprintf(fmt, ap);
+  va_end(ap);
+
+  return ret;
+}
+
+int bh_fflush(void *stream)
+{
+  (void)stream;
+  return 0;
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_thread.c 
b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_thread.c
new file mode 100755
index 0000000..edd51ad
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_thread.c
@@ -0,0 +1,447 @@
+/*
+ * INTEL CONFIDENTIAL
+ *
+ * Copyright 2017-2018 Intel Corporation
+ *
+ * This software and the related documents are Intel copyrighted materials,
+ * and your use of them is governed by the express license under which they
+ * were provided to you (License). Unless the License provides otherwise, you
+ * may not use, modify, copy, publish, distribute, disclose or transmit this
+ * software or the related documents without Intel's prior written permission.
+ *
+ * This software and the related documents are provided as is, with no express
+ * or implied warranties, other than those that are expressly stated in the
+ * License.
+*/
+
+#include "bh_thread.h"
+#include "bh_assert.h"
+#include "bh_log.h"
+#include "bh_memory.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+
+struct bh_thread_data;
+typedef struct bh_thread_wait_node {
+  aos_sem_t sem;
+  bh_thread_wait_list next;
+} bh_thread_wait_node;
+
+typedef struct bh_thread_data {
+  /* Thread body */
+  aos_task_t thread;
+  /* Thread start routine */
+  thread_start_routine_t start_routine;
+  /* Thread start routine argument */
+  void *arg;
+  /* Thread local root */
+  void *tlr;
+  /* Wait node of current thread */
+  bh_thread_wait_node wait_node;
+  /* Lock for waiting list */
+  aos_mutex_t wait_list_lock;
+  /* Waiting list of other threads who are joining this thread */
+  bh_thread_wait_list thread_wait_list;
+} bh_thread_data;
+
+static bool is_thread_sys_inited = false;
+
+/* Thread data of supervisor thread */
+static bh_thread_data supervisor_thread_data;
+
+/* Thread data key */
+static aos_task_key_t thread_data_key;
+
+/* Thread name index */
+static int thread_name_index;
+
+int
+_vm_thread_sys_init()
+{
+  if (is_thread_sys_inited)
+    return BHT_OK;
+
+  if (aos_task_key_create(&thread_data_key) != 0)
+    return BHT_ERROR;
+
+  /* Initialize supervisor thread data */
+  memset(&supervisor_thread_data, 0, sizeof(supervisor_thread_data));
+
+  if (aos_sem_new(&supervisor_thread_data.wait_node.sem, 1) != 0) {
+    aos_task_key_delete(thread_data_key);
+    return BHT_ERROR;
+  }
+
+  if (aos_task_setspecific(thread_data_key, &supervisor_thread_data)) {
+    aos_sem_free(&supervisor_thread_data.wait_node.sem);
+    aos_task_key_delete(thread_data_key);
+    return BHT_ERROR;
+  }
+
+  is_thread_sys_inited = true;
+  return BHT_OK;
+}
+
+void
+vm_thread_sys_destroy()
+{
+  if (is_thread_sys_inited) {
+    aos_task_key_delete(thread_data_key);
+    aos_sem_free(&supervisor_thread_data.wait_node.sem);
+    is_thread_sys_inited = false;
+  }
+}
+
+static bh_thread_data *
+thread_data_current()
+{
+  return aos_task_getspecific(thread_data_key);
+}
+
+static void
+vm_thread_cleanup(void)
+{
+  bh_thread_data *thread_data = thread_data_current();
+  bh_thread_wait_list thread_wait_list;
+  aos_mutex_t *wait_list_lock;
+  aos_sem_t *wait_node_sem;
+
+  bh_assert(thread_data != NULL);
+  wait_list_lock = &thread_data->wait_list_lock;
+  thread_wait_list = thread_data->thread_wait_list;
+  wait_node_sem = &thread_data->wait_node.sem;
+
+  /* Free thread data firstly */
+  bh_free(thread_data);
+
+  aos_mutex_lock(wait_list_lock, AOS_WAIT_FOREVER);
+  if (thread_wait_list) {
+    /* Signal each joining thread */
+    bh_thread_wait_list head = thread_wait_list;
+    while (head) {
+      bh_thread_wait_list next = head->next;
+      aos_sem_signal(&head->sem);
+      head = next;
+    }
+  }
+  aos_mutex_unlock(wait_list_lock);
+
+  /* Free sem and lock */
+  aos_sem_free(wait_node_sem);
+  aos_mutex_free(wait_list_lock);
+}
+
+static void
+vm_thread_wrapper(void *arg)
+{
+  bh_thread_data *thread_data = arg;
+
+  /* Set thread custom data */
+  if (!aos_task_setspecific(thread_data_key, thread_data))
+    thread_data->start_routine(thread_data->arg);
+
+  vm_thread_cleanup();
+}
+
+int
+_vm_thread_create(korp_tid *p_tid, thread_start_routine_t start,
+                  void *arg, unsigned int stack_size)
+{
+  return _vm_thread_create_with_prio(p_tid, start, arg, stack_size,
+                                     BH_THREAD_DEFAULT_PRIORITY);
+}
+
+int
+_vm_thread_create_with_prio(korp_tid *p_tid, thread_start_routine_t start,
+                            void *arg, unsigned int stack_size, int prio)
+{
+  bh_thread_data *thread_data;
+  char thread_name[32];
+
+  if (!p_tid || !stack_size)
+    return BHT_ERROR;
+
+  /* Create and initialize thread data */
+  if (!(thread_data = bh_malloc(sizeof(bh_thread_data))))
+    return BHT_ERROR;
+
+  memset(thread_data, 0, sizeof(bh_thread_data));
+
+  thread_data->start_routine = start;
+  thread_data->arg = arg;
+
+  if (aos_sem_new(&thread_data->wait_node.sem, 1) != 0)
+    goto fail1;
+
+  if (aos_mutex_new(&thread_data->wait_list_lock))
+    goto fail2;
+
+  snprintf(thread_name, sizeof(thread_name), "%s%d",
+           "wasm-thread-", ++thread_name_index);
+
+  /* Create the thread */
+  if (aos_task_new_ext((aos_task_t*)thread_data, thread_name,
+                        vm_thread_wrapper, thread_data,
+                        stack_size, prio))
+    goto fail3;
+
+  aos_msleep(10);
+  *p_tid = (korp_tid)thread_data;
+  return BHT_OK;
+
+fail3:
+  aos_mutex_free(&thread_data->wait_list_lock);
+fail2:
+  aos_sem_free(&thread_data->wait_node.sem);
+fail1:
+  bh_free(thread_data);
+  return BHT_ERROR;
+}
+
+korp_tid
+_vm_self_thread()
+{
+  return (korp_tid)aos_task_getspecific(thread_data_key);
+}
+
+void
+vm_thread_exit(void * code)
+{
+  vm_thread_cleanup();
+  aos_task_exit((int)(intptr_t)code);
+}
+
+int
+_vm_thread_cancel (korp_tid thread)
+{
+  /* TODO */
+  return 0;
+}
+
+int
+_vm_thread_join (korp_tid thread, void **value_ptr, int mills)
+{
+  (void)value_ptr;
+  bh_thread_data *thread_data, *curr_thread_data;
+
+  /* Get thread data of current thread */
+  curr_thread_data = thread_data_current();
+  curr_thread_data->wait_node.next = NULL;
+
+  /* Get thread data */
+  thread_data = (bh_thread_data*)thread;
+
+  aos_mutex_lock(&thread_data->wait_list_lock, AOS_WAIT_FOREVER);
+  if (!thread_data->thread_wait_list)
+    thread_data->thread_wait_list = &curr_thread_data->wait_node;
+  else {
+    /* Add to end of waiting list */
+    bh_thread_wait_node *p = thread_data->thread_wait_list;
+    while (p->next)
+      p = p->next;
+    p->next = &curr_thread_data->wait_node;
+  }
+  aos_mutex_unlock(&thread_data->wait_list_lock);
+
+  /* Wait the sem */
+  aos_sem_wait(&curr_thread_data->wait_node.sem, mills);
+
+  return BHT_OK;
+}
+
+int
+_vm_thread_detach (korp_tid thread)
+{
+  (void)thread;
+  return BHT_OK;
+}
+
+void *
+_vm_tls_get(unsigned idx)
+{
+  (void)idx;
+  bh_thread_data *thread_data;
+
+  bh_assert (idx == 0);
+  thread_data = thread_data_current();
+
+  return thread_data ? thread_data->tlr : NULL;
+}
+
+int
+_vm_tls_put(unsigned idx, void * tls)
+{
+  bh_thread_data *thread_data;
+
+  (void)idx;
+  bh_assert (idx == 0);
+  thread_data = thread_data_current();
+  bh_assert (thread_data != NULL);
+
+  thread_data->tlr = tls;
+  return BHT_OK;
+}
+
+int
+_vm_mutex_init(korp_mutex *mutex)
+{
+  return aos_mutex_new(mutex) == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int
+_vm_recursive_mutex_init(korp_mutex *mutex)
+{
+  return aos_mutex_new(mutex) == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int
+_vm_mutex_destroy(korp_mutex *mutex)
+{
+  aos_mutex_free(mutex);
+  return BHT_OK;
+}
+
+void
+vm_mutex_lock(korp_mutex *mutex)
+{
+  aos_mutex_lock(mutex, AOS_WAIT_FOREVER);
+}
+
+int
+vm_mutex_trylock(korp_mutex *mutex)
+{
+  return aos_mutex_lock(mutex, AOS_NO_WAIT);
+}
+
+void vm_mutex_unlock(korp_mutex *mutex)
+{
+  aos_mutex_unlock(mutex);
+}
+
+int _vm_sem_init(korp_sem* sem, unsigned int c)
+{
+  return aos_sem_new(sem, c) == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_sem_destroy(korp_sem *sem)
+{
+  aos_sem_free(sem);
+  return BHT_OK;
+}
+
+int _vm_sem_wait(korp_sem *sem)
+{
+  return aos_sem_wait(sem, AOS_WAIT_FOREVER);
+}
+
+int _vm_sem_reltimedwait(korp_sem *sem, int mills)
+{
+  return aos_sem_wait(sem, mills);
+}
+
+int _vm_sem_post(korp_sem *sem)
+{
+  aos_sem_signal(sem);
+  return BHT_OK;
+}
+
+int
+_vm_cond_init(korp_cond *cond)
+{
+  if (aos_mutex_new(&cond->wait_list_lock) != 0)
+    return BHT_ERROR;
+
+  cond->thread_wait_list = NULL;
+  return BHT_OK;
+}
+
+int
+_vm_cond_destroy(korp_cond *cond)
+{
+  aos_mutex_free(&cond->wait_list_lock);
+  return BHT_OK;
+}
+
+static int
+vm_cond_wait_internal(korp_cond *cond, korp_mutex *mutex,
+                      bool timed, int mills)
+{
+  bh_thread_wait_node *node = &thread_data_current()->wait_node;
+
+  node->next = NULL;
+
+  aos_mutex_lock(&cond->wait_list_lock, AOS_WAIT_FOREVER);
+  if (!cond->thread_wait_list)
+    cond->thread_wait_list = node;
+  else {
+    /* Add to end of wait list */
+    bh_thread_wait_node *p = cond->thread_wait_list;
+    while (p->next)
+      p = p->next;
+    p->next = node;
+  }
+  aos_mutex_unlock(&cond->wait_list_lock);
+
+  /* Unlock mutex, wait sem and lock mutex again */
+  aos_mutex_unlock(mutex);
+  aos_sem_wait(&node->sem, timed ? mills : AOS_WAIT_FOREVER);
+  aos_mutex_lock(mutex, AOS_WAIT_FOREVER);
+
+  /* Remove wait node from wait list */
+  aos_mutex_lock(&cond->wait_list_lock, AOS_WAIT_FOREVER);
+  if (cond->thread_wait_list == node)
+    cond->thread_wait_list = node->next;
+  else {
+    /* Remove from the wait list */
+    bh_thread_wait_node *p = cond->thread_wait_list;
+    while (p->next != node)
+      p = p->next;
+    p->next = node->next;
+  }
+  aos_mutex_unlock(&cond->wait_list_lock);
+
+  return BHT_OK;
+}
+
+int
+_vm_cond_wait(korp_cond *cond, korp_mutex *mutex)
+{
+  return vm_cond_wait_internal(cond, mutex, false, 0);
+}
+
+int
+_vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills)
+{
+  return vm_cond_wait_internal(cond, mutex, true, mills);
+}
+
+int
+_vm_cond_signal(korp_cond *cond)
+{
+  /* Signal the head wait node of wait list */
+  aos_mutex_lock(&cond->wait_list_lock, AOS_WAIT_FOREVER);
+  if (cond->thread_wait_list)
+    aos_sem_signal(&cond->thread_wait_list->sem);
+  aos_mutex_unlock(&cond->wait_list_lock);
+
+  return BHT_OK;
+}
+
+int
+_vm_cond_broadcast (korp_cond *cond)
+{
+  /* Signal each wait node of wait list */
+  aos_mutex_lock(&cond->wait_list_lock, AOS_WAIT_FOREVER);
+  if (cond->thread_wait_list) {
+    bh_thread_wait_node *p = cond->thread_wait_list;
+    while (p) {
+      aos_sem_signal(&p->sem);
+      p = p->next;
+    }
+  }
+  aos_mutex_unlock(&cond->wait_list_lock);
+
+  return BHT_OK;
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_time.c 
b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_time.c
new file mode 100755
index 0000000..e66590b
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/alios/bh_time.c
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_time.h"
+
+/*
+ * This function returns milliseconds per tick.
+ * @return milliseconds per tick.
+ */
+uint64 _bh_time_get_tick_millisecond()
+{
+  return aos_get_hz() / 1000();
+}
+
+/*
+ * This function returns milliseconds after boot.
+ * @return milliseconds after boot.
+ */
+uint64 _bh_time_get_boot_millisecond()
+{
+  return (uint64)aos_now_ms();
+}
+
+uint64 _bh_time_get_millisecond_from_1970()
+{
+  return (uint64)aos_now_ms();
+}
+
+size_t
+_bh_time_strftime (char *str, size_t max, const char *format, int64 time)
+{
+  str = aos_now_time_str(str, max);
+  return str ? strlen(str) + 1 : 0;
+}
+
diff --git 
a/scriptsrcs/wamr/core/shared-lib/platform/alios/shared_platform.cmake 
b/scriptsrcs/wamr/core/shared-lib/platform/alios/shared_platform.cmake
new file mode 100755
index 0000000..102ec9c
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/alios/shared_platform.cmake
@@ -0,0 +1,24 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (PLATFORM_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${PLATFORM_SHARED_DIR})
+include_directories(${PLATFORM_SHARED_DIR}/../include)
+
+
+file (GLOB_RECURSE source_all ${PLATFORM_SHARED_DIR}/*.c)
+
+set (PLATFORM_SHARED_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/android/bh_assert.c 
b/scriptsrcs/wamr/core/shared-lib/platform/android/bh_assert.c
new file mode 100755
index 0000000..b52a9aa
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/android/bh_assert.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include "bh_assert.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef BH_TEST
+#include <setjmp.h>
+#endif
+
+#ifdef BH_TEST
+/* for exception throwing */
+jmp_buf bh_test_jb;
+#endif
+
+void bh_assert_internal(int v, const char *file_name, int line_number,
+        const char *expr_string)
+{
+    if (v)
+        return;
+
+    if (!file_name)
+        file_name = "NULL FILENAME";
+    if (!expr_string)
+        expr_string = "NULL EXPR_STRING";
+
+    printf("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string,
+            file_name, line_number);
+
+#ifdef BH_TEST
+    longjmp(bh_test_jb, 1);
+#endif
+
+    abort();
+}
+
+void bh_debug_internal(const char *file_name, int line_number, const char *fmt,
+        ...)
+{
+#ifndef JEFF_TEST_VERIFIER
+    va_list args;
+
+    va_start(args, fmt);
+    bh_assert(file_name);
+
+    printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number);
+    vprintf(fmt, args);
+
+    va_end(args);
+    printf("\n");
+#endif
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/android/bh_definition.c 
b/scriptsrcs/wamr/core/shared-lib/platform/android/bh_definition.c
new file mode 100755
index 0000000..47ee11e
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/android/bh_definition.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_definition.h"
+#include "bh_platform.h"
+
+int bh_return(int ret)
+{
+    return ret;
+}
+
+#define RSIZE_MAX 0x7FFFFFFF
+int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n)
+{
+    char *dest = (char*) s1;
+    char *src = (char*) s2;
+    if (n == 0) {
+        return 0;
+    }
+
+    if (s1 == NULL || s1max > RSIZE_MAX) {
+        return -1;
+    }
+    if (s2 == NULL || n > s1max) {
+        memset(dest, 0, s1max);
+        return -1;
+    }
+    memcpy(dest, src, n);
+    return 0;
+}
+
+int b_strcat_s(char * s1, size_t s1max, const char * s2)
+{
+    if (NULL
+            == s1|| NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1) || 
s1max > RSIZE_MAX) {
+        return -1;
+    }
+
+    strcat(s1, s2);
+
+    return 0;
+}
+
+int b_strcpy_s(char * s1, size_t s1max, const char * s2)
+{
+    if (NULL
+            == s1|| NULL == s2 || s1max < (strlen(s2) + 1) || s1max > 
RSIZE_MAX) {
+        return -1;
+    }
+
+    strcpy(s1, s2);
+
+    return 0;
+}
+
+int fopen_s(FILE ** pFile, const char *filename, const char *mode)
+{
+    if (NULL == pFile || NULL == filename || NULL == mode) {
+        return -1;
+    }
+
+    *pFile = fopen(filename, mode);
+
+    if (NULL == *pFile)
+        return -1;
+
+    return 0;
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/android/bh_platform.h 
b/scriptsrcs/wamr/core/shared-lib/platform/android/bh_platform.h
new file mode 100755
index 0000000..eff3861
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/android/bh_platform.h
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_PLATFORM_H
+#define _BH_PLATFORM_H
+
+#include "bh_config.h"
+#include "bh_types.h"
+
+#include <inttypes.h>
+#include <stdbool.h>
+typedef uint64_t uint64;
+typedef int64_t int64;
+
+extern void DEBUGME(void);
+
+#define DIE do{bh_debug("Die here\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); 
DEBUGME(void); while(1);}while(0)
+
+#define BH_PLATFORM "Linux"
+
+/* NEED qsort */
+
+#include <stdarg.h>
+#include <ctype.h>
+#include <pthread.h>
+#include <limits.h>
+#include <semaphore.h>
+#include <errno.h>
+
+#define _STACK_SIZE_ADJUSTMENT (32 * 1024)
+
+/* Stack size of applet manager thread.  */
+#define BH_APPLET_MANAGER_THREAD_STACK_SIZE (8 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Stack size of HMC thread.  */
+#define BH_HMC_THREAD_STACK_SIZE            (4 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Stack size of watchdog thread.  */
+#define BH_WATCHDOG_THREAD_SIZE             (4 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Stack size of applet threads's native part.  */
+#define BH_APPLET_PRESERVED_STACK_SIZE      (8 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Stack size of remote invoke listen thread.  */
+#define BH_REMOTE_INVOKE_THREAD_STACK_SIZE  (4 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Stack size of remote post listen thread.  */
+#define BH_REMOTE_POST_THREAD_STACK_SIZE    (4 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Maximal recursion depth of interpreter.  */
+#define BH_MAX_INTERP_RECURSION_DEPTH       8
+
+#define BH_ROUTINE_MODIFIER
+#define BHT_TIMEDOUT ETIMEDOUT
+
+#define INVALID_THREAD_ID 0xFFffFFff
+#define INVALID_SEM_ID SEM_FAILED
+
+typedef pthread_t korp_tid;
+typedef pthread_mutex_t korp_mutex;
+typedef sem_t korp_sem;
+typedef pthread_cond_t korp_cond;
+typedef void* (*thread_start_routine_t)(void*);
+
+#include <time.h>
+#include <string.h>
+
+/* The following operations declared in string.h may be defined as
+ macros on Linux, so don't declare them as functions here.  */
+/* memset */
+/* memcpy */
+/* memmove */
+
+/* #include <stdio.h> */
+
+/* Unit test framework is based on C++, where the declaration of
+ snprintf is different.  */
+#ifndef __cplusplus
+int snprintf(char *buffer, size_t count, const char *format, ...);
+#endif
+
+/* #include <math.h> */
+
+double fmod(double x, double y);
+float fmodf(float x, float y);
+
+/* Definitions for applet debugging */
+#define APPLET_DEBUG_LISTEN_PORT 8000
+#define BH_SOCKET_INVALID_SOCK -1
+#define BH_WAIT_FOREVER 0xFFFFFFFF
+typedef int bh_socket_t;
+
+#ifndef NULL
+#  define NULL ((void*) 0)
+#endif
+
+extern int b_memcpy_s(void * s1, unsigned int s1max, const void * s2,
+        unsigned int n);
+extern int strcat_s(char * s1, size_t s1max, const char * s2);
+extern int strcpy_s(char * s1, size_t s1max, const char * s2);
+#include <stdio.h>
+extern int fopen_s(FILE ** pFile, const char *filename, const char *mode);
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/android/bh_platform_log.c 
b/scriptsrcs/wamr/core/shared-lib/platform/android/bh_platform_log.c
new file mode 100755
index 0000000..4ff0319
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/android/bh_platform_log.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include <stdio.h>
+
+void bh_log_emit(const char *fmt, va_list ap)
+{
+    vprintf(fmt, ap);
+    fflush(stdout);
+}
+
+int bh_fprintf(FILE *stream, const char *fmt, ...)
+{
+    va_list ap;
+    int ret;
+
+    va_start(ap, fmt);
+    ret = vfprintf(stream ? stream : stdout, fmt, ap);
+    va_end(ap);
+
+    return ret;
+}
+
+int bh_fflush(void *stream)
+{
+    return fflush(stream ? stream : stdout);
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/android/bh_thread.c 
b/scriptsrcs/wamr/core/shared-lib/platform/android/bh_thread.c
new file mode 100755
index 0000000..6e4f4a5
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/android/bh_thread.c
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_thread.h"
+#include "bh_assert.h"
+#include "bh_log.h"
+#include "bh_memory.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+
+static korp_mutex thread_list_lock;
+static pthread_key_t thread_local_storage_key[BH_MAX_TLS_NUM];
+
+int _vm_thread_sys_init()
+{
+    unsigned i;
+
+    for (i = 0; i < BH_MAX_TLS_NUM; i++)
+        pthread_key_create(&thread_local_storage_key[i], NULL);
+
+    return vm_mutex_init(&thread_list_lock);
+}
+
+korp_tid _vm_self_thread()
+{
+    return (korp_tid) pthread_self();
+}
+
+void *_vm_tls_get(unsigned idx)
+{
+    bh_assert(idx < BH_MAX_TLS_NUM);
+    return pthread_getspecific(thread_local_storage_key[idx]);
+}
+
+int _vm_tls_put(unsigned idx, void * tls)
+{
+    bh_assert(idx < BH_MAX_TLS_NUM);
+    pthread_setspecific(thread_local_storage_key[idx], tls);
+    return BHT_OK;
+}
+
+int _vm_mutex_init(korp_mutex *mutex)
+{
+    return pthread_mutex_init(mutex, NULL) == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_recursive_mutex_init(korp_mutex *mutex)
+{
+    int ret;
+
+    pthread_mutexattr_t mattr;
+
+    bh_assert(mutex);
+    ret = pthread_mutexattr_init(&mattr);
+    if (ret)
+        return BHT_ERROR;
+
+    pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_RECURSIVE_NP);
+    ret = pthread_mutex_init(mutex, &mattr);
+    pthread_mutexattr_destroy(&mattr);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_mutex_destroy(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_destroy(mutex);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+/* Returned error (EINVAL, EAGAIN and EDEADLK) from
+ locking the mutex indicates some logic error present in
+ the program somewhere.
+ Don't try to recover error for an existing unknown error.*/
+void vm_mutex_lock(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_lock(mutex);
+    if (0 != ret) {
+        LOG_FATAL("vm mutex lock failed (ret=%d)!\n", ret);
+        exit(-1);
+    }
+}
+
+int vm_mutex_trylock(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_trylock(mutex);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+/* Returned error (EINVAL, EAGAIN and EPERM) from
+ unlocking the mutex indicates some logic error present
+ in the program somewhere.
+ Don't try to recover error for an existing unknown error.*/
+void vm_mutex_unlock(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_unlock(mutex);
+    if (0 != ret) {
+        LOG_FATAL("vm mutex unlock failed (ret=%d)!\n", ret);
+        exit(-1);
+    }
+}
+
+int _vm_cond_init(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_init(cond, NULL) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_destroy(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_destroy(cond) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/android/bh_time.c 
b/scriptsrcs/wamr/core/shared-lib/platform/android/bh_time.c
new file mode 100755
index 0000000..6dad596
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/android/bh_time.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_time.h"
+
+#include <unistd.h>
+#include <stdio.h>
+//#include <sys/timeb.h>
+#include <time.h>
+
+/*
+ * This function returns milliseconds per tick.
+ * @return milliseconds per tick.
+ */
+uint64 _bh_time_get_tick_millisecond()
+{
+    return sysconf(_SC_CLK_TCK);
+}
+
+/*
+ * This function returns milliseconds after boot.
+ * @return milliseconds after boot.
+ */
+uint64 _bh_time_get_boot_millisecond()
+{
+    struct timespec ts;
+    if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
+        return 0;
+    }
+
+    return ((uint64) ts.tv_sec) * 1000 + ts.tv_nsec / (1000 * 1000);
+}
+
+/*
+ * This function returns GMT time milliseconds since from 1970.1.1, AKA UNIX 
time.
+ * @return milliseconds since from 1970.1.1.
+ */
+uint64 _bh_time_get_millisecond_from_1970()
+{
+    struct timeval tv;
+    gettimeofday(&tv, NULL);
+    uint64 millisecondsSinceEpoch = (uint64_t)(tv.tv_sec) * 1000
+            + (uint64_t)(tv.tv_usec) / 1000;
+    return millisecondsSinceEpoch;
+}
+
+size_t _bh_time_strftime(char *s, size_t max, const char *format, int64 time)
+{
+    time_t time_sec = time / 1000;
+    struct tm *ltp;
+
+    ltp = localtime(&time_sec);
+    if (ltp == NULL) {
+        return 0;
+    }
+    return strftime(s, max, format, ltp);
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_assert.c 
b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_assert.c
new file mode 100755
index 0000000..b52a9aa
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_assert.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include "bh_assert.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef BH_TEST
+#include <setjmp.h>
+#endif
+
+#ifdef BH_TEST
+/* for exception throwing */
+jmp_buf bh_test_jb;
+#endif
+
+void bh_assert_internal(int v, const char *file_name, int line_number,
+        const char *expr_string)
+{
+    if (v)
+        return;
+
+    if (!file_name)
+        file_name = "NULL FILENAME";
+    if (!expr_string)
+        expr_string = "NULL EXPR_STRING";
+
+    printf("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string,
+            file_name, line_number);
+
+#ifdef BH_TEST
+    longjmp(bh_test_jb, 1);
+#endif
+
+    abort();
+}
+
+void bh_debug_internal(const char *file_name, int line_number, const char *fmt,
+        ...)
+{
+#ifndef JEFF_TEST_VERIFIER
+    va_list args;
+
+    va_start(args, fmt);
+    bh_assert(file_name);
+
+    printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number);
+    vprintf(fmt, args);
+
+    va_end(args);
+    printf("\n");
+#endif
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_definition.c 
b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_definition.c
new file mode 100755
index 0000000..47ee11e
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_definition.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_definition.h"
+#include "bh_platform.h"
+
+int bh_return(int ret)
+{
+    return ret;
+}
+
+#define RSIZE_MAX 0x7FFFFFFF
+int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n)
+{
+    char *dest = (char*) s1;
+    char *src = (char*) s2;
+    if (n == 0) {
+        return 0;
+    }
+
+    if (s1 == NULL || s1max > RSIZE_MAX) {
+        return -1;
+    }
+    if (s2 == NULL || n > s1max) {
+        memset(dest, 0, s1max);
+        return -1;
+    }
+    memcpy(dest, src, n);
+    return 0;
+}
+
+int b_strcat_s(char * s1, size_t s1max, const char * s2)
+{
+    if (NULL
+            == s1|| NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1) || 
s1max > RSIZE_MAX) {
+        return -1;
+    }
+
+    strcat(s1, s2);
+
+    return 0;
+}
+
+int b_strcpy_s(char * s1, size_t s1max, const char * s2)
+{
+    if (NULL
+            == s1|| NULL == s2 || s1max < (strlen(s2) + 1) || s1max > 
RSIZE_MAX) {
+        return -1;
+    }
+
+    strcpy(s1, s2);
+
+    return 0;
+}
+
+int fopen_s(FILE ** pFile, const char *filename, const char *mode)
+{
+    if (NULL == pFile || NULL == filename || NULL == mode) {
+        return -1;
+    }
+
+    *pFile = fopen(filename, mode);
+
+    if (NULL == *pFile)
+        return -1;
+
+    return 0;
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_platform.c 
b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_platform.c
new file mode 100755
index 0000000..3ff600c
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_platform.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+char *bh_strdup(const char *s)
+{
+    char *s1 = NULL;
+    if (s && (s1 = bh_malloc(strlen(s) + 1)))
+        memcpy(s1, s, strlen(s) + 1);
+    return s1;
+}
+
+int bh_platform_init()
+{
+    return 0;
+}
+
+char*
+bh_read_file_to_buffer(const char *filename, int *ret_size)
+{
+    char *buffer;
+    int file;
+    int file_size, read_size;
+    struct stat stat_buf;
+
+    if (!filename || !ret_size) {
+        printf("Read file to buffer failed: invalid filename or ret size.\n");
+        return NULL;
+    }
+
+    if ((file = open(filename, O_RDONLY, 0)) == -1) {
+        printf("Read file to buffer failed: open file %s failed.\n",
+               filename);
+        return NULL;
+    }
+
+    if (fstat(file, &stat_buf) != 0) {
+        printf("Read file to buffer failed: fstat file %s failed.\n",
+               filename);
+        close(file);
+        return NULL;
+    }
+
+    file_size = stat_buf.st_size;
+
+    if (!(buffer = bh_malloc(file_size))) {
+        printf("Read file to buffer failed: alloc memory failed.\n");
+        close(file);
+        return NULL;
+    }
+
+    read_size = read(file, buffer, file_size);
+    close(file);
+
+    if (read_size < file_size) {
+        printf("Read file to buffer failed: read file content failed.\n");
+        bh_free(buffer);
+        return NULL;
+    }
+
+    *ret_size = file_size;
+    return buffer;
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_platform.h 
b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_platform.h
new file mode 100755
index 0000000..2715670
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_platform.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_PLATFORM_H
+#define _BH_PLATFORM_H
+
+#include "bh_config.h"
+#include "bh_types.h"
+#include "bh_memory.h"
+#include <inttypes.h>
+#include <stdbool.h>
+#include <assert.h>
+#include <time.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <pthread.h>
+#include <limits.h>
+#include <semaphore.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef uint64_t uint64;
+typedef int64_t int64;
+
+extern void DEBUGME(void);
+
+#define DIE do{bh_debug("Die here\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); 
DEBUGME(void); while(1);}while(0)
+
+#define BH_PLATFORM "Darwin"
+
+/* NEED qsort */
+
+#define _STACK_SIZE_ADJUSTMENT (32 * 1024)
+
+/* Stack size of applet threads's native part.  */
+#define BH_APPLET_PRESERVED_STACK_SIZE      (8 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Default thread priority */
+#define BH_THREAD_DEFAULT_PRIORITY 0
+
+#define BH_ROUTINE_MODIFIER
+
+#define BHT_TIMEDOUT ETIMEDOUT
+
+#define INVALID_THREAD_ID 0xFFffFFff
+
+typedef pthread_t korp_tid;
+typedef pthread_mutex_t korp_mutex;
+typedef sem_t korp_sem;
+typedef pthread_cond_t korp_cond;
+typedef pthread_t korp_thread;
+typedef void* (*thread_start_routine_t)(void*);
+
+#define wa_malloc bh_malloc
+#define wa_free bh_free
+#define wa_strdup bh_strdup
+
+//int snprintf(char *buffer, size_t count, const char *format, ...);
+double fmod(double x, double y);
+float fmodf(float x, float y);
+double sqrt(double x);
+
+#define BH_WAIT_FOREVER 0xFFFFFFFF
+
+#ifndef NULL
+#  define NULL ((void*) 0)
+#endif
+
+/**
+ * Return the offset of the given field in the given type.
+ *
+ * @param Type the type containing the filed
+ * @param field the field in the type
+ *
+ * @return the offset of field in Type
+ */
+#ifndef offsetof
+#define offsetof(Type, field) ((size_t)(&((Type *)0)->field))
+#endif
+
+#define bh_assert assert
+
+int b_memcpy_s(void * s1, unsigned int s1max, const void * s2,
+               unsigned int n);
+int b_strcat_s(char * s1, size_t s1max, const char * s2);
+int b_strcpy_s(char * s1, size_t s1max, const char * s2);
+
+int fopen_s(FILE ** pFile, const char *filename, const char *mode);
+
+char *bh_read_file_to_buffer(const char *filename, int *ret_size);
+
+char *bh_strdup(const char *s);
+
+int bh_platform_init();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_platform_log.c 
b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_platform_log.c
new file mode 100755
index 0000000..4ff0319
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_platform_log.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include <stdio.h>
+
+void bh_log_emit(const char *fmt, va_list ap)
+{
+    vprintf(fmt, ap);
+    fflush(stdout);
+}
+
+int bh_fprintf(FILE *stream, const char *fmt, ...)
+{
+    va_list ap;
+    int ret;
+
+    va_start(ap, fmt);
+    ret = vfprintf(stream ? stream : stdout, fmt, ap);
+    va_end(ap);
+
+    return ret;
+}
+
+int bh_fflush(void *stream)
+{
+    return fflush(stream ? stream : stdout);
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_thread.c 
b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_thread.c
new file mode 100755
index 0000000..97879aa
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_thread.c
@@ -0,0 +1,405 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_thread.h"
+#include "bh_assert.h"
+#include "bh_log.h"
+#include "bh_memory.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+
+static bool is_thread_sys_inited = false;
+
+static korp_mutex thread_list_lock;
+static pthread_key_t thread_local_storage_key[BH_MAX_TLS_NUM];
+
+int _vm_thread_sys_init()
+{
+    unsigned i, j;
+    int ret;
+
+    if (is_thread_sys_inited)
+        return 0;
+
+    for (i = 0; i < BH_MAX_TLS_NUM; i++) {
+        ret = pthread_key_create(&thread_local_storage_key[i], NULL);
+        if (ret)
+            goto fail;
+    }
+
+    ret = vm_mutex_init(&thread_list_lock);
+    if (ret)
+        goto fail;
+
+    is_thread_sys_inited = true;
+    return 0;
+
+    fail: for (j = 0; j < i; j++)
+        pthread_key_delete(thread_local_storage_key[j]);
+    return -1;
+}
+
+void vm_thread_sys_destroy(void)
+{
+    if (is_thread_sys_inited) {
+        unsigned i;
+        for (i = 0; i < BH_MAX_TLS_NUM; i++)
+            pthread_key_delete(thread_local_storage_key[i]);
+        vm_mutex_destroy(&thread_list_lock);
+        is_thread_sys_inited = false;
+    }
+}
+
+typedef struct {
+    thread_start_routine_t start;
+    void* stack;
+    int stack_size;
+    void* arg;
+} thread_wrapper_arg;
+
+static void *vm_thread_wrapper(void *arg)
+{
+    thread_wrapper_arg * targ = arg;
+    LOG_VERBOSE("THREAD CREATE 0x%08x\n", &targ);
+    targ->stack = (void *)((uintptr_t)(&arg) & ~0xfff);
+    _vm_tls_put(1, targ);
+    targ->start(targ->arg);
+    bh_free(targ);
+    _vm_tls_put(1, NULL);
+    return NULL;
+}
+
+int _vm_thread_create_with_prio(korp_tid *tid, thread_start_routine_t start,
+        void *arg, unsigned int stack_size, int prio)
+{
+    pthread_attr_t tattr;
+    thread_wrapper_arg *targ;
+
+    bh_assert(stack_size > 0);
+    bh_assert(tid);
+    bh_assert(start);
+
+    *tid = INVALID_THREAD_ID;
+
+    pthread_attr_init(&tattr);
+    pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_JOINABLE);
+    if (pthread_attr_setstacksize(&tattr, stack_size) != 0) {
+        bh_debug("Invalid thread stack size %u. Min stack size on Linux = %u",
+                stack_size, PTHREAD_STACK_MIN);
+        pthread_attr_destroy(&tattr);
+        return BHT_ERROR;
+    }
+
+    targ = (thread_wrapper_arg*) bh_malloc(sizeof(*targ));
+    if (!targ) {
+        pthread_attr_destroy(&tattr);
+        return BHT_ERROR;
+    }
+
+    targ->start = start;
+    targ->arg = arg;
+    targ->stack_size = stack_size;
+
+    if (pthread_create(tid, &tattr, vm_thread_wrapper, targ) != 0) {
+        pthread_attr_destroy(&tattr);
+        bh_free(targ);
+        return BHT_ERROR;
+    }
+
+    pthread_attr_destroy(&tattr);
+    return BHT_OK;
+}
+
+int _vm_thread_create(korp_tid *tid, thread_start_routine_t start, void *arg,
+        unsigned int stack_size)
+{
+    return _vm_thread_create_with_prio(tid, start, arg, stack_size,
+                                       BH_THREAD_DEFAULT_PRIORITY);
+}
+
+korp_tid _vm_self_thread()
+{
+    return (korp_tid) pthread_self();
+}
+
+void vm_thread_exit(void * code)
+{
+    bh_free(_vm_tls_get(1));
+    _vm_tls_put(1, NULL);
+    pthread_exit(code);
+}
+
+void *_vm_tls_get(unsigned idx)
+{
+    bh_assert(idx < BH_MAX_TLS_NUM);
+    return pthread_getspecific(thread_local_storage_key[idx]);
+}
+
+int _vm_tls_put(unsigned idx, void * tls)
+{
+    bh_assert(idx < BH_MAX_TLS_NUM);
+    pthread_setspecific(thread_local_storage_key[idx], tls);
+    return BHT_OK;
+}
+
+int _vm_mutex_init(korp_mutex *mutex)
+{
+    return pthread_mutex_init(mutex, NULL) == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_recursive_mutex_init(korp_mutex *mutex)
+{
+    int ret;
+
+    pthread_mutexattr_t mattr;
+
+    bh_assert(mutex);
+    ret = pthread_mutexattr_init(&mattr);
+    if (ret)
+        return BHT_ERROR;
+
+    pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_RECURSIVE);
+    ret = pthread_mutex_init(mutex, &mattr);
+    pthread_mutexattr_destroy(&mattr);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_mutex_destroy(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_destroy(mutex);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+/* Returned error (EINVAL, EAGAIN and EDEADLK) from
+ locking the mutex indicates some logic error present in
+ the program somewhere.
+ Don't try to recover error for an existing unknown error.*/
+void vm_mutex_lock(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_lock(mutex);
+    if (0 != ret) {
+        printf("vm mutex lock failed (ret=%d)!\n", ret);
+        exit(-1);
+    }
+}
+
+int vm_mutex_trylock(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_trylock(mutex);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+/* Returned error (EINVAL, EAGAIN and EPERM) from
+ unlocking the mutex indicates some logic error present
+ in the program somewhere.
+ Don't try to recover error for an existing unknown error.*/
+void vm_mutex_unlock(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_unlock(mutex);
+    if (0 != ret) {
+        printf("vm mutex unlock failed (ret=%d)!\n", ret);
+        exit(-1);
+    }
+}
+
+int _vm_sem_init(korp_sem* sem, unsigned int c)
+{
+    int ret;
+
+    bh_assert(sem);
+    ret = sem_init(sem, 0, c);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_sem_destroy(korp_sem *sem)
+{
+    int ret;
+
+    bh_assert(sem);
+    ret = sem_destroy(sem);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_sem_wait(korp_sem *sem)
+{
+    int ret;
+
+    bh_assert(sem);
+
+    ret = sem_wait(sem);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+/*int _vm_sem_reltimedwait(korp_sem *sem, int mills)
+{
+    int ret = BHT_OK;
+
+    struct timespec timeout;
+    const int mills_per_sec = 1000;
+    const int mills_to_nsec = 1E6;
+
+    bh_assert(sem);
+
+    if (mills == BHT_WAIT_FOREVER) {
+        ret = sem_wait(sem);
+    } else {
+
+        timeout.tv_sec = mills / mills_per_sec;
+        timeout.tv_nsec = (mills % mills_per_sec) * mills_to_nsec;
+        timeout.tv_sec += time(NULL);
+
+        ret = sem_timedwait(sem, &timeout);
+    }
+
+    if (ret != BHT_OK) {
+        if (errno == BHT_TIMEDOUT) {
+            ret = BHT_TIMEDOUT;
+            errno = 0;
+        } else {
+            bh_debug("Faliure happens when timed wait is called");
+            bh_assert(0);
+        }
+    }
+
+    return ret;
+}
+*/
+
+int _vm_sem_post(korp_sem *sem)
+{
+    bh_assert(sem);
+
+    return sem_post(sem) == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_cond_init(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_init(cond, NULL) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_destroy(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_destroy(cond) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex)
+{
+    bh_assert(cond);
+    bh_assert(mutex);
+
+    if (pthread_cond_wait(cond, mutex) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+static void msec_nsec_to_abstime(struct timespec *ts, int64 msec, int32 nsec)
+{
+    struct timeval tv;
+
+    gettimeofday(&tv, NULL);
+
+    ts->tv_sec = tv.tv_sec + msec / 1000;
+    ts->tv_nsec = tv.tv_usec * 1000 + (msec % 1000) * 1000000 + nsec;
+
+    if (ts->tv_nsec >= 1000000000L) {
+        ts->tv_sec++;
+        ts->tv_nsec -= 1000000000L;
+    }
+}
+
+int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills)
+{
+    int ret;
+    struct timespec abstime;
+
+    if (mills == BHT_WAIT_FOREVER)
+        ret = pthread_cond_wait(cond, mutex);
+    else {
+        msec_nsec_to_abstime(&abstime, mills, 0);
+        ret = pthread_cond_timedwait(cond, mutex, &abstime);
+    }
+
+    if (ret != BHT_OK && ret != BHT_TIMEDOUT)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_signal(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_signal(cond) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_broadcast(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_broadcast(cond) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_thread_cancel(korp_tid thread)
+{
+    return pthread_cancel(thread);
+}
+
+int _vm_thread_join(korp_tid thread, void **value_ptr, int mills)
+{
+    return pthread_join(thread, value_ptr);
+}
+
+int _vm_thread_detach(korp_tid thread)
+{
+    return pthread_detach(thread);
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_time.c 
b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_time.c
new file mode 100755
index 0000000..0627b08
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/darwin/bh_time.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_time.h"
+
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/timeb.h>
+#include <time.h>
+
+/*
+ * This function returns milliseconds per tick.
+ * @return milliseconds per tick.
+ */
+uint64 _bh_time_get_tick_millisecond()
+{
+    return sysconf(_SC_CLK_TCK);
+}
+
+/*
+ * This function returns milliseconds after boot.
+ * @return milliseconds after boot.
+ */
+uint64 _bh_time_get_boot_millisecond()
+{
+    struct timespec ts;
+    if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
+        return 0;
+    }
+
+    return ((uint64) ts.tv_sec) * 1000 + ts.tv_nsec / (1000 * 1000);
+}
+
+uint32 bh_get_tick_sec()
+{
+    return _bh_time_get_boot_millisecond() / 1000;
+}
+
+/*
+ * This function returns GMT time milliseconds since from 1970.1.1, AKA UNIX 
time.
+ * @return milliseconds since from 1970.1.1.
+ */
+uint64 _bh_time_get_millisecond_from_1970()
+{
+    struct timeb tp;
+    ftime(&tp);
+
+    return ((uint64) tp.time) * 1000 + tp.millitm
+            - (tp.dstflag == 0 ? 0 : 60 * 60 * 1000) + tp.timezone * 60 * 1000;
+}
+
+size_t _bh_time_strftime(char *s, size_t max, const char *format, int64 time)
+{
+    time_t time_sec = time / 1000;
+    struct timeb tp;
+    struct tm *ltp;
+
+    ftime(&tp);
+    time_sec -= tp.timezone * 60;
+
+    ltp = localtime(&time_sec);
+    if (ltp == NULL) {
+        return 0;
+    }
+    return strftime(s, max, format, ltp);
+}
+
diff --git 
a/scriptsrcs/wamr/core/shared-lib/platform/darwin/shared_platform.cmake 
b/scriptsrcs/wamr/core/shared-lib/platform/darwin/shared_platform.cmake
new file mode 100755
index 0000000..5b403a0
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/darwin/shared_platform.cmake
@@ -0,0 +1,24 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (PLATFORM_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${PLATFORM_SHARED_DIR})
+include_directories(${PLATFORM_SHARED_DIR}/../include)
+
+
+file (GLOB_RECURSE source_all ${PLATFORM_SHARED_DIR}/*.c)
+
+set (PLATFORM_SHARED_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/include/bh_assert.h 
b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_assert.h
new file mode 100755
index 0000000..08cea79
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_assert.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_ASSERT_H
+#define _BH_ASSERT_H
+
+#include "bh_config.h"
+#include "bh_platform.h"
+
+#ifdef BH_TEST
+#    ifndef BH_DEBUG
+#        error "BH_TEST should be defined under BH_DEBUG"
+#    endif
+#endif
+
+#ifdef BH_TEST
+#    if defined(WIN32) || defined(__linux__)
+#    else
+#        error "Test case can not run on the current platform"
+#    endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef BH_DEBUG
+
+extern void bh_assert_internal(int v, const char *file_name, int line_number, 
const char *expr_string);
+#define bh_assert(expr) bh_assert_internal((int)(expr), __FILE__, __LINE__, # 
expr)
+extern void bh_debug_internal(const char *file_name, int line_number, const 
char *fmt, ...);
+
+#if defined(WIN32) || defined(EMU)
+#    define bh_debug(fmt, ...) bh_debug_internal(__FILE__, __LINE__, fmt, 
__VA_ARGS__)
+#elif defined(__linux__)
+/*#    define bh_debug(...) bh_debug_internal(__FILE__, __LINE__, ## 
__VA_ARGS__)*/
+# define bh_debug bh_debug_internal(__FILE__, __LINE__, "");printf
+#elif defined(PLATFORM_SEC)
+#    define bh_debug(fmt, ...) bh_debug_internal(__FILE__, __LINE__, fmt, 
__VA_ARGS__)
+#else
+#    error "Unsupported platform"
+#endif
+
+#else
+
+#define bh_debug if(0)printf
+
+#endif
+
+#define bh_assert_abort(x) do {                 \
+        if (!x)                                 \
+            abort();                            \
+    } while (0)
+
+#ifdef BH_TEST
+#    define BH_STATIC
+#else
+#    define BH_STATIC static
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* Local Variables: */
+/* mode:c           */
+/* c-basic-offset: 4 */
+/* indent-tabs-mode: nil */
+/* End:             */
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/include/bh_config.h 
b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_config.h
new file mode 100755
index 0000000..3790431
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_config.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file   bh_config.h
+ * @date   Tue Sep 13 14:53:17 2011
+ *
+ * @brief Configurations for different platforms and targets.  Make
+ * sure all source files in Beihai project include this header file
+ * directly or indirectly.
+ */
+
+#ifndef BH_CONFIG
+
+#include "config.h"
+
+#endif /* end of BH_CONFIG */
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/include/bh_definition.h 
b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_definition.h
new file mode 100755
index 0000000..7780f41
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_definition.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_DEFINITION_H
+#define _BH_DEFINITION_H
+
+#include "bh_config.h"
+
+typedef enum {
+    BH_FAILED = -100,
+    BH_UNKOWN = -99,
+    BH_MAGIC_UNMATCH = -12,
+    BH_UNIMPLEMENTED = -11,
+    BH_INTR = -10,
+    BH_CLOSED = -9,
+    BH_BUFFER_OVERFLOW = -8, /* TODO: no used error, should remove*/
+    BH_NOT_SUPPORTED = -7,
+    BH_WEAR_OUT_VIOLATION = -6,
+    BH_NOT_FOUND = -5,
+    BH_INVALID_PARAMS = -4,
+    BH_ACCESS_DENIED = -3,
+    BH_OUT_OF_MEMORY = -2,
+    BH_INVALID = -1,
+    BH_SUCCESS = 0,
+    BH_TIMEOUT = 2
+} bh_status;
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/include/bh_platform_log.h 
b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_platform_log.h
new file mode 100755
index 0000000..9f2bac2
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_platform_log.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef BH_PLATFORM_LOG
+#define BH_PLATFORM_LOG
+
+#include "bh_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void bh_log_emit(const char *fmt, va_list ap);
+
+int bh_fprintf(void *stream, const char *fmt, ...);
+
+int bh_fflush(void *stream);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/include/bh_thread.h 
b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_thread.h
new file mode 100755
index 0000000..68dc593
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_thread.h
@@ -0,0 +1,409 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_THREAD_H
+#define _BH_THREAD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "bh_config.h"
+#include "bh_platform.h"
+
+#define BH_MAX_THREAD 32
+#define BH_MAX_TLS_NUM 2
+
+#define BHT_ERROR (-1)
+#define BHT_TIMED_OUT (1)
+#define BHT_OK (0)
+
+#define BHT_NO_WAIT 0x00000000
+#define BHT_WAIT_FOREVER 0xFFFFFFFF
+
+/**
+ * vm_thread_sys_init
+ *    initiation function for beihai thread system. Invoked at the beginning 
of beihai intiation.
+ *
+ * @return BH_SUCCESS if succuess.
+ */
+int _vm_thread_sys_init(void);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_thread_sys_init_instr(const char*func_name);
+#define vm_thread_sys_init(void) vm_thread_sys_init_instr(__FUNCTION__)
+#else
+#define vm_thread_sys_init _vm_thread_sys_init
+#endif
+
+void vm_thread_sys_destroy(void);
+
+/**
+ * This function creates a thread
+ *
+ * @param p_tid  [OUTPUT] the pointer of tid
+ * @param start  main routine of the thread
+ * @param arg  argument passed to main routine
+ * @param stack_size  bytes of stack size
+ *
+ * @return BH_SUCCESS if success.
+ */
+int _vm_thread_create(korp_tid *p_tid, thread_start_routine_t start, void *arg,
+        unsigned int stack_size);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_thread_create_instr(korp_tid *p_tid, thread_start_routine_t start, void 
*arg, unsigned int stack_size, const char*func_name);
+#define vm_thread_create(p_tid, start, arg, stack_size) 
vm_thread_create_instr(p_tid, start, arg, stack_size, __FUNCTION__)
+#else
+#define vm_thread_create _vm_thread_create
+#endif
+
+/**
+ * This function creates a thread
+ *
+ * @param p_tid  [OUTPUT] the pointer of tid
+ * @param start  main routine of the thread
+ * @param arg  argument passed to main routine
+ * @param stack_size  bytes of stack size
+ * @param prio the priority
+ *
+ * @return BH_SUCCESS if success.
+ */
+int _vm_thread_create_with_prio(korp_tid *p_tid, thread_start_routine_t start,
+        void *arg, unsigned int stack_size, int prio);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_thread_create_with_prio_instr(korp_tid *p_tid, thread_start_routine_t 
start, void *arg, unsigned int stack_size, int prio, const char*func_name);
+#define vm_thread_create_with_prio(p_tid, start, arg, stack_size) 
vm_thread_create_instr(p_tid, start, arg, stack_size, prio, __FUNCTION__)
+#else
+#define vm_thread_create_with_prio _vm_thread_create_with_prio
+#endif
+
+/**
+ * This function never returns.
+ *
+ * @param code not used
+ */
+void vm_thread_exit(void *code);
+
+/**
+ * This function gets current thread id
+ *
+ * @return current thread id
+ */
+korp_tid _vm_self_thread(void);
+#ifdef _INSTRUMENT_TEST_ENABLED
+korp_tid vm_self_thread_instr(const char*func_name);
+#define vm_self_thread(void) vm_self_thread_instr(__FUNCTION__)
+#else
+#define vm_self_thread _vm_self_thread
+#endif
+
+/**
+ * This function saves a pointer in thread local storage. One thread can only 
save one pointer.
+ *
+ * @param idx  tls array index
+ * @param ptr  pointer need save as TLS
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_tls_put(unsigned idx, void *ptr);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_tls_put_instr(unsigned idx, void *ptr, const char*func_name);
+#define vm_tls_put(idx, ptr) vm_tls_put_instr(idx, ptr, __FUNCTION__)
+#else
+#define vm_tls_put _vm_tls_put
+#endif
+
+/**
+ * This function gets a pointer saved in TLS.
+ *
+ * @param idx  tls array index
+ *
+ * @return the pointer saved in TLS.
+ */
+void *_vm_tls_get(unsigned idx);
+#ifdef _INSTRUMENT_TEST_ENABLED
+void *vm_tls_get_instr(unsigned idx, const char*func_name);
+#define vm_tls_get(idx) vm_tls_get_instr(idx, __FUNCTION__)
+#else
+#define vm_tls_get _vm_tls_get
+#endif
+
+#define vm_thread_testcancel(void)
+
+/**
+ * This function creates a non-recursive mutex
+ *
+ * @param mutex [OUTPUT] pointer to mutex initialized.
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_mutex_init(korp_mutex *mutex);
+#ifdef INSTRUMENT_TEST_ENABLED
+int vm_mutex_init_instr(korp_mutex *mutex, const char*func_name);
+#define vm_mutex_init(mutex) vm_mutex_init_instr(mutex, __FUNCTION__)
+#else
+#define vm_mutex_init _vm_mutex_init
+#endif
+
+/**
+ * This function creates a recursive mutex
+ *
+ * @param mutex [OUTPUT] pointer to mutex initialized.
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_recursive_mutex_init(korp_mutex *mutex);
+#ifdef INSTRUMENT_TEST_ENABLED
+int vm_recursive_mutex_init_instr(korp_mutex *mutex, const char*func_name);
+#define vm_recursive_mutex_init(mutex) vm_recursive_mutex_init_instr(mutex, 
__FUNCTION__)
+#else
+#define vm_recursive_mutex_init _vm_recursive_mutex_init
+#endif
+
+/**
+ * This function destorys a mutex
+ *
+ * @param mutex  pointer to mutex need destory
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_mutex_destroy(korp_mutex *mutex);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_mutex_destroy_instr(korp_mutex *mutex, const char*func_name);
+#define vm_mutex_destroy(mutex) vm_mutex_destroy_instr(mutex, __FUNCTION__)
+#else
+#define vm_mutex_destroy _vm_mutex_destroy
+#endif
+
+/**
+ * This function locks the mutex
+ *
+ * @param mutex  pointer to mutex need lock
+ *
+ * @return Void
+ */
+void vm_mutex_lock(korp_mutex *mutex);
+
+/**
+ * This function locks the mutex without waiting
+ *
+ * @param mutex  pointer to mutex need lock
+ *
+ * @return BH_SUCCESS if success
+ */
+int vm_mutex_trylock(korp_mutex *mutex);
+
+/**
+ * This function unlocks the mutex
+ *
+ * @param mutex  pointer to mutex need unlock
+ *
+ * @return Void
+ */
+void vm_mutex_unlock(korp_mutex *mutex);
+
+/**
+ * This function creates a semaphone
+ *
+ * @param sem [OUTPUT] pointer to semaphone
+ * @param c counter of semaphone
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_sem_init(korp_sem *sem, unsigned int c);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_sem_init_instr(korp_sem *sem, unsigned int c, const char*func_name);
+#define vm_sem_init(sem, c) vm_sem_init_instr(sem, c, __FUNCTION__)
+#else
+#define vm_sem_init _vm_sem_init
+#endif
+
+/**
+ * This function destroys a semaphone
+ *
+ * @param sem pointer to semaphone need destroy
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_sem_destroy(korp_sem *sem);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_sem_destroy_instr(korp_sem *sem, const char*func_name);
+#define vm_sem_destroy(sem) vm_sem_destroy_instr(sem, __FUNCTION__)
+#else
+#define vm_sem_destroy _vm_sem_destroy
+#endif
+
+/**
+ * This function performs wait operation on semaphone
+ *
+ * @param sem pointer to semaphone need perform wait operation
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_sem_wait(korp_sem *sem);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_sem_wait_instr(korp_sem *sem, const char*func_name);
+#define vm_sem_wait(sem) vm_sem_wait_instr(sem, __FUNCTION__)
+#else
+#define vm_sem_wait _vm_sem_wait
+#endif
+
+/**
+ * This function performs wait operation on semaphone with a timeout
+ *
+ * @param sem  pointer to semaphone need perform wait operation
+ * @param mills  wait milliseconds to return
+ *
+ * @return BH_SUCCESS if success
+ * @return BH_TIMEOUT if time out
+ */
+int _vm_sem_reltimedwait(korp_sem *sem, int mills);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_sem_reltimedwait_instr(korp_sem *sem, int mills, const char*func_name);
+#define vm_sem_reltimedwait(sem, mills) vm_sem_reltimedwait_instr(sem, mills, 
__FUNCTION__)
+#else
+#define vm_sem_reltimedwait _vm_sem_reltimedwait
+#endif
+
+/**
+ * This function performs post operation on semaphone
+ *
+ * @param sem  pointer to semaphone need perform post operation
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_sem_post(korp_sem *sem);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_sem_post_instr(korp_sem *sem, const char*func_name);
+#define vm_sem_post(sem) vm_sem_post_instr(sem, __FUNCTION__)
+#else
+#define vm_sem_post _vm_sem_post
+#endif
+
+/**
+ * This function creates a condition variable
+ *
+ * @param cond  [OUTPUT] pointer to condition variable
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_cond_init(korp_cond *cond);
+#ifdef INSTRUMENT_TEST_ENABLED
+int vm_cond_init_instr(korp_cond *cond, const char*func_name);
+#define vm_cond_init(cond) vm_cond_init_instr(cond, __FUNCTION__)
+#else
+#define vm_cond_init _vm_cond_init
+#endif
+
+/**
+ * This function destorys condition variable
+ *
+ * @param cond  pointer to condition variable
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_cond_destroy(korp_cond *cond);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_cond_destroy_instr(korp_cond *cond, const char*func_name);
+#define vm_cond_destroy(cond) vm_cond_destroy_instr(cond, __FUNCTION__)
+#else
+#define vm_cond_destroy _vm_cond_destroy
+#endif
+
+/**
+ * This function will block on a condition varible.
+ *
+ * @param cond  pointer to condition variable
+ * @param mutex  pointer to mutex to protect the condition variable
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_cond_wait_instr(korp_cond *cond, korp_mutex *mutex, const 
char*func_name);
+#define vm_cond_wait(cond, mutex) vm_cond_wait_instr(cond, mutex, __FUNCTION__)
+#else
+#define vm_cond_wait _vm_cond_wait
+#endif
+
+/**
+ * This function will block on a condition varible or return if time specified 
passes.
+ *
+ * @param cond  pointer to condition variable
+ * @param mutex  pointer to mutex to protect the condition variable
+ * @param mills  milliseconds to wait
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_cond_reltimedwait_instr(korp_cond *cond, korp_mutex *mutex, int mills, 
const char*func_name);
+#define vm_cond_reltimedwait(cond, mutex, mills) 
vm_cond_reltimedwait_instr(cond, mutex, mills, __FUNCTION__)
+#else
+#define vm_cond_reltimedwait _vm_cond_reltimedwait
+#endif
+
+/**
+ * This function signals the condition variable
+ *
+ * @param cond  condition variable
+ *
+ * @return BH_SUCCESS if success
+ */
+int _vm_cond_signal(korp_cond *cond);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_cond_signal_instr(korp_cond *cond, const char*func_name);
+#define vm_cond_signal(cond) vm_cond_signal_instr(cond, __FUNCTION__)
+#else
+#define vm_cond_signal _vm_cond_signal
+#endif
+
+int _vm_cond_broadcast(korp_cond *cond);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_cond_broadcast_instr(korp_cond *cond, const char*func_name);
+#define vm_cond_broadcast(cond) vm_cond_broadcast_instr(cond, __FUNCTION__)
+#else
+#define vm_cond_broadcast _vm_cond_broadcast
+#endif
+
+int _vm_thread_cancel(korp_tid thread);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_thread_cancel_instr(korp_tid thread, const char*func_name);
+#define vm_thread_cancel(thread) vm_thread_cancel_instr(thread, __FUNCTION__)
+#else
+#define vm_thread_cancel _vm_thread_cancel
+#endif
+
+int _vm_thread_join(korp_tid thread, void **value_ptr, int mills);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_thread_join_instr(korp_tid thread, void **value_ptr, int mills, const 
char*func_name);
+#define vm_thread_join(thread, value_ptr, mills) vm_thread_join_instr(thread, 
value_ptr, mills, __FUNCTION__)
+#else
+#define vm_thread_join _vm_thread_join
+#endif
+
+int _vm_thread_detach(korp_tid thread);
+#ifdef _INSTRUMENT_TEST_ENABLED
+int vm_thread_detach_instr(korp_tid thread, const char*func_name);
+#define vm_thread_detach(thread) vm_thread_detach_instr(thread, __FUNCTION__)
+#else
+#define vm_thread_detach _vm_thread_detach
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _BH_THREAD_H */
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/include/bh_time.h 
b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_time.h
new file mode 100755
index 0000000..31e1454
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_time.h
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_TIME_H
+#define _BH_TIME_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "bh_config.h"
+#include "bh_definition.h"
+#include "bh_types.h"
+#include "bh_platform.h"
+
+/*
+ * This function returns milliseconds per tick.
+ * @return milliseconds per tick.
+ */
+extern uint64 _bh_time_get_tick_millisecond(void);
+#ifdef _INSTRUMENT_TEST_ENABLED
+extern uint64 bh_time_get_tick_millisecond_instr(const char*func_name);
+#define bh_time_get_tick_millisecond() 
bh_time_get_tick_millisecond_instr(__FUNCTION__)
+#else
+#define bh_time_get_tick_millisecond _bh_time_get_tick_millisecond
+#endif
+
+/*
+ * This function returns milliseconds after boot.
+ * @return milliseconds after boot.
+ */
+extern uint64 _bh_time_get_boot_millisecond(void);
+#ifdef _INSTRUMENT_TEST_ENABLED
+extern uint64 bh_time_get_boot_millisecond_instr(const char*func_name);
+#define bh_time_get_boot_millisecond() 
bh_time_get_boot_millisecond_instr(__FUNCTION__)
+#else
+#define bh_time_get_boot_millisecond _bh_time_get_boot_millisecond
+#endif
+
+extern uint32 bh_get_tick_sec();
+#define  bh_get_tick_ms _bh_time_get_boot_millisecond
+
+/*
+ * This function returns GMT milliseconds since from 1970.1.1, AKA UNIX time.
+ * @return milliseconds since from 1970.1.1.
+ */
+extern uint64 _bh_time_get_millisecond_from_1970(void);
+#ifdef _INSTRUMENT_TEST_ENABLED
+extern uint64 bh_time_get_millisecond_from_1970_instr(const char*func_name);
+#define bh_time_get_millisecond_from_1970() 
bh_time_get_millisecond_from_1970_instr(__FUNCTION__)
+#else
+#define bh_time_get_millisecond_from_1970 _bh_time_get_millisecond_from_1970
+#endif
+
+/**
+ * This function sets timezone with specific hours.
+ *
+ * @param hours  represents the deviation (in hours) of the local time from 
GMT (can be a positive or a negative number)
+ * @param half_hour  if true, adds half an hour to the local time calculation. 
For example, if hours=(+5) then the time will be GMT +5:30; if hours=(-5) then 
the time will be GMT -4:30.
+ * @param daylight_save  if true, applies the daylight saving scheme when 
calculating the local time (adds one hour to the local time calculation)
+ */
+extern void bh_set_timezone(int hours, int half_hour, int daylight_save);
+
+/**
+ * This functions returns the offset in seconds which needs to be added GMT to 
get the local time.
+ *
+ *
+ * @return offset in secords which needs to be added GMT to get the local time.
+ */
+extern int bh_get_timezone_offset(void);
+
+size_t bh_time_strftime(char *s, size_t max, const char *format, int64 time);
+
+#ifdef _INSTRUMENT_TEST_ENABLED
+size_t bh_time_strftime_instr(char *s, size_t max, const char *format, int64 
time, const char*func_name);
+#define bh_time_strftime(s, max, format, time) bh_time_strftime_instr(s, max, 
format, time, __FUNCTION__)
+#else
+#define bh_time_strftime _bh_time_strftime
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/include/bh_types.h 
b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_types.h
new file mode 100755
index 0000000..da26c7d
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/include/bh_types.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_TYPES_H
+#define _BH_TYPES_H
+
+#include "bh_config.h"
+
+typedef unsigned char uint8;
+typedef char int8;
+typedef unsigned short uint16;
+typedef short int16;
+typedef unsigned int uint32;
+typedef int int32;
+typedef float float32;
+typedef double float64;
+
+#define BYTES_OF_UINT8  1
+#define BYTES_OF_UINT16 2
+#define BYTES_OF_UINT32 4
+#define BYTES_OF_UINT64 8
+
+#define BYTES_OF_BOOLEAN 1
+#define BYTES_OF_BYTE    1
+#define BYTES_OF_CHAR    2
+#define BYTES_OF_SHORT   2
+#define BYTES_OF_INT     4
+#define BYTES_OF_FLOAT   4
+#define BYTES_OF_LONG    8
+#define BYTES_OF_DOUBLE  8
+
+#include "bh_platform.h"
+
+#ifndef __cplusplus
+#define true 1
+#define false 0
+#endif
+
+#endif
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_assert.c 
b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_assert.c
new file mode 100755
index 0000000..b52a9aa
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_assert.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include "bh_assert.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef BH_TEST
+#include <setjmp.h>
+#endif
+
+#ifdef BH_TEST
+/* for exception throwing */
+jmp_buf bh_test_jb;
+#endif
+
+void bh_assert_internal(int v, const char *file_name, int line_number,
+        const char *expr_string)
+{
+    if (v)
+        return;
+
+    if (!file_name)
+        file_name = "NULL FILENAME";
+    if (!expr_string)
+        expr_string = "NULL EXPR_STRING";
+
+    printf("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string,
+            file_name, line_number);
+
+#ifdef BH_TEST
+    longjmp(bh_test_jb, 1);
+#endif
+
+    abort();
+}
+
+void bh_debug_internal(const char *file_name, int line_number, const char *fmt,
+        ...)
+{
+#ifndef JEFF_TEST_VERIFIER
+    va_list args;
+
+    va_start(args, fmt);
+    bh_assert(file_name);
+
+    printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number);
+    vprintf(fmt, args);
+
+    va_end(args);
+    printf("\n");
+#endif
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_definition.c 
b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_definition.c
new file mode 100755
index 0000000..5105d0f
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_definition.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_definition.h"
+#include "bh_platform.h"
+
+int bh_return(int ret)
+{
+    return ret;
+}
+
+#define RSIZE_MAX 0x7FFFFFFF
+int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n)
+{
+    char *dest = (char*) s1;
+    char *src = (char*) s2;
+    if (n == 0) {
+        return 0;
+    }
+
+    if (s1 == NULL || s1max > RSIZE_MAX) {
+        return -1;
+    }
+    if (s2 == NULL || n > s1max) {
+        memset(dest, 0, s1max);
+        return -1;
+    }
+    memcpy(dest, src, n);
+    return 0;
+}
+
+int b_strcat_s(char * s1, size_t s1max, const char * s2)
+{
+    if (NULL
+            == s1|| NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1) || 
s1max > RSIZE_MAX) {
+        return -1;
+    }
+
+    strcat(s1, s2);
+
+    return 0;
+}
+
+int b_strcpy_s(char * s1, size_t s1max, const char * s2)
+{
+    if (NULL
+            == s1|| NULL == s2 || s1max < (strlen(s2) + 1) || s1max > 
RSIZE_MAX) {
+        return -1;
+    }
+
+    strncpy(s1, s2, s1max);
+
+    return 0;
+}
+
+int fopen_s(FILE ** pFile, const char *filename, const char *mode)
+{
+    if (NULL == pFile || NULL == filename || NULL == mode) {
+        return -1;
+    }
+
+    *pFile = fopen(filename, mode);
+
+    if (NULL == *pFile)
+        return -1;
+
+    return 0;
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_platform.c 
b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_platform.c
new file mode 100755
index 0000000..d6f4c29
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_platform.c
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_common.h"
+#include "bh_platform.h"
+
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#define FIXED_BUFFER_SIZE (1<<14)
+static bh_print_function_t print_function = NULL;
+
+char *bh_strdup(const char *s)
+{
+    char *s1 = NULL;
+    if (s && (s1 = bh_malloc(strlen(s) + 1)))
+        memcpy(s1, s, strlen(s) + 1);
+    return s1;
+}
+
+int bh_platform_init()
+{
+    return 0;
+}
+
+int putchar(int c)
+{
+    return 0;
+}
+
+int puts(const char *s)
+{
+    return 0;
+}
+
+void bh_set_print_function(bh_print_function_t pf)
+{
+    print_function = pf;
+}
+
+int bh_printf_sgx(const char *message, ...)
+{
+    if (print_function != NULL) {
+        char msg[FIXED_BUFFER_SIZE] = { '\0' };
+        va_list ap;
+        va_start(ap, message);
+        vsnprintf(msg, FIXED_BUFFER_SIZE, message, ap);
+        va_end(ap);
+        print_function(msg);
+    }
+
+    return 0;
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_platform.h 
b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_platform.h
new file mode 100755
index 0000000..7a835ef
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_platform.h
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_PLATFORM_H
+#define _BH_PLATFORM_H
+
+#include "bh_config.h"
+#include "bh_types.h"
+#include "bh_memory.h"
+#include <inttypes.h>
+#include <stdbool.h>
+#include <assert.h>
+#include <time.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <pthread.h>
+#include <limits.h>
+#include <errno.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int bh_printf_sgx(const char *message, ...);
+
+typedef uint64_t uint64;
+typedef int64_t int64;
+
+#define DIE do{bh_debug("Die here\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); 
DEBUGME(void); while(1);}while(0)
+
+#define BH_PLATFORM "Linux-SGX"
+
+/* NEED qsort */
+
+#define _STACK_SIZE_ADJUSTMENT (32 * 1024)
+
+/* Stack size of applet threads's native part.  */
+#define BH_APPLET_PRESERVED_STACK_SIZE      (8 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Default thread priority */
+#define BH_THREAD_DEFAULT_PRIORITY 0
+
+#define BH_ROUTINE_MODIFIER
+
+#define BHT_TIMEDOUT ETIMEDOUT
+
+#define INVALID_THREAD_ID 0xFFffFFff
+
+typedef int korp_tid;
+typedef int korp_mutex;
+typedef int korp_sem;
+typedef int korp_cond;
+typedef int korp_thread;
+typedef void* (*thread_start_routine_t)(void*);
+
+#define wa_malloc bh_malloc
+#define wa_free bh_free
+#define wa_strdup bh_strdup
+
+int snprintf(char *buffer, size_t count, const char *format, ...);
+double fmod(double x, double y);
+float fmodf(float x, float y);
+double sqrt(double x);
+
+#define BH_WAIT_FOREVER 0xFFFFFFFF
+
+#ifndef NULL
+#  define NULL ((void*) 0)
+#endif
+
+/**
+ * Return the offset of the given field in the given type.
+ *
+ * @param Type the type containing the filed
+ * @param field the field in the type
+ *
+ * @return the offset of field in Type
+ */
+#ifndef offsetof
+#define offsetof(Type, field) ((size_t)(&((Type *)0)->field))
+#endif
+
+#define bh_assert assert
+
+int b_memcpy_s(void * s1, unsigned int s1max, const void * s2,
+               unsigned int n);
+int b_strcat_s(char * s1, size_t s1max, const char * s2);
+int b_strcpy_s(char * s1, size_t s1max, const char * s2);
+
+char *bh_strdup(const char *s);
+
+int bh_platform_init();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git 
a/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_platform_log.c 
b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_platform_log.c
new file mode 100755
index 0000000..4ff0319
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_platform_log.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include <stdio.h>
+
+void bh_log_emit(const char *fmt, va_list ap)
+{
+    vprintf(fmt, ap);
+    fflush(stdout);
+}
+
+int bh_fprintf(FILE *stream, const char *fmt, ...)
+{
+    va_list ap;
+    int ret;
+
+    va_start(ap, fmt);
+    ret = vfprintf(stream ? stream : stdout, fmt, ap);
+    va_end(ap);
+
+    return ret;
+}
+
+int bh_fflush(void *stream)
+{
+    return fflush(stream ? stream : stdout);
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_thread.c 
b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_thread.c
new file mode 100755
index 0000000..8730e13
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_thread.c
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_thread.h"
+#include "bh_assert.h"
+#include "bh_memory.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+
+int _vm_thread_sys_init()
+{
+    return 0;
+}
+
+void vm_thread_sys_destroy(void)
+{
+}
+
+int _vm_thread_create_with_prio(korp_tid *tid, thread_start_routine_t start,
+        void *arg, unsigned int stack_size, int prio)
+{
+    return BHT_ERROR;
+    // return BHT_OK;
+}
+
+int _vm_thread_create(korp_tid *tid, thread_start_routine_t start, void *arg,
+        unsigned int stack_size)
+{
+    return _vm_thread_create_with_prio(tid, start, arg, stack_size,
+                                       BH_THREAD_DEFAULT_PRIORITY);
+}
+
+korp_tid _vm_self_thread()
+{
+    return 0;
+}
+
+void vm_thread_exit(void * code)
+{
+}
+
+// storage for one thread
+static void *_tls_store = NULL;
+
+void *_vm_tls_get(unsigned idx)
+{
+    return _tls_store;
+}
+
+int _vm_tls_put(unsigned idx, void * tls)
+{
+    _tls_store = tls;
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_mutex_init(korp_mutex *mutex)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_recursive_mutex_init(korp_mutex *mutex)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_mutex_destroy(korp_mutex *mutex)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+/* Returned error (EINVAL, EAGAIN and EDEADLK) from
+ locking the mutex indicates some logic error present in
+ the program somewhere.
+ Don't try to recover error for an existing unknown error.*/
+void vm_mutex_lock(korp_mutex *mutex)
+{
+}
+
+int vm_mutex_trylock(korp_mutex *mutex)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+/* Returned error (EINVAL, EAGAIN and EPERM) from
+ unlocking the mutex indicates some logic error present
+ in the program somewhere.
+ Don't try to recover error for an existing unknown error.*/
+void vm_mutex_unlock(korp_mutex *mutex)
+{
+}
+
+int _vm_sem_init(korp_sem* sem, unsigned int c)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_sem_destroy(korp_sem *sem)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_sem_wait(korp_sem *sem)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_sem_reltimedwait(korp_sem *sem, int mills)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_sem_post(korp_sem *sem)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_cond_init(korp_cond *cond)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_cond_destroy(korp_cond *cond)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_cond_signal(korp_cond *cond)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_cond_broadcast(korp_cond *cond)
+{
+    return BHT_OK;
+    //return BHT_ERROR;
+}
+
+int _vm_thread_cancel(korp_tid thread)
+{
+    return 0;
+}
+
+int _vm_thread_join(korp_tid thread, void **value_ptr, int mills)
+{
+    return 0;
+}
+
+int _vm_thread_detach(korp_tid thread)
+{
+    return 0;
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_time.c 
b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_time.c
new file mode 100755
index 0000000..0627b08
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/bh_time.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_time.h"
+
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/timeb.h>
+#include <time.h>
+
+/*
+ * This function returns milliseconds per tick.
+ * @return milliseconds per tick.
+ */
+uint64 _bh_time_get_tick_millisecond()
+{
+    return sysconf(_SC_CLK_TCK);
+}
+
+/*
+ * This function returns milliseconds after boot.
+ * @return milliseconds after boot.
+ */
+uint64 _bh_time_get_boot_millisecond()
+{
+    struct timespec ts;
+    if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
+        return 0;
+    }
+
+    return ((uint64) ts.tv_sec) * 1000 + ts.tv_nsec / (1000 * 1000);
+}
+
+uint32 bh_get_tick_sec()
+{
+    return _bh_time_get_boot_millisecond() / 1000;
+}
+
+/*
+ * This function returns GMT time milliseconds since from 1970.1.1, AKA UNIX 
time.
+ * @return milliseconds since from 1970.1.1.
+ */
+uint64 _bh_time_get_millisecond_from_1970()
+{
+    struct timeb tp;
+    ftime(&tp);
+
+    return ((uint64) tp.time) * 1000 + tp.millitm
+            - (tp.dstflag == 0 ? 0 : 60 * 60 * 1000) + tp.timezone * 60 * 1000;
+}
+
+size_t _bh_time_strftime(char *s, size_t max, const char *format, int64 time)
+{
+    time_t time_sec = time / 1000;
+    struct timeb tp;
+    struct tm *ltp;
+
+    ftime(&tp);
+    time_sec -= tp.timezone * 60;
+
+    ltp = localtime(&time_sec);
+    if (ltp == NULL) {
+        return 0;
+    }
+    return strftime(s, max, format, ltp);
+}
+
diff --git 
a/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/shared_platform.cmake 
b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/shared_platform.cmake
new file mode 100755
index 0000000..5b403a0
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux-sgx/shared_platform.cmake
@@ -0,0 +1,24 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (PLATFORM_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${PLATFORM_SHARED_DIR})
+include_directories(${PLATFORM_SHARED_DIR}/../include)
+
+
+file (GLOB_RECURSE source_all ${PLATFORM_SHARED_DIR}/*.c)
+
+set (PLATFORM_SHARED_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_assert.c 
b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_assert.c
new file mode 100755
index 0000000..b52a9aa
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_assert.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include "bh_assert.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef BH_TEST
+#include <setjmp.h>
+#endif
+
+#ifdef BH_TEST
+/* for exception throwing */
+jmp_buf bh_test_jb;
+#endif
+
+void bh_assert_internal(int v, const char *file_name, int line_number,
+        const char *expr_string)
+{
+    if (v)
+        return;
+
+    if (!file_name)
+        file_name = "NULL FILENAME";
+    if (!expr_string)
+        expr_string = "NULL EXPR_STRING";
+
+    printf("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string,
+            file_name, line_number);
+
+#ifdef BH_TEST
+    longjmp(bh_test_jb, 1);
+#endif
+
+    abort();
+}
+
+void bh_debug_internal(const char *file_name, int line_number, const char *fmt,
+        ...)
+{
+#ifndef JEFF_TEST_VERIFIER
+    va_list args;
+
+    va_start(args, fmt);
+    bh_assert(file_name);
+
+    printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number);
+    vprintf(fmt, args);
+
+    va_end(args);
+    printf("\n");
+#endif
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_definition.c 
b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_definition.c
new file mode 100755
index 0000000..47ee11e
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_definition.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_definition.h"
+#include "bh_platform.h"
+
+int bh_return(int ret)
+{
+    return ret;
+}
+
+#define RSIZE_MAX 0x7FFFFFFF
+int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n)
+{
+    char *dest = (char*) s1;
+    char *src = (char*) s2;
+    if (n == 0) {
+        return 0;
+    }
+
+    if (s1 == NULL || s1max > RSIZE_MAX) {
+        return -1;
+    }
+    if (s2 == NULL || n > s1max) {
+        memset(dest, 0, s1max);
+        return -1;
+    }
+    memcpy(dest, src, n);
+    return 0;
+}
+
+int b_strcat_s(char * s1, size_t s1max, const char * s2)
+{
+    if (NULL
+            == s1|| NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1) || 
s1max > RSIZE_MAX) {
+        return -1;
+    }
+
+    strcat(s1, s2);
+
+    return 0;
+}
+
+int b_strcpy_s(char * s1, size_t s1max, const char * s2)
+{
+    if (NULL
+            == s1|| NULL == s2 || s1max < (strlen(s2) + 1) || s1max > 
RSIZE_MAX) {
+        return -1;
+    }
+
+    strcpy(s1, s2);
+
+    return 0;
+}
+
+int fopen_s(FILE ** pFile, const char *filename, const char *mode)
+{
+    if (NULL == pFile || NULL == filename || NULL == mode) {
+        return -1;
+    }
+
+    *pFile = fopen(filename, mode);
+
+    if (NULL == *pFile)
+        return -1;
+
+    return 0;
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_platform.c 
b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_platform.c
new file mode 100755
index 0000000..3ff600c
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_platform.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+char *bh_strdup(const char *s)
+{
+    char *s1 = NULL;
+    if (s && (s1 = bh_malloc(strlen(s) + 1)))
+        memcpy(s1, s, strlen(s) + 1);
+    return s1;
+}
+
+int bh_platform_init()
+{
+    return 0;
+}
+
+char*
+bh_read_file_to_buffer(const char *filename, int *ret_size)
+{
+    char *buffer;
+    int file;
+    int file_size, read_size;
+    struct stat stat_buf;
+
+    if (!filename || !ret_size) {
+        printf("Read file to buffer failed: invalid filename or ret size.\n");
+        return NULL;
+    }
+
+    if ((file = open(filename, O_RDONLY, 0)) == -1) {
+        printf("Read file to buffer failed: open file %s failed.\n",
+               filename);
+        return NULL;
+    }
+
+    if (fstat(file, &stat_buf) != 0) {
+        printf("Read file to buffer failed: fstat file %s failed.\n",
+               filename);
+        close(file);
+        return NULL;
+    }
+
+    file_size = stat_buf.st_size;
+
+    if (!(buffer = bh_malloc(file_size))) {
+        printf("Read file to buffer failed: alloc memory failed.\n");
+        close(file);
+        return NULL;
+    }
+
+    read_size = read(file, buffer, file_size);
+    close(file);
+
+    if (read_size < file_size) {
+        printf("Read file to buffer failed: read file content failed.\n");
+        bh_free(buffer);
+        return NULL;
+    }
+
+    *ret_size = file_size;
+    return buffer;
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_platform.h 
b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_platform.h
new file mode 100755
index 0000000..47172c1
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_platform.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_PLATFORM_H
+#define _BH_PLATFORM_H
+
+#include "bh_config.h"
+#include "bh_types.h"
+#include "bh_memory.h"
+#include <inttypes.h>
+#include <stdbool.h>
+#include <assert.h>
+#include <time.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <pthread.h>
+#include <limits.h>
+#include <semaphore.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef uint64_t uint64;
+typedef int64_t int64;
+
+extern void DEBUGME(void);
+
+#define DIE do{bh_debug("Die here\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); 
DEBUGME(void); while(1);}while(0)
+
+#define BH_PLATFORM "Linux"
+
+/* NEED qsort */
+
+#define _STACK_SIZE_ADJUSTMENT (32 * 1024)
+
+/* Stack size of applet threads's native part.  */
+#define BH_APPLET_PRESERVED_STACK_SIZE      (8 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Default thread priority */
+#define BH_THREAD_DEFAULT_PRIORITY 0
+
+#define BH_ROUTINE_MODIFIER
+
+#define BHT_TIMEDOUT ETIMEDOUT
+
+#define INVALID_THREAD_ID 0xFFffFFff
+
+typedef pthread_t korp_tid;
+typedef pthread_mutex_t korp_mutex;
+typedef sem_t korp_sem;
+typedef pthread_cond_t korp_cond;
+typedef pthread_t korp_thread;
+typedef void* (*thread_start_routine_t)(void*);
+
+#define wa_malloc bh_malloc
+#define wa_free bh_free
+#define wa_strdup bh_strdup
+
+int snprintf(char *buffer, size_t count, const char *format, ...);
+double fmod(double x, double y);
+float fmodf(float x, float y);
+double sqrt(double x);
+
+#define BH_WAIT_FOREVER 0xFFFFFFFF
+
+#ifndef NULL
+#  define NULL ((void*) 0)
+#endif
+
+/**
+ * Return the offset of the given field in the given type.
+ *
+ * @param Type the type containing the filed
+ * @param field the field in the type
+ *
+ * @return the offset of field in Type
+ */
+#ifndef offsetof
+#define offsetof(Type, field) ((size_t)(&((Type *)0)->field))
+#endif
+
+#define bh_assert assert
+
+int b_memcpy_s(void * s1, unsigned int s1max, const void * s2,
+               unsigned int n);
+int b_strcat_s(char * s1, size_t s1max, const char * s2);
+int b_strcpy_s(char * s1, size_t s1max, const char * s2);
+
+int fopen_s(FILE ** pFile, const char *filename, const char *mode);
+
+char *bh_read_file_to_buffer(const char *filename, int *ret_size);
+
+char *bh_strdup(const char *s);
+
+int bh_platform_init();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_platform_log.c 
b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_platform_log.c
new file mode 100755
index 0000000..4ff0319
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_platform_log.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include <stdio.h>
+
+void bh_log_emit(const char *fmt, va_list ap)
+{
+    vprintf(fmt, ap);
+    fflush(stdout);
+}
+
+int bh_fprintf(FILE *stream, const char *fmt, ...)
+{
+    va_list ap;
+    int ret;
+
+    va_start(ap, fmt);
+    ret = vfprintf(stream ? stream : stdout, fmt, ap);
+    va_end(ap);
+
+    return ret;
+}
+
+int bh_fflush(void *stream)
+{
+    return fflush(stream ? stream : stdout);
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_thread.c 
b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_thread.c
new file mode 100755
index 0000000..7dd9178
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_thread.c
@@ -0,0 +1,408 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_thread.h"
+#include "bh_assert.h"
+#include "wasm_log.h"
+#include "bh_memory.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+
+static bool is_thread_sys_inited = false;
+
+static korp_mutex thread_list_lock;
+static pthread_key_t thread_local_storage_key[BH_MAX_TLS_NUM];
+
+int _vm_thread_sys_init()
+{
+    unsigned i, j;
+    int ret;
+
+    if (is_thread_sys_inited)
+        return 0;
+
+    for (i = 0; i < BH_MAX_TLS_NUM; i++) {
+        ret = pthread_key_create(&thread_local_storage_key[i], NULL);
+        if (ret)
+            goto fail;
+    }
+
+    ret = vm_mutex_init(&thread_list_lock);
+    if (ret)
+        goto fail;
+
+    is_thread_sys_inited = true;
+    return 0;
+
+    fail: for (j = 0; j < i; j++)
+        pthread_key_delete(thread_local_storage_key[j]);
+    return -1;
+}
+
+void vm_thread_sys_destroy(void)
+{
+    if (is_thread_sys_inited) {
+        unsigned i;
+        for (i = 0; i < BH_MAX_TLS_NUM; i++)
+            pthread_key_delete(thread_local_storage_key[i]);
+        vm_mutex_destroy(&thread_list_lock);
+        is_thread_sys_inited = false;
+    }
+}
+
+typedef struct {
+    thread_start_routine_t start;
+    void* stack;
+    int stack_size;
+    void* arg;
+} thread_wrapper_arg;
+
+static void *vm_thread_wrapper(void *arg)
+{
+    thread_wrapper_arg * targ = arg;
+    LOG_VERBOSE("THREAD CREATE 0x%08x\n", &targ);
+    targ->stack = (void *)((uintptr_t)(&arg) & ~0xfff);
+    _vm_tls_put(1, targ);
+    targ->start(targ->arg);
+    bh_free(targ);
+    _vm_tls_put(1, NULL);
+    return NULL;
+}
+
+int _vm_thread_create_with_prio(korp_tid *tid, thread_start_routine_t start,
+        void *arg, unsigned int stack_size, int prio)
+{
+    pthread_attr_t tattr;
+    thread_wrapper_arg *targ;
+
+    bh_assert(stack_size > 0);
+    bh_assert(tid);
+    bh_assert(start);
+
+#ifdef CONFIG_LIBPTHREAD_EMBEDDED
+    tid->p = INVALID_THREAD_ID;
+#else
+    *tid = INVALID_THREAD_ID;
+#endif
+    
+    pthread_attr_init(&tattr);
+    pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_JOINABLE);
+    if (pthread_attr_setstacksize(&tattr, stack_size) != 0) {
+        bh_debug("Invalid thread stack size %u. Min stack size on Linux = %u",
+                stack_size, PTHREAD_STACK_MIN);
+        pthread_attr_destroy(&tattr);
+        return BHT_ERROR;
+    }
+
+    targ = (thread_wrapper_arg*) bh_malloc(sizeof(*targ));
+    if (!targ) {
+        pthread_attr_destroy(&tattr);
+        return BHT_ERROR;
+    }
+
+    targ->start = start;
+    targ->arg = arg;
+    targ->stack_size = stack_size;
+
+    if (pthread_create(tid, &tattr, vm_thread_wrapper, targ) != 0) {
+        pthread_attr_destroy(&tattr);
+        bh_free(targ);
+        return BHT_ERROR;
+    }
+
+    pthread_attr_destroy(&tattr);
+    return BHT_OK;
+}
+
+int _vm_thread_create(korp_tid *tid, thread_start_routine_t start, void *arg,
+        unsigned int stack_size)
+{
+    return _vm_thread_create_with_prio(tid, start, arg, stack_size,
+                                       BH_THREAD_DEFAULT_PRIORITY);
+}
+
+korp_tid _vm_self_thread()
+{
+    return (korp_tid) pthread_self();
+}
+
+void vm_thread_exit(void * code)
+{
+    bh_free(_vm_tls_get(1));
+    _vm_tls_put(1, NULL);
+    pthread_exit(code);
+}
+
+void *_vm_tls_get(unsigned idx)
+{
+    bh_assert(idx < BH_MAX_TLS_NUM);
+    return pthread_getspecific(thread_local_storage_key[idx]);
+}
+
+int _vm_tls_put(unsigned idx, void * tls)
+{
+    bh_assert(idx < BH_MAX_TLS_NUM);
+    pthread_setspecific(thread_local_storage_key[idx], tls);
+    return BHT_OK;
+}
+
+int _vm_mutex_init(korp_mutex *mutex)
+{
+    return pthread_mutex_init(mutex, NULL) == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_recursive_mutex_init(korp_mutex *mutex)
+{
+    int ret;
+
+    pthread_mutexattr_t mattr;
+
+    bh_assert(mutex);
+    ret = pthread_mutexattr_init(&mattr);
+    if (ret)
+        return BHT_ERROR;
+
+    pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_RECURSIVE_NP);
+    ret = pthread_mutex_init(mutex, &mattr);
+    pthread_mutexattr_destroy(&mattr);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_mutex_destroy(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_destroy(mutex);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+/* Returned error (EINVAL, EAGAIN and EDEADLK) from
+ locking the mutex indicates some logic error present in
+ the program somewhere.
+ Don't try to recover error for an existing unknown error.*/
+void vm_mutex_lock(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_lock(mutex);
+    if (0 != ret) {
+        printf("vm mutex lock failed (ret=%d)!\n", ret);
+        exit(-1);
+    }
+}
+
+int vm_mutex_trylock(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_trylock(mutex);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+/* Returned error (EINVAL, EAGAIN and EPERM) from
+ unlocking the mutex indicates some logic error present
+ in the program somewhere.
+ Don't try to recover error for an existing unknown error.*/
+void vm_mutex_unlock(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_unlock(mutex);
+    if (0 != ret) {
+        printf("vm mutex unlock failed (ret=%d)!\n", ret);
+        exit(-1);
+    }
+}
+
+int _vm_sem_init(korp_sem* sem, unsigned int c)
+{
+    int ret;
+
+    bh_assert(sem);
+    ret = sem_init(sem, 0, c);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_sem_destroy(korp_sem *sem)
+{
+    int ret;
+
+    bh_assert(sem);
+    ret = sem_destroy(sem);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_sem_wait(korp_sem *sem)
+{
+    int ret;
+
+    bh_assert(sem);
+
+    ret = sem_wait(sem);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_sem_reltimedwait(korp_sem *sem, int mills)
+{
+    int ret = BHT_OK;
+
+    struct timespec timeout;
+    const int mills_per_sec = 1000;
+    const int mills_to_nsec = 1E6;
+
+    bh_assert(sem);
+
+    if (mills == BHT_WAIT_FOREVER) {
+        ret = sem_wait(sem);
+    } else {
+
+        timeout.tv_sec = mills / mills_per_sec;
+        timeout.tv_nsec = (mills % mills_per_sec) * mills_to_nsec;
+        timeout.tv_sec += time(NULL);
+
+        ret = sem_timedwait(sem, &timeout);
+    }
+
+    if (ret != BHT_OK) {
+        if (errno == BHT_TIMEDOUT) {
+            ret = BHT_TIMEDOUT;
+            errno = 0;
+        } else {
+            bh_debug("Faliure happens when timed wait is called");
+            bh_assert(0);
+        }
+    }
+
+    return ret;
+}
+
+int _vm_sem_post(korp_sem *sem)
+{
+    bh_assert(sem);
+
+    return sem_post(sem) == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_cond_init(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_init(cond, NULL) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_destroy(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_destroy(cond) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex)
+{
+    bh_assert(cond);
+    bh_assert(mutex);
+
+    if (pthread_cond_wait(cond, mutex) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+static void msec_nsec_to_abstime(struct timespec *ts, int64 msec, int32 nsec)
+{
+    struct timeval tv;
+
+    gettimeofday(&tv, NULL);
+
+    ts->tv_sec = tv.tv_sec + msec / 1000;
+    ts->tv_nsec = tv.tv_usec * 1000 + (msec % 1000) * 1000000 + nsec;
+
+    if (ts->tv_nsec >= 1000000000L) {
+        ts->tv_sec++;
+        ts->tv_nsec -= 1000000000L;
+    }
+}
+
+int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills)
+{
+    int ret;
+    struct timespec abstime;
+
+    if (mills == BHT_WAIT_FOREVER)
+        ret = pthread_cond_wait(cond, mutex);
+    else {
+        msec_nsec_to_abstime(&abstime, mills, 0);
+        ret = pthread_cond_timedwait(cond, mutex, &abstime);
+    }
+
+    if (ret != BHT_OK && ret != BHT_TIMEDOUT)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_signal(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_signal(cond) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_broadcast(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_broadcast(cond) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_thread_cancel(korp_tid thread)
+{
+    return pthread_cancel(thread);
+}
+
+int _vm_thread_join(korp_tid thread, void **value_ptr, int mills)
+{
+    return pthread_join(thread, value_ptr);
+}
+
+int _vm_thread_detach(korp_tid thread)
+{
+    return pthread_detach(thread);
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_time.c 
b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_time.c
new file mode 100755
index 0000000..0627b08
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux/bh_time.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_time.h"
+
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/timeb.h>
+#include <time.h>
+
+/*
+ * This function returns milliseconds per tick.
+ * @return milliseconds per tick.
+ */
+uint64 _bh_time_get_tick_millisecond()
+{
+    return sysconf(_SC_CLK_TCK);
+}
+
+/*
+ * This function returns milliseconds after boot.
+ * @return milliseconds after boot.
+ */
+uint64 _bh_time_get_boot_millisecond()
+{
+    struct timespec ts;
+    if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
+        return 0;
+    }
+
+    return ((uint64) ts.tv_sec) * 1000 + ts.tv_nsec / (1000 * 1000);
+}
+
+uint32 bh_get_tick_sec()
+{
+    return _bh_time_get_boot_millisecond() / 1000;
+}
+
+/*
+ * This function returns GMT time milliseconds since from 1970.1.1, AKA UNIX 
time.
+ * @return milliseconds since from 1970.1.1.
+ */
+uint64 _bh_time_get_millisecond_from_1970()
+{
+    struct timeb tp;
+    ftime(&tp);
+
+    return ((uint64) tp.time) * 1000 + tp.millitm
+            - (tp.dstflag == 0 ? 0 : 60 * 60 * 1000) + tp.timezone * 60 * 1000;
+}
+
+size_t _bh_time_strftime(char *s, size_t max, const char *format, int64 time)
+{
+    time_t time_sec = time / 1000;
+    struct timeb tp;
+    struct tm *ltp;
+
+    ftime(&tp);
+    time_sec -= tp.timezone * 60;
+
+    ltp = localtime(&time_sec);
+    if (ltp == NULL) {
+        return 0;
+    }
+    return strftime(s, max, format, ltp);
+}
+
diff --git 
a/scriptsrcs/wamr/core/shared-lib/platform/linux/shared_platform.cmake 
b/scriptsrcs/wamr/core/shared-lib/platform/linux/shared_platform.cmake
new file mode 100755
index 0000000..5b403a0
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/linux/shared_platform.cmake
@@ -0,0 +1,24 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (PLATFORM_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${PLATFORM_SHARED_DIR})
+include_directories(${PLATFORM_SHARED_DIR}/../include)
+
+
+file (GLOB_RECURSE source_all ${PLATFORM_SHARED_DIR}/*.c)
+
+set (PLATFORM_SHARED_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_assert.c 
b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_assert.c
new file mode 100755
index 0000000..b52a9aa
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_assert.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include "bh_assert.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef BH_TEST
+#include <setjmp.h>
+#endif
+
+#ifdef BH_TEST
+/* for exception throwing */
+jmp_buf bh_test_jb;
+#endif
+
+void bh_assert_internal(int v, const char *file_name, int line_number,
+        const char *expr_string)
+{
+    if (v)
+        return;
+
+    if (!file_name)
+        file_name = "NULL FILENAME";
+    if (!expr_string)
+        expr_string = "NULL EXPR_STRING";
+
+    printf("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string,
+            file_name, line_number);
+
+#ifdef BH_TEST
+    longjmp(bh_test_jb, 1);
+#endif
+
+    abort();
+}
+
+void bh_debug_internal(const char *file_name, int line_number, const char *fmt,
+        ...)
+{
+#ifndef JEFF_TEST_VERIFIER
+    va_list args;
+
+    va_start(args, fmt);
+    bh_assert(file_name);
+
+    printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number);
+    vprintf(fmt, args);
+
+    va_end(args);
+    printf("\n");
+#endif
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_definition.c 
b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_definition.c
new file mode 100755
index 0000000..19e10d5
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_definition.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_definition.h"
+#include "bh_platform.h"
+
+int bh_return(int ret)
+{
+    return ret;
+}
+
+int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n)
+{
+    char *dest = (char*) s1;
+    char *src = (char*) s2;
+    if (n == 0) {
+        return 0;
+    }
+
+    if (s1 == NULL || s1max > RSIZE_MAX) {
+        return -1;
+    }
+    if (s2 == NULL || n > s1max) {
+        memset(dest, 0, s1max);
+        return -1;
+    }
+    memcpy(dest, src, n);
+    return 0;
+}
+
+int b_strcat_s(char * s1, size_t s1max, const char * s2)
+{
+    if (NULL
+            == s1|| NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1) || 
s1max > RSIZE_MAX) {
+        return -1;
+    }
+
+    strcat(s1, s2);
+
+    return 0;
+}
+
+int b_strcpy_s(char * s1, size_t s1max, const char * s2)
+{
+    if (NULL
+            == s1|| NULL == s2 || s1max < (strlen(s2) + 1) || s1max > 
RSIZE_MAX) {
+        return -1;
+    }
+
+    strcpy(s1, s2);
+
+    return 0;
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_platform.c 
b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_platform.c
new file mode 100755
index 0000000..9811242
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_platform.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <dlfcn.h>
+
+
+char *bh_strdup(const char *s)
+{
+    char *s1 = NULL;
+    if (s && (s1 = bh_malloc(strlen(s) + 1)))
+        memcpy(s1, s, strlen(s) + 1);
+    return s1;
+}
+
+int bh_platform_init()
+{
+    return 0;
+}
+
+char*
+bh_read_file_to_buffer(const char *filename, int *ret_size)
+{
+    char *buffer;
+    int file;
+    int file_size, read_size;
+    struct stat stat_buf;
+
+    if (!filename || !ret_size) {
+        printf("Read file to buffer failed: invalid filename or ret size.\n");
+        return NULL;
+    }
+
+    if ((file = open(filename, O_RDONLY, 0)) == -1) {
+        printf("Read file to buffer failed: open file %s failed.\n",
+               filename);
+        return NULL;
+    }
+
+    if (fstat(file, &stat_buf) != 0) {
+        printf("Read file to buffer failed: fstat file %s failed.\n",
+               filename);
+        close(file);
+        return NULL;
+    }
+
+    file_size = stat_buf.st_size;
+
+    if (!(buffer = wasm_malloc(file_size))) {
+        printf("Read file to buffer failed: alloc memory failed.\n");
+        close(file);
+        return NULL;
+    }
+
+    read_size = read(file, buffer, file_size);
+    close(file);
+
+    if (read_size < file_size) {
+        printf("Read file to buffer failed: read file content failed.\n");
+        wasm_free(buffer);
+        return NULL;
+    }
+
+    *ret_size = file_size;
+    return buffer;
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_platform.h 
b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_platform.h
new file mode 100755
index 0000000..142583e
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_platform.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_PLATFORM_H
+#define _BH_PLATFORM_H
+
+#include "bh_config.h"
+#include "bh_types.h"
+#include "bh_memory.h"
+#include <inttypes.h>
+#include <stdbool.h>
+#include <assert.h>
+#include <time.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <pthread.h>
+#include <limits.h>
+#include <semaphore.h>
+#include <errno.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef uint64_t uint64;
+typedef int64_t int64;
+
+extern void DEBUGME(void);
+
+#define DIE do{bh_debug("Die here\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); 
DEBUGME(void); while(1);}while(0)
+
+#define BH_PLATFORM "VxWorks"
+
+/* NEED qsort */
+
+#define _STACK_SIZE_ADJUSTMENT (32 * 1024)
+
+/* Stack size of applet threads's native part.  */
+#define BH_APPLET_PRESERVED_STACK_SIZE      (8 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Default thread priority */
+#define BH_THREAD_DEFAULT_PRIORITY 0
+
+#define BH_ROUTINE_MODIFIER
+
+#define BHT_TIMEDOUT ETIMEDOUT
+
+#define INVALID_THREAD_ID 0xFFffFFff
+
+typedef pthread_t korp_tid;
+typedef pthread_mutex_t korp_mutex;
+typedef sem_t korp_sem;
+typedef pthread_cond_t korp_cond;
+typedef pthread_t korp_thread;
+typedef void* (*thread_start_routine_t)(void*);
+
+#define wa_malloc bh_malloc
+#define wa_free bh_free
+#define wa_strdup bh_strdup
+
+int snprintf(char *buffer, size_t count, const char *format, ...);
+double fmod(double x, double y);
+float fmodf(float x, float y);
+double sqrt(double x);
+
+#define BH_WAIT_FOREVER 0xFFFFFFFF
+
+#ifndef NULL
+#  define NULL ((void*) 0)
+#endif
+
+/**
+ * Return the offset of the given field in the given type.
+ *
+ * @param Type the type containing the filed
+ * @param field the field in the type
+ *
+ * @return the offset of field in Type
+ */
+#ifndef offsetof
+#define offsetof(Type, field) ((size_t)(&((Type *)0)->field))
+#endif
+
+#define bh_assert assert
+
+int b_memcpy_s(void * s1, unsigned int s1max, const void * s2,
+               unsigned int n);
+int b_strcat_s(char * s1, size_t s1max, const char * s2);
+int b_strcpy_s(char * s1, size_t s1max, const char * s2);
+
+char *bh_read_file_to_buffer(const char *filename, int *ret_size);
+
+char *bh_strdup(const char *s);
+
+int bh_platform_init();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_platform_log.c 
b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_platform_log.c
new file mode 100755
index 0000000..4ff0319
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_platform_log.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include <stdio.h>
+
+void bh_log_emit(const char *fmt, va_list ap)
+{
+    vprintf(fmt, ap);
+    fflush(stdout);
+}
+
+int bh_fprintf(FILE *stream, const char *fmt, ...)
+{
+    va_list ap;
+    int ret;
+
+    va_start(ap, fmt);
+    ret = vfprintf(stream ? stream : stdout, fmt, ap);
+    va_end(ap);
+
+    return ret;
+}
+
+int bh_fflush(void *stream)
+{
+    return fflush(stream ? stream : stdout);
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_thread.c 
b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_thread.c
new file mode 100755
index 0000000..8883c37
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_thread.c
@@ -0,0 +1,404 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_thread.h"
+#include "bh_assert.h"
+#include "bh_log.h"
+#include "bh_memory.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+
+static bool is_thread_sys_inited = false;
+
+static korp_mutex thread_list_lock;
+static pthread_key_t thread_local_storage_key[BH_MAX_TLS_NUM];
+
+int _vm_thread_sys_init()
+{
+    unsigned i, j;
+    int ret;
+
+    if (is_thread_sys_inited)
+        return 0;
+
+    for (i = 0; i < BH_MAX_TLS_NUM; i++) {
+        ret = pthread_key_create(&thread_local_storage_key[i], NULL);
+        if (ret)
+            goto fail;
+    }
+
+    ret = vm_mutex_init(&thread_list_lock);
+    if (ret)
+        goto fail;
+
+    is_thread_sys_inited = true;
+    return 0;
+
+    fail: for (j = 0; j < i; j++)
+        pthread_key_delete(thread_local_storage_key[j]);
+    return -1;
+}
+
+void vm_thread_sys_destroy(void)
+{
+    if (is_thread_sys_inited) {
+        unsigned i;
+        for (i = 0; i < BH_MAX_TLS_NUM; i++)
+            pthread_key_delete(thread_local_storage_key[i]);
+        vm_mutex_destroy(&thread_list_lock);
+        is_thread_sys_inited = false;
+    }
+}
+
+typedef struct {
+    thread_start_routine_t start;
+    void* stack;
+    int stack_size;
+    void* arg;
+} thread_wrapper_arg;
+
+static void *vm_thread_wrapper(void *arg)
+{
+    thread_wrapper_arg * targ = arg;
+    LOG_VERBOSE("THREAD CREATE 0x%08x\n", &targ);
+    targ->stack = (void *)((uintptr_t)(&arg) & ~0xfff);
+    _vm_tls_put(1, targ);
+    targ->start(targ->arg);
+    bh_free(targ);
+    _vm_tls_put(1, NULL);
+    return NULL;
+}
+
+int _vm_thread_create_with_prio(korp_tid *tid, thread_start_routine_t start,
+        void *arg, unsigned int stack_size, int prio)
+{
+    pthread_attr_t tattr;
+    thread_wrapper_arg *targ;
+
+    bh_assert(stack_size > 0);
+    bh_assert(tid);
+    bh_assert(start);
+
+    *tid = INVALID_THREAD_ID;
+
+    pthread_attr_init(&tattr);
+    pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_JOINABLE);
+    if (pthread_attr_setstacksize(&tattr, stack_size) != 0) {
+        bh_debug("Invalid thread stack size %u. Min stack size on Linux = %u",
+                stack_size, PTHREAD_STACK_MIN);
+        pthread_attr_destroy(&tattr);
+        return BHT_ERROR;
+    }
+
+    targ = (thread_wrapper_arg*) bh_malloc(sizeof(*targ));
+    if (!targ) {
+        pthread_attr_destroy(&tattr);
+        return BHT_ERROR;
+    }
+
+    targ->start = start;
+    targ->arg = arg;
+    targ->stack_size = stack_size;
+
+    if (pthread_create(tid, &tattr, vm_thread_wrapper, targ) != 0) {
+        pthread_attr_destroy(&tattr);
+        bh_free(targ);
+        return BHT_ERROR;
+    }
+
+    pthread_attr_destroy(&tattr);
+    return BHT_OK;
+}
+
+int _vm_thread_create(korp_tid *tid, thread_start_routine_t start, void *arg,
+        unsigned int stack_size)
+{
+    return _vm_thread_create_with_prio(tid, start, arg, stack_size,
+                                       BH_THREAD_DEFAULT_PRIORITY);
+}
+
+korp_tid _vm_self_thread()
+{
+    return (korp_tid) pthread_self();
+}
+
+void vm_thread_exit(void * code)
+{
+    bh_free(_vm_tls_get(1));
+    _vm_tls_put(1, NULL);
+    pthread_exit(code);
+}
+
+void *_vm_tls_get(unsigned idx)
+{
+    bh_assert(idx < BH_MAX_TLS_NUM);
+    return pthread_getspecific(thread_local_storage_key[idx]);
+}
+
+int _vm_tls_put(unsigned idx, void * tls)
+{
+    bh_assert(idx < BH_MAX_TLS_NUM);
+    pthread_setspecific(thread_local_storage_key[idx], tls);
+    return BHT_OK;
+}
+
+int _vm_mutex_init(korp_mutex *mutex)
+{
+    return pthread_mutex_init(mutex, NULL) == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_recursive_mutex_init(korp_mutex *mutex)
+{
+    int ret;
+
+    pthread_mutexattr_t mattr;
+
+    bh_assert(mutex);
+    ret = pthread_mutexattr_init(&mattr);
+    if (ret)
+        return BHT_ERROR;
+
+    pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_RECURSIVE);
+    ret = pthread_mutex_init(mutex, &mattr);
+    pthread_mutexattr_destroy(&mattr);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_mutex_destroy(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_destroy(mutex);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+/* Returned error (EINVAL, EAGAIN and EDEADLK) from
+ locking the mutex indicates some logic error present in
+ the program somewhere.
+ Don't try to recover error for an existing unknown error.*/
+void vm_mutex_lock(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_lock(mutex);
+    if (0 != ret) {
+        printf("vm mutex lock failed (ret=%d)!\n", ret);
+        exit(-1);
+    }
+}
+
+int vm_mutex_trylock(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_trylock(mutex);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+/* Returned error (EINVAL, EAGAIN and EPERM) from
+ unlocking the mutex indicates some logic error present
+ in the program somewhere.
+ Don't try to recover error for an existing unknown error.*/
+void vm_mutex_unlock(korp_mutex *mutex)
+{
+    int ret;
+
+    bh_assert(mutex);
+    ret = pthread_mutex_unlock(mutex);
+    if (0 != ret) {
+        printf("vm mutex unlock failed (ret=%d)!\n", ret);
+        exit(-1);
+    }
+}
+
+int _vm_sem_init(korp_sem* sem, unsigned int c)
+{
+    int ret;
+
+    bh_assert(sem);
+    ret = sem_init(sem, 0, c);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_sem_destroy(korp_sem *sem)
+{
+    int ret;
+
+    bh_assert(sem);
+    ret = sem_destroy(sem);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_sem_wait(korp_sem *sem)
+{
+    int ret;
+
+    bh_assert(sem);
+
+    ret = sem_wait(sem);
+
+    return ret == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_sem_reltimedwait(korp_sem *sem, int mills)
+{
+    int ret = BHT_OK;
+
+    struct timespec timeout;
+    const int mills_per_sec = 1000;
+    const int mills_to_nsec = 1E6;
+
+    bh_assert(sem);
+
+    if (mills == BHT_WAIT_FOREVER) {
+        ret = sem_wait(sem);
+    } else {
+
+        timeout.tv_sec = mills / mills_per_sec;
+        timeout.tv_nsec = (mills % mills_per_sec) * mills_to_nsec;
+        timeout.tv_sec += time(NULL);
+
+        ret = sem_timedwait(sem, &timeout);
+    }
+
+    if (ret != BHT_OK) {
+        if (errno == BHT_TIMEDOUT) {
+            ret = BHT_TIMEDOUT;
+            errno = 0;
+        } else {
+            bh_debug("Faliure happens when timed wait is called");
+            bh_assert(0);
+        }
+    }
+
+    return ret;
+}
+
+int _vm_sem_post(korp_sem *sem)
+{
+    bh_assert(sem);
+
+    return sem_post(sem) == 0 ? BHT_OK : BHT_ERROR;
+}
+
+int _vm_cond_init(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_init(cond, NULL) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_destroy(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_destroy(cond) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex)
+{
+    bh_assert(cond);
+    bh_assert(mutex);
+
+    if (pthread_cond_wait(cond, mutex) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+static void msec_nsec_to_abstime(struct timespec *ts, int64 msec, int32 nsec)
+{
+    struct timeval tv;
+
+    gettimeofday(&tv, NULL);
+
+    ts->tv_sec = tv.tv_sec + msec / 1000;
+    ts->tv_nsec = tv.tv_usec * 1000 + (msec % 1000) * 1000000 + nsec;
+
+    if (ts->tv_nsec >= 1000000000L) {
+        ts->tv_sec++;
+        ts->tv_nsec -= 1000000000L;
+    }
+}
+
+int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills)
+{
+    int ret;
+    struct timespec abstime;
+
+    if (mills == BHT_WAIT_FOREVER)
+        ret = pthread_cond_wait(cond, mutex);
+    else {
+        msec_nsec_to_abstime(&abstime, mills, 0);
+        ret = pthread_cond_timedwait(cond, mutex, &abstime);
+    }
+
+    if (ret != BHT_OK && ret != BHT_TIMEDOUT)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_signal(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_signal(cond) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_broadcast(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (pthread_cond_broadcast(cond) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_thread_cancel(korp_tid thread)
+{
+    return pthread_cancel(thread);
+}
+
+int _vm_thread_join(korp_tid thread, void **value_ptr, int mills)
+{
+    return pthread_join(thread, value_ptr);
+}
+
+int _vm_thread_detach(korp_tid thread)
+{
+    return pthread_detach(thread);
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_time.c 
b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_time.c
new file mode 100755
index 0000000..4cae358
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/bh_time.c
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_time.h"
+
+#include <unistd.h>
+#include <stdio.h>
+#include <time.h>
+
+/*
+ * This function returns milliseconds per tick.
+ * @return milliseconds per tick.
+ */
+uint64 _bh_time_get_tick_millisecond()
+{
+    return sysconf(_SC_CLK_TCK);
+}
+
+/*
+ * This function returns milliseconds after boot.
+ * @return milliseconds after boot.
+ */
+uint64 _bh_time_get_boot_millisecond()
+{
+    struct timespec ts;
+    if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
+        return 0;
+    }
+
+    return ((uint64) ts.tv_sec) * 1000 + ts.tv_nsec / (1000 * 1000);
+}
+
+uint32 bh_get_tick_sec()
+{
+    return _bh_time_get_boot_millisecond() / 1000;
+}
+
+/*
+ * This function returns GMT time milliseconds since from 1970.1.1, AKA UNIX 
time.
+ * @return milliseconds since from 1970.1.1.
+ */
+uint64 _bh_time_get_millisecond_from_1970()
+{
+    struct timespec ts;
+
+    if (clock_gettime(CLOCK_REALTIME, &ts) != 0) {
+        return 0;
+    }
+
+    return ((uint64) ts.tv_sec) * 1000 + ts.tv_nsec / (1000 * 1000);
+}
+
+size_t _bh_time_strftime(char *s, size_t max, const char *format, int64 time)
+{
+    time_t time_sec = time / 1000;
+    struct tm *ltp;
+
+    ltp = localtime(&time_sec);
+    if (ltp == NULL) {
+        return 0;
+    }
+    return strftime(s, max, format, ltp);
+}
+
diff --git 
a/scriptsrcs/wamr/core/shared-lib/platform/vxworks/shared_platform.cmake 
b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/shared_platform.cmake
new file mode 100755
index 0000000..5b403a0
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/vxworks/shared_platform.cmake
@@ -0,0 +1,24 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (PLATFORM_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${PLATFORM_SHARED_DIR})
+include_directories(${PLATFORM_SHARED_DIR}/../include)
+
+
+file (GLOB_RECURSE source_all ${PLATFORM_SHARED_DIR}/*.c)
+
+set (PLATFORM_SHARED_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_assert.c 
b/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_assert.c
new file mode 100755
index 0000000..b0bbbcb
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_assert.c
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include "bh_assert.h"
+#include <stdarg.h>
+
+#ifdef BH_TEST
+#include <setjmp.h>
+#endif
+
+#ifdef BH_TEST
+/* for exception throwing */
+jmp_buf bh_test_jb;
+#endif
+
+void bh_assert_internal(int v, const char *file_name, int line_number,
+        const char *expr_string)
+{
+    if (v)
+        return;
+
+    if (!file_name)
+        file_name = "NULL FILENAME";
+    if (!expr_string)
+        expr_string = "NULL EXPR_STRING";
+
+    printf("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string,
+            file_name, line_number);
+
+#ifdef BH_TEST
+    longjmp(bh_test_jb, 1);
+#endif
+
+    abort();
+}
+
+void bh_debug_internal(const char *file_name, int line_number, const char *fmt,
+        ...)
+{
+#ifndef JEFF_TEST_VERIFIER
+    va_list args;
+
+    va_start(args, fmt);
+    bh_assert(file_name);
+
+    printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number);
+    vprintf(fmt, args);
+
+    va_end(args);
+    printf("\n");
+#endif
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_definition.c 
b/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_definition.c
new file mode 100755
index 0000000..058804c
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_definition.c
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_definition.h"
+
+int bh_return(int ret)
+{
+    return ret;
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_platform.h 
b/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_platform.h
new file mode 100755
index 0000000..c898a74
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_platform.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_PLATFORM_H
+#define _BH_PLATFORM_H
+
+#include "bh_config.h"
+#include "bh_types.h"
+
+#ifndef NVALGRIND
+#define NVALGRIND
+#endif
+
+/* Reserve bytes on applet stack for native functions called from
+ * Java methods to avoid undetectable stack overflow.
+ */
+#ifndef APPLET_PRESERVED_STACK_SIZE
+#define APPLET_PRESERVED_STACK_SIZE (16 * BH_KB)
+#endif
+
+typedef unsigned __int64 uint64;
+typedef __int64 int64;
+
+extern void DEBUGME(void);
+
+#define DIE do{bh_debug("Die here\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); 
DEBUGME(void); while(1);}while(0)
+
+#ifndef BH_INVALID_HANDLE
+#define BH_INVALID_HANDLE NULL
+#endif
+
+#define BH_PLATFORM "AMULET"
+
+#include <stdarg.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <math.h>
+
+#define _STACK_SIZE_ADJUSTMENT (32 * 1024)
+
+/* Stack size of applet manager thread.  */
+#define BH_APPLET_MANAGER_THREAD_STACK_SIZE (8 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Stack size of HMC thread.  */
+#define BH_HMC_THREAD_STACK_SIZE            (4 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Stack size of watchdog thread.  */
+#define BH_WATCHDOG_THREAD_SIZE             (4 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Stack size of applet threads's native part.  */
+#define BH_APPLET_PRESERVED_STACK_SIZE      (8 * 1024 + _STACK_SIZE_ADJUSTMENT)
+
+/* Maximal recursion depth of interpreter.  */
+#define BH_MAX_INTERP_RECURSION_DEPTH       8
+
+#define wa_malloc bh_malloc
+#define wa_free bh_free
+
+#define snprintf _snprintf
+
+#define BH_ROUTINE_MODIFIER __stdcall
+
+typedef void *korp_tid;
+#define INVALID_THREAD_ID 0
+
+typedef void *korp_mutex;
+typedef void *korp_sem;
+
+typedef struct {
+    korp_sem s;
+    unsigned waiting_count;
+} korp_cond;
+
+typedef void* (BH_ROUTINE_MODIFIER *thread_start_routine_t)(void*);
+
+#endif
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_platform_log.c 
b/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_platform_log.c
new file mode 100755
index 0000000..80bec06
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_platform_log.c
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include "bh_platform.h"
+
+void bh_log_emit(const char *fmt, va_list ap)
+{
+    vprintf(fmt, ap);
+    fflush(stdout);
+}
+
+int bh_fprintf(FILE *stream, const char *fmt, ...)
+{
+    int ret;
+    va_list ap;
+    va_start(ap, fmt);
+    ret = vfprintf(stream ? stream : stdout, fmt, ap);
+    va_end(ap);
+    return ret;
+}
+
+int bh_fflush(void *stream)
+{
+    return fflush(stream ? stream : stdout);
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_thread.c 
b/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_thread.c
new file mode 100755
index 0000000..ab7e783
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_thread.c
@@ -0,0 +1,342 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_thread.h"
+#include "bh_assert.h"
+#include "bh_log.h"
+#include "bh_memory.h"
+
+#include <windows.h>
+#include <process.h>
+
+#ifdef _DEBUG
+#define THREAD_STACK_ADJUSTMENT (32 * 1024)
+#else
+#define THREAD_STACK_ADJUSTMENT 0
+#endif
+
+static korp_mutex thread_list_lock;
+static DWORD tls_indexes[BH_MAX_TLS_NUM];
+
+typedef struct {
+    int zero_padding;
+    thread_start_routine_t start;
+    void* stack;
+    void* args;
+    int stack_size;
+} vm_thread_block;
+
+static DWORD tb_index;
+
+int _vm_thread_sys_init()
+{
+    unsigned int i;
+    for (i = 0; i < BH_MAX_TLS_NUM; i++) {
+        tls_indexes[i] = TlsAlloc();
+        if (tls_indexes[i] == TLS_OUT_OF_INDEXES)
+            return BHT_ERROR;
+    }
+
+    tb_index = TlsAlloc();
+    if (tb_index == TLS_OUT_OF_INDEXES)
+        return BHT_ERROR;
+
+    return vm_mutex_init(&thread_list_lock);
+}
+
+static unsigned int BH_ROUTINE_MODIFIER beihai_starter(void* arg)
+{
+    vm_thread_block* tb = (vm_thread_block*) arg;
+    TlsSetValue(tb_index, tb);
+    tb->stack = (void *) &arg;
+    tb->start(tb->args);
+
+    return 0;
+}
+
+int _vm_thread_create(korp_tid *tid, thread_start_routine_t start, void *arg,
+        unsigned int stack_size)
+{
+    unsigned int default_stack_size = 20 * 1024;
+    vm_thread_block* tb;
+    bh_assert(tid);
+    bh_assert(start);
+
+    if (stack_size == 0)
+        stack_size = default_stack_size;
+
+#ifdef _DEBUG
+    stack_size = THREAD_STACK_ADJUSTMENT + stack_size*3;
+#endif
+
+    tb = (vm_thread_block*) bh_malloc(sizeof(*tb));
+    if (tb == NULL)
+        return BHT_ERROR;
+
+    memset(tb, 0, sizeof(*tb));
+
+    tb->start = start;
+    tb->stack_size = stack_size;
+    tb->args = arg;
+
+    *tid = (korp_tid) _beginthreadex(NULL, stack_size, beihai_starter,
+            (void*) tb, 0, NULL);
+
+    /* TODO: to deal with the handle; how to close it? */
+    return (*tid == INVALID_THREAD_ID) ? BHT_ERROR : BHT_OK;
+}
+
+korp_tid _vm_self_thread()
+{
+    return (korp_tid) GetCurrentThread();
+}
+
+void vm_thread_exit(void *code)
+{
+    vm_thread_block *tb = (vm_thread_block*) TlsGetValue(tb_index);
+    bh_free(tb);
+    _endthreadex((unsigned int) code);
+}
+
+void* vm_get_stackaddr()
+{
+    vm_thread_block *tb = (vm_thread_block*) TlsGetValue(tb_index);
+    return (char *) tb->stack + THREAD_STACK_ADJUSTMENT - tb->stack_size;
+}
+
+void *_vm_tls_get(unsigned idx)
+{
+    bh_assert(idx < BH_MAX_TLS_NUM);
+    return TlsGetValue(tls_indexes[idx]);
+}
+
+int _vm_tls_put(unsigned idx, void *tls)
+{
+    BOOL r;
+
+    bh_assert(idx < BH_MAX_TLS_NUM);
+    r = TlsSetValue(tls_indexes[idx], tls);
+    return (r == FALSE) ? BHT_ERROR : BHT_OK;
+}
+
+int _vm_mutex_init(korp_mutex *mutex)
+{
+    bh_assert(mutex);
+    *mutex = CreateMutex(NULL, FALSE, NULL);
+    return (*mutex == 0) ? BHT_ERROR : BHT_OK;
+}
+
+int _vm_mutex_destroy(korp_mutex *mutex)
+{
+    return BHT_OK;
+}
+
+/* Returned error (e.g. ERROR_INVALID_HANDLE) from
+ locking the mutex indicates some logic error present in
+ the program somewhere.
+ Don't try to recover error for an existing unknown error.*/
+void vm_mutex_lock(korp_mutex *mutex)
+{
+    DWORD ret;
+
+    bh_assert(mutex);
+    ret = WaitForSingleObject(*mutex, INFINITE);
+    if (WAIT_FAILED == ret) {
+        LOG_FATAL("vm mutex lock failed (ret=%d)!\n", GetLastError());
+        exit(-1);
+    }
+}
+
+int vm_mutex_trylock(korp_mutex *mutex)
+{
+    DWORD ret;
+
+    bh_assert(mutex);
+    ret = WaitForSingleObject(*mutex, 0);
+    if (WAIT_FAILED == ret) {
+        LOG_FATAL("vm mutex lock failed (ret=%d)!\n", GetLastError());
+        exit(-1);
+    }
+    return ret == WAIT_OBJECT_0 ? BHT_OK : BHT_ERROR;
+}
+
+/* Returned error (e.g. ERROR_INVALID_HANDLE) from
+ unlocking the mutex indicates some logic error present
+ in the program somewhere.
+ Don't try to recover error for an existing unknown error.*/
+void vm_mutex_unlock(korp_mutex *mutex)
+{
+    BOOL ret;
+
+    bh_assert(mutex);
+    ret = ReleaseMutex(*mutex);
+    if (FALSE == ret) {
+        LOG_FATAL("vm mutex unlock failed (ret=%d)!\n", GetLastError());
+        exit(-1);
+    }
+}
+
+#define BH_SEM_COUNT_MAX 0xFFFF
+
+int _vm_sem_init(korp_sem *sem, unsigned int count)
+{
+    bh_assert(sem);
+    bh_assert(count <= BH_SEM_COUNT_MAX);
+    *sem = CreateSemaphore(NULL, count, BH_SEM_COUNT_MAX, NULL);
+
+    return (*sem == NULL) ? BHT_ERROR : BHT_OK;
+}
+
+int _vm_sem_destroy(korp_sem *sem)
+{
+    return BHT_OK;
+}
+
+int _vm_sem_P(korp_sem *sem)
+{
+    DWORD r;
+    bh_assert(sem);
+    r = WaitForSingleObject(*sem, INFINITE);
+
+    return (r == WAIT_FAILED) ? BHT_ERROR : BHT_OK;
+}
+
+int _vm_sem_reltimedP(korp_sem *sem, int mills)
+{
+    DWORD r;
+    bh_assert(sem);
+
+    if (mills == BHT_WAIT_FOREVER)
+        mills = INFINITE;
+
+    r = WaitForSingleObject(*sem, (unsigned int) mills);
+
+    switch (r) {
+    case WAIT_OBJECT_0:
+        return BHT_OK;
+    case WAIT_TIMEOUT:
+        return BHT_TIMEDOUT;
+    default:
+        return BHT_ERROR;
+    }
+}
+
+int _vm_sem_V(korp_sem *sem)
+{
+    BOOL r;
+    bh_assert(sem);
+    r = ReleaseSemaphore(*sem, 1, NULL);
+    return (r == FALSE) ? BHT_ERROR : BHT_OK;
+}
+
+int _vm_cond_init(korp_cond *cond)
+{
+    bh_assert(cond);
+    cond->waiting_count = 0;
+    return vm_sem_init(&cond->s, 0);
+}
+
+int _vm_cond_destroy(korp_cond *cond)
+{
+    bh_assert(cond);
+    return vm_sem_destroy(&cond->s);
+}
+
+int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex)
+{
+    bh_assert(cond);
+    bh_assert(mutex);
+
+    cond->waiting_count++;
+
+    vm_mutex_unlock(mutex);
+
+    if (vm_sem_P(&cond->s) != BHT_OK)
+        return BHT_ERROR;
+
+    vm_mutex_lock(mutex);
+
+    cond->waiting_count--;
+
+    return BHT_OK;
+}
+
+int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills)
+{
+    int r;
+
+    bh_assert(cond);
+    bh_assert(mutex);
+
+    cond->waiting_count++;
+
+    vm_mutex_unlock(mutex);
+
+    r = vm_sem_reltimedP(&cond->s, mills);
+
+    if ((r != BHT_OK) && (r != BHT_TIMEDOUT))
+        return BHT_ERROR;
+
+    vm_mutex_lock(mutex);
+
+    cond->waiting_count--;
+
+    return r;
+}
+
+int _vm_cond_signal(korp_cond *cond)
+{
+    bh_assert(cond);
+
+    if (cond->waiting_count == 0)
+        return BHT_OK;
+
+    if (vm_sem_V(&cond->s) != BHT_OK)
+        return BHT_ERROR;
+
+    return BHT_OK;
+}
+
+int _vm_cond_broadcast(korp_cond *cond)
+{
+    /* FIXME: use pthread's API to implement this and above
+     functions.  */
+
+    unsigned count = cond->waiting_count;
+
+    for (; count > 0; count--)
+        vm_sem_V(&cond->s);
+
+    return BHT_OK;
+}
+
+int _vm_thread_cancel(korp_tid thread)
+{
+    /* FIXME: implement this with Windows API.  */
+    return 0;
+}
+
+int _vm_thread_join(korp_tid thread, void **value_ptr)
+{
+    /* FIXME: implement this with Windows API.  */
+    return 0;
+}
+
+int _vm_thread_detach(korp_tid thread)
+{
+    /* FIXME: implement this with Windows API.  */
+    return 0;
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_time.c 
b/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_time.c
new file mode 100755
index 0000000..c8d426c
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/win32/bh_time.c
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include "bh_time.h"
+
+#include <time.h>
+#include <sys/timeb.h>
+
+/* Since GetTickCount64 is not supported on Windows XP, use a temporary method
+ * to solve the issue. However, GetTickCount return a DWORD value and overflow
+ * may happen (http://msdn.microsoft.com/en-us/library/ms724408(v=vs.85).aspx).
+ *
+ * TODO: Implement GetTickCount64 on Windows XP by self or check overflow 
issues.
+ */
+#if (WINVER >= 0x0600)
+extern uint64 __stdcall GetTickCount64(void);
+#else
+extern uint32 __stdcall GetTickCount(void);
+#endif
+
+/*
+ * This function returns milliseconds per tick.
+ * @return milliseconds per tick.
+ */
+uint64 _bh_time_get_tick_millisecond()
+{
+    return 5;
+}
+
+/*
+ * This function returns milliseconds after boot.
+ * @return milliseconds after boot.
+ */
+uint64 _bh_time_get_boot_millisecond()
+{
+    /* Since GetTickCount64 is not supported on Windows XP, use a temporary 
method
+     * to solve the issue. However, GetTickCount return a DWORD value and 
overflow
+     * may happen 
(http://msdn.microsoft.com/en-us/library/ms724408(v=vs.85).aspx).
+     *
+     * TODO: Implement GetTickCount64 on Windows XP by self or check overflow 
issues.
+     */
+#if (WINVER >= 0x0600)
+    return GetTickCount64();
+#else
+    return GetTickCount();
+#endif
+}
+
+/*
+ * This function returns GMT time milliseconds since from 1970.1.1, AKA UNIX 
time.
+ * @return milliseconds since from 1970.1.1.
+ */
+uint64 _bh_time_get_millisecond_from_1970()
+{
+    struct timeb tp;
+    ftime(&tp);
+
+    return ((uint64) tp.time) * 1000 + tp.millitm
+            - (tp.dstflag == 0 ? 0 : 60 * 60 * 1000) + tp.timezone * 60 * 1000;
+}
+
+size_t bh_time_strftime(char *s, size_t max, const char *format, int64 time)
+{
+    time_t time_sec = time / 1000;
+    struct timeb tp;
+    struct tm local_time;
+
+    if (NULL == s)
+        return 0;
+
+    ftime(&tp);
+    time_sec -= tp.timezone * 60;
+    if (localtime_s(&local_time, &time_sec) != 0)
+        return 0;
+
+    return strftime(s, max, format, &local_time);
+}
+
+int bh_time_get(uint8 *timeoff_info, int16 timeoff_info_len, uint32* time)
+{
+    return BH_UNIMPLEMENTED;
+}
+
+int bh_time_set(uint32 ntp, uint8 *timeoff_info)
+{
+    return BH_UNIMPLEMENTED;
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/zephyr/COPYRIGHT 
b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/COPYRIGHT
new file mode 100755
index 0000000..a0e1c83
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/COPYRIGHT
@@ -0,0 +1,126 @@
+# $FreeBSD$
+#      @(#)COPYRIGHT   8.2 (Berkeley) 3/21/94
+
+The compilation of software known as FreeBSD is distributed under the
+following terms:
+
+Copyright (c) 1992-2019 The FreeBSD Project.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+The 4.4BSD and 4.4BSD-Lite software is distributed under the following
+terms:
+
+All of the documentation and software included in the 4.4BSD and 4.4BSD-Lite
+Releases is copyrighted by The Regents of the University of California.
+
+Copyright 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
+       The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+This product includes software developed by the University of
+California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+The Institute of Electrical and Electronics Engineers and the American
+National Standards Committee X3, on Information Processing Systems have
+given us permission to reprint portions of their documentation.
+
+In the following statement, the phrase ``this text'' refers to portions
+of the system documentation.
+
+Portions of this text are reprinted and reproduced in electronic form in
+the second BSD Networking Software Release, from IEEE Std 1003.1-1988, IEEE
+Standard Portable Operating System Interface for Computer Environments
+(POSIX), copyright C 1988 by the Institute of Electrical and Electronics
+Engineers, Inc.  In the event of any discrepancy between these versions
+and the original IEEE Standard, the original IEEE Standard is the referee
+document.
+
+In the following statement, the phrase ``This material'' refers to portions
+of the system documentation.
+
+This material is reproduced with permission from American National
+Standards Committee X3, on Information Processing Systems.  Computer and
+Business Equipment Manufacturers Association (CBEMA), 311 First St., NW,
+Suite 500, Washington, DC 20001-2178.  The developmental work of
+Programming Language C was completed by the X3J11 Technical Committee.
+
+The views and conclusions contained in the software and documentation are
+those of the authors and should not be interpreted as representing official
+policies, either expressed or implied, of the Regents of the University
+of California.
+
+
+NOTE: The copyright of UC Berkeley's Berkeley Software Distribution ("BSD")
+source has been updated.  The copyright addendum may be found at
+ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change and is
+included below.
+
+July 22, 1999
+
+To All Licensees, Distributors of Any Version of BSD:
+
+As you know, certain of the Berkeley Software Distribution ("BSD") source
+code files require that further distributions of products containing all or
+portions of the software, acknowledge within their advertising materials
+that such products contain software developed by UC Berkeley and its
+contributors.
+
+Specifically, the provision reads:
+
+"     * 3. All advertising materials mentioning features or use of this 
software
+      *    must display the following acknowledgement:
+      *    This product includes software developed by the University of
+      *    California, Berkeley and its contributors."
+
+Effective immediately, licensees and distributors are no longer required to
+include the acknowledgement within advertising materials.  Accordingly, the
+foregoing paragraph of those BSD Unix files containing it is hereby deleted
+in its entirety.
+
+William Hoskins
+Director, Office of Technology Licensing
+University of California, Berkeley
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/zephyr/Makefile 
b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/Makefile
new file mode 100755
index 0000000..4528ff5
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/Makefile
@@ -0,0 +1,15 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+obj-y += bh_assert.o bh_definition.o bh_memory.o bh_platform_log.o bh_thread.o 
bh_time.o
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_assert.c 
b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_assert.c
new file mode 100755
index 0000000..121addd
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_assert.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include "bh_assert.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef BH_TEST
+#include <setjmp.h>
+#endif
+
+#ifdef BH_TEST
+/* for exception throwing */
+jmp_buf bh_test_jb;
+#endif
+extern void abort(void);
+void bh_assert_internal(int v, const char *file_name, int line_number,
+        const char *expr_string)
+{
+    if (v)
+        return;
+
+    if (!file_name)
+        file_name = "NULL FILENAME";
+    if (!expr_string)
+        expr_string = "NULL EXPR_STRING";
+
+    printk("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string,
+            file_name, line_number);
+
+#ifdef BH_TEST
+    longjmp(bh_test_jb, 1);
+#endif
+
+    abort();
+}
+
+void bh_debug_internal(const char *file_name, int line_number, const char *fmt,
+        ...)
+{
+#ifndef JEFF_TEST_VERIFIER
+    va_list args;
+
+    va_start(args, fmt);
+    bh_assert(file_name);
+
+    printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number);
+    vprintf(fmt, args);
+
+    va_end(args);
+    printf("\n");
+#endif
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_definition.c 
b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_definition.c
new file mode 100755
index 0000000..0c9d3fc
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_definition.c
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_definition.h"
+#include "bh_platform.h"
+
+int bh_return(int ret)
+{
+    return ret;
+}
+
+#define RSIZE_MAX 0x7FFFFFFF
+int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n)
+{
+    char *dest = (char*) s1;
+    char *src = (char*) s2;
+    if (n == 0) {
+        return 0;
+    }
+
+    if (s1 == NULL || s1max > RSIZE_MAX) {
+        return -1;
+    }
+    if (s2 == NULL || n > s1max) {
+        memset(dest, 0, s1max);
+        return -1;
+    }
+    memcpy(dest, src, n);
+    return 0;
+}
+
+int b_strcat_s(char * s1, size_t s1max, const char * s2)
+{
+    if (NULL
+            == s1|| NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1) || 
s1max > RSIZE_MAX) {
+        return -1;
+    }
+
+    strcat(s1, s2);
+
+    return 0;
+}
+
+int b_strcpy_s(char * s1, size_t s1max, const char * s2)
+{
+    if (NULL
+            == s1|| NULL == s2 || s1max < (strlen(s2) + 1) || s1max > 
RSIZE_MAX) {
+        return -1;
+    }
+
+    strcpy(s1, s2);
+
+    return 0;
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_math.c 
b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_math.c
new file mode 100755
index 0000000..a279470
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_math.c
@@ -0,0 +1,585 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2004 David Schultz <das@xxxxxxxxxxx>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include "bh_platform.h"
+
+#define __FDLIBM_STDC__
+
+typedef uint32_t u_int32_t;
+typedef uint64_t u_int64_t;
+
+typedef union u32double_tag {
+    int *pint;
+    double *pdouble;
+} U32DOUBLE;
+
+static inline int *
+pdouble2pint(double *pdouble)
+{
+    U32DOUBLE u;
+    u.pdouble = pdouble;
+    return u.pint;
+}
+
+typedef union
+{
+    double value;
+    struct
+    {
+        u_int32_t lsw;
+        u_int32_t msw;
+    } parts;
+    struct
+    {
+        u_int64_t w;
+    } xparts;
+} ieee_double_shape_type_little;
+
+typedef union
+{
+    double value;
+    struct
+    {
+        u_int32_t msw;
+        u_int32_t lsw;
+    } parts;
+    struct
+    {
+        u_int64_t w;
+    } xparts;
+} ieee_double_shape_type_big;
+
+typedef union {
+    double     d;
+    struct {
+        unsigned int   manl    :32;
+        unsigned int   manh    :20;
+        unsigned int   exp     :11;
+        unsigned int   sign    :1;
+    } bits;
+} IEEEd2bits_L;
+
+typedef union {
+    double     d;
+    struct {
+        unsigned int   sign    :1;
+        unsigned int   exp     :11;
+        unsigned int   manh    :20;
+        unsigned int   manl    :32;
+    } bits;
+} IEEEd2bits_B;
+
+static union {
+    int a;
+    char b;
+} __ue = { .a = 1 };
+
+#define is_little_endian() (__ue.b == 1)
+
+#define __HIL(x) *(1+pdouble2pint(&x))
+#define __LOL(x) *(pdouble2pint(&x))
+#define __HIB(x) *(int*)&x
+#define __LOB(x) *(1+(int*)&x)
+
+/* Get two 32 bit ints from a double.  */
+
+#define EXTRACT_WORDS_L(ix0,ix1,d)                             \
+        do {                                                           \
+            ieee_double_shape_type_little ew_u;                                
\
+            ew_u.value = (d);                                          \
+            (ix0) = ew_u.parts.msw;                                    \
+            (ix1) = ew_u.parts.lsw;                                    \
+        } while (0)
+
+/* Set a double from two 32 bit ints.  */
+
+#define INSERT_WORDS_L(d,ix0,ix1)                              \
+        do {                                                           \
+            ieee_double_shape_type_little iw_u;                                
\
+            iw_u.parts.msw = (ix0);                                    \
+            iw_u.parts.lsw = (ix1);                                    \
+            (d) = iw_u.value;                                          \
+        } while (0)
+
+/* Get two 32 bit ints from a double.  */
+
+#define EXTRACT_WORDS_B(ix0,ix1,d)                             \
+        do {                                                           \
+            ieee_double_shape_type_big ew_u;                           \
+            ew_u.value = (d);                                          \
+            (ix0) = ew_u.parts.msw;                                    \
+            (ix1) = ew_u.parts.lsw;                                    \
+        } while (0)
+
+/* Set a double from two 32 bit ints.  */
+
+#define INSERT_WORDS_B(d,ix0,ix1)                              \
+        do {                                                           \
+            ieee_double_shape_type_big iw_u;                           \
+            iw_u.parts.msw = (ix0);                                    \
+            iw_u.parts.lsw = (ix1);                                    \
+            (d) = iw_u.value;                                          \
+        } while (0)
+
+/* Get the more significant 32 bit int from a double.  */
+#define GET_HIGH_WORD_L(i,d)                                   \
+        do {                                                           \
+            ieee_double_shape_type_little gh_u;                                
\
+            gh_u.value = (d);                                          \
+            (i) = gh_u.parts.msw;                                              
\
+        } while (0)
+
+/* Get the more significant 32 bit int from a double.  */
+#define GET_HIGH_WORD_B(i,d)                                   \
+        do {                                                           \
+            ieee_double_shape_type_big gh_u;                           \
+            gh_u.value = (d);                                          \
+            (i) = gh_u.parts.msw;                                              
\
+        } while (0)
+
+/* Set the more significant 32 bits of a double from an int.  */
+#define SET_HIGH_WORD_L(d,v)                                   \
+        do {                                                           \
+            ieee_double_shape_type_little sh_u;                                
\
+            sh_u.value = (d);                                          \
+            sh_u.parts.msw = (v);                                              
\
+            (d) = sh_u.value;                                          \
+        } while (0)
+
+/* Set the more significant 32 bits of a double from an int.  */
+#define SET_HIGH_WORD_B(d,v)                                   \
+        do {                                                           \
+            ieee_double_shape_type_big sh_u;                           \
+            sh_u.value = (d);                                          \
+            sh_u.parts.msw = (v);                                              
\
+            (d) = sh_u.value;                                          \
+        } while (0)
+
+/* Macro wrappers.  */
+#define EXTRACT_WORDS(ix0,ix1,d) do {   \
+    if (is_little_endian())             \
+        EXTRACT_WORDS_L(ix0,ix1,d);     \
+    else                                \
+        EXTRACT_WORDS_B(ix0,ix1,d);     \
+} while (0)
+
+#define INSERT_WORDS(d,ix0,ix1) do {    \
+    if (is_little_endian())             \
+       INSERT_WORDS_L(d,ix0,ix1);       \
+    else                                \
+        INSERT_WORDS_B(d,ix0,ix1);      \
+} while (0)
+
+#define GET_HIGH_WORD(i,d)              \
+    do {                                \
+        if (is_little_endian())         \
+        GET_HIGH_WORD_L(i,d);           \
+        else                            \
+        GET_HIGH_WORD_B(i,d);           \
+    } while (0)
+
+#define SET_HIGH_WORD(d,v)              \
+    do {                                \
+        if (is_little_endian())         \
+        SET_HIGH_WORD_L(d,v);           \
+        else                            \
+        SET_HIGH_WORD_B(d,v);           \
+    } while (0)
+
+#define __HI(x) (is_little_endian() ? __HIL(x) : __HIB(x))
+
+#define __LO(x) (is_little_endian() ? __LOL(x) : __LOB(x))
+
+/*
+ * Attempt to get strict C99 semantics for assignment with non-C99 compilers.
+ */
+#if FLT_EVAL_METHOD == 0 || __GNUC__ == 0
+#define        STRICT_ASSIGN(type, lval, rval) ((lval) = (rval))
+#else
+#define        STRICT_ASSIGN(type, lval, rval) do {    \
+        volatile type __lval;                  \
+        \
+        if (sizeof(type) >= sizeof(long double))       \
+        (lval) = (rval);               \
+        else {                                 \
+            __lval = (rval);           \
+            (lval) = __lval;           \
+        }                                      \
+} while (0)
+#endif
+
+#ifdef __FDLIBM_STDC__
+static const double huge = 1.0e300;
+#else
+static double huge = 1.0e300;
+#endif
+
+#ifdef __STDC__
+static const double
+#else
+static double
+#endif
+tiny  = 1.0e-300;
+
+#ifdef __STDC__
+static const double
+#else
+static double
+#endif
+one=  1.00000000000000000000e+00; /* 0x3FF00000, 0x00000000 */
+
+#ifdef __STDC__
+static const double
+#else
+static double
+#endif
+TWO52[2]={
+        4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
+        -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */
+};
+
+static double freebsd_sqrt(double x);
+static double freebsd_floor(double x);
+static double freebsd_ceil(double x);
+static double freebsd_fabs(double x);
+static double freebsd_rint(double x);
+static int freebsd_isnan(double x);
+
+static double freebsd_sqrt(double x)           /* wrapper sqrt */
+{
+    double z;
+    int32_t sign = (int)0x80000000;
+    int32_t ix0,s0,q,m,t,i;
+    u_int32_t r,t1,s1,ix1,q1;
+
+    EXTRACT_WORDS(ix0,ix1,x);
+
+    /* take care of Inf and NaN */
+    if((ix0&0x7ff00000)==0x7ff00000) {
+        return x*x+x;          /* sqrt(NaN)=NaN, sqrt(+inf)=+inf
+                                          sqrt(-inf)=sNaN */
+    }
+    /* take care of zero */
+    if(ix0<=0) {
+        if(((ix0&(~sign))|ix1)==0) return x;/* sqrt(+-0) = +-0 */
+        else if(ix0<0)
+            return (x-x)/(x-x);                /* sqrt(-ve) = sNaN */
+    }
+    /* normalize x */
+    m = (ix0>>20);
+    if(m==0) {                         /* subnormal x */
+        while(ix0==0) {
+            m -= 21;
+            ix0 |= (ix1>>11); ix1 <<= 21;
+        }
+        for(i=0;(ix0&0x00100000)==0;i++) ix0<<=1;
+        m -= i-1;
+        ix0 |= (ix1>>(32-i));
+        ix1 <<= i;
+    }
+    m -= 1023; /* unbias exponent */
+    ix0 = (ix0&0x000fffff)|0x00100000;
+    if(m&1){   /* odd m, double x to make it even */
+        ix0 += ix0 + ((ix1&sign)>>31);
+        ix1 += ix1;
+    }
+    m >>= 1;   /* m = [m/2] */
+
+    /* generate sqrt(x) bit by bit */
+    ix0 += ix0 + ((ix1&sign)>>31);
+    ix1 += ix1;
+    q = q1 = s0 = s1 = 0;      /* [q,q1] = sqrt(x) */
+    r = 0x00200000;            /* r = moving bit from right to left */
+
+    while(r!=0) {
+        t = s0+r;
+        if(t<=ix0) {
+            s0   = t+r;
+            ix0 -= t;
+            q   += r;
+        }
+        ix0 += ix0 + ((ix1&sign)>>31);
+        ix1 += ix1;
+        r>>=1;
+    }
+
+    r = sign;
+    while(r!=0) {
+        t1 = s1+r;
+        t  = s0;
+        if((t<ix0)||((t==ix0)&&(t1<=ix1))) {
+            s1  = t1+r;
+            if(((t1&sign)==sign)&&(s1&sign)==0) s0 += 1;
+            ix0 -= t;
+            if (ix1 < t1) ix0 -= 1;
+            ix1 -= t1;
+            q1  += r;
+        }
+        ix0 += ix0 + ((ix1&sign)>>31);
+        ix1 += ix1;
+        r>>=1;
+    }
+
+    /* use floating add to find out rounding direction */
+    if((ix0|ix1)!=0) {
+        z = one-tiny; /* trigger inexact flag */
+        if (z>=one) {
+            z = one+tiny;
+            if (q1==(u_int32_t)0xffffffff) { q1=0; q += 1;}
+            else if (z>one) {
+                if (q1==(u_int32_t)0xfffffffe) q+=1;
+                q1+=2;
+            } else
+                q1 += (q1&1);
+        }
+    }
+    ix0 = (q>>1)+0x3fe00000;
+    ix1 =  q1>>1;
+    if ((q&1)==1) ix1 |= sign;
+    ix0 += (m <<20);
+
+    INSERT_WORDS(z,ix0,ix1);
+
+    return z;
+}
+
+static double freebsd_floor(double x)
+{
+    int32_t i0,i1,j0;
+    u_int32_t i,j;
+
+    EXTRACT_WORDS(i0,i1,x);
+
+    j0 = ((i0>>20)&0x7ff)-0x3ff;
+    if(j0<20) {
+        if(j0<0) {     /* raise inexact if x != 0 */
+            if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
+                if(i0>=0) {i0=i1=0;}
+                else if(((i0&0x7fffffff)|i1)!=0)
+                { i0=0xbff00000;i1=0;}
+            }
+        } else {
+            i = (0x000fffff)>>j0;
+            if(((i0&i)|i1)==0) return x; /* x is integral */
+            if(huge+x>0.0) {   /* raise inexact flag */
+                if(i0<0) i0 += (0x00100000)>>j0;
+                i0 &= (~i); i1=0;
+            }
+        }
+    } else if (j0>51) {
+        if(j0==0x400) return x+x;      /* inf or NaN */
+        else return x;         /* x is integral */
+    } else {
+        i = ((u_int32_t)(0xffffffff))>>(j0-20);
+        if((i1&i)==0) return x;        /* x is integral */
+        if(huge+x>0.0) {               /* raise inexact flag */
+            if(i0<0) {
+                if(j0==20) i0+=1;
+                else {
+                    j = i1+(1<<(52-j0));
+                    if(j<i1) i0 +=1 ;  /* got a carry */
+                    i1=j;
+                }
+            }
+            i1 &= (~i);
+        }
+    }
+
+    INSERT_WORDS(x,i0,i1);
+
+    return x;
+}
+
+static double freebsd_ceil(double x)
+{
+    int32_t i0,i1,j0;
+    u_int32_t i,j;
+    EXTRACT_WORDS(i0,i1,x);
+    j0 = ((i0>>20)&0x7ff)-0x3ff;
+    if(j0<20) {
+        if(j0<0) {     /* raise inexact if x != 0 */
+            if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
+                if(i0<0) {i0=0x80000000;i1=0;}
+                else if((i0|i1)!=0) { i0=0x3ff00000;i1=0;}
+            }
+        } else {
+            i = (0x000fffff)>>j0;
+            if(((i0&i)|i1)==0) return x; /* x is integral */
+            if(huge+x>0.0) {   /* raise inexact flag */
+                if(i0>0) i0 += (0x00100000)>>j0;
+                i0 &= (~i); i1=0;
+            }
+        }
+    } else if (j0>51) {
+        if(j0==0x400) return x+x;      /* inf or NaN */
+        else return x;         /* x is integral */
+    } else {
+        i = ((u_int32_t)(0xffffffff))>>(j0-20);
+        if((i1&i)==0) return x;        /* x is integral */
+        if(huge+x>0.0) {               /* raise inexact flag */
+            if(i0>0) {
+                if(j0==20) i0+=1;
+                else {
+                    j = i1 + (1<<(52-j0));
+                    if(j<i1) i0+=1;    /* got a carry */
+                    i1 = j;
+                }
+            }
+            i1 &= (~i);
+        }
+    }
+    INSERT_WORDS(x,i0,i1);
+    return x;
+}
+
+static double freebsd_rint(double x)
+{
+    int32_t i0,j0,sx;
+    u_int32_t i,i1;
+    double w,t;
+    EXTRACT_WORDS(i0,i1,x);
+    sx = (i0>>31)&1;
+    j0 = ((i0>>20)&0x7ff)-0x3ff;
+    if(j0<20) {
+        if(j0<0) {
+            if(((i0&0x7fffffff)|i1)==0) return x;
+            i1 |= (i0&0x0fffff);
+            i0 &= 0xfffe0000;
+            i0 |= ((i1|-i1)>>12)&0x80000;
+            SET_HIGH_WORD(x,i0);
+            STRICT_ASSIGN(double,w,TWO52[sx]+x);
+            t =  w-TWO52[sx];
+            GET_HIGH_WORD(i0,t);
+            SET_HIGH_WORD(t,(i0&0x7fffffff)|(sx<<31));
+            return t;
+        } else {
+            i = (0x000fffff)>>j0;
+            if(((i0&i)|i1)==0) return x; /* x is integral */
+            i>>=1;
+            if(((i0&i)|i1)!=0) {
+                /*
+                 * Some bit is set after the 0.5 bit.  To avoid the
+                 * possibility of errors from double rounding in
+                 * w = TWO52[sx]+x, adjust the 0.25 bit to a lower
+                 * guard bit.  We do this for all j0<=51.  The
+                 * adjustment is trickiest for j0==18 and j0==19
+                 * since then it spans the word boundary.
+                 */
+                if(j0==19) i1 = 0x40000000; else
+                    if(j0==18) i1 = 0x80000000; else
+                        i0 = (i0&(~i))|((0x20000)>>j0);
+            }
+        }
+    } else if (j0>51) {
+        if(j0==0x400) return x+x;      /* inf or NaN */
+        else return x;         /* x is integral */
+    } else {
+        i = ((u_int32_t)(0xffffffff))>>(j0-20);
+        if((i1&i)==0) return x;        /* x is integral */
+        i>>=1;
+        if((i1&i)!=0) i1 = (i1&(~i))|((0x40000000)>>(j0-20));
+    }
+    INSERT_WORDS(x,i0,i1);
+    STRICT_ASSIGN(double,w,TWO52[sx]+x);
+    return w-TWO52[sx];
+}
+
+static int freebsd_isnan(double d)
+{
+    if (is_little_endian()) {
+        IEEEd2bits_L u;
+        u.d = d;
+        return (u.bits.exp == 2047 && (u.bits.manl != 0 || u.bits.manh != 0));
+    }
+    else {
+        IEEEd2bits_B u;
+        u.d = d;
+        return (u.bits.exp == 2047 && (u.bits.manl != 0 || u.bits.manh != 0));
+    }
+}
+
+static double freebsd_fabs(double x)
+{
+    u_int32_t high;
+    GET_HIGH_WORD(high,x);
+    SET_HIGH_WORD(x,high&0x7fffffff);
+    return x;
+}
+
+double sqrt(double x)
+{
+    return freebsd_sqrt(x);
+}
+
+double floor(double x)
+{
+    return freebsd_floor(x);
+}
+
+double ceil(double x)
+{
+    return freebsd_ceil(x);
+}
+
+double fmin(double x, double y)
+{
+    return x < y ? x : y;
+}
+
+double fmax(double x, double y)
+{
+    return x > y ? x : y;
+}
+
+double rint(double x)
+{
+    return freebsd_rint(x);
+}
+
+double fabs(double x)
+{
+    return freebsd_fabs(x);
+}
+
+int isnan(double x)
+{
+    return freebsd_isnan(x);
+}
+
+double trunc(double x)
+{
+    return (x > 0) ? freebsd_floor(x) : freebsd_ceil(x);
+}
+
+int signbit(double x)
+{
+    return ((__HI(x) & 0x80000000) >> 31);
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_platform.c 
b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_platform.c
new file mode 100755
index 0000000..7c4263b
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_platform.c
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include <stdlib.h>
+#include <string.h>
+
+char *bh_strdup(const char *s)
+{
+    char *s1 = NULL;
+    if (s && (s1 = bh_malloc(strlen(s) + 1)))
+        memcpy(s1, s, strlen(s) + 1);
+    return s1;
+}
+
+#ifndef CONFIG_AEE_ENABLE
+static int
+_stdout_hook_iwasm(int c)
+{
+    printk("%c", (char)c);
+    return 1;
+}
+
+int bh_platform_init()
+{
+    extern void __stdout_hook_install(int (*hook)(int));
+    /* Enable printf() in Zephyr */
+    __stdout_hook_install(_stdout_hook_iwasm);
+    return 0;
+}
+#else
+int bh_platform_init()
+{
+    return 0;
+}
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_platform.h 
b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_platform.h
new file mode 100755
index 0000000..2602bee
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_platform.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _BH_PLATFORM_H
+#define _BH_PLATFORM_H
+
+#include "bh_config.h"
+#include "bh_types.h"
+#include "bh_memory.h"
+#include <autoconf.h>
+#include <zephyr.h>
+#include <kernel.h>
+#include <misc/printk.h>
+#include <inttypes.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <limits.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#ifndef CONFIG_NET_BUF_USER_DATA_SIZE
+#define CONFIG_NET_BUF_USER_DATA_SIZE 0
+#endif
+#include <net/net_pkt.h>
+#include <net/net_if.h>
+#include <net/net_core.h>
+#include <net/net_context.h>
+
+/* Platform name */
+#define BH_PLATFORM "Zephyr"
+
+#define BH_APPLET_PRESERVED_STACK_SIZE (2 * BH_KB)
+
+/* Default thread priority */
+#define BH_THREAD_DEFAULT_PRIORITY 7
+
+#define BH_ROUTINE_MODIFIER
+
+/* Invalid thread tid */
+#define INVALID_THREAD_ID NULL
+
+#define BH_WAIT_FOREVER K_FOREVER
+
+typedef uint64_t uint64;
+typedef int64_t int64;
+
+typedef struct k_thread korp_thread;
+typedef korp_thread *korp_tid;
+typedef struct k_mutex korp_mutex;
+typedef struct k_sem korp_sem;
+
+#define wa_malloc bh_malloc
+#define wa_free bh_free
+#define wa_strdup bh_strdup
+
+struct bh_thread_wait_node;
+typedef struct bh_thread_wait_node *bh_thread_wait_list;
+typedef struct korp_cond {
+    struct k_mutex wait_list_lock;
+    bh_thread_wait_list thread_wait_list;
+} korp_cond;
+
+typedef void* (*thread_start_routine_t)(void*);
+
+#define wa_malloc bh_malloc
+#define wa_free bh_free
+
+/* Unit test framework is based on C++, where the declaration of
+ snprintf is different.  */
+#ifndef __cplusplus
+int snprintf(char *buffer, size_t count, const char *format, ...);
+#endif
+
+#ifndef NULL
+#define NULL ((void*)0)
+#endif
+
+/**
+ * Return the offset of the given field in the given type.
+ *
+ * @param Type the type containing the filed
+ * @param field the field in the type
+ *
+ * @return the offset of field in Type
+ */
+#ifndef offsetof
+#define offsetof(Type, field) ((size_t)(&((Type *)0)->field))
+#endif
+
+#define bh_assert(x) \
+    do { \
+        if (!(x)) { \
+            printk("bh_assert(%s, %d)\n", __func__, __LINE__);\
+        } \
+    } while (0)
+
+int b_memcpy_s(void * s1, unsigned int s1max, const void * s2,
+               unsigned int n);
+int b_strcat_s(char * s1, size_t s1max, const char * s2);
+int b_strcpy_s(char * s1, size_t s1max, const char * s2);
+
+/* math functions */
+double sqrt(double x);
+double floor(double x);
+double ceil(double x);
+double fmin(double x, double y);
+double fmax(double x, double y);
+double rint(double x);
+double fabs(double x);
+double trunc(double x);
+int signbit(double x);
+int isnan(double x);
+
+int bh_platform_init();
+
+#endif
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_platform_log.c 
b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_platform_log.c
new file mode 100755
index 0000000..c418cd8
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_platform_log.c
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_platform.h"
+#include <stdio.h>
+
+struct out_context {
+    int count;
+};
+
+typedef int (*out_func_t)(int c, void *ctx);
+
+extern void *__printk_get_hook(void);
+static int (*_char_out)(int) = NULL;
+
+static int char_out(int c, struct out_context *ctx)
+{
+    ctx->count++;
+    if (_char_out == NULL) {
+        _char_out = __printk_get_hook();
+    }
+    return _char_out(c);
+}
+
+static int bh_vprintk(const char *fmt, va_list ap)
+{
+    struct out_context ctx = { 0 };
+    _vprintk((out_func_t) char_out, &ctx, fmt, ap);
+    return ctx.count;
+}
+
+void bh_log_emit(const char *fmt, va_list ap)
+{
+    bh_vprintk(fmt, ap);
+}
+
+int bh_fprintf(FILE *stream, const char *fmt, ...)
+{
+    (void) stream;
+    va_list ap;
+    int ret;
+
+    va_start(ap, fmt);
+    ret = bh_vprintk(fmt, ap);
+    va_end(ap);
+
+    return ret;
+}
+
+int bh_fflush(void *stream)
+{
+    (void) stream;
+    return 0;
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_thread.c 
b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_thread.c
new file mode 100755
index 0000000..99dd1a2
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_thread.c
@@ -0,0 +1,537 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_thread.h"
+#include "bh_assert.h"
+#include "bh_log.h"
+#include "bh_memory.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct bh_thread_wait_node {
+    struct k_sem sem;
+    bh_thread_wait_list next;
+} bh_thread_wait_node;
+
+typedef struct bh_thread_data {
+    /* Next thread data */
+    struct bh_thread_data *next;
+    /* Zephyr thread handle */
+    korp_tid tid;
+    /* Jeff thread local root */
+    void *tlr;
+    /* Lock for waiting list */
+    struct k_mutex wait_list_lock;
+    /* Waiting list of other threads who are joining this thread */
+    bh_thread_wait_list thread_wait_list;
+    /* Thread stack size */
+    unsigned stack_size;
+    /* Thread stack */
+    char stack[1];
+} bh_thread_data;
+
+typedef struct bh_thread_obj {
+    struct k_thread thread;
+    /* Whether the thread is terminated and this thread object is to
+     be freed in the future. */
+    bool to_be_freed;
+    struct bh_thread_obj *next;
+} bh_thread_obj;
+
+static bool is_thread_sys_inited = false;
+
+/* Thread data of supervisor thread */
+static bh_thread_data supervisor_thread_data;
+
+/* Lock for thread data list */
+static struct k_mutex thread_data_lock;
+
+/* Thread data list */
+static bh_thread_data *thread_data_list = NULL;
+
+/* Lock for thread object list */
+static struct k_mutex thread_obj_lock;
+
+/* Thread object list */
+static bh_thread_obj *thread_obj_list = NULL;
+
+static void thread_data_list_add(bh_thread_data *thread_data)
+{
+    k_mutex_lock(&thread_data_lock, K_FOREVER);
+    if (!thread_data_list)
+        thread_data_list = thread_data;
+    else {
+        /* If already in list, just return */
+        bh_thread_data *p = thread_data_list;
+        while (p) {
+            if (p == thread_data) {
+                k_mutex_unlock(&thread_data_lock);
+                return;
+            }
+            p = p->next;
+        }
+
+        /* Set as head of list */
+        thread_data->next = thread_data_list;
+        thread_data_list = thread_data;
+    }
+    k_mutex_unlock(&thread_data_lock);
+}
+
+static void thread_data_list_remove(bh_thread_data *thread_data)
+{
+    k_mutex_lock(&thread_data_lock, K_FOREVER);
+    if (thread_data_list) {
+        if (thread_data_list == thread_data)
+            thread_data_list = thread_data_list->next;
+        else {
+            /* Search and remove it from list */
+            bh_thread_data *p = thread_data_list;
+            while (p && p->next != thread_data)
+                p = p->next;
+            if (p && p->next == thread_data)
+                p->next = p->next->next;
+        }
+    }
+    k_mutex_unlock(&thread_data_lock);
+}
+
+static bh_thread_data *
+thread_data_list_lookup(k_tid_t tid)
+{
+    k_mutex_lock(&thread_data_lock, K_FOREVER);
+    if (thread_data_list) {
+        bh_thread_data *p = thread_data_list;
+        while (p) {
+            if (p->tid == tid) {
+                /* Found */
+                k_mutex_unlock(&thread_data_lock);
+                return p;
+            }
+            p = p->next;
+        }
+    }
+    k_mutex_unlock(&thread_data_lock);
+    return NULL;
+}
+
+static void thread_obj_list_add(bh_thread_obj *thread_obj)
+{
+    k_mutex_lock(&thread_obj_lock, K_FOREVER);
+    if (!thread_obj_list)
+        thread_obj_list = thread_obj;
+    else {
+        /* Set as head of list */
+        thread_obj->next = thread_obj_list;
+        thread_obj_list = thread_obj;
+    }
+    k_mutex_unlock(&thread_obj_lock);
+}
+
+static void thread_obj_list_reclaim()
+{
+    bh_thread_obj *p, *p_prev;
+    k_mutex_lock(&thread_obj_lock, K_FOREVER);
+    p_prev = NULL;
+    p = thread_obj_list;
+    while (p) {
+        if (p->to_be_freed) {
+            if (p_prev == NULL) { /* p is the head of list */
+                thread_obj_list = p->next;
+                bh_free(p);
+                p = thread_obj_list;
+            } else { /* p is not the head of list */
+                p_prev->next = p->next;
+                bh_free(p);
+                p = p_prev->next;
+            }
+        } else {
+            p_prev = p;
+            p = p->next;
+        }
+    }
+    k_mutex_unlock(&thread_obj_lock);
+}
+
+int _vm_thread_sys_init()
+{
+    if (is_thread_sys_inited)
+        return BHT_OK;
+
+    k_mutex_init(&thread_data_lock);
+    k_mutex_init(&thread_obj_lock);
+
+    /* Initialize supervisor thread data */
+    memset(&supervisor_thread_data, 0, sizeof(supervisor_thread_data));
+    supervisor_thread_data.tid = k_current_get();
+    /* Set as head of thread data list */
+    thread_data_list = &supervisor_thread_data;
+
+    is_thread_sys_inited = true;
+    return BHT_OK;
+}
+
+void vm_thread_sys_destroy(void)
+{
+    if (is_thread_sys_inited) {
+        is_thread_sys_inited = false;
+    }
+}
+
+static bh_thread_data *
+thread_data_current()
+{
+    k_tid_t tid = k_current_get();
+    return thread_data_list_lookup(tid);
+}
+
+static void vm_thread_cleanup(void)
+{
+    bh_thread_data *thread_data = thread_data_current();
+
+    bh_assert(thread_data != NULL);
+    k_mutex_lock(&thread_data->wait_list_lock, K_FOREVER);
+    if (thread_data->thread_wait_list) {
+        /* Signal each joining thread */
+        bh_thread_wait_list head = thread_data->thread_wait_list;
+        while (head) {
+            bh_thread_wait_list next = head->next;
+            k_sem_give(&head->sem);
+            bh_free(head);
+            head = next;
+        }
+        thread_data->thread_wait_list = NULL;
+    }
+    k_mutex_unlock(&thread_data->wait_list_lock);
+
+    thread_data_list_remove(thread_data);
+    /* Set flag to true for the next thread creating to
+     free the thread object */
+    ((bh_thread_obj*) thread_data->tid)->to_be_freed = true;
+    bh_free(thread_data);
+}
+
+static void vm_thread_wrapper(void *start, void *arg, void *thread_data)
+{
+    /* Set thread custom data */
+    ((bh_thread_data*) thread_data)->tid = k_current_get();
+    thread_data_list_add(thread_data);
+
+    ((thread_start_routine_t) start)(arg);
+    vm_thread_cleanup();
+}
+
+int _vm_thread_create(korp_tid *p_tid, thread_start_routine_t start, void *arg,
+        unsigned int stack_size)
+{
+    return _vm_thread_create_with_prio(p_tid, start, arg, stack_size,
+    BH_THREAD_DEFAULT_PRIORITY);
+}
+
+int _vm_thread_create_with_prio(korp_tid *p_tid, thread_start_routine_t start,
+        void *arg, unsigned int stack_size, int prio)
+{
+    korp_tid tid;
+    bh_thread_data *thread_data;
+    unsigned thread_data_size;
+
+    if (!p_tid || !stack_size)
+        return BHT_ERROR;
+
+    /* Free the thread objects of terminated threads */
+    thread_obj_list_reclaim();
+
+    /* Create and initialize thread object */
+    if (!(tid = bh_malloc(sizeof(bh_thread_obj))))
+        return BHT_ERROR;
+
+    memset(tid, 0, sizeof(bh_thread_obj));
+
+    /* Create and initialize thread data */
+    thread_data_size = offsetof(bh_thread_data, stack) + stack_size;
+    if (!(thread_data = bh_malloc(thread_data_size))) {
+        bh_free(tid);
+        return BHT_ERROR;
+    }
+
+    memset(thread_data, 0, thread_data_size);
+    k_mutex_init(&thread_data->wait_list_lock);
+    thread_data->stack_size = stack_size;
+    thread_data->tid = tid;
+
+    /* Create the thread */
+    if (!((tid = k_thread_create(tid, (k_thread_stack_t *) thread_data->stack,
+            stack_size, vm_thread_wrapper, start, arg, thread_data, prio, 0,
+            K_NO_WAIT)))) {
+        bh_free(tid);
+        bh_free(thread_data);
+        return BHT_ERROR;
+    }
+
+    bh_assert(tid == thread_data->tid);
+
+    /* Set thread custom data */
+    thread_data_list_add(thread_data);
+    thread_obj_list_add((bh_thread_obj*) tid);
+    *p_tid = tid;
+    return BHT_OK;
+}
+
+korp_tid _vm_self_thread()
+{
+    return (korp_tid) k_current_get();
+}
+
+void vm_thread_exit(void * code)
+{
+    (void) code;
+    korp_tid self = vm_self_thread();
+    vm_thread_cleanup();
+    k_thread_abort((k_tid_t) self);
+}
+
+int _vm_thread_cancel(korp_tid thread)
+{
+    k_thread_abort((k_tid_t) thread);
+    return 0;
+}
+
+int _vm_thread_join(korp_tid thread, void **value_ptr, int mills)
+{
+    (void) value_ptr;
+    bh_thread_data *thread_data;
+    bh_thread_wait_node *node;
+
+    /* Create wait node and append it to wait list */
+    if (!(node = bh_malloc(sizeof(bh_thread_wait_node))))
+        return BHT_ERROR;
+
+    k_sem_init(&node->sem, 0, 1);
+    node->next = NULL;
+
+    /* Get thread data */
+    thread_data = thread_data_list_lookup(thread);
+    bh_assert(thread_data != NULL);
+
+    k_mutex_lock(&thread_data->wait_list_lock, K_FOREVER);
+    if (!thread_data->thread_wait_list)
+        thread_data->thread_wait_list = node;
+    else {
+        /* Add to end of waiting list */
+        bh_thread_wait_node *p = thread_data->thread_wait_list;
+        while (p->next)
+            p = p->next;
+        p->next = node;
+    }
+    k_mutex_unlock(&thread_data->wait_list_lock);
+
+    /* Wait the sem */
+    k_sem_take(&node->sem, mills);
+
+    /* Wait some time for the thread to be actually terminated */
+    k_sleep(100);
+
+    return BHT_OK;
+}
+
+int _vm_thread_detach(korp_tid thread)
+{
+    (void) thread;
+    return BHT_OK;
+}
+
+void *_vm_tls_get(unsigned idx)
+{
+    (void) idx;
+    bh_thread_data *thread_data;
+
+    bh_assert(idx == 0);
+    thread_data = thread_data_current();
+
+    return thread_data ? thread_data->tlr : NULL;
+}
+
+int _vm_tls_put(unsigned idx, void * tls)
+{
+    bh_thread_data *thread_data;
+
+    (void) idx;
+    bh_assert(idx == 0);
+    thread_data = thread_data_current();
+    bh_assert(thread_data != NULL);
+
+    thread_data->tlr = tls;
+    return BHT_OK;
+}
+
+int _vm_mutex_init(korp_mutex *mutex)
+{
+    (void) mutex;
+    k_mutex_init(mutex);
+    return BHT_OK;
+}
+
+int _vm_recursive_mutex_init(korp_mutex *mutex)
+{
+    k_mutex_init(mutex);
+    return BHT_OK;
+}
+
+int _vm_mutex_destroy(korp_mutex *mutex)
+{
+    (void) mutex;
+    return BHT_OK;
+}
+
+void vm_mutex_lock(korp_mutex *mutex)
+{
+    k_mutex_lock(mutex, K_FOREVER);
+}
+
+int vm_mutex_trylock(korp_mutex *mutex)
+{
+    return k_mutex_lock(mutex, K_NO_WAIT);
+}
+
+void vm_mutex_unlock(korp_mutex *mutex)
+{
+    k_mutex_unlock(mutex);
+}
+
+int _vm_sem_init(korp_sem* sem, unsigned int c)
+{
+    k_sem_init(sem, 0, c);
+    return BHT_OK;
+}
+
+int _vm_sem_destroy(korp_sem *sem)
+{
+    (void) sem;
+    return BHT_OK;
+}
+
+int _vm_sem_wait(korp_sem *sem)
+{
+    return k_sem_take(sem, K_FOREVER);
+}
+
+int _vm_sem_reltimedwait(korp_sem *sem, int mills)
+{
+    return k_sem_take(sem, mills);
+}
+
+int _vm_sem_post(korp_sem *sem)
+{
+    k_sem_give(sem);
+    return BHT_OK;
+}
+
+int _vm_cond_init(korp_cond *cond)
+{
+    k_mutex_init(&cond->wait_list_lock);
+    cond->thread_wait_list = NULL;
+    return BHT_OK;
+}
+
+int _vm_cond_destroy(korp_cond *cond)
+{
+    (void) cond;
+    return BHT_OK;
+}
+
+static int _vm_cond_wait_internal(korp_cond *cond, korp_mutex *mutex,
+        bool timed, int mills)
+{
+    bh_thread_wait_node *node;
+
+    /* Create wait node and append it to wait list */
+    if (!(node = bh_malloc(sizeof(bh_thread_wait_node))))
+        return BHT_ERROR;
+
+    k_sem_init(&node->sem, 0, 1);
+    node->next = NULL;
+
+    k_mutex_lock(&cond->wait_list_lock, K_FOREVER);
+    if (!cond->thread_wait_list)
+        cond->thread_wait_list = node;
+    else {
+        /* Add to end of wait list */
+        bh_thread_wait_node *p = cond->thread_wait_list;
+        while (p->next)
+            p = p->next;
+        p->next = node;
+    }
+    k_mutex_unlock(&cond->wait_list_lock);
+
+    /* Unlock mutex, wait sem and lock mutex again */
+    k_mutex_unlock(mutex);
+    k_sem_take(&node->sem, timed ? mills : K_FOREVER);
+    k_mutex_lock(mutex, K_FOREVER);
+
+    /* Remove wait node from wait list */
+    k_mutex_lock(&cond->wait_list_lock, K_FOREVER);
+    if (cond->thread_wait_list == node)
+        cond->thread_wait_list = node->next;
+    else {
+        /* Remove from the wait list */
+        bh_thread_wait_node *p = cond->thread_wait_list;
+        while (p->next != node)
+            p = p->next;
+        p->next = node->next;
+    }
+    bh_free(node);
+    k_mutex_unlock(&cond->wait_list_lock);
+
+    return BHT_OK;
+}
+
+int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex)
+{
+    return _vm_cond_wait_internal(cond, mutex, false, 0);
+}
+
+int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills)
+{
+    return _vm_cond_wait_internal(cond, mutex, true, mills);
+}
+
+int _vm_cond_signal(korp_cond *cond)
+{
+    /* Signal the head wait node of wait list */
+    k_mutex_lock(&cond->wait_list_lock, K_FOREVER);
+    if (cond->thread_wait_list)
+        k_sem_give(&cond->thread_wait_list->sem);
+    k_mutex_unlock(&cond->wait_list_lock);
+
+    return BHT_OK;
+}
+
+int _vm_cond_broadcast(korp_cond *cond)
+{
+    /* Signal each wait node of wait list */
+    k_mutex_lock(&cond->wait_list_lock, K_FOREVER);
+    if (cond->thread_wait_list) {
+        bh_thread_wait_node *p = cond->thread_wait_list;
+        while (p) {
+            k_sem_give(&p->sem);
+            p = p->next;
+        }
+    }
+    k_mutex_unlock(&cond->wait_list_lock);
+
+    return BHT_OK;
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_time.c 
b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_time.c
new file mode 100755
index 0000000..9fe2bdb
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/bh_time.c
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_time.h"
+
+/*
+ * This function returns milliseconds per tick.
+ * @return milliseconds per tick.
+ */
+uint64 _bh_time_get_tick_millisecond()
+{
+    return k_uptime_get_32();
+}
+
+/*
+ * This function returns milliseconds after boot.
+ * @return milliseconds after boot.
+ */
+uint64 _bh_time_get_boot_millisecond()
+{
+    return k_uptime_get_32();
+}
+
+uint64 _bh_time_get_millisecond_from_1970()
+{
+    return k_uptime_get();
+}
+
+size_t _bh_time_strftime(char *str, size_t max, const char *format, int64 time)
+{
+    (void) format;
+    (void) time;
+    uint32 t = k_uptime_get_32();
+    int h, m, s;
+
+    t = t % (24 * 60 * 60);
+    h = t / (60 * 60);
+    t = t % (60 * 60);
+    m = t / 60;
+    s = t % 60;
+
+    return snprintf(str, max, "%02d:%02d:%02d", h, m, s);
+}
+
diff --git 
a/scriptsrcs/wamr/core/shared-lib/platform/zephyr/shared_platform.cmake 
b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/shared_platform.cmake
new file mode 100755
index 0000000..102ec9c
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/platform/zephyr/shared_platform.cmake
@@ -0,0 +1,24 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (PLATFORM_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${PLATFORM_SHARED_DIR})
+include_directories(${PLATFORM_SHARED_DIR}/../include)
+
+
+file (GLOB_RECURSE source_all ${PLATFORM_SHARED_DIR}/*.c)
+
+set (PLATFORM_SHARED_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/core/shared-lib/shared_lib.cmake 
b/scriptsrcs/wamr/core/shared-lib/shared_lib.cmake
new file mode 100755
index 0000000..7c13194
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/shared_lib.cmake
@@ -0,0 +1,17 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+include (${CMAKE_CURRENT_LIST_DIR}/utils/shared_utils.cmake)
+include (${CMAKE_CURRENT_LIST_DIR}/mem-alloc/mem_alloc.cmake)
+include (${CMAKE_CURRENT_LIST_DIR}/platform/${PLATFORM}/shared_platform.cmake)
diff --git a/scriptsrcs/wamr/core/shared-lib/utils/CMakeLists.txt 
b/scriptsrcs/wamr/core/shared-lib/utils/CMakeLists.txt
new file mode 100755
index 0000000..1f2e561
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/utils/CMakeLists.txt
@@ -0,0 +1,21 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+include_directories (. ../include ../platform/include ../platform/${PLATFORM} 
coap/er-coap coap/extension)
+
+
+file (GLOB_RECURSE source_all *.c )
+
+add_library (vmutilslib ${source_all})
+
diff --git a/scriptsrcs/wamr/core/shared-lib/utils/Makefile 
b/scriptsrcs/wamr/core/shared-lib/utils/Makefile
new file mode 100755
index 0000000..0a2104c
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/utils/Makefile
@@ -0,0 +1,16 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+obj-y += bh_list.o bh_log.o attr-container.o bh_queue.o
+obj-y += coap/
diff --git a/scriptsrcs/wamr/core/shared-lib/utils/bh_list.c 
b/scriptsrcs/wamr/core/shared-lib/utils/bh_list.c
new file mode 100755
index 0000000..0c15ff5
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/utils/bh_list.c
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_list.h"
+#include "bh_assert.h"
+
+#ifdef BH_DEBUG
+/**
+ * Test whehter a pointer value has exist in given list.
+ *
+ * @param list    pointer to list.
+ * @param elem    pointer to elem that will be inserted into list.
+ * @return        <code>true</code> if the pointer has been in the list;
+ *                <code>false</code> otherwise.
+ */
+BH_STATIC bool bh_list_is_elem_exist(bh_list *list, void *elem);
+#endif
+
+bh_list_status bh_list_init(bh_list *list)
+{
+    if (!list)
+        return BH_LIST_ERROR;
+
+    (list->head).next = NULL;
+    list->len = 0;
+    return BH_LIST_SUCCESS;
+}
+
+bh_list_status _bh_list_insert(bh_list *list, void *elem)
+{
+    bh_list_link *p = NULL;
+
+    if (!list || !elem)
+        return BH_LIST_ERROR;
+#ifdef BH_DEBUG
+    bh_assert (!bh_list_is_elem_exist(list, elem));
+#endif
+    p = (bh_list_link *) elem;
+    p->next = (list->head).next;
+    (list->head).next = p;
+    list->len++;
+    return BH_LIST_SUCCESS;
+}
+
+bh_list_status bh_list_remove(bh_list *list, void *elem)
+{
+    bh_list_link *cur = NULL;
+    bh_list_link *prev = NULL;
+
+    if (!list || !elem)
+        return BH_LIST_ERROR;
+
+    cur = (list->head).next;
+
+    while (cur) {
+        if (cur == elem) {
+            if (prev)
+                prev->next = cur->next;
+            else
+                (list->head).next = cur->next;
+
+            list->len--;
+            return BH_LIST_SUCCESS;
+        }
+
+        prev = cur;
+        cur = cur->next;
+    }
+
+    return BH_LIST_ERROR;
+}
+
+uint32 bh_list_length(bh_list *list)
+{
+    return (list ? list->len : 0);
+}
+
+void* bh_list_first_elem(bh_list *list)
+{
+    return (list ? (list->head).next : NULL);
+}
+
+void* bh_list_elem_next(void *node)
+{
+    return (node ? ((bh_list_link *) node)->next : NULL);
+}
+
+#ifdef BH_DEBUG
+BH_STATIC bool bh_list_is_elem_exist(bh_list *list, void *elem)
+{
+    bh_list_link *p = NULL;
+
+    if (!list || !elem) return false;
+
+    p = (list->head).next;
+    while (p && p != elem) p = p->next;
+
+    return (p != NULL);
+}
+#endif
+
diff --git a/scriptsrcs/wamr/core/shared-lib/utils/bh_log.c 
b/scriptsrcs/wamr/core/shared-lib/utils/bh_log.c
new file mode 100755
index 0000000..58591fb
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/utils/bh_log.c
@@ -0,0 +1,213 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @file   bh_log.c
+ * @date   Tue Nov  8 18:20:06 2011
+ *
+ * @brief Implementation of Beihai's log system.
+ */
+
+#include "bh_assert.h"
+#include "bh_time.h"
+#include "bh_thread.h"
+#include "bh_log.h"
+#include "bh_platform_log.h"
+
+/**
+ * The verbose level of the log system.  Only those verbose logs whose
+ * levels are less than or equal to this value are outputed.
+ */
+static int log_verbose_level;
+
+/**
+ * The lock for protecting the global output stream of logs.
+ */
+static korp_mutex log_stream_lock;
+
+/**
+ * The current logging thread that owns the log_stream_lock.
+ */
+static korp_tid cur_logging_thread = INVALID_THREAD_ID;
+
+/**
+ * Whether the currently being printed log is ennabled.
+ */
+static bool cur_log_enabled;
+
+int _bh_log_init()
+{
+    log_verbose_level = 3;
+    return vm_mutex_init(&log_stream_lock);
+}
+
+void _bh_log_set_verbose_level(int level)
+{
+    log_verbose_level = level;
+}
+
+void _bh_log_printf(const char *fmt, ...)
+{
+    va_list ap;
+    va_start(ap, fmt);
+    _bh_log_vprintf(fmt, ap);
+    va_end(ap);
+}
+
+/**
+ * Return true if the given tag is enabled by the configuration.
+ *
+ * @param tag the tag (or prefix) of the log message.
+ *
+ * @return true if the log should be enabled.
+ */
+static bool is_log_enabled(const char *tag)
+{
+    /* Print all non-verbose or verbose logs whose levels are less than
+     or equal to the configured verbose level.  */
+    return tag[0] != 'V' || tag[1] - '0' <= log_verbose_level;
+}
+
+/**
+ * Helper function for converting "..." to va_list.
+ */
+static void bh_log_emit_helper(const char *fmt, ...)
+{
+    va_list ap;
+    va_start(ap, fmt);
+    bh_log_emit(fmt, ap);
+    va_end(ap);
+}
+
+extern size_t _bh_time_strftime(char *s, size_t max, const char *format,
+        int64 time);
+
+void _bh_log_vprintf(const char *fmt, va_list ap)
+{
+    korp_tid self = vm_self_thread();
+    /* Try to own the log stream and start the log output.  */
+    if (self != cur_logging_thread) {
+        vm_mutex_lock(&log_stream_lock);
+        cur_logging_thread = self;
+
+        if (fmt && (cur_log_enabled = is_log_enabled(fmt))) {
+            char buf[32];
+            bh_time_strftime(buf, 32, "%Y-%m-%d %H:%M:%S",
+            bh_time_get_millisecond_from_1970());
+            bh_log_emit_helper("\n[%s - %X]: ", buf, (int) self);
+
+            /* Strip the "Vn." prefix.  */
+            if (fmt && strlen(fmt) >= 3 && fmt[0] == 'V' && fmt[1] && fmt[2])
+                fmt += 3;
+        }
+    }
+
+    if (cur_log_enabled && fmt)
+        bh_log_emit(fmt, ap);
+}
+
+void _bh_log_commit()
+{
+    if (vm_self_thread() != cur_logging_thread)
+        /* Ignore the single commit without printing anything.  */
+        return;
+
+    cur_logging_thread = INVALID_THREAD_ID;
+    vm_mutex_unlock(&log_stream_lock);
+}
+
+void _bh_log(const char *tag, const char *file, int line, const char *fmt, ...)
+{
+    va_list ap;
+
+    if (tag)
+        _bh_log_printf(tag);
+
+    if (file)
+        _bh_log_printf("%s:%d", file, line);
+
+    va_start(ap, fmt);
+    _bh_log_vprintf(fmt, ap);
+    va_end(ap);
+
+    _bh_log_commit();
+}
+
+#if defined(BH_DEBUG)
+
+BH_STATIC char com_switchs[LOG_COM_MAX]; /* 0: off; 1: on */
+BH_STATIC char *com_names[LOG_COM_MAX] = {"app_manager", "gc", "hmc", "utils",
+    "verifier_jeff", "vmcore_jeff"};
+
+BH_STATIC int com_find_name(const char **com)
+{
+    int i;
+    const char *c, *name;
+
+    for (i = 0; i < LOG_COM_MAX; i++) {
+        c = *com;
+        name = com_names[i];
+        while (*name != '\0') {
+            if (*c != *name)
+            break;
+            c++;
+            name++;
+        }
+        if (*name == '\0') {
+            *com = c;
+            return i;
+        }
+    }
+
+    return LOG_COM_MAX;
+}
+
+void log_parse_coms(const char *coms)
+{
+    int i;
+
+    for (i = LOG_COM_MAX; i--; )
+    com_switchs[i] = 0;
+
+    com_switchs[LOG_COM_UTILS] = 1; /* utils is a common part */
+
+    if (coms == NULL)
+    return;
+
+    while (*coms != '\0') {
+        i = com_find_name(&coms);
+        if (i == LOG_COM_MAX)
+        break;
+        com_switchs[i] = 1;
+
+        if (*coms == '\0')
+        return;
+        if (*coms != ';')
+        break;
+        /* *com == ';' */
+        coms++;
+    }
+
+    /* Log the message without aborting. */
+    LOG_DEBUG(LOG_COM_UTILS, "The component names for logging are not right: 
%s.", coms);
+}
+
+int bh_log_dcom_is_enabled(int component)
+{
+    return com_switchs[component];
+}
+
+#endif /* defined(BH_DEBUG) */
+
diff --git a/scriptsrcs/wamr/core/shared-lib/utils/bh_queue.c 
b/scriptsrcs/wamr/core/shared-lib/utils/bh_queue.c
new file mode 100755
index 0000000..2fef7ac
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/utils/bh_queue.c
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bh_queue.h"
+#include "bh_thread.h"
+#include "bh_memory.h"
+#include "bh_time.h"
+#include "bh_common.h"
+
+typedef struct _bh_queue_node {
+    struct _bh_queue_node * next;
+    struct _bh_queue_node * prev;
+    unsigned short tag;
+    unsigned long len;
+    void * body;
+    bh_msg_cleaner msg_cleaner;
+} bh_queue_node;
+
+struct bh_queue {
+    bh_queue_mutex queue_lock;
+    bh_queue_cond queue_wait_cond;
+    unsigned int cnt;
+    unsigned int max;
+    unsigned int drops;
+    bh_queue_node * head;
+    bh_queue_node * tail;
+
+    bool exit_loop_run;
+};
+
+char * bh_message_payload(bh_message_t message)
+{
+    return message->body;
+}
+
+int bh_message_payload_len(bh_message_t message)
+{
+    return message->len;
+}
+
+int bh_message_type(bh_message_t message)
+{
+    return message->tag;
+}
+
+bh_queue *
+bh_queue_create()
+{
+    int ret;
+    bh_queue *queue = bh_queue_malloc(sizeof(bh_queue));
+
+    if (queue) {
+        memset(queue, 0, sizeof(bh_queue));
+        queue->max = DEFAULT_QUEUE_LENGTH;
+
+        ret = bh_queue_mutex_init(&queue->queue_lock);
+        if (ret != 0) {
+            bh_queue_free(queue);
+            return NULL;
+        }
+
+        ret = bh_queue_cond_init(&queue->queue_wait_cond);
+        if (ret != 0) {
+            bh_queue_mutex_destroy(&queue->queue_lock);
+            bh_queue_free(queue);
+            return NULL;
+        }
+    }
+
+    return queue;
+}
+
+void bh_queue_destroy(bh_queue *queue)
+{
+    bh_queue_node *node;
+
+    if (!queue)
+        return;
+
+    bh_queue_mutex_lock(&queue->queue_lock);
+    while (queue->head) {
+        node = queue->head;
+        queue->head = node->next;
+
+        bh_free_msg(node);
+    }
+    bh_queue_mutex_unlock(&queue->queue_lock);
+
+    bh_queue_cond_destroy(&queue->queue_wait_cond);
+    bh_queue_mutex_destroy(&queue->queue_lock);
+    bh_queue_free(queue);
+}
+
+bool bh_post_msg2(bh_queue *queue, bh_queue_node *msg)
+{
+    if (queue->cnt >= queue->max) {
+        queue->drops++;
+        bh_free_msg(msg);
+        return false;
+    }
+
+    bh_queue_mutex_lock(&queue->queue_lock);
+
+    if (queue->cnt == 0) {
+        bh_assert(queue->head == NULL);
+        bh_assert(queue->tail == NULL);
+        queue->head = queue->tail = msg;
+        msg->next = msg->prev = NULL;
+        queue->cnt = 1;
+
+        bh_queue_cond_signal(&queue->queue_wait_cond);
+    } else {
+        msg->next = NULL;
+        msg->prev = queue->tail;
+        queue->tail->next = msg;
+        queue->tail = msg;
+        queue->cnt++;
+    }
+
+    bh_queue_mutex_unlock(&queue->queue_lock);
+
+    return true;
+}
+
+bool bh_post_msg(bh_queue *queue, unsigned short tag, void *body,
+        unsigned int len)
+{
+    bh_queue_node *msg = bh_new_msg(tag, body, len, NULL);
+    if (msg == NULL) {
+        queue->drops++;
+        if (len != 0 && body)
+            bh_free(body);
+        return false;
+    }
+
+    if (!bh_post_msg2(queue, msg)) {
+        // bh_post_msg2 already freed the msg for failure
+        return false;
+    }
+
+    return true;
+}
+
+bh_queue_node * bh_new_msg(unsigned short tag, void *body, unsigned int len,
+        void * handler)
+{
+    bh_queue_node *msg = (bh_queue_node*) bh_queue_malloc(
+            sizeof(bh_queue_node));
+    if (msg == NULL)
+        return NULL;
+    memset(msg, 0, sizeof(bh_queue_node));
+    msg->len = len;
+    msg->body = body;
+    msg->tag = tag;
+    msg->msg_cleaner = (bh_msg_cleaner) handler;
+
+    return msg;
+}
+
+void bh_free_msg(bh_queue_node *msg)
+{
+    if (msg->msg_cleaner) {
+        msg->msg_cleaner(msg->body);
+        bh_queue_free(msg);
+        return;
+    }
+
+    // note: sometime we just use the payload pointer for a integer value
+    //       len!=0 is the only indicator about the body is an allocated 
buffer.
+    if (msg->body && msg->len)
+        bh_queue_free(msg->body);
+
+    bh_queue_free(msg);
+}
+
+bh_message_t bh_get_msg(bh_queue *queue, int timeout)
+{
+    bh_queue_node *msg = NULL;
+    bh_queue_mutex_lock(&queue->queue_lock);
+
+    if (queue->cnt == 0) {
+        bh_assert(queue->head == NULL);
+        bh_assert(queue->tail == NULL);
+
+        if (timeout == 0) {
+            bh_queue_mutex_unlock(&queue->queue_lock);
+            return NULL;
+        }
+
+        bh_queue_cond_timedwait(&queue->queue_wait_cond, &queue->queue_lock,
+                timeout);
+    }
+
+    if (queue->cnt == 0) {
+        bh_assert(queue->head == NULL);
+        bh_assert(queue->tail == NULL);
+    } else if (queue->cnt == 1) {
+        bh_assert(queue->head == queue->tail);
+
+        msg = queue->head;
+        queue->head = queue->tail = NULL;
+        queue->cnt = 0;
+    } else {
+        msg = queue->head;
+        queue->head = queue->head->next;
+        queue->head->prev = NULL;
+        queue->cnt--;
+    }
+
+    bh_queue_mutex_unlock(&queue->queue_lock);
+
+    return msg;
+}
+
+unsigned bh_queue_get_message_count(bh_queue *queue)
+{
+    if (!queue)
+        return 0;
+
+    return queue->cnt;
+}
+
+void bh_queue_enter_loop_run(bh_queue *queue,
+        bh_queue_handle_msg_callback handle_cb)
+{
+    if (!queue)
+        return;
+
+    while (!queue->exit_loop_run) {
+        bh_queue_node * message = bh_get_msg(queue, BH_WAIT_FOREVER);
+
+        if (message) {
+            handle_cb(message);
+            bh_free_msg(message);
+        }
+    }
+}
+
+void bh_queue_exit_loop_run(bh_queue *queue)
+{
+    if (queue) {
+        queue->exit_loop_run = true;
+        bh_queue_cond_signal(&queue->queue_wait_cond);
+    }
+}
diff --git a/scriptsrcs/wamr/core/shared-lib/utils/runtime_timer.c 
b/scriptsrcs/wamr/core/shared-lib/utils/runtime_timer.c
new file mode 100755
index 0000000..a0e17fd
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/utils/runtime_timer.c
@@ -0,0 +1,475 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "runtime_timer.h"
+#include "bh_thread.h"
+#include "bh_time.h"
+
+#define PRINT(...)
+//#define PRINT printf
+
+typedef struct _app_timer {
+    struct _app_timer * next;
+    uint32 id;
+    unsigned int interval;
+    uint64 expiry;
+    bool is_periodic;
+} app_timer_t;
+
+struct _timer_ctx {
+    app_timer_t * g_app_timers;
+    app_timer_t * idle_timers;
+    app_timer_t * free_timers;
+    unsigned int g_max_id;
+    int pre_allocated;
+    unsigned int owner;
+
+    //add mutext and conditions
+    korp_cond cond;
+    korp_mutex mutex;
+
+    timer_callback_f timer_callback;
+    check_timer_expiry_f refresh_checker;
+};
+
+uint32 bh_get_elpased_ms(uint32 * last_system_clock)
+{
+    uint32 elpased_ms;
+
+    // attention: the bh_get_tick_ms() return 64 bits integer.
+    // but the bh_get_elpased_ms() is designed to use 32 bits clock count.
+    uint32 now = (uint32) bh_get_tick_ms();
+
+    // system clock overrun
+    if (now < *last_system_clock) {
+        elpased_ms = now + (0xFFFFFFFF - *last_system_clock) + 1;
+    } else {
+        elpased_ms = now - *last_system_clock;
+    }
+
+    *last_system_clock = now;
+
+    return elpased_ms;
+}
+
+static app_timer_t * remove_timer_from(timer_ctx_t ctx, uint32 timer_id,
+        bool active_list)
+{
+    vm_mutex_lock(&ctx->mutex);
+    app_timer_t ** head;
+    if (active_list)
+        head = &ctx->g_app_timers;
+    else
+        head = &ctx->idle_timers;
+
+    app_timer_t * t = *head;
+    app_timer_t * prev = NULL;
+
+    while (t) {
+        if (t->id == timer_id) {
+            if (prev == NULL) {
+                *head = t->next;
+                PRINT("removed timer [%d] at head from list %d\n", t->id, 
active_list);
+            } else {
+                prev->next = t->next;
+                PRINT("removed timer [%d] after [%d] from list %d\n", t->id, 
prev->id, active_list);
+            }
+            vm_mutex_unlock(&ctx->mutex);
+
+            if (active_list && prev == NULL && ctx->refresh_checker)
+                ctx->refresh_checker(ctx);
+
+            return t;
+        } else {
+            prev = t;
+            t = t->next;
+        }
+    }
+
+    vm_mutex_unlock(&ctx->mutex);
+
+    return NULL;
+}
+
+static app_timer_t * remove_timer(timer_ctx_t ctx, uint32 timer_id,
+        bool * active)
+{
+    app_timer_t* t = remove_timer_from(ctx, timer_id, true);
+    if (t) {
+        if (active)
+            *active = true;
+        return t;
+    }
+
+    if (active)
+        *active = false;
+    return remove_timer_from(ctx, timer_id, false);
+}
+
+static void reschedule_timer(timer_ctx_t ctx, app_timer_t * timer)
+{
+
+    vm_mutex_lock(&ctx->mutex);
+    app_timer_t * t = ctx->g_app_timers;
+    app_timer_t * prev = NULL;
+
+    timer->next = NULL;
+    timer->expiry = bh_get_tick_ms() + timer->interval;
+
+    while (t) {
+        if (timer->expiry < t->expiry) {
+            if (prev == NULL) {
+                timer->next = ctx->g_app_timers;
+                ctx->g_app_timers = timer;
+                PRINT("rescheduled timer [%d] at head\n", timer->id);
+            } else {
+                timer->next = t;
+                prev->next = timer;
+                PRINT("rescheduled timer [%d] after [%d]\n", timer->id, 
prev->id);
+            }
+
+            vm_mutex_unlock(&ctx->mutex);
+
+            // ensure the refresh_checker() is called out of the lock
+            if (prev == NULL && ctx->refresh_checker)
+                ctx->refresh_checker(ctx);
+
+            return;
+        } else {
+            prev = t;
+            t = t->next;
+        }
+    }
+
+    if (prev) {
+        // insert to the list end
+        prev->next = timer;
+        PRINT("rescheduled timer [%d] at end, after [%d]\n", timer->id, 
prev->id);
+    } else {
+        // insert at the begin
+        bh_assert(ctx->g_app_timers == NULL);
+        ctx->g_app_timers = timer;
+        PRINT("rescheduled timer [%d] as first\n", timer->id);
+    }
+
+    vm_mutex_unlock(&ctx->mutex);
+
+    // ensure the refresh_checker() is called out of the lock
+    if (prev == NULL && ctx->refresh_checker)
+        ctx->refresh_checker(ctx);
+
+}
+
+static void release_timer(timer_ctx_t ctx, app_timer_t * t)
+{
+    if (ctx->pre_allocated) {
+        vm_mutex_lock(&ctx->mutex);
+        t->next = ctx->free_timers;
+        ctx->free_timers = t;
+        PRINT("recycle timer :%d\n", t->id);
+        vm_mutex_unlock(&ctx->mutex);
+    } else {
+        PRINT("destroy timer :%d\n", t->id);
+        bh_free(t);
+    }
+}
+
+void release_timer_list(app_timer_t ** p_list)
+{
+    app_timer_t *t = *p_list;
+    while (t) {
+        app_timer_t *next = t->next;
+        PRINT("destroy timer list:%d\n", t->id);
+        bh_free(t);
+        t = next;
+    }
+
+    *p_list = NULL;
+}
+
+/*
+ *
+ *    API exposed
+ *
+ */
+
+timer_ctx_t create_timer_ctx(timer_callback_f timer_handler,
+        check_timer_expiry_f expiery_checker, int prealloc_num,
+        unsigned int owner)
+{
+    timer_ctx_t ctx = (timer_ctx_t) bh_malloc(sizeof(struct _timer_ctx));
+    if (ctx == NULL)
+        return NULL;
+    memset(ctx, 0, sizeof(struct _timer_ctx));
+
+    ctx->timer_callback = timer_handler;
+    ctx->pre_allocated = prealloc_num;
+    ctx->refresh_checker = expiery_checker;
+    ctx->owner = owner;
+
+    while (prealloc_num > 0) {
+        app_timer_t *timer = (app_timer_t*) bh_malloc(sizeof(app_timer_t));
+        if (timer == NULL)
+            goto cleanup;
+
+        memset(timer, 0, sizeof(*timer));
+        timer->next = ctx->free_timers;
+        ctx->free_timers = timer;
+        prealloc_num--;
+    }
+
+    vm_cond_init(&ctx->cond);
+    vm_mutex_init(&ctx->mutex);
+
+    PRINT("timer ctx created. pre-alloc: %d\n", ctx->pre_allocated);
+
+    return ctx;
+
+    cleanup:
+
+    if (ctx) {
+        release_timer_list(&ctx->free_timers);
+        bh_free(ctx);
+    }
+    printf("timer ctx create failed\n");
+    return NULL;
+}
+
+void destroy_timer_ctx(timer_ctx_t ctx)
+{
+    while (ctx->free_timers) {
+        void * tmp = ctx->free_timers;
+        ctx->free_timers = ctx->free_timers->next;
+        bh_free(tmp);
+    }
+
+    cleanup_app_timers(ctx);
+
+    vm_cond_destroy(&ctx->cond);
+    vm_mutex_destroy(&ctx->mutex);
+    bh_free(ctx);
+}
+
+void timer_ctx_set_lock(timer_ctx_t ctx, bool lock)
+{
+    if (lock)
+        vm_mutex_lock(&ctx->mutex);
+    else
+        vm_mutex_unlock(&ctx->mutex);
+}
+
+void * timer_ctx_get_lock(timer_ctx_t ctx)
+{
+    return &ctx->mutex;
+}
+
+unsigned int timer_ctx_get_owner(timer_ctx_t ctx)
+{
+    return ctx->owner;
+}
+
+void add_idle_timer(timer_ctx_t ctx, app_timer_t * timer)
+{
+    vm_mutex_lock(&ctx->mutex);
+    timer->next = ctx->idle_timers;
+    ctx->idle_timers = timer;
+    vm_mutex_unlock(&ctx->mutex);
+}
+
+uint32 sys_create_timer(timer_ctx_t ctx, int interval, bool is_period,
+        bool auto_start)
+{
+
+    app_timer_t *timer;
+
+    if (ctx->pre_allocated) {
+        if (ctx->free_timers == NULL)
+            return -1;
+        else {
+            timer = ctx->free_timers;
+            ctx->free_timers = timer->next;
+        }
+    } else {
+        timer = (app_timer_t*) bh_malloc(sizeof(app_timer_t));
+        if (timer == NULL)
+            return -1;
+    }
+
+    memset(timer, 0, sizeof(*timer));
+
+    ctx->g_max_id++;
+    if (ctx->g_max_id == -1)
+        ctx->g_max_id++;
+    timer->id = ctx->g_max_id;
+    timer->interval = interval;
+    timer->is_periodic = is_period;
+
+    if (auto_start)
+        reschedule_timer(ctx, timer);
+    else
+        add_idle_timer(ctx, timer);
+
+    return timer->id;
+}
+
+bool sys_timer_cancel(timer_ctx_t ctx, uint32 timer_id)
+{
+    bool from_active;
+    app_timer_t * t = remove_timer(ctx, timer_id, &from_active);
+    if (t == NULL)
+        return false;
+
+    add_idle_timer(ctx, t);
+
+    PRINT("sys_timer_stop called\n");
+    return from_active;
+}
+
+bool sys_timer_destory(timer_ctx_t ctx, uint32 timer_id)
+{
+    bool from_active;
+    app_timer_t * t = remove_timer(ctx, timer_id, &from_active);
+    if (t == NULL)
+        return false;
+
+    release_timer(ctx, t);
+
+    PRINT("sys_timer_destory called\n");
+    return true;
+}
+
+bool sys_timer_restart(timer_ctx_t ctx, uint32 timer_id, int interval)
+{
+    app_timer_t * t = remove_timer(ctx, timer_id, NULL);
+    if (t == NULL)
+        return false;
+
+    if (interval > 0)
+        t->interval = interval;
+
+    reschedule_timer(ctx, t);
+
+    PRINT("sys_timer_restart called\n");
+    return true;
+}
+
+/*
+ *
+ *
+ * API called by the timer manager from another thread or the kernel timer 
handler
+ *
+ *
+ */
+
+// lookup the app queue by the module name
+//post a timeout message to the app queue
+//
+static void handle_expired_timers(timer_ctx_t ctx, app_timer_t * expired)
+{
+    while (expired) {
+        app_timer_t * t = expired;
+        ctx->timer_callback(t->id, ctx->owner);
+
+        expired = expired->next;
+        if (t->is_periodic) {
+            // if it is repeating, then reschedule it;
+            reschedule_timer(ctx, t);
+
+        } else {
+            // else move it to idle list
+            add_idle_timer(ctx, t);
+        }
+    }
+}
+
+int get_expiry_ms(timer_ctx_t ctx)
+{
+    int ms_to_next_expiry;
+    uint64 now = bh_get_tick_ms();
+
+    vm_mutex_lock(&ctx->mutex);
+    if (ctx->g_app_timers == NULL)
+        ms_to_next_expiry = 7 * 24 * 60 * 60 * 1000; // 1 week
+    else if (ctx->g_app_timers->expiry >= now)
+        ms_to_next_expiry = ctx->g_app_timers->expiry - now;
+    else
+        ms_to_next_expiry = 0;
+    vm_mutex_unlock(&ctx->mutex);
+
+    return ms_to_next_expiry;
+}
+
+int check_app_timers(timer_ctx_t ctx)
+{
+    vm_mutex_lock(&ctx->mutex);
+
+    app_timer_t * t = ctx->g_app_timers;
+    app_timer_t * expired = NULL;
+
+    uint64 now = bh_get_tick_ms();
+
+    while (t) {
+        if (now >= t->expiry) {
+            ctx->g_app_timers = t->next;
+
+            t->next = expired;
+            expired = t;
+
+            t = ctx->g_app_timers;
+        } else {
+            break;
+        }
+    }
+    vm_mutex_unlock(&ctx->mutex);
+
+    handle_expired_timers(ctx, expired);
+
+    return get_expiry_ms(ctx);
+}
+
+void cleanup_app_timers(timer_ctx_t ctx)
+{
+    vm_mutex_lock(&ctx->mutex);
+
+    release_timer_list(&ctx->g_app_timers);
+    release_timer_list(&ctx->idle_timers);
+
+    vm_mutex_unlock(&ctx->mutex);
+}
+
+/*
+ *
+ *   One reference implementation for timer manager
+ *
+ *
+ */
+
+void * thread_timer_check(void * arg)
+{
+    timer_ctx_t ctx = (timer_ctx_t) arg;
+    while (1) {
+        int ms_to_expiry = check_app_timers(ctx);
+        vm_mutex_lock(&ctx->mutex);
+        vm_cond_reltimedwait(&ctx->cond, &ctx->mutex, ms_to_expiry);
+        vm_mutex_unlock(&ctx->mutex);
+    }
+}
+
+void wakeup_timer_thread(timer_ctx_t ctx)
+{
+    vm_cond_signal(&ctx->cond);
+}
+
diff --git a/scriptsrcs/wamr/core/shared-lib/utils/runtime_timer.h 
b/scriptsrcs/wamr/core/shared-lib/utils/runtime_timer.h
new file mode 100755
index 0000000..1f0aaa0
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/utils/runtime_timer.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef LIB_BASE_RUNTIME_TIMER_H_
+#define LIB_BASE_RUNTIME_TIMER_H_
+
+#include "bh_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+uint32 bh_get_elpased_ms(uint32 * last_system_clock);
+
+struct _timer_ctx;
+typedef struct _timer_ctx * timer_ctx_t;
+typedef void (*timer_callback_f)(uint32 id, unsigned int owner);
+typedef void (*check_timer_expiry_f)(timer_ctx_t ctx);
+
+timer_ctx_t create_timer_ctx(timer_callback_f timer_handler,
+        check_timer_expiry_f, int prealloc_num, unsigned int owner);
+void destroy_timer_ctx(timer_ctx_t);
+void timer_ctx_set_lock(timer_ctx_t ctx, bool lock);
+void * timer_ctx_get_lock(timer_ctx_t ctx);
+unsigned int timer_ctx_get_owner(timer_ctx_t ctx);
+
+uint32 sys_create_timer(timer_ctx_t ctx, int interval, bool is_period,
+        bool auto_start);
+bool sys_timer_destory(timer_ctx_t ctx, uint32 timer_id);
+bool sys_timer_cancel(timer_ctx_t ctx, uint32 timer_id);
+bool sys_timer_restart(timer_ctx_t ctx, uint32 timer_id, int interval);
+void cleanup_app_timers(timer_ctx_t ctx);
+int check_app_timers(timer_ctx_t ctx);
+int get_expiry_ms(timer_ctx_t ctx);
+
+void wakeup_timer_thread(timer_ctx_t ctx);
+void * thread_timer_check(void * arg);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* LIB_BASE_RUNTIME_TIMER_H_ */
diff --git a/scriptsrcs/wamr/core/shared-lib/utils/shared_utils.cmake 
b/scriptsrcs/wamr/core/shared-lib/utils/shared_utils.cmake
new file mode 100755
index 0000000..910ea87
--- /dev/null
+++ b/scriptsrcs/wamr/core/shared-lib/utils/shared_utils.cmake
@@ -0,0 +1,24 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set (UTILS_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${UTILS_SHARED_DIR})
+include_directories(${UTILS_SHARED_DIR}/../include)
+
+
+file (GLOB_RECURSE source_all ${UTILS_SHARED_DIR}/*.c)
+
+set (UTILS_SHARED_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/doc/building.md b/scriptsrcs/wamr/doc/building.md
new file mode 100755
index 0000000..13c5bdc
--- /dev/null
+++ b/scriptsrcs/wamr/doc/building.md
@@ -0,0 +1,268 @@
+
+Build WAMR Core
+=========================
+Please follow the instructions below to build the WAMR core on different 
platforms.
+
+Linux
+-------------------------
+First of all please install library dependencies of lib gcc.
+Use installation commands below for Ubuntu Linux:
+``` Bash
+sudo apt install lib32gcc-5-dev g++-multilib
+```
+Or in Fedora:
+``` Bash
+sudo dnf install glibc-devel.i686 
+```
+
+After installing dependencies, build the source code:
+``` Bash
+cd core/iwasm/products/linux/
+mkdir build
+cd build
+cmake ..
+make
+```
+
+Mac
+-------------------------
+Make sure to install Xcode from App Store firstly, and install cmake.
+
+If you use Homebrew, install cmake from the command line:
+``` Bash
+brew install cmake
+```
+
+Then build the source codes:
+```
+cd core/iwasm/products/darwin/
+mkdir build
+cd build
+cmake ..
+make
+```
+
+VxWorks
+-------------------------
+VxWorks 7 SR0620 release is validated.
+
+First you need to build a VSB. Make sure *UTILS_UNIX* layer is added in the 
VSB.
+After the VSB is built, export the VxWorks toolchain path by:
+```
+export <vsb_dir_path>/host/vx-compiler/bin:$PATH
+```
+Now switch to iwasm source tree to build the source code:
+```
+cd core/iwasm/products/vxworks/
+mkdir build
+cd build
+cmake ..
+make
+```
+Create a VIP based on the VSB. Make sure the following components are added:
+* INCLUDE_POSIX_PTHREADS
+* INCLUDE_POSIX_PTHREAD_SCHEDULER
+* INCLUDE_SHARED_DATA
+* INCLUDE_SHL
+
+Copy the generated iwasm executable, the test WASM binary as well as the needed
+shared libraries (libc.so.1, libllvm.so.1 or libgnu.so.1 depending on the VSB,
+libunix.so.1) to a supported file system (eg: romfs).
+
+Zephyr
+-------------------------
+You need to download the Zephyr source code first and embed WAMR into it.
+``` Bash
+git clone https://github.com/zephyrproject-rtos/zephyr.git
+cd zephyr/samples/
+cp -a <iwasm_dir>/products/zephyr/simple .
+cd simple
+ln -s <iwam_dir> iwasm
+ln -s <shared_lib_dir> shared-lib
+mkdir build && cd build
+source ../../../zephyr-env.sh
+cmake -GNinja -DBOARD=qemu_x86 ..
+ninja
+```
+AliOS-Things
+-------------------------
+1. a developerkit board id needed for testing
+2. download the AliOS-Things code
+   ``` Bash
+   git clone https://github.com/alibaba/AliOS-Things.git
+   ```
+3. copy <iwasm_root_dir>/products/alios-things directory to 
AliOS-Things/middleware, and rename it as iwasm
+   ``` Bash
+   cp -a <iwasm_root_dir>/products/alios-things middleware/iwasm
+   ```
+4. create a link to <iwasm_root_dir> in middleware/iwasm/ and rename it to 
iwasm
+   ``` Bash
+   ln -s <iwasm_root_dir> middleware/iwasm/iwasm
+   ```
+5. create a link to <shared-lib_root_dir> in middleware/iwasm/ and rename it 
to shared-lib
+   ``` Bash
+   ln -s <shared-lib_root_dir> middle/iwasm/shared-lib
+   ```
+6. modify file app/example/helloworld/helloworld.c, patch as:
+   ``` C
+   #include <stdbool.h>
+   #include <aos/kernel.h>
+   extern bool iwasm_init();
+   int application_start(int argc, char *argv[])
+   {
+        int count = 0;
+        iwasm_init();
+       ...
+   }
+   ```
+7. modify file app/example/helloworld/aos.mk
+   ``` C
+      $(NAME)_COMPONENTS := osal_aos iwasm
+   ```
+8. build source code
+   ``` Bash
+   aos make helloworld@developerkit -c config
+   aos make
+   ```
+9. download the binary to developerkit board, check the output from serial port
+
+Docker
+-------------------------
+[Docker](https://www.docker.com/) will download all the dependencies and build 
WAMR Core on your behalf.
+
+Make sure you have Docker installed on your machine: 
[macOS](https://docs.docker.com/docker-for-mac/install/), 
[Windows](https://docs.docker.com/docker-for-windows/install/) or 
[Linux](https://docs.docker.com/install/linux/docker-ce/ubuntu/).
+
+Build the Docker image:
+
+``` Bash
+docker build --rm -f "Dockerfile" -t wamr:latest .
+```
+Run the image in interactive mode:
+``` Bash
+docker run --rm -it wamr:latest
+```
+You'll now enter the container at `/root`.
+
+
+Build WASM app
+=========================
+You can write a simple ```test.c``` as the first sample.
+
+```C
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char **argv)
+{
+    char *buf;
+
+    printf("Hello world!\n");
+
+    buf = malloc(1024);
+    if (!buf) {
+        printf("malloc buf failed\n");
+        return -1;
+    }
+
+    printf("buf ptr: %p\n", buf);
+
+    sprintf(buf, "%s", "1234\n");
+    printf("buf: %s", buf);
+
+    free(buf);
+    return 0;
+}
+```
+
+There are three methods to build a WASM binary. They are Emscripten, the clang 
compiler and Docker.
+
+##  Use Emscripten tool
+
+A method to build a WASM binary is to use Emscripten tool ```emcc```.
+Assuming you are using Linux, you may install emcc from Emscripten EMSDK 
following the steps below:
+
+```
+git clone https://github.com/emscripten-core/emsdk.git
+emsdk install latest
+emsdk activate latest
+```
+source ```./emsdk_env.sh```.
+The Emscripten website provides other installation methods beyond Linux.
+
+Use the emcc command below to build the WASM C source code into the WASM 
binary.
+``` Bash
+emcc -g -O3 *.c -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s 
STACK_OVERFLOW_CHECK=2 \
+                -s TOTAL_MEMORY=65536 -s TOTAL_STACK=4096 -o test.wasm
+```
+You will get ```test.wasm``` which is the WASM app binary.
+
+## Use clang compiler
+
+Another method to build a WASM binary is to use clang compiler```clang-8```.
+
+Add source to your system source list from llvm website, for ubuntu16.04, add 
following lines to /etc/apt/sources.list:
+
+```Bash
+deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial main
+deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial main # 7
+deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main
+deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main # 8
+deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main
+deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main
+```
+
+Download and install clang-8 tool-chain using following commands:
+
+```Bash
+wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
+sudo apt-get update
+sudo apt-get install llvm-8 lld-8 clang-8
+```
+
+Create a soft link under /usr/bin:
+
+```Bash
+cd /usr/bin
+sudo ln -s wasm-ld-8 wasm-ld
+```
+
+Use the clang-8 command below to build the WASM C source code into the WASM 
binary.
+
+```Bash
+clang-8 --target=wasm32 -O3 
-Wl,--initial-memory=131072,--allow-undefined,--export=main,
+--no-threads,--strip-all,--no-entry -nostdlib -o test.wasm test.c
+```
+
+You will get ```test.wasm``` which is the WASM app binary.
+
+## Using Docker
+
+The last method availble is using [Docker](https://www.docker.com/). We assume 
you've already configured Docker (see Platform section above) and have a 
running interactive shell. Currently the Dockerfile only supports compiling 
apps with clang, with Emscripten planned for the future.
+
+Use the clang-8 command below to build the WASM C source code into the WASM 
binary.
+
+```Bash
+clang-8 --target=wasm32 -O3 
-Wl,--initial-memory=131072,--allow-undefined,--export=main,
+--no-threads,--strip-all,--no-entry -nostdlib -o test.wasm test.c
+```
+
+You will get ```test.wasm``` which is the WASM app binary.
+
+Run WASM app
+========================
+
+Assume you are using Linux, the command to run the test.wasm is:
+``` Bash
+cd iwasm/products/linux/build
+./iwasm test.wasm
+```
+You will get the following output:
+```
+Hello world!
+buf ptr: 0x400002b0
+buf: 1234
+```
+If you would like to run the test app on Zephyr, we have embedded a test 
sample into its OS image. You will need to execute:
+```
+ninja run
+```
diff --git a/scriptsrcs/wamr/doc/embed_wamr.md 
b/scriptsrcs/wamr/doc/embed_wamr.md
new file mode 100755
index 0000000..4c1588f
--- /dev/null
+++ b/scriptsrcs/wamr/doc/embed_wamr.md
@@ -0,0 +1,40 @@
+Embed WAMR into software production
+=====================================
+
+![WAMR embed diagram](./pics/embed.PNG "WAMR embed architecture diagram")
+
+
+A typical WAMR API usage is shown below (some return value checks are ignored):
+``` C
+  static char global_heap_buf[512 * 1024];
+
+  char *buffer;
+  wasm_module_t module;
+  wasm_module_inst_t inst;
+  wasm_function_inst_t func;
+  wasm_exec_env_t env;
+  uint32 argv[2];
+
+  bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf));
+  wasm_runtime_init();
+
+  buffer = read_wasm_binary_to_buffer(…);
+  module = wasm_runtime_load(buffer, size, err, err_size);
+  inst = wasm_runtime_instantiate(module, 0, 0, err, err_size);
+  func = wasm_runtime_lookup_function(inst, "fib", "(i32)i32");
+  env = wasm_runtime_create_exec_env(stack_size);
+
+  argv[0] = 8;
+  if (!wasm_runtime_call_wasm(inst, env, func, 1, argv_buf) ) {
+      wasm_runtime_clear_exception(inst);
+  }
+  /* the return value is stored in argv[0] */
+  printf("fib function return: %d\n", argv[0]);
+
+  wasm_runtime_destory_exec_env(env);
+  wasm_runtime_deinstantiate(inst);
+  wasm_runtime_unload(module);
+  wasm_runtime_destroy();
+  bh_memory_destroy();
+```
+
diff --git a/scriptsrcs/wamr/doc/memory_usage.txt 
b/scriptsrcs/wamr/doc/memory_usage.txt
new file mode 100755
index 0000000..ecc64a9
--- /dev/null
+++ b/scriptsrcs/wamr/doc/memory_usage.txt
@@ -0,0 +1,13 @@
+Current memory usage, take samples/littlevgl in Zephyr for example:
+(1) WASM app binary:                        142K for littlevgl ui_app.wasm
+(2) WASM app memory space:                  64K for littlevgl ui_app.wasm
+(3) WASM app heap space:                    8K by default
+(4) WASM app thread native stack:           4K by default
+(5) WASM interpreter stack:                 8K by default
+(6) WASM block address hash cache:          3K
+(7) timer thread stack:                     4K
+(8) sensor thread stack:                    4K
+(9) touch screen thread stack:              4K
+(10) others: vm, app mgr, queue, native lib: ~22K
+
+Total memory usage: ~263K
diff --git a/scriptsrcs/wamr/doc/pics/embed.PNG 
b/scriptsrcs/wamr/doc/pics/embed.PNG
new file mode 100755
index 
0000000000000000000000000000000000000000..68340ee935a8d7d1be0a3ecf36dbd5af443ef2a9
GIT binary patch
literal 26261
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
P6|pk6H_J0QeeM4M&(j5{

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/pics/extend_library.PNG 
b/scriptsrcs/wamr/doc/pics/extend_library.PNG
new file mode 100755
index 
0000000000000000000000000000000000000000..abf10cab3ec9e46e71aca6c84b3cb371b83e4c5d
GIT binary patch
literal 30398
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

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/pics/native_call_wasm.PNG 
b/scriptsrcs/wamr/doc/pics/native_call_wasm.PNG
new file mode 100755
index 
0000000000000000000000000000000000000000..934af72f5d52d09c7b16657013d19a3c9cc6722a
GIT binary patch
literal 49074
zcmeFZcT`i`+b)U~6+{7*8W6D|ok(vg2q;YiMY<3Oy%Ty-=^eK8DxwsDAiaaqA|z6z
zgb)NFn;JTVUhWED+uz>%cka308RMQYzCRcW$(r*m&wR@>=bC{Jlw?nzqCZ7KLUQ_^
zob*Eyk|SW?C;7y2;4cL=V%LFx4%t7Hy+Z<TW1IwjIcj`c@iy>LIN6r|G2r);HgX#F
zBqS6K#GgY5>nuYOk~-OY(zn%|b!WC`&>ZR><Dm<ZDD%P3*vsZd%^xdb)suv9ZcTyK
ziT-iqPH}fH&~ZZ$Ocw9yXg^4ol6sTM99et*^aK6P4^O?XFdRqnJP~_xn7s68+{FMA
zIy#|?K1>~5w`CpL%GwDvZFAF0SVD*TqgD7+yYa$p^yEAEpiYS!dS_+u(e|6ufP5q*
z9}csi_WyI~fBr-A;lIZSA8wZudbI=v2W%R~R<PERE=Qj-`p^Mpeik`kivT5FlU#2}
zye2+*&s!}M1eZQ^bvE68ye*mI5G{p15n4|#(<=sm79>g}v|C6e*FLhZbm};Lg%uus
zDs(VRBhOOxxVZJ^99OteH%nOQ^<0NEkHx4=u~7%+!_$WkMmcqTwis_+esuHL%ISkY
zIrQ82alf}d0pOT~gf*=zrNQ&Lhg94l;5XV94bd40oU>x3-&`5}nd=WUWYkV4{Pp;H
z!nthx!{&iUicS{nWeeSz60l8AX7~AzFG~clbv4!PYhuHq^)*|g+>$PD!dBvYgGW1;
z2(`s$ke0C%6{F^+UK8tsDW!R<sN|lQBL{*Qp9Vuxm_@OtXs@_(aH*4i-EC7dt_i1o
z#drP^W0FDKR1rDEvl@S#<P@7NbGKT2;WniD^tL)yjfcHVAGhgUx)0ZoH$6Pmq7(E+
z<+GLeQY^RVtPbl<qliv9zfu(|S&%1gv><l_8;<>>+{*8cEMs6~f!K!DXaLfjrO~Ks
zWyHQ(yk>5#yw`i>U^wYyJtx;9C0AxhisV()6W_Q$Xdjw^2<4oxY4iN?2daFIb<STk
z<5W84MO;5yY{W9LOKHmtgzM&$OKdoi-`wgm-8>5=+E#{2bY|)@eu%%w++evpHNUQk
zmH}#p{$>)z3XeVJy{4%%`lYmOqt*xgxjy8DZ!G&$2OY%g#m2L*@#gnO+*Bhv?fK3f
ztw}k2vG}|13c4g3|KLsD;nkO6rPFb+%pn&oY4fB}^@}ghV@bOdCT4_3tPaA&6$Vl@
zDqe9O_&5+WBf)R*fG?v9P-xkbJxnADoA8=ia?B$Tjt-s^WiVw6bPB*@b!m9JXDXSW
zdL78mSK6h^H@03t?b*vityebixSFgVp1j68C+|>`lJUaDWu;br#Pbt8k&YhfgJwk)
zpE>X>M0Dl~B&9B&2b`h6-)z-@ho*f*{@KUFDt`iu_u)AL7>DPNBF8O+*zQ^VjJf_q
zddOhxe5Hm-0L^mvX>etg#z}o>@-I@n7JYu&W2d%WVW15VpkVVYp0F|K)S`w)1;A%+
zY5np|DsQQw<jM^Zf~}T^QQ#<7*;_4UxA=ikD=6en!rl~4*N~oqnU~?IH3B~;p_2L-
zq2zXN>vVK~xLA<0N^KGt72w?IF|%r>u;Tqk0fz^RqVrddn~jkd6ov7p)K3}MYHAKy
zPb?1;PJm~Ate%FDfaJMCTz;4vqv?Bl|M+t4QDm>m*(L7T*v3MKZJxIal_ec#8=`f=
z*pwH+NLF)}Af6(n12@HALN!{-!9Ee<GSs4zop;5Z;wTpgZ>)~L8o##<iZyDC$XFd-
zeS<(!Qs=9aonEN9XPKTOR`P-Mr%|b3Z@v!q3{_Ey_Pw1dH@~6op6B61=lh(m!>~6a
ztqBjkkJKAn#p$Ho?)q$S>s_{`L+DXTXz$4bzb$CS)SAn0bd(x6cbNFe@QDRc=7ZQ8
zo&}(XmZPs654F&ujLsp~+Hm5~Ivp+SrhJ8h&7<taV>uNJa?zwJ;qhZKC}sG_1pg+j
zCYO-dUZ5f&d2;#xlK(tAvIK-rqop_3#7#H#`a-K_E6uCUj1t4|OIasKtL4Y)J)nKN
z{(zLwqU^a?>b<cTTetORr+^JYgDccLzh)(9aqe~4XN?M6n5a^jQ^RS&B(X{cRV%VF
zUn1%s%o8IgHZXpJLBk81LqYI9BjLPweLA@Bw#VR7iqoPAL%Ft{sfk|m{xB>k#%o05
zJ-apCm?Y{n`)B9myu&3CxlMl_@R|PnckS`;xreMm7!kW58|66ReIOlDlzd1Eow)f1
zYhAZp+#v9$@D#174m`9^(kFhKTGq07cie}^K50)Cr4G3eQJzz5Iwq}8glnL3q%J7)
z55;GpE5J$~^COCE^8y~JGJY3b+}+_2hlf|q7N_ILT1Pu53iDe`XD%(5NX20!edyvC
z>dApp;-u6azs$6Xm+3Y*uQM|j@h+Yef`|K<rRo(fm=MH3PNeGF>bp$+!f4)JN1eJi
z8FZC9CnUKxJMdE*FP+7Mc6uQtd`+TZY$52ljWBCS11hg<(6z_yWq;U;K6?Bvc6Ec|
zqNbh~VrEjP(IYj|GRH66+CAS+E`E4=PaiI-Ot0)C52Zk2u+ovwhYZGzP86g!sugWh
zuDZ=U$;M5=q{$D(Pq{m#**tJWrJtgxMJDH^DcO>D@jn{-V{P!QE|~Q=m-u*YBZVh=
zWu(Md=bd|r&Do*!u=LW&r!m4%E&dH%sSVl&vHj^@D`kr^Lqu&o2RnFJx02x2E&7@U
zq%gU-K#-ePVm|JXW2L!MjjF6LJVz<-g<om<ZY8z0qn~->(^oS$9Pr}zEWuXSa@1{I
z-wY}TmX43AhO`Ex>0gCsqI<_X=M+bS<~YgB@8DgNou`ZQmj_G2TY2JUNGZ$SjvF<?
z-n728Nk=@|S<}4Xm6!4XbCFoaX<v3+ZXOvAJqez*=n+xn5ieL0zKoKC-9dKJ_(t_<
zz+rG)X>sx**2VIg<A|jU-OWNuUp_ITd>X0SjL+3%vB>2ii_I#Yo2UtKQ^{VDtpayG
zc0D>S!wXX*G&F@`wU?~e$-twv@R~B=!<V%8BFDE&vkuwbd>5P^H~Yk|<#A5?>(nb)
zx<=GKUll14p%xv|0lC0NYEn=(hzf3##xU33$neoHY!HFhFR6&{CW@RTh8O!-td@_A
z?dt3jhhd|ok^a@$aSNBreks{^E@}H+I7dPPOkxpo@-j4byjcm{rMx0F{fgow*dy6B
z|C;=WIpLTg%*Nj;N8ps<NU7Nz?{RWV?&C>1Q(iO+CCd_Rcf<rRr6ZnG498UD2$hAG
z0Ug*EJP011xU4yi)kE5Q`IR`sGVBH4)&MW)V{I6ng7WmM-msoH993pQbmQb*k3-VV
zUoEr>6#8RYdyLSf(!xgUJK_Z2DgRSo4HCA6%0l-c4{T6-Po++?$}5)97q&!@e49`i
zpXEqCE$O5X7ucoNJ^XyV({onzu?J{OZaOQrafUowRkzGq3z8RUX)h;?;1fVyS2MXR
z)gH`}bCYNlsX=-2^wE`#(orKwGK85~lo%0&T$>$V+y^Apzgi2$M80qd*xaJ6S3qBf
z2$v|fshsimql>-<#~PRBIlKE$FTo25mPllCmQ8QTnWuupd}Fg5GIKO~t)hg&PR3nP
zL}-&`cB#K0=wsSkd1IT+y@9p}kx^J?U+>wGre()4Q9SIJpB&?rPJ0KCvP*&cP(dKV
z>62%Inc;B?GFbq2VJXhM^IXYy_q0T-Ilva5iU12CRsU*L&XYj&47QhxQ1qtyo8+LS
zd8=rAV0pONCRnLrdV`z*N+gPSEuS6vt-CC5O<RbA5vWC<1(!qWPm}b@fA@jt)Rl#j
z4H>akHoYsVgO&>U=Np1wxO3!W+);FKs@WTFb_tGUTLmSqNo*W8+&U~ZS3z_%SSMZN
zz207qrLjdA#<q=cwTFU=7M1SvoGI|u6n(7f8_)NuyYwx=0P!Ry3M(St7f^OG474LO
zV-b5x57Np*jf}HoXBy(gw$2LBltuf-moxhh<WY=y?*&Lor^*da>dOtu34k*kGoDH|
zQcMl#%QR{&-gtjKO8VUW){CrQgK=T(<9in(kevbLp^J{6=}#xTDA2zu%5}qdAhyJ^
z31?n(kt(yK#X_&i(g=HfRbAbN%JqzDnDa*?liPqfxTr+sb+V*hhbeWpt6l?34DyeR
zDCO>uZL%=sc=*H@HssWuzrRdhP&>I$Ym?JvLoP8GbH^W_DAMhU>iX2Wh!{6co?9C%
z39bEb(}zW0X0rt^H$zs(t<ylA*@Ussaz!C=ZaqsiLlBoYOzi>K*7}g^Qjw*3i&GVk
z+X)4EJ;Fi^dzmPhyyl{$qlo{L24wu}LP-PClHP(4&<5P~q5-1ZPo$c+BkEmOUI&9-
znP2@~4BZ@`-(>kVTnR=_QKGa(Yv59~VoXPVzvRqjn4(zihA2E0L%;-Mr~1!$AOzo)
z9?9_EvuUKzvCN#Mhe}S950jHZ`cztLS^Ql(cpVW%z-(!y=7x$weZ65tou9m?6v<DW
z;$7(5gl(2yxoMV$=91+oRuqR@Myn=N!%K$<wQ7Pj;eJtX&v@x>=&GBzl%_7bEZ^je
z<;2D?EiF}R&&h6HuD!NhWlgU$5VK-Tb0fC($#KOR;KLL2sJ&L@+fk?2m9-TqhhbI&
z!|?_;&X9a4xI^rhg!J`T8kW`xr+G<8ruX``Z$3gLhVV(f1q0&@;2TM&iCOX1ho!-B
zdj5sGEeXnJNJxzLU~{&^w~|Sijr(=VVZGQc*h^qI+T+AB?9~T!u>wfQodz7*YBMZJ
z@&WU|+?9WLs=HNGSGGQ#IVZMGL-Ij?@5v8Ocer=)G!|F7Np6wtrLCtt6ks2E5|cwj
z=}5>k$iXoWj*$32BbuJXyXA#K6!7cjUY*`?oq21i?%t6GDz&T@CfP<u?IU|IkYPbx
z97%%jjc_Yn2&KIl<dh<2=iJ)%z%&Uuh8SE3bGm3CwNX@Yd~fB27QW$msl$#l(l9<n
zc_vdb(R^>Vj_W{2phL6emYfUr4e;+u{mg%hXjzk}m<9#)0A5`|yaLO}@UpS}={?Em
z-!}1pFE`TGlN%&b5u2>1j+*3P$VJq}QntMs7V6LA9bhj<9OD^axQio<2VXk@4iNGu
zicS&-swcnH#_~U3|NpUNglOUJ0Rf1Kg4=Po8-=x16Ys}q{N10DXwNRt>U0G<k^9g|
zCpGYwWc$SXehfTB8Q#gC?2Nee%hUg-ziNIG9MG2mz`BS>d%f_b_@xoeAA)rOs3yvf
zX<?$Y&4W)iiu#rK#P6<yS6K|C;Ms~-P#omywbO>-0p*X;4kI8S>`;!|C|cgohw7Iv
z8eMafZY-(Hpq`^W0p45{9r7A^v%Ed9(1Dv2&|L6!5_`{yn>pjT8-yVAQMF3?mw4D&
z{OzF7T{s(RttM(zY>Y=0dkry`(63gHs<#<MDy;+rn8OsW4e|oDf4*qdoW!b0rTe`v
zwso2-EmzRp8C1{<e(ZXVg|gDxIp!h@Vb6JryiS7gF&=g;`$ivbjZL1Wq(o08C{+XN
zaayk)RcVx}ZTI&|IH7qUg+^0C43Zf$WHl*V_v<!0$r6{8x1MhHZHMnZU3xwz=GY|g
z+I6;KDYliZl~6N7<@8M_C09z%YIB%OvJalg7lUv1c#BpS_8IgaR9;Dv7;;~2P@fLY
z*7ZV3R1j*Hu$FS$Guvr(H8okS9BRE5F2Vm`lvz<!){$8y=X<>_y%7HDow%^g4$GVn
zqgV5_4{bhuO6eL+%9nIVZM=A`_;jp1as-df7qgor5QhGB$P?it6AS8IqiJ1y6Snz!
z60%qaS)DRE0oPjes$*-%$YLWxyz=5XifT}(a~9(r?9#>;EX~x!rZ8_5dCjrH6g)aG
zKi`h+K>(X>optJo@F^27bFB@nC`3c0I|Pqn(fPh8euC<FJ!%JL?3AkCe7m`FiK9Dy
z701N?Nrt4*$OE*xRxT@8*y&H}VBk`{ZQ&X%%U(ER<XBU?;;$>!h$}?m&zuBP1a@jZ
zRe45L@~Z2dxtZ!oFj+%1w<w1761-=BIbrH%r&m-Q%@o~H&0&Si!TL~>ag6iPOYbPp
zr7dn2)P}ja4>Z1~g7tl>e|Q02xacsc5<gvYFI*y-K-gTlmsjn%z3Aepy?ISyu=1ZL
z;C&RAt#fnMZVk54+dhpi-?R;{b_nHio_ahz?Y24k=?@1N+y+1HlX9sx6pI}tY$x?g
zWQSg^2sstMV4KHX$X7i5kI1H=l;X$mIYs$0<MGq6qZ3+^Mftc{gujKTRwf6;LBXYF
z_H5h6hNseyM9Z?8VECJ+$!C}eP2@jd#}O7$b@TV}>`f3JpGu2ht$Z?wC^VjeC5&li
z@nArh5R>nMTB%(z^yL5MfKIWiSDjouBr~m34MnQgHfZ%^Z!U*fa#myrM1K!GE1RTV
z^Q3$9ves^k<odNqk@(%^)Sa%b@tT#Ad_^={kE>@}SISDU188$@=WCs)j{44u^{!*3
zZmg?yyW8NB!0uM+?h<<`fqSQ^u1^9!idiyT-*BzV_u9sH!Tht(!C1W8Zh!|dlo3%k
zGj-9)w9shwI+<iI`Z+gpn4nb+y^2-$nB$&;AqFWeV$rMi8!Pt|haulgjY|@*{^lVe
z1z%dHLjR-Guqg;)OK&^JD;lm&FS^X_e0!BQSpQzw%vP-an=yX0_Dc!9=b75-My<Uw
zs`)Bb@=*LGitk~|TAj2){-uuSu=V_&bB#xNFrc~-0)r<iU-S*m$_%t*p{29=Zf-j|
zp&#!Sr0ytK#G5Y(O*Pzj;T8TR<Yeq`Mx;=^{Sh=>8^Kbf5^PcPh4w+EjPT7<)MeIH
zG7n!HId|Z1$W7Knv+|$f#0VI~1?pSJcE)qiwpi#iru}M_NiDLRmkiA6pXT|75t|~L
z8o~pSZB}=u+nlQz)bqSk#AlT}9R<0=2LfmX98Xg7Z*O2WY?+(U{i6iL^h=b`ohyZq
zf}_7gV1#~iTb;-TMx>M0(?YL<7M!feDy}QIlXo^ckJ$sSHRO7CEz1`idW+4lTPE6o
zgbn#JPY+x>R}PBL3m5ACzK(T3e{y}LQ_sY<KSB)E(Lky_^NK8s?AC<uBwK|ao=gbM
zEt;cnrF&2qR^_#&GEw8aEQ?(#MHV{Fu*a6H?A(VuedvP2yD=**Y(Q4-K?jsyljqCZ
z{u1pOq0=_<$6i>7GoVX6ZnGZGfZsaX5O7B|>5IT+lP0{KU#=e5k1q6Fg~EpQ&`w}8
ziK<dNvR9Vzdjc7PQ`p5$g&-(t(-B(@LG}1m*oyh+{HI%fcjVBOOn0+j168GYw^WqU
zuvZiuFocc%@X_T;9bK<!i57?Qhw+7@^1o(KMyn*(9$0|~Iaxu&kdvbPbT=BV8p*rt
zT$9$-^+v{^8r~Y42X0&&Tu$+ik)-#I_l_=OK@unt<p+7UEXR8w^KfYGg5ZW$cm;&B
z+Dgy3E<c?~Pc|9ff8x2w_~@tm>WCWmGnH4R@zJ+sR-#q92lW)|YLU5Ub-Bbv0%G>%
z!~7gOC^GijFVRV8z}dETr>!@Vm!mQAIIO>jU`c*ihn2zhR3e%|Q-CgiJl@PuMjtwT
zA`<l?ewPzTKxB2^1O-1)%HGcX_Lk4My=btV*Jn!Db{8KvHMBW!fx>A&kDtYMsh;9*
zeaWf!;+Ig1v*~GZK&XO7EI^ZOMGf-P?|Vhw+0tvNpMBuG;93A-^p;k~7z#(5Ph7um
zN(Wu;i=(_W*~vA-P70RPi@~2!!3L&F>p0dp)ky+dF(C+Edp&IZ@IK<n4cuJSt}$?G
z2K_prP|u{Jzv`jOS_mXaU_?&NvimYzwd$f?Goh8jnw-jGXchr88X}0rYs3YPs=m6O
zN*y}P1IHr_wY{=zt6Wq2$6Xc7T%XciHbZpIDL+T1$xp3|$n;xPFq?Os$^2E{FJ0&u
zu_lFIBP%WhG(3%6>Wf@iWa-KuajcTLX&~FjO6RB$(E+e<S9{`_z?UL?>7rZ0n>u4q
zLatOpMa(a4x6{nDJm&5Wf6P}Qi(A;fXW2E^HMQLYc?}z}6CEwJDc`Swy!*oF0~cT-
z@+k&ae_f)s@4TnmG7igCi0N`u*Da_cy2Fh@?xewR3X7zmm>NfI_)IiXzUUTie9FV&
z7-hUK9i7yD&Icw~-Ar<4Pwi$zrrO-s{Iu1`JnEs;)+bnI+d3pIYC7r{OEZWx2E5&Q
z0Co6v$r<ZCwaF|YzoG-$>MNL~R|!l%SrT!!4l_p||9(o1y}bL5B3dm|Gp^Hq%b8Bi
zg51MMc)L6#Tscn<A{RGFcHY)daV}3=;#URzD8QBWNweiKc}16hRdJ#D!vjZ!ZD+ds
z2BdY`7c%`}zW%kHAiA>X(82EMQ~V_l)X2bmG5q*yw+h{ScW%#=@AI_8$U=mWE1SP)
zbE$3k*CjD1bcc#NN!@=iJoeBnkRvy{tfhf$*@cHA6N>7jWl0%oSl!Q>S!@kK)2F}%
zQW97D?s2~yE##f5nGiDZY9i4Txf>Ta$A%sJml<d^4UEB#-_G9{u{X4oMufv)+C7u2
zu2V_)60_!uR1Lkfk7~=4Ydih;P*GhA23cQ9t2r1-7Wg!{7~b7cp!;OjyW-~Vg;_Mo
zQ|e<Y^KJN1>L2tVd*!gLAVd}uUeTZ#R{iAIX-NbNtD|<+3q(hli|I^4G|P>%&Z4f{
zb}rMeV)Zk$XCvRy+L?i1+_9KN3EU^Y*1YY(^9g370i*3PvUKsLU4Lz8_Sy+2a2QwC
zQZ{01&SEMGl@ZkR>?N$+XnJ7QK;Zt(M%rS-3NgoyA|C372&tZkL|W$xRLm+}KDwpV
zs78sCC*<VC1tDmeYl@wg(7^uq75$lYYdVR>TmFe(i~@vEzf|``b#y>&eGB=pFGj+z
zaoNTtos4vuaWG3!`pn{N`=q=sV|V4M5Y(qNPh5A2g<CHkY2lLUX@!=E*0lxzR<&|{
zc5a$hv4WFvcE3%~&VCV6cJI~g0UfWfUXt(K&cJ6Oo%_k{LL(jgR8+DK1{dFjj%DHS
zFhf1rzUHa~0&L1W20a;t^!JG`*Bc4AhYs*YM*>#c9)PccWLx}v=s>vsT42W)vyl3W
zW)|dpF}J+S6L-k-4t;NX%BvO_9Cp9bFd94yY+qF?ffI^usT7gl2Ewn*-E(Rqkhi?#
zEgZSzC&5PJ1CFpSI9H-~mWu2q3xo`A0>nBf-!9cu5`lXnDg$iu_*d;`i&)f)kSiS*
z!_cXzKU+U1!7!1&{u9BWtRkKLf`kHUF~?RF#$!RFi;#!I@_5r53Egf%tk(+#g7_|@
zKK0#>Et!9ct0c}B@W-9t7xAr`A82DSnl2-o!9Xb?j|~dP&uPjf{?u@i0#Fb<NHe(b
zVT?UoyD!OWg!G!Mx%~ztqD*padnSK?VY|wGhp~2ZARWt`iHaF6-Y6;p2%7yeA2&-3
zTbX&G@1^}6XOZ7j$;9|^Sz#gwPcgqFi7I$mAZQs5kfAJ_cQmvGwFZra>m#%0zrl$1
z4u)Hr?K*}!5PfTvb4@okr`r(urX}XyOU{>9wXQ0bDkNCM1BEhBBz`eO8e-CJ%xI<D
zdqtP|LLrc8_k$CY=sMcy9AE3Wa-MF3A<|ZJyF%j#(97?wqXmm*rFSwn{f>qS`O1UP
znj}H0#g%a0?Ce65%|V&zi+Jl}=c6Uztc1AMK0&^3Dq*#4Wv#=VOt6t6*lS(&-On*+
z9?h{ZF-NQ3Zu<yqy1M4N!$aB$kbYy{fC+2yUZ(+K8Y%0c&PP5n+Y|8bB`=(Q5WT|L
zei;?g#mem@w!C&ed}w>(ZG`>o7B#jrvD`xGBzUtYHSwp*Dea3$3Ui3S!1f2OrjasZ
z+*i7stZLm6k||<*XB5DY1dMiqUH9FtYH2#Vu^65ry=}}-#VL7Xd5YY%L>F#+$`a$=
z!3>GI7&4sz$NqVoq|5vS7?CY0`3vDNMg@(rHovA@kK%D3C~WI~Qo(OumcP>~g=I6S
zeWkbCQ%7*tZr3-uzVO0bN0~Y`KijNwB|`x8S&(i%s<gl;2>-2k16=$A53B}U`q1@K
z$B`>2@&*JaUSY<7{N~Yk<P?|T0^E>Ne6}j8MF-fTTTPa9`O|FHYl~F<SOQz?xibH*
zsrF9#i$6$>3ZM8<K>t`CFgbHsF1RG;6mggv($0TMrPZ_C1_bl1m!cCuMVLZe;ogB(
zUDKA66`rAXnhDI|MvD`X*O84ki?*lQ$9^5N*0*H#MGPl1ju_>C5pwvZYoqk@404W*
zGH<1IEncWxoNdPgo<RKlp;ip5P+^Y3L#O-H81sN~uD0|&9`Yw)V>#29Qx(Vdsd|!M
zkmw&Dy6LXr^p%DfiVH?(c_H-*oJmn4xf3Ntqx9L71q#4^YQJWp>xJ(N=x3k&Q9^v1
zUDuncr<;qKSx~Az<Zy_}tIop3OFLOeH7ilGE$e!e=U+N_K!;H$sNXOy29{w%uULvo
zm@WXA`l+ESB~QV}CH(<xXql_FAO0RC0ZynNFsk`q9!Ucp0lLCI=1#eg7?&DeXX(H_
zQ~|{8!Eypv8nd4;Ij5A~5~J}_TmU%h652RHpG<3U^FD6$szjzTAR}RqdHu=#<Rv?w
z1UJmvB1Ke%LO08y8A#eY+Q(JdRj=wp>-O2+pPWIjQngRK{#v<FGFy_2e|T+GylKr^
zIUN;r3(HgT3`a?Cos+Lnn`~d5sKMzlEcS1YH+yWgDa@?2J<K2OWEnc~0gqppe%yvJ
zm!oEGaM`Dae-m;&`TN95q!)ZoE6+T9KOb=K!VOde5A~5?8B<2hWxd^ukQ5p;fH3n$
zLRITcs4M*})ZB7P<0o)`uyOubZFLPYflTf7&jIn@WcnEy=6622N;&5V1wB&`c<0?!
z{!9N2P=5fDkaGviX1MqrE?<S3^u)Gc*z2eSz(Hm@;kf~|Xq$M(hsCuidJHa|I8P6i
znA4d>B?1JFv%hd{fW0fAP+AGAUwHH1@G2ii=NGQk8-J&<Ve+>HQvMi-8&pJa_yt&2
z{#?`mm-F2(ECz`Hga4BNEGePp)+bJe;l2BFI3@A`=a2(%eiSAvQ2dTU8-rVo5Ql?i
z!<J&NI;3bc*IilpOqRM-`PnjcZKQ>@;alUg0E7tuI8S3JZBo%$Z1KL56phxk-|{lg
zPbQ4lxh#d|f3+`s!ytJrCk~(@do1<XZ9Ws@*x3R_G>QJ$E$#C8#<7}R0wmFRXF|R#
zdeT&K>-A??zSqzSwwCKV;|iF4&mat!N+*F}!5Bw6>t?c4mG8bfmgza6UKTxtk=zNI
zY03FPX8r)QXYrZu8xvh85}dZp+dUdgM>j@|^{UqEjpsx(T<N&m_jppGaAyxz-Pr}3
zeb|OBL?-T7EhVLvj}`whDRXEwscP2{*pr|PS1t3%yY*Ku-Tbt^6mAXQ-LC7?l}!&?
z31N0=8B6wBdp?8vP80tc4>Sq?ORR5cZ$`?odW8?9rH@iKU)DuSgatTrgxyZRW*?q}
zI<5a-_+Ktdvz)Wg!xHcF?gLCY#OVYDFC+zgf#@iS;~K{A9(~1ltX9Z&jmrNKw%Jpt
z%q48RSq_{WeEygs*9yCpQufuo$ubdX3e{+m28dy){&BuWa+fyvp6kd9A^q=s;$cXM
ziZ^?4mfB?agXcyJw}t2IWWER|GDpwO!}Z9sT!TxO;E&2Y=t|B)#-9;$g!gn@DL{RH
z1t#3b^ic|zr*#V@ZUShr-OrguYj2Hf9GBLywRVNee7Y%*6o61TRm%N^#$cL}=om-@
zsO#}pepH-AyhvMfxasDd{LJ7lbDqofV_VdceG-nlILSWuZ=&Hk1)*6fZnIl&?Skw)
ztg9M9&av0<9kE!?wfZxq`0S9;N?W~2!Xt{b)wI=@;+gG&L)-J`Hx1sQnTwRIYUZ{a
z86JAMc}-YbbHC#wi{{rFe7$1<tSE(VXGvE&{h6^li*<9_E4j>W>towqc1Xu}8h*&Q
zJ#p!=<7q5cyY_1&oEJ5;a>27T%rxi!3m3f)#OEH&eRUhwse?Nsb-GJL)C+pePf32&
zRqOZtF}ZO)%5MJqg#V|R>iryYcvI~C2CqWhpuE>kXkyju)>z9QR$EEmy&oy11jf<;
z85Q3)E71_*9ReHI$O6wH#LXf?Neq!2BC`v&;Z}y}XLu(X7o9gT%QwOw8)A{ut{yXI
zYWxBaMzLsSDkvjWddY{^Bv;ICXFfuANYK|SJWVBCL3=GIChD!l4`H?lq>}cFpLn#J
z_vY<^uT*e%bI|Sa=4Ii9s^%jQ0mrEAC*)u$(e`H6vnrvlPDBrd6JP^4+*QBmtOl72
zF@-kK(V6n$t%h@ouFI3T`9o#OW}^grZ2J<fUvgogS4V2o1Xv<h7@x%Q?gcZL+@>}e
zzq}u?W%3m>19``zT4gdYI*(t@OU0mV0gm2fl3r)NJFgG3x`K?nGP&4HFmH}bwWvUq
zmLc(*!X+LL8SdH9o#(^hH1!OPOfdY#;eI^SPwJn;=!${@fjuKcal28L2H&3b;8Kkb
zfZ_pUG>q5~*)$S9pwJgsux-6;NLrApZoa5bQEhE%SD7-Oc+Y26Q(KXz0+qdm<|fRi
z^{>A7IfCbdo~H)(sb;@Oi0&KbH+mPtjqEJ*9P0?%jIcDuM;V2LvE`#dcNoP1%5poY
z*5i*!yp7l?T(-ri$!Ds8w~ChM0WX{+?KMK(xJuj<yR#`q3P_6WxjhTC0s|@+JahAl
z^kUMjw^3=J)gNLG>I^0hd>?Us1P^fsb#{oBmi$R%3Vsa8lv(-YVQ9W~Kab$ZgV+v<
z_Cr9F`;C<U5IZ`*!Kn*=Ig?YnN<*lG%$+DDTGeCoO~yR$d~s2~BDJO?kwy8gyM5qB
zeFaO1>4)%pLklt-GgdbOq<)uL@5VZV`<{I@gcTeS`Oe#Z%u9HR$?`-^gc$ZQx^~LV
z>utu$M#@O^*UuIxd^qM>{A`(X6g1o8<z7Smfr=s*Sd6GEA~6;W2)MN|o0*gTZS6{V
zlT;uC7I{^PeA21pe0)t%0v<t$HI*DhW7=DX!yFvh4V;>BF0XoTw=+3ilN1ei{!^y$
zeSv&j)+D;UH+++)wwG&<(r%`_5eW*uvR9RSM@oe>tJ$qe?S9KM?XP9E{KzZJhn&AI
zUJmLK9qaq%z?J5aa^!%@pKL4dKQ5^b+7)u;`bi91*2zA1_$<?lSzS*fzwW6GB;%b0
z*|gP>PG-w?EElrBBwxF?f0I4*`MuH5{5cPyrai@NB?I54IPFyjhvkLdb3q>S#+qE#
z^30Vf9Ca3A#n>ewt`xW1--^T35lQJDI;Tv@*Z;36U+soi%{|uf`@)mI`3I-uV_<l(
zq(}?lHXK#|xG=CUNu-riPu<*T9s)YQv9OZ)N{{62+Avpl5Dae4dUPr&mX%!xw7Muh
zk#IIo{Wu*)T}H*t3!vq>igfi@EL+jcRm%5k;H~lBY1Mz9?_z0Y<~g&dYg)DY9R9Bs
z7##0N8x-2o+q~K|B;7P>mbLXcd|ps`^nsJ2$ICa9$7~sH`0J)`UA-suRq8soKu8zO
zvIMU1VYJrJ^`^xWGqN@L)7ZSMQtK_v{*06y4@mJg8^gMV<f(0~aO0uAyB^ae@SQwD
z3A47B4{)#&Q`+WgVX)n8UM|*eJg8j2btYSHkVdmkY__1<yduo(<jfL~JOR?!(s`&N
z)9AnWYtZ<zmX-JbNB2ooukHAQ-A6~xi&kFIAT3lwe*M<-;Kcj}g{nuCKC0pCYxa<=
zt^swXG`=4CiE?H_St;hOyI0k_HfOzx%`pGY+9^>kk=fDB)RDgKsVIE<N;I34N_Kr%
zryE<WtQo<>bRUZ323i|pPfAzi?SEgK0Bk&fA4i3_&a%;hqMYOM$q!)yKy2j3hH;3Z
zG}S@f7NSg?59mt79H03z7in_WKGv?&hKk>LYT&XwRQOWI{0+`Cq&*PJUIvSyOjvWh
zv#B&J6K-C`YiN?%D|1tUBe55~qBd3zN<-k52(Fskv*yDHi;7*`Mt?@<j-AI+ZSN+Z
z4otoo7k@1Eggz8Qw3~|F{fZe0WJTVwzc(Euvz!}63%icA-b6+`G)Ik;b_a6SO`_|*
zcJ_GT_~_VTqnj!0G4U}s>>G!(i^;_>Zo!+KhRKtKI9)F0*DH}J=7p<QAr<B<xzdPC
zv8%3ik+n}R7mjv1TPOgc;mKX<`1}eB!|sEq8*UaENyXi^XmHjYB2@SO@t1Y+I!rHC
zBa`zXS8&*Auvu1X8$1-$w8-F2rzih0vlNsaHl{Hc+g;16K`Im`V)&7jzU(c9eT7)9
zpbD9cYkMRM`dL)7O`4q%zK`~B;WjAy7!#e;9nLJkC!OVzcP+gzwUt+J=Zg4~9{5-K
zthi7BM{g`ABwn;pV_e)!_sIF9F*Z+ifE3Kt$!iGem#g3q5kNWcs{w~6L0@X;AAtYh
z3}5k$m($A%02!&knTOoeuSeK=K}V;+5_S0lwy91t-tdSUxZ2!fS#qUf^kwL>I>Uk8
zQ}q}T+sp4BH}ij=R>=Q%)g8z&W&M$M8pYhtKJ~e@#bAY|A}sN_$<A~DDP2{s;68+r
zlZP@UPxR~R$yRbdU8d_?stW1qFSLvAFDP56jPBnIHbkcDATpo>yO?tY<<;DO=C$lc
zukYtnPI3%?s0`6)(taHYke`tj6^~@UB=Mu<URts%xzP7N=L{u|02&i|l#|bDjq|*o
zsoAvMM+0@7{3Ppig*|o>ODZ*}cUg<+s}XY}<gpTeFsq<c!=$G6Uf%q1%H>A}p>F{g
z-If?^-@QDT3FMlD785_F^wMZy8qptc3VZEdbYz*WWE5zFCE24&URI)#EFmGfCg#_9
zqR<RYrna_08bbs@bNhoxaM02H7O{vi0CKIQH!U=I&BCSI5F0e@8u=6uc4mqP(PphD
zJJ`JaK*^r|3#JTsC&gl&R&hvzc5&wtW^n?(d2z6qB`mCo4XT6Q$?g0%t1Sq$VC)z~
zvr8x}ryGrt=~uCj2imv}+$4gM8g!ZjUi~-=bsQpH=m!l6T~y*_ume9YsW^b!U;PfG
zf;sSUe|T`(zVO)A7+FQ&Xe{pr+zHG;|HV+<U)b^4-J!B|py68t?Bv$V({=t`vsuOo
zuqr4~0*9X{Z&E4kw@gP*@8=QVVA)@gELU3H-tUl<CGw&GBIXnqNMp15_0*HDj>2q{
z0uCJ(#T8f_&TWqD;sS-CM_pQ1SzeLDpGJBb%_hV-m=d{go9fAnwrZb*OWB}y|K@_N
zQqAOQKH97!balfQh!%PSC0Zy(Bw>NShq7HHb#?-pJoY4}maJw|1jVZzs5ue5`OpwV
zAnFwpR^5$9Y(HTy>yd!_lBtTWIDXnpT<mkmuCy2dE&3f5t%I-VIl7HsIaotNv1VYx
z+j|zq9u$wT7qH2-rB*k3lvYZ*ghGE`TSOZdkyC7FC5ywxMzTIj$U+UP$8Jx&dG*q-
z_3du+OX*%yE^ptVm%91Ws7l-oGtk)DpwEhIp4jUPjD8L)GZA(KjpMvEXJ!~I+oxde
zx#oz5?ieh~ob?o>%g9B$F~Wvw(yd+IcHcHOTs<qX6AO!5R~$|2n(47a7Q#ySUrWO=
zDqx}cXZZ;pPoRR0opV*lv(H2*mWr8GiUb+Sib<tiVo-eGQWTbZoqLDri+=BlL3vKv
zb|3#?zBfhI?fsEuH<Zx}p;4R73AJI{5vu@SKUqkw)PDx!`Zlt5wffwCv3Y#_%ghr@
z@1#6k+KR%Aj<!H%!S?4ET=DPVP!Y_K5;f&Nf1;ZNp_ETQ(#N|xp^(>*gJ_B<T!Wcm
z3%S&%x2EO_fqpeGYVIDW%kGBG^gI+jBn>OPj$|#?vCN!nJfA6Hx@`dx&CvERlbrI&
zv6CsbUXH8PpQbOMb*=WRtrHGY%oucXKV8!foL5*2#YaRYT`AvR5kj#UTd$jDEM~}(
zD=wp^(Z3d<3ewuCyv`~7=eRKYYw}~oO`mw&-p1nhl9-wjZ6sD<Zpf=O{^TGKF`5ZW
z5vf~%Q_g1`o|VFHR?ts|wxeS?=}*E#r|`C%tFe3#<T><5(><c|dt8)mgiU6LzqZyK
z>fbM_=@?(jSmL6(1DL|oE35qC;rLqwBY8TLjO(fcOuzf|>Ls|Whdte7Rf_4%L6NYM
zUHXxg`P6xelN<T@=N~y=$DRcnCd8-UpT6dPT+Jzt&R0>AU&0kAFo{zc#m7NQ^?pmw
zl(yo{!E3O^_Fmzu2OiyA4hTG~NcUvfnl#zY0S#>ZP|%;cYO6D;CG2)o)-n2?Yqzl5
zX-agH%ig)fpL!8!$Kzs?Lm>|P2z{^YAKtH~MjFf)5XY;ZaY5-m=&_m8Ot)NUfYGJ@
z;sfA--@dE*GBdrJ%pbhAZ8dWr046`hBlBDa*&4i-&ZUZ`;cec%`ftzfQ@Oyt)OOXI
z3l`1a#)0#Ezb%WOEf~OU8zOUCm>B4xZ{XnzzT1?cjg8C`AaB_y;Fuxo*P@Hq4OY&W
z*Mz3f*ORXRdpNy@;lLXvk6C#uWv(4(2>s$*5!gQY65yH9-6>Si?<oTyn%`k-d$AMQ
zEU2fce`Sl|+2U7FdzFBUbR&cicM<pw1+#|}xXX3H7JM1CR;F)u2*G-D@UdRJyXd&H
zV3FoTJz#UU`*Hg=2M&l%@!pR6D6zUA3NFEl%GdbG`n$7|<mV%bw1kcGSrpyL$88m7
z*bX|o)?7P)Y3jLB+^H%R_mM^9{dEgxv)C8DvI>O{^!<F|X`cYZcgO494MC&j>T*wx
zmwK%5p+_0KU0pVUKlMsS-MF^b#xjWW`vBM#*`;8(;wnZ)3T!k)rqIVk*2t*GOIL5k
z!$|lrSrkgRgnre7el<#Clt`1wo1|y@@pwx;Lg=Mmr8v7`&3KoMU#cObyOK$R(j$ME
zPxy_Ahj^X9;%mhA#%m4+rSX3nBEY^pV<qZ<3NU&sOgw){)jyG~ArH`b0y+TW50nWO
zxzF~G2y&(E`R`I2ks2i$9&!w|fAI69<#KoK6;w42G<U1f?-vvE?H~TzH`!i=^TYc8
z`yb63Y@L2)Q4vzd8Ih*v(mQu@zKTRB_P{E?s{|Z49cYp()egHY>DtUKi0l5L18`vA
zhgkvjY-xZ_kFJwjN*2d0#t;frCbtLnJY5t690=dzzkx=r@5!N}m*OK_KxxGH2WKpC
zQ}iW2mo467yo+$w$(Cpapp>^&0vKmv<YQoe`dt9viN~s_5O`5b@9lvmqCJY1f#dQ#
zf<zN5MRBDQEm=j|5`&a09cb>PJC<kxYShubvj-BAXI4Z)DCxS6OgwN%)`=IG8z>BW
zy7>Scvg!Qmm$qA3X_R^m66lohM9&gW^gBoq7l8C6Un_88xI7pbDZ~&tnmFg_ys5?S
zH<a}6L)u|->J~dzG~;Ov9jeCc#2bsseFR+1h^O?w0$i}XkV<6;(YLb(m$kSMud<;S
zfwS!+|2#M23r``{^qZI^%Jx0%{ey&!db{YmJCw6e{p>6Lc|O+B!o_;8jQC;314onG
z`a272J8=c`d?n9x-1is>NhJ#r(61fnjDB(0Lsb;H6SyJ!-wnJ)+<ex66eT;Z)Qd97
zp{4fSOMInwVvl7D{9+XK17R&OT3<U+1Fl2s4*%J|pf++RfrkI!;2z&yN~@#KRR7H?
zz&Vp@N|G|u=Inn(l#3d=mG<k2i&~_%x%<oM2ua5tr$_x3d3_K08?U$F-+-nI*yd~^
z5YiJct^tt0AM+rT{1<lubYpCXj56_!xmOItz;^9^tO|7hi2C0;_D9J5i$Q^$^7l>#
zPNM&<Uw?$ozi9O{8vkXX{kN!akY#=mURql0arjB#-I-sonW2C2|8hNli|4;+yN`Y5
z+IerwZIRu^Ghap*2iC8Z;=9Xt7nm((iJK~4$C(sU!=3*g7mYf^=tNt)w0%v0yBhc0
zK{TMM@^68%7jank&Q+L6H>Zoru<~OZ&pQ1*81~Wv5S15KNb9@`o38-dG47R2BV2zE
zsqc~5EGWJcCV&wMsQQ<n2V@ckS>tmSg|Htv;U6N*V^t)%{_#wQzlG~}30HulI6@l1
zrcj~0e^`_U>Bzcvb9lzOht|{n--m29+B?)?Ze$SAIg@}S{Cjxz&PXuA-VzJ`=eg}p
zYz!-eelcv96+5U+{<6UK6DF0{wjRy8Y`HgG+vq>1gODg>E7@*5)X)CkE&R2Dquv3W
z)W2U^{1?0tvw2I5ydp1n;PZcq^NUA@T&4{}KRfng$mX0c>YTBq`P&G!heRWQ!GOtv
z?TI=6Kl|572t0rx{|^p+OtT|fPD!HlZ&m>~p9L9`fegA#yMG0XiVi!(f%O?sJQNU-
zoB$yQOSCyB9S-p&R(Ygsp5Ojc7#9;b)O?3nAb6jXoc~$)B|s>^8lVpZ*N{}}xZ}jQ
z&3qY%+o6YkMo+N|;R{QryKe10{3l;)F7K@$A=eu*!s}V9Pfx64+#|GQ;`xsg-x%80
zW&Vj+bGx9z5n|DF<_{p#G?V-c?o7dmwRJyJV#PUs+m6ntm-c6*{0Lc~l^o(ZO)R1$
z<bWcI{s{3+r~T;Q%)x{kXUKTIr+AA|lm_J4&)gH<1le+LxJfKn)-G0r@R^gJ{SocI
z6*&L*D0$G9{AD~!%7rK5S5JWdBA+`#bntnA^UZ_46i|DE&cA4{RP+9m?|XvWqeFow
z@y3j86bJT-+kbItpI8DW%T2Wv5<M^pWdD_`{e2<82?d_b#H$YWwf^p1;>Ha*1!0og
z6Fo+^JDlNwp%UwD7fJ#hxS98R6;Iq{`N(qPlXD#>e@FQi34~ZS5xoL{>c`d`-8A?(
zT~*^PT;Y)e)U_CW?-Ta+2;L((KJ~plMjy-Yl;dy3<ga=WqVw>TZTxp6{zd;d;me=C
z-Mj-_lXF-;tDNh19piz$!IQv^DknM8Mk+&oQ?b`D0aIQ4m?`UTKXq(5O){2VvUqDx
z?eplr2;I)nVPig4)TQb2YR~XNz&7VW)w1Ulp+;Jh7+S+O$e~kt(WFy<E1T4#R~lv!
zk$E1?TI^@KiN<?itJA#y-rm9HqoCJ@Mm|;yINYHetDji9LT8;P_P`&&@SP@LxAqq^
z$A4WGIKhwXMC6{={Kvs+PRnPR>M`d$Hu;xP?w{nJnSylxqu51>gEESD6x}xZitm_@
zJ{KYS>;@e93+&>+DCbnBBA*1uWnNR?-qs^9;yPE;j{OZe@#^&oq8oAlG)SLpoayOU
zcKkd=4>s#wfT=Qb;(rjE_dkj4ccrm7Kl~B<KlvPG<;vg_H#!07{TJndFJLr1EdIfO
zbYd5@a>D=7;|K$DLcu>_YW|5uo<!;2;?Wxjx6VnW|6uQnsBZ<Be-QawT!X^nGd4A)
zkC}f3SuV?dFedH~d;b@y=nwD3&4cLjKacKhqyLYYzH^Gs9RF>QAaZrfeMA8F{l2Iu
zfp@MU-oIh<Sr8cs2`9kNK?+JX`t}3wt)^on&tiUm{?*7~l3Vg;p&5jlIgh!P91DS=
zot3gK*!1@5kXPXtbZNffOeX$`rMz~z4T}y}-9o6f1)6eo(9OD1DHgaD4_(UWdU|Oh
zJ>04cw)9yrvpte4as5kdZ4^A#WoK*sr7>YHzo`F*xId;tgB*OLEh<7mE|GbV^L*0k
z6DspO{f?zd8Hb;^TZL-&U2i~jTqFp3EeT$0FF&e(Tob6mem>30b?OAhE;};pk9N<M
zqRGlH=~qf9yh_D=eJ#E|B)wAOCu2NvJ*0IRP|CVW+hqBggnA6{!fZqk>%A8|NAiFo
z?Sbtfl2=zwfV&t(CxMZ&pIlPH(^ILLsg|F+<5N1W62roJ*)yfJ<Gd$hM{$ab-3Xt5
zyijEqKj-I|^xHmkCcw#>?>3It4TZ+_n*_h`>+llidrcW(p+m~7a{MH|liIR<*x=KN
zz*My06)s(}Hzem`*9is@H_&XM*d_ZD;Eo$U@g(PINJuna@PNawCdOQWWDe=yN@v1U
zdJJDae&krHGw1ywH85#5%k9?}M6@L=kt}%^P`R=`#h-bNgo5*W5c?V9&<!pUlH#NK
zP^Pc9^A!nv31R1D?F#3IEqi2?8OeQQt;Aq?z%@4cNm3#D&2w*oAu{tOD*!csg#AMe
z+3*Kh>AGC@{zI&sI;!PwdZ|lPn3T^4=a0Vc5bQzSzJnJ&5z6mJw~f91&Rp#}Tq^E)
zFOZ0{%1KB%sC?pGLej5{@;U9`)HsxfZ^-HybY%M;A@!zp9Dxbwq+N<peJ-=h#9-FS
zgR^-=cI`&EO~)nFEj*CytJDU7+pVnjF8^BEyVWal(s}V^YW3F@kkf$e;t3KGMrz{t
zP8Zo5d_?DX-JLJrO}h$b$b8j=uq5Xk1vUC9@!LlPWrdugDPf?MM)KgEsnycpRoF=d
z>&c6OnuDiwL}Klmcjj|kua>pAi-QQfW~G0oG<CIlJX!282?+u)odoD=Yc|AF?6@!R
z4wS4+>#GNvWVgStUiMJ^yzHv+iuXpoZsrAxR=(zov7w7=CGLr)KgRZ)_hugOJAEvH
z9=J#n8#Z`7!bB&>YxUU0&`-`DmZZQPJ!JJLcW76hSkwJR7!Ei4r@VE#K;_8OsAJD*
zBPufzH1dYdn@O*T7{x`NdT^<hCjJ<3Q^t3}N7<Ay$4~o4llv!grEYX*TFE+_E!P0|
zmE_V8M@@F$eFb$#K|j8^aLO?0MU3xx-(%o0D<jtwUFG%#yliWs;apMDeJJSt2;t7Y
z%bzMV^^guezwB8>wP1IQ>KH?4vD`6gW#yMTx9=j0mCzHwT`9TLz~CYl*Wax1Dw82a
zW|@3#uLtPAsb-Q9;c-x8Wf1Afm9IHNN}-};iUbbXhhNu2j|QU2D50;26%6lrC%I1@
zh5c%ULcY1?47N4I8`1t$0WNL<jzcfS`$obeFZdt!XZBCiJiAcp$7lFXBbK+rIVcWQ
zA99m7z-5_DLS`Rc&1%}pyCO&(RP||$FIxW{9mxmV+i~$|=K?p!8o8TF3|*BJCvES?
zgrfV%jZkVu3gM+EqI<&8^$NnLR2lME_Aw^K4(Doi`cOXX$DqUnQm$sZMWd^XMg#Yz
zE!+YI6Usv+uiGU&?!L}ps9Knt85d}$k$vP5-6h65m945~z-u;o%zyHX@x`VE0pSCv
zfywjA6J|%xzBYYY^(uI$=5%O>!!Vm=As!0ce)66RP!V{CdUiRMrb!kgRt(<_`<SN9
z%}~My0}c_GU0`mP3A&H_^f2k_V=^$4_+qiJaxnW4aPONYP_5Ex+Va!mYzpw4FSi-^
z3g<3-UVxia`CS8U^J4-Q0nA@_xFOl`YxgxRb=T#3R*~1**ZhLumKdQcoMAzYGluDs
zZ)@pPEPXP`!CwwFr$1bPo{0G&vs9-4$<Q~~pFKJD(m4+mfq%LzmM@72w+E6y;#uez
zdTnG?NaW$vhi|YVwx_nzSHdD3CLgFArzAaDqbqROklzl+7oC>QjuMJmufWJr{g4<0
z^&8+44jYk%Z6iCXUN-UA$Cx_+SHx%#2Tg{hDS4EJg{EJ5U0o~f8l-W-!OXQ$wvp$&
zRM3O9fHav=l@E&|7;{J8c;_yX$k59N7)m>jW@SIc@3FjXlTq3!_{j1d0|nr)!iy;2
zt@2HSPyAfG+EK~7w2p<ZR8<c(MYXGz+uoYGlg3(An!%1T*_K;zKUhS?Bh452E*zs)
zJm2*xq%55>rS=vMb`qf75l8f)p16s|2#Tu1;cS_aF7yc#3GkT72sI`CqW)4{tm+q^
zlypQP<$3IR=$nT7mX`y6*plKxl}~(tXL>XC%jrXv^RB=RH_vd-f6Ky8O`3Y-TF>cU
zRbqb0zZ@EjCQ`bLz`HHKR=xl<?}WT)ieMmF9*($VZUfu|^bF_o*KuHRlcz391+ap3
zK3?~u`}zR5O(zU!J(+&yfahuF)zeuiXiCUd37fo?6dCyXoisFRK0O}L6Syocys38z
za?pfy1m#pk5`2T#$aXih+B+)?w*VTdbppX}ex26kE1UqhPUkH2*CHDLycE|b^cjN<
znL|1^x*N5Gq0X9#y+B3rSDh7_Kz6d=(AOsCWV%`m-ggeUDx~vE%`a_O4FPu^;a~i&
znL<-&*QYUQRxwY|HgG92;E>-0jSH&Ej~K=q-An+?f;jg3hkZf#Y>2(m?qcZSID_LP
zHtvjks0phiiFSexR`|luTX5pL89O78u6Di$!FK4NlL^Tyuf4mZoqly;)hI(E61XF3
z6L@TmQ4sOjcw{a&+UXdqqL6|cj;`G(w?1eOn;&cIe4A@_o@m;F%)^9r1c?_z66`+l
z;8fz_%;vo}&69IR+D{W-Xd{T4*E>yd7&Db?YxvWk&GkG61P@xADm87rE<V|B^MPqA
zS^_|vu%b8*9hu8Es<Y0(99H(2QdLH`sL@Vsyv|>t=Th$-ZX)zQVm@<w-)H-E!pH-C
z8A;|>5ox<n=Tix4S)DX)fO$EXIwLo#1ny893pRE#6C1%1*O_<W{;&4ir~M3X8^EJV
zMn`#!=Cj-<D1}M))#LQXlIc^-GHw}a!*d&g@g<L$&)ofOva<kkcl!xr;99Nt=>$KJ
ztg~1TYP40Px-W%TCYB*)hW(k9V$b~Dlg)yukyTW4%@{yO*PYJ-ds0Q;umI|{RK?gC
z`Fe6j;EebW(Qss&?RJpFwT3Sxcq{3oFJqG?dnQ1NNCPn>?JtVpY*YsMT*zy?GN&s`
zislLY6w3SGrmshd9XNWw!dn4BM~b<1+6&nioQ(Z;21C4(x`-M$Ye>b#`xC1t8Q*wr
z_Z9eOd#}YZ0dDs;{NAe$*k;1U&~EVOQ0v`KW2}PPUme$vtcp7nt}O0Xp#Wx<L$kUA
zXb5NMzS_n`*8i75iEjc(h?na~;AC|R*L_phlRp#Rx=9qQ8EgKGu-+LM+ge8`mww^m
zk_13VHZ6*36pc43)0vf`d9%5mAaTKqyhz5S;SkYqF}15Tb6*`ZdLqNbHYU;&t=(}9
zllCDykIx3Q_YCQ6e2Im-hB;*F>=N+0<u>}8ed|l(f<OhoyRtA{;qi`fXmfB?sqC8C
zg_(A{uZuPG(ZEd}?dT2LsvG#4)j_OAZ{2!g9j2C9QhE2$`m%Ecd^K1%Q#-@MbU9&k
z(FDN7Jt8jB>ru?Ro&HK^W}lq5*?W=FB3n`WF|Zac^a01N(r-W-LSD!x=?W~Dwk`1c
zBBNo>=~GV-O0Ir)6xYSN9@TQtmUqFGDoPX6UfBTMf*xUjYjfr0ox9pza&amTvZFgq
zhK!76*u!HG1atkXOsO0bQBcA{1ks`38>p?1IlIft-@+cT^5@|SfvT<e!$aWq=8(A;
zSNZF~Q92DFqIh6OUr~irC;dbQV;b+2iM&%Aay**#=4^45Hyj2!UVK_I<ycn2DUfH%
zo#3)e#3L)!<0niDO`)f>>*w0jc{cKg{5#wN+Pg{>+`TsPSIbH#5k?oF25}EREa9Ev
zdk|7zfL^LCiznR_B2f;hne<amvKZw{@XUC&ydpSQZ24Yty|dlAc6mMDvdv@ri@(iK
zc`gvDIp5FmP<u_=nZyapM^IM6ic;B$YtFpqwqOAS1T(H=JRe}F+RA9seKI^8aW>-E
zg;41@4tK-m)kseD50scserydPEB@Kh4f?W;2!hBZH}PXsGt`usAx8SmqmSoXGBS*Q
zvDArUr;mkUB^H|gANIaH9_se{d)iB~l(JK)q_VG(Q7O}1AxlXN2}2md*bS|yER|$S
zlAVy9!Av1!-v@)qK8$@gV|cEa_WOH(@83Vq^T+dg{r+V>pU<_NbFOpV=UnfD6rzHg
zLdAuX3sZz*%3-{n*Gebe_RUJHxN;g~k$xfTso>qzjBvNn2HZ@F(<P^}4J(eC-fhF5
zRj3{Y3pWn4Dlb>baU`EQ7TPKcji${<CHB(V?2t9aMP8K|JAmWAk;)=n)D78h^if5w
z$`5V}`C9LAGK;NFv9sBX-<iAY^tfN8L~wvl)q$ZW6-Y!Z=S)PfL%2vy|J}I#?1DiR
z>|84Q%C1k)PHz4zp*K0g)#&4+_;Z~}64IM{nl8J@>4dq`?24^D^0Qw|d5wIk)1)<K
zyt(#D@>uuFqj6?r=M`}I3sID&hb2`Dj_nSD0w(aIlzCC(4xa--JR%CfDXXnJQ0AZD
zy}&NsE12cwQ|52WwV%EPN)=d%mbRwF?GN+%DvL`T%8&3U&34W<a~;cptBa-v$b>}P
zm?lZ>lz!9RzW2V=fY-JC&2#7ZO1N+R(2DGb;RlX>EqLeelp<kTqP%Xv+}WG$H9kZb
z8N1fTBk5jO(~DK^GwYiueIzUg?xxKLfOGC68!$`{%l;xFLrkA>JM0|h(OI)hP#k6A
z;5lHQh#7w!na=h$u+UHFMD87qfCDC^`D2>CPf3y`MtUD4LBUFO>~n!f%)YXH4lHio
z;UG}u%U2py47W^!3Ou13HI{t{uZcoCg|wrlb+$*Q!4<#Ybft5T*!#S9_PB|rOIKh&
z#IuW}4J14Aa5q1`i0h11su&%NCqI_qiCa3qeIrCcgM}U836t`D>JOX*jFFm<BD@`x
z8{i49N?i$ez!7PetT@XgmboX2J=zpp*4MA>4I0JS_h?JYm?gDLO}~sW*O!pU#cQ!?
z-}zFiUEbir?Yv9+Fq)d2^W&V^wo^I+v4|I3tz}#<Bxn@#j2W+gmPdMx>Sy#AnGRfh
znGCt|F3>w~l8wHwugyK&Sr1$6fH5f_j;KyVCy+xtqn_Emed~}fu~(yIUN;b4>*acN
z;rtYm(<x2&@!5Baonl^VAnXM?>S(8_axt<bzjmCaQL>%@#j57#KP0AZ4BL%fa}wyV
z2on*nYM7plv5MqoQZ%Z>6X*xH{1{p1;8+3KKA?V?!onVH0VYai2Gv)GhLRqC+354d
zNLa%~x+`5RLMG~jShQ5FB}XlxiD;^3VYM)Gg>JVTKL8naGVFe=#dT-o7`22aEtVHT
znzXc<k5@azp&O@mUxw!$+05`vn%&W_-a7;Q%bh9|^g5m-ZF-$%kg`P0@TP<$QqNe;
zC!YJHO--yBA7+tK`a;=U{M06BA|TVw;|+^qYrY|MMA)Ek_ZG3c=mE^@wz=&7h6`Vw
zDMfrP3f+|{w@bA5RcEX`{e;ZTlun<1;Y2bOR)X4s$@p%U*4oCa8M5aM3qpNGac1k*
zW4MG@Au(qgBz1ha`9qf}?yQ}TQr6#R(}D^M-vck}e>-UR#Psvko9->vw%u<|r@O61
z<{vmMbZBhcG9nCL*DCt{(tMpe*f#Wo`+l|;pQS04$Gd1$Rxft+a%E54j?;<u2*8Xb
z9KlhmUF-;((d_TM$xk`p#}n}jmiy$H?up!i*N+Y9+ee9OCEfYhvG8s!MuB4#S3y5y
z+haMIq&gisIT4t2n0+PGmPjDG*KzH}<f-Ux;fj6B78)*9o8)<xdK4-E*!_vbbdw{{
z26HymCDk9=5hzz{2K+##vk@$D^-oJ5X(&d>C2B?O4)APMlcU5*e_5=kT1+7JrVFJq
zo$lOqrq!7==@+rKt??1r;hK2E6Y_1feNqWW0K<&kCWeP;T^;Dzdhc9$rTQYTbi0Yj
z+Sdf7iHPcb_yG6vq~g(!`ZDgc@fiofWppSRMl*UCtuknfklehId7`$wDLj3e^EYqp
zrtw}qVh2V#R^x@nwW;-BgY>W?iNvo>0Xt-N$64RHSnnWTaM<}sXYZZP-g$yj&4{}3
zotLB=^5S}5n{=<hrIXkN)i<?;3R($r^=!Zoy*GNZ7yrp$q3yl%%$k0atW>8pU9#~J
zfQu$4<$@u?Dr#JTXE$u`El5&;-10VgU+1s<r!Wbo;ZmOAfK0kr<ZiSeF@H@gS_sXr
z&5Y6ydu|G|z>EzX_>maV{@f;05NW$yE(b~86t^cTp@igniJDM45j!V8$n!d)Q+6lM
z%B-x4X<a&dvn=e`l9&}Pw6>%~4>w4eFEK|<xs1`|7iRb|C5g1@r(4@_$>eO?qBm(u
z=SuQlND^B7(xLd2O&I-)&UO3WhpIl}4v1KO^+nbDl;eptbolHrgdx}o?Itcs688Fs
z$T>>PFQewT5Ltqs{bTp#KD){TQ_XrhG$2=V`lgjh!U^1hb;R;&`bdf=)<>8(^H{XB
zGb$k!DscZBmUd6}nqkn!&(Gh&r!+!(9x=Uj(zVN`7)qy(U|8xW%C2V@wTT=;kXa;s
zjB)bl1lggz?Uga5{?ikoPN~DmkMTn<<+<thF=HWrZOpLJ`Y##xJ{Gq_Q2BQw9_6Z0
zQ(X6}-|i{%zrxKYp}W;(KKreX^w!M*&gC~_9NhHxZ7qJ!*EXXoA0wr7Xp~mow0jTW
z>Jlzt#i=OcV^2oh=X{_i3Rqs;&AE<Gqy|wFemTan^PlfxnHzI71N_Fi3K;iLo#ht7
z>?AWp-cdwP7z-tS(0ZqJBwyb2szS4Ms0*Ui@;&UsJViiXC)~!TH@G#Fp9R&(;>#?}
z#3vAy+|y>G=gFBpo^SKbQ;~GGfU5G(bR-8w*#$d|t219{k8*Yz8<0r@)x#OG<y<$U
ztOzG+1XXp@JkQqLvJ^?o_)NR@&Y}IR(LMy~^=0EK@}J|?c?XG85`J}bnxq(R(`6X#
z(z8-mC+#(Ocr*(towZ<7oR({AmvJX9i`)g>qL@A!9<AyVuG$9zy51zk>aj+p?Ihfo
zgh$+&4Ij%{ikjTrPdTqHtY&4~nkK>tff;E{Ori~M<j>(aiLR%U4DA*5l51|}co`<l
zmQN&iOUA9BE%0PZK}+NEr9^!7*{gbC&olk)Ig)aI$II`cW0fLq>z<1h#pvI)-H~w{
z$paTreY%$RJbbx>3yjhyq9;H-Kc!vv%+zWbtBu`X8P=Z5nJqmBYA<Juj$OA{bn2S1
z`IP|xSZN~<6El+p=9-$z)fUStv3xiD(JNn+M<zA#{8nmdHcS>{&&c%wm(6)uOc3t7
zOcF$Y<;ZjmA=fwZd}&G}I7Rsr(x9?e-=B*)XyD@4xrkD|Z_{(R=gAHH7`-%VRQ6$b
z-meT92!(DwCSmxDi^b6+r3}Z=;yNPVuf59Oj^pj~JzHK{tS=weAe4&jO}IFZ>BPwH
zt;ixa-LC<O0X!R`E9>_)ffV?c29`dzrH&W95#bo^5^&18gbMH{G)eBZ1i9OPc%Xxy
zW)!0K00sB=;#;6o4tU_@^3!Bx&z8N+<}0n82XUamA8Q0@i7g5jdA~X%h_+Nxu0tZ{
zL&PzYW=Ow3F$sEvHw?q+3@l!=+6;?TRKr6?VHaeP>iE8L^GZPJ{2Sy!51(&(aa=>S
zY{<>$c`o98T^CO(P|j0Xn%6^as^^3ntUJxhp8b|EQ8@1g+AUz}g5S)?)zuiU%?85~
z2Iy@koCyGsuKXfYxzprGW7oDFkeg{Fxq3``0<+Xvd{2RLy=T3qVK&WPi?&wZb>Lg3
z=9IOY0BG0K^3k50mjC9IB0t{9W5St0=X%r-IB5jH(st+t0B-ns?Qfm1k7knN$y}M`
zUw54yclw^cac!UV{DCk_9(_%6^O}Ua48=C_JfCp~fU}a@yaK@CZ&3Gdfba=13EKu$
zE?;VJpOD+021?}^2vPQ{5fM$dYB@{Gl+G)*00nKid#fnn`NS-b^+Sn0mJ<&)L+<!{
z(g^|*pVNkS_F`y~nmw4#3CHLNOdg})0_;zNwm?9Ff`6;pwTm*C{t<<^s&t6~Yln)!
zwfDP9FTc%Y-3@vmV6bXJV&b$F`Nge~<4aZ?n^BiYWTSQLghS6UcaiV=_a^>S(L-iU
z@fPoa?dp1Ak9F#7akRx?SP<*a_xz>z!L2>0<Wxz_M|xnMetn8tW%fl~#(IBb9-(RR
z2B_kur($PL49!$kHx`ABZr#9gm?wtO4o7J?8Syauw6)+N2qej|p^z#skEIDk8hcFg
z<{_8pEE&OvLr*R(cxVz9Yw2fB-kCE5EB5be1+UqY_*CTOJo}XU@IvK7?jX{sg=9@-
zx4~slNW)m<j}jbe^HiC`ESu2KIhZlVZOWV0@g=+KJNRdhpS8r`8}}ddd}<yr3@#v4
z=yb*1Z;}LAr<}zz8zFbIV|aHIAO+uf)k^O?@B1AP15cIjZ+58}bgjF@ENWWnZ?{3&
ztS9%^L$S#SrY#XZ31qA8c6@7V_EPc0@H{0F^p9dB`3kJv`lrh0`>d^H6!&oNLEPFO
zF;ICj6qHjl1Qn8Se#6jQKH6OA*4((D_vhP1(aBCMpp=xZBLnF}_JAWSIDFI7_T!1Z
z6Fi9dV$&aj0hya=d=O;gwG=W1MN(ri1L10@-yWQ?e0o+rz%}@;jg0x_Fm8{sdq9i6
zPjscpu3@#i#n{Q6<yl%c^Y`>Qn5n{b)FbYo-qv<7(1-ZLwWl5Fd)2{8IZ#LUWeLRe
z!r>J=sN4KSsMp-cqJRUv<_CzNi)he;^P)-RMNzkP)lA}BT@->bAB}@R9uh8WP{5OM
zDeT@bU70=@W2ZZdnu)KQUgnIfmdg?x%Ne{Va2KyRvoFQp#c=Y5z&fJ#nO0~f;^?63
zNt3M+bQL<yTf8RU>*OBzjOP<0a1JEZeuq!NI?Zrob?t)mr@gGaPI#k+EC$^3;HhxI
z)vsBahN~*{x~2YgjUG-+LdA%$b`Sf+gkACNJc7cWZ)hs`q%U{jar=2N`lnn7j+cS#
z43U4K(XMHzJ5p6C?!Go7XgIs^U_ZNi^VSq)-J+yLd%>7*1SJ>z8`#4!_wFVnssGx!
z$7kZEVA9t9JET`FkC+TI-Jt9r<-HK~-f5%v^6H+*Z32ZK3a9#ZMtTUkub!g?09q0w
zD{3ptw^z?-Cxxpt9Zgy-ZCI@zbvvkY4<^qZ=J4{ndV#GXy<5xnc`9i#j3K8h!Sh#3
zB1}PDnB~xexIJ?NfHiuq>T~b{jZ?F0M8MT^j&<n`v3q5rQqK6)66w4kp?jtd2GY}N
zxgJ*QKfb9o5!Y3N-puoeLtTW-6QA6(1F83Oe;YVB2ZMHiXgh(JfAShIj{Be&6a~qb
zl%w7*h{kDjMXyt0BQ?<rF?FIY(43VjPC&Xp%_&%%wDuIt3|fHv<1?3XBR#654JOyd
z^5t-g-SV&BNWZ%wclbL1Zy};d<gcSlw@M-t$**clV_^A?(C^=j*p!~Uhf<*>Jl4=n
zt6JQ=w$`Bhp>QUTDnGSCpvp~QNztB^B0oP^Y?pGbx7D^bffTqdHOX0fBECyKH<~&~
z#|%d&B8C`<*{jRjzH6F(^&W3wghszzJ88-k<g^v$w|$9~irASh!a*6<5*}A6n!wg6
zskluIQ-X*^g_EzQ4Cj061ZfK{Z2z!~V187-C`pWLcEX#I`4OV)Y!zrB#K7%=jioYi
zV~rA=3B&Xq10VWJ*rX>O#+g4xP*aa@lz*mZPc~Z{4(iEXDGREe+J8_WX32(dCfC=B
zvkjUOrR$OGtTQo!ExXJ~iK)x}el&u!$Tg+&bqfv^Rok7Bxf$$`s`oS0?sg>1DPI6S
zm{Qmmp*@plFxB(sBM~)oZf$*K`@#O16z3}wF<s|#gRF$xj8b}Zsht<YR#Mj&N9&}$
z=i>=%4zI|7xr3qO4L1ag%T@46k8PRXPSjw@R_!2xdxymOVzMGOI8)5B4elZH=&WP8
zZ0=d&g|Ty!QU?zT#Qx_76r}2N5|_J_3178dQA6J>bk!~3);S3Vr-BNdq<?HiO)TM%
zk`2kZPG^AZ;9T<MV+64AEVMISKH)o=q&f5Q5481opqf$>bS<BN<O6$9&n1)LW+xdd
z!8VPQ65S%V(IXJwozjB16~_{lbdl&8A@NQlQ^y`MF(0kL`CZI(URL6BYS|U|UIs4s
zN(q4)uo#sKlC>n4y(lH^p3lNNrB&9w-FF`BZzAQ1`*43-qdYc*O#i!Q{aGwpeIxg%
z0*albZGU<{e3<^-2sU=dp2b`~#KTEj=K+FBmfK<wu0N+1Jw}P(`7_Prn_d8j`pXRg
zC6X`qz?Heuk>bgmaar%VEg&J@{$JlMdbsx7<VlzH;RIf2rrW}$bWNDeo5eEmu2Yn0
zQ(<f4za^Gpj*Ee1lEfp4yUQ+rarEksXjw8{r#y)66l-ykpWy+Q*nUr0sp=Vmju5xf
z30UB;;@2yRG>AcMrv0o&w8Y4fwL!b6HM#GG?nmb8*9Uk?{nbq7jp&R<T|S&WZ&v6W
zf5jt6`Dm=>7M_5{|F&8nB}^KI5NY)fgx4_-H)^c#%3|u~jC+^AOb{P(8y5X6s<`*Z
z=yt<}=NMqjlw^uh)F|%1{?vy%#@dVlv7)0Fy(uH&-D{x|53KWl`p|bsPrxOybG1%{
z{B{W;TWUFHMuZh&eINrjV3syIoo7%+hdBz2emVZX_Rg9`x*wb<qw^(d-b2Q;#9-Nk
zGJ-9m_OIU^`LiVMmu#dd*ODmV#_sLbn#2s+XyR(uRry^C$9tU_C;&)M{VcNk+PD{t
z(=UviXE$M@=Gm9+5``s_7~Ya>!Y2aqUp~UG8phtqYF*txTnq`8tq;ua{E@%<S^1-Y
z`h2){|G{C*gwiXCSi#!bN!tX$uGXp6%lH1LUkmlF3+KPaP9@pyme|s3^e+RS3M=)u
z-8$VJy_(jtWa~}Gx<jM(+GWUoPjLOi7PwqCQCpocSf`G9;O!bMbrDbY3l;aY(*t;r
z1N@aS{UvvqkHT5kR){vlCETh?vCZ6&(%Q^m)9q>KzpjvV*h&y?Ef53}Wz?L18_#=_
z;V!-6xxweh3#qBZu9ZndZ(<rf>IG@ce-KS*Y3*TDPpwC<^V~3lm(3uZHWv)5>_d0`
z%N_{T8uA3V^*I{3U^G#tcj@`B;P|qcxqlPAN&$p``}A{0h@MC-n{+5bsO104Oe(8t
z5gs0hsh}h;Ge>5xf7`bp3CB_Q@MsT8s>ageHorP~taHPc8?<G&|6$@#Z-So2(qFnQ
zbpq(+%-~$ijN^@eQJ#n4H4N7dWBiWp3@|gv7~%e90<f?`|BW@`tF=?FCnHJEK*_+r
zEziU7<AvmUy95{cVD!BTa;^_O{bm1KEh!7!9`q^kE3~C<m)4u>)Fc+_yq!@@W3LIS
zwD?hG`%7=x5e_KTyEon@E8}YngkJFnHT<aP{iR7lwXMlpA{hRyAmPM}1EhclDp*55
z>whYnP%UcDCdL^X>9W?hO>U$?#Vc$6VzK6iuU5;RC$<5?w4Z7pB+(M|<{M*Q5z%dW
z@HyX<&Og5LbpY3$|MG@xB_=71mzqkRTVLs(L@Ea)-KU|_fqtm|Hv6KO=~?>mgHjoL
zRkz0bUw$*<A^7ST3Gy*yd2R!}DE;@fshArzz}~^EOL_NMcv(0Sgt4w!a**xb(6?y1
zL-ONP0m@<9y}Ss5moZ<j1(XWHil>X7dHo^{3FP$_`;Q+_lH@H>n;=s)5j@FFWGNbR
zAh)-`fBdS`mGlXg=OR6~Ha=^-K7V|N?46utN66pDn9#Q~x`d31c3z>|qdGu37=3Ez
zSJ!C^NEayc`F)En`!0=&E0c2*y+g+qHUzSJZ~c#NqFkeydg{jMX}QFpzaG72PKf#>
z$)+OMC`WfEejK`jCJ4o1O(8~}E=J8e)UrC<mTfvBv;;lJ$g<G4)ojN{OchkH@yLHZ
zD2*D)_E&LTh<*cYfRZbXu=F6T*KnQcomrAQ*JDg;|I!7i`MkjUPZPKzv$w8cbdGL=
zCS-Ey*lwND`t&A(7N6}Q$fZ&z?tglS4RvYc08UFsr_aY4dGoJ=Nyg2DU&kFlvZkT@
z_tikB#UN--l=kpQK&G?w2DtZJH77hD?QQ2hpdQIfTzfv@(Y~N)j2#e^AHjNwAK1=v
zpDYG?;sU?%$5{&t3ul>Xkvw|cb2c`bNT->#HCld+N5Tw?qr{xb?!ExLcnFN`Fdcy;
z5R0{rHt%BMcz+QKxDWI2<43nk#_y_sLKgU^muA1c6U+XRj({%?L+F+zE>?cZjZg<F
zSN%8sRoHta!-GcE$a4r^TEhoLiRmqC-PJBQ(D6~MK<o_tCdS|98})!rovC#8-Q5_i
z*W&0kYvD^`I&0~5T(XDL&IOs1t>#Jc#?$S{ub7c;ny~dI)Bt7Ee+XY0b)L;KXE0oa
z(%d5Dzd+|e{PId{?v?fWDR{oFP8&U(@7*e@9<I}PYkuoRL*qY14r@#aaj`X8jhqs$
zy?l3RG^UXwmwrl2c(guR=h1JXw(i;>W5sZYA{p3W4R@R4#rbZVo&yLW7!xdGJ-`K7
z6HmBAmQ`_RAtGU~bFj7=Z;OgQDcbkk1^u3XGYI22YTD8sM7`hA(C+0)7lCe{ZM3k&
z(uZsCcel-OYftUEMgy(8oFCgNJWGpAZj2XXxe95P6dF7sC}?0Q_`3xYcdtubyD#Cm
zwOA1Eqvi=k*Kp>=9#egwu9nw(CHuJm?M{*|myWCZd|#!;tJ6=Hum3J?skBg)*(pr|
zwi&;c$O;&4%Bgqij&^h}J{Gr~%1O9w?bV<KFVcDU_IVoM=1VfeZ>P1g(#D)OU&t?P
zpI7WTamK}~1tk}7)?7&KgP^DXZwuNV;=F~Mnjr7xCy~9W*Sqpz={;M#Cv9r|^KhGZ
zp_d0T@I;e)uZn5g%k16iN;U2L$6QPZD!ogM(4R^=lcjpUHuFMQr#O=!(+dE?*h1d2
z@8RDB=Zu}6qo?eh&z%=KKBMp@bZwPaGtYsWwoemC-a_Qbvn?$$R<V&sKCZg1tNtc#
zHM<dFm%?sy_O$DpoYyIvH+_R)Kl51aLH`WjfVc{^3+XqDlZC4X-8TCxBaxtMeXIu@
z%dGgm%YIApziB~nvuQL!PPo@wLWN0*g5;&Sj$|k=?P}ACs?Eez4v_Egxn7hRi_;Pa
zn6^}eJ6kAxoy$D*(@6KX3Cw}JL*-O97T^1y=_W?b(DFv4S3^Y%%;X%NXnE1#{hX=p
zonuYb=49xEuW`<<Gw#a9m*QqE%SX6oyzc!eO7AMcMWd55UJvt{NM9PYUTf1PHNFU|
zP*zYqV%{LBtc<xiu*CAGvUHlRG}WG*!9HAUnrgSqQIp@~7ySU5ZJj2w@g>MXJxVcM
zIdcVP@u#Fsg?bG|MRKkWQ}ZVdnhe{xMwdD?P7QZEjmYQ69>=sq*g_a~SLyI&o$_kI
z9q5`|Z?D<f8j_oRlqAB%szrSpO1-gb+QaA13D7Z;L$$B@r*y6hQs6xBr@=H*f*OLu
z3#A^ov5^r^VHz!*6Z07P9kG_67h_8v^BC)oQ~zXNMeb@XKgYC$-+!uh%d;eKjrtMI
z8ui|dTix3co`spY`vy0t6u(k(`ZuWn@gc+LZXunGJw=C2M_<aSOSZrp4MU}5DfFn(
zmSKBoGg`FiM6ck)1;KUHO3dGnU2tA)9DkA+Ht{YYKE!emb`Pf0m!<U<-S6<b%KiLU
z$KD>l(>m3Lp%qDF=Zh$z4dVD5Id#VtRIch~-q20|aCC@#)SuCnp$P<#uSRzwV~e~t
z!Q@X|fi#2B!dr;ixcFEkdUd!Vie8<wHUGF5{LlRhl91-_O@!#YYuZcun4o5Z@fz20
zfgX2TkM4evu2i0nn@I>xGgJ$@9X{ESAQ2b2m*m_YjUC!qa;B2-=+7+!cL@5>OcI=w
zd+Ic?z|sc^PelyrZe}jO`WH2Ajys0pl@UF1H!?!fj_=KpsgA|3f+ms0W0j{%{^>B$
zxqIzO(((hn_0c3EHWQ<I<BM#Aw<E?@y(hd*r(^Z{x%>#D*@*-^lgW{1SG&<?zXg(v
z!%gSzzLiy^ai_+P7I=f9UXd=_v8L86n;uEETUA<Ln`O^phH@syoL`Y0zuJIPNB?sV
z=y1(I1itOKC4bM&(<bMS4U&A7X?E&*EorZ_*@GEgIe8^r4U?Cs#Safw{Q#Oyhu=Lu
z7z0{Aiq+_?st`+7sG2<`E9>aV?%|0HDjCK9TJ47zU6*Fs=i<F!5J}HEP3+o=;;##P
zwub@j!xLq;M$X=NEtxdVWJ|fHwMG7s+zNw?y22b)_iS=(Ut7}iDayX7)oUqtufKbi
zWc`}%2B0Vy?Ut45n<A_yX@L@Zs*agm!hSvM?M`uV&N9Xj3&=&nuv^&^`w`@qUSnm(
zP`3)iT#uc~%k<!6Cv`nx-KaL0fFk2=%SRW%zwoKaOYBW~_06L+UvYTnT{M-KHG%w>
zDEaKvdFm<}zYeE(j>`+M@)K-+o0WoE>&mr`D;7pNoo@i<bCPzs94F*u<Bw^&J2{@v
z6u+D16?p&2+4~8tB9Pl~IJi(FtdM5>4s?}KDo@T2?a|lhyFl;+HUaC_K(Otd^w@H6
zOZHCAHwyaJ^1wEZ-_059D!V+s%)0A{xi8JdcrkR;U2DtB3!sYH<ct3fAxW8VxKfF}
z{<*w#z6aIGv=_*2<O<3XZH}|q=?+iNB0B<vnH&(Y7%h%~{-ZZvMzcN=e8e1paqYYk
z4T`@?Qp(nVSEvkk@dIE`z}=8#xlUQ9T`%sxUVJ(!k@);bK*Fva;2x}x!XhY*+wt56
z&^+!J8k@EtpEo^9;^}<GQ*yM)QZ3IG!7QEmzR17c?9&A^a<yN=nez(*{eHn*N@F?K
z1}rZT?I~3r>o`znN0l|$me_>+=AeSu0|OO&vleflfdhWnVlR3E9D{3v;h`%%dRQee
zs!n8*0h6?johG&59Mw3VcCGP1txS2QFE_VR$JkK>xkGBz@4y*T5;$&W!<Ju55<gZ#
zcIQjRy>7Yz)&vV^56n;Qvc14%STqwRxg~@D=Zd5w#z$1~L9O@I+Y6_7lSxvM6>Zwf
zRkp!tWS1-_-{szQN+w<LTiS9i>ula3z3WU^p_C<wch-hK)volC&*lKGFib-H=ZWJA
zpGD52&(u@|+OO_2UgwuiJ3bj2BXk{5!UUL)^Cl~9-64$}%lmF;?#NoKcpmLY%AO!x
zwBW2veK3h9Y3mTY=+TSE2ArBJhg6mzUz_!@m*?nU*~yaY##V=t4Pgj*j_F;HdFXt^
zHT=S|&qmBbZncH-7R`*S?-pv7<a9%d&J8t6(O$8cBpd+EDH0~au(vfQQOCH-M{mM)
z9`tXA5p$2TC>z<;&dV4$`<ou+R%CkDIKVcD-YtU92V?CSx)Co6ya2$I{>=#7O${HL
zdk$X~=QxOp-LQTw;Ov8R*(Rrh5zzR^P46FTdd<%fM(vp{U}9gN^($@6_FmnaNW~!b
z<#9~sT&4y{w6Hx4PZh79;wh0}+Go!ZZ#{OM-c(D)e!h$xAQCC6RAFDFnxXaB+!^xZ
zC7D2{?3tM2LGbzYSA_*WRt?)|!feMBV${ybY`S7q*-n^s;O8yzVlD)ozsxH|eMn-}
zru%|MI<h{qpPg7L@P02))2mu&q&{KMMl9GB0;8VtD0$^X_+}3o!7Ei2Uqa&H3LqUF
z6q&Z<AU$eugS*dd?o+D2jV`^c%7zf*-gG*xEdJ)r*1!Cts?%BA__#+Sj$JF-ZWwi1
zI!^k!54Z9@rA&K*Y!CZY;a2{c3x!xfZ-?~EP=&p|*!D^8nCbYbNLR!D8M300lx<P_
zbNL(T=rPFin5>X{YEG8hyKFs;JOy=LsxRm?Xsz7p5&6=qdb`_B*2gAs?=QLh7ADJV
zHW_}AX*yaDzdfFGlC50hR@#Goc))y<F(QJvwxMF)sT7o>`V_11D%IHcTrgAt6qGet
zjuTRWvI0R|T)FGTthcU29Iq{Bi(iV*BAt|c_{0Hcy;+s~g-ed+X|S~eu%VrZJZrY%
zem1DmRNI5~hPa1v@<M>|CG(IJ@5~bvC4!nYW<sbIgrp)6!(GuqL#M-TZwD9?n5cQ!
zhsphwfcG^t08>8U9B{f^1g7sR=`2%ZyMKSSMC@DhoV0Yi3R8(Ymch>pykxY+bPC&&
zMV0D?+*JdjEMg}ro%*q0a9qgj?hHx4CtaB}f%<jJP@h-oP8lZ*xOE?b#?-@7TTMiR
zYHU_kl1mzvBZe}qw0?<Z-&`i&c7{&ctma|H8~@s)^ffa(;?c7X_VI{=*LJdX&SEug
zrkV2PYaPGDtUQ!I@_gA9#SACTvSu<%qp9ZgfLl^`!0#Lq*T9XiGS~U)XLhEdqCxE%
z_If_1TF}^WN31j*pP`@V5WTVy)01on9uQD;rhjBpdX}lmqh!(Pr?GkjvxszJX6uwQ
z<10)~GqvU)C<wR#lXC8_33NFG72v;LZA{=a^*5hj+9M}W21<8(HSrhl&yaO{5tQnE
zurHYOktfjsHp(q}^5)DgowKh{ze_AYaOhf8Q&I2Lc`}f{IZH@D$pYN0+gF5rbj?x%
z9=kVlK%cr5?(F2>)+y5|S8SMZ)%m{A%#7tZYHh_8VM=K^+koWgPKZOg1R%S-o?%4*
zt3DrsB$1sbg02g+Ins)1mff0g19>-EewpNNa1dP~cwrY>!-HzNM{BTd*C3MiGOGNt
zEqk?Z!Endp%IzwP^6+hE0;05$;$lyuCLO{7?}$yDVZzeBO`R`WYJE^o24+a)K^Ldq
zv{Aw}&z`P4A0MWZW*!L{Hmb(?*52i_{_#^K0yq9?Tbpl;)SE@EcKK<HL)sOQ_7M?^
z6nBj}F8AsWdnd-;zRKW)8B@+)jWa|Db<SoDc)S`#bO|FaBr0H?jfGWg4ZJPLVOZp6
zd>Yc)GU=IWo&}{^Zr-VA5q6@1i<0m$_bmZHLUiBsW83t~brx{K?XNYwU3`-mmDi!4
z3jc__RdolJdEB)e&wI&v;{G`KZN-q6isWFc;>T}XU*?{)6MQVP&L4^t`{e{GyF7B>
zQ7+b$yuHTxd1(cjl-`<W6XDpbUFe>4nj``zrv6W})DF17WjwN5$szaoLmS<)@}`Jp
zSK7zxR%hO3JmAS_n(=tA9`f`%GmZVBR6c$l(^F#T4W}zi3HZ^;v0?+Ts|Wf_|29KS
zB3bkwKiB2@yjZboa@rhU)8TMV*tx^HZ-1Z<3aO-cXgl-h+p)qUMm5c{PdL6asG$uB
zD(DIpXJg2R1UqlWHj+QG?huq@UMdMaK#)e8^J?pv;n%M4`<I(v!vBK+rC$>gI1+dZ
zrT+LB4Ap-DhLjObmma>g%ylknzeL;v9%H4gPtzUFF__@;Gab9}ed*l!O`H&$ZkODF
z-DOb<);GC!L;F2Oce<p3{(LYlmtBdXzn!I?&{vxn2c8};Or-+VeCz1++^K-$(&<yl
zw^jYm9EvQJ179iAi);TxCwl|l0Fp0cH$1~Y+WCX8Pq@OyccwalHs*MVC|L>rUDEKD
z-R4hC68I#?QyUa}i!{W$6aUEu<PPO<x8VB%g%lIyn%R}&&^m7}*6i1QWo@}lcB^a?
zU@Qe*2jJrk7~+$bGB@2;L`JI(cyV?uxg(LsCxe!k^f#$`)^+7oo2DSG;BCoSUd)|u
zMvohu+6t#$$uPCb&~Nvq85lz>i?r{-8Wyl=$i&0{a6TN7cb<Kyc(c>JX?Y?i*@?}x
z(k?X6ldrAG@~oj;&V!UdM4a8A2!rO%O$O_Q&sCIVjOA6uh&jpC(j%dLR1SU5q$<yh
zPxi@6Dxx||of{Fi*mI@Yo$&4-<{g}Rb9Y80SMyA>p9V8Goc}Ku!v!9Ts9RSxE;(Eo
zi=5n3qjc!KTaQEB{xQ&wEO?oMHm~#7DXoC&@h@=+%u~ATCL76NBuOo$MWbGM(G!7~
z`8FYby{SDh1KK{d2MD}3@?sVwCauwOSx)akQ8za%|6y+^bdP(GX%If<yJ2hr37P2v
zWtp^>n<&5&1oy$|ImU0^Bmm`02NoN1v{^{Lbi?^uNCPr5Wbd_FwClq>ZE*vUZS$)1
z!;Fz|{ALI8=qNqPp7y{0{{L)QpwTOp`F37_@a0nIM9Z}?^W#Hzy%??mBeD7o?4@V%
z0>v~kR4*T=_6#ZfH|eQX#8@oQ$$RQrj91f9otgSRVJDZUT<}2EmWwCf0)!D9ii|`%
zBdlU%?_xdn?KLZ&FlCVet#h(R#&tpm{+k3ICzB?vn57mwHmV!@Wp+9)CD+(n-uSP=
z=pwmOYLRPWT_f9rLOT8jPAEp&l;M-zrYAouJ>SF6RHQ3|40rtzfW*;V|L=Jv;I};S
zZ#<VhGN}`~>E_YDJuM=DUy$yGK-#zd{tUUYQjtsw47rVPvW_`o;1Z4DgQ)(YWVGe$
z7W_T%Q;Xn=s=iNzO%!^}0mA&~cV$}`FpY9Txr7)<FOjbVixLu{(0_bMHrJ+IXA<CO
ze~8c7-*u5PlUWb8;p#n~{VjRWwSRgRZixGT`Hv{lhtBmm6^~Et7Cme5Q)khurcn^m
z{U4JotyOI5bMJr0`KH5007qJ>^!~8&*n2TGGJ1Ighgk{DM{@>U;rD3U(6*&*N87G8
zc4*g?2frSsG-hhUu7dlLbDA~+u7jn+SYL6QwMs$vnf7(E@YH9a)=FciGfronRGkL3
zllta%>HRQOpb;RPq@cW3&MFsVIG)t&omu8Sd9PA_{m#@%T@=yFW)8P5Xk_2CzBDYX
zvMPG&tkd|_ZMvMg!n*RhFkL-ei)DY+9Y6N_VfeyZ)i}G(wv#1GF_#Vu&l!88=8`j@
zIfX;@zH;k?^`2BYmDSjcuGObY-h2L>P}|-%?lyktFxwB=01XlaP_zeuAy}lI@Pf39
zO4dr%=Yi#)g;ML|mFYdJ+3N$|U8_|dlNCa`l}1jdzt8fV(|M=i=8@GnsSSn?f31^Z
zV_%az8N+h6#dkifNHNvhnShRT@tW<eTM)##%;6}UIFBYGVRc#w=L1U$EE&5yc7N>Q
zn9rEs*po5;F_u{A--pM7az*(bgLkCab;$-?AYxNnQcNj~f+yp(<th05lDwu{C4PE)
zTc#fW75J5?D?L~EwcuJ&T0L6){jn@Qe~wGk#VPR^{A(KdpiC4AncrJ9QH&jpU9wr@
zTpyUSqY;Z~g45d<X7v93MICQO#GKDLNiK0Vz$0!gzQL8)IrfMuHuN}tc4G-5T#8=s
z$OBS9UmrCmn3G?FBG(TClrjF54e{#YsRr~+w<%{3@j;}E@puwq<m4&a0Sh?e5uXOd
zmyD1F6mmp5-PtZ(^I(o|@rwmNAf~&$oyQHpeToX?yZ`&Q|6POsSq}U<s=Vovrc%Ia
z+e^z|iVrw-uwRl#N#R@hTik<e=IzoQ7K{4AwWm43S<@jm8<hIod$s?|N>d$7%<B%(
zamEbYBWg7`1z5=Utj)8QD4_Z51&zkOc4s4hD>4-3f1O9?DcAFA-yz*dKhfq3TfZ#R
zZRF(YqG_bTq^G6h0CLH$*O^=rDepc0rY=%r<F5Ws#VZDp#w$3S^&EwFsybAt{(aZq
z>KBD+k&IVA<mTGRc(3Q`<GSH{Ffp68zTUZSm84XarH{i=(Zw!QllC2kps27cz;(MZ
zt;joHxwCkch&~DrRLBUu@86}G`}9ZUU-Dw`nmU0E@j<hc8F2Nruu%++3S6bU=q0y~
ztf#Omt9WsBS!y<6lJKS=V|}@Vkh~Y);~>(#f3hXtbD0q7J?FokrQErS^O_Bkv!m2x
zB$5x*$NXb4>AYPRsK-U`M$k$BDqQ>fEp!B%shVmQP{$=9!k#?rz1EjZb?o@_8I+qs
zlP&AZ6kK8d!?|kW@&&-l%9qlkLrwg>{?cfy`?XA5BY0Uhb;`TXr;fT-Lqx6(21IwP
z5-duD;1*xLf2+|#hbRVhSbO|bu%j|x*a|(Dl*|#qo4%)DvNx7hwjaCNNF?G`LZaQM
zdxc*cuSTa6y5~ndnitp;mp&o?{HoM3(4&GKu~w%E&tDnFPpXJ~Ld*dOzH=+Mx{`Fi
zbg99(13EG(PK-=<+>V=l1a280f>N;JapV*F-`03P<t`MQgL%T1=z$~=4#nH#gL*x=
zFi@nqjmO>?JBQ3q6pqTr_6>|u{B%;CH7BBfmxjM85!`$SYm0~SL1Fnq&C%|ogJxtx
zsPYJ0*xF8xcyg%(6_u=8fLT00CCHJbyDyd<cshqcMR_JLsOJT>(Je`=?}zV``>*w+
z!H8##w7rGur|>vh)i8d|92(N6_r{Cn?6!ES{B}v}Vluz3N0PJFL~Pezin29*Y$n4h
zxW!oE46nlx2_b2AOWcT48)XKaIO?&>;dVCAg+6h+^p#GR#GiAOpuDzXDbQ%gTne&P
z!YuUra@iZNbrLYRm6q9YH@{#HdU1F$$E~m%c`_{g2pM>-B}N}lss#=F!l_QL_M2=4
z7GEDiDZYVrWnUUnC3@J*-M27|eskyjE9;W+6+a!18Sli>*+$7zW??JK+psx>wDuy6
zwcJimk`GQZT4;x~?{kSwfTj|1I%Em1Vgp@NpQ6-)${ENQC^1ICpES*<ckzF6-XV>d
zJRFf0e7l|p;T-NPH+ZrO=B0_o^F&=`?Aj)XNYE)1)<w6XqG$~QX;nalHRT?0x2Yo4
zHcHG@Sg%p{5{@@XAyYlyq`PsSb$gDRyovA{2_<?^Tu(gcb@bFoxF6+KR<kynGQ=cG
zd3Uj8<|1m-Bdm3xbIAAcJsEywZI+-b%uCY~mWq-<7Q>H1POBXUA$`=B$%Ar-YRgYI
zo|oI$y7%ru^NuGO+%WIfBfPkV2&Q9e8!xVl;tHBA)r+x76(cH6OJBuHd@eHf9CDLG
zu@eFrKYQFntwJIOH{dw<Od_`O5w^C8>>79O(|IAenI+Jb?8?pQR?%23HWfq-o9<5O
z8{*nfaUMIpw9~soMM&jMTmhRuCtJD)Ns>@-mz<{zJG2#|78AS+@=+{@1JO_NKMJz|
zJrG=q`(7R2c>eYZPp4utO5GwmS3+p-W&i4Zq2~uU<hMi?oCut5^{Pw&?WwBT(-{iN
z4dJTY13c2z*_K}CS#ii+d+<WD;<a<J$L%{Ctq~M|ojcZ?gve~4@MWW#CDR%a1jWU0
z_}RPl3iEi$c~TdUaQLCxkJkYOy#!a3<-iUB$W3N|xu}13s5G*)3JX==i@=on%3AD_
zmQ31S;#*)?A%f_-W|$yimS9J@&gay8K{Kyj?8jgLBQvD_thI?+N{cN@)KAd(R@ifU
zrp^F6n(oN#tQaC90+C~!LyM5)Xj8lA{9U|0-UMI2v+oA8G*8rHytgX~0oserORDR)
zEIJubd6+hI&ed_4r~!hX144n_B;`tTsjWqlB(-frc|RoJ*DIuq*87^mLGR|in<UX!
zpP}IX>g4%yGOFM5qFlfUTaTkmurBZad~lbvIi!(v**L7pvA?H`<No{&Ca#%$y+!4^
z%N4x5<w`F=>!g`&@<_gLdZ)B0)$fx10BFZYeM{NeDhE`8c<s>(T<Rm*1tR$8;9B*}
zSuf2EIxD9>zn2p|0eT?9?Xp>SNK5Pk<mJphpnriy%#ei8K+u^KX}hdvG3=}@vQH!r
zc`BHZaG+z;vx&b#I!X1WpfA+Kl4<{fTqo<}$-jM7xz^G>-2Nk*e%RxfgT2isQ<|PF
zgJvAlG0%7F@b+b@mR)8xpzwz&e7-#4y2#hVe4zK^&1%6izGDp2u;K0}HU#ABi5vlh
z8Mr|JUeeN>rNs=F-}Asf=@Dy44T|P~<Ksb~`fyq+{Ph&uSUzIt*=u@ln^sN>T}N-Q
z@&7K#TVwb1+d-!^HP^O4Bm%+JiY*UcoTxo|qP&UMX;qfzofZ%LZpMh8LbKLRLCMpW
zkxVDLUfsXCLZ$!~gA-*hNjonw9RVCw$AU^Ds$*|kGKo`^Y>VWYvwvvH*13fYFL~vr
zO%P_29Y7OB^xrvu@+@XKtolhv1D^Vbb<1|&=ohp5szHx%=D*H<I;Zm`%PE%U>XVF?
zNB1?0JqY@Te+ak}xUB&Ba2#w7&lxSk;kLqtc9E+Ejid+BiH$GPgmcl41cP*sE?b&a
zG-$a_J7d%&IJVE9vV(n6&G!n#?GcjAk}~tqCg^q+V|#V-jMM|lmn%;XSO)aQmImJM
zf2mV@=*QBM9;$_HxC=jdF6@)}U*D~X1R#h~*a`ZY2Y)kL--Q-<P{KbRW9-OJpJEf_
zn|#r`v;0_W&>P`yHeeEl{vk@>;@LOv02l=SQhzTOz~99A`-_j(mK(Qhg>V6OCF&1-
z55rMA^Z*Ig2kGC(1YNr)&W?cGwD|q;{~P0C*oKY2eV+?x!s{)dsm;#?Vv?S6EfW=9
z-w5FX*JXYVl<QIW5`5j|``?GBv3=&=g)99Q*vzW{@8{G0Lm5Hm>E0z;XbrMpt-k$a
z+>dpeTXX5AZ%NdFT0WyvW^iE<sG-^!x*`^3wM)!pjTBouPCV_!twb4n*<p$g?~wi=
z$FPd@Q9jD`;f8zPqVv+<09MQT0eI}k-u!wUL#yveID$6qzdsxQFr4$$0A)f};@WzB
zdp2mZ<h{OA-f%{7eK;}w5}rIqgp&Ca2_z5nk8yo74+|2Gbq!eRlbgF&Rud<CeONP;
z=C?gm0j`4a3{RJjt>b!?>WF50!HW#fK7$9ghu(g5Y$<{U+m1vU7kSS`8&jL+-Be5c
z^Q?2yZ0N10zFYY%+&yo&fq2|tk!E5es(AOs#hqk2V6<M5?=?2qWXo~C0t!RX-o|fy
zepXFT5Yso6;cjaj_Sn32tz(JR`iG?lQl>EsffO}5gxM=x*=7_gX5VSxMID~-tAi1j
z9<@~Vx26~2Jf{{5&yp$j$xQ+(m9bFbNtYQkZe|Z*$lWmZ#G1KRERy0DKeLb{8iLPA
zWak#gXU!JEP1G7>eYZ=!_(Mx>?2^XRmzOt%#;}wih6C`cOJnom$yez9<H^qE;U~9|
za$8v*z3N&x#dNIGBl!{c7EZ^c{lJO&W^jia*5`=3>0%9D#M2~UKX0C-T2{+8uyBlL
zNF=oKL+l-0u_@`D()Le!4m|MxxmakS3v@lcEn91eDg!nx*+liVRBbu$P7)=g;Ia<E
zznVLAS1z-(dj|IL$C%$9WJt|5&{*gZMJ>w1X`X8P#Rf3)+4F?MG;H|JJdxkW1^DHy
z8l2z(mItaX{2{`YCu=QRV~bV86ql{$vaI#qnU?vtH=(4I8%z$yf_JncLPzgNfjow}
zx_7j!pZbA6%tsC%!VGVhfAmzVSE~a!Nu7PPeZslURhz4d=CjwN6AO|{D$zexj$xBP
z4M-|WNmr5UPBVLInoB&Hb(eG|t@VOm`s1cn$p9v|sPx+iOjLGLUVm21D-*R0ewbwz
zF`+Z@hjuZn(g)BDsjXFvIC{wpSFduY7SJFhrQrel*F>=Or<4Xj&6epZ8dx>?E>HZ&
zwlD<U<gtmGRZgiTD$Y=#?D9V6INMkoOuEY`lQd>7OlyCa`Niw|5Y?4?dn<aIkjH*J
zswUj&+6*jOnReOb*S+!19}L%$S-n@xMibm&9|{7}wL)CgL1Kf$sQ=}M6W8?vHk$(~
z9SNbUVzH42m`frFFMmk#H=iZdL=B&wWE$<%yLUgzr1;CE%|4i|6+Ww6<QC70AO6dQ
z5{;9yaGzb=Fk4jY{c&GuS>$Dtb1oN;hdMptE?IYV$%Q9oMV)8tV+-)zZ=fyNStpz_
zKy<J(-&+~(qma+J?sDwJ9{$RGW&W^394s71Jx#ER)R`lYT%z-1ovMd<i6d5M6`0B4
zty=;<0P?(sHvU#m1Cpz7?upu}*^14S7k}NmNO)S4Q^!yes|dqlwIu6#3l_$bTz){B
zTPZ&;ek!x`lvmSSkg?6`&}UZh{sS}`k&;?RBrXP^xclF~$$4P4r%f&;AWl5{6wrm4
zB?Bu<RDyNaRb=apAP@d6kH+&F)H2w;hj9B4x`7IZPpD=DtGkhRN=s=x*7-0>jfxWa
zcAf^ruqJA>Qr<#6*B;kx3Nq~IUYdUNRIs;Fvz6%QJ40OWQjf%~4B}hN{pQ?~X*vc;
za$3mPuBuBhJ}h-FfX{Sc%dP;Ma>4r6qrPg_vXTwM*A85c#nqgS+5b+9LsaKVqh&yP
zq1M}3MW$mndY3Q}4hhfW6n1HNANOy)AFB2`2bqk^c8Vj`Jaf1#!q9-*+tCt&-u>Gm
zVPbERrf{yM(4~(9k=_MMtHbqnDtRmYg)nhS$KnHj*Q3U>rMT|y`M!+!8nzK_WOUc*
z+(+NmMb{u%E?A?^0Vv^3UWSZ>t2J6^6Q#xm-`nkXDqUN}3-)-9rLrPz3+H0!D2JcQ
z>gR3wf{1d}m8as%Q;}q%w;qPs9xB+Kch72P+mRHcE^l(4HZq}0gCbi4?m&MJ<kcEi
z?a&Gf$XJc$=tAoAi7!-Iw8zbFFvnc}60#Sqg?`J<I<!6zs*>YI^T56qQ+<6Y7j3nv
zZC{GIE+I)y8yVkKdx<|XxPl|%7eKJJaYT!F!b+eZL6c+vi+aC4o(Jx$t`3$&l2yE>
zhA{?M$0m<_K`Suc_ap0V!}&xv3ou^L)G>LN?)P1~kQ-tp-R3N%$Uu0$`6ss_XaOf*
z0eDA>9gl3lSt4{SE{%02QYC?PJ{~{;2WU9u^|DB!du1qn%iSCDM0F#R^0bg~T^Do1
zt(4k)n)7c9{ygq^PDjIf9CTgAnzp1zaHfxP*cC1Gf;CX*)a<8R5fbRKfUXbMd3#Q&
zB!DfthK%Vtmm6Ru)OIbUPM44@_Y$iPidKJsFAzcnt^e_L&g`*3<p^lZN?*ja7&{@;
zfj~dk_W<kwU=wefT1uL3WOAMk@@P~fDBz@nO}*d1rVY0S(hZ)C)hlDZ%361W+sbVn
zg<6a)I}#NM>R&!Vvm2C5wqo|z%0L2?4&H(*%9HQS@h^TEVW6rI9+z|F7?f@MrV*v_
z;07f+8U&G<^z(BX?S8+l-lao0+J%liZLkFICN~%Av%a4Cpb4D<C)4FkjRisn+v6Rx
z1r&%T(Vo2~0F&AJ)*g25{iP9v@*Qj$bfvfqL}$BBgSlJ}t*>+c>gkJ~b@QcT5_c>3
z*)zqWA{Rccuuuo*SU{})zXSY#yMn5xh~KdHK7hTiPoPIv0A#=HrpL${^v$sx2HQu^
z*R|Iv0u~nYEM=l{`drTdr&2<YE!1I#3p;WPwtz7}VT*hv9wZu3iiz22yeUE{$5W(J
zlu}eZdqGgf15AY9^`+|iT_%VxB(`KBcVZc*oQoGVlX2ypaR;5QEOn78&JDxr!uPgn
z{gzW<<P3t8K+a$jJ!whajc9+s(lnrHBgcBm!Gv)?pJBav*9*5XtO8*mr9KrKfVZzO
zUDST2^=A%bfSv<^&{OIdM(POFcMCR8&tcUoPcMV)5l*IUyur4}j&QqVZD7eZaWCAZ
zCjQQY%EbT3%mj|H3A#x9Sf0bR@1F{b2^`_i_z7dyr(n@|)Iqpl%ucM6|IBjh-*PgA
z^ZF{umm!>VAqVOIOh#TzVl;9AR<B||)1i!=h#NC-Q5R}<Vjn9WtG}v<b@hi9q-{#s
znX)J4`x^UKp9ZP04fJ#=p#LSSR*uaGdwrOAJw|X=7u5E>%IQiDyo%Y95hyAUt+<%-
z$FrXGF(6O%V=bKC4aD1ZI*p_FABv5)N2Sc~T0OiVFAyCXi2Iq4Vv4q}qT7t`qb(sl
z8>MV>(slAZ*5lwp{ygv)HvX6Lm8b$bh_@AxX74%;in-rk3e#6nL|v<7p8-4)Tj&W$
z2&Iv6(VI?KOwTFO$G|s6ceCp_RptWfCh~hj#EfHsD+ftB6L$M9xJpeAIO=l6-PhY~
z-0FxcLrb>Nb9T`SfvA&tBe?ZPymEBMUS7V0EFDP)Kt~l7qUiu=@GH~czr6{>QaB|y
z`N+B+W2`(pQJ4SL9PqPF!nYB0DyuzLHyK~Ve_A;N8bU)LU!}nIURMoks;UN9u7VpZ
zvW_=nWopzt&(N5-XhH7tYF*RYKcQr+-4e-cf>_^;009={4mS|h_XldL6q=jm75Bg#
z0&h=xr&h2y5L+eHceYBlY!67-fgpeN{Qc*LYnl0xEAlE%J;V2=pblC4Vx>eCj?{iN
zIsDs5E&=cfl_1wYD{Qw~{)NZCI_IDX;^gnI5dj>o_5S=JO_YfCI7r<37_rkmJYu74
zoarRKk-rlZC=uFujTS=*qYkDu=GH?k(3OS^8p*k6C<{t6>YXLX+x5=)7`PKd`FRn#
z71myhJ)=@38C_YI)0E6m8bi&p%I<cic`DbC22}MxbX0aLJ}E!e^!h6kkUPyl%ZL8j
zvq#*WvWn6uT{SX#&Uz{Oz1!ij+T`qL<%Y3*1%Jgyor-xGj$9d2TGxXyM~+G@+S&}s
z(K>`!qg34HrMjYr<}S5qwXMC6As!al^uRXl)Wg}5&snLCe4(F_V^akuq|-A3J&;j0
zxT7*;g()7ccTAp`@H0MRzGJ3~r##vzR(lnzF^A{3+_kHh08MU9i4y>90$?o=-;Z5@
zNnLRdZZwELcbwqrbWCMExk$5}q(*L2<G)pjs+NeAs$2*tJ-gT)VIN6JC_e7Dy##Ng
zB(?QEw0{d#66LJrQ-6IiD>%LBSS*br)Vu<%AIO!|>p8TOsHlGf=5(w*Gt(-%ys4B&
zUm-FDdoe_4rvUo|^?(V&m}+Ybf;PxoP_M9|eILSX{HTZ78RCh^uB6M%pu{{md%Q9B
z%DZ|)=8L%#wR;hUP$$K<!mA_jDRDB%nLB?JujhM%_{uu+m?Iy2_ZkALd*))&TncTk
zQsUVD%KE(ODRZVMcYbcAIUeN9K-T!UGpIJpj~@xGNvlTaE;_iq-^s)O#02JDxpXyk
z8`{e3pn!LXDph|<f2aj}=VaDL#jEJ6C;PqTGFz#w-q!a-2(P*;u>=qn{m?`Zq$$R(
zzarkWh?N>s;8E|KnNQVrS~T4zNoY4TQ9D{?mT|JeA@Z2&;x0F4ncOBp-yoat6H3*Y
zrq%;c5;XxUUR%CDbr!%Gd|Jm6?LU7d<OW<%v@*%4QJByoq^K7)dpIA>*J;OJXW8=H
zW^>|u>34>(No(SS&d=@R0WcfP;_{;UozA{Vvf<|mb9`zoH=^}qT|2L7H$t@Pg445r
zMS$Y64XjmHtC)vrS@fVnPGS+<n+-WR_^c0{sc4GI#ET}^FFf*(0H1O&fG^~}f7+=?
z?Qo$2YIz7m7TB&2?Gmwpy5lDz-nVcmU85i{hDIq(TVgfr3q8{%VkZz}|6FmlbEYtP
z186xGA1PH^<tpi!w>~h_zWt100$v`i^H%1*NmjBIyh1T<7C~-(orSG1S8TV}N9dt@
z@K{3r&s7Cr3^(pM=)ZpLb(XY@MEP4?4OV)A>z1IHz)nQ*T8y~m%aqvnOM*+4pvnt?
z&#hm0R%ZNlYO9f!gH@!$W8R@^LhSZR=!((nrm!Ok?=xnUnG3z*Q?c}wGx)i35g@WW
za@b18?bbGZ05rX<(1=o;u-6|iPHov28j>e~@Vtj3G4XV5V+y*V!pklV>W1wfp5`Bt
zvY{;K);s7IdzmqJUF+6}mb?=+w3WpoEu+g<tx_B+oc*6)@~2-}U=}PwvD7?60ZIas
z(?k-hxgfwh9V*EvN_v}LtX#xe`~<VT&Hm2#`c4tDb$7ICUfWgUrQE4SQGmNctQf9?
z<52#fs**3If{0R=CKoAqjG7$j4Y@dVnA)}s)?MiTw0HI4Os-*Er$j0p$t534<tj;M
z2dk!Kar&4#g!!nnY!&*zxS}nkp;ApTrz<s|k;PbSTFuHtSCJ#j$2n}8n96)?zNR5I
zoM%$H>i={8IqzTl=Y5{N&;8u@^SgiV{r+zLiIfKU;D-k<GFsyuCGc<}yUx}Y7C<WO
zqo?`~6M)O9d6LgA2fkCsUb5~O*CfnOK%9{bHNRs{uuFZzk{jSEl(<3|mGod>xKkUp
z{yLpk+2bGei*GOXin|d@nfwuo;T;-1N(W0j;d=HpKmEI5#kFu*2g>g_yVT@%yioTv
zX-6R?QuWdvLzh^?6r_=-*wSjpEeuaYZm-nc1oF_XvS7qy-8m9$1nLLss*OClvcXRL
z6!kEOoK5=SUsK~D(lXbuLvY?&R2`fH%yvbN3As@y3`>q{=`r>t3mg4ehIB@NXL+{Y
zD{PyM%Y~YCF8+1s<J(q<%T8Y8F@S2VjgIM?a~^Q^I;xuw?rN~Jx$h|?nhBydH+1$O
zPH}!oVU^vjMG&O*m9-@NL7*lAm&Q~{#^>`E*{){#VRT`VZC2$?!pUpD?E;gsY@|Gz
zAemkDENf_NAdKOCG98+8gUpP{A!X|^m}cYxBd1~o!lw&2fUbFE3#R_Sfr|DSDZFqs
zE6v{{h`>OZ-x!FR0CBjhdk+yaj>6R(bwpPk$S4io%2p+qOju_X)AW7{b!tgurQpH3
z(rUvN1&AzC%X0ARvm$)bQ<I)zdy^OTS=~ZIy4iEL5u@|$*NDJJJsVxo`s;5}^6yv?
zHu!0k4=@QSI+#;a3-F#w*HzZg8q}v;21`P|HfTdW;uSzvuK6zPX*}oOV$hndA|goQ
zwf8R_AWBzD+bvBi&~d?ArK%Lc^Y}*YC!2z#6S&GC`#{!yB0u4dnb3si@SbCtYZZ$k
z2#c0$2P!mMpa$9ojwSA7GS`#h>W%ZJ*w*j#LKW(dMi)bPi6k!Ik!BE4&=S}<>HtK-
z3_|?gG-n@uFT{>8s7T-<V$T)GL|0t)zC-6V5F0Ir|GZ3<h2CPBUMMo=)Q9=-YW)iQ
zit|T%hw@=*g|sT9aTY0Olrh?~^@(M3&)7k%EXle2HsY~|vUGzOs@xGE4_AQKbDNqP
zh`#k7FH>lf0;0E>Vv^lOK@UG8c&~C)x(^>aaX8$l&I3m<-PGrtY4FrZGXx^E^X4nd
z_u*(t(V1{((BL@6SPhmU0pha<Z#q7o7aHo)RNpW0X9hQZ^=yz7P`^am8KgKf%yh=F
zh7VNafezmn*#Fgsr?KuVas){J|LN2j)_=8_KfmA`)**@Vc@yoOt<jM<W00mLHZ4Ea
zIL%P(0eiy^h(azdS`16H;@d~bD^%T`<~UVbC(_WZQP`So9S%Ch=*hFG&-uufZ}}B<
zSfBs}#kt+8`}%Uy5?u4N5*zpJSbgWqmVR+*pCA$*I@yd&gJ;Y$21<25vML+qf-V~1
z9C5U0ugV04j_OK9vwmdxSmS;(QR!6plHj(n>PYV2mZygV+#9J_&~-B%t7AJ$oq6Kv
zB6qNZpUFWcqLC5v>mhqR2Q@?ZL~Dik{G^PUn>z6ZKZ<t~38PhQeUGlmLY^!O0SmC_
zdt%FllM%Q>?ch~fM{@P<JdRi@&@33ujITZ4+3!?r5kykv^(;#@V=lxJw9LT6{J`RU
z{Ht=xBEb?gTrr4EK@E2E&AT$2v3$nOM`eV@jXJLv3ac?^`Wp&&1IDLDi;K?^ZRf-V
z&Jab_dFp3S*UYuXb*Ym?<Q5rFP0OrbfH8awSf&!q{3y>kdh%qi7W!uQZ`r91C@=%i
z2hFuP?IGaCr*6J`w!Ngt8xURaKd68jC0BLijJVC-vD6<}4RrIq)cv+#OpHLwbde>J
zZozen(47@D#XX2uT7+eVH3y(^ZP;F#KBtMB2*&8GoXXJA&{(O?puknM`(OOwxH)ag
aLC@UkRoy8&AZ4$iv1ga-PUiN*7ykinxaXn(

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/pics/request.PNG 
b/scriptsrcs/wamr/doc/pics/request.PNG
new file mode 100755
index 
0000000000000000000000000000000000000000..281115be2604745923cf75138f8f1dc017c465f8
GIT binary patch
literal 19974
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
S@QX_{G-|i+-a;r_h5bKv6?*Rg

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/pics/safe.PNG 
b/scriptsrcs/wamr/doc/pics/safe.PNG
new file mode 100755
index 
0000000000000000000000000000000000000000..ee3ed21e652b3918a87c62fa7bef29d2de2f11fd
GIT binary patch
literal 67786
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

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/pics/sensor_callflow.PNG 
b/scriptsrcs/wamr/doc/pics/sensor_callflow.PNG
new file mode 100755
index 
0000000000000000000000000000000000000000..ff471da0bf9bd64ec36d31cf2aabe8587514d569
GIT binary patch
literal 76558
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%0AribM`k?L2x
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

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/pics/sub.PNG b/scriptsrcs/wamr/doc/pics/sub.PNG
new file mode 100755
index 
0000000000000000000000000000000000000000..25607a538aa0e400c3d16cb6c36d484372a2caf5
GIT binary patch
literal 18622
zcmdtKcT|&G*Ds0<Ma2TjrU-06nt*f>B}5Tv34|uSC|zk%r3Ea=HqxYpY9dWKk&@8C
z21pH|B+^xS6M-a1AaEbhZQ1XB&mH&vamM)$V>k@ST64|vn{8!2Aar%qnGbRvWME)m
z*3?kdXJFVvU|`rKa)1$d$6CfS9QbdSm%h3RLviP+8Q_<_j+eDBGcc4yAKJLF5BQzw
zwuY$}1H+Lw+y8boyXV?5FlZQPs$Mqqvs!pMh*5@^kyay@)ad)$hd8cON=v6Czdi7F
zj9sulg9WDA`)4Mj<d@LaFjdxx-KCixavF9*QH+oNx~!@c(c))w_;|-Lb?y`Py1TjJ
zdpbKqW0J+`o0IV1pd$b3f*NDWy3w@|<rW3!qKcY=g8TwhK>ctXF<^oT;A{Km+&#p$
z7{Jf_145kNUR@VRa{Bh_ZshfhUEf}wyZ=9G;ky|jn!;wcr1}9qxw~q@&a5g2_(Gcu
z7O!U<S2<AEHErj*{YIDH?9-ZLK-lRx(@%19%nS@K-$#@pZ2_Urc8YtXPypRrcTqEK
zlLjpQha>WQN5CEi2B~wIg%f~^?uN@k(j4jl1+k~<5j~-D3@;m#1$D|s0F6a-h&U?(
z3jOe@oh8TA9eAh7As%~*m6_qThXbOgPyu+yR<_kF3ealh`Lee+iChc}cS|_zC7M<D
zFj%Dhui4>s%NX6HR)Fi4Tg71RfrEo?=-#!L`<1_ZVxM`#yZL3ofPvxsYmq}nkwpt%
zr`5qUGHnjiU=d=&96+iWq1eFvS2`5j14j}SM*PNR>K5UP;Q^|3S;p3I%2ha+oPKne
zx|e|=DNfHb_ODbY*a_V7=4!*%gfxwZfgwt^_5QU?;*n(AWIgLUGA+6x^R~P-+&;?r
ziS1rSiTW~|LrRPccTG72g<q+n9|>Pwg}!58pi1rRit4^J$Alps%L|f$W3X2l%_v_2
zG-*&+mS8f?^CF=Bh=|y@>lv`O)-64A4;UCgGQc+5BJRhpjz^PhO0ANS$@Qdyp6q+X
z4&yqaWd>JCFe{+R>uPE(no<N|0Hb%0v)jMQFCiYWR<JV+d^va8Rr>Rd=YWkI?Bdh*
zvcmZR!?EAfV=LrzUijiS^rkwUR7sa#K#^ns{Rc{G>3A}+7J*+c4>)5$bCM;ql<MU>
zlch4=#qaBd>R#_>=-QJhZX!<{NSFWflY6)@!Hl(hvr;koeK9t}cdU1-EtD85F?S4*
zWFC+N>Y9-dAJ3#CBq-&~6m3<~7Uk8rgkmq!oZ8DU{hbLB?K!W__nE}K2_L0FaqZ+-
zMJhHgk<<pT%+n#F*itTJh6o4CBgv;#)*-Zd=>5_xEf|+g4V6?P(;mx`=XZg-xv7V#
z1&^VB@|v*<DQ9GO*0gPUtgoMVw4YU=S(@I6$hEXYCL;?HY5C~Gn?)^O;9nE30eV9_
z#HVG6u@+riF(02aL_oqCs&lf`m<$ohE1~KWND<M;3xTZMeezMD*uq^5Ll3sqhV`{`
zKPjr?9*M6uoo#N_b&OZ5sl922j4Ofx6paBb0~Fz^$q4G+t1vDi%Lz~kRk%A_&sU&!
z^$t;rz#z4ITZ6cA0om?Yw+!OQv4NGqKC@Jt(Pj7RPM}AwEC89H6aadn+U3HM0g=^V
zRMUac3JH*p$!@@Z1h$c6>wMAMw$HW(5~i@;$MbQ$55?oW-o3dUx9+9^TZ^G&qoLD|
zLIWLhNaGiD$y;+KIZ$6RIUT9A?*{+^2TSapQ+)MrX2B&y(BhIG8_te9Gi*n}KON)K
z?6g=H8f5DlYXel`=vLlHyBTbK%4NViUml1kz20|zAgUeOrm>Fs^40mnL<dnYi1~|g
z<93{2P|O@ZZII$5>4iZcW$coM)BYm&cPsvo95ooVyqZln_6r(Tw8?-M#VSVQ1&R9s
z&SA1zIx^V^D)<DBq)M{tiA(N8K^>=F{e7kr;Yjr2=3?H4q#Lg^VImb$ud_f81Of*`
znas}45oaq>uy6oV-R4wCo_rwlcD&iqSLW4=LGUHYOLv@`r7$vB*sRhNPdo}7DfVq6
zbv%pet`WM3PN)cL_+<G>hzr<Rx9xo2b_x@!Jvh-2Y>2<fXX{T2?t&;aAP`>9u-2bD
z0OQB$%Mws&@gb+4t0JNrjB?PcA7H7FS`>B*e30Rbh??n(TjfrFjj~Hb7J*HRhi~^W
z54|^5xFuVwRCEQhW!8qMct$PW#-o7Lju>pH1EP8@5#_PRU^b<y>WGeR*4^B^&9@p@
zFgajA!_$auAVL<NC|-*&f?CO-%>*`zPA^y&b4~E_m{%*#Hh?80o*Gb=>8Jao%`xQ|
zQglV?_bBmPp0K&@9LvJbVY(o>RzU2IB}6UAOlU<I7H2J9b8x}W>IrEC+$y5SA6UA0
zo1yE_Hdv7Zdd2%6uReZL!ZRHhJ*B_)*UQ}@>l*r|0kegk<UaQgTG)ywTDCm;RTmNs
ziQ3?m(*TIJ1CE^;t3>?XgcfxnLDA%UY@1mDnp!WBA{_x5l-=JW0AxWoNU~!g_C#vp
z;c{J5h{tfYCvKB7+O5*92u&1Q0IVb>03hn90wL!7ymZ25{*YOzK>Qb{t>u|}onk9B
z6A9-9RkTuuo-8U_sg1Ip=2$6eImz&{e;cK_*ei1nQEZ8G_iSoxYCkP^GxxDH1{dwh
zUc1(B=7mF!O>aQ#^GA{#foT8qTeN3j@Du<4nvec}rpJKY%4;n!5S-Mo5e*BO!3VeX
zB+{cWfwb3nx~$|nH=nmPeCCg!j-KePMf%prbd2h-x+BsT0E$JzcETlp*uXDt#pHl#
zft#P&g4GUytTH)fa#yF@yQ2=fAv0p+K6Sh`k}@VlR8OTvc~OrD1?Zm0+WI{D^+S()
za5LJE(9l3PrqASnw{jXbXWT=2DnRtH#jiOq-i;6YkE`4vR)h?KgJ~Ieg8RZ174=yZ
zA!(>=Zowh(s{*r+)l#Y+I}qz8z0)vvqzDiA_i)44g&W8|5wa>zom2%tJ8O3-KnRaG
zDGr~!M5bmjo3-F&a(MklI68P!A?RZder;0HFJQvl`l^!&eW+p09HqQUg7*(kmUjwJ
z0B$dN=g97+)HG1xGyGx40@BnV{Emp8vT}hB4x*gbjAgr(jYC=%=`0blDLSii-O`Bx
z`&mKk)q@<EgQ9t@Y?7f}WAcA<eLpqZ$=k9~W8H%OFy!-{9LBxr9Nv-wMa$VEuT+nQ
zZJIo!8DJ<&hP%`2<+Z*`3J6-}<SVe?bq)4RcI;jkwEC|Yqkes$irRlAWI>OfHyYl?
zCLXG5&B=#I6V$<X9|5$UELRp2Rh2(_Z}Oy@_sOTOS=WktFD6aD>S}=KhRhyqvkO0|
zk_)DwR6AL69B=Li6y%c9r_pTD$9uf3ol&K17AjCAv%{3yM#E*4&YyC~*3+fJK-E-M
z{s0g{t-~qHws;nE+fi*#da@5P#>jt%BLSMM`LkmxaEPW|v~)@H1@0S2-`iy;I`UEO
zLOgtvXE2_b1^IH_61t{8mZu$4p%*kKy|;ZDC1rlGbm>9Y^ekYj;~Ct^RhOpE#KyQO
z=9nXWgaGazZML%sh3an2N()g<as=9mQ7#*Q$~|yMEl4i8G_7^(w}pcLzA*29=t5;m
z9;}XCn0M=IbI-!`(!Z$SKPAhSCCh?WWF<SrypXPVvMrcuD;aeh{Ph7i>GOk5y)Qjr
zde4k6*^k1`8d%tK+`(D>TySymB7J1Bj?&!|jujf*Pr>w0-f}pjTMYj4vB7h$E+=Qv
zZ)`Ms{n=8lr%r|V92D@n<Md<+Eys5)I7eCwdZT6VI83r0PrW=P@=|rRfXCJ*+ULS+
zmxXstcmWE1bc+siucHv#QVUcROisGnIW^4H)Qf?Nvkm{cOR=};IA<(tKzLA31BdkV
zG=tX==C0s4^jEMu2tH~K-XLp(zhb(_@K0t>Y_x6Bd3)epe!rVNTXx)TP&U#gV>D=`
z!(0Mwr8NAG%AvhWsM`8hF?sla+Ifmorq{7qA4)!z;#%zRJY#=LmfO`ZGZ>=G)9fHC
zD95aG25JA4Nhm-n16+1>=CEQv6`Gmk#L;mHVT!{$9h4%_^M66^%7Fw%8Y}wi+wk{i
z6JXErQEN%ligJS%9nh;sJz42s<;@1GjroAFoRCjAO3!p2rC*Knznr4wavv3U3Mv;6
z8W4d15oZpRVFkFrtH@NNk`rPf<LbfV50i-`mq4)_8B<*@Uh=XhK^j8xCNhOG9h<Ec
z?Y=nc?N1Eb6o*R-Wr5J5Ms~!BJmnJ}L@}|_&+ki`4(_vs&X?$@Clzt`f32!eLd_Xp
zFNJ>={izFAX+kWQxyNLW6O^3xZ#rI(C(sU!&=R5eHCy@770_te%+Zl)3-hkI#}kS;
z4JOn;hS&c5IOR4}SMErO`@*RH%-8EPm~KY544<?C)?DRTv8RL4Abv{0tUk_kR1({t
zZEL&rRlGPmF^4)-Rw(;Bi*nZYd7xrK0Y|<=1efB}V!fcef^o3@cS&y+AdtIO_PR20
zJi`h%x}8mYH1@`+@3sK$nvAo2tF02B_gLypNCV>;NXUog4ll&O*EI0%tP7QjmMZjE
zZb|>tR<!KrYsBPVU2Vv`nuF~WoMk~lGSQ78OexA?NmQ0#1|iptsz#0uj(D=-goYyw
zOeX?PDx4+}g+*yy?(wtii{_2`^dNjGPu`9<1$6PS7Lh6+c#huLT3xJk&EuMnu3g(x
z0a_6rNJeZnZp|O9`)U<3B>p6i<Tzl2EHQ5QIJ(jQhrK`7!_FL9zD~afAAO%!I%X+3
z3W0xUg&^Tq#S4V7X+08c7g(X>>#89R;oTgbr3=YJwW_fOT8KztC6(}cY9bkav#T^z
zt3~@6-KUUczviSFQ&cBwvzpB5wKc4D(AfpJ{*0Q{#OzeAx>8=>)P%<XPq`f7f-xCg
zueMI^Tfa7104puMbuc4Hu$ADj)i!052d>jTBk%=mVK{QYL~9&~)X#s1?5JO_1=w?}
zW9m5&6qu^?u8E6Q1hyNRKEBA)qa`;L&3Ti1s>Ci5D=#pRg*ns1?A}z@8j!Ue)AOb;
z%S2sfCkhrNPiIcp3F)Huoq;gI7e;TlKzZf6FLY|tIi0sA#eVLa)s&d>ZY%BF3uIsd
zx<A7^?3Ba+&{lbi-dKKUt*PTMPEJlmwTD)l8pvF8vyPkPv}+mQ@dvG*c0nD>SMFC%
zmq0inTE*uwPrr}T5k%C(3%o&w(b-g5k1z#>i>}bjwd#+{mx<|Uf&j-De$R0@U%RoX
zk?xJ#au{k;n?#A2VR##lY#ZhB+`U%G$O-+8ycYb)i8)!#r6MJ~zBuAs9*>nHH-?sP
zVXe^E9Y8ECRKJC*N=bgqQ{KE$9g|Q(adk{~3VCP&d)TlpT)%jAExV*Q*j~|meCqKs
zB{}OHa*Dt@SD5A$H~Z0txRj4+rQ}R!%)gOs{Z9p;AV{f}xBIl-5up)>Q@HA7IKG5B
zNBbw-0tDX|7$*<wHblFipU`C9(XM$C+e=V7duK;o&}_@jiLR^XZjNGeEKuwYla=<S
zj=#q`|Jnm5Fu10Uzs23d(d^k!+Nq9ucP324sF1tBYriSzw0oRxvi)FraFr-gxgON}
zi==%UvnLlWIhesT;Oj)sERfKJCm!OfJ**~E?^sRibk1I>_ATt>wxc|$)mE`bx*DK=
zkU;%2^-NdUF~tcRnxpR1;@)_MjN(X#`(m*m{aBX5<O=<tmVHL+bvsk}3huU^I1Wz(
z#Oo_Y<Mx|cV}U&OTXM*5*ErOel5%;NrA7r?IWKKc_;ir8AC%WY^)KFd{zYGW>0Hau
z*~ZD`ybv6+TzoF(d;V~hZkU+s?GJWLnU;Srhq0N{bj9Jl1T(pFKldw-2ql{*54nIr
zExx6rOzx&euz!oHeJnz--MCtZ=kWV7nxd>{Kujiqr3=deN+i{QRC^u!?ps1e%d|vS
zF|6Qm=3DlfBbzBRN@u|8xZy#=8paXh*)h++e?l`x-^Isv_Fb0*2lkt_l<zn<y=N|d
zN4=STUG#H6>MaMN^>I8c-`+I3_ggl3*MVtI4L&lHR{&l(L8~%~+IHRrX@b1%JfpGQ
zdb#e4MpaUKVFN#ka;>d2K>uGdO&(He&0sL4KSt?hs}-az_JZJ1`3F`IA~iP%uJbM}
z&&?STRpBbS>rfx<+Ce~)P0mkVEaH^1ff;&o4ELOCzU3ZDiGiED>F*(!{7g``C@HbA
z=5OFtyp_mtxDb8D<Z;c&bC;U7^)oe^T|a>~K3Ne4rF0t*%AjO6+vzll+`0EQ8D$G+
z7YpWvF8_Dl73IqW{JT$=!tKU~()QC_W=>)479RCl3C0RuFs6nM4dUYOKD<RgvkzOE
zB{5N?$#j!A1+laD<HlL+$r%EC`nUWwqnVs+v>`V7x}VkgmPfzsB(icsL80R9L+Gt&
zE3U-j67I+g5D(H|yz8B!I)6a`k$+>VimB~MdYpf8vVmldLy&o@Q-~QVq2g+_;xkf{
zy=q&|qRt^8nT$OstVP;WvXEZYfT!L^@I*}GUGy$o(ZPWXByM=dRSD)TWoa@&aWE0o
zW2D{GlHItIXM!lpSxIZVmh6fm<hYBb>H`U;9xs%tm_KzcR~bX`sM1~rT;%e?jK@C^
zm7|`}AZfW7@DBO@WPYQ4bh7y;qoUfBUfg_>Q<MHsQRC&r3P~}{PdGV6uUYm8XnO;T
z>`<i5hsZKJ!&P=`cWWc7|84<)mKTC~ik=FVLii9~@j&JvcTkkZ1TF4Rvi4|kPSxci
zS92D^bqLshy|1}n8M4fE(iu^R78v}z4IS8lvQ$wZ9U6d|-tx?OhxQM|M53)Gq|<|Z
z{2=oO`#zQ8hs{i5n@7zoL?)c0Bg#7y>sWZi8;8wKdG`@(koF+`vW~uXL-I2YC>c=7
zdYlEv&8L!qvpnJ)eW0d9VFEtqUo^dJ=R9M5zY@oZgKk!PRCQ=mN5*eO+f6?Zk71I@
zT+F8woN$p2+w`_yTs#=SpIG;tCtomV<atWWs_@iA$AP?mgxQ{gpv?r2&MnSO{rQ9b
z?M^o`o-S)YO9`Tzm<!w&uZLjIPcH|z6Ptfw7c_ZCdsFhoXV;9U*0o<Q4nn#c!VVG-
z`@PuF_~OdEwFCCQ6bnHgJ7d$9KX01Z7}TGub$BmRBzVdSj}3|IR=JF{bG?a%7B41J
z3dReQufT3OPlDoB=k%ZYSd!dqG=iCX>jh=4kqMR<pk&VbrRs-ame-7x5x!&QH8&?p
zvK=y<n{=iB)P=sIni}Ya$6RI`6?8Y~c()$6B7W{S*bmy6B#t*3Z~2}X6fSR8B}Js8
zIQIv{rY)2`e?|>KK9CTqb{MC(_)`~a%#eL?|5mJ{pc2U-1!=SCGP_HY?QwU-*Ys`5
z$&1O}K~DsAoi#^!MDq*+ktjnEf2PuvudGXjl0#n@A#}5h(za!-EA_o0&daK23n2ar
zs#VeBq)R~ZH?Xr@zb?w*_RpYnCVIvm>LFX>paC*^oPuC;p6s%9?x=M<NSvK_9kj_v
zBwlQ3W9esZ{l!v7z}4t{3SR=j>z0ripwq2CVDc*{QImqQ3fFK1vcyuR!3x>66>xU-
z=6^{RRmr9@f%g2TWivz7*CD8lN7;6Ky0MvWwI{S_R`!ghpw`n@S`bu&QY=y~VHuZu
zSkOoBXo#!HbQyN+VQ0~p;U5Yan{XnJ=ofh3(OU-P9fV+0Mfrr5;@LS@YW>ktPs5y-
z(Ry{|+V*+iv}|MSe^htzHd&LgllWLB1B<inQ2UaBDZ86aZ8G;Imh^LjCxY!G^vzr0
zw>*)vpB4seG9KFKoAOfbHM<tw`>ht}ZB>PAHdkp~5fjM8YvGcdV)}~Y#$^&Fl;ss6
zK1;qpE21)4Q5a2oi9RJshvfg4Ko^&qEMCRb^3rd2X=rSixM-Y`o=FDuy+yX^QA3Q&
z7F6qOMY-()0<mhUmehMa&w7t5hJvBF<ylvVKmxcE7T1C3U2|>JEZKbhOV#fn#)GbL
z5|esToMY=HZQHveMbT&#`<b%kNn|rwaE$Y7eeg<&TnepL+%a4!EcdBLrmtwdi!@=x
z+GDJ8ULD@x-IMV%80G@k%cY@ElyZ+)|7K0I+vY8yfz@jqXCU@SwUz0`JvAkXro=_x
zxeeL_%jB6+n~Y)awxRs`Gi_kfDg+i~{x4v^>Y4fQ{2)pbq4pwP_o3aV@{nZmbgdR+
z>FNCV_9rX{V5g|3FmE%VpQxOL*}l2rg160M+57sm>juVLZ<iH&B{V}Oe7Q4aYT@}~
z-AjSlbLP~#*67V1-}Hrvl31GZBVVA2X|6<Km0kXU{2_zK&O8^1U8gXO>oUq0E?9X8
zq&A<0vrPw%g0HO9iQ5+R1}n^RoB>ny)=NEWhaZES?elqws1)Gx;75vE>Rats4m3<L
zS9gHHqUmY!tVN6Pt;5N!r4dDE(9;gN8}A(fk4U!^GoZhq_SV{)g7PNPww(~T1>3%J
zia*AwjScmWHv32W5&fjS#ElUtWFn-kK(Gt0sPD^w4}WdRT90h1ToRJmlZ(IqzIg4k
z!b*mfyg|dY3FdAQ@TZ7bNwTSb;dpbC<74BIqckgYAFbr4`QBM0hz9Rn&~^IB{jB4D
zX0uyJQQ5mR@ka|XJpn9Su<Mj-;DW;CuLAmmZNe|lfT8t2>B(&E&}*q&FUkJTpv9C<
z=<WWB`$sj}<<}aqsP`i@?(WEJ|H|_(MHio3iWC9f_2V9`iB*UuE5CjHurEbDX}bFN
z012EGiunBC@6^aEhms<ozqO}bO0QK(eZODt9EcQxdh?S1zIA)H6pGk{?sVe!CXWkM
z7yn*&s5r^Z9Hs8X)5S{vk%IqU&q?3>we7z=rWt}YpT-0@4zA|@Fo6@#4952m{o10-
zI?sRRG8UEGkYB6$V=0$+GWnn0g1>jj{|7DXf|Hp;7I~keGtcd`61&sIeg!yddKYGE
zB4mDsR7;P}9@K4^MSM40@=@>l%`evU$sFVQacAqG4qWDx^L8(JFtqr$Vo+@M&Son{
z6Wma0hYESMNIL`rFNW7M3V@OVGPdt&alR4HIc&&|4J+6`7%ya@%jmjXkvc@7(BeWi
zpu+*~`J@hqe0dr|r*c2y-OQ^%DbHcugOcZG0^y7=5=}pmT^8829~1hgGT$+i3l=wt
ziKDhz_@3=A`CZ9T__fE0UN5o@-F%gM)g+vD9QOvh6agI0<pifJN_TIQkelnU<xo^>
z*u1wGoNPC@o{eYtpd9oib8Bp3!&x-p5Pavm`mh@>RYOvM@35!lW$za4e6!EfmMb05
zA#R(si|0zxG=6=+y$ZgpWEj=@Ms*dxGXoH|i}fkjG=l)M`p$5G67sk$nJq3NhOrWy
zG(9J?Jp&MSqp}(?ViPOfeLM6!FA{2t(#`BQ@2=lR)Sum%H((DFOPvNyvI{T=ekT-T
zLq2Y>O^EjwLiq?~o5z4qe|;w;s0MC646yfkj}WbTXSm@8d$Cgn+BOVWl<<8KpIU{~
zE8w)1SE|;DJF^Uj-}FJf53xqXgh_mp6S62>oxRqmu_x`&FNEwe%u}o*<a(2~=N^=h
zC|fee^FIWbZ}a@Z(PM=28?sH-jmU3@&B&{vZ~97iGfdt6MYN=8*^aYnoXGElcx=fa
zDDe9;&`&~1!>Xfi#%;3rY_|t7R!joI39E7y0N1$d8JM<jy1wDS3Ws@x$AraxKTK2&
z{JPgBYuCWNpNE-hlLep>YMeV$79F-TfQq`?x7Yl_5C^cPLtKsX{&zZjYOB|60H*Q#
zS>cvD6CqNE%aW&gpun29+oK|rB}y06R_&~|*X;SZMmBjG)h?#Sxij<;JrN^at={uE
zhVlH7pGtI)CV*0mBFNb9W>s&TMs=J~<NUz>i|nsdS6z&xyGi!nWal}asV<cV$WH%7
zc5hbDea%J<>z!ei4%@0b5j-tvfLzpHWRKA%YfPRHfP=m>gpwZ6&imAB95Q&vh=N+&
zc(*W(%N?2z%H}WD0?7MF5lHqsgDY>O@)0})py<LheiL^{Os(eLNTyMXpXTYQz=tu6
zCX7GD7D#bY$PDyh>#w@?S_9wleTRUW*b#e}KZ)G9xTY@o>3zSD*;GqsgV3ilmwwTQ
znk)e?-PLVsH#NW?L9YD{Ka6y>kBpUy=aDWRDA{LcQ09$P#Mjfb0|%G8P17uuBbvXR
zay>({bC=mqkr|=hT%Bimo4%t)ig0?0q3GogobM5;W_C<GIwrk6%i}Me<P__5*XXBG
zcd-tKm9_n~^bMD6P`MVxOJYBjau?zDrhnp%-!~=?38jpmdUo=M*@kPW1I{o^?Q(0+
z`smi?pz!Mdk{swbFuU`YHTzIS-GZwmw3u9cr*3X$5AWBPJ*n>X{)2OCxlkzCU*sLc
zv7{o%a*7@1eBa|6X#T+%hzZlM8F0%*MS@vUh-PtOJiF|@d9cM|%5{q!yU(T3*^d9t
zEb8u2`1BRY$cWg??Wv%~sQ_AGPLIsxq-hV`CyAXl?rR=(6dxg*ky`qKdjs6l5+Ia`
zvqe@s`dg#m&m>{qow=ug-Je}OJ9XY7U#eEza9>;Hv0hafGhT=-28OBv-ukwafx|gj
znY$j3K+C5NpB>(a@9&FTBPyL44VK%Eb<<3htEU5dvzm6c@0=TSx%NWY+Zn=u^q{$F
zk`q+!l30K&;W(IdT6Q?L%+?pP6WWCT6zWHj^eHJH212*qH!D+RM5Y6C(t2t6Ud@|l
z%9Nf1Uq76imjD-6)Dyc*y6T;6_0;&R%$a+RISoy>Sge`Nb#srfH(yY5YS<oznkeZv
ziLgaxEf@pf0hwK-wimIzU6UfX_Q$2EM-(!Bm?huJX!9#Nb)`zJeHgh!nNJ!P`zF9`
zgJ+1^i96FaeAZec$}~cBy|}^XMd`fJ^^w)hkg!HU*4_aP+l;{%6&u+P1+I{kn(m^q
z?BDuHMB=~+J?Ea{n~mA+g_}yK;Q<cI(h)$#v#oEeK+}93OI8{FFGR8Ml(R?czS}-(
z(uB({#+!qWe`?`XN0`tHp`n!IBP%5*4&#!hpP(V@O$Kj4u%?P_#EvYF1xQ9F#QKTx
z$=2~V<-5J!>sAk8owLmk;^!VapOvby<UJVOHv75R>M4+3ofaNdVTFyFwEv8x97aPX
zBHPcSo9eqrNf^CJFSlTujEdChq9yMWpM;#|e0Yo7oP^Ad9^pqK{a5r_li(+JqGjBl
ztYQW%tmm`vGP2x^Hlpkz45}RVQjatx9>nfD7?M#*mRmmX-8ic$X&TG&%35}}$Jj#>
zE?PY_lNph=vVZyXYtW1dZ@6Iad>?@NXyTC&F`KY${E_4dZw;I}oP+{IsnnpcGUIPY
z^4aps9%qHN#%35H-m@(2l@ba*1Q>6}6XX@$;@eV1q(5uPo?1_|mH4tWEuQd)pJi+5
z*!$9UF&Ri2PYJi1!$}4Cv+D5h1FVq<B!ih$3WAzS-F))wYP<4WljC>HU1dFw`rLSW
z<!xbOmJtW!tuh407X4k#W@jT4BC_Xr@95GKTzQ?%PJ6qES}UauoM-c}P>j-~1tS6d
zK3dSVKut*SL%q#exk&*F&%=nc%C(P(8eN+r_EUpnwbh**OK-(L;ixO`Q$dvF3Q-yV
z!u{{xXb72=T$p@Ze?h{=SHm7#yVU;;d@W1+I{zqRi!-wqKfW%W5V9ADfK+72xS5(v
zF$1s2TDN0t>K<Nad4K<mb5U1MnMaMCH>%$Du9!i-J#sX_zov0Q1GYjTxyOr}M1;(|
zdZvioTz(L*U`V@>#n}qP)X3NQZxa~%-o<9H#RW*TJcbivv31vX09}cM*a}_|Qfz`L
zQ6A;EPAu*#io|kaJ;af%QMTCyz|<rvom-&cYAC|ZIpb<=U70tC-+vWL?6`B&MqY?t
z_|f}Qe$aTiBV#i--o(DAeg}(Y`cyG_X$Bd;>Rs}Z_-o}?Hu{ovyG!l$G1~9X<0gJY
zj6}A(f}irtk|x>zn&2M`3tW8K%iiql6JFZpajIF%7#QUQ^#qK;z78GeYufO#T_voY
zl_CsklT*^z_iM#Nz9Y}=wK&Hj`xOZ0=~?bMSe@3RoURl-Xt^g>#~<hiopm<U?jYWn
zok^7OujAe;{ADa?M^^CRC*^W^*xW=6=Rs?yvIX^5-=o+zPeBol=i6B>ABP!G&+f)H
zYWi`XLUZk~GZ+vDx>0GY;yb<#gh18>HUAlTLige3%?Zj;q|K<l|2<N+_{AuRw!P=I
zFxyB!>w!tCtFQv?l%_nVk`0IV8N42ggTYqq90Zue(C62Cz!FI}vaYGIr*w5^9l7b*
zJQo(+No3^&a$4O4SoqTV*B+8!+<e$Yb8$IkO4aBA7Jwzys)_SNe2D~#JfkH2M=?;`
z1mGw_laY7?`-(mEXpn_u<7bzseID}z%8={Zt`Az0ixM4kj5r!%@CwsF^yD^gCHYM$
z0`G3~dQd39ygdpYHS{-RK71WFk7XN}N4$^>$POCp&LY0%7RrlPc6U|#+c{H8r6=9x
zG$u?u%NgDVbAm5mP9QQ2&z=Ujdt1_9RX5)?U?VRE05+M(6}^yI3m{3kS+&`R;B&|u
z{>f}@v3<QVuceI@kH|sEGL&CG$2vR~iMQG*8en(XOayf%SnafxIV`QOL%a)lb4Ift
zYZmS^LMOBsZqz4G4f-$KnJ@S=9Zl-=Ke6LGi!Fqd(kydy<NL1j1?ke+ODCH(I1Om+
zk*dcUBr64H%=4`y95sE~sj1uXQe&a(e9wE-3}8sIqR;@w|Lv>FncS}v(<#mM6BNwx
zl3<9EL>tv-_p^OvNz=ze;LC*Xg*l*r^EE;2(K|$LmzAC7m=>2dt0|cnM6#5Yjqtx#
zMcZavJw0$EMgAPw%ioK@d}r-que=nYixr@Rau1@m{@ru@C|iIyDR^17Zd*rq)%6~6
zOEA0-+xEyKeXi=Ssif)LxV>HXO`+vqQlZ&F=8Bk4X{(!*7WE(fPQ}Oh<r_-hs>OY*
za1??q_{|mTM5qi99UPu1uyQN#wOOaX*NRq94*Xsz{<A0ws6iBq21Z&ll`R@@n*Igu
zJ&@UxiU?bm{?_{dMZ#}qSi(Br<PzhPo#1S+bh2teSVS?(u2DKRqF7lBt#W8nSAe|t
zXZ8G3W!pX6E7iEPJ>|Q97NS5(`QKR^zT^aN7ytt!lnVHi5PT_cQ?JLLYsGNFVX7^Q
z_L}~^Yz4yPZQnI1p6xli)aLt$Ce=N?e)K(~beW_58APFg0z;VJ;crdfe^jqYPIo0L
zV>Sy(_0sTzrvmVIg2#P(S9BFk*ZBGbW<&1<i~skHMU^qZ<u@1d&fY}?GifpddisG9
zpnC&qNFmPaM?p!(hrL7o1CZae3yj87mo-?!?|qK@)+YW(`3#kNd7S5lgLD@iXl;WP
zSR=cP>S%3Sy*+=xM@aCn_-FR$kXM5ZG7^r4S9QVRBH)V()wt~m{aYA<4f&$-l$h1q
z+A{6(&bX(%e1@d$OM%3-mj35N=JL+ezWpGpx(5ig;TZ)w7~X=R7f7;{rqq*3bZicO
z%RWSDo9gv{QU%0Hm-ap?5P6SBz0Ru|!Fc|4!&=Ukp!Pd0`1<-Lec_S+qYuGsKo`KU
zBC8)U>Em|S<96KOfCk$1oW)V7oOer(@>*UFh6WG0sNJe!y=gwON?xi^_PA)n!~YW9
z*gvu7<wnGbOkfPs)+4OH@zND%z#}EF!rZdT57~~7<3G(W@A|+Q!Lq$#jL=QCdG_(}
z_6ld%1qb*+3I48cH00R@)c^%IWj$PLy!6KOdPcf466M`aJ7K2!0vuk}w*T&&lu85u
zmWVbls1ze7Fl)eU83&q4S`#gQbT?#20Md<6_DBRHd#Zo~`yOV;2Z*rGqG<2-4S+`1
zHyX}_z#STR9)pN`VS#sn6-&b0Wnh5QuirQ|BlB!?>h+@Wl<l*RR@XCb9QdT!JP%91
zx_7G#h))caJfLQv1b?Yim~3}gZip2sclaL4JE$X(PM<-mgqtvQ?noR!K9%`K6)gd*
zguiQ-VdVVW@%LjHxd`R0MEVkWrT;|u%l_8R$YUz%ea;cV%~L^FIro@DfVMFD*ewh`
zc*<FFYUJCU&fJPih#U$Sag5Y;eEjf(i~W=u@C?T>&dY9Df``c#JCAbEi%)Dn*l|qd
z0JaPBwP-Q;#xsiiVAS?~B%=`L&If$nVZnn_A#j=^r$N#*SCZ5A>g`YDZ)CXdJRh>N
ztS=N%e-E*90`RfnuLMGMwf`^M=xqr8V!cTU$Bu6WeTsuw)7Q6js*i4~W%Af}&2=4b
zk=xH3GRHcjysfS6Yuz2)-4aM{joujCS|eL;z2Sm|%t>y}d83ob?ptdiHASakk|+(w
zb#j(_$Y?`|hpTsF>4MYQn?bVyTj3#J(A^6H8Xl*w5AlZvd^;z7lbi`APr8N$r|@nO
zDvmUqDH!vvy&~fq^{LOn<Dqbwa`EP}@n)Pi+G-ru@$j$_jyL6sOsCG`n3rbt66<u>
zB^<!^@OQ(~44RI@=bL-r&fOk@GT{FDY5(O^UK;mD7qsbV1D1{6=n$ph9N{%q(5uL-
zs_ePB2$}=%7!+S`suV#%ig17;tnMIQ@33C12^;<72i*Kbk;!7TKx!ySyHzAi4wW`1
zaZe8o&2a6e^!cy}G+%_uspKkrgV8K33amM@elUNlGd~dsS@>)0Cp^f;%*RybUaJa(
z27Cil`sTPF3zoDIMj-SMrs5wwX|s+bip}>cA4s1%#2R^Q_B+yOahYgf+?Ghv1+8`S
z*1lHFG+G8fYvP?&nO3?1JkwOi#0uX7I7Wykxom55h8Q9^j&X1ETa+gZSld_LBdyY)
zgQd0>0gc9*=*{W)Os@iFh{B#I9^sa*1Ru5wM)1lBtZf2jC4LGovh|FJ3{huokmVjM
zqs|7xaoP0)>h^h&=I`|#v<Zyx4xGDQ#7)U7W35}~%_Az7Q|27upDA4)STN5?d-uGG
zrdVpU*8$2>xAvX}s@_q0R8Yj#gfh81*oFZwyY|JHS*s}4r(SJoos(C|feUJ_sCqrq
zSNb7UO2v8H^%BKTXQ$DLt&_Utu8_hW<qH+fPuXkCqpag9+&fg~XikCtaMEo0CNpk>
zODcg^+|mnf)yWl^EHP%%jHtA#KARu-%+qG$&rlv=D47|s2fc-W*HYdsC_J&59Urt;
zE1#S!Y`bJC#Ld;x&T0R8RzG7*(@+h0j0e=ox-1_bT9mA@_2#;Hmm>YE1e5!-1uT^~
zTQD}<>+-QG3<^I{7<n&6iI0Rwi6`bp^ZOgc))O6_!#bJOaF+TZB$`~!+292VT|aPx
zy(O}p6QW>`bAqH2ZSGqa2ojrSQT0nE!o;SAar*>-6xJ2eZpt~8Kj>v^uZ>O0xFAk(
z)KpX;dp(<*8kF&mh+JbI;0(vL!{C<HXCWRZ`Mkk@V@oG!vSq-GpWnZmYdt^)hcr~<
z7l@Y=mF_EvZKb?*n9+<8HrM*{$&W*dJJU`~cAt9m%7p@S@8o%-^}wfzEM|g>_JbJ_
z-P5_eWdCH1*|O`R{fCr3_WECw<TenRfKU=@4|C@Pw+<A#5|D*yAbt4mr;>w?;Xx4r
z7riC09e4q`a~rbsLb|tW&`|C$MB!jin%y9zY=)Gr6iw@mrZ_KB3^^`f>a~KQ{zX1+
zPsIinr&#;nkMd)pXIaKnyQ|2i{ir9n{rL^}Lw(KbkWokb`2{Y?GPXHy3ti67m!`hp
zuVm{PgcQIDTlGb3cf1R!OTm<}Yi|A<Z2qHp?brpqt=tF2UW!dYZn+I<ST2{@f@igz
zXPO7|gAwefN(N0Ia}m&I8crE6tq>IN9=r7e4G4U^-(HC34Ut%P!E;N=!sd`>vCB;H
zK?$09S$L%?$;d2{7wnTC`MjpjweFhuy+}qy=S1OE(+phpR$X*isPP#+Q+s&)-3z8Q
zLFje{|5S>+^NLkogouIdpM#DCLupJ2=0YS?<;7~FdTT|YM3x1O?yI=rxvVUB-sm-w
z=i#r|qlU1>JCgXRl-8c55{WEZxW(f_9cO)xdjs(cWv3TID2v@y!@2hGh6?vvwim~}
zWCkToQZULqtuzgqVw0*O+Wc*+M1JFmggmcYe5)&;LW#W#Who(ncUh*@d7c!KcbFH#
zx!A893{q8;>_wY`1wucI{p}4)co3htmQ!MTuCOgc(>@+EZZBcFbh-lC%0F`=Thy$F
zFotVot!sag+o1y2bvv}y6XOyn@i8Gy{=tW-Ru(&Ve7DJ$w+evFMV6~|%X1RQ!)iDA
zDPA}<$u<1unTngW&FsgV>Dkpt+g?naNewO*U2txsZX|Ghcn-U2vbc`j?D~30CbPc6
z-CH6p+hm;5HmUI>azDmEVq}IEKUQ|NaEKo>r4P+(VRq^N<Cgggwsj<tr-2GtIXg}g
z<62SfY}AKdIsh{ImVjt+W9S-DGp%<@$CvDy<4Vl*tLzL_P~%8@|85fq(o#Ko@Qi}%
zE$1qb31n}bd)Z!h$ZIYUQA<dDUA?KPRidZ)yEc=63pMI)L+I2GZbhl!CG)^oGg;4W
zGjvt5$whqZ#sI0<waOhA-8R*Pq+5<iVgnKm;?jEDY4L+pvi7@XGlwVHmB&l$>>jx2
zxFfP5%Ty&{BR2vvsr2e)qy3g~f2NY0g@&e<x_u6=ohoQ7XInbR=N<KTifIO~hMFKU
z-Nh;rTcU(*P5CEUp0He5Xb@^{)9Yq$De9`iu@`4HyCzh?D3TTXO-Dn^CEm?W(o5sN
zFgj1gP*0~#;GR^hRcX$!#Z{|g=Z-Hc7g3VqT&?G1G5Bt*c@NT=ciGET`nKC!RUAI0
zc31}5Z}3uogvZjIUMr+Pp!w$&7QxMH@+MboTi!ADS1u`w&Y8zqH%tL2TONy!Xw!W{
zxw;T`-(51YbT!ik+V7h<daS@Q&XY?em-k0Ns_I~klu0**_{P88Yr1<3@zJWaRB6|d
zc)Pikd4%5dv<DxDIpyBKR9LMlT#tvVkV7@ZCeC$L*-Fdr!8~W>E&H|eCbL|EUoR6U
zLCbq98x8n*-JN|_f^)ZJSydLR@VDlc7Beq~Prs`=HQWV^@Wf7DRpgaJ`h3nVtpx>&
zVx~~_ObH5ot<s<2mEHz_zH5raPn6cn=P|3dw3_!2>kYO<bY{aIjCP5%&|bSg$+K=<
z7%`sk`J#yZtB}Weg_W;2`fr=$3{9$)K~?!@dX2X%mhHqL*Q12OAQ&q#4?K%_pKC`b
zx1tWh(zl((wA&&O-n$OZ>o8{-`Ll+x*v!=Jmc2;pf?HbY(hFl$(xSXaa!{>3Nx+b+
z;;iuCXInehK{GhAd}83Q4GS#%N@oo1W>n>pxA$0{ocag~^zL?10v1~rOR7kVGjH;J
z63LY_WE2-Y3=(gQly{xENYN&%M`kOIuME0tiA3!+rNhM+`NAixjH;M_<Nx{IKGx?_
za&F6|c5QJb;xWr_Z^JUo<6@-*XY6B*FE*pbly(^o0^to&TOldSw<)JKJv0F8Ue)of
z9f#NU)?XJ*W_A^ALmv};b*;uHjm2=W!pxdv2+4}h^#!Sn9K|Yol`c4IR=b<mw3KB@
zki@c-596%3a!w5fW_c7-*WMquAN@SDnnEQ<wpsU6FMOR!Nezw=dpEo26qGnf8n?Xz
z3yjJo-WmBLWo1Cv8TP_kBGIkYf4-+`gI#lCU%qn{Ji4~f<)TXN(H{`Q4WqkMSxf`<
zO(2i)I)@X!t}DJp3a4PlHYQ)`-xu-cFfFYh#}{V>@lOueu-(U2Yhg=khn@XYf(%g_
z7;H%Nt-sAskIV{$Ba4Sqa2D%bBVIR;obOjw&vKqoFy9#X#<jL6#=1QaUEs`k9^l#b
zhU<p?Kp-8JX*Rmn@dWF;7eeZ8PNFF(M=#T5NnW&)_{0QP^#c^Xzr$<`Zawa@pn^H-
zM1TxZP#*$=o3*ii0BMrCJy2c697>}YCCn-s^-d$$Kn0Q2X)Q}1X@<1;=+2Fqncg`2
ziK!es+<T5*n-fABM*uT`_p6D;f3>Zr6CHJMa0$)TRF-P$1ob=nYnw$=&l49YZa0Tk
z$=ad~_gLKzynRoq6kolw&lK&iWEz<AbjGSgKc8axC9VE||6x5Y(AoTkQrivMd>t;E
zI4S(ABjYU3Xj?t0^AzrD*GQIg_ty$i)hgfJCpswH)9taj23&#fEm6WGE~WXBSgb^I
z1xKCj*KpW#6;HUrvQ=r1kj0Lo?#@N{G?#U=*y6d*g`khU7NS%AKomMNHDI<bh@LCL
zteVxCKfMDRjrSDDp?&o$OgL#b*5uA35?nldN}oGOX-LdS3tNAP2rXazIB@FBR5jOl
zw)AXsZ$yyx?~W=wcy?{^#Xe`v2q2pw;)S)fOh_ycQCZG2<`d%Fb77;=;D9uiwm+Q{
zTUT;)GN1?Q+{@jIh9UWawfZl-nN^(a^MaS;bVxJpr$^R{<)ZL0))mVEm9@OL;FETP
zK0&&J^}U$cJruZUq6BGVf}X!zT4fkDEFg5%N6#{`=}{stEZ~aU6Xfi4w_<5kS%tgS
z+R&=AA=m0<|Dx0AD>gSrn$Jtj4f7kh=@l)ex$w-$x;qm8I6JC9t2_6(ck>cGX<^K4
z_D}<^-#1j3_qFQiOI3khbec;|R#uUn#AS+|i)f5~GU}LUx_)V{omn#^;C?2a|J51R
z3XRZDCg9Gtvvaq}=LNfUYDWrf?GGyLI$GY*_N4a?>e7WXSEdpSE3!}PPB219{33&T
z`9{crB&>EWx1O~icA!EjIDE*dmu03-KlT26K<E#VpSY4tmZhI9_J!mZl%G3NVG)?P
z>iSG(%;JK(X`+A{)PA2do1rmWB4pp6viC1E5%4K-X9QZ8>RSeYl&<B^wOuKaPKrlz
z^$io)NgKp9r6xq_h=k1qTOX|xDF2=%<=7fVFApFFPPInqah1Zaa3(4n^;z}F(=O}R
z8T!sACK#lm52P!9Yru2Cz@tyP$zKXV$xC)F5;6Lo(=E_QnG)mI*RHfUCcoeX>FAeM
zhp{NY-uC?w*e24#0$Cgr|Cn&!OvYTS0BYep9b`IM)Uuw1)L6W>5D<!sGH(H#v$7Kh
zF{fP{Y`frIMa}j;t6&3p7azakQlOQYluj*7Xs~x<oak|x(HO04<+A6$2+O<fI^>eP
zTCHa40(UDM$}k(vJA#$Y^5LiEb@26-*g@*B(WBlbSH>j7Y}+<efoD;_*Cz(21!yU*
zM@3&f4sCGoj30knua#d4x6rDmWaUF6;v;6f1WO>#Eh*iK8zxW9n?-MSM8yD&Ssr|%
zB)@<KCYZ7rUjjWi?BvAz6yn2lv!+#VO~+I?flFL)O>aL|bdbkPtZk6rPyvI<!pjK-
zHAs+#voA2(qd~^E3|<)FR<F25sGIu?mn{%@77|^L-mJ~t8cLgH7hKD~<11^^hP94u
zikY1xX^pybteR&nWz?@wA7QES`s;GRtuk_>hEX)<nG4D}?kdV`eG2BYr|5aMWea>1
z7{^62owymIQ&@P@dGuy#Y8N~B@xB2b1(jQHzBPFwFjbfAt=(&#|5vnqI=;7gpx%4I
zP$3=I`@^&cEG<zRXF2XYiS4@%Q3(heY9~Pv!XE=;4Fs!Sp;S5f<Z#rte}r~XzF);y
zTE1c{%N4$O4^?cpo+c6UseA&F7Uzl|S2(1Rb-X(41Z+ce8Ts}8v1;VEM4nzCrn_tc
z;T%i2vLxa)BXq%vWD%SC5d`a`Cv;|FGWbKAx(R;wj#Ymz#?lMgtgYi?h>J&OS5J+t
zh6~a=9oH_#MF(hQj*5AIy2D&ouN5}z5<XBc%a=U)K@T=~TxB(}`F!I`7v9h=?89$2
zMwXT`Z?ZpHTv=D9&A4o&Ka&uVMwWE8wu}osRpm@~*6;%9w!foZKJYzP9Dtk2qy*&8
zVPy8pbPnK}BTy0?{>d}*jCTi~k)-V(mDwIwdDqB$;>rQn<G<Wu{SUu{QdR%+$Gscy
zsPp%$xlmn&*{40)a=;_rz|TwZ|EYg|=70O&(pe&tLv{^bETL{$yZy1PJI$*)s>LeT
G@Bcs1_;$Pi

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/pics/vgl_demo.png 
b/scriptsrcs/wamr/doc/pics/vgl_demo.png
new file mode 100755
index 
0000000000000000000000000000000000000000..3cb7eb4648624c79ac07027d7f271fc753c2978d
GIT binary patch
literal 133339
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
YiLZ!H=#*W~5eWFGDQhWJDOyMVAMqSqnE(I)

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/pics/vgl_demo2.png 
b/scriptsrcs/wamr/doc/pics/vgl_demo2.png
new file mode 100755
index 
0000000000000000000000000000000000000000..8b07e62758bb62d70c131714a635153b4a82ed7b
GIT binary patch
literal 149435
zcmV)TK(W7xP)<h;3K|Lk000e1NJLTq00ANZ00Bk_0ssI2LAeF300003b3#c}2nYz<
z;ZNWI000?uMObuGZ)S9NVRB^vXKrt8Wi4}Ka%E+1b7*gL?*qR+001BWNkl<Zc%0<D
zS+gWZaxV6L9+8=~oqg#I4Ge&p;c!S^l9!U~>Y7XsGLxAeugvr#^$YZ%H<{@^NHX0^
zQsj^`<P7%S&stk%MufW_BC9G-cOCSC1_qGa%FuZVS(&l9hx_MCa5x+mfWwMJu#IH(
zy@=5a1_ENBbvLBd??_UZuN`dj1omD600tzr28iC3l%fUAVq4dRgGlLFkR+(4`B%2O
z0HA;oGzdUSZU)KzTQ;w=SHFV@km?cfs|Sbw;eYrqF6XoV`G5USe|V;gq=5@_MI|zJ
z17}8<17T1gSt6)}5x}PVeNv0-Yv;Ub5^>&n?~B40A%v!FQ;KG47M-iM4)~iBZ)pa%
z-JHkm9Y}kFA6dM5gX^`ydh@Q`H&B|ICM46=WN0vp4O65-T;W)fR7oO^5Wsp5+01E*
zvG<nsRexdlS34-lSid|*CeVSbhe=gm{@D#8%>iaqFaZfrFh!Wb(I5s5Nfe9%R2Y;n
zm1NLX7<@^P+&U>v)<Z;gouW%1x~_`&&Cj_0cl$i{=Lr;mfCDP9Nan<xL1O|4g%g%3
z^DqJHIM{l_trAv`MIl{3rDNb%hp7A42wRV)(TQiA?+gZ2H93EDQMb`xMv6iVqv60K
zbGoTo9tfeBnHauhPWr5F3PMZ~kOItr%8O^Q45`&RsV4J;rxOyeBxcT(25wu*eL+JJ
zQ&m$lHRreY+g_g7ZTxsE8D%~AnL_~>*ncEf&(+?y)@L~pGpKcq1xPEY3YeJ(9X%;R
zaReQO%uih}Ib@l>>NQmrmJCW)uD;$(JELwoxoQWEtorTEQW=T8X^hL&D+-FscPfI?
z00W$H&EW>-<!2565(wty>|liw%eY(;qJ+Qz_)gNl${9@3@k_5|St_mi(I4;a>-z@1
zI>j_P!U3`p$_aFaa>G&E*M-5vs32%vAM<BxGuF?b^;Q5Opd+fX(B!V?O-wLE6^{go
z@IxoCJXgI|F#nauO}Fn1eDzN=GfS$`#Cy*H3k?W>B_W)d2_amqWI$|7&--6dE#Ir$
zx?2P9x^eY?zkY(*Miy^<-_|zR=A&k2hHj!v0T2W;NuI+S9K3#A?<<ik_Nb68i}vQt
zwjM*SA8jw)y#8CdO$9<TuIAj@)f3{4pKc!9Z(FbFC1A<`0+3?66#Pk0Us)2v_8s|l
zGD{Too`b4tLVGovhm=xs*rIj5A2Ksd77<wZvMf;?V0jS@rZEAQ65V>DUf-3h9b{!b
zeP2y}52R`aQ`K7}=Gze=nUiSS<WSGL0lrP+*z#mI?5^HNJADBF^dP-=)lZqtY-O7n
z0EpR2-*_`Jg+=F4R6fKon=gV|g1n+<y}t&lCB^_!P<THsDyIk6u}w5;Ff_pA&7Y<z
ziE{)g>>DRPHZqu*T4pnT*P#^=RX`wSX)8nYY{WIknZAC6$nI|5FbjLHejWSWw2BA-
z0!Jyl_b*`{8(}~~Q~!6}zc(KC7NfQmoZw2KO36@A!$M?asa0{(^_9YHnxH93CnBI{
z)+CH8jq6Q_Od@J#2m5=;Y+5fP7!}Io#TV7+&AawSuQRB{1WTz^tGqZb<+!L~sZHB7
zsc~)yOW8Daw{(I%3E+Kayxk(!H|qvBjk?!T&x)qm8(0J1-VD${QVg5L&Kq<37TZUD
zi<z0(8fnuM*NowAsBWu&oujOl-`Y6mO}t?JBN0canraXkuGP@nCS^@Ym+Na)^TojV
z!a)k>f2z9~(OJgXSk64gx7+Z|kjio(US{>O38~efZv6eJU_xh5P}EY2frTFyC5D5A
z5KV02a;>-6TlVC~OdUw03h4KwD98o@GFS_QS8f^M`!fbs<eXbI0wPH~ywFjc<4={%
zurhW#DBs?C0!f&mDyyO>uCK3W%SA{@d-&FSCr76g5N2%%bxRqVjH-enM$<YaTLQz^
zKj<e#W@;&!MF9MM)?05QwLhYvO1DNcl|nDhy9^;~*KJxxTC;9wxWyIo{n6%auQ&v@
z8cT#`x7@pnM><$23wnp;vToZ&QUIVOg5XB<zOSuCGLO-KVM=vf&kE(F8V|hFauAcw
zn}tC%tKtUj>EvtRaSihJR@RSY<J%54s+lEA0rcDKhIgdR&=@SG)yoxbt9l%OR~#g-
zG<O56+e&a7RsiH}wi#Co#K;c(G?<eL6rm83l6nAQfh*urY$Hv%%_tI<y&m@U;4M;Q
zt33w58H})=x73Ib5@eE0p`x9`8DdClHyzy?@hzpKS!dYMRIJ<9w!Uv0DJw`_4$^p}
z)61!*9hcOb8co2;IZFW)m>Lx(@5a$L3?$8S;tgh)v?Axp?0R;zvs<{*c@$R6OlO)j
znWNWL53>*yGwpHL+LvG%3h#FHJPQecVeM9WM<Tg4zfF4{=Nm3ETYb4%hkC=mN0=Bu
zimZ$jOU?QQaRp#z(SX;gSNU~9*K?(zzsiKS7}aYxbZ-OkH#{UOsY-Th3J}-BE$vlZ
z6bS?CewbiNQHs!{DoQv9NE@|D@h7D;zE{QGEP)tSqZn;bHz}DpTC3l`4u4~VUW8@U
z6lGcN?2OWEt}({cw7QHkF$ka}xXu41E03^KTWh*zx{}hFLBIdLY@<HnVkrTjD>op-
z`zC&80Q1e>vTnbvJ19^!*J-LkCtif4_@YoCMT;8KPmImpD^UXl!{MljdcADhq<~Lo
zegH1(QyuH8rH*ZPe^BjDMnzpqY!=joHAa|uM<KZt#&ew~11lF%7YWlv68w>P41lIy
z^iy2YRg_{448C`|5q5J6;Q8H&ZXGgVminq`0syMegx)*voFk!0+Ymxqr_^{LOM};}
zu8qL>K@5TQU|CP_n^_JV0Ep~0A@dfGjOO1W)z<ge4I2=iG8k0LCd}&)4GEwVz(hQ5
zqUZ0II^)X>Km-=4wPqo6cf7Y(NL8d-)HfEQDwv4DO5@+CI|PIjAcujGuG1?)12hi?
z(znmnjnJ*0a(koW-#Xnl*R)yw#_Xn-N>-sBy~w<6_Q>});J3czTed-xkbc-0SFQr<
zU26!!P7;E#aAn~|gfVGo>(JDxjppD1kV1Z|9#3pUk^T^zwzdRrPNM=O9Z6FKC?bTI
zDGZj4r`reaB{}EdN@s<yE@#VW8-g)H;b2L{73h}2_te#O_!SgIG}ekVomSqT?oGz-
zz>7<5yQpWaMomqEH+U!BpxHF1nT7z8MqxCGAYg-JFnY`5@H#Kz4a1~=y&6NkWplXY
zOBhTw+07VS@g?|jU{qg${O&5>TkT+5IsE3+6dfZ8dVR4QEVsfA(?UGN6(U}w7?h<r
zCe^lW+Gdt&&_VnyA*cTzqa1wAn~r!Qm9F%zm@h*eQX8Wx%>5v0{tX(dA*d?j^Q()>
z^Jp|aIoS7$=2D8Y#pOH%l>qF3CV;VvEGx>&VsxPQEPPZjq?t2GbY_Lp>FXfK?SB9F
zP85oWxGY$Hh&R4Rx+P&{O|Gg)@j`J@mW2~)N^NM{W*QfOft90_|G!`}GbM#<4HE!B
zqm#lpxtz6a)Hb#$ha>;6M0f?0hC~%>A3uLA`zNP+2X`lB<-L(uE*kSe(W;i7YkWDj
zZ6$txZ|``o*q;Q5pD)AZd|pReG;Q5B^Hh9$ME5&~iM(A0MMPW|?(?JZJ-i|Htv<DF
zSh^EOan3t|kT7lAWj$MH0t{~K=tm0k^wuHk-$K?iYHb55_vTP<xD{TrB_uFq`vL~b
zX=~O6ziDdCBE@BPP#9H(9TFfAf(~?2iUD0bsu++6fpN9V_xCO*1|(Qo@mSU_>tQ*h
z`OB->BGf2E7DFskvEMq;td|+Z=&W1Y@3KVfB`f6>qNLSKRzdxBN;(f()gSK{_a{R|
z4VKq+x{5($&_*qtbD-1c7V}R&KKZLZyR$!*(NIoK??_QTetvc}n?HVW`TNhmd_Jq2
zCMnP)fFqO2Oo9eTDtw`8nqoJ0AmGu1E3+}^2o<Vo&ilz(hGtxcR~wMJ92bpdIp<IS
zvsPG$co6;A=GXfE*Grj{cQe)cL;Tt&tWvrRU6x?Z64)eQ-b|cZY*1ViP@I$@EKydz
zEGRCKb=@@eLIq(7HzeJV2CDhDj(WJU@4vGMOn?KlH!Nh=Cqwqku<Ov8t8<=9Hcn)l
z)A*LCU+evM^9_-_XG$7FG6Pr<5O|{PkBN0bUEiM=?z@<LNH%TK`E0RU_><$q<NYyd
z&c&cuhG?{;ER14t=YS7R#;3a+R<^e{ymvg=J3Rc0KmSFW($#$N_2Z|%`KK?RK0kl_
z?ELBZ`LeB-?LvIz9b2un^=e5t0=kSc-Q*l9yE#q*C#FD3s{}0oMiX=0$Ph3Xp+rt~
z?ZUWOWP6PKF^7%aSQxTdid$7%?cHo3g+ijJDBeRviMDOpunaArkP?&)-r@0s2YmcU
zh(uXcA;o#!MnkelSBd<Qmj%HP78f)1=3Fs6m{fQ6Cso;!JfAfSMT)^e2i{Ki4(}c9
z4IN4cfeGzkcQPE0gW+g@|IXq5zyGU0fBxe9t8bot_07|N`RuE&9zVUhp3fS+ZkaUF
z4P(kaWv^I?I4S@I0R<!Bp<8y~F5rT_bTW2GXs6SP6VlUxRK!=G@MENn3jNw$RD`97
zBk7A>I%lvDLcN@&CRq!XaOEiLba`OC=v%TG<7OesmJHvY3JKx8izzKb3<fm^m-GDo
zXl#}=iinwyl;`uHPoBHG2S>X@CsZ?moh_TFb%``CioKB&YZkLcP&MAoXS23hR)b1Y
zaz!z!q;%oahlihjbb3Ae`O{|?Uq62K^*2wxdUE;sql;%}=hMY>mXORVDzZ@X$ecm}
za!yfYw%ygW2|xjiozsQ7i7yqQr{pM-A8PQvE3E+`eVuO04xA^&IdKZ4n3{T_F=>Ph
z#1%uVAs+((Hz{vr6_*X7n;)Tx7$w&kV3+lkqakx_PR}sQK9v0F8QdmFYX#6&sm}&A
zm|23ES<D|;5;{_Z6mctHI7fLYdh#?g|N0#wvi8<+ouo^uwq`9^3@i8W&Ph`J;_26y
z4O$9J3$tQ45|FtPfh9H7+_3e>)Bq6?aXsjaYn0`-{cvl#Z{LYb3P2I3Ks2UUr#1}B
zVmPP<RY}v5V(t83SlvH5JQ$ag%4-bErk#hNhMk?A6axjZZR(~jE9VPGk;1#f!@ZN!
z<DY%_;8(x+_|uQ?A0JG{!{KO97NWuyI;VN2=!m#jit|o9;c~DSDHO3BDux_>?hQ<4
z3XR$%U1|y%A}u;M@V@Z$Ldi=(S6Z=I7x?GI1Gb)#?Mu1GqHo2iH#`%s`>7*eZN@Db
z!bT|wF^e!dUzJ7ay*D7H)HF@38#?jT*cU?)pHl3*Y2N{9RG@w3O99?<g4Xv$B3>1w
z6wZ;_#2Cz?z|4b@*1Xf0yl*lP(nLI;P2*$SJ4~lX`^Wp^9VdtGa8&xqcz_tDiv}^)
zTC>1#w0kvMPUnlJsjI5kKiD(sGNh^+h!lmF@u(V&hNq|U!Nb#E{`~&s_2Tif^Dn-6
z_W2iIfAjd+i}QGP{X9er#!f{;2nhtdZDRv9sHs6Ui++OwLWmoP(4pG{<vZB!KSD}c
z!y+tuC>(&4QdEm6Y6mh5ZVSD6UrXvIGoGY~6i!@GIw6)#6BCTo4qf_Dbc8@rNJ^u5
z3hi_eqSEYmueviVlQ&;_QWmOh%cy=CS&EK!_QY40*OzB6p6~7L6vIJ)akdx?szEXE
z&U;^$MH#&qv9mMWnT#LYJ^hnU9$x?DFVD^{o}OKP_Qls<Jvn=EF@JG6znU$Z774@n
zO8l|0OCd|h`#f@$5OEdh99`bdv##>J#aI1NNJT1AM7(z$n>Fn`X)*(42+P~&md((M
z-Bvf|2Cd?>-%Z!<Z07vOTlz$|TL)`UYwMd{3OQKURx!dzS^~8YPaw1wI}}ZU7QM%2
z#O+n_ln2wcY8JOszxV-fe*fzD3!;UjETVaczgk>Bembl4_-JqJ9mKJTTDMW@O{Gbq
zF_|ysZTRx*$Fu3>{=wd0IB1$h46&a3L0OH*6Ypa1t@9qPbj}qHFzk&6C%cpT$A^Dj
z#rgbCu4eVK7qh?rhd=!8_g{YV`1zBI`K(<6CCw+8L6l;UPK!2OL&63CjY9!Iz?>#6
z+z2hM<|f}SYfKq0!~A(L-XVeT?TNOkoz{Ev8ffgyll9%sRU(e`;)G6AHCYNXHD^++
z?4H$6UTVBIxmDu0UV%i@MDY{>iY=)-eKK2z+Z5jQ((GQdQCLcfV3zW0=|GkuUf@K8
znG>@6*fjNWaMs2vdx9iw5;y2k5N1pYiG)Cj#i$q*EUspCn}CQ)L{(UgEcIgYWc`Yl
zY)&K?E%h@gdc(L)k`Qit{BKt?4S;T{LWr58p<v-cQxYz6z=F<<2y`!&i}P7y48!4Y
z(X>wW?|$?9z1_#xR~MmO?jD>CMuVe+;dneyrSq<7Q!A}Cv2-O73-6cE$z;+(LsVBd
zRQ_mp_nz~=RQ>fY?>~R~><^!P{+oY#^2MXeCoe9aTwX1b&5}5`n;;rmHE4|11UIB7
zAgJ8LnOATf>k&JD+}a0~R#B<_X!q@ujU}~YX0N@uPyI#q+K8ThC~q&*C#|!(`oWzs
zEu9;Q2ZRY&h7ePWkqQ8*M6#pL3=u$aa|wJ8b_ltNW&ROShnENlBrj4FRnx{gZ0yV|
zd|kKi1HCY|t@HJLIzpJsAvz19i@nM4{{HxAZzME`znIm}FRrIeF#4sj2?@(--P(9O
zjP0WEy#CwYon6%r9~|uMO!oJ7j}LZWaFi57tEQA?Y*GyKwuZx?DhH#gC@X^Adw@s#
z`#Yo2-8*-F_4CD(r<b39_4r@EeEh{XFCLv;TuiTKjj|ZW7}Xg@Lxpw`HRc2$@@h59
zegTuWgfM<k>L<~?mPCZ~ge27%Q;dyjAV`!#|Lt&#n^d<34ZE9=VMfwk+Zy&TH(3FI
zuiRs=B8{rapzFvE3YalQNJfH$U1Ak)I-=LD%9!Go*HM`5FOr0%dQ|ex{(e$CK7Y1I
zMQaKvVZl4^o$o-^UXe21+|5?6>xaJF3Yx9ymU_;;)XDXBXJQm*TG;Y%Q2gxV;De)`
zp%<c9wEF1m>bg#gWDS6#Y@?=BCY3s1x?DCvuI9_L>*neC#q+c4>AVR+V@##@g;0q^
z69+m|YeQVN?R;6!opVBZaT$#bZP1vU=-y8C@czk1_fJ2%fAX_CCwF!yJB2}nv9=To
zq(Z!7<;6QdELV246`L8DHakWxc$wG5>xez4)0^D?Ef4ut+JM!)m1El^D4nmI^B_|~
z+b%=fXo7Q<b6!Y+tSyOG^Q_&@u;MKwYb-qTPFJ(C-wk>7SF0u2Elkq3+|$K>(3n%C
zvZmQ+PN(jE>BJR6$yPOCT-9)8XBeypNF)RPz4qK_CvsLufPo^^#r|k~dU!CM)laXl
z7wTFy107xEOSdVmN*W~ddk0Uy{MqDq^!C7)W_mN8H~(A>S6{hVe=9;Mu-NhGlheab
z@9yu91}U`DTA!Rx&t{7jE;(;fm{66bUg={(P}iyi6w_t6xW0ULasKGZ)n{LRd3m**
z&KGUas0m^s@D4@6LQE{GhD9Cc^ZE7lbas7BLk!W()EZ+Tl9P0}J9v2S@RuLm`{aW=
z`#Zy<opR*TsC3?fx7s6$(o!U;79rkpR*n%Vp|>vHFp7#fg&Fu3=i6=Tc1<^=<klyw
zSH}$jZR?`a-MnUU-aDU?HT5FY0T6Lz;R^>LML<hw?exjc>-7}-+ggy{*Xz)&<=?)A
zxc<-Ww=mZNHZzMW`#1lO&Q+I<RI?jK@hcBq5ACYyJwwQ#h6GEX(&&I;Q8`!EX`bK=
zKId?VFGYl@w?nOWpm)^|zjb(De)RfgLPZxtHXk1D{rq(2XfkNqcHV@uS-e=xBfUvM
zQfQi@nV2yKQy6juc~wA`fj;<oGrO4TH_xUAzaJeR9NanCdwBnNZ+~*Mw=)@+qtaDn
zQ50;<r<CS(Gf#GPc2PL*y*Hl>UA0~3#nVlO)u7tDdvEu}+1*FaE-tQ?Up;#M>}+~*
zJv*DXi?&gdI$BZ%3SF7XmQw@YV8h=G$_j^gFB+$rZGH9D1#CSP%q+9Hh=@pGhBkzD
z+87|Cq4?5KWX+R(Lw&Ua=UCkzfsg3j=xxkmqroB(%{&ZVWKejaG|8g+lvSDja{nIM
z`&LAY12*^fcmCx5@dw8{057iE=U0mt^LiHMa1%8p#6hX5iYBR=B{R5uItYzOHrB*w
z+E9g9Tr`ibpa1h$kM@5%INaa6e|q%M{nOo@>Ue)L9F~Kj`ofpaE0QB)8=CntSWHx^
z!E8Jn5;m+Vk>panJA%J6xqCEuc)B;eUR++yzj|@?{Azk}wR~}P*`(B}G{J%*6$1b(
z)#Hyov~Nq<pDrQ-GK3JCnJV0%q!bx@TX#ur&zkwEvYFgS;&|;|v+^jgg^Kr8<%?vt
zsGDWI3<kLIy13t4*#X}Z2tw+~&fcdFPVViGyfxEBcz$vD<otz}Rj$7iQ|o={5(Jh^
zBPF{YRHH$RfKgGH84?vjF@PGC$<C+KFP}|6e{}Yr{_$T9c19<MJ3GVb&wus7>FLqY
z{=RokKo%^VE42(UwV`g>cA1tjhGkKkg<2cud^Pj~^`g2n*gM=A9UlxXr<1E$dp5iC
z)#Hol5|`6v)})yeGpMGYB$GiwFCyOiWfR*FOwA32^dgRQv`q;gw-Wuvmr-@^URo;s
zCClYX2#GMuBx+m|j^acdk=B?Tw{HfUcoU(leNbl3V9A0J3Ll|Hq;)Wofh@fg0G-jZ
zvxBJ$cy{MHZIXXTnrS`_YWw*G=FJ4~w7Hks`?8vhE|>K@#vm{^X1f?vI|Elhh1R|r
z(`K@<OH+DHENtIo?;q!L18ZJgh&p3XSs2Pf#@aR>)8jG!^xpmlM}yI%SkB`&=hrW;
zuM?;oDLu@FMHy2}W~6H^sFWl<pvu*Y4Az)wvIHYpsfj7YhGGJ<t2xg?{p4)%yDt~Q
z^t&(5PmcB;-Z?xv7(Y1OKRFl|g!9E{Sa~OdVYO^(=c+~9%onq;tcSxP4bGP#wWgp4
z%e1#&4#&mbUOJq(#WGH(%UPZNaK4<*uNqZI8Pqi)h#RR;VfnZ&LjsJZ0F}eebMvbA
ziFxI$=iS>ISJq%pqq`Zix@EPv3>Lr)>U<^68`;D#3yah=6gVf|mB30xT0NR8C6vas
zxF$%xnmxTyVQ-`f^ilu-1~33aY=?ku74f~UZZ52MVK3zi8P;b9ZSy$4dBg@g-P{16
zEW85Cwh3y+RZTKP;O*0b-j&v`(GJ-1gtrh}oFDAS&+Z&NI2xCt%O*T}asBLax@en(
z!n6wwweENogOKLP&c&T=Q`ZfqcHwz+ssScy3KfHjIVz)-)C^JifB5X#@bR;M{QYQB
z^1+?``^S6t?;hPb*gx9eEei*z7ZCwel6NQz(%KL-wRO`van5<~sUnJ0#B{hn+!^Wq
zxU7R7-#eMkn-}NPi&;HewhIYux^5w00e}!Q8iaJK3>;f!KxW@}TpyZrlk|HkB)ob%
z2`PL55rt`jSqleJ#8srp%G<tKhii7A;bu|vm)WeBF8WqZg`W(WVldb-)A?fAgw{}*
zbu}Xi`@z_3O;HS_SmhNZ(!tK?;ho{9_b21ZNH#4WJ->c_J#XOERmoD;mXjvcn2}yb
zs_I5=uSt9YY0ep9vIIDaiba?ZB-Lrht_I_<X~K2AaKJYg^HKTuXm96(!`%-~_D@d^
zP7Zc=MuR~`FC6$XiHQ&zQjCk`)I0CQsU|PJa^ePM+aw2Z^kr#dH#pg=P7el)I?d~J
zel<P2I6GT5tu{?WjBw5=OM?IoCWeIW+#@x%Gzbd5ZS2r@Ak_p0kqRQ&1Ds-P!xDf1
z&JVp5T%YpxX6xk@HrtqSsz2uQeBPCeEXx9hx@|&gAXQGO$~?BcP}}!ODoPU?yv4oJ
zeRMqd_;hfxQw#(#x#v$8XV===4t!xy(~#@Mrx?uwS!F+gvvtMTRlQNb=mbpA1Qs4X
zWw2Efl!Q1zGMFZfs)!sD6(kXHnc8-lruEhHv#Z~J{%A5NADo`tIo#RXsdmSe2=<T1
zg_jg*i53vrwlPh~s;U|chJ&gcRBYQ=*P#i4MQoO>8)95?Z{&}5_U;{&FQ#Ep$IID#
zx@=~3oouNn48xf5o9?tu$puU8J>iXSNM->DU_}vwCDS(6ZCz)~+d+Kxa2b%J{@#Fc
zrL>LTxo1nLaIgjs)Vk9yoU68q7SmNtR?1fNUo8=m{Rw79vs_gm=fCKU!gu-b0Sa9|
zOWHaA-9z09$Eqyb5EjdsaiB($gVBMvAg1yX<k+hjw)N0dH6@wLA*&`e70PXe*|t)M
z*Mnl;Cml-r;BfyhKE1Oyh!$&BgX>xQ)zgbQ`Ct-Sr8mi;OlC3F-VFh?p+%Q=5UXl*
zbZ~HSd096L(jz5y^_i%kdGUZIHJCW3DMeGjL7WL&I6z6#gz8{XElyj`qq}JI@zs};
z;c!^U{?2%JRNg%v@9m66)c}?pD@}1en=WHRSyt6@Pz}qf6!Fn87*s{YQRQdzWgF74
zEa!`WG7S$$Ay~aXY7;LP_4(Cowp=di>lQl(Gh>1%o#pi@L_X{jQ8tH|zGa#uX=ZBa
zwo2H&TMJ0GGN@)v+cxb|fx?Z2B9Npeo7cZlEBu@JGT1w#^%hUxPb9^&8cd3!Sk7l5
z#+aO1VJ-)%8ciwk1FMaNj2MIHd@`_~KiE0ltKzct#pHa}eDUP+s%`?Df&%fND+|>W
zLZd15f-B4vWZ~$Yc<)LggjiDsFt}CVK20Ur001BWNkl<Z3^Y6PyI7tGTgOrwkR){0
zotbud9c6@56{<SuV!kv(akZ#CcfP>R&g5V+9u@vzZ?ZG2>e?*=fW-Myb>W;;Wl73l
z;P(#)LN^!=heI)AiZKPhT+|YEKu$*G-J`>+{i?3pX&tWSm@Vt+{JKp^F;w+N7cBjd
zb3*4pfrt^ywhm#g5k@!)Auh)NuM8@_8J~Hfdjmk6vMS`rTS_4HJ$*ms0!G8Zs4B~g
z^F<qwQnF5bSU#bGZ+x8Bdm~L2>rvtE9_}6QSC*DSzgY6?r}M9#Kb;2`tTI#rI*Je>
zB{g-f7b0h(fTn=fJ%0A0X_urUs|>GYTi$6-VCm+`ph<6@m2N4A<K(F`5+<a}zV3u_
zRPBXWFH&8HShskwxc=(J^{6P04-UtJ!UIKNRpAV&uA7)rRhHs7D9d@XaFnX5MuVaE
zg+j)Yi64ZzZlF3ERmp-Qi=(kAFK1~sFE3}qi|cx}Ov_f6&1Ecie#i>SB9aq$6c*x4
z6X4(-R>4LP<J+!q?>c+)CFWVfsVmcZ6L+^^V0Kf|9Td0v<)#fQ4YnVUVXJ3bu1C9e
zAs7k*KxB^40?0(<z{rdfvbUGM9%kHFnaH{HT8QkFg{NzxHHit)taZ77HgXa`+Q7s&
z923_6=O%R!W_CM#OM5a*A(kV*x&~I>dEj_5{MqS#VQF?92E(1_*Nev&^{i!L5s}0a
z#R*&tZA?a%-WM@-T6z+iN~3k#wu5q%P>`Z2mXbXv>;2iX#gnM2nlxaQ?_fY84N2et
zF_PwTv?&1xNoLV3sf$(uMbKc$Di$Hg<<n;Z46EU!D#oRA;@VJ;2cramS<{9^y%3-(
z%JHZ!Tp?z=ySqD+$_Z7|a8wLOW!p4HO~D2OU+=i%M(cKOQQPHpdo>$<dHJF>OI#Zk
zuB(Q&#*S~S)eWK`whGJbR!?3)8=QN!%JZt!4#5^DB4(y3sRD#^;$$SIvN{}f#V-Vu
zT_qLUEQ43bI}%Xa26x=hVppp=y^;#_l8)SusmW>lIVLz;bh#Kc#OE$E>&!__RY9Q#
z#8Ct+2*O;qObj=%{@cWxty0Y0D)5Tg@$4kT=5#!HxVICcUNx@qUM;%V7OAbO18=2R
z>dTA#yslGZP6skGCmY--8*iPTYE`di>j^zdB#~SwO0-wHIcY_FbUL{=8H`cYGI(-6
z`<JI@PZzFEqb}&#kxl|*6V$|$jF4uP{h!60_%VPc#ZGcb_FeZnlEL!qVl<-^MgW>L
z8C282ur5-$lBAm>(p?M+h?fcgWB`u@EKE}p5w~b%+J=I$@UB1+%@sAgI49<qO7Ejf
zVOfjTUYO<<UE?ZFCZimqJs6e{CAeHB5i2~ZLU)JmXi~MU|1gZF%W!cupVsr)A~h*C
zjRq4d9S}`TI5bKZ>n?51CKVGAh)Q1Hd9-BhR?O5p@Fm72Or0CioGFuP(=084P6Q(X
z38fi3tgPb~fy)KW69SCu6OLY5o~vT<-#?Zky?V}X;qZEc$jLW&h#62gjE2MAgT1F0
zvqfE#v}8hv`_3<Tqc%V+5im&VfEEET<m_nTAKcv=4B^D$63@@(7Z;aJ8YgW?lHN%n
zPC|@o3ME9|q<U#T^L2d^QqF)#YMR9cOf9~m%WR>o2vFbLsFMZ+NpzHXSX8bY6oq$E
zN-8}|XU>voteh-^QtGmD%n=r<zGPVy-Z?AjDNP+|p=lDKlVP#5KW>_IygOXBhv!$z
zY2D7|(?zfrjLBl^A`_CqRE<7MiBA3Cs>0;!v^-&HjJb4tG7Tx1wG@g}LJ`V$Ip90j
z(C5~pD&B7;+8h1>dGjDIu6+#s_Q=+z-NG)UL9LYGcr<8XXR}!w+ZYoS>?GXkSlw;u
z((i?6ker&;X=R;Q+$;H~AKl#>!*m%`UR*36J)bpk5G+u97YHZ<C$WvD2FZopU*AgW
z9mp70`c{T`6{bq<DhNUCwa1sgfqTbS5d%V#*&<ARYJ99bb>LDdRpARydf^bRZEfUe
z(8WABHlYqhAw|)OgLx^6!jV;342r4^DTEl~LTIBh6&`!Ldri=`-K(2)cD0x-7Slx&
zlnHDjBN-qoU%gsBw-Jgrm{!uk^0|LZF~zt9AW}IxN0INg59P99Zz0b42IuE=XE1Ee
z^Cod4y-!uU2}XBC3T_rpw!A^V92&C%_r+P~Th+C4`z_%o)G(;Z(P(@&oj$&N5ddpd
z9GpiXBjkGXSy%68Nw3eyGc~guO>;x~Y{Toj_>5QEU}|uAzAG=5mZiui_l`fgcd$P(
zZS3N5`Ngxd%VlU~KsI^AR9gxyBidQ-yQzJ!*XA3sT`S-7=2&!1Mlni04LU)MX7q;c
z#GKp4@1<dRrN63b0WQ&yC7=uysZ|g$stFq(Qz25hve8ro1eeMdZLH^uI2`!NcvyN>
zi!3auc~=y^Acgc*RXK{bjiqR`(z&7(8+j*#<K1de?=0$cF<Z`RyO_;pi`ozN+7JzN
zuCSyOAq#_=1yeOkee_6gPLuPVKpUEn8b$Jc;G}dQ4NSTo!<#nyD$kz&TcAV_ys0Pq
zEr~ao_oYc%nT*y?JLuir&8pqh7_EN;&@*CR`rkK6U|wWWRo)jD^Q)_7)+&rnBvC+d
z4$SqM`8tL6%{18U4KbL~40KSY=?LM2qticmaCp316)v4km*1St&gM-cWgylDu)<Pa
z$k~cEwVc}2f7u2`+Pu1Bvn(JwuaPQXbZVA4%t+0deBVuR$qb#7vkU+ww~rXKq@yal
zswogmy;$3(QcxwS+E^^&q}I}TwXkewDYj)f91e!gdGGvSP{{zv%#~GH__k@F8e&`d
zVmxr;Q6;Xp8}^#kW_7!)!)MPg7c~}(X^ci0AvvWp0wVNIayWIb-Rnz|89GWDf(9ob
zz3a?8Fk^qXsVLu|Z^QQAe}sP5Tut^J4jdr`&{b0Ewi|%;nPnSGpW9EGP)k)cINaIw
zPOj$jd22y4WRV<)j*jTkH{ZFzuP395%kd2!X~^*L@&3R0<aB>*r2tYcg8#$grxyXO
zD}sgf#264#BuOVLu+Y?cp%K~0>Mn199t!QM(i_Z@S_6zNK_SVKWs}{2x2}V<g{0HW
zOxNoz*D$673IY+TsZA<@vPjW8DN?LNO3zu-mOhXs;)SK9qFtzJEh1$RjLCV7M%8f0
zqk|(uYC=ubWivynk>p@+pRNLiX7<UiPA;zIPo7?!U)Il_zld6<#0cM72Iu4!x!qw0
zW+|jb4J1Um!_B|@vUqDYdjo%5XH9*(Hs2E?{fDmc*{(+U8#@5Mo$9I>?~cbJT(nJ4
z&=o|PO<T!@_h_PE9}j*H^zugA#dD>4Z+G+;pFaHA(a5l9o6w~A^^>d11p=y;+NOn<
zK?gP)k_Mr3;(Xy1rm9fY-UhTeb+JF@u8T0v2jZxy84bbcRg=LIy4v`8|9Kx>RRGS^
zdVZXhQIx?fNveuy9H>b$CS?<J(S}ms#R;`4y;CiVQdL9SVwp-0nl<w<FKPt!j!9EF
z;Am2oMOl_*41owvgd#hKqq}$ZKK<FjvXSc<zJ7fE^*3i1vu3FhVu&$VCl2!3vbEYp
ziow*9Db(Nu6hX4L3pVKwMvweZka`+@OhLM|Wo|wHYQ5@>*}V&7kI-s3)lv$<v{j9+
z7-MxaR+^#_3MNw}b26eDqebtWNLTqo(L^MN0^mA?x!<0!&PE~Ann$SyWA*~T=l$N%
zh9Wy-DaLj_n_XOA>lNI<mjz4bS1yu}kQ4@(ViOPEKh1D!nLSm_2hI>QYC@w{8-}8E
zO0tMVQF=>DPoz5RO{7BD9pJA&{_te4Fn3+o)-21X7xh=q+Q5MsCCy48*%AN^g)g9H
zh%p9O<$NI~F-Ay-&BM$~XY!>D?7=o-RbwHuUkQ|EFpX+4p|J#AYXW|I2+}60V!KG+
znCdCbS3rY#4n>?}A%LSY*Bb`NB4ceXM+PSgKp=%|l_FMo)@^cuzHJ2^GM7?tLN$h%
z>aQ<Bt$Z;Yxx>@RV0TzaSyZ8_m^2vFLJXEbj)%q0xcG~|{?qHW{pR`XY!?3ZcYk}i
z2+L_*&rnFwMq|K`J8_<zI2OJR?II<GFH0*>GPbhz*J4xd%m7<wb(wUYs?KfJDa|hp
zlV?6eeD(LboQB*|2yvB|a_b&LFvkYH8n)E&*y<d~ZtQJy&;dG6^r~zNZ*d6U?l;3m
zKH2)6g%o>}af<Qm;vyty4xClX{(R<lcRRw{$}R;&v!9(#St`}wO^up>NES&W;)33e
zcZz@aH@`laIMmGtNBd&)x?VgvuP>)~a#26IxK70+5r%?Y$JKz85}>3b3UM9=HASvf
zwAwWc+O^&^F9!p)?~GkVw`A*ya6}1dUyGl;4xsB9gLHs#rDZV}d%<=P^OX>7DhZ$t
zOVSBlk<?L;jiMsw#+Ww-Q!!1kZ6jvO`QGk$Jg#<ktDW6ZS(R1k7BMADN+?ojXL=EJ
zTn<0rzx#`y|2o_gSNz@o{kvwWj~_q(?6arKCry}6{a`#S2eYP8qj$UJf?(#M9;=!c
zwy6th>nep^!px1*1h)-S_M4eo!-tkD<m9TMTP>Y8DN7`Pf7_C?>`?EGOaJvS^DUIm
zvm}*fj%mLd?~iw`m-83rFPa1$(VV3ezq@H_R6|nIKnNk;WNacxDaA-_0E$L0wp-!9
z{KdWh_OBm){Nc&aJH~YR;@Q{VgnxZ>_4MNM=@ps;x}|YQ8A+~n+09@AN%77(Pak58
zDJjXGv`VR~{+m(7yzy!;lc|^B*cCJqc<VW5-&rqTYeFj}zoRZ4>ur{R5w6QQkf@f!
z!7|?_fj5_gVrm*C(I;_<ZCE@%zZwkv&SX?pQWkFSa9@4aR=irMttrZ4ii>GAxc~E$
zJ4dH~`ENg{WcQn==bwH3^?&?d{^>XW@wZoBU&Ur=>Ovh5N4^v%m4|byv!|6pgHo|t
zrC9ItZw4N@yOT0QO)DN%0@8()q_v{g)A%-d#JVbjW1SI|N0z-5$`!4YMs!+DE}F@V
zq8n(Yj^b9Oj|3*LuHfSa;CQX?Be#VF9U)X<@<{jg_V)HBXIIzXTwKp1qBuz5R0|Pd
zj#FD_n%NEB+aP#b%MY7!q4X*=(u5SctZ~C6C1{HnJmRFnot^Rj^xyp($K~b4lZOwE
zKKS6ygP%P-JviRkJ%IBe24DL5qV^UF1Wz$lXGSvzC*plkc;~(N7-LAWbMLItT4Wa>
zQzu_(*raV4(3O)~75B@Ii)<`)pLZhbs(&h=A}*(T2y?lzl}^;3pLKXpe|2n1Q9;$v
z#WvH7Gy+uSy;=+qkz^S}We5g1RfLET?CQF{xST$Fa(;ffoY!$#2l!(D`1s_({n5$r
z_~FjZz_YIJ4EIka`-5R|c)I^5fBB0C4^DSS!**H6_S%9vi{6n;j^5=AlB}nIsq=Jq
z3L83ILEa>3#NC^e?2)Q6*YWA9`MCV)zLcE5O;ycd;dzX}jRmzz?7fM76KX*_JX%4Q
z*-SN<CZiKNfjR4f#(X~f#SE61Pw0FDkG3(V+fhJ^P2~ui?eFYAyn7N=|M1Oc7flMT
z3|a`&uq-PnNFv9oy*-<ONY(}mhG5P+V&G-uWLS7_X}53^>q$8*5RS&9|M9>7uRpy%
zsOx&RXkJ`iUrndhay&Ww<iihs{inb9^pg+oo*eBA{Yd!m^vG+f%EF7OE=VKdpcq22
zsOzMvuw*G}G}F9gtqThpX)r@d7ImFPolmhbHB;xj>u_MK4B>7DvscKvV!<zq*V{i3
zdU1uU$_YAf?b79DU^|A&7kxHchX<L#sA^`a>t7kN2bKy|HBFWS^OAw^sxYI_sS@T?
zxmaSc(Ahj*T`ylezq-6y&Xzjdn|$)=gX7(U0m_5XUOlgeqroE1r|s49;_7%b`NhKz
z{_I!3Jlq+JYP-CI8QS34q*?G);R|n|L32~{%N3?DgL@MsvQrw@TZVUn95#V;(^0z$
z+Z3OLmafZicQ>TX<=Qdb%Z|yJLY-~4O-IRUhGdm*b^X>@YNt!7rP{PCo!grXMx)VJ
zPoGZfqyp8_gQb{zA1Ut4C10fwYX%M{!@Z;NXjqj_#sf2rdr!}vrI!EAzy0K|e)S;C
zpZ)%e^FKT~KR7--KB&LknI4Y!EzVEx9^biha_{ud{;R+I`T4V}>DBySKl|c~C+FWh
zdGh=MQ6pq5uqGrk(+tyNC0PN5tST0Cqo}58y8UPbTOS_<pf~aF80A1hC@vSX!)oq`
zE;jUSAF7aCe1hF+pSj6hn5M#FiaFKYLEs#XVv-ErgJetu1|h|EkywMo^zy|QUtYSu
z$8Uaf@;Cqf*MI#tzaExHk@K_btLNv>Kl|6uKl^{aJk<T=^F~|!#fJxf{qqm0#W!C*
z{oU{W@buXuo0RkAY`KJY5Db&HaL!2)O>>aV_GqM6$laZkvRcptymNWaHdAqKqXDiI
zNb3rUWy!bF1_{EE`9pNNNw0h=VU`SQZ?tquW3E_F2hf|56w4<}Q&zB5-p$^q^ej6I
zRSXVcP?VG5=;8f4k^0rsC+E}UB0^<ExPf!I{8!%j-*q=5#hD4E9XPpraQNxT{z>VI
zIJ>`BeRMef#lz!)Pe1?Y=r8~D-l&TI{KeD%?f>|f-+q4i`1#fI7grZAuIhQ1OvV?N
zS5KckJHL3bHyQ3t1|Qx({_y_s>FM6l{-kiuN!c{Z*>qYjYV}@C4N1|09^H|dVo9>E
zIV<6*)91Iy5uu17YMU8VS4;=VcF4*ucrzlI^&V1a8~I4|rk}6b&2F4DpBGP7IMFGM
z5$oVG<|@q{!qTbCmQ0f(sfCzaQK%7cCB3MNO={~@UpG&`dhsv6{pL6S{Q0tuPadDu
z%XV0e!gXxVT3l&;Hm$FxSLe^0`7B(YPZ&SGd-&_0Jv`nW?~N;m25J+3z*gBd;x^}W
z^UZcM{?(mvhCDK}IPX<WHJPdN#oF_&sq=Csr5eptEs@>H9!3XQokxrgW?n`4<l#fq
zdJXHV3{;_tl#*G>{uTk8B!|igy?AyNS5(Y(QUA6vt5g5T=2brp`M?(=tY92_ySKal
z@kbwgeR=(dM_;^{wezLeU{X*<P6h&Yjw9{clGbChmG+AcIPZKzt2=4QMa96S^kBF6
z)xG1Lf{&j)nJ=zCy7%DY)8h{x99++yJ^0|LEO|9+|M&m%(f{?EFIx_j-b+&uqr#o+
zj*j+6ckb@*PO5Pwd*kZ(V0S#M_72C@V03XEpPw)P?jJw@&wu~B^Q+6tWr~KVh!DC-
zfJSRNsMr93A}OF2t(*J-yD0Rz8Iu*xd7-7)C{;LE>y&gw=N^FGsC3X_iP`$^FzI!u
zv4A2ztDdkf3Q25LXFBuMhRwRVM<k_JXQp4?u*00u<@0l;G<IjI3mn(+ItojjS_%^i
z2(?(aLIDx+;w|OmJeqeHxZuMyT@S{t8VrZyVrPH+vyUI#-#e)y+v~;k`HSiFx}7i6
zymo4;y1%n?a(Z%la;&P~JUaWsZx@dqJ-fKNTqf5rH05AnnvjG3AX4N7Lo$WnOIeMT
z0C4vvx#j^4popzjoEki2brxqfcqDfwo7UWXAXLp6U9c?5l%_C&U{w{{=uAB5AzsNG
zp<p>%2LV*0ii3!W_g=h+IOM29toB<IFdK{6_uXN~EBQuH%z;pvW2hYN9UXbK&(3Er
zX7xg25+hlPD=8)6*dZ_qWVA4`J5zq6O|350P~AGRP-y`*Wio*OtNZsp-7jaetFJE4
z&uVLR^5Vt0)A+&N$?3`DVp{*}=hy%FAD&-^5Q<^TqSms(@FL2^boT6W@$7v1?0hy~
zw)47~FPHOr{^aS`v&H|*-J3s0l3Ztk?{JTZJaA;<z6u4@UDeeGyLnS=QamM58jdKF
zY^7bZ-T4dm57?P8)0m{D*d&KXlkB6ax~fpPfkYy&INaacA3P$Fs6vyJWHz?8VQJkc
zAd$!n_s{+L_rCYNVHBIqt(EQVrM1<Wg@s1DF;g=pPtzjzg*Y!68nPx)$%~?Jg-1pK
zUkx7+GDBhkSTa%&ASDIziXH(N69hs9@C+ao7k|-GI?M+IQ1z%vz>LHYnj28~+9;AL
zsWJkACr~VH#7cULsxGd83c=HXCQZ>RU0sRWii(>!{E;ae0%5tzQmLa4YYM0mc?>pm
zL{d)Ipz~2e1uZ}_?|q@{Bjf7nxeiaIcj)$?obEn7+1)uF4bn!^oT}GrafC|9X6W+_
zb6W$nnYCFhmWONC?yk(gzP@&IZa(rd><-C!GHQ?vD0pXx6_uG43QKgcDFgmKUP1JV
z9RralWVps5W7r3M)%Yts?cZ+NF@Ao@V_bE9yBLp4u8$KD2!sVhn4r;^u}OT=@1OO1
zX`ZTr6cE)6(aV~fKjzZO|5ju=K?EX(F_|(NL3h;e4dlEFSaeSY!y9Xj>Gt)03eR@?
z|N1{aIUbpelc~Aow9s@k%8J5yK$^~qwAU#Pd&5s&oV2G+Yr3&G+uWF+?hb}0-NQ%E
z4rXWTNsJHf&cAVMyEk-?pC3GVe*9$T@VJwn^-_U8M-(BbVZwUo;3uF?yHLH`YJ-T8
zlpuqNMdZ~F>RsvkLR3TK$y8XljIkwOUp5l_Uw5g9B5A4huBP9_d&qr3K)?hZ$yx|K
zN<<3pf=g+TRw{zeB^}Yp(P2bVw=_R9)0(PHHR3u@GfGU8xJHF)r$6itK{LO<+wC8n
zuTC%CSlD=d`{qG+@Zs+6FP=U+?)8URCb7*l9Tf#6Q)FU*yo_uS6tQF)!&{s<iK*(P
zdi{$fCm0$d0$lWWCd3N{q@<S=L~$bXJr26cd~jKY0e}MF0U<Q4U?K*?#8h#mmu<Jp
z^-r<vM~#;(Zo;lB21d=KxzL`i*XvJrcaMj?+yik0&a;gzvSs8DC|6t4#Ub;mjI2!V
z-4~8?1g1vJuIS86*+#<s?x1^~iU(_o^~LB<zWCZyGkLam`s1H}{NiNP(dnqQ_{|^u
zu(iByl4gM>M-;UVZ0ac!lZg)V;`l7vKkdEP?HqPS-G0^|4D%v8>zroUC>;*!39hfq
z+`PVU_r}KN%ED9>F^F?HIFVE}%~7-1B#Di3Hw37cwngd@BjgxSSRAUT0zp*9{E8Df
z$}pnkc2%(u61<Bkj3`}<$+&iQGVs2%L0wLtR^xZo)cTB5PDqf1pO!){#K5wYd8~>7
z(rWcrqR@d=5fMoUfe4X_*m;k{NaVeUWA6}!d)>YikPcloEb_qsy+<SySwf1U*yaB0
zw0FF_S2#Buj9xt7Io#hDpRLTdzVQ0pJDaP`h+R6YnMi$Mz*|5MDFRoF9`Q;u8h`e1
z&!IZn5}+|AXuUv{h?v<`^%ywOaRUH|?YM4QN@WdB-Z>eQD4>NOiFgrIuLuR8k^#eD
zh!|so1fmoaI(o4!j)^C|pvzRpCjkuQHVSSymDJla(+hKRN8R(|^L{TYoC6VIQ*R_S
zgMi>kr8+#If?f%;ao?G0O;AupYXQ;u0Y~+bHI4+Ra9Mh7X}KBKYypN%Gs@rn!o$tg
zR^i-xKl|i&&rb_G*P+Jhox9)t&wsmm<JRKZMsv2kw6TH2p14pgJfMl4Mp>RZNY493
zXE@qDK07=a9Uk@iBQ0_(g&(HF{;=!)s67+k+FH7QbM5}^>#f;Y%MM|Hq(ur}eCv)c
z2E&X%(Dw_{+$xCVBAmpD%lhJh+4^!M0f@wpR9$$0dI*eWi3cSh0*FlPT`J;$xztZp
zgY$b}rr@e{g4c>)!3kVk2`;T_)k6i)ICiRdD*y@EGbj(u)dR^WkpK#y5Q%~h4F|}O
zF$zG)isZebk_d`-D&7)V8-e%fFn3uOfwJ76b$WyIVS-WQjrAtthRbx6jyyOqm|@<{
z&-?w8BI~thl3UlWEzV3YG^aQ(T)*c@$@|162EgT>SDF!Aj*l-^5iO6Wp~xXzQr*Y#
zarR=0>!kDs%Da96GZ{~1uMPxM8N6bMrU@8<0SRm{Dd5nr^U_i`F?d(8#i{@z5#}>V
zeWqR))csEPxObKXi6~l2k!3^R5ri*sCs)I4f)}~?ql)Bws$|f{L*f8d@tJqfsx@1+
z+Drnk-`Ut&pNb6s^26sp|77oQASbzL-?)GOi(kI^#+y^ExnWwYY;0`ays@;tI=e96
zoS6n|23an^V(Ln<1CxtMJ)Cy3qx0<OEZseJ=YzC6@WV`VFK6f7PN!42!R$=qwR^X|
z{*})?ynl0U%C0WfuC2GuJBPjAx#XEeH`S=kH5#p{8Bw37y<#9yOvX06b7f*0Ni~O8
zuFzjDU@11SwHB3$SZD%W<1an~W^k!$qMR&O2TGsC*<rbA(?oQH6)pMFBODE@96fq~
zvK0xEB6`sf>IQ^*@gg~a7=(yT@HP~2h;d%XdB2klv(dTlpN{grkEs?>(wb?vTWymV
zWhm4Qv#w~0Mh(H-Ok=q<y}hz<cXQoDaSY^!T^(jg1b-CFK!HPIE*N%9oLnzprlc@F
zvz0eO;Im;C6b=Gom>CR0S3`gX7|WhZcrkc?2xg$jNDUh;Of~0br#ge-LATTQ&H;c%
zh7)T{*vbF{%qF_y{2`cCG$Z7$2W)D!soZ%_7C-^mL)`5RvurpRb*?Sc9^PF^YP@&S
z|EFI*dvu)l?E*~Cf9<<}{@@E=bjBW@oI3B9R~9`;YkhTYW##s358I2&QKQL8O*u}T
zcZ#XQ9IfX#S9?D4-NNr5oE`TD$7gbUR-`F9kHb+u==alJuK=GwV80f@Yqz)V-M#+K
zn|H3QwQG^q;^}nM_anE^vgv9RqyPXQ07*naR5#b>8VTn4xpPI9<7*Ed4n}F3rTTke
zM!;A}=He)}Y(SNWU8SS`cfpMQ?J$GSfY}w#6)YW=Jb(`@Tcwv!0I#B|UV{0Ih<Fgs
z$cESwF#sx9u#u@bp;0Pn?gv@c?GHx<4f^>Yb4rZHur-ZleYQ2zY;e61Cy5o!2feeR
z7<xApKU|%k-k6)-T%KQ=n<1Z@&-`pJeNGG!aOfS3)i6x-WB?5XU?owd7}S<m-3zR^
z!<R0Cs){Pq(vVyvQa|gOth+))%chZ-nW;J<o^`w3ekzs(2$_i35M!nI1He~J*gx}D
zpaTf&0TA0(d$Bb;yR(1bod}{JJEXH>@T@!FS+lm$P7><$2S5MqlaF5XM$uw(ZTp>X
zy!+OdzOs4$&Pl(2cyhY7u<+#hi!2}HhHCZZ&8@Au!r!emmN##(!uj#Z-s4BRyU)9w
z(<~i&mwDD4Aj^2v!GnX7B!-y=x0})O{M7nfy<P8|opnF_@Z(l%=I-6w*H&5!tuH=&
zkUn{K_sNsz`EV37JbwPXMx)t=Au_0vjrt|2h{0=TtOb}Tr71aApt3Hl+SFenVgK#d
z)sf=wxe)d8U#qsVm!1YrLz#16%XOT44YM{FK9#loCHfeF7!8CBn5q}=JpnRsBlT)2
z_E4mSbfJLJ@Hibc&Z!yOg;sOU&a@lNM$K5mX`c5614Q=XUEvbxPSxtObzYd6-ddgI
zwPr+!3`7_DHmq7yA_6dxsXC?t07*z<D1rt>rKtBRq8>_RA0Q~9GL(vdO0$m&EXZD2
zy#)>J$_qqGCSj^u<Z78yA@C~UUeK$&eW>^+6f}a27)qSfV9~TXKi!yaHV?YJgTZK!
z`y#W%Vu>vxt2Y1yLJFW1a(jWAA-zyATz&unD2+T6qE^uej+Pb|Zf@V&d3xv&JbQ0E
z6V@qeqkQ$=o%`!kAo}wUkAD87dn`4WZU4!if9D&2@xAG_YZTdTuV><D<lHYl{AgkQ
zx}>gqbaHKDb7yCFeqq@mZQr{$zqYn<<M!<G>QsB704o|fO)?*ifHY2Al#DV>b3Q&v
z_fLjTPkQ^q;;65=+QRAn?*8u6XIZZ|(@yT)UVnJ++P&KwhNW4vG5VU7T0%wPdxOFk
z7F?dhU@;|XBSxqOfsrGHf=rBF4CS#+*eIZQmwN4qq@*#bs&^oQl~ihSH)Fo&Rq17b
zXoBt@$0w^mlVJ#Lq!KPEg`zL<fMfC2n9o2_2qy^ztf~@F34vJ&9fAW5Pp)zZQ0Dp&
z95@lDDg;2P2EYUo5Xcf6vcb1X6p<)%DO)2@=5$d>fl{DCF;mSv^b6_bayBdk3yO>|
zD>GY@G-`@!m<)NRX%ZXDKC!~9&1iBjeq|Avhz|in3C0BVjwKHPlhyGT>yBupDh_IS
zt@3aJ<rMcGi9#DE4)yW@MioDW6T9Bzn-o$FLi4a9sJDnQ>)do>rrF2~_xz-DGVJFP
z1I5HjL>ABlT3a>jwXc5amm+<r{wwH2Nuf@Lfi;Q~5j{NWI5vt3AmrSXxG&t=_{wYR
z(+NM>Ir`TR9zQxtN4ECHpM3KhfANE<#RZOP#u^2v)f;)?M_E4GZd)?*3rn4DZ?-+x
z?GM@ui%!AT8dQtdwzt-<Z*Secy|}t=>rD@sYmuwwq8vx*AX6~8$KKE#ck})8?%v@^
zr<V>!d75i4bvw_WpB$a2=*-;g-8)<NA8aqL&o3`5)N9StPWSMr6DMRX)RQDJ27%P4
z;8S8kMD+y#vcZUBV=NIfF%mLaEZa(yf!sI%d`T{@;|p>`^J*{Lmy(m=B19FL2w)UI
z$E6+>1p-jzdoX0t5H+yDlSSolaexU)PAG#Y91nC9*AdEnjjPHzFGXZb6xnn%n&7xm
zkO6^^nb3>(-sO4jTs9hIC*A%@=X{hoFF+=4G#ZgX8$~vX*pRh`SA%r;KMJ#};|CdU
z?pMG}FJQ(@M6bdOt7%@22U0lTDq;|D0}v{bssXWv8kUz^GYELn>+heP_A+st02sqy
zku0%A3Iry62FyO|@@f<kAU2WVC<1~!E4<=J2|=w&6a0g<*0(;lwL0YwPtM=}&CYN4
z`lG0|c=NS)|MEYt+_~l1L?$63V<I-D-JXk*n)lvD$<*vzf0TIz8`rx1!ExuTbAJA0
z?`fko+ge_jU6^k#FRpE0-?(*Sw$*O7=A7!tIgi}Uz@yQ6><kYF#d%+jdV^<sou~UJ
zN4)}^W~m&VcAxD$-#<P;qtmmsjg{ql*Ke$^EUYfKk_e{jam1poI~6xb`i7(y)d3N}
z02+g6hzuJ-422U4p-ECH(!hzx?J~?JiNxYnm<89m@R&TQVaY5yM7>yGE15`uS-JeZ
z0yBl*2Q#P)rD>c803c(%_u@S&7~=B7h>xO3RMWh`D!HyeN*sba4zo|a_*?|i+;_U?
zXT8DsAn*0E-XP0!pG1_@>QhrwaU8{Q^#6I7O$Oi-cTgw{L)g)TP-2FL<@QXoKgtgK
z!*icz5Glu+No>_386Xahu>oeE{i$EQR7sJLku00Y5VP~X(VXfH3!_r=*}To)eSQ1&
zt@iox&d+{#^wUocjx$5^8(;g&AHDPKZ>OO3sp-(w+Sn+HlYYNHJv%!$HwR<|DXBM(
zPCKjX8}GmW(_44%-Fa~TXaDo3a|;V=8ym=MqPQ_V9W@%a9=yJF>+Z_t*7CJ$U`!50
z&j8wFNIX>5+&JePLa#5od;O<7oo6Q}C%s~jdRMsJy@P}O!_&Q!=_GmW-i>>=Hr~9u
zwY4$dYQ{|)`D}zfwXF3dQ7KS`P*Dnt8KNokn~EZ$0GBC@$-$|nb(IJKP(XJj%*Icc
zblt_0_s=UUGzHL54h8=Kn1yo&grh-4xu8NJ>b*w=Lb`w%qP2FE=OPNkV;xkOlZ0Rh
zLW!m|Hj3(iQCfhA73E>(yS?FHlpde%6`qhxR^)`ptIg>0OfD;4v`UVZ@$rS{E@G9H
zcHSW(F&kq8X{xH>8>%Xjl1%_vE=ZozZb^J7X7J%p1O>KbxDsZeB6#d?86I8>RYXDt
zWED%pR%2$aHSN4VJ|7(R&&~@dNQ_1iQ^Q(DWQ8h;t`kMzVH765rm9(EkVl8ht2LC=
zqof{>(ljqTA+bROjr^!Z`Rmu_-?+6LlRkaE_g{ax)A5bIoqp##fAQt-{Q&C?lSC+B
zi2=Zidhy2EAnjG+MsqrfqguVzXg2!8{@K~t`T2Ql?SuQTAz*A{A~rU9^yo=#s%7hq
zrS*-u`NcaAURzjOUtU>>YYBJ}#UU%2I3Kb1#@Caf)6T#h^#(ipr>E!H;Jipv9F5%J
z;qlYw&xXD3QhR#)+Umo*H`>#+_2q@RnW^bUElqot*sxei+l|>IN@8OfF^OXD3h_B8
zx=;oM8n~)(qX2yAI5CMaP$DkVVCu&Yk$n6$mZ}a>2zCaDXi8)vV#qR=i@A<N%1SX<
zx(|5~ufoiiR{IKOSSi`Vk-?G??-5X#RU~ZCfz1!AaN+WR*kF<!{<II32db!It+k9y
z<b`stA}9jhiy|>uQSjcSsZTQpgjt^RYBQP)pC)lN`OoTYD^-U}C~q@{@0U`mil0?g
z00J@!WrtINs*baifM}@H2IiphHl$a=Ose$b<hfZv0Emzn&@jx_r`l7sIEv1O#opO*
zuaFc0OcEm`fXu`)(TD+p!sTM!d->Q<qD#gj&5*zI)`NP}Wci@i%X|SULf~VPq&T^?
zH2sZtZq3caPhXt;%l~}#sFQc0ar4bDee19Pw}tE5Nxg1BEsbyESma3nfMmT0BG&75
z0bN{LYR$Dl^}*eHjanm#5)p~wq|-V3mw)=F_QL9KfA_nkrIk2|T61%^@7}q#wY7R}
zW9{0tnO2*b@<JrGsWFAJB=r=cyfC?w{e$5_xA*+GzjJbao=NIxG?I@WKYRA<`Eb-<
zSZY7Gef_OB?rm<YOgC$Fi|O#(lB~4nYq2#542n`<@LgxjioAjr00c{tP&Rc%NONUn
z#YEW@&_pHSSc_7{r2u6>6mH!3Ksce6Ljc6!JPBACPU>ab$%<)2fO=B1Y(ir)4_NMI
zfP69KDh36S*aA^Wx?ouyz^Kf`f$bwEGK9p2B5MdSxb`?tu7JF7!(rO(p8bbl7Mjz9
zm5PHf2geH!B9bEgewYCwRTY5dGlIr3yD}~T1_Ui7%0vLQ$h4;#^@!8FI5-=0x`UMM
z0M!!J$k$N_qJXhdiioAN>6I{3P*oA{KnvzLeEfP0Klt9eUPhxl>zoZ$4H6pC$enI2
z%zyc{&1(zw^Fi;QfARQtJMIjc?Q2_q_ILmL=7Tr5-e3aqMZzR-1<XqS{ZhgJA})!e
zW}^{DvG?BC$a#-QpM3Jk@$qr3)_n5#$?WXR(c$6tjjbXtM0|U3VdeVu8+Yz*Zr^Io
zw%hYdQBpTit=Av;LbC!3jxde~U`{hUIPJeU>OMa>-#s`j3KWD+zx#Y|=j3QFPlxq-
zyt%%-wYheEZE0zC+8~Ykqe1^<*zad~Hr<@6B}rZsnb$EB2%s9e%p+gYQ2nojS%{TF
zdB&tP??NGX!BaPDH6|+Z!g=QqMFdn3@FHlONPJssL%69@+EBa%v!K2!BS};QU<%Tr
zsBloY0zn9gmzyz_ZfzHE3UBesjMXIk2&)RGQYA9x-Iap&8wo(e-79@O0RYgINf<$+
zL`bBJTJ^g@KrBHESViAdod=ManT%+kz(=47;!Lg9Y&0_G56=5X!y-o%M1vZk#$*i<
zjMFF8iaTD3D`-tBe?|(Vq(Vm2BdW2S%joUbZ#LWjM``DLRDg*rN0Kj0(U<OT-d>${
z!{H}SJMVqC*MVkQZ+-3ifBDrv{f<c*#8r>%(ygB~q-QY<5r#&D04n0bc{>OP2{5VE
ziab*g@xIsZ&$e32YpcKg%?FFiOLy+wPV?el-+w<B+1cGSCfdBV)u>P3fAGfE&AW4p
zYpunVX0v8%Nk%froy1X=8{ya!7DYZRpqr*UyC*xR-Ggp6bY?h8kGq4z<KymG$B?Yf
zPhDSauPiUlw`U{Et{5)P%`VQ(8q##s@tQ_9@*oNvN{NV7%c=kb2;F)$)ZlAXV^}qj
z3?>Fp&7g87gmPqs7)oL*OsqoD2OVihBT=xQ0Dx-wu7bJ>(G!|=LbAr70*EJ20~E7O
zq9k{|aNa2hVJLqkL_>t2FXiWu0`n=LiWvU7G9e=cai@Tw3Qg?fI9`BIP*Gf=qP*OU
z5ox?Oj8Q~HV>gwc8=S=67-l8L#?(z<%*z9;Dsp&s>1zNe3JO?AFsCd+yEaCT0A=Yw
zxtZ~J=bosgQ3PZpL##N6K<i8mQ=6(cmFRddJm?Pw4n!TLd1BcT8M4X-y{GXqSkXBE
z_)>yQ5fp_WSF}J@krmQ7suMU{_gky;$)LxD-|3v67dfl1OYgzf!s|B|n<PhvqksM2
z;Nz1)FG}uw;hXP%@2}bmi&1RZ5D+SpM<Qc@s&dEiN76EfPvIZc8fOTDMO7TdaU3-p
z^|^K{swXBg*Kb^3SX%nUuYQqx|K&gV`lp|MI_&kfu5Z8p<M->e=Hk-IOlvOn@`bPe
z$@Ki(+WNKT^t3q0(>xcnNJSySm=23U4&9zR>83AE&wIU5ZzRK!AEx<mFg)v=4hG#Q
zG0Q7+cWzyK?f%X6m4(QN&j$IZmn3yxj0#_Xi3L#A6RIl11r^DNOh|}4wvG%1Eaip-
z6zY%=Flgw5gQaR|nV}#GnZmf2kRS+x5ONjGyzDB46HI+M8xbv=KnAcXBgG~npi!DT
zRVSdpB0@lhh?&9^(1}%deAGk)X5^r$#&T;>R8lRayb6_!1Vu&Fg&Bsxh7GSY<4arc
zM4&in$UYf2PClm!5iikzVUt5Z3HunJltxP!yv<x`ZsyCgDFOl+#IZL)NRNb99M>QP
z@Q1bEVi9rNjHep)I>*uJaB$Q=9}b5;bEqBxqNHxggi$2Xs`_W#_~Jq?{L*d>C;%Lo
z5K_6mzNRjB#qe8S|H8@9an8x_b`J*mutwST;_O!*t}o9{ogDUl_2K@{KR)c&=BGEd
z|N0;P%hs)1fQZ&0Gf>Hf8Dm}w82~`^sz@s|jzUybB66+>?>tIsE2}GwMuU*fyWMm&
z1l5z1qla%i{PfAE&iVO;#agrRuRs0CoA10m)0)}X+`4`DUY@(#w{9=5uf<X1RUDy`
z#kdC63bIGz!Jh4%?;Un`Pdc5m!6?&F28A=dLGOIfae1ohR+d^z^RqWLS5}wjBDPtY
zsdKK#BrDK)CL_R7rdz^cffWq^s*W8sp<<OJoG1_wfe~WV2sJ{85Ig}90;(WjDcM0D
zYl-NhdUzb-eddLM)Bx4686p`rMd3z8;ncez2>~_4hMCHP|I4p%F(S-_M2rNWB4M)f
zxMt*1eJYA-c{l+eLSAjgFDrEaV=$}!DvsBiKN4oa-XL`K4ZLkt2ve4!glB>(sMMHZ
zjvMu6(rjiTd)@Q%QBMd^BNN3ojv^Z|hUB&41k8fmThy1F%Bw@8p^{Ar01N;1FMW=D
z);T%7aed|a-r4@3cz)bL@f)qiH{QIpIm43c&wsu1{)f9A)3VE(-~8*pefak08_g+?
z5Y>`EauJ5SCXa90`0xEem|1I`b4gMoHb^03quv!O%S%ZTdsnQittd&BW$%9D-A1#q
zyMHh}J1Ydg`rrdZlNIjx<n)cty}i1=@zy(ESX$qhYR{XvCTtxLL^Uz7aO{P0wS)8Q
z+~v>r&JIt{c2861B+v3u>eDPc?VJ#~IEFXwZ$G$u<JQ*t`tm}|SdVSQgfhw{M<@t9
z0)r10389d>m_Wps#3w~iFbbr=T6P8uF-JI-GbjNtfB~X$Aq*00Wsdd-VFsZoiYhUJ
zDig6W&Py&{02C>do|#gGr@tR&0k8l{s?3ap%uJy+@@1HT(~8dqAVgkk)+RxQ6;Jq5
zKdUe^sJbrw`O9gu@f<=#r>X#=C;(nua3fF+wnQ((EFvx=Dntyu$C;RkKu|pq8KyuL
zSYx0V%*@Q%DDJ1DgR^eGC~_%OiNP9UnVA4Ue7G+>))8F1H!8>Nl`AybLqtP5mC(aG
z+fxzkz1TVLkDeW$@0|3+!?f|Azq9qm_R4HTPj`F&_=}Hshf#;8U;oCpzy5<CPS3R!
z0gVw*3=JNM2vI6&#HE2GQ<;X*rF$+CZn$$UiYg;y6k=p1W7&H*Jw4T)YfVp272uYZ
z7V1fZn1B4<Ki_}j;lI51&kx^tyL*2A;~&5GS3msWFMsvRYuj7Pt7{uu*Eet8x_<Na
z+|qJ=rUfQWy`1Mx4LK&QHBzsIx}nH%Z@7Ed**)l;oVmd$2g2cKc-}iZINqOX*u{nB
z*0rU#-@J4C#>(P+vstqM#J~uJcZD%dTxLv!2r5GaF{Z|BK#_<E4I5N&UPfMWW24}C
zA+E<<D7c`@AYvlp#S?gO1%fwR7RZ%h$wen11ppNh@yuqt2SByxD~O^Ju>v~p70`n?
z3B}!k{7~<Tvia8JRpqX#iAuysh{5uWkeFa>PwA_I9e~h6kwK9G3=^+46TD(kzv6l|
z;JNhAiT5`CUg<!NsEA(NMR~$iFtb#7B7~p~5fK>_v{3cIb|;V-)^IIJ;w1J+sq<%p
zVODroI8tLx#LT9uEC~A{UA1jZ!fZ0t<0K;!Tjr@G(Y*IydlTI-9gH$>9`7G<oS;j;
zcK`N+Yjf>}Jvi+C*Ps0M(UGQ8OKT5b|Mm}mw6=XS7-=FC5C-j1IZna7d|X>pUNpHv
zUEIX#YXD%bxH!D1FIDe@ue6CxQco;10X%*3WNZ8S;o;$F=k$#?-hS`Be}4VVx7zJi
zf7pNP?YDE6#r32<)tp~mUfEdNzI|t7`$lVVDQQeOgaXkaI%LmLrdj}{L)$%*<KFp;
z)6QXMcs58ghYHc|;o;%oNt*T>HNL*Fbm!*!jjg54jkVQ<nZ&X$2C*UU1T`}#09Kq6
zR{#hB8DvHVmnSx<M>Rvpm>Wth<q-pWFsPP1I!Brt%nUe2wkAf<BG0Xj5im#~%hI(8
z9ug+H;a#4)A+b#a<U~AxQ}Ix7YvtY|gr&XYWN0>i4JvuUGSH}epe}8I7Z4CfDiN_|
ziWzyMnOrpquX?Mmz>KQWgh~8g{vE2EM8Nq!0%qZcD2yHd5CPPOtarGR%xsLQHDW~=
zq<LpJ9A-V|iL_=+Y?&;xVNw;+syzSdL)Zk&;G*OdDMF;Vnd!s;%jjEQdFRI3;>>jW
z!>79^>5!x1-g^6+Z`@d!w*CJ3&p$l=_4DJyVH9s%``Vv>|Lw1Sg(yKwXb_mV+{Vi7
zYHW&lc~5((Zh1UT@+!;_WqiIDk??vV&U<H&Vlu6nR%GM3)|~Uc*X!q5_W3Wo^XZdE
z_aEGKE;o^lYcX54v5o6-Qg19SFKyn~zIJ1K<=SSmJqOkbU?Gxw8i|p}<_2@rT;*Ut
zKkE(mjt4Ie25AOf?4Un7IXvEZ_B0*#ryKPf*OsrZ&)>Vb`QXltS`^i+QJ1HK4A6jh
zMr2?{GHfC;bu=*m`;=r<H!_{r`Kj8%jNM$GU7DR*oT)ENH``N5!zimOoT4BBGF!`5
zRaG3QSLBO(Te8GgD^wt4rU3!KdGVkgyi+w~N^wfbH~v1DF%cm$mwBb%12aNp5pg+)
zunMa)0GDm?FJ|5=Fq;gp!<#1znY19TE`KQEFJdzw3|$jnx-Pa?1b|S^t!1rl`TdX@
zgOG{#P<ih&vLOV*VNrAj=iP1w7D$P#H3m7HII(mn3s}-C$&TtXD}t9aG*CehKpRK(
zH($FyI6Hj$(QzC_jj8%K{`9r~`+xk4F)%kBeeKO#Gf|Oe+3w--Pd|RvEfTx9eE;*G
zf8$GE0K-o5h--pCh+1(rVK!v0Bm+WTvAW?^UOz;b;kz0<w{(KFhKYYx_YlgDXAB!;
z5XsWKmedvL!M!_CTwhyV>YN<ixV1Gs)%4C~S<1#b@rW2DF&p;Y*Qe|C>Bj2D*6W}9
z{OQ5|{<Ei#Km5(pPd+-_-E~>lxqg~To}*#yj!duXPVMN~&e>f1V0AWLo10o$XcPq>
z9`y-6XwT1XZ{ONj-unC-_n*Bu`QW2RAAhp*^WW}w&(DX0z7#pdhBacu$P2hZQZuuy
zg=-rNGp+i<{A{xk=fkr!EwVIMB@s;1tlv-fdvti(>kS8JZ0a&WFQ6h0L4Zre5)pxf
zWwpwjA&emq)+<#k9m+H)5DKCQOIk)QS(Ar(H~vRiFoRSH{;{g&{;UnkklG|_O-;9^
z8sKtXZ6*j~$3kEv6#-R)jH*<Lnk{ja3?H-K63SsHkQ2Tn7O7(M6u=rH)Zp3d5miab
zMhXSEoRAE~goe-<FpN~L5mg$FNC8pN0vM4(p|G}=)M8^f&0IfC2l>z&@E){qk&S8w
zV^qRmejr*|gcFbeconZ6$prDS2X;ydnb%P&fVL?BmZ)Ki7_z_nv+o|ic;=n^_2VZ`
zJHy9k!=HZm81n3^_qN~JnzC3t-p~H=*JnG!`e|nGeC{hh_}l+;cI7%X>NI6RlmSE1
zJsh_XQ4l<^0C-U+;1v`JkkmOSeF3~>qN<We!6B99Nuo~FsXBu=-p$HlrLdS)r)^_7
zIHocIND)WWs3%Mi%r~tusA?Gv5fjGNSY|@ChMRFT)u=5lEUay8Zr;4TzJ0gWTC6o^
zy`$6_;95cCn0;)VwOMAn{o*u}Pj@?eopk45bb9V;iA}R~|M2AOtdov<^V7-p=ECRS
zyz$!IwWW3(Stl-?YBm6}JRcezUEf^z;ur3}_2$;v>eS+VZDnzKreQnBdnZQ+M~8dI
zM|-_)*JVXw&Ejmm-8A#FNwW@v!HIxFjS*^!pkx%tpc()ok6ai;LJumU8onZC1~MKA
z$$JqH(Oe}r9L3Dxcw&$U2{jPoW!w~sZAgU?460RO)!?&Mx^S0g{!0n*0O@AJ8!L;S
zd$4tPedgv`%Unrw1-kSin0fWbuY3nDI=Wn16E6Q2Uir(v_X?XDA}5v&Tce0hq?e|n
zVpJ3$3f5R=j);vSVrioo)(EYnALGYFv-68B*4RWu$mdZ~CsI_W+E?F?EWS87`rz?V
z()zG>-n+Bj+L*7iQnxR^{AlOV{%OZGm$z<z^;_Rsy}p^nky<0*Kg-Qn^>UHNXWt4$
zG{%UCb4B1MUwzI+OYTeN5Em~T!tBb<ZQ{izza}Il03f8uS^%7xX&oLNiNZTy{L=jQ
zzw_+zqmMrL%}2laWoLh{-|ddh`<X8c7E#n3s*`?}rh|Puc)WY~<T)?Rw^kP0iwi}x
zb38M>Gdo>x%}hUh?bd@ktB1#LzIf63^!d?`-~ZLo(fPYyeDm!$?jRPOvm<e#$C9v`
z$ktjj^WC%b?5yvKT(xHy>r=Ds_WZTg)j^(4HS14y_D{|Ro;X!->cshARgB~TGZlc)
z$xTtkgR%fJamZ1McrQ*gM?@3aKUGnC2+;8}+%FJ;sv`iFsn_3k_0yu$8|>^KoItU<
zIM1uiWRfAkif$&N3zgGl#(yH=J@L&kF<qX}RRM@7lxBKGry`-bIDo2$(yYJag+g|}
zTB@~*aUtxWNEDjrA+r}v^Sqm%2RnHJh&gJQdQ66c4@|fRTDJTdQ;JpEv7DDuW-|ql
zh-=>G3FGoydv0!au~q-;AH16nJH5f6pYzb!EYGg3H6L!zuFu9bQ~$;94&VQH|0G9j
zEx-G{AAIp!-$~lD5*xMbQQ7O*hY-eRTExQZn8KYrgN?JS%ohl~Fi4*`@$zKNNOdWK
zmf4Q-sme9H0RR9X07*naR9L;*_!nuSmgFT#R5;sM8#S6!J1<_m|FfSprkc;5@7%m~
zd+X+nxK?W|EZ)5TTC2S@x3tc2Lpc(wnW`Wwv&NV@pL*!0vVS~$^5W$1w4Y^86`b>f
zVeiA={HoXKEX}uGzkmC!2e;pTc<1fcZ+_*=uM?y%c0U!LGO0SJB3YVQ)5x-7ILMp>
z!|Yw*J>-)12g7GOpRO)1Z!FJS1UJgWjf9iXL)$1IIMks47><JhHkHx{A~Hn5ELDpl
z^_nUGQ)EnpP#XFofF%x0LCK{6lv#w(>IcEH!HRk;?|%p+UfIn;bjZetbNh$;PhY&?
zwPu2^zzh*X9qS(nGkgVR5O^~}1t?)A5^_WWsNlg1A`+Ig%_}eqsU|=O5jYYv8wSAC
zxirs5zVHeJ5HTiHtFg6!rCAjqV%bCl0hEH(X{h0u5SAh#3W7j5V9KbTm>U}_E+4k1
z<Nxa)epE}0lHEP&AD#~5NZ-D@a$~7B->h}I@ZW#>=t(CpYIB>fz4g5x{q_9jW=4o{
ztOz2WwG1jI5uymrUoan6!fc!=QB~)PU?nyQi80J@;tF-gSaDyIFq;_u@)zk9n1vT9
z3V(KX_LHCdWOHk4VPWZ`k3Ra&_rCwj-~Q^opZ@rKFi7f+ufF^4y@zjHzj=G@`gIf8
z0w5P~M5(Yh3B--w&=n@m)prN!$=Ug{ox{DuZtq;$Q?uRk{Mpm}ofkWVerc_>(yrI)
z*89BCFa%QMX_2LAn)lE9M<*wTN5={>Gt+D|>PeC$HLK`HS?-;7PWPI%_|EpVm|*Yl
zR80h^D5*s@ng*J{axKtmB|irgx_AnJ^UnEE5Kb@}W;@0hDKK$K)>Sh205huEYFg$J
zW)%R!iSGgq6XQ}iMZi4IhNGUK;kBvSWJibqFe=qy6EKA_q9)*5?m0w6DwlbWGDs_}
z!xX4ck#L|O7F7TbqTpTm0!Uaox`jqVhC<N-C?Z5rOva)yx$}e3D9eVK0x?ExBZ%rI
z;Zl49W!oMq4@Kd<I`!pe37z-Gw=n!4S-eD+r)&II-~HzC?#?HlJO%apC*2o^osS>y
zWO=c*Hv86{<)+ob(Les|(+~CsgQ(r!-1@V>`}-TOJ#fqz8&4=AC=lE7-6LWY#aP*K
zLdA@6C`v$ti}G*82|WNJn$l<K^3DT@h~d}0_hqdPR7&meqjH8#mNH%11IH<b$rq2J
z8XI0-SplT?-h1!P-FvOp+&{hdKQfnn>C0bQ+gM9#Nn^U+T4*nCtlqeH=lZQXOKa=R
z*?A%B&<s3c66dOp5|1X$q}RnxFW)~NKHu%0ook_-W`6JJU}xv)!Qp|4YtvIxE9)zb
zdK^blWTQ084v&tHj*rgH52M)5%+#BWczLO{urSkTG>AB{F@fgUU~Z;yZGEXfO!rSu
zn7C1!YBd_Qs0LnbloZaDz7t_;0#)X9k`?`6QotA)ju6U*4-;ThP#qhG1dhNE86q~!
z)e1P)9;)hCJAxC|3;+;BVMURP<Qvy+@LDsOgxN$D!OLsj7_zUPDKLoc$1uZ6&{=^}
zN|*(E7p(mH1VO{6AS42<l)~Y6gZ`MTvBV4jX;F+amuBZqflSR{6k`+vGa#r6hzIqm
zzQnc!l3pq^{_4(69yvon3=<k=X;}Q;yI(wc{_O1R{3pNs-R~anK7M|5-03XMH@^7#
z=3K+XT>I6B2mkW%ixZvVnT4-?=g+?Uo$uFXW`qf?K_miV2&%V>n^DeY3hgs5-ApJ6
z)mP8ZW0!_Y7nMJvNlXGF8)ha$2H;{hyYi~mK!8iRI~Zjd5E&cUD2|il?)?Y*hX)^h
z`0;nX`~Cm+|NJ*`vUz>eS`)=lQj40it+}PejjiqNTX#3MZ%(%tIjW_u$N@a^$fKH?
z#`PSNLCT%e?*3W#`B7)*@G#9`kh(#pd%LHPpFBG}I0A&_<)!Oen@dZJt=24|8e^H!
zTCx^rW*hDHbggE$uC1*sEzQi%)Dr8Vn4WFUFDyTMaoRoa5eh4ZY>-!{U<iXonFFJ%
z3Ley{_dZ7eLN;WBo7LD*nE)876BkbGW~GN75+Pq!N>w8Q_-b&cA%`S}F^=rk*7nOV
z3*wYX$iDm%0ArY4l385@jei(s<trhfYVd-631;3q1PD@SVp4#@`LuAkbA>2iVmP+Q
zF|tJj5dkmgMa7E>h*$A&VdSC{A7l(O36%r@2$qd$M1~;$(wlc`MKR3a=v)rFuAdHD
zv&rjsu5B(QHH1%}oc{B#KRuLsUYq&iyWjra4}REKSU_WJ5)m^ZkT3}mDZH{sA(6Yl
z#UFrKC@8-isE0wl0%l<?t<*FB9+)WrnTWXTy3n4Ri=ucq81>Fav1vZ}<kQz*d$_o`
zSXnJ&0m@NaZ%j?i%&uR%zPWvS`}Vz+jcfA@t0t}qaOPaDQh@phFtQo@QC{>$Ztt+W
zvwwPc(i`?hj3zDelg{a*Pd`o5j4dzD&s|&J*jQVeo^B>_Yzzm1JX5i`vA(jrva-B9
zw=f&mW9NOnG1ECqk4}&C%%MmlN{Fy<nb)dStA>LEhU`c#8HgtYLkS_9pf4J0wX3S?
zkOlaU!Yo*(sYZ<L*0cihdcz=S)n}0=ee*B5CXC0A#^o**n;dphtQ@EysJRpYQ6)H}
zAfpox00JJ=i)5&d)FU&JK|&w`84#8qEBAf2F&d-HiYE1viO=#}RSg<ToEVOPLfu7W
zJIiCuq#}+#h@v7Rpon_ape1Dm5^-soV**8yF3-$1NoOMY%G>vEuFjrkqfZYz0#PHb
z-``r<UaieXX4HrO{<BXWckyJ1x88i`M}PnK8#iydh{-Y;R=~iy2!>shlo&DS^unl{
zadXW|?LkB&AQ(!`!g&%A2r-;gwLEK4RozvRRSH24R${U&ia-cS{OW9cAwQX%ALS}o
zszk%sA~2LH12SxwNJXZa^^LVPP`A0cc5QRb8WTv%0CU4+4KpLMHm2$ei*uVdZr*+4
z^&5BZFK=u_^`@F66)b?f6b>U{_5cnb6X^`nlWz8S=V15fY?O($wm0Y>9UScJy~uqr
z+n(OOxwUoc#^Taq;pD8>kK)Ems}&_N8MKi}Vq0W+n&yD<&fZa$xtNn?EvY3@mh~M#
z;YUsiK@2X+UepVU5PHWN*G%13OO2o+00|fXmJ$OBqL>pZfoB3nVNwJMJW9A<rc_&k
z_rWkrL$DrJFHo@vF(D(atY7=hi#-G21NJ7Q#((tnSx*jJC6sLp2vHRoK~T|o0wF&>
zEl@cPLkbxkAOj)W8W|?TqEILlqJ@G-3`$Z4GzvlXSLJId>{Bv1qr(3b6mnGoV1<!F
z4L|_cP~szx);8kk?bmJ{Jo=byk%~JQ=BL?6E%?Fd!raQOjrn#{P|eSO^XQ|4ewSzK
z%S&JW#y4k|m%XjZ;sgTO<10o*t8>)L_JWn73NBcwixyI2?P{4CDM4_t*_B^~+lymD
z|Kj8f6EAi3$iTST=F(l_iI!ss03aaJXxJo~^WMjC<b46*O@nfkE@uN&Hn1kOwl>|E
znQLuqZNBrRFMs;@@y8#1eDM6)^I!e!?DQlb_H)QYeeRuQ>Yq8v)7`WD$-(*j$F#CA
zzqK;onynq3@Ba3a-Pzg3%^TNm-`ZZfwz9wT;`nqBv-PTRElTRq@L)K~@-%a;ndwHY
z*6oe*B7gJE*FSpnF=CuBqf((>2%Qs<&?Smc5H&GKMhSwv6of!Y)he(AGFB8wKolGS
zGl4;ms0fTGFfNDGz(xQnc=d|FOi>(_G_nE+FltfcjYh)(?VX<UTGQgVR0B~#uUG>o
z;~a#SCr)`?A#y1-onfgiIdoJ-MXfp>JH((W0s>?<Ow3HyMu8}EB6;Dw_dfWJATbaV
zPcktw(V$Riyx+?NahZoqKL`MN01JSj1lADD#P-`?{`{v;KFT!f<k_ztAN=ys{!#a|
z7W3!st*y1==_vZmCwu?+>t|;e>Fn}5-}=s<|IOb;Gc#(f;m|pe6ggDhRm=*O-0wsP
z=R%9k3*llQdHiG$UTsj9LX?*=@zRLE#d<f%c3dej!>cg)(yNWX_TD?^!tA-!g$ypJ
znxLU2A|>?d1iXz*vsqtWTfTYc=B+!o?%aN@G2K$MPS6PzYLwyv2pdhXNm|hP$n77W
z?;K@2d%e+lR<F+*TibcD_wgqm@9pg%$&HQexpvza7V*9QuzTJgr5UrS$Mxs?orB{p
z89eWge*3#mqp3!0Vv9zB)q53(It0jlS>2>DM;3u9Wd*Am1r}fc%ZAD_WI+N#GNHIE
zbeSRy0(4T~z@1bh%|wPcVvA5Ja#58DU7pX)FLnl_kDl$m+<1v5#%ZF{%D?lf-U$Ez
z1DTL)Mo>(vCj{EvA=H>B!yF95Tok@2oPc@|4t?8^5Q4d^Ouk6@m&OG8#k)XJD_WF2
zj9CFvfXD;Haork+uAi`vus|EX_tOvi-grq!@czxU?Uh>7xU<9jXTSOM#Ay$c8@KO$
z?}vXAO--SVfee!>f+~TGtwt2U!T&EVM6}ihR`WBSa#6`)EhjZ2B3YIZkrCUNNoHEp
z%S+d9Ja~AxzxV9Xqemb9_M;DeeYn3TX*YLy>Xg{j?QG%lQI?(zduJW_;L~S|^Yb@1
z7Z&Fmz0vvZVgJ!@o-MT63yX^jiwpIodZV5+>a}5inApZbyKW;WygTkbpPH}t(q25Z
zh-ApAxPsIOBmf@NlZru#P)*skvTA>!<^I4F38<(r0EL?VQUnNGrq`r;{zZUc*@%jI
z$+IlTzC;yNykb&s%(Uk|_~6$$0I$>_u;}G_4*(&76ZG=cC6&DtPVQzCOQ7>2WykRg
z?nFTatHY9bt<LIzmM|iW2rX006f;|c9Jp>oWM=PuUgXXdMUes$k}+(8^q!zPR$$PV
zjfKC?%Sa>_$rarAArgK;5y2M#pu~!Xfia4Bq1pUTfBH2|hnbVJL3-3z3v^?7?n`%9
z78}T(fBgQF4|e)J)2c6A`{DobUv9tl5ZM@;7@HtS;Mg@p$W<dK1PHqskJD#}5@LT0
z8R5zltuz9}aU@AZj92Q+U*64_O(1~EyctcBS(kRR$@S~XaPrFCtQ<tWI8ug-c>GE@
z@!A0D6*Lqfg(w;gM^QblC$0JR#@4kPcW&Lfe}CoLhK=f8DRUl)ky%I`php3vK_=&;
z;furLr#pwor>XNvyI#+;;^^q~laC*Z^Ha^n%=FYkYc`4F0$`X8@;n0&4`gjkJbEvn
zz-UCki3l3+GXp+hQzMQ58-`h2Ooqque1a&7RYjdsb%<b)BQh4rA{jtNw1^BCTVoBY
zsxb_zZbEEuq3}U)E?r()^&EZh>7$&8*QX*vb1CF2E9fVfs0rp5FS2u&V0Hn?iClJ>
zzyL%D75L$>4}xXsY{}seGlDT37)M0Ri^93W`_xMY5Qm0Tgr&(41u6w!etQZUdR1P2
z5I|BbOg`l3jj@Y!(`!quz1<hfbMyc3qrZ#{PS4K&{DY51dA>ALfAi+jW;;oUKlteI
z{om~$74<xs`qmHs<}2U*UfgUL%f>_oje-JFD7Xm@h5!L(idFx$@jV(-AeUzQ#OZA^
zX#8VfMnq6LsEvVoHOwYo;ol0gE1rDSn`1-<#c@}<FcCuW4+9d$iJh9BT3%b(y0Lxd
z_M12FyxyK)0<yy_%RM+?GKmwfCK8Uag8Cyp>GWS5_IIA`o}BgtBO5o4PtHzH&wAaS
zcg6JV^qqV6-hAtgo7dMC+ihRuc{&)4&hm5+GtEs+XIbvW16xv!z}L{!krRL#l2wfX
zL#7B300jX+9El5)p8!b}#D#b=VYY~o2`h{;kukvv2dk(uNYBf#e3YL5zwEu|lO0Kt
zC+6-Ek(p1FR;U6B1r&e+3bKLLV!B6*+nt@+o1Nk8&hqZKq;c=gjN}J?;$Oh;G&>qe
zTizY_X0^EGisAI=9^F0NGp*3w(5g^XC@r4K%m{aWh|GLhg+ile_m&?>hCPElWaUc{
z5gy_GbN8Q*j!nFK^Uiv^9aEqV_EyW;*_jUD@w*({zi$lo5Hmtm__d3c@zdvn>%|HH
z9dSv_^7PF-@JvL~BxaYeq#_6uX1l9jt_29dfh$N9cizqwCRzR=-~h76cFqA2_Vf&#
zIXw2vnVEOry}Gfs?Oc5E(xuzWt5<H%^;V+O$Hq<_8t4h=-g5g#Z_i!d<fJxu^2ujE
z{hPl%a`>QAK#EY2Am!!PFcUM#cGv$8ikSgaOu3!!?H7fB8bKi_R0@fOl~OtgtNlIu
zCMS-cI(hQU+5Lx)4vkG%FqX+#Nk9t*3<fC_3azM(_4e|1>+bT#t@(S7wSY=3Z#NqE
z?#-`lZwb1Y>B%$4r)Q_9Cq_r303&5}8XMq{C{CMR4~$4xDXfyJlByB~0uiYS1;*EQ
z07S>3P=$<7v{irvpg<I&L8S=|VPFi1*wi}b1jIUrdD2?(#alH!y***2_TJ5#9g0#^
z>QH|b1dF*^MBD*(YmJsAE&qZUI9yEULi;IoeOb)16g<iJ<NVpmr=hBXi&C8P6>)4f
z6G;JNfei(J8~|8|Ip@&Kn6ok?ZBHx00DvF^lGdtLsqY&bK6zkhcK_(*%ePSJSAX%|
zN^50)ZQD9~V6gh=$pbx+L!h6&e*N|9TXD~*9vb`2-~E@<XU{fVLWUSUuPYIFzH#ru
z$QDNNRXfNhPGhmoJXp-KGaf2tkiWhU`#>U3bn*YJnC*xv$^I40^03hB%f2cF5fC^}
zd`4Pn03^~zo1lg%w{(R4gZ<OTW{#gaHGS;Fp`$ZlSV<X>3<LTVIdzOdPdicDjiixu
z?k=y)EiNsuZ>Fh>B9pMJtgS8FxfQpXW5WZ-rVoAS<4>JByno+d-}ul#r_)T*6u@b)
z5lEFx4XFYcp(YVSszwTdK^Vm;;fQoqYa|68X+t#1*U=PlVhEH{&e={HgHJs1hL~iz
zHyU%T9bs&Iba8!aX=|ftft67cVZhGQ_xOS9uD|7yzP|SfsZ=6y$0ui!+d*_Cxhxhb
zGoIbfa>v=Wh!Zp{l!By!V3{4W^JM^9h=^zuXoaGHl{l3}+cTi&n9gd~IBxq?5w8>8
z--J^~sYNHi1}a1Sy~6{Qk%8#3<3|>*yj!hRudQxxQDjgb8|r=PP-S0l)nMhFYb!r_
z?{-rUQFZu}zxB^gKlfZu?|{|;p#d-enh}KZeCEso6+{+ALP{{pVP&5*>T6M<r|E@a
zD<;a9dr*WLQ3EIhQF~E@D6KHx*ugWaLzZU_nE*coX@uNuAeiNMcR!eYiWA@gGD)QK
zT`T_=i6N_i%0+NOHZxdI1ek$AfsimUIS5r4sxZ)oP{PQJjgK5YK7H`ase{L6s(k~_
zk+V8Yv`w^*#Azp?j$N7{H&R~MY%gxMuHC-3v>scB^?H9h?##{KURt^vC#}Kp!P!Tq
zXU-j-JTlrpSXbiGt@S>T(LfKYAV?f1)>#51a9ai$p@|$Dl>Ta60b5QHK!XSRMWd?d
zAPNG<oTe^e08~PXfrJ!+5h71<7l1V!M}e}g-8(k%_RaatL>!6+rS?|?&sL#G6`bD1
zN>w(S{g?Z4F1kXv$B6EAvH+y6<;1I{$hmMKTVeKi2Kpo*zeJY8ZHsZ|QmQ7R&1cA-
zj|PMWup$^LNc!qE#kR5C8t<t*d-mA!^4faGE_Ir%xHCE0fBxwB%vevo-g|dp>&2hG
zwbFqts66(uPyOnbzdX2a+`3e0-Q}~zE)PVx6|$anVE%nqU9h}s_u`{}fSB!_fnWaN
z2N1K;$$OuG<>%k)ga<wbmPe{+-Gk*T7dOcGaEVZ>-hsjW2M(M*b^7#~GY1bHj%u|O
zq~ltNV<819Bo!%L6~<QF*=*S5jjg$Ri|<^zy1v~G!n&^1=N9f=zjk9|b1Mwh%<R$A
zk3MqZ@c7}WgT|=sW}}mA1VNSAqO*af6j}+01#7{h2*x^gBA~o!2|+=6p_F4QMVc*U
z88hhDP89Egs|JB{Ze-u+wuNhV@35{~MnqB*6_cwV9z*PoZo!d?*wtr#Surbiw(c&6
z;E+fhfswo>H3||i0g~s65FzxDnB5BQ1shKR&*T?Z2pT;X=Uz?-!YV+BpcHg2oH?f0
zEzaHR3(Zhp@15n%JL`?jG*OT|HoO1WczvW2-d))E;hQ%v&&BQP(AdedpZ)FM-Zynf
znZTF;b^=O!iWxsl%)E5vaUCwFZs>jxSnV~z|MA4E9Avj6Yi6$>{=>zL?z?j4(^nb+
zO<>0Mk53($K63K-v2$m}4(!*JYBNroos=j{te}b<ggU6EtYXW}gx9yWuid$O_2!aM
zIt;6Tw77Wh-FGgo-<um5?wz@C>g>s5v!{+u92j3(z2~^eX<{h0N~e-A0I8aQ0?{HF
z?SZ#~JiyAr&M{=F)GjdtPwhwm_0VXPYBf4AHTlN1xuwl!N`WXXAZnswGHp+GZ$4^g
zDu*}NKFFALuTxSWi|+t{L?9Y5cT0eewn7aa=s;m9)FVW}jMzJmHUcQvxwA;Id^786
za3v5#Q$;`{P%Yvo9yvZfIIwVgb$)*R>ioTHE6us}4TNNWe|Y}r&`<@GtG@i!jbB_}
zZB&QU@Z_hy{FU?1KUb;tD5aU5(%LZ>VwR^Q?dTVIfSBd$#EzEvaI&$>USpSSw)6al
zx6G=2z-aAxwOtuH-RIxy3f+v-oe2aF6|?fGP$c2!p{IywP!oVsnpuFTr@wD#Y~<+d
z$&=?UOdp@!KRMM&ICf}7r3?<xfg)W&2omdBZQ5$K7Z=yA-<n@uYbJ?Qs`W;@eRJ;4
z_4nQdNe;{$I&y64*$+Q)bb3mM*owED!`P-u>nN-Oivl7BL<X<~;A6@FeeNa0&Y{W!
z`O)*;5O8l8aGFd{9T25nzI>_07>h!sK|~#_SExICclPElg+7%*{1VSc@$sprlx>Ls
zSq)u6&m${9*>9P-n~Fw=q=>Q_OZf*;GC%|bTv0;W+X>>MJxYi^JEu$-hB`Db+8>Sd
z_FlVsE$kh>v9jJk(@M6-dxFP~j!%!(YEks&<;@>oyt(9}&7kMPM?dwM-}q9cr>?ch
zINm(DS$;ou?*5+Pg8w7Oh_bHO;eO92I=bR}mpH`JHt!*m4{3Sw3q9!U2VHGXYQPVI
zm+bt*`-$0(+m%nqUtSSu_OuKhNI(HVr9hc_U*G7y@k7%`&R%%*=!w~Cf4`85J8|M9
zPMwfu(PSb96I*Vkc6F<9XJKV-ajn&I4vj|BYBX+Mzd1KIZ$hf{L}wm7dFqKX6N95s
z7+7)5_9lv;*orYqA%ke8K%5{luu_y->wVOo-c$1I7ma>GiUL+_Cq_p;_K^?0_VzpP
z-dk%6vZ`4YB2iPlHJ_KVYoz@Y*t<9Lwx_1Cqc<TBKLJpvy0v!Ev!`R0NDm08vV1cy
zlNr9@J#GL3$l|$lGC|D%HbG`j$&hay%7dh3+n$s%p$P&47ytGbK3~;psIMkS_cpiM
zX=A8fdF;^m>HR~4y*;;A8sGZa!tIrKEvS#p%>Men_?;uiPJnfR33D2LD2tho*4;Jj
zc;{|V-p%&tB4VUG^sK8iW}K{lkCylD`-$0}$M-n+k0xea)EIYklY%S&z5E+gK#IsH
z6YBnvk^R$$Pn<n_>XGx)(=(Oc{!VJ!iAxw64J#v|O3|beCK9e~#dG(T?<}m%Ei5<N
zT&oRf72dpgXMS;UWosQYoH#Y}$TJs?ADbE;9c(47Bu%YrD%6?`DRRyVdV7W}r$jmz
zGw6yLAb|ja0!z-;qiAB^=(V}K@2;%JQn6$NL?NhywTMV5t(8(rsZzw<!xzsoeW#*5
zC@^-J@fi>)qLua_G-QPZ0f0bUx6iY5@sf+66ot?YsuO`yxktoI;X*(nlb6X-O5uU2
ziB4zRb+%3%KK9|KA0OybOZOHQ7nZb6XAg{BI5<4fQ{8B#-+1MncW&6GuF2rQZ~m))
zeddYBjW&i+8N>fLVy2W7yIlFg|L+zvp*;#1Ab{jMhCp{Jhk^284LZ<hv_lB%)xqJ>
zqsPx4J$~}UsdIxvW7S$;;-t|@Qfj5ZR**#pVcjydW4qZ-=I*WCy1m@qimMbxCP-4d
z-E7{t`ChBD8TM9=pE>d5(@z{ba;R3XrJW@0!~j^WRh>8_%+svtelb&m1R}@;9BF-E
zY;0y`dU>ny+U>PO&?zGVM4%4VqHNca!hFhfvpsvVtd9HWUS<|xt#lS_RdTX9;Y`UZ
z72ZY!5QiWNfL&Xh)!-G!Y=RIXKo(DoKATK-50%T4T*;Fgh=A*WXas}eax7gd3^WA;
z_3#UydA_ka-`Z-tbLHNZg?sPayLowjVXKjhR%%Zi9^c;=RO_`Ly?N_rZ!d3DM%O@n
z_A6g`{xhGh_x5Uoge*#lGQQA6YMoyPAS<4f6$~KA(mK%>#L2eeOmh|7?dA7PVTsGq
zXAc3Q>{&)*$B-1&Rmz{N>}l?+%T(}PfxmgvTKg}4dA(nX5I_-GYj>$C4-(;w1}$^n
zWP*Za=W6~T>^cyHGnST2J@LOJP)Z?zW5<q}#XF4Hab6Ek5n;W*XZ+xSGZ)UEd+M<R
z$BtG825pM%SS%|tp+iMMl!ESb980C0;KJJ0ySHv!xpQy5;Vc9}z0$Jw&cgha%a?4Y
zeR%5Nnb{L(9yv30><~sYzqY_6q=_`KOIzs{=?HY#wz1C`BZx>Kaco5l+FqTGjSLM<
zPJQ(o-<@v~0HL4)KtXk|7C|N+{L97)ljqc>jMqT!Gj>G^it!y9e-T{k<Dp|e%m4r&
z07*naRO*p{0C)P8CAZ@qQ2*)v1Cjz50u7Mwk*G*(t*938hn|>SUA)z5Y;82;#^Tb=
zdpB3t8+}pj<bjbB`}+s_>hIoK{?S`Em)6xvR6qOplb`#|uk1T`NE9hwH$iF1*#M3}
zalhMlc|5wS0~IPU6qe-P)3?+c3X3HYifEk&wH+A3-j!*)r%<L^Gh`(*ceg^i-bc(l
z2i^x0v-=-5>xlP%&ho7_c2B^Ji;8z)2ZZP$F@nq{5tK^3HhJjKg(seP;`}qy)3eG{
z8qIbmPEzZFs2W8*nv9Tcr#6vfqnR$Qtlzvlx3t{Y+)lKr^!5%ko6TFdZ*OdFK<Flq
zj9qx@%(*kOiHixj)o#W~V{l}&*-7Kn2|6+af&>8xFo;5mP<lgs_{j9zcb9%}@p=a$
zC~O%3b+8tRh~sYHQnA`Sv^O!!1;o5g#~xy~hX#rOVlxeclu|mQBHnTBhltsI>w$n+
zWKF1qL`XW#STIo<wZWQdKYjj$bef$uTZq;gtEj22@Yv|!`Ps3-{&2fxzw_$VcWyLn
zbvWF=|DS&4pFQ&Qvto=8k<vf}s0#3}zzJBy$FGoIY7leI+U{=k0mZE7u7`B^j?RCW
zm_e7``2EFfx4-m1jhGcD?|E=<F)Q2{#X)AbD}oOTJtr@n6;&%h=$N%J1AU{%W@evw
z@~Ow4er9s=a8Ru_J4q*w6J|zGfl)dFr5J5&@!nE<{@&W${N}>Ft<+*vt3Zg$8;f@r
zZ!Ik?)_TKdKJmh%XO1759PjO|t*mb*HZ@_O0uAVd1pyVX2B{ELwV4>3Sn9-If9=gR
z%M4-pnZ44u_q2GZm&Q7qMfzl*-v<>l=ESEWkk+KM2(W<LG0FZuVn%?3hLtc%im48v
zQZcoP9;(n|XJ$qQd*hf_w>s;MEp2KO^~%}Fp@S2()Fv;zdiB*yt6MnGuJwNWH@@_%
zU;JW9sKQ7PNNYjN3pE1ds<MbMcf|~`#Nt;%3HPk3^Z$$4L&Xg8<=#2B%k1yYsBA?8
z>zuddSwtyinWK7TaAbJ)%&BvaJ$m@~%+T0AQhKx9vLekSWg@1)f)0Z^L%7*U*VfxN
z=kH#-b9ZrV-HOzDdRwubUs$?(^G3VVnw%Otb?WG&kDWh$V%k)w+1YA!wwPl<s{jI!
zDypguD}96Czj%2*PC6<8*^y$VCaWQ#XYSF)_y8_nkAqwuU+5bElr=-h{nx%n3bObe
zBVF>mm4mc=va~PH$bwE-08+LE2G1_db^5OKGIJ55gye~KMA(wjh(szN)F9#jELlM}
zJlOO2xl@g`g~4jAUWp=8X~yo_+`a8)v$qnSoESMVIasSjZ(O<a;*S@a!N97moPF-O
z&;J+ytUfphN-=;510b;Ca_mM#BuNs_D&_4)VHRd@)@Elw7lEZxE3MF3wHG2{+bNez
zzu(;2F+D{PQ7NsI;*3%#lTuHZRdhbH^A+?w2cvTq^TIR5G|kcf-3yst91C>cU)FnB
z3Y@H%@kDgL`M2|GT%H5PPr86sS%jn;t?rvrI~?_8mz{InB$VvuJ`~-E5Tjy;F04iS
zrzTIIJNL+Aj~zXE617%A(CWnP#8MDw6b59{R>(ro=p^$io7ZnIUAwuovL1((x-wxa
zY2BWiyES*aTC0pt4nO+DnJ1sRaO~*OATV2vRd7k4iRwf>^}fri>sL3|64TR8S_-3`
zVpfa%!azibnbEuhZ}c4mzAP9Qvu&4FS(ZkXCnW7n;FF~``)W*V*)g+afF08->%g)V
zwqr;<BqajE&|S7!5JV{<U5UaY6Z@WhWOn}gdr61q7gn#{UV885{QT-lB~YiQ56q1B
zPVF1Ixw!e#FRrbmu+T93&z=7AfBm~h&dewifbS6kKyi|w0OdfTDzz*U6c96;A)73F
z?n=0`<(=U$mw-K|X}Je7A4peJvW$mav(5Jv3OHwdw5l(X^HB9<_oJ5f&q6|WiDe<H
z58mQ-gi4ns{QgEIg{Zu#mLDv;DEJiNqWkm5LCfeEnb85|)bmEy`v#63pLycRr!PGA
z=&|FoK-6q?()I>}V_`u6MNEbvN}X!9adCO&=ADJ*wN{+4F%=Wl*4I|&@6ByAHZ9}K
z%<TC`&d(m7t_LRB+8C@vs@C)B?Ynmy)~S#ffOhR>wFp2wLg*j75VP{imv1aPl(k*>
zRjD&F?0#>@nzw5J8Nj-f#W5n0E?1WFla|>Ebi-jEC}tdkSP&~>1vO}ciXuZb;<Hox
zZoG4`-am1Bab;y&))Sj@div<(v!@S@_Nq?ozW=iuZ(iBlq#m<x<Wpbz;>SPxtB#xq
zS1J`k0C57Ta|wYWP{mu9M;Eb6z4^<E88d5DY+?_ZeD5P>`69S0>fh@ZKEV``NEMjy
zUe|x{qkaG}^ZVHQ3h+OQn1Rp5$b+5>gdMs$zM!-QML<MKvk0STqlX3uPMkRY+=rf@
z7~l8f?|ut_8LePbDGf+~+5s^s%g{-AX=Uy9-16<YwYBv&C+*(;9tZgI*DwF!pZv8r
zHFNC9^uc{c#)c$G-@ZNf_Uc+gR}}_TH0e%XmIjcNJIq9=5z!b^xJ$}iqewY+&Ur~I
zE>Y&S?b>73zF(HU060{VTXh0Nq)DOQ(YmLJ1Bk^T>gxR$VNe1NkP#B`p_AUpP8P_J
zGA>DKCOmcI(Cq``%c-$Uu?|^5e-&q^$B&HnH#gVcxV`+&rF$Lj+l1)RGv_|~sZT4d
zRbU7xGG?>2LB^o42kZ+!)(&$k4`;|Gd;S8n6AP8>WXVkx1ORr7Sxi0e5|Zo{vnv7Q
zl%0}a&4Vm}Sq{c7>G4SeUbGNVDV3`l4iUT6(*D7%(E1)MIk@AC0Dw=`$S#oo{UJu_
z2X5#IXR^ytrf?Ff6rEThgGhl(J4&mcz4|JG24uuk$O)xcpdJBf1vcPRIaJ7Iez~)}
za_#O-SE)ybD!t75?f2$?{?=DVzWRqBef-4dKJ=6rz253{QV`ADOq~LVsKovR+QJr5
zh$z-I5I{)}fCI3W6XtsM?3mfmN-1`XkgNFJY6;*9&iB2IUWjdnQ2E@=*g3xkC|xBG
zX6I}Ipc$NSEC7T7AdoUZz-;p?Lw-ACQ~;pCDGdUU3M2vmU?{DG5oqi*IgF|!LxYc>
zKk~+vl}puVrMXf?dH&Sw>5+<TZ{1vMed`xj?<TSmhLb1G{@Pdm<>1gE1yx}yAniB}
zqMBEswJ1^KJVO$IwUz*tQVKD(HWMMgNFxA%DH&8HhHZA7X3y`pcK}iz$xxDo{ZsZ=
zw4f{skwZ<IJb^4i?7#_F5JYiFr(UU6v}rXPVGvqpExXJ)AOxs$#iUD*qm-7MKj*<Z
zUZ$jY?WT~O0{D?qC08%Qkedv9y)`HbMT8woRs<b<7Lzymyp>xF?4Fxq*->9+vsHk=
zBJ6U8NpZ|ZQ!!OslFuAuqcjs*WUW+lqZzL)|M;bEBP8rn1Z8M2wJD+yiV}b%B}svd
z=pF|I<dkgI`>Xp#MmeUJe)vX*Dyp|Kx4AZYaJr*wqest8++{uYgOC*0C;@OF4B!de
zNI(+-0Wu>Z5C)!f4v`4LVuVBxx*WGka_=ydm{@qP1!<>N$xfKXi32MgL?j9+D;0=}
zv=br$!B8YAD@r?+M!z0{h(&OoP}~AI3<LuN7Z`Z_+?kctm220o-kQ7nombwJ7Tw*9
zouqXIXQuW)dE!tgcCD3u|BXwx7UL%Mj~qPo>EHPBBTqdWyHr0w`(frn=Tj<6QjrIQ
zm_4*TXo_pCopaWv3|5opQ3PXxX0riGo5(a1c;n5tRH&WUnWINSQ(aqM>xn``q|t~?
zoOksClR#`!MJfm)rBtC`@UEIP4|-Vu$jLeXfvpT_l#joUoPUsp0HpSSPj}tge{r7K
z4H1Bwt!95u{eSzt|7C4?xsUR=WyrV{ibz=iPZ=lH+KL9(wlha(dWS}S^zy}P3mZ-c
z8rl;h`#$`_(^uZUxU}M4eEBD_4jgI}2Oyl4r56B30gY%7h)@v*h|0M(V&KC#GcHpA
z0AS7}ij)EY7V(Btsn_<LaNUDig(AY@{3P&13Lp-AnjjJ&vY;?<Nx}gDixR_9=%RwI
z4H@^SapG77LdK|2Ve8n`I3-()0j;fV{;z-VSHr_SsbxT(of!PsnW<i~Tdnj*Z{K+H
z>gG20+y22PKKkj8{OV_|M$$T!WQV__`}z!onzS#71)Kv#53)|*x9z1OW_QU%7nS5w
zoJGQV@5Xkslj6Vo)4!NG{m6j>6L;>+{q=W$Qq}s2#~#-;<<hhgMudpgfn+Xp$JQ9*
zHO8|3|Ip{`KHGl^Rn9qAY@TJT)w5;!zy3WgE9K?j0axe}Gka7T0fi0lo$EKh`{LIt
zN{LG{Xft2FvwxBO8fTqF;52TJ^+(61r{V;DcJWd>g&;(5$w!_&%gzq(AOC~D{j1d`
z+j<QI5LiJXSOKru2?2=CXt5B9wBr;}``#5{rA+peB88ZN_aQMO5VI2z5Gx{tCI`OC
zCqrKI1r;d)At45K5(6NB6JZ49p%)TBKtZLD9H$~y1UwtL2!lt}(Qj_3q{C<gNkFq>
zm!?5IFiMn2Yi+59>0mWP>bbkPzD=9;z?_~MefGqGgMA?<@!U%L2XD+ZRINj`V<*mh
z^0S|-_Es4!iLHbc;0(Aah7b{LUWh|{pavo$lIO@QLCo(DyCI@;7Rt4xcM2yn8)KY9
zLhZm4ieRhV*43WA!Ja?+yYK8fes=Kiu??3F9iACGdSZKh_2r9~C~i!R^qxF<vcKMA
zBJ8vp^-87PXof-P2S{sOww8Cz`1@ySK^LcRH~L?`!mg>j3xFwKT<!~X@VE1r%KaU+
zt8rc*7;~za`-Qf+%bqX~5?RZE(O_Lg2QR+#(&Ft~eW4Nd)wvKwJd%tVmndZ98X{Ub
zNRl&0kJOa9edq4V+V<4s#L~iIUzMJJ^u+eY=ADK0H?CZTFal<c5@5$AE(rZ195ItH
zXb~sCgh-^UYx(^r>*yUWw%j2D+2r>WBfexCa)yg!<B@l%bC!|w$~D<h0#a1Tt|qBS
zBH%y_fI%$47bBn<5(Z>o5yvh;%(zGW-ie?E34u&dQQWAKiA)d*jt<nvdv%(~mBr>_
zb=^sX(w;puzJIW;fR~%@+pk_)PPhS;fyw>9_ND*q=<JagIs`6Iid^DAd4r*FLm?vN
z6{53+FQ?sxT&{}wBqE%VMg#1aeC%x<rS>TGQcOPYu0%jU4d76~=%AI_yDQB*Yuo2e
zKiy;@V`4>(b|>oTpSkcTw;PS+yMOtOZ&!^zck1Nv=_75MTGV81C5o82)oK}Ix&!%u
zC7}Em`H*9Ie&2ucgJkdiD|b0&N(a4Q{8Cy#v6kh9%6C7;o{!|Q;7+F<0JIv7Z+`9X
zhU&FsdsUV6;?f>22*84#$AQyis2-d=Hd(DiuYB_-vokZbp1yr`m>jK5?;q*J^5QrC
z##vCdQ&H(qPj7F%mO9sA+iJ$0bUU^It59=B%>;y`Rn@sx@sy5BOJJ`4v2$DmVtW&w
z3@AX$`96k(nS3%>0P&{3R$X;0(AjsJvSTaO2{_cc&{CAvB0@}_zv})T7YPB$bIB=i
z^#Bj=AKo`Ibo0jbxV3fkz`jOX*5bwR9yn>AIyi86ycQBORet=|)wix}u2a3;6MpI=
zAOFxNKLLS85<)~FVRCHm*JO%>0U{E&*Lqo+E>v1mN<^Y8z*-xX+v~eWHwS5*bIOFC
z!vRH7w!I^L|Kq>;-=F===a`5=EDHh$QIMvIG6B`<2F9O0eyXvy{N9zzKYICR2S!I;
zc<$M;{+@QD9mg@^-doK>ts@a;dA|+kLHqVY+n&KO?|+x~hi%^fE-p!w3fM|m3;yDd
z{^Hu@OCy>b@0~M|6I%QIR-8+YOzj^X>bbYsxp;Xc?A<zdYIdxz`mql^vDIo`es|us
z(y=}~@!0Vf9)E0dY*<Aav}|u}uB>do^WN=Wym#aJ;*w^DjLCqM5>3=o+|Q<a%x^0l
zmVD|k5(eI~Qr@)>4goP2Gvn<sb}X)|NtTc(r9uG3Vucfsl2nV5EHHlu%3o?(IbQ@O
ziH{zbdh*=N(!JHQ$B!wHpTGY4dQ&#mwnI%rLqpG<pRSQ3rC)jb+K=D4lT>@!Y53IB
z&;QC7e}k&EhI1wiMOYjH6QU@U`Jf9SK}5hzfqalp%$Knh5h&@LCCn{zU|DO+#!`6_
zGqbgp*=h9Eq6ol|Qs4c~Pxeh6>KohFOk&RHPZ<OVBuzVxQ4b8ZP^rGb>9dbK{rvN{
zE?@q4U;TrlgT1F`XQz)$2SJ#oJ3!9+Z@p*pA+GNe;Q<fW*&f<{DS_z*vArMv@gA+K
zRf;H$m1=cudEuL1f6)N6o7;v{#yu_ZEa!p|w1P?{ICbKvM)|?d-jPVg_aAC(weGDf
z9Gp718K>X>;mh-PZ+!9dpLp!-5o|WNb?54}yH?5R!xObWJo>_^=bk+G%~vj}$*8I*
zP@sSTfyjYkG@vx-47uOwkz@eKnV2xEFT=u4XXR~u{_@TUnk*IC=ZrWJC(dPj^60~a
z44TlnE|Y2QEEkOsX>Ev5Y!;y_gaQhkvuUf-k+2e0f~kG|Po6#c!|#1RZ6!BuEns!X
z4DMTNwbtf0Kl%L0;{$0es$E}9{`~u|-&vtW>>W9J<ahqt|L)MK(>e?Stu>$)qKrCS
zA(3OTj{SBGMYM$gi0GU(o`?diowa$<RSr$S))p+tfXr+GIL~$IQmT}ug5R)N#AjVY
z7zSzD2_p)XNmA@c^nd)>Uq1hZFD=C#r^ykbM&)VUNd(1#0Ff2mZnZ4HW;?}N&w<%9
zQ^$|L{PsIPdhHh$saor)Rw5Khl6IvQr8Y4^(23hh8&5Tzx>#vq5t}3m(6gG}pHF@N
zJof90b53iGc}#sCjE0yOJuHl|!h({#mA*4b;u)AkxJZU_PC!T)Z0d*<0ttg~mYW9P
zYwrMyb1ua^B*;%fX2;B_l_;!1d+UuKeEWNU`xnL~#4Kc}NQo#iaQtgw3&bE-nvK@X
zk?OOL9&K;8zx(q`k6t))Y-(7!tx6<~MiZGXzkB`g{=pZXKE|#gic_|4y?$x!?&kLP
z`p`f%2q_5U*wJwfK<s=`Xi#1`L=+ZJ6}M|u0006i(fxL}erERouyN1T!rw7tQSf|f
zd;VO+At*(tRgk*2fcN@|*H$UeqzNGAG~QlYI&*CD&f-?1)4cuemHx5z>gv+@v-^&Y
z_0*$uv*mvD#+Ahe$GxLkS3mJjK6~WUX(1GFgygC6^0&hKP4*pISP6$q<3yM(OA)n*
zK6V20p2-s|f2s9bD~wy)mMRqVeD(MLc=oZUwv*IpVnBo}dnid$g_7mEi4Z9hR@k}}
zkq{lxQad^G+(+Z)cG}qbkKg=OJqXU7Ielz;B5{Jsuwa_HO62PRFpJK3*p(Kf907RP
zIOcX2BBp8T<;oait-ar<EB9)-H@XKwR34+WBPVNDrrmwb13W%@lkE<r$v;34R+i@H
zr-pjI`{LJ>ODPlMENnzd11bo_C|NNRuIc3L%qd~``Niui8=d8)?W)mM$YFG2ZvCBW
zOIPpS`ogC_T#bUH<A5ju)PY%9+GyU|df~&*JIAe*U297NWKoJJU;&h`qltvvbp`Ga
zGg2jlBgs1moa+z;L?0-^fF%JIB!fPKhMna^K{wj6i0Wbx#|fel#1an;GASXY#D<3Y
zYqg$Qn8d9|&!4JXyLap5?Pl8EoVz*R7d~@(dZMNrgcq;fdh^P?Z5wSc%|3hK6Tkk2
zT5lg?7Av#^?sHtIC=XSHlv2i+V(l!(yXc~f*JM|H&4)IDP@5Fgl{<HmAUZgEdZF3D
zT9g4V<h|8K5KtqPBX20<9ut5Vf~^!(*po8Oe(0l}X5+Qnx4!ert0xalJ#zL`Jq!ni
z$6Va*w3<;^F%&T~A!u!!aG?mkKdA2|#5q@pQ+fCE-MBaO_dvX)aNZQ*H2D6{03`w5
zy*TD_&S^5-*Yk^4e)8JOFV{qbz22VlaYLR)hyb2cM?wIj#g5j^(Xr7u#y74mZLPuU
z@r}#ZZy~2MGe@=?JioZH*#WFow;FA3HMbj$g_V`H&CTWQ4b|b>ch}=iy12A*;?%U4
zii|A_0UTQ;-X20OG5D5fZMrpq%5U$S158kMlRfU;FAhN2EXi1qIdRTvQ}RI-9uJW;
zNl>RO$iPKkSf$uMmQf7cH`uptVxnHFncCL2warv|B6#-vspAuaVcL4<Ui*7LzrNa%
zjj%c}b@0o-`>*>a_E}_2#Ox3im%ttdETY{XY6)0tgCOuR5Z*TP5!hvaTCuLb|E0=}
z0GLVF>VNUIKRo^XCs$f=y}y59Wx2Pv?!(gnFiEXaN+W4R1W1w;L;`I9QF%wJ=2mK>
z$i#|FwQ8!BgTq7Gy45?kzxuZ?4))ZZK7W3+zbA|;9cybrkUEQihCEHV6x-%Qn{&<>
z69j>XxV#nm;e#;M;(K8?B8YWecm}a3boh`_@GBiNr)feZSi@TD)5l%AbzpGlumAK<
z0$}7+m;tPa7GESiD??g@o1haVfJU~@&m5_;+*xa0yS)Xfx3jsWb*PNFyRwZzcxP?B
zy#))6)^X^)dF}S~YuEcn2c`}mNFb<HdT%eRefwMA8y_8?J~W|OEGbP&fe2fRKn{SI
z1%Z$lgxLaEM3c_|U4+n4Ii}G>0Kj5}iSjk6JbeWOffN};WRWyYNn3VGP!NsLhIay+
zNW`2vPDud^1870aHUD<o5r%aWMMC6|uFtQ;t=8em{r4Iz3`5;co;!c$iIdZDYsG>3
z-s{(|-|K9I{b{ZLg<tvn?D-3Vq>UnQNGRaS67HDbJ^)&Iwt8mohAPq#`~a8pT!=iG
zP}iH}C!haeaj@`2muF$&LQp}ZmHE~yzo_h+j4O4ggZ9?;U~iq%HV8YGYP|-)8c|Yl
zgwBaD8>O9N2jBz10*ye@Ni8U9r9SKi6T;r<BNwI)H`kVb`rf71+Vc3&&=ZfIuWAtn
z>yk)UZ7VifA&Mhq8NJMu<EM6JqjasZLaz4o9~2wTuKlfiWqlvOBsrNvc|@35DOIfV
z#h;YYWgHk0)6^OhgofYv$qz5R`C84WcC)QO2vx>y<nMw22+Zunp(SPv4b(#S<b~Oa
z(LeanPxejprEz6>snOfpJ9YTLyVq`L3Yr!Yh8y$CA3Z;9f`~b(RV&Xv^Y|Bk>*VkM
z`#*o>)z|uZdM3t(7Z>L>064ZRfQT#(IEEZ)K~)i9k$4B;SBdevEM~4K>Q&-<EbEZg
zwE?vViHOk^25>e-Odv1SjL<zfQ`=B01vynj-W>u=$fnAqn87+Atw*L$zxwl6UcPjP
zj9G6s4o?hx`1~|=Hc;2T@$%b0zkVmF4Kx$=>_<NJ>Cb<mQmKlh8ol)H8duDoW#@b<
z2h)`^7#_OXd*6Vch<mC}dxCfZ`tEY;2S0o3%%?tkuiXi?iAbp3=&z{3k&#ZEtgfx8
z)Pd88L}4WbB+~6pQjH=a@&tV;#6Gr|1e7v}h(Hji1h8Y%fyt?`Rv)O<Ru>lj`2YO+
zXm9kyV;5$QOm3`hM#^+L&CnPXgf5Hm-|>*Yg!cPOw>^5J@IL>t_jS%16Ih#85MTQG
z|JB}DGXW{E2m+u5#IXQmY~;=+zD}pYNRxKy`ia>|P;z&1v)yjZ9y#1@!Tu3*U~0dv
zR<GQ;(~Og5%QC~<^4fYknLd8(_{?EPw$pBPw$}giFMaNnSBD$xTQf%v3wG50iWW(Q
zv{nj`ScFg^C_tr@PrK4(a6-W6I`97Mh^@~LVyV~IbpWiluLzKo5pXP4&<QvJN7!8g
zt!?`KGY<&{0iRJy3?yQcu;vI;#Drz3(X?!qx7u^dD;-Yz>a|~e`s~4~Q#QVGul3hI
zy0V<oTB65}9{(5r&3}J*W){R&jnX7O+<B)uhh;vF(n{=KOp1Rq^o)1QnO7Ri98U!v
zeZLpg?=a<-Z3r0r{-1tr=;-XG3ZUMTwA(7)J~BQwb7(*_D@i9thXbuTjV%<rvAGFh
zMQa@dLH49x%qXkwBY*%3MTt<7rld%mBcdp(wwh@W)=xfizA`fS(^p^r_DesA6E`tF
zJ~TMc*lJ^5Xl<9qdq0xA6Fc3T-l918pc4Q<W$AM}J|f_Czd|D@l=D5>P8`9bpo`b8
z{`tTCJ#?{aZ=-A@Sb;!_0R<3%#I+F_AVh>n>qvDz`^hH;2KvACo!69x1EcjLhYp4Y
zE?s#qh$=&46HBYDjSZ_KNaD?z$>9@64z`+&sG@*nV`X#h&du%ZmHysvWVo-@+188*
z7%1f{#45*7Ebv+>A!24HT)3*SWEMM{bUQI90T>yK<K5H6K|fU;Af)V!j<l|@YYRJ1
z>Ew+=e`(tWsWea-$-`a{jDT@K4$<lmNHGdCT0j-nU%N3^1L)})L$`VQ=>Eg|su8B`
z*nIaVKfk-4Y()d6xBgFl{fm!2{Zz+VWFirprl{#Y!(qq&yOBgY$FvX<MlK!nrF8^L
z2aPc~!0oY?yu0$!0G{&`fRrErGk_y?Z=<oE(D3l23&S)81=3dwM*G7nmv63aZFa03
z8X6w%?W-CZKXBmM{Bnze?d>)YR>F!Q6cHd0P$1#}H6jR#V}+mtt+m<M+EU7dQNT(G
zO9!BZ!O3S|=#9e7g}eXrAN=Xj$;s!QerhO+z@;o0fM#crfPsZjEN8FKeRZEdE&!QN
z54upLWG-JXX+AX}Qw{`jy7+u;yI(y(5mzAoMbGbrJ(j@|5`ZvM@(BO{AOJ~3K~&Tw
z61T{?w_baBb@9${Uv2*GW=}5xg#PTTOtBAq_kutHrb(!IsMj1EAKluFSGTr)<>Mb(
zUcSD%vhuy}zaG_LY<T$X8w;zeYq}n|BwbsA`OUaz-(f+WG}nxlPP29K;#<pWca9!8
zQt7RN3biOA24X-EtrQZ0e;*cdBH*hYVSzf4l+bO;391mF1oI=3ca-f|_DUEelD2FC
zKw(JA3CARYg5Gl_h`Oo-#YrkYgjON|ZJDg1)M%?Pl@yr>ND(zH_XQ!O9f_M~4vl^6
z%*23d#!2+ztGC~}xt;`-q%!oxGavfsuYIm%+d!lcQU;|%Ktz(Vvlw>LQ521x^A<wk
zCSqnpLET-UJ+-0(TlO^h%IHMk*@e93gNTI(Kb1`cqok$)IgKd@(x~!p{=*+nJ^q=^
z#DEGb1~^^o9SAE`SZlfs?BRNtHj?({!ui>wS8rdh)rOP=F~t%n%U0>I-D!g+j9p-i
zph_JFS`=H7gdnh5n|fagyxM7+kT^|~#33pNxS3crvhSJS_+o2o^FMt52kH8~Q-=@!
z%5zV-jsz;Owr!=YLQTq(0gwn=>&UYqh-6k4TSdAM3<Rx|@_F|lAk11RttpRaBWqo;
z=X<=gFu)|gW^NpIskn-12c^_f=PZE}QH<meF$lTS;ElB(eeExMjN9H^srA)&QqDL5
zumX$-DkLxjRK-e=Y<=X(^Jz1=@y?AvIEmNViCx-iryv2Di<ho0w-TpY*6KJ;YQ6g3
z{`rsZ+>5{T=@)v<Kt&RW)RRv=6HBTpA?s*qBh~C;VJD!3LJ=+OQv+DoG3SANh(-sQ
zFVHzGG$mCj){%sph43K;drZ~xtj*&{%8OE#@Q4VAVc26`8oQ<lB9n09ICZ+35~heu
zC`<whgcwMpkfh*RlS4h9dG_>3A12%O+Kts8zj1lnsYbPWaBAu+|K;zDPE54K8lw~g
zWy|eDOe-z{p6`EVxjpFQ0=M*a)3aNk=h;n3AgEPSQGfL}FO5wdQ&F{P1yhdG)PPAa
zOo65bhk0SO?K&=LO-)ZW8=IAC5Z27b%{#sIYNL}@qFQ@>vr?<IIvrE30x2LxN~Pk^
zXieHN+jh+CNJK00d9{e>*tOeftrj&~?JzJBgwKBTqsZ;~>sSA$KmMz!(eaaq4<DPH
zh!|}ggUN6mW_HdNJF{5v?qIDAW>Jd-LPY{w@zx%V{D8gs0isnhbc&hF+AGJMo=WB0
zfA_;%H*Q4igc%Xb(MTu+NLmq)0+FnW12^{X>z|!Dvc1{)_V-`AaPH`x`Gt|u(KoMN
zuhz`rL(>vet}Wd}ij>w6B4eQI`p3U`=hdITapKVA$)g8{`szcyJ(XIxd~5B>ja%<s
zxvSY(6acgi0u<4Tgi#og(77zyiV4wXD6fWYMtT9B3IG;fuMg07k|#L&>_h+6*%%QK
zj3D{qf&tZ$MTAmt4k0D71XiI#a;ONr_5mR>r0u~9J#l>EU@t-^Sy^*0{`B3sZEW-m
zn1SJ6`^s+~o;~i%I(at$>>bXwyA^NxOBvt7U5l+eMLe(QE<^z#62GY;ZnWCVZG7Xs
zxicUBm4%kWAWBoGG%>3?iyJnzCrA3uot&QEXttW0Q50N#_u?Z@K6drewbO?ub#HyM
zlXN<EZe!)}=;T%>S=ij}aDrq^5DGI}mw+WfqXQ9OKx;+iB~Ty?G)T-$K^XQ_q19g9
z-mF%FaCH2sqqAGf%P(KPd~@#h#~*(z3aYUrBI3jU5z*tRm8jyZbB>f!aonLiR>r3M
zVDH%nO3W$$c2AKjHbakn0%j!{Y?@ft`QA6at`Rv8OzDOS0st$eG@>Fz0akz-sA}Ns
z?2#ad?k>!sG5v$X0_}~h=Gxlo$k=#P>$!OSMk|SpsWND!Fm5M}cG}Sj+Ud$0*I$0`
zrcr^!Rw+ttlEx5LltuwWLLvdSoRE%4p-(CUXB|6hJI(?coiWAvR460_WO4oxk;qV3
zbczp_VNQs;F=IP6E-KIt0sue*kca?t%FePwQ;7f(vN$giL`UEhSyBl=n<WH<jAx&b
z(?GUQO-`RbJQBE$mEb3DU%9l{u{|ScSo`$nzxd3@KI$|Hh&Eb;eX)9lS=4>ui7r~9
z-4%oCp?3eTHrfXt0%AeCR46mnS^;p@YOVcceI#CSg%a@1%woc7J8o3!)pon1>h*vB
zdw+EB)Kj;XHaV;@C!kdr7{I8R+WGa)^87+yU%%*Je5C)@!qSPekE|_k^@Np?n!a@V
zx~^15`-ZnPj8tUl_T4D#Gdd&_q)rfstpikAYecO{A&LogV|z<$El4b&5S?|EFxY4`
z#W@pJNC!Q=m5p{M7#KcqO8xws-@0(-^uFGR92HorSD{H!lB7u-i*OWGv^D_VL&QXx
zvYnyFx&OLwZ}_hBZiBLynf5|o$|F_ARB}y0thGk_d1EI>hrjkGe|Yuc#i~pF-b>`2
z`5yjo0rmL+I{;RslyE>W(px=o;t-&I<@Jm8fnlolG@JH~i&q42|Ni~A?yW4ZuUV=J
zfF__w8>2c&XS>x5!jPzv`Y1a^#2i-pf;usSR+yDb@Ti$(=RrpFX;Gfx6WE)Hf?!=t
z!bBk=F<V3@q=B8N@-l-0EMi5v;9=R-sZ~&P5Howaf2BhagW^Dmb8VlojS>k4DUv0$
z3Y|g*vceV5o(+uRG;bXq?t5l-e6*$k;I)f$KfAQjj(S!c9e?EU7e4h_Q?HZJT5CXb
zQmDc^J)!yYc;ED{CAJty5pmW@PMBAyorU8F0F2g>TMORUC?@63#Tx-6>9m6=Xtmp^
z1aG{4D^dNnI-rzMM4*f)a?H*FLC|4HD*YV}u#M@uZEwc?u~}N&oE#cl-;OudHqbPd
z?%X{xc_>+L?C<MM`-c|SI_)H7D@KP}D-gD6>XJ4hB8f7Zf{=_(nF+|h6%g8#K?GU0
zHyTD6GOFEb^;defwzrhB%}!z{d+{_)+wGQrsZi-^wW^Iy;w0}+0)SFTNg)h7Hl?zY
zZO_R4vZQ%w@qJhbYKb{dP@^UV43hHN%Ic3_`c5EDqjZ=BxRfo3AX+OSB0(l_8eBja
zA{?F^>+Ox^SGF$S*c=+Iy?uSY)m(3;Ni_-q@!sl&gNPwuK@lP409b3OR3azha#dM{
zfg%D@EPyClsj3C%dDsZRamt`rgb)dch?EK)iggayIdH!2J41&k@<6|Hi6BT9;wWjy
zB{CS{PWL-?6Gn@JgbGk83KT$^wgpmQu^c-cSOrd@Q_3PCLxqvZAqa{husuQaiKow=
zn;LYD#+`Ni-Y>4qt#N0dqWk(j_vPO@bM8XSZLPKPF^BoKiW!!>yA{iAStQEO>4W!_
zQswIGn7g47QE9FAD#(O+SV;*8!5}cGB~3|3wHLqf)6o-8t~NVOXjM%>iiEV%8qgu2
zFxf<fK^U6a%68K3n2U28@rD~5G9$h9Qx_h+e(i=1d9b%nIa?2dIVR^EA_Y;{Y_@|y
zi?bjuFa`;LaCLn>s#V0=)Y_^F1bl9vkLD5rRMo0WZAF_N)wgv0y?s6XePOR{Y)B<2
z-l$rwg;D6NLl&E+Ns<_2k|ZwPx=4WX=+XThUQRiEs2NtILG1F56#qp<Y2w5=lJt$A
zz53ppZz*Q6sR*-J&kdc2#8W^B07#Bdh?9_1U!`{H#B`j-FTeKYMhjajTQ`>Hs}YR$
z4;`J_*KV~N&GlHcsETB+DIo+hI#8Ti_CewRU=)#%LIf5`tv0AxnDZ)Wz#Ret3;`+S
zl*nkU6)6T_5n!v7A@GdxSzMK4$KV{d^4>H^L5A0sMXNNWt;>!R>cUE5;fyLAN$be5
zVQvbc1+k=9DPNw?(}*JoF#tFv_L)adpP4zBu3WE}zL#Ek<NED3_w{YF{L?Rf>BArS
zSkhr{vWsJ}&g8XS81|@u0Xb0NWu~k&me29ZVH|fVl^tLYGwYnzCR1!^M~tks)<>*M
z9y^lSHai>E`~T?AzFz6wC#FX<1_5B|z{lS+2s?*>M98(y7EqNOD64yx+o{p@x34eV
zym4b}|Gv0oA3uF~dueO1T3NVr^O}ts4#7kgI@M}DVXKtVfZ)XEsXOPGC9yUL3_DPM
zF>zUiJOQ!_QwKGzlJ)KH{ng+65C7`F3fl2VPv4qkM!PU~I_)HhjR|y~YVH5q9rtn!
z@XmbaqFe4Cg$K0^zVtxBUdcq3Ewj_4D%yPOn_u5tTkCUa95;lNNFu(*cUA+56f-LE
zc^@bpVHh49n;0LSTblpb>sM<-1074CY*39-Rs?k8_MBiChCOYUWu!^!d<i0jI*3T}
z;*G*7h@c}8U_o6AO~eq}hIMQ$WHE*u`}Gq!g_Ix#Kt-su4oQFnu!s;9(TGkc5n{Fu
z5=2l)iWKRHZNkDLmf0dHL``T2QF62=kBle4s!1`XB$ikNs;Xi@lj?IywE;jWpa2A%
z6QvCzbQ~&lHC{hG9DV*+Z{OM-UF~`4^|@bMT}`V!8@hhv-1*P_^WWhLh--u<^6oy=
zT~C(?b9V}$(ux!{wi}f&g4|%+HM-rgv=#uuFa(ztY|B8(>)^3XL91e$a{y?x1u;ZX
z6p?pDI_GCwq}AGXdau=fcYdq7Z+5lQiB-TcTJ&WHB{04;oVd0lK|)HB1|S%%F;So(
zHWe^^?G2|e`th~3w7L4ox!K0hP`bjXq8N+=+E{N4)iC6S>a=H1&%AeQrDZ8Hb=Qso
zt%F3VP^o(J|EBECnk>t%^RPASea^W<&Y6{2Rax^q^oSk+0%(9B1%f0f(=ts`6cr)U
z50Wg0P1_Or0ebNh!}gOMAw|%V0;VVuBxVpmqcJraJyy@v)ircg*F5B$dG9^v?7i0V
z!#?*`cB4UxCo;M_vTxnWJol`<*80}>eQTpa$|Od|P*<_CI@EQS+qd4m@aZQX+qp1R
zZ)~jAARvi)mghxhye%Qd7!B`RDR1Y3j&36kU0;!~-|OXh!Hy+LqVtac{d7pBO0uaB
zjkdpA;stytn>GIdAO!5tOI*Hs?cyshPIwGenI!z4TZGJx7>qHXVGA=wH3kGO{J7J>
zV~-rjv(A}UZ*SGwmp&2|Xob2s2rr+#63Exk+AJ$BI?!-FQ{U;5Lkxi#2o9SM0|^o(
zMki4K!BIvQC_^(-%)!tQLg<0U#JeJw<WngtAt?YN4Nb)mF>w|x&8AHd2!@u9LoOAJ
z?!`x5qLo5z2qq9Mf?>^ACm9SVNk2n$IzY*RoN*?hoXqfxpL%G%LuF5|-t9f};)RV8
zmyxFycl^sg{?{{eb7nF=(W(1!dnr5m)JLdHUDwQ<Wf}inW=S8qR0NC=8wcy*JAd@=
zI3m<;e?$g#Jux-)(u?PP)-8hswq%S#8Ilnppd=xP0)P=&+HQ~F$RnD91%Ox^Av)q}
zwTz{{`tGf6w>^mc3akb-mA2;{Gu_#u>-xQ}m=C=o>kjHN%d!aO08wMVzflyERb8`Z
zV=%N<(Ux-E8NB?HXa3E<{vRBvX1U|SQxgo%xlkpAn0+Ma@dNitb>v-#L+dzIjWG~4
zzChbI?2Ycy_EK|u8E@OV>-#Sd)mV3m*1!AGf9S8TW+HXn%bX{0#K52)i2#X#3=tIx
z4UhpG%KU71X1aCz?!7BF?gRnO3&)V5v2z>!jaI8$iUmYqudrRAHu~F9K@-ji$-&0V
zQ~}I|SP=sfA{Pv#DuA5AjL4Zqji748wSp0N(OSU}GeY9V3|zz%?xP5zGKlCnZ4CX$
z>mx_NUI=mqF+{OU&{asHwU@227LOHva;ziP>etoM>RKgTh+AKL>fs0X%|O}fYyPdD
zzV_aoxWN-vw0`q<{@WubPMAuTvDV=u|2{+*tr{5_hW>rS>=*rVAHik#1uu445e<qW
zU%7i@$JkCV5d{UrDgmhmoX8~r2;c$D5CIj+vP1-=lp=tL)v%7#ZSPuLuU9wvk`;oi
zMu3WFx9{BA(%vtfI)Xv>EbO?pvMH)wHB{wTcZxKw)P2mP3RUJgd6!AAoXA?Q{`C7N
zj_u7^`@PM=jfGlVro#w{s`62#_eWnkTpr+kCL(FV;e9s3AwLq_A5r+>gAw%+-7kOx
zEL?W|(uL=L^aCyXbu0<M5hQbGLUc(Q+$=Ru^9*KFj9Vv<JTg1kdHQGXURzo-#|i>~
zF7sP;&pZd_L8t>FW-g^H992U&GCZIJ`VgQFM~eX9EDls1xCl@Hk!n<gw3F4jmS`|7
z6+jh;q9Lg$fFcbL^PtfzG-D#)cmtb(sR0Fq$fNo7hi>;reUp8g6ugllL_;A2)`I%`
zCV0=>+}<6N8LD@A0KV}4t+y}VJ$h{MGpF{2%{38z;jJ5Qyth1PPi<1`Q@`@7zxBKS
z*!hfzxFIQil(WFLPpQ>zRb|y2kbjR(p~1LDCv^H|RJkvV`=}R>ibeqFZLGB?rXM`E
zxW4hkx1W9?pIGe9?#bIzn<WCFF`{=!D1?w)bjeWB(1-~T5D5su5nx)PW4&mo88ej;
z1VBwtLlx`XiSKq-dgawiH`+TEnDZUeEe!)#RR?BU>sxWqlR-I9rdotRKoooBc<x{R
z!FRv(fBYLyR&P`xNYNdWumwXxrYaKQXaL=OzQ177H7xlk%d@JiQukZebt=3^ss2N@
z2-~yS2rt=Q)qkL#@AqAvKljY{t+&;6ZgXqBl^2ZY5~6_M2ob>{A(~-C$_UXJOpZ++
z+P8aaqj&DT8x=;(x?!-{?oM>O?R(3cJ9h0^-sqK}0l~XmB$5e&Bt;yVHcT_bBx8ah
z(50#b$Oqdk!&(8%qAG~i3egM{1d%ddu*(|>FcN^tpy_B3CHYJtF)|xcTAu{TOg9}Z
zTwr5#Evg0}!~Jg~Hb5=0QVA*{TCFMw-pEDJV4H}8L-W&59iLmAD#lq`U|hu$d-vsr
z3$xRYpV~j$##Y{X=i1s=pL^p@k2kqHedx$P|DXS-gGZ0CcSL|-por{7=j8{CrG`Nu
zvFVf&6#4U$8QgZIIPu=AiRZ?kB0U)m>j&?DnW~Bsl6NkI;JqK&X2lr2_pO|BMu)g_
zZu--oe4IgUzIXQK)%S{4XJV|Vt3g!`oX?6@M+}Kg)ne2bYxdsKIvR;()icDZ98_hc
z3RPVP1J`PWsLY<g7=ci`ow4<vE?2lTh*h+<=b5(KH$O4m%`RTKvA#J7?6c08nxYyh
z@9Ivz^8LU0_0N6c@Zt`tDvueFk1A-wj#ItooF4(Fqi22l?HYYE%QG`e8LS*6VGbp&
z+KBy_hT8W9LCjg6Rb@ST&(z4Jq9eJgB$*kEW-5ch`pp~v>EHd|_3DxgHghJ=K4Z^-
z4$%>!X~vv8c0|ZvVujD8y!Y`(P9E5|`}(bW-+TG&dITd^a5ghO7Q;Z$rgtpdxVIuq
zh9nw`%<Wm28P8l@*Mq?ZLdHB))+E~)0})B890YWpGm|I~z`(Fp1w#X?4Z)B@3}%Xe
z%tMk#yFVNcfLcQxHUPknz-osRcO)tRO2o`eb;#3CfAGF_vjUnk#7GvPB$9nI(@&i|
z)D8F6mwW45gSyf|f3siGuKD@-owP9D>Gub#J^ap#m#*Bgs@u-SJAd$pfAHz2KGh2q
zl8F)ApF+dv<ZBx1``p%M(^ra<{~{&h=tovf$YDxQ=@j?d_HiLnDj|3ny=hcEdVvHX
zG0>8$da671#a}-0TVFW&_JyslfA_gdue`Wp&%x>GoeI5;duw9Uniy|dU<0fT(7@CX
zL{Je#pxqtIa;K`q)bCZuY!L>%sx{M9%Wtfd1}rqLs5!#*<@I&hdh)>o7tdchbmZ_Z
zz>7Czbuj3Tb*l9Zt7T*T&fxCNCx7=J<UkM!fE0tF0rF6F&UIa-MNl7E?`^+gh$$XM
z2C1VnD}@#jRn`4TKzdD@QjQd5IMi#ywmcbQV-2bzlkKsu{N&4b-oH|Ws=%NogpQFM
z0-+HCBKl+}YFdzss1!>E+q*b#n7#7W?UhZiJV&L%IgE90Yh~AgBX^dUN)civW`Ga}
zo7&Gl`Pf6H(xt1n&tJS+*0s-yp@5B&d$%S>8$gE!NJH&36o>;G4&v2B!vG1`wMNI1
z^KEV1QALL)1@H?>E!6;N+d3d}TUE?zF{9!33EQUF!Wz}c97YhqFxAFWd*{Z?-oM<t
zyH&1~{jDnI4z9d%{tKVVKDK{erPmpo`Q~?DKl}bNOwMlh*M9A(kALCUKOgEIAsBi@
zP;g*uAfx<wpZrGm&)N?_@PD7Gan#d~C<`BI7zhc_h=`a{Y=;oGS3$J^JKxH@_heM{
z2bF5RFfD)l-~Y<;YW2PE|LpDaFA0y$?Ky<5GYFB%L0Sx&OfO8yWw~p6=ZHe6)HJF^
zW~v7zyUcgmt#-H9)7(3>4pQ2kLt<!@Pmg!Dh?Xn6{KmU(Y~jXAub7zLSnYK%8!xhF
z|KhLy>2Lq~+*l{9t!J7kpmHr(Y0S(lMb{|v{GDM20Led(h(ZV-8rCP4<EYw9_zEIc
zRp~e%Rpujt&WGNX8iA}W-MRC^Pkvkwvk6;N41fg@q<Y37At)0Ps;SB#c+Sdl<=COc
zvGLaR+pBM$yD3V{EvQ2$FE9)WcI~2AyMB$aZGdL#kPh!Z@X(=s(?$O3#rJRCyai~U
zouvmFq473r+9yLmCuR<Fq|B06j0FW}0A?r<P1sZrq7Azn=Y0B=%}}i#?Wb^--1+b8
zgaAM_5P2{~Vl*NG5lX(G%_|KFC`GA7jJdBo*6c*6+b;IZwEN3TcUF4uZ}gT1><Vz3
zaBz3A|G?gQu-@s8oxgnJ`Ij&D2Zn9PTm0bZV>_qYwGN2A7=g<wO=wOuXte!9_q8D~
z3Pyk`X;Gko*>L}{L9-wN6Ly$nTb9`3s0hLaIOM*hFl)eOwQZUX1F#q>WN?J2$_Pmh
z!vLu2e4&74sAG(+PMf9Hx?Y&<_IvB&PJaI%eI^)w{|9GYee*3buVeeN_M|IXAsS>}
zAQ~yC37CXRHLzpV%#_5rR?)3P73%<Id67req_l{lh7f=p<@ah^Ik#fkQp32qH8wf5
zHR!kUmQ-Qs_MOG)u?G+D*<4+nD!QSJ24-kzkY#zw$;_OxjWlcE8}vtp#j~h<XvYOJ
zhY&v0fQ{7Xgbk^inH@VMl<3GYVzXUIMa5J#8W6K5R8y%Wka{-5TF$-pvup32oyc&o
zxykI<(n=FZFdu<6Z)RW!ijZdvl|6RqD6u<t_1e9Dgsg)go~n)?4|O#)KHlq>F_N`1
zRYj>=g&x>B_oHXNH(q3){I%aYfAdZqquk$qY6u3RAPQ;SGXn1|vLy9Nx*w(t6S)J`
zaf=*d+N#;OZ6^kCVtsP7N)!|T89)R~6J-;J$;}c29EcDZnHruV8E6vgHBecyC05XO
zdxLF*$gEx*A3MEka((Icjg|6tPeResDonNDGmkv5Yi4F*Y^>-^tn?~jS=-pE23st4
z;hlG1f91t}J9qBev$w3usG$nw#8f-f6@VF#A|*7O&^W2T5`3&i&8o-7+6ysB!W1Ae
zkc>bPEiDZJQ^%NyaOq@CSmiLM8K43hpovCNK}P4870}ExqZz0YfT=jfq+WL}H$@Y0
zfEI(qswgrC7Rtftllvcg;MndRt-Cj`-+J%e&|lv%J5!Yd1szl+I|m|6hG^ti3=BL{
zuAoUns1j9!X+(=E3JPS1swx(d0~a;5f_2e5(+Zs<z?SN}&pq=`zVOK%ZJ#?IVjxe*
zK*Wq0BN1Y1J5AL)XPSmO4OOiuauf01d*?%pA~N*Jz29G@N&Tn<7`9{#&C)|oi%^Le
z2o)?!j3Np60YoE*<VDILWe|1bTjX_f>sw#?zt(QQuT@_{aFjc8Oy~fUHkl}G7coFU
z#OTpmfA93fV-KI&6#VOFUbx$f0b|BG>D^@ROlwz+-(1-kn3c|X#GG_8w}ZQ9Cpzt^
zshPgHH_l%YL&^#<05DW#RR|HSIhqlX_q7a6H7%b=n=e7lf<hqIA|ygb<dB%y6MK=M
zS|{oyAejjvFlE#@Z>JJsv?3t=I!s889Sk=G%IF0qX3<Q{q}}QY)+L0Z-Hz2}H*=31
z-{0@`Z{OS6*c4QNTAzGy@$rXFJoDq1-??@Zin09%4;?*z=#dAGb(o;vU%$0{@80rv
z{`xB~zWBn<o%8bx^ApqKy{#>$NXgy@7!e85HqoI9lQ7XWEz!65e(ye-;f(S#3|s9~
zrKB#r+1xpV0X`&8RMl3|s>+h@Tcqg7>A+<^rNNQo1tKy6gxUd<QNfv0gdn@-=AZh+
zvBQV=K^$DU_;%IbXczf-dz{b<vKq3>1W_a^)IdX=Q591T2QX`<^oZE3Ku|N27$N}}
zr~#Y07W(CP&(31};%7gG8Ues(e!J1P423+STantWbRV2|rm3#8!C;UVIS~z4E~(GF
zbIv)3fazBr895R)OMuh8-NvLDu8bVAb3_CbRaB+Qa!=$7_JzUOm!JREfByFcfYpIT
zTh1|oOSnoSR8Ii&{Z55t>*J4|-Z8&$=AHMSedRo4-ucX<j^!;9$@BI`8P=<TkOxnw
z!eMJX_nnLucP%jc*DqXI-Rz<B#2yULj7HgP$b3RXKGe-rM5H#21`&`A#4LybU^cv)
z$vnr>>>t69ePdy5kr0Top;3MUcI6|(tjTSNGJ1iT4ZS{eP>oNwi}5b7N!_dZ)!}`+
z=5|c2Z>)zn$VjKh;h+5OC#I*eTX*j~^U}5FUw!ZL`!~pVVRrVRV+S5My0~+8yuZ5I
zTU}mXz5TU6|En`+UZ}UW7U$>NMH>OZC~+GNc9H-9AOJ~3K~%X?Yl8>|Vqiciu?`QP
zA<Q@ms=p=7MzmKP`U`w0%*t|*&_!qz_|0#f5+D(!GQx&tH7U#pOzXhJXed<;(P9V;
z5(oX6@$B^Ry^lP2w4LL%ix+QQey=muDMQ6bF$f}yDp*8Rt;`yZ1)&XN3<v?xs3~E9
zOiiOY05LN2WSm#^l^1^euYT|I1wb-jPL<((02W{rQ~=<-GqWtu5K&cQh-EoYHB75H
z5Je=((wLbYgTctrSw46r3eu>^9EQUEFdOy2V8}$wXrhQfAz*L)t6%zm0Np?$zwcZ+
zn~AWfQ^}I^7ZDTw+(JG805X{DxX=93qspzXJ^jkvl|JO;9XhkgcBd+90bHx93Vloq
z%Id*PyY=`3N7^~vxp!}2=bpFUyWWo$6?~SP8Ue5=8Q6!y?C@9%fz$Sn1b!oufdw%G
zh@n)dO+jJ}CT4=1q01Q^Ap<0}vqFqOjEUQYOzerW<_ld~G+}9Z9I;~;G$t!+FilT9
zB4iot*fIC;BM(fDk8Q5557w)#-rdKacw}laZ)M%7ZvNS)j{P^k_qp+jEXz4ij!ZXi
z-FxYkOYfe)EXoHC?A^C}_OTQD_wAb5T3sCsHt*iJ^6JlC{Qft-aqir?#~yuTanJnb
z`euyP_*5GKGzJwx05agrA)%Qm7$X6Kh;+N1l&nMq8mI9_#_PRL!9z@=8TTkobofYl
z@0)H7plB5!<};t?xv6>YQv^2t%0u>gYV_5VJ(KsMf<%DUZnwPSt|KXXIh*6Kf6tCj
zf9j!w`xfusymI0En^2Y06H^e41U+YDn6X0@N4_WuGbDD7GXg{-LKIOjFf|hZwSrld
zL#bZm?%6XB?wb7UBS+c9K4_MlE;mFznw+neiolem0U-V2&bd4<h<OMkvU84@Of5|*
zN9E$^lBmP9cK?5+=VLpKt0_f-nnqD+6$Mw-`)|Jb{jdIo8*Et&93>|zykoNF%^Df6
zjj|a6)cyXGA3M2g_x$yHn@|7jwGwiH09x&soFb#mt<|lv92i!}f<y>T<zuIg4mOs@
zy2Z}L#UK3i#ih+kDMNH%$V{XP8caop!rgR>_+UGC<cJ-iL(bG95GRvHHEFb2DBGM!
z8HQ`c9Wo&^I3gcyU>4MB10!?^;9%zv2!WX#G|XT^L~Z_q0Bl<$1XbO)sPl8vhxZ;V
z3ch*s?mOo%O-)Wsj?LvoOOQVH*kkQ(`{?Ntr%ufuKD0329cRpL-`#xa^$Rb&@`gm6
zpKU#G>g4gGhY#-Eo1<I1eXU+!zHssUpZ~{y|HjKN?b*F>`qYVXW4*V&WOZn_+Oe);
zsI$yB5I>r!<$12sFhUxDD-orMn7OX&5Q3`Kb?qBrmBA3hG&AoUbK^o6LWnWM7y!UT
zMI_XruIu4gHYxp@6qgryRhEd@YPW-_0g7pib(Uv!7yuv{#25e-Oc<o>t<BGM9yopQ
z6Hh#9<;MBfUJhFu^E1<0mo6%5Ob>M^OO3UOsTyjUXD0$4f+CoKA{&4?RGTDSyYT8i
z{*6ylT{0&!5RG#0kWdIee~rpW+$Q2QYu1{l2t>qGPwKW^N~54c#B`fKG#-c|I<(vw
zeKW1YOHAib4qBk!|I0tS{N^i8YK%&z4$(0nq}G5&x{PgMW>anbr6(Tcy#2Ljes<y7
z3g&GhXgllpqONK&Un)e(13Do@zzlWw%!Gyh#mkrH7WZ7fxwcuG0wGaqh`<CTg39*Y
zfB?XIi<~i?832e;21pq;eP?P;fVm*bAUQdh7(iOA?I1O6<cNcrrDcPfij-t`g(K3v
zX=?nyOpQjwbsTnd%$fu6-CK88?%rBoUORE<=#j%mMDVpYFPwen;+1Q6o<DP=J2Ut2
z!w+sP-I$rmcP>mG*uQY#z{0LwGkNBE{p!pcSAO=|JJ;{6Oia)2T-b5?_@Sfw77LK|
zr4_4tH!olL;rG7#%(uU_I6HId(7}m`$#M{w$a`;TV=)2|OVm8iB}$V2HjfS%Z988_
z<FXO^AzkS^-Zx^;;bVb_=$z-_rkFJ3Y5EYpA7&y_6a^v<s*;#g1;Ie2$g;XD2_%pR
zLlh;>h}f~kYO_Ec^LTXc{HH(haLa|u=U&~odo4#X%p9^K1dSTh%qW$PK+xz99HbE(
z0Ew7Vn{o5~w~x;kkDWTuZgCYVW+rZa&QUPvwi*&YYJ%T1Y0j~0R&#7G0!JBXblra(
zhmM1z_SI~7*njY^BOo?Pq$5^azIyp9|MB0t!McVTObO95BO#zAci+Zj?E_(^hjvXp
zc=FVprT#a5@Y9L_U0#-3)9o>*R#qioRtg8=NEC_8=;4zm+aBt2b7AL>tM}H=UA_T%
z2cR)sM=;cA8bE8<rnCeA-kWD;DymUp)L>@Fo{517z#}13<~SoHFtFrMj*8Ym1kJfZ
zq-n>bg;YHOXetX$1z{LerfD;SqNzsJnvjTG0vlC45qhjO$ks~l%KMk@Ev-(^%pE&+
za$#X^bI|W;Ja_);=RW)B+yvdazUtV|@0{GXe|+!0@!dPSGh=>s*Uk;=y!yt)mtJ{e
zb#22@JbG}~iKF`;JM~bDv%$vN=F+{jrMut$>%VyEx#u=F`v(pmnHV1rb**VTd~;Nz
znTo`At0hCicv??0>ZuZyAw798L`sOrdFQ<kRh<Y8NoQ?C4PvZAI;zv@<GoL(P*N!v
zSeh%O@sVTJ5E!Az3Q+OP1Qxwe?nA`9=x(fSj<v@$1gDaTcn+vrM-K0N{P73&F3zpq
zy?*CjuNw5p#QO{Zm^@MPK|(ZBQ6?NJiJ{<JLp{~vvp@dk|M=hib^&D_E1zXxkjm-d
zI*sOQ^Z<Qin5Asrp!UP~gl$^B4^^StQX*_0^f%w6(Q$qMl?3RJ)62W9{5ya3mv24y
z!}*pg2PGIVH3y7B!_RGO)6mkPi2w-kvrnFMzV+g37tUV26&M7>VK&_zM+ssSjA~2P
z7-R@VUUc&e;$Y|e?84%%7hZpBU@e2B&uaJ@sEQgv>tvpFKg{;EK>-C(OvNl{h@fJq
zY0m~Sn4u{n5wc^C-~kyVN?pe~C`Kb^guxULqtsFxu%^b>28tkris&+*A#o}YB@ED{
z;W(Rs37S;ZAesny!K?~F$@lx^?aQ~e*0;twtv!49EY9y-zIJ={*42+c`q1pond>*M
zE0U4V3ct8(>cq*NyLT2lXY-wNZ56qE>E;VBo`2)wP0D9yW?B!PI{erJN9M=7)#hs0
z3hT>DXJ3BxnXi7OT)TJV!2WKhQ@G5^0F`);B*qA_u1qzAN<sj`R;%4=6;)Yg>==m%
zykm{ZNRF6^>Z+0u2@sKzaS;NAI(nalIy&bSv}m{L7<`r`kUMV|5(0?Dy3SmN0H)^1
z6?s;dgCcLy{rLz1J5QMdhiV8=4tkSQldCIho$h!Q#QB1NNUX&)-ExndIQa0xho!%C
z`^vd$Ycs<vcO8o!qI!rJB7xQAAa$pRgj!7HaN*gn{lTw4d30f#RG7SH$CQp&OW2^P
zn%W3iO-M%5O>Hxr-0nCK>PkgSl@OU&MY1dtku1xccZudU%8en!L=@g$N!DeF29DXW
zGf_rz%t)?O6O9F`Z7luipZxFRq4IS!2~6lx1}0{91Y~M}5vT&EnajhVX6fx;m^k&w
z!2tPRe*2le6#|a6o@sR^Gat%|i()H=0SM+<G;QTs71!>quiRW-y1N!%KYwSlL|`;R
zBS@QNEJhPmL)C1wMInu__-H#9O({mA)oP%o22nLIa^h`h^7SWnE(1hBV$R6<P}U}<
zR*OY)IS~;MP-M!OG5|wUYW(>L07tlGDwDB+8Jmhg(E&L#GGJiGoDq2d+*)0`ap(5E
zrF#(clOKBs>#fV@&p!LpSNc8O+!6`S)OU)pR@U0Jd-u@;dlu*CrYFaD?3i*nU%P(o
z)iY<$zH@1LV`*;3{K-?tA9&#S?wynMV14u69qE@Z{P-u|{r2D7yM5a^*t2iP_;|6l
zz7Al{k@F6S3=x^~%&SR=Az9ps$q<3H5f6AftzkPk$a$xtS?<A%9jB8%;j(pIo2YY+
z*%hrK)S<`=LX06W6BCWrtfX6(QezAO5nHX6s7y{y^?Lnwx2vK=979Ol)y%WR>cP_o
zpM3mOx7A&{cl-AB%dBN9r@HPF3aC2H2pwU@z+CrTf2F*4;a~o<FOUT9nG@A;2&0b>
zcGzx0&OC~TCedvxCTZBsGP~gyr`p(gmu^c{Rokg&%npZ?#Zl2%6fI_#S{52^=~RQd
zu02}U;dj3LpWb}#C*zDzmj;4E-7#X4I1dYBLPVz#THa~cc<PrPnx30}?XAl%zJ0y4
z$iB^1Pv#wuIH(7uT2DeiswFZrXvi^0H5l)VMZr245d&&kteW~Tl=LtsCdB<PLqt9?
z-Zel?s0JY>V5jk&6xATnENCo)Xf0L&rgn@RJ8(dbz(mC8zCk=O=gba)(dtwdnI*Y|
z4kh9a0L>yI6S>rzK|`A~izOlxHSRPjWC~jA#?spQ-S_wHn3(7gQTNPi=YII37oUIr
zj7C5Ki^ztZZhLOW)R9BG#>aX8-noUju};@+FZIv8d*ih?&%b}`_W1bt11FC>a{R!)
z-7|H$y1uj=`)hB$_`<V4{_$IHz8<7J{osR{XH^ZcLWZ;%m60??6+uG7#Dg}#geEtR
zJtC6jSpr3x7R9luGI5O2c_$K?7!m8bPGq7i&tes_EK9vHGneH+RkJ)-jYOQ*S=}#|
z5D>9pcoFutwmO|oT~%Nsrz2x_DU7|<PBfN-V@GzJI=27F!TECI=JjjmV=QxzMeZ#K
z2tq&%x~nBu-uTJy|5v{{-EtbXI7!N&kv5EKye6&)6JVIoc^I<QwpWrg<e-hN(fHoX
z5+%XFWH_WwR}2jad;1?x+_dyCj3N*KK{dzNyLanb|M}0t+ET7Ts}dci#G2aw`@I|i
zqGRw<MaD2Q%^!dAw8Z?I&;0C8uY_VsweGlVBFjaj6y1t-1uVpBLSPHilfU+fho{>4
zc(=X2wk67zs(r-auB~S6al`!haF|Vu8ImF<a{yuw$OZ%`5X}Uv1~VWBpdh88bE7gm
zb2+gCWFizT5g9<i)UkJsVP!(g01Oi07|9_F4W2Y0W$bbyN8}U`5KMxJT8uzs8lwc?
zZ8^sr>WP-^o*6&5(Cw`+&F<XuJHPWg;}c^c)^DFXcjMYs$F{z)v9Yl=Jw0A@+|I*$
zj~?B-FhAAGv!nZujJ4a>Zr!|m>F!IfzH{&H@{XzbnYr;No;>l%Cm-BczCGC7Ac;4x
z+<fuJ&;Nga_NUX`&dH;PI<2Cv24><2Oap^CO63r%rKJO;Av)*sBKMg`L?*85I(b?V
zk<WZpR;gEEre1Fok%-BA@0_danu#^}Ca6|b<-KpUT8LQJRg59Q;@cY%$BkPSvzwe8
zFUx9uZ7s`kGc8(0nnw*$hdAEKOv1!OH<bPH@vQKA;>hmDpFGVTubzLiw|Z}Gaxw$(
zpqU1__l^&%fAo8w9&D}=N?zoajA@5al&}!zob#?}*whjUCMn0VJR6c6IYIm>AV-Z{
zjKK`pF(FlT&6L2E?G#YViy~D7>3z~|OysOl^fuWNAY=Bix^edPpMLx6uHKSCzsQ}c
zAVQNYtbq{HNS?tna?S*@{^04u`}Zzfzd88&({IF9hkPEY_32i(AS^=&F53zcI5Q%4
z&cen+#}4EAod-`IK7aA@snd_#zPmCA5ox$?*nks@J6ZGD_Ldb8k#`p)VnL+w5lGA4
z**PxqtnGd7i`-=nFeEI_G>BEnC5W0uxCufMumBd*eke<;>5&i}A_AseXo_fnAh9-6
zB2VN-rA5?~yP{TUZ(~F!l#y9E+3I*G7pMKM>GtaK)lOEt`QGg_Z=O?gk39P5&V_}G
z?_KdO+p~A?%G%c7eD9fe&b{jqCdWFnGt<Y89C-Nn?p7|lcJA1{Z)X*%OBddM{>9gB
z++B@|QxoIA^uz-v5APi>vbfb-egC@m@Z2-s`_`Agys>=u$bo%__wU<UUxg4EsqFX1
z#>RSEn~ps*t0<az@2jd3k+LjPyHZtEN?9>PGpnkq)oQVCpa6;Dyo({GNJ}3{Sq`!+
zPmgQ}!8xxch*(u+mgh0VQAJu+WvksDl!HNkP!z3Bw`*qJc~LR5WGqz_MXS{+`vYVr
zQ8u?WGRI8nQJM7M-uaI|dU~pxU4G|{-tsN0*1T-_^2UGto1fdYFdoW&=1Ih)Av`yq
z4m8k~sj5U#(e1VINEe%~`&Lsn)TfxSV?+#f5D`q8hS+!~j;e0c<^gRAQM1I!YDW3n
zoMaI|dc7?4zx=2FPw)0MSM?zVQ)$R?lyYyA)`$|<FL~PZiNY^`>IoqJ&X3MsTU#DL
zUQ6tt%uh^KgPsugM0?Sq%YcZ$c1=$n+&#B-=f<u*I}aQ^cK*tZYj>BE9lJF{JkUCT
zCL-JR#V$>*;XQe+ic!i?1+fZ<#6(TR1l5?>`^-6~Mo2`Qa47^601Ne?F)JVkz)U%F
zPDm;hsG3IS@<g~mbnF}wnMIX=#AdZhOnUtE)1-C>un}!j3y?A*%N^w?yJk91J$7oM
zFs*cJ3-0#Zd)M#2@y_L!&b&RpW6x8c{!Cfv*>~Rc9;T;e2K{R3?&{j|CK*gli~+14
zJ+}LyhYq(gouBP?IvH|(^VaH1FJ8QI?G_R*?p-)>WdG@7`wr}xUAc8#w>CJ`ufP1_
z)8G2WrE~A>TUeOivC!(Y%U<6z=Xs0S5g-90f^#nM&GRB3JyPiaLPX~{QD=PS5x{3&
zMDij}z**5MEH;bLvOGgT5lI?TW=bsERE6e69_rwnGXo+*z@k-z5SW>;QEk;#<+IE=
zhlGQ&?6kWHK9MMSo>K%=a4IfT9Y+gO6TkVnhvw&Ich0pJ=ewW(%wxOf$D`Dt9yoRY
z9)UqjL{wBoi&jB@t2ylU!P=;;vTZBQMi}FV@RCu%iHJiMk=<|k%u=w8tdN>#S7gV;
z*qcB5(F@=GrW>qd-50HqF)c*LhF6sexTc0<Luaw@;ppMT<HwHPU8%qNgO_?()Jkoa
z&lc^j=k@+_MQ)&2p^w0|#*Vj4tKBmb>&t6b@7yWboq6X{U(#|GO`R4Rm}pwQ^O5=v
zK2#u40h}2MAVsNFV)_C}hB>KIOWm5WYoW`LoPkM*U=h&N6eJ?CqeLrpfCwr;Y@nu+
z)-fY8QBE!cFcpavs3d|&ZK{e6Anow;hBZ=-><BXo)@D91KQ%oDq+w${F0IJrrPV<|
zmv;uSf9~SN?|kd|XoH<QrpT&{+~WMM_b=awW$0w?`qit{?h-Ot+<$2A0|$4{Otc8&
z!j4&&@%0-kFTZ^Lt#_|%^sDLFsRxc9{>1UqC-?7PU0PaS+6?u^`M1yh^oKt@cj1!H
ziU&@f@;<A|I>u!0?vu!+uIuzTreSn?ViG~Ns!9N0b|Hiq>jaSlK%+WCkUA1k2(@#*
zswy*!O^uY4AmlSYk_;0Q6RT<B4Tew;Q3nkn7DbWzw4%rXP(loKAS4HrlSe}qDA4(6
z7@{{_Szg;cH@Pr3HZz{*1?2@xsMrw#gE=(U)P2KFNkn3Z>G%5iC&{*5_`z$Ke}-Br
z=L|kzkeZ^DnUng^hPaEW#u)QFPcfDt%I3jEv~uvxKmXF&)r&mX)X-C{h%-ng4hc58
z|8p83kQqbeY3q|8f2`G-{Nb~2ym94j%`NhUm$*1FQTEpcR+px=`9MA(<#}dd^QlK4
zo@{3mlT(X_550Hm&inUP1U&#DDkiN{@)u}^uRyj<MVWruV;#?&vCEL0A;-D~LP91m
z2mmIkq7qC5Q@~&vLLed|fgy@SsYPv6lVW0cH2cv3M5<7VC5C(A-5{v}n3#YHXaE%@
zpA$ghYl$cjNgyU{hp;f-J}}qWT)v`0w^r&KOVywzByG3x(Ehn!{pBZq_jf<{(CI^C
zU0#^&tgWx!xqWB<-o@3`74M0izkFqRYon3?D|hc+y?$+We(LjI`0Vc8lSM8QllkP#
z_>F6K-+Jrnxl0$WU0<G`o!Pax^Tf#mr%&%A)AhUe221PLuDt)9Z+!FR=bkToYjOAP
z!jaZ}h8lCH77;DPN>!ZCe4aN%RY!(OOs!7g3pRwh4s^eFGGeOh+DsE|H*qY9AjXho
z9)O1H`5;D7H6|u%G&_l-$H?g<&GMWb*L5{E)~V~LY04KO0yySm&zeBp7$Pw%fb$N)
zeCFywzsMND$ShQ$-Rh{|uv%;k$y2>I0uq}>9`8%+J`{M#CM^AI4PSgXqf668i83@M
z0H!AUjFKTVEe#~7GXjZ3uz;Z6c@gnMZPZJzz3}X}{>t@MwA?gRLr>&JM1s+eg-M+O
zgc3cKI~Qh8o<6bElW+d;%$hMUIV(G4Q{B$;=2GCiR20hsIU$g^wKzYuXJK+|tks=f
zc>D6zv+rH26cl}e7zvOJt#RN=gBJjR5rr__7(UWrKt%LFBnF0%WktrBV}Qh6;4BFf
zn7o-p)8UpH^gbtY$)=z&X^BBp8f6<85CfutO0AGqxkFTqL>Us3WA>CdGf05w8q+jD
z4Ix&c3Uy|(d))1r?o4HhQP#Hxx7G*i!9?N%rw;zJKm5%<`lH`EeRBTrf!T!}WBc~b
z@7urg#K|Lb^Hb5n)XYS`szTJ3<!4@beRXx?y{k9SXOw5xZrqrdEI#|$$4?yH+uK~;
zy?b_c$HcvR>lZKGdiJF^Z?E6$PIh<gnmu-C@zLXlIxHJY_n_{t+_~}0cfRpAU;Db0
z{bL9AO?Hc3)$;^Q*lHDtHW)?8fr7E)s1XRkVO3WOnvqZA+Qee5>dHHhpoHcet0uX=
zdY@*|1b{J$X_D?UB09uSS4<2|=?Gwk03wQrKJ#jjtPrX}>B%*4J0US8woWv0c_yaF
z1VpOl*b!3UGmD0Xbyep@0SKysgeuC8z4xil9Oapmn(!A~2_sRt?~`Y0h?M0S7^rD#
z?MyX<n%Ol-omncu8vZm=k|`;&WAX$*ASy@>>OlwM55M;3cP_q3gH5R_Ko6V~5!%Qn
zVwloWj!|$XZ2c#mcw~BE;mo<KXWqTs2W6-Vtrlh`1$4cvYRH0NL>HKq)KQRnvm9)>
ztQEL;|Mt?&JIlzOrZ%*+^V2Lgnv)^!0i&^B`X2Ak6FBWOxh5hx=TgEk1)@ZL<vc4I
z*cuVYrL8e(@kjaqQ;Vey87rDb(}<0R%MnYn+SeexfY3Si&Sk_7AP|EnTO)i!1+Y2*
zz<3u=?3$Yy^Qci{w!AL=5CrU#Po4f3|NQqJ{n){Nf2rL@g+K(Ib`k0tk;ccz#>U6f
z2j+<G-dioJ>dc#O9zS;M&9fH(z30~4)Y$8<yx<uB;XnNR$&-hxYHebI<`>#Ez*}!#
zf91@(*WSPFG268;d-BBICm%a8JJH@;y;p8-buxJ2*`Hi^=lu1nHx_sA+`X_+_4|$-
zF_CkC5J4jtInrck320*8d9q|U2P*2lbHru_rbuZ94RxrasDUAJo)_Nx5ifZN6rqZ6
z!W*?=th00MU4lu{B5dbeUDbupm?^=Yqi%|joOfyTnef1LrHZ%JZi%SRe2S2iShjOn
zM*mC$X!?Mo`~7RgvQH)7r~*uX5DZ%FmiHbBRc+Mr0f0#Jn$e3@lRdV81qCaEbjQ1~
z8Z2FZ?>m3-CD~eos;^0fz=Q~(vMrH~;66qLhxPPi_wmOcC>6f(^h-<2F<^uk$J(vg
z@yU%|uU8KO`T(UcMM48?Wf`e%u5aC2+PZr4_Ucw|y|)3bWk?19Xi2eSrX~$~gU#Rg
z!Suf9AqEvw0gS34^bx^SO#2cd+;2M54^E0?h+wK(s)A|*5F#>@_r4%U2C-oS$4KNI
zIifUfc7%u~<Xec8j${B3tyPkjQkJF=%;YePce{(z6Z@w#M?nQv*Yxi4#%2vCPwo6)
z{<nWRGne-U%iVEb)qUoqj8<ZDj)O#E8XF&*oSa<W*Z{yIhYuV)c+hA5?78>;=IK|~
zR@NRqb>i^B{jm&ZUOrRyR)6D*zx>!EhnWX6GZPbIj9{0}-#LHoy-SyGxV$53r%xSy
z@YulvJ0~x{`xeBi+S<JI?mJ)q%2#e(es5-CeDC67Rh9@~8vCJ&8j(;%JUI|Bu_DVt
zS(&PLKB)>-)U>I<0MQJfVgKiu_tl^hk-Dx&Pqvw5&WQ*+#%8pDL}bY;fk~nuU~=*?
zHQu)TaHM1*qGq^bFqAGK5+=<-s6#?fZ8U}kbgtoQj2?!xp29hoMiD<BW+{IrdXo-K
z<5IbpUNGnnVu&f2w_7$~vo`I1`~v_1At<03Q3OMig7v$9{pZ);dNq?WY;7<y5(5LL
zB>Zz>27n&Pbp2xw9p86w?;G!4d-}Pz)pY?v#yZ&^b3_}xje%$+U!w^V023J2>wD(r
zbIO*M);6WzugknMr@;4TWujnaqNZsk{0qWte>>d`DSLHQ)fP=50t6;d0TqdZ7(*~9
z(*YATHXjjrl~Q7iWe8;etO3FMJj?PVfk{UvbDFhes!4Q#&bPeJ96Rs4n#NeG2B`oz
z`EMDjk@O12nO5=mv3<Gq>QD|!ySo;awyMb~_rLz}AMV^Yi7Z*h06@ru-mxcUBU3Y^
zWPFT1%N7=P%*{@{{^natD=QD4K7I1!$&Wp9`uk5m|C1lRzGq>_Ll1r|*5aHy`^H;U
zf9o@!{-sYmd}^{?%ubG-IDTZSs?J@y^Y*#-Upaerbu%0~cyRyX;zK8ofBex0H`ne_
zEH~G;F1>U18-MlXw_bZS&)fsOzSTzn03ZNKL_t)iPI?4zmggB0WJvw3Er(QiZ$T#~
z$Lq4reCF7h8X<N%9U~y7LBG$gvENFNeUc=n0b|iBRMa^Krpd70%<>{nZ5|S;Svs?{
z*$HaSF^I+(Q!qR4Mx751Y4V{CNfGFr(`5Q@;4=>fqd_nLjIet|WXI0ABww%(QWig4
zH*N#^(_{b<N8!rD%{XZ^e?O_}{rT8^!m$Ap=B+%r?_j9vwR>Ov_y0EQt!Qr(B@&Sl
z0~&%bbK~-YI07_15<yK^e(~3TB`ALV=@;*A)Rh$()t$Vxb9T1Z>unA;E2GE-x&nb6
z&_vFkd-4(KEuT2D@5HI2@88)}%O_`MMH{poP0`FmB}Q!Q-+n=u9qk~JGc1gv3Q!L0
z(Q(1(i3?&T&+LF*i`gTxB;kr_LLJFvE^{tp)d(iZ-%3?Qf@%p8ldljFnTSdNsSF?u
zc~mu#;*lI@1S~`j5lQO;Z7PQ&^RrVqSR6#<l`Xlmx>a<GKlp>+c=A&xfMdgo22QvM
z5g~$65<TG1lLQeV%iW0+hr8X*%dfmr#rlzlPW_|b{<Xck7k>DomtH>e`k@1d_a8ns
z-fCN*%jd7&y?XD+fqiAwCtrX1(;s`_p(E?Pm6fIP-1%$I{_Lf#{?_!=)Q-8S2Tvbc
zoSzB(a_RO>l>V*j*Peam`_KRAM=heo-Meze902NiEN^*sp(=|!-`d=4w_2vUwYh<S
zOe8UKme)bbs%~{UAqWyXpJiDVs~P~<ah7E<#JtFnurAAF-7}ifN)$w3?}&++V~FV?
z_RgUuhS7aLwqeG&&j@S!sB|k4O)b$oQa;%ZPB)l4G!$HR>@)vgVrVsjOqzwA>9KQ-
z$cR6@oS<21H5!y5qG%M21{R``+PI_VzWKFFuRPzXH=!;;1dx)|1VP%ye4owSye+B5
z%~Qt?%+1cMZ`ogd<9TRJ^+lZYrn_SfVSW8>FsP7)i>T<>g~7&byO?YH1G{Ids<(4-
z@%*)wwatDEDp46Qaeb5PKmw(<7mcHTH+8}Bu{Ki%=ncIx83+<GIwEB9h>2X|h9D_v
z!zfpkl3Y&B%0CB)rqL`yQv!);v;iPSB!>V@WNM}XOoBwyS}ioTjfjNIj7$MR*(3|F
zd#ZhCZp^Bl0BlxxYi)hGjE_Ek?00_e^F=!?=WWCXh(wG;W|aQ&rlV=1jer>jRk>q+
z=ETV(Wby0Y{N}5#zI<T+!6zPna%`*{Lim$E`9A?z#8h#!-+TG>SO3AUd@}R0zIw|+
zZ|_2PVxm1gJ-M|yID6s7%V*xXx3;G07k4c_dh+0d#}2jgVq<MJmi_DJ-+S?AKl$m8
zf4p}0-rj}zg_$`<==U}|-R{cDQmZ{CA}L)YrWGJmY6cKR^P(^Vb}lQj7-CYnrxLC#
z%i(a0Q>#PVv|AzqfSP1o+fo5ST8$3rX&!y}W@c)sP)w{5fK*)K-x+32L>Z+1YUH!<
zw})BEEa^SBg;V39Li_>sS{hq_V89KK6&_599RcM?gFCmr{iXk)>$hFC386MsAT}gG
zMTp7D=tE&9p;vJAxu-sn=bdkU_vMS%S9_*hWG$1q$;q<U+v=CfP$LH}0%)|rP(5+_
zbY?MB^|^~TF1&y1=2Fjb?z~qqB4jl()g&gcl%KbS_y;dO(so21$SHy%gh8E>FOU%C
zmPBTtB31LLAp?MEl$b_d$utVQ^VXak#K{#8P-;O<b|;i)IV9wWI98H^Q8kDJ6H}EU
z&(IhZNoBl%BMWmgErM7D@b@<BrLC>`-828<U;X~B-Q5re<goET07Oa~+N@cF(+nmX
z`63V?X{X(aF_3p--S!iYKeVtg`~4sO<SXBJdUI?2#Id8tj~`uKT|0l_y%Q&o%<dgK
zaAfh>=bziNYsaY*M?Ut*1IPF7IDTaRc-zhIo}QVT-Ym<rZ(l!u;qv)+FHLo5=lqUS
zCyqaG;`olK*^RZ;*z0d>te<)5<rjYZldJDt-nVzp^z^jE*!llCd(S94uIpTI?|sgx
zs+&6J+>LHDGC&XjK@uP-k)kBp3KT6`mMl3*vMh%;eq%2$zh}>Sv!2%*%WK9#v!36Q
zm7_(8Vvr~?lOO>CB#4|d8t8z|;r2~cb<WxI<J{ZbAYplyYu#Vn)qQW(t$p@B-~RUZ
zrP5M(Zsh~E&U4+9YN1dFk_oJg_E}?@Z9bb#rBc>dHyG*%z5^s2@w`|lmWn0UFJ@*3
zC=wD9D$n5xR!17`GTC<tW+>y%R36)Ly*nb|zL{SVW-DExgGAsu>F)er9%f64cV$f4
zvhDqH+qxVNy1bEd@RdVBlrO@lWG$gVilSq$zk24tYc*s|ao(7S0RSaew7LP8(xU^_
z0g=&0tGXK2uN^Ff_~U0@Gk$Hz2$Ji4uO^jRSeUfPF+zySl5Yh7X<r65Dqg>QwZCtm
zzNt+nYscqu*0MI1fFz=;7#&Dcp4ha!6lRu}c*KB+qRr<>8)ISwR!Ej3>-bX0jAX$Y
zV9hqtu_3LA!D@xVlb$C%Q;Z;Hh_neKBSS!t!t;a*r1FJGDBnwX(o>cr9hQL5+E|cO
z%1ij3AY^Np1%Rg`)}<&aMV?Cf5TsDI)dd~R32jS}rO8D-IlEwx{`gNG8Qf5hqCkR~
zi5XqxPDJin5ENLcq_31`*|<4xBmgFB7*PN-09k-cRpySJI|c_<A2~MkgC9NlkzalE
z%=t?#?M<uK^`;wBiF9gka7{K>ICuWa=*SI~NVRmgtlu`+-_?-xbaP#@Hmz(FEo4it
zzIE>SrK{FLT_&+%RmXj|ZEQ>Wg@r{fma?N0H?CcI{-;k}I(4GCI=y~XuQqISr~>H)
zzVZ|?LS#fb2u);JBN$(SA}i7OfmbLQFYp(#3%>7FS0&@HR4nA2&Y>Upe&9QVy^KH-
zc}iJhoU}-JRD{9vl*8g3-WW%*ax{5koj$H3Us!^;SW;5Cy-ZoA3d+$~Zh{gm1xy%4
zmaP}~fMA)+fXBa4J>HaKR~(|Ebl{*-Krq?};oLN>n;#)UDMeh&0s4_f4~3tfe&)OX
zjQQy(H>X2KWS34EuB@9TL69W^2|}VQ%bP%M=hjVib&Y#ZTskx~Qc@|lQNrZ9GPQ9O
zEym%zwh<|VNdO{a5`wy#>+jle+q$)@W6)lp-ahj7oK`HPAe01PT*KFp1&QR^mxSoH
zwG5V=Aa}XHkD^mC0SYHKAcVE03X>lQkl77RStRQ!FiE}=N=k)9K#Z~+vKqh|Hd<?A
zW6P1&p*BJaLKGyW^5Q6Gj0T7iBuXMwQuqYYT5D_=YhVH!h04aQb*b*AOd!}842_u0
z=Cj4{{s*@G%7=CZDb#UDPIzy{dRf_bQ&@_9KS0knalAx4z!hMa3p^yStgEV0?|<-~
zt(!N$^6H-N{p-sYu3Sr}5|**KzSWn3)zIG3>UnBvV(P+$3;Fq()oTX^R`qOHx4OBZ
zHj`B8WB?*Lbz|)8$t%ZCo?XagYn!Wk20J%x=vdv=fNX9I->?RUuU>uW`KMob?q><#
z-?(m#l(JYX0TWxRO^C_^X2GaPI1>c`1dxnmbhPJ{SLbJEbBl{LHPwkkz)<E)SZf`s
z;Wk&!)+dhQmANJGJl9-yD1UiN<{Byp(o@DR3rZ$EKa4{6lq_elrJ>~|ic>`ty$o*{
z3l+($e=E#xsc5kBSQ-H3C1Ee8rC9kx!#XldD5MUroOtWdE6=4s7Z&CnI16P;1mMyq
zK`z7XmI&CILPLGkwk;bM3i_2dPmRnjYW9fp84p@Ab-7Zppo{FMLKX}X04<;ehBzL+
zdUkYd*iWRV77AC#repE}i2w+gZCM_M%UUkLW%g$Inq8l>40j@k-T>HIfl3NVQcCg!
zB9fK@h!TQ?Kp{{NDg**H$c!M^c@7~GDXEn70<a!|Vk<0=u^cnU)}kp-PZJT5VyjKe
znxhyaV3I5(N<q>9nJ6|=No(t?VRdU&MrvSY6U^n}$@%%U>v|sjjfbk6{8E@h7J`D6
z-`-M~k??|K_1@R^&rHp<G&V28AS<2#*N;F1Z6iOxIL@at{_VGKe)uB~%uG!meEZ~)
zqlb?iI-JWcu3g<fG&FSa!i9$V+Rn}{LUsP^*|1n>tgr6rYFV?oyS=qKP^Kmm0N89k
zckbN8!ILK^vkM)KH65)D8`iD9ZQ~k`;)UrkE*8RUe&3#-KKs-&(&E~|b%`K>61;?9
zZPB7cQo>`4j0DyVE8yAFXFN~cdDoqB6iP`oH8rs|h-i(~u~wccvv{p_Y0YTkpoQ{n
z0c2)Ea!3gYVkao%?t`E>){aGInLQ!nDE2%r3Zo@hqTJMWdCV^N%}|gVHaEsBu@nEp
zVWvFA%x-YOnwzxv-60ZQDGW1-M6H6Szx9>e$Q24pQ9i%aZ=)3pEtk~@7@63z5DZY<
zar=gjj@DC`MqhpVOlT4S5Xh(@lT4DgSS;i@4#|(%O{XCc5pr!(_Ov!8q)JuQy?y#z
zOle*2y#TuYCs-&OnJ;~e<uH>=I)rX8Z&gBpwGMe#B&1tYQ3~=TN`WMhoX8$p24i%|
zSct4O#uP1ULh1TE3P1`Z0)dQZNB|PV`H&;c1OSvsq%4yzMNtf~0cJx$N=PB4C2Ld+
zMUzQGM~&=mOa{bk<XqkiPfV~+zxL>ZJKnP;juxaOPX<xRtX#I2ZnB9%sLWTs@}004
zZQi^AKx%EA>~ST=+=9o5;3ZQgHic3?l~!IRh>FDzeDDMJ?cS;6VpnJ5!rW}BQ1p~{
z<?`sdwHu>Iy!^_6u8tmGs?%rAn5fj)Sku|vvhDWHnrcy3?Kd?vq|!k?SG;m&;?=!p
z=N1aBZ4E&p>T0Wb@11uBCMeA=#!-&6-v9dEpFH*$$I(E4H)1S7pk+azJQ*8n0ksf-
zB#7qcX7h`S`}gj><BmJ(8)|clIai*zjg2E5J8)k}K}1V3LGI9DETjO0VzIb{H!3OJ
z=FM8`1-?*HN-3n&rHBxNL{KQ?msIiC$yZowS2$5HGdUMB!ZMmtA>;qY4z}z@U0s37
zE11OYzZOcNAmQ71=-8Y4e){8DVG8qeOGXX=a8ohL<$)@vQS2*HitpaJwGi7kj$S@-
zZdwLu2|6X?hIEP}Q`B*uP2NP765vKHbuJ-z>tNRxKl8};+c!?kWDlRcR$^IZgaKgL
z*Un|LWe-1c0=obJEQG9J1ONbHl`ms$W39Cb0m)eFHjdUr%!G(Qh=7KTHIdN<WI1ax
zfQ{I4%wXAA<wT4Tl@LlQXAZ!j1_0K^M3HsMvPuyd0|1(B6vv=RDc@59B}HLtoj=&o
z5TFjjSR3#1=y-(q-uria<YVtGMe{;}Gy9c7R00NZg+QW|iSs9~JpIh`U-<m*)vX%%
z#S=gKzyJPg@4f#%WI!TjR8j$2S6#411m*h@z}UFx2g2%7;N#lC&bGGpk?S{}c>1mL
z=dX{9Wv8aXu^ZXrColi>nSE^I-mXq-`S`IDGgDL5Rhhoky_+@-bhg&kr4!YDP@N14
zR$je2cJRoFt5-(TiDXSOxp`fGe{X9?YtzKYXkjidQ6GML-?Ps=Idt*-KwnQ&LtS-M
zDxX`Fo?=1T+DMm*xk6uGPa$83!f^G#Kv*g<Gr3z(nRImZl>_U_<rXb3qM||+^gItL
zT`X`c8$w1PAz~d9k+w!wvXk;WqmA;^Qu=zw4$U>DTpw&{u`8!d%LwRt&`Te~F*98p
zE)}0EQ<kmx5L84|%czOtQaWnBPpHED3y*!fG<KD9b5=(T<sQyErcTOon`{9fjtc_0
zzqg}*Rrl!h;!pP+(tgsi^)PBkd9}$zSd5Cgn6n&WvS?x<C0bMM<NJ4SOF=w*^-?aE
zzcIUbZE``AbVJfu!SUTb%#A|3*OFo!A}#BtFf)S~Os5T+7@g{K#DL%g3!;+N#<Dg5
zx?*f=0i^Otctnaw#U%|I+>n%sBMWgwTaF1p09kFFDWL^6QN$pnQl6h;jTShzHr6)Q
zCD5@1(~^R|rrP?9vYMHLiMj0fRMfSq?zcbtNL9Vh(pVP65`ht8=PR{*bISqeJ^rI-
z6G8IBpZer?zWl$=oIO818$JA?2W5~vd**^5A*Gu)b<H2)Oy9r>1R(=jL=DW=(E5#=
zKk(4|v)S;(>1%HvJv%#B=wH3&{qMWCudgQxqZeL$xv8;Xd~AATWVVnkBm=L#vt|9J
zfx%VHnKUHRGF=sfh0@GK_Vn3nSFVkQCSTWB-O<vyZOg`<&c^KAI7Efn$%(1!qt86?
z`0%B3WWs@-9w9}cP*6&|@%sL``T6O|sq5E<Ru2rcwzgO{!0b%hme7dhoMWw%`(63K
zm0KG(4~8NDRr-oZ<izeRvsjUf94m5(#q0V3HzkZ)C8f%67r8XMoUE2YtE>%H?j^kY
z1aO4r%Djx*B}yexV_h<J;n4m!pL<dkXLTv7jRq9Agw7?AvxOrhMT#KYy=!|SNWK2n
z*`w!fKr%(BJzMH)Y7&N{D9YP7$Ff9<WFqiAHoCVd(^ln;T)*fkIkixH<;}N4NEj3q
z4<QC%HkR2qO~jS`gO!EiO*dzKRoV)v(ONXjAfzHB2DVlk%S;wXAOezLA*pQLUAb|B
zowPa%5i@D#IMyaMHfGQSmSm73PXP&JVc7}l_?}csC?hGxSOaqeQrqf8YE46`wbn;w
zW4-yDnV6qzXiI$Nw?Epywljtz5CD2)1%W{f0pz>GY;mse&2K*ah0p!g@q>pZCa1P-
zy)Bg#cig#i-@XI?<8Qy#+ETk=<3?+A`R~XAnzCm>8F(N-R=!Za0%QyErrXwk_~8eu
zYSrmWS6_eaC<r|=dOe-;6A51+&Ch3NW+rB5=O@PJ=H?eI+q%x?!L=Q0y6gMfs;jH~
zR3;JHcw}nv@Trk=LqqxbY<+FIwW<1!Eo*x_I}#$89h*yfaQ@`cH}>o~_~x4eVa@8*
z>2#*OtxYCU*N29ho150ITNf6KzVBIM0hht?mDj$cv9<D`$_($)7jLa4BxhypN}5}S
znd?5gx|Axi0%FBx!`^BehJZ`O-pY@+L<+mPvRgi3<;kw}EfdNr(meqN7?oar>am%j
zv#K;#D$K@AC?(x8+{^tE*D~hzw${xX24-e+&%JhZkwghVK(5XgP3fvIA8L*ZCeE`c
zp{D`aYT|ffZ%34yX>IG2$*Rd*cxiMxrUZ+MytGq3vl^^%!1WShBvue&-qE!etE)4J
z2xa|a!6vRKFM5V0g3oL%$CeEWBc!ZM(pYO^KS(R(laP$4*%-?foQkS3U_cTIQc8JF
z(-#=Yk*h)#C?p0D0z6`!R@~i`>}^OQYX&TaVq{`2A4YfV82q)*eJm<0q!PZ>*7tn|
z6N8OeBY6M-$OvGyAr_uUy#DI(u!zdT3zts(!52UK^>2Lh_kQ;eP8~V>t?&Np$3OOg
zhko__Y^{)fF`xGn9+B2MR(=pg8WjRLbd{_&h>XNi0Z^#*!luou-hcnSJ9ln;{`nVb
ztE3VP#`r=e0$&CG_~f*)JUKZtbZwNiote(|c6W65whgZ9sjv3ZDKC@s>Z+4BhG)*6
zn>cyq+{|1)k*IEKZP~Pb)nI>9GF-H|MO`e-PtP9MyYGdc|1_MPSkv9s)z#Y5-qPCE
zB8375DU<+#&ZiE_!-P&E+RgV_D7#6y<rNV;K~$!Sy8-udPmvs>&Gi%!1Yy~5W#uD+
zfPh-ZM#o4fB`xhh04$ch!VrPkHT9iU=!(J*R;=#t$fy7y$+<ZKSe7>lts=8wC+EqI
zSs+Cm&RskA+Ed^4igRHu%a#y50yjhQ&VvmwphZ9q3&s3<c5kn#uX*k5Ge<7X#6nq)
zrPXbjOkhxlI*TwLn>_n0d}K~5SuN$Nj=Jui)~3$x(^qdCJat|Kbs7kXn4qkH=wQam
zu*>p7Lo2Sa(nE6;3eoMMYoig6K(bsyBtjvCvPb|BM@17`%a+M9Xn_(zI0A;_?*jm{
zHlP8@+<lP1$e;`xE2Jbs24h(RT6P7d7ZC^#Ji$uEwxJqUwWrfQ1EAJ&ayCCbyD&J|
zzVWucLUz2auEtYdSPFF<S+*nyK$f*cfdPQEO(rs>Lj3h_JbwAga93BuCqMPDjiOgx
zIdJc;`~UWD|KEFdZ+rCfzcYH_($JMrj%{Omt1acV(LtuBn2&;Fk~solECJxs=7td&
ztd_)JL(i9Ot@R)M*n|Dut%1b)>WlzDLIX0B$y8-B-JM-^)wR<T+3AVg`1nLVm#?l$
z4{qJKslThYqdCqmW>Q{Nb7N@W{H5W;$1e>HUju}`zRvai?P~`*>uOR9vonh`Q&D#Q
z+@Yhtc;cziYgY$*x*O~3wHq5ll7N8B<hH;FC>+rYz%m;`EbD)kV`-_XuGm~vAn&C(
zbRmaMR{!QvOxKKKYuxlP!?LKxiu_Y%Q2{{N`m&M?xvWUET>ibIJ&mR^UQn4fbFZ=)
zmUDzd5=>+nOAC9SeSGxHVWo>vp$Mc9q$rbs@SQIQ7!nJNnj5R`*tR(znx|hmI9b5R
z8c8OjOlwtrlq<&COxjY;nn(oXd5Q?4#m=Vs?7~F4rYdjXjl-vk*3;}Pz`+fuSnC{>
z+){AU;^F3f+>0tyK=&a<myDcDNI7ex$H0WbK~fBsA+!ugU=0`zNP-an1fn!nm#4}B
zEF+?oDvhK8m@NPTSz`em<Xrv;mMuYKK#(tyFbY#iXs=6l)FnU{gz#q;qVefz@ZrDw
z<sa>QU|T9s&p!9!g$tMZ`}_PLApyfu=*zNrxKquN$}1J3e7^9+)4%9n-Tj%*JW}1!
zy8pE|5&f@z{d*6*_wGkO@$fhQ*Vq64AHTc*z+2D1@W%RqzWVxVue$yxKls^KzVd@z
zyY5n+8+meQzs1VRT~VFDT%p8l33O9aU1NQX@@VMVwTX#|AV_D@nL@s>kj;ff{=pBP
zIdtf}@5?CCGqZDZ<CBd|4egz6JMP%B_4akAFP{mNZEbDPT)KX3_R!I*m#&X`b?H=n
zO?PMO+Mc!zJ>3iAlg0Vz{Csxk;+0=K_0;Iq%l$o_&5d;)k&a7N2y_oVk_EEl1U><{
zESSM7xb3$bn7`%D0m@@*H=RaA<>r3nCo4`~MlxJ6Da4W)5CGn!GGMfE-@GI9mY+y%
zpfWLiQ+<Vq#K<6oP>5s<TBgGMGe7#ah_dlwmbG4@`P>rRBy^O1D=@x&%Z8?w)(b;7
zUORXuWQhQhO3j(ZnuMRrF65%(EZdO4sw5M#HMQ009b30F)YTk4arE%<^D?L{#b7})
zp!3=+lX$GP#<;;`#N~v>umW|2r5guGDArUZ4YLL7mNqG+u`wZeo^K%*ghB<<3xI^R
z!bIADwj5g^MlwbNN<d;p28-k=sQ?AAv4$NN%4ltD1XL!yIBJ{bq(l-rFQTxuDKXet
zmn2iti;?jrW^=_Te)QuX+_8IYskEScwR!t(=^%LPtwR%IH<}viYiept6gzVw7Z1i*
z5|pW`zVAId-}AtoK}r_pvVZsg{PWoO^y<|;pZxT%?ce{#j~@T&AAar+|MGAD@wum-
zuC7jP*s^Kt^4M3t_SpOGf8XtQ?6h$N&b$^7mj}$3VFte{ZFEFrl_C;c*HpJ=U0+9M
z>*2#Eu3Ww9dvb0z%LX@Y*u)x+ow{&!=yFuzQW%X4kB*LwoIiJFc6Q=-e(RC0t`=m?
z#<sLKqk^H!<NFR>yl`P8EScW+j;4m1+cx#D>S@jdRGga=rgZhfsV9E)gY&13C8b!^
z)yX6rd_&-DqKFX%fiKA+Axq$!6X<#OQ~3WU%#3zl9;~eOR{qsZMcR^!4T`1H%F>KN
zIK9+L+%LbisyKifZC2J=RJJ82G>q2zNWS1Vo_*r{k^L!*b8|BU2q4N>;;k?c;gmnn
z2sH0|&piwI_@({Fh9>6?dV(+|Wk-EoR48Z`bEP;Zr4dyzU~DX~Rf1-xr^7Jn?p=M~
z{U1E=_6ZBhmWAG2&bQ#yri`h0mo4wjD$X-yalGYwMJNWVQV7BTXkCbkAt?!f#zv)Z
zQJc`swkYKr13EU5)@3y~tF4YqXp9bxEm=0!Mu=$H&C)9%Ya<J$T)?t5K_a76K*B>I
zt(6omrqDJuBv!T8`Vb}r8R1RN<>wdk8#b-|+!r3PRA32=$g$33(gUmdYHDkq`Ni|s
zhpxA_H2Yoxff%fi!kE|sYipH4&$G;Wem?v9zLT{z>d*h|j|D|v`RexuRt>)J(i_L$
zd~0@odh6Epy{lJ$<Lm!AJ)PaQdF$-dbX9eVSrbY@${1i4#sH?%q#gGX*=Q0-WdkZ>
zSp#r7liGIsrtRA|&CSn^P2BK&Z+d37v9YeLrDav`z`g^g&!4~io_lvSH#SNoYinvw
z96hd>@4xTv2OhX5J3C>b+?v5o$^PWX^w7xozJo{ep{{MLZ)~Vu)zz|Lpwk!e%;aR0
zFHGMU-uudH`(N8f#Jz3JwaJ7IOH!cc39Ge0hnXUwQw1(R3QIb6?|>hc!^td5;R}*0
zO2#F`!ZDs`3IAAXYORP*uFxjslCAcV^qpJlU7LHQCJ(N#gISTy*ytE6AfxYjRSDk|
z7mK;sAAj|q61q^Dn=z%5K!HHQEr+*=GO#96lJfca9a}fo*VQeA{M1XY7cB~zM3Zl+
zs%=QB`T1EZgLw@Fk+woG3L^5PFp)7~JfF=bt7?v&xiFJ0SQLOn0)+rVFvf6fkU;<m
zBmreI>C(+vv0g0SOhgo&p0w5))@+?}P-INZ+Olz`o?t9lW+f#lAw9)lEU=BsfnCOR
z*y*X7N&u5JP{IcQ03ZNKL_t(jyFv+N;bR08vP?v_Rxl^5sjo^lRjc|c<q1ZMGYfWl
zAy?Cw`RwN($<#|jS`%`m`gbDco7S)OJnzL9Ub%E}w4=S%_myQU1PLiX5E3Ybv5smQ
zYVX~>W9J>)t6OSH`MD>adhx>#edx1a{9-CWGjk)K_|(TQoV@UpC!bx@-#t1u{-d8f
zxqaK_hQ>Or*$=7~W=s3_9;~Zt@P#C&iv$MT&ZNAGT4#plbWust+Vums-*KB%bYpT{
zNSvI!v0?q%ty|XlzI^lGQ6kw;-*D*g@tR~qM|;PiLkIKOnH@VeeBga|gU;#vLR(v%
z^u=7haQgh%$&(is779U-ZfMB#_jUJnG}fg(Q!3==7v{#t4(xmF@czAvvy<Iz&CLz9
zQLdm%IVl8I=KL$Pm+}*QtLN~hV@32W_qA8lgz)ZchBqJO93liW=-42l>n_~tzb&8t
zj!e6h8WAi45lb{|N`<PVJaXXm;iCtzIB$zN8*4-ffWpo3+#)Tr5@2nVO3K|kw+D&j
zi~En99-2n4hS>(lt(gGoKo!4Kn9B<3%|-ESY_$w55&{!&RLZ9Pgf%e|jZVznm>N%3
z*G0xKI(sod%SIcp>=djVWVR9nS$R$G=;n!LfrvmtAPFJSYKsI&B&0GLtT9?gCXPu;
zAdr$QDiA)n0ZL;503?9`Asmz6G8;fZ6he3?BoHxZ%V2B-&d!dDK8O@idwo?)y`Kmy
zvMm<u*p!`{FMRCdci(Z(S`8&jXhGQWwiW=uSSyH9>Gam^TZNze`OkhaJTlxh&?g1h
zG6n=f2o#`As5}Z1%0zh-Hn$Lc|A#+6d+JmW#DDn3-w?^*%m47T^=sDr@t=NS*WEi`
ze&wa{iHY6!?DA68BUf*H`JcZ1>gxyh?|<vP_ulP!5>Nwb2NwY#muoQuKt>WOASo;|
z3hM0bUe(_xJy|NvpEz}Na&ltZ)-9ViZn!#htyGFynp;nvAL;Du=<I46yD>aEa((E^
z#kGSy4?X<BrrHGCVpYPgO8L2L_R7%Yk>eM~r*ne5uC}&;?#{uUuGYG$FgqKUilf)A
zoIQT@(1HDz&!25?Y3T3i^1Yx~NicY`aLq42XvMKois_bN_KuYJjz}XSV6w)Ro$Oa2
zAMc2zcZb<ZrW6qq3PR~gp^yvnlh6PBsc7tq&CTml0W2d31R=m8te}D16lhT#=T`Ui
zu36nTw^)4Yg?;l8ilEBqVnZ_1lniu!4ul*p<nriSB>*geCWv?K+`e(`Kv#Rq#ME5L
zSn?8@(SUVgJ%|j3ZLGnTou5VJqW+yQV_?goMG8+UC8Z##ga?R91ilQE3Sv!crHNx>
zIMyLkh{PlUC$ob{Y$D+alAa(1sM&(mU?XO0PynG52w||XwO~R(;at{Dz%r$5dwsgT
zMj}R$hHPF>&K5Ro?)&6t9z<2J1O_F$Ws9JqTp*;B^Vw`Nk*E$bcinTB6!6$%k6#}d
zY42!HXEJdV$B`kyLI46IfsjH7*syWSmW}J8C^xvaqrJOv?@O=0@Y1nA``^A$Q<IpS
zn11r<Up)Mghk94_jb0!7oB#ghmZtVyJMXw~>C&UW^$CuPfTm16E^pe<L1wO3X|1Yg
z$RaRE<*i!Xw{F{DPitK^o1L1TL89iy#zG-qD8`3QT{?H+a=wti@4j8_ZLRh7^;6Tc
zM~|Is?`(em{daE|=p<9jq?5^{9~yh*%EZZY*KdrBptg<mwH>WZ8`t)Cw6qEn6?601
z`MKetYcId>{Q1+Tyufei=pwd)Sva$}e{=4MSN@!cu+phs`G~A&C@+VZs5rH+46vnO
zE_ciUq?8qUV;Kxskq-e8R(c7!cdK~Sx`fF9L?AqZlz`(0_a5B$YLK5Xg+*No(TyK4
zlG~Fn<yT%tPbIQMbN3zFq^Hhb8F}sCP>9kBK_=f>*HA6VBQaN8oYOY;(gp#+5JZX!
z8`rEp^!8gOF5J0m_wm!Gy&x5vvQ&2&zcpaBal10NX+`)Y*=+faGg#4;5K0JUYool?
zp-+LZph);q#e|k@97WnaWYW_HjnT|35Ty`ODFBTeIkk5wJgGcMgpt9>a2P62fGOG-
zv;~kr7$_6_B_(X4y*cP;22T{ik|{;<+W3sD!q5HDN9$YagqJWVkcgd38XIQ`fPlt=
z7X*fxgf%9tt*yCZ$L&?=>gS$)`P$Wy_Kx=2#@hTsE=Z)=3f9&dMj#ftwkfq~)9TjN
zrZ8{+^#@PJrEGh93xfAA|MJa-n%dv_+!v0&b^7nV^gsK%d;au~Kl}afe)aavYqo6P
zWW!P%8mUqi<4BjJ6bJ%AQh7=Ph2tf2MPOMV+nB(%_H=LDxW2iietc}~$dMzZY_6fE
z&PyhGx;oFDyYlmA_Y{k^zM-*y_29ub_g}hjDZ4O-3O?}R_jR>aRi#ZLh*i?pI+~m+
z9X)mZ{I!_^n^bL8e`D3=)!l6kRaG8_i}S^q@x>cc=Z_pdd0<c47FKmOq!YsEC|?SL
zAOR@CFpi^GN>#22&=NS78dLeXFvJ#sxzccR$XI#da7k%J%j})_c?Ik<);fVRaB#Zg
z!U_}uK^s?M6R>b>Lttima~xJ$1w>2|k)?@MIKSs7-_KpUM7jA=F3;sYJP<i)Ul7D)
zYdj(Xi9o>M8ER|DtXtEsy{aERdvGpd=}Xk}4T0B@O2&mk2s8&`0cFexD18!fF8lu7
z_ntd(YE4hqU{7ytedDQ%S1m&nTOuKa6ez$V7fNWDxZLqCo0S7BG4xj)Zot&K7b1(E
zR8pc)h}LqcpsfcH6hna6)$52tDN^M4A5kG>tC=HfBMU$zm^HI?L$AQb8F7?>CK4bd
z0E4hXkzqw4D;@h_>gs~kz11n-5DRM(<5LU8DE{>Ce)#U)+hP-wKqoE9faE6aQTm=|
z%nG*Xifi)y;I4ajleLfi`0?{+&)v3li&V<SF*6XM=Xo(|1YooX=qD1l-@c`)D)rTG
z{NVAYUQVXuU;WoV+rM|;KmW@&4f9|8pMUMK_}Vv~c;sUbw6@lhAeE`Lp(Rf#rJ_(T
zZR_1aybR_t8?CKznrS8qLquq(uivm~<6wX9*yQ+)sqvmw&G+u!Syx-#(%d|JZS>_=
z_KysYfBH9m?aaAzGcyZUE?-4!x7@XT{otzJp7w_3Oid<`0+mwZqZ6mjT_3u7x=^xS
zI@z_VV{ovmqqVWIx_WkU{KoM0xtZxR#}B`?Z?7kyqqVKQp(QL9wPr$0Bokp2k`NZr
z(o&UENgqsQalz#%yJ?TNj9b3@x8M}uVnmceymNC{$(s_FiT*2}#CLD-0Kl*%YmsfW
z5=ZvE^5)CWbC|RFtchb>L0+x=3s}(scBzA{$=$JIOH*spnW3>4-#Ee|Wx;xAT5B>%
zAxp(lL7O=p=d_MN0-}yfo`9V@ww^k1?83Q``i7bVhfhq*EdU82J<Cjl%$9YGdRb)Q
zrjK!pgK0&-9{@ym!uN&nl_!;Fq>XhL8i=fpxrBxstp-U5p@0a;*r@zw2-@f<E?T33
zV+-WmLkt2C2`t}gK_oqy5Gsuzh&d2(CJC#%>zf-qHesnC7P4?-YIe(Q1CM_4LySf#
zDwc{Q$(eXaQfNR4H8y&qx+;wTuCIk4pwege6KZjOzM-M+&Yjz<s?twA{qv!#L#x-V
z^%H?WEEbF4mHRnPur=0UXLtKYKlH)-@7?j}Z#?qSi!c4d|NPhW>pBt4kAL{1s~4|b
zA07TrfAYIR*jHcO```YLzklMXm!e`kxOSb1V&C(C-3O>Vua*10%r=x(`AT}ySWN)Q
zOk&%P+cs@nbN<qaeQ&%mJu!9S#F_PL*MIn-U)i(gz(0TW$qzqt-^TUpCZ?w6=jIa<
z15Y+}w+!?)baghgHP-}+6A6*@U~Vcrc7FWg(ADXgIR@R+)zsNqJ=oXQ+um53&rXhA
zTbLO?{`SHBdtR9uz1G#-(B9l0C>4jLR5FOIv4jQ@U8}YHFs$sL-r`}oWhC5m0)Qa#
zZj#4}J=ijRe&q=(cY5#mj{?B6Mn<_8pLlHH#*mDQrNsp{hAIrqo8Epov;n{}+nQQ$
z+xAT|NPPdv=O(fxlnJ(4n6N1wV9Zi^v!znbauEbbC8Ux_Qc`wqe%GCMcK5Xp4z4+P
z;<OdMvEX1m1Yo0W91FXgvi{vL6QaC80RS+IPC=Fp5Rwqg5Jw?I02(*~6GawW^BPD9
zAtaHqtN|<uBH@$pNf<yT>DW9#uED?-*jf|EVPvC-i2#HoNxGDhrat2h_SOiD;>cQ)
zx^QK@yRZGTpZ|DJ>kEaE4*i60ty3{3!4yS$=<4;i4;@=GFyLJFjAlZCD6C~7jN_Pr
zl@!ceQ&Y2J+ikVAHQ)Hgw<pFY>g(&Osxyq%7$cR?IwnFdp`;Xsb#+zB=<v+Bvv=LO
z;rIXYKi_}ft~<7Fdit4{8tOA2`uMLF7PDXayRU4&ZR_uS`ggwc_dj0MQ`gzvQE|d0
z9a$-TYs+GWTI*66I-lu8Ca_?P)l#WqspKVm5a4-Y?cl)e+qPZ3a^2{7a&nT0V_o>b
z19t*K7)Be{ulIfL{KZS>&R<M<UMd;X)YbNMwXR>cs<o*$@W}TuovxalS-5;@dg#i~
z<tw9!gx}Iy*Vb6OvA4UUskWG($uG_=%#2+)b>iUOJtvNzZmFwouB-NxU^d#uMBpJv
z$B`~iojbi+6w8c?B}lbGK6eInyiB=RIzbRAB?$;BIxKXP-Yz1bt+WmPtuR}fvOz?F
zB#lW69y@<(&ofVWaei@n(#8>%H5BYhYUR=xr)A?RTw|lbbsZfYZ6lM}7xo@0!~o<4
zO4KE&A?3wk7+IK$N;y!m@JK3V)={>$s(NN-e0222>|FNHv7>YOSd-KisjNrBU?MiU
zLQyHF>t7yb%dXGBz%1H~)>><f0f`U;>3a%&MkRznu$E11EE{b?K*7LlL$<)cBt0n<
zNl$r!P(DfFHl;#(o=Or)E>F<|0f8ZFVvLH7HF8sbTf&PNC=6+AdSM|~_{67v<+h!J
z8Y2w`kge5mqysOILP_C;n!on-?+^6#84a~{O;Q9F6cKrzUnmx=wM1niOnCui$fQ%d
zcHLE7UH$gK!)MQ3sIIAMXlhto%vDuY#X4qY&DzoVP(c4cPiJ>Kg?X@XeM9X_ue{zr
z&~xYRJBifQi$e$AJbB;UyKdjsQ(c>C>+YQxog5jSC>Fx{rshI!(J>xeG2=T)0HvJ6
zGa|BODTR}{K}3lGN9Ojs@9OXC6=ZUS*&vBJ)~RHAdS-TZc1}vQas8&|=GG^lesO9d
zZ#4v7P*t1m?(6LBY3}H(t4&jNQh8E`p`Dn@oxX7W%J57s8`h?SuI~1}zOL$YA{D48
zKQ}))R$M5&`s~jyojImUxvsX>=BgSnF-K7#m7_Z%EIEOp0A8vOq1=LjO2D|f9p8Pz
zQe+a+iap&;FL+lE;2qEC61Nxt&{~R0X<=V^`tixD=T%(H%}&a4(F*VG0lLGO7?ByQ
zQsUnCY(w&1dHv|{#Ed0h3iP?yUYn^;DM4yBUz{!#OO&)yG7z%$y<l~J@7;IpGFo@{
zt_l+A8?*B)6bR*JZJa0oSPLs0vwvxf0f2L?;w7e===I20HkvJj49548LVD8oy&z$w
zhsrB61keJZ;mBxfW3UF;#H1uT7f&IPgk{TCOCY5JLP8>tF$qAh$Y|p*;c<U^b#Hr3
zshBe+n9Z8u>6xAPtbh2|?>AJ^WG#U!Wt31hMmE5fpZmr0TQ;mm^uF_*A3pTZ!{<(3
z+PmlN!3~38O%Qm-XhbKR=kUPt*Pvq^`2M<eYtpIY*vO67_v~+JZL3OWtg+gu1tKFF
zBnC9VR!FDn#XtMSb9djh9YekUjYGfo;g1eq8++=f&ph;@-D@@sTsd?3|N7FGpMCb=
z!M6_SFx;?xE1NKmH6q-k=}AaTv@B%jehOsC7|S|J)no=%_pDym=Xo$TI+;u)^M!)%
z`ID1#Z@h8n^5v1v_P#d{o;!2)YN@0Pg(9J;ZOC+WH4XH)bavEL*ChRf0us4mI5wWW
zIy`>m`tW?dR8>{8dZ53rtG%JN)<>Kf9f7cT{qp%U#}1!7^j2YhwxhnbxxO9%OcYvM
z0nLO^1iXUky1XCzH@0LqolrT)meqt9%5#e4lb5>Ea5EWy`F0^<#refUN=ur&a^b}%
zAEV-e&1G#dk3y{YI5+*N`yPofjzet<g9H78gI(j33opKUXd!QzEZVTz6TMB<wMkVB
z^>i^>FmWgnEF^#+1U6=3eE9O^^Qm-oU0wab!-vpI>WVxT0)sJNW41BcWzDRAH_Yhf
z6UCb98mR=3j!R(Kh7gAw$B3E$8IedRB|VRvodr74N$Y?jl4MP!br{Db%htxRTXfhO
zA(WI7FeGGTVAe`fcSqwuXDyl>TU^Y`(W&{`mc;M>(W8D93nk(*l*I^ujK)AZQ+@jQ
z>ABgt2i|-C{CsY(f4xtMKl_XSk;{cWeXR!%zSY#!NCZ^wjI-;4yYHh=ELGK1>nKX6
zGd<lsO%2Tl_P#kgGoy`ZtZ(oWfsRYey3E-kBmsssqq+ZmyLvi1hKHxV{*A}itX|XC
z)A9P=13T|p-O|zg>Wlkde&yKT{PkaL-LdTlKlt8VJ2ofNfnz+Zyr<+WPZ^;?Zv_Md
zwz}jc1INoYM(a54=xATRd2>RkeQ&(A?~S)dM#s~s>bjc7vGKXt`S8@4E9Wj=nV6c%
z<@2!)!?;vm+uhvO*1x8;cU5&mvzJOcl9e|$6P-Ojc5!GZyRe8ByV~0adiu7n8^E}@
zI6t>IKRrD$b>hg;Gl!2%&(5f1&`@9JDG81OZp*{vl?(>udTgnHyj7U3L>u3QP%i&)
z<zsov7=snkSHM6FNx{!Q{i7R~&dO3QT%1#|Wbp#;$|995H&`M7jPJg4XCfiqI(TMu
zEK91&FbIwst5j!Q73k7*HaC?o<iLwXz$6h+NwPXrQUc?`!u+Kxmv-#DXLNEpUREAp
zC|kAUk%Rwun60f&`@S!gvKSf-amj|EDaEn2Itq)iDQOd;4VA#8qD<g<QX&b!m=Q?%
zQ50!yK_s;iD1BzZ+AvyUN+u2$Et7`?UXn~xwcI?|<Vh2SmP~47d}bkE`h!3C#H!V8
z2oaDblmbXNL1U?`HKkJi^x3n!?%y?&o%`w2Pd)nZhYlY;ylLa$$3FCdzxr=qI)3uX
z2S0FMZB=G`;zoU4or$?rii1Rg2#hhl@5f<;#6%jIGMV(+HG_?f%|{L&|Hij|)YH-3
z)ZQf-jApA@Dajg;kq9NSB<$>HUAw05>)-m;<3D}n{`YRZ|AY5>$)LAy@Whc5&p!9k
z`|jWUvETkg+V^u4(Y1@CPyXcDwF85RnyTDlHjzn!lcSJA>llzMfMvA6K&-7bU}CEo
zfqc?z!YHh&OYgdO`~45@zBqJk?^|c5X7epAopqVyhQU?oz`Jzua#-L)M=s{`G(J69
zit=@hwGGYntGhe5tXbXFSOam<^T3m^IA6SQcJl0nYgdP-8k<{c5<yQ_=i0%({@%`o
znW@RKvE0n`*%Qb1z4rW-^Cvsoo4VRsi2x!EvC&eO;sQwsJTI~am>JysOvN1>400Kv
zW@3vL&@x#h0AeI21W6zW1i7A;MX&^xz{yUro4au@F5_72`r?diz*=UHV1DTAYma{?
z6)qI#XQE=kZ5>wv9c7RcPy<+CWG)uxeQ8$pv~OD18!w8ZhfeIgedC6KW?h`HVc1fe
z^n}V6%w)*Zv535MQ5zvaaOt*zE{KcPa=I!LG4!ljT~$+k@%lB3V2x2ivW{6>8^<=*
zf`S!GLuF&h&bS3{E@qu%GB6_`B1zF6AcG+xg!C<xbO;szEZEq_hP7tnUZ@QiW>V54
zl7c+tB@n<G!`iZr8HAL=O|XMyu-Y=m1VEr-lks3xM{Pru&?ZLqb%BPbZrrtN!$ZGv
z4+;%r0Stj!+C4L~HoCg5roX>i0Pla}z<u}J6C3mMpFjKA&;Rb!_{hx6+;4yCk^JJq
z4<Gx{`yYHSNH4#TOQtf2sC6WztoS}!hFA#YmM1CY;Q9?4*9;yzdh%ya|Gc)gy1j2z
zF`GjMrwH%5?y)vNwzj_d!3XdAzz28lzHfKT_H)1YpVxHteDYJDdEpl?ys`i7_djqq
z8~&UB`VY@N|H6&&u@_!?wYRIgp}h?erSx<u6rNWqmYfh`dFNb_g#zF*n;St01%es1
z^u+xSfB2s5+lNPPJpIJpQfVBK>T0S6R;@~B(ua?qI&|!E7{<Wf(6w=hMO8YTPWoMa
zojZ1HXltsG1c^i{NCd^OFg85*#(`6lGZQFPb!~N~D!Fd3ufL~7m||{z3L-N;Jo4rn
z`_G>{M>g#3Zm!CBF>oUAq!88`%Usd%g)&<bm@4HsAOf))6j~O=L>Dm2J+|e1$F!XB
zD!I|2)x=9N;}nTGNqlV2vp3Ehkzqbu%vHS9ZjnP6!9ckSmr4d<Y2nU0HZ{~_&YixN
zO42}Ib0*2RZRl;OO(_)Fh3xp;;$*RyHB>^y5(Qd`W@B$hTWf1mOG_b+rx$YT)~`Eq
z?677u3<w|)tu|mR8vqtg5$C2vT29eese9j%X=&+KqF%*TM+#AS9-$%ygw~Px&<7^4
z8nlHtf(UH{%4jr^(b^z_1oQ++V6s*U?b@JhwKdj)$1KSRrEN+<d%eG^vyQ;%$VM?<
z9vVv5R{j1Te4?s3qqzj-i(1~^Ft8LNES6%eg%E4kuS+LW&p-Fl<kaM@U3Y)?dq4Q}
zr+>4hr|bLQ{Z=xWeEcU*rh`OhM>hkNqL>J+HIDoSzyJnOl-sP#R!5mkW^n!BV1Lii
zqsL$T`SbmKJ$1FUVA;ePfLU4t%m~U?Opr+W#Zo@$`_m)i&;R0OD1_r<BMr5g2S51W
zx4!=E>sQAA@-P14H~;rP-}mBcQ!}%>?zv}VXk=t)tfjS6hcPpfBq&q$-eKwB`m-RV
z4*-^pF?xP-qP4a8JrBJ1*FXOLT)yz^3rAy{jlnGB3XN^8ZSC#HPh5Lr|Eb~O$+?;Q
z@bw!LQ<L)x(+IF;-TK>ZTiexHmkg|wP*t5kq0bG?A3t;D>h&=;P*+>s-dfk)QP<X3
zqw|G@$+5z0ZhmrV-@ZM^j=Yu2&kXjjOGt^aE)@$>Du<7Vvi~$7h)NzJ2ME3!%vd?g
zymDcG$B0ek;u*?A2EYi!fXvd`?2YTMKJ}QHpN<z7!(zz5!eN}Z3NwpL%m`KqNF{?i
zZ{HN_((AA9yZyE`o-#EV4|F7fvNQ9ui^a*s(tHH5mo8}Ic|OEZTVws))Y!4(XLE7f
zyK43H-2A1>S0Wv2MnoZqfSI*+rHI>D+~Q-n)=p)6`R)^3!7J(%fCVrbQ7A76{6Gka
z(h6zaU^Gbp0So|2F{vmY$5GyBhfK2Pc?sY1eAka=6Xs3HI5^%~;j<U8ZK|QQ-AxG@
zTVrAk*~M@!AN|hnKC=GyRiRm6G600ER$c{LHpT>jZ?qLsgvAhvHf>zr+ufC0TzGlU
zo)16r=nudBy@CFLU;oWdHdNOS4^Q^>47~dKfn+LCS63D57(tZvQhA9J#Lim^(3bMK
zR5G#lwyj+)%`d&Y=g^_!f#)^1G=nuEgo$KetPx6pb2=m-t#|C)QCP^naqz8lI{o`!
z{Jm0P;XB{?NoRY{p1pg=E?&AmdZVYid&`!sU;f9h%+Ka-jEu9z`uaK|7iLi2=Qudr
zkpsXYSZ3+c8WJZGeiRk0&RHn!xMTB2AKul_SUWp6f8y*F5dPZrn?L&SM`jo1=BDSa
zT^l)f;rg}fH?lc1bbV@ZZc!=j?x`DG*SThOS8Y|QR4gRZ89+TYmc4#``0TlBg@O(e
zncnWswf!9%2Kti7)1yN=Uz{47ICc2s!8i8jrY72(8rz$j*u)h8hs&Wv03<*llW<+p
zvYPWU(dnj8xGBu+t@bl~Q}iK&u&j(Z_vWh?kG`c!xx&JN(Xr#A*jw%C9G8Ru2yCe|
zxBJfR^|fhZqK>xus*DPJl#)FX#awZAdLguGG#f8O+NgA7(UXK`am%`OlQ(Yk^$(1V
zPhK3lh9qKbgp`&6QAkARLE(B8H#Zi!Y|7}+gv#Z*=`Z)fC80hSW{n;|1RR5vEXY&R
zBN9SLDO4b(uY4th5G<r5Vzg|+$k`Gaqgfh2i$W?T5g34kRMPj!3rH!Hm;~}=aZOKS
zOM@@LD3zF;$&OFY@3?Er$3Fg`79~p>5P>9t1X%vAu<QxKL}(n%jUkTXn(9oD@H<-D
z78b*Ae)C7~yMK3mRn0&A(?9>o7ysnH{PmX_8(Lo6b0A2GmZo~&4~m6IB~ngy!t;G?
zcrlkx1PXwqBt(QTPN$NaHmvLE>3V(N{zHe4231wftqoBWAyKImx{62$L^fc;)$9B3
ze{lDGAGp^KK%4N@z574<p^tq2KmFmv=<t=R<G=pNN6w$U@XXI%%p?<YbBo{o{^RX!
zt(~1+tP~qAg|TuxdXy*#jBz1{=sD4ULPWGeFp`nVGL?da=<V&eW7l1&MC#4AF1_^X
zftUBZhNxF{_oNdkZQ|jvnajfy6BD!7uT2$;rI8!M)m46DL(PT_Yi{4Vt~w=Hhk-A&
zv2*kB#i8NL*C!`u^Md@QhT4wSnk{R4YZG2+exWeCFgY=L?!>VJufKBn{MqLE+SY~!
z4_!AWCc;R^Bxy+?0gYY)6_-$uo90|@4zm@Rjom1X6cU{iyKwCU@=*9Xe&L5-({qz?
zgR@QL001BWNkl<Zc2*Zlfau<k0ahT5<#N<16C+pw5Gc6k&TWD$aGXq#Q~+q>NLvus
zu1#GVo}MY%$)d?KhZLZcY;<iZ@CkNo+g8`ubYp6kg%@grLNI_35|G$hw9MKHw>~nj
zKw$9Zo<(^Zu=0oR%w`?FBq1%>I5M$`4Pz9AQCNuLk|57%p-NJ|^aL}-ArO~mCJ>Ba
zV~l1UnXn?&E{FsI18X)VFD~|V)pd8I6^2IJSgXs|r&PlK{1+dsZb}v6qIJAQAmlQO
z<eiHa07F@eN(gd3A<3G|_rCePPk-`bk3ae2mtJ}8)1UfeLreRSLq|t$%>C(~|Ni9*
zXZrp>*4{hJuB$v3|Gu@>E~ifKy=ye1G8$D&mYdu$HW&gJ8ylMvLd^{~2}y45%?$xU
zC?Swwj4{RrjIeP-xJxdwB&+v28cpx*%;|gYwbpn4*k?u(nB?B)_uJafNY6Q=IcLt^
z?<(K-mbS)MUf#ZPMVFU#-`R7hrncI16lsc<7Awc0oRb;)eOEvT1Opu%?UhxPJw4}M
z-SK8L9I33V^o38_*FFGgrX<&jDMb!&lG5uR=-czo-jRX+=GMlK-T&dRZT-tPzrSYH
ziqC)M(;GHlx&4(LL&HPIj-PyE$J>IL6=f9$@?<jmvqyj4-r8ykBS)e|eu>&7XSM;L
z5fq|EAUB)tSh4JV@4u<7y>4h=YGQmWWJ6)p3I<qBLzNXWN5+!FgEKvS!^u>3d}3}s
zmd-kEX<12UXXT2H`pSwt!GRe-B;%>fVE@dCGlOH3)8UXEikQs}6&<bhHKoybd@eOV
zJux~wF+8;Q?VXdugJFYLR8$0Q8-X|}&bS}F!yuQOws0=Exc$*?(#2Z*#jivJq>&U6
zL&g<_nK-q7&#9d+2se|Nn<c4y{w;#OJOP3hf2fp_A!zBYU)5DzQ6#tuSVBsd3kHl4
z8Y!0@JaJ)cIzF9+X%AgyYhk-el1#4ZSQ--S(6N)_Q*&h%)k9;G#B$zM3^@Xl(xepX
zTr&&&g6IGHk%L){MvVc5hLo<9S}KxGM!8yf;A!v(UB`3N8AP-VI~tC1#sz1BGtN1Z
zA_D1=a)_AHnrZS#OC(1iSzP9YpsleiWP8eW5bX=YlbV?y`ta?`*EOWQEOCZH<UAvg
z@LiYSfc~)0fLteQSO({8YHG5iC~xKJ&MVffy7|sqi}Ryj`=@{Y+i!gJ#phq1nw+@v
zL$@JG%QW*Usvi3HNAmLus_N=?zPYQVwPk*0PWZAn0)Ln9kI+&nE`${d)YsLvwzj<X
z>g#*oIb;e^T3i$i1UWL&8UX!u9x((BdC|PC<;zNn3s0OnJ3T$Ne&hP*o__Y^nX{k!
z^!)|(b%)=6d-vXbx7>KcrYknS@#dZ*M^4{)$NP9Ny#3`JPd&5y#w{Cy0Xz5Wa$F$J
zFZP59fTOk;F$T(x*r1adQnd|*cYgT&>${pvmXb~^nV3I%YS5LetE;=bqGWP9HZVAo
zPKop9$4;K?or}#QczK2SOWK;cyF04N3xg(S+5_gfp4-<qeWG`8aC|J4k@@-2lH&Xo
zOWSJ8OAS<s*!=9o*qP&}4!pf<-`;n$@*1nkqrs5SS^ydV0+_mlu(vpOy?eF(a+ob5
zjr;2ahQLrTMp@57{M9258SxR7if3XmAoMM47^ruJ86YU-A?R>0u%@dsKN{>gcLteH
z6A^@lL~C#?zU$EGqzuhuy)<!;TapRWG%aN4Wys02E$yhOt3Pt;bTX4gZsyF47)Jt9
zN_mnmuJQjr!mQag73WeTXpb8<po<6~00eLm){42Aw5N$&30xpDlQV-ej+}8WxQW~Z
z;;03J<vG&zr6@#}p@Swi)|Av&<#|rR<W?;1jZe?FcedUAxqB4NI#L>jrF?EXDCXCV
z77I9wob3gQD*^?Awv)|DPg<5)-BPRFlqA<OkcF($!u&@bdN`4szwX+rBVp4JEH4`U
zkAM4dQBlclcijHa4}VxzR$f(EDLBVmU4#}S832Gnh)gycj7E?sz{TpWl`W0+XHK6z
zaNuw>6pDsJc+p`65zt_U%u3s^3rh;Fy>8R$4Xek82Os|FuQzY(+I-WsZfy2P5B)SR
zFY=kseI_pwJ#gUQ>|E@&n{RUBiLZU*UvIp2&8F+Ofa@-3RyY#oe8><0KqEuqNS42!
zL-Mk2Qe)OIrS?(<`E2!-%UkNoQz;pb>oX@O2Zu&NQLC)DGCxu}JTNjdJDbk9y?sL`
z&kapYC8VT)Z8SI5u3oild0UfK31qGvF&)R9o};5j2G3p?loD$yibFxWsj;rDxzXZ$
zXrOO?c6MrV_Taw#J9lh1G<7a*7eE|H01<G%4Cxc`1%U9auK!@5^yU2vgprE_sW1#=
zoCIf_lj{|S?DI#D?cecoM9$1lPnt%~+tVM`E_Wli2xlSy@+wM;mbNu2<^1N^S1KwB
zY|BPu8kq;ifn)s#PfcngG?&dP)0W6QrM0IjON*OoDu)IJ2Sz4FC#R?96U;Poq!-AQ
zI;2#&tldRlm_=g8;=Q?u_{-kd;*tawmbl25<tv6H7+3;r%LoL+!m@xH3|SbtZEyl|
zq*MS(TApSK9Z3m5&olx-+cp{JObgDGvON<V!}UZE(X_#9DbHI{7cwA24o@fe(AZoc
zKl-PC{vmF~900}yX)*u|BnFZJB~wY$5Lwp&jvBQlkVr(pHJ~N{t)%pWsTl)M2*|lG
zl+x14mX;TGukN_!nhk}eg}Zj{?C4zf_kaKOC9N&*zwiDBzw?8Jy6T&6d++%(7m5o?
zi6EJdGo}a}&NOG>I-X$M;0C!8v;@?elxZ1FP4xwZ`TGwXdS~x}XnsLyZEbvZ-avs0
zI3hCO22-G<_LOpj&FY)W)?c~GFxBxR$De-o_5c3opC~FVJbUWswijOf+^6rZC@XpH
z$!$lEo|TTX>#g0<XnsvYlaqDlM&rNu*^~8EwRy!wS}Bb{j0pTFNUa%2Uub}w6d1@k
z<D|S`G`e(o$2HenExq)qGkxQubEOdx;hFCC>XPF8`BWz9vT#AgTYHb~J9sLc@uX70
zATKHjuV34~yrn8^qEKWIf~I(a&i73pIC3K6=={QPWmQ3CMR8Y0M_w?PnvEr<hUX^6
zhWdKm-nl&<pNvM#qT)P*Ss=kvU<zh3Faf#ef?z%ikoj^j^v&x?=al9|zT}t#3Iv6c
zp+q1guAHEoc=;C(smVS_Ok~n2rTrqh0whA;zZHm7&d}TEQxbCEM42l#tcXUKl<B(K
z(m)_Y+RHczt-OJu=_4m6My6Aa6-o(mIRc<SUKkF?Vspqbk#%B@o01AG)3<~3Z9FuQ
z)JiD@L|Q5!;E0?fA^Gotz;83?KXMY}`hotbffVm7DgrPF81so~<cCjrs9c+KQ<#B(
z6|`-^B$pZOWt8@m2CadRb727@V+Ioj3Idc`c{=S`%Bw80+iD9#L2@0f$()#q%_cIR
z`Lny0tZbI#5z->Zl=&kFVJH$Jr5WRf;93(c>^d3wp@4MBPyv^U>KS9%Y!-d<YNcyx
zDxZ1gnaawtJHPn3Z+!W$mv?q{ZQT5gfB2WfM-KmT>vM(q1yz-mTo`Y@xx2Zk6~XXl
z%s-SN5>YrDUcR=wzN%u|i!Yowa=N0tw79GUl+s#BPYTXSYk#mdgeWQ~AgvkT)~(Mp
zH&xzp=X<m9*mwW!q0-W_58QLN&N|=ww;yg;*L}waZtv^w-@SX^ruA!WJM{SDTlXJ4
zf8$M8nx?VfiLl5gysX!Rz|c2=B>(`aJTBxl*Kc^=dp310sjM!ugQhn(H(>{iXe1O2
z1!rQOcFACDY;<&Vcx-rZERk{yVU$&tFJIHuxwPK0F&Z%#WR;4|r@d3B#*UsiH8t&8
zcDSsfsHVPX#nP6F;v(Ci*_mM{74JKJ`ow`lBfS?Qkzh$_LC`iGSGr0|O~3`^m@od{
z!~qy71iW-XeDU-@HUtI~W-xI4$eS;03y|x^XI#$%0DVb$aiPXQi~j}y2F!6%wbd2N
z+M5kQN_lzVu;7d_R9dH97#vTWAD)j(WTx$+(o7>D2Q@!2vwT@&A~v2(#56OI8&Ye-
zw8(erhMem*DGf@a21Hzt30=DK{Vx`fzxOn62-r$#DP5UKlj{OF+I3Y%YDo+{jl>x<
z3}y)om>9MYI7mX7A?bM;&vhK>DJ_)}+#&EdfW@dN%$C%YRFwpzN;7W9<8pj<`kL$4
zUjM#p6UkU07*gQ*RMQ1glJJFmp3AI2$a7_mri8?DzMcOW%n;Eu4I)xX3BiPb6)W01
zm$g6f;7=;c%5J)8%agy{cGae<@BZu;4)57NJu`dV%{QGseroBGWeE1@=y*6B^sk~{
z8d>C4Bj=2BnNHhwpljpirkd)5`wt#Hd`xhj7m0>LAyR5lfrNgDy<q^r6<4fTy?O;B
zx$Es+hmRh<|Gs-m3JZVnizmk?Ccp5x&(<tybK=Q2cJ965+G{7L=N^3MSD(8714~w|
zBqz%_`rGYA5|I!0Mcgea2#LrrnJ{D~I~~opS{keCtBX^K*c)%1j7Ea4WTb_sg5^c!
z$#^U==eSO4CYHW1Fws9WIW|5`q)JL7U2EExG?$l^glrS-Xo#6Qm4q|BqsNY(8=IK2
z>|jYWuc5NMy}7okJa1y?f~6@nH9a-hzjyB&7tS0tL6wvgMuI^<dI5cde&61mH2QG|
zfGYRMWoJ%^j>NSRndF<ldpbVS51Dv+e%812`8{`oKZF^O=AhQDT2WS7;JJ=va3JE0
zalyC|n4EL=9_byKO?nv6-0&kk87KyF?V3)TsSRtE)z?%wWX;9nz`6ES;XcfiCQYOi
zNyT81y_r))BmS54{C9&{qiHV|iWp;t6%d>o$QVNjhDX{XCAFuuG`I+uAtnL}xaYW%
zKufKp^lgT@;h0?53_}9yN}`RG(SV@<Q7ZFn-*|aV@dKawpcx`SP=Lr40x=}cxRM}5
z(96R2zqj@9q27W>aY<FJc0ElRhzx@RF#uXDoGvVaFY6WNa>Nm})~3mmsU&DBuPE(a
zyT;4Pt-pHt_Pakeb-wr6-#+ujFMM`tVshKImr6^j{{6wnk)VC)l4HkD78VvPT-4ls
z%o)>*=4Y;Fa^AMIy|%LQ)VbcXr_aP<vGT@7rX&!NCh+ewr4UhiSuViy+(ar_SXi|F
z$}4B4Xa3_yk2W_q-*D&cZY;L*?On?AZn*W<ZO?3r#YP|a)F*bl@bd7~RAXH=BLYp#
zFi0xWBp6pxBlz<i5-d<R0d=lt3d-|9d6sFmEMI=p&DRYKO-#?Gr)RPQ!{f2Jsin;g
z<wX&tblTB_WAhh=CNB(34GfPZl5s{d5)HR6U$MNsHLub#ObCXoin6j~Dto$T;_T_Z
zvC(PesZb;o4p{5ESJqdSlH+9OXT3~fYN)^G<k54-j)Lcw78Qm<L53U%l~OtOKOzxw
z<gnnnb?GVmYpGNab!?>Xt(Ts$WHLTArk(7i=vr)WFJg?bTpBQGH*B*FYgd^<Y~Q}O
zvaG-~IWp1!ng{zw60hy)Nhu|HKq8X_gdB+p(%EF9w5WgsOij&*aN+3qBnqJxV|WQc
zYm$njM)KW;{jHf^D5d(+Qe12>EWY8(eHt$V8gI0MOfY6JAp|!Jjx1mWOw&ZhG9VP7
zs~ksquB)Ub5T;-PHToX;{x*+DORYeF0I*S)Ma{O_qL8UUE5^fvW7A33x$l7wRyCF=
z^pJ5v0<L@~J5t2KG|lK6JNEu=+wSw{`}ZF>G1NEMP~TWwREz+rlw%0r6Gm&&3rM>R
zW{Vy#0N^9dFNAU~oUD8J@JZ=f&p-9-Q_ueP{*V31@-0_?`>S93+^0V|F*SSS=!s-1
zeZ{&B-~QJ}uD|tq?Ky_Y5kUx!h>qj(T;d67MFd1zS*B4{QBhuAIxsl=)Yhj0R-mrF
z9so#bMmf?janeYDSW;5Fq`h5v?o-b^J2#(*&CjjuT6SdLfnWdT`44~KedVQPKYH+y
zdp>$sb7%Xu=U<4;Os!qhoy}&1X>!3ilIOZeOe<{&Lrb47p%!L!1mdJQkO7E*jz-W@
z643IMo$Ib#7f(zL4Npu@#Y0wxv?HZs1Pj0l#}ck5`M~f*EFRA~dTeyYO{!?LsG_E<
zd)=zK>e6gB?s=JL*j7@FjZL3Eec{5uU?>!cMDn81aAkQ(V?%Y+GMsoUHZ?gnKGJjY
z`0@SwRAN3a5{?9I%M{viK!XrMYa~F9$N>4}r{IWyg0u~4=S$B|UO1%^Q#un@uKWX(
zp<c-QL_{LZ7)NBBQRkAzs*1AlvC$JJPE}WyX3|L@<pD??c>BPGQ@vB3VL8M!0x%0e
zpz=&Zq*AkUvH5r+X<Cu<L!*gwN|=@(wS&M&Yw{FGMOq8=qY3<Wp9b{372wkP>SeVM
zx=8f7NEtyy#(1@1NR*ONiX0+WlV=#F5S)Nq?Ga_9BI$utAU!P!Z6R#VEYmhki<_ny
zu(@Fp^E?fZrGf~nFOQbwbAiNpaAwXsc4F+-J2qT*^9IQ!F(TA}e*K96HEFc1@W6$M
zpFFa4ekR>eTb)eBhK9#qe&wBbEM8t#TV7Ky-GtVP3wDVu#qZB%7l**yD8iDdlx^9X
zS>OKl4?WN5?pn&Z_wm2}!h`?#k88SDHg&W={LsUH@ukn)@Uf5o<5#{`R$M$hFtoH|
z34o_bWir_XbHat$(r-BU(sPC=L~C1f_o|hH{ey45u@gwww6!8pDv@A5fnwpkNa<O&
zv9!JUJ$KxE;e7vNKl}MR`%d0=^VRS9lRJO<;KQKh1E2q_j3-`rc}II|Q)^q3!TB@4
zdH&$OgAGl!!9ajCkVeJ~C+pgQkjioCHRQBE3_u_e(+&_2Xh6ldW|ZErVc9M3y|%qM
zuerWZyD3S~J2F0#Rvn$4b#;}gOuBDy^4$5ck<rnfzVQn~6AaNrBNPrU>ug%TwgbV@
zDpimlMkYo^=X%cf9X)(Lo=WHC=T}x$ghO_HO;th2MlU-*GZCMj=skP<*x~)NV*>@Y
zC@Lv5gy6_Xk!3K_Ih*mzP6iCXL^eA%u;X`6n@%h-HKg5)mhaZoxvW<}0OWZd!|dku
zT?S```32>rg$2>D<D^Uj9fDYjz4Ydhlrqv;R04?!00b?$Ku;x1GbjntSuL5Eo}Fhx
za3NG~D~O~tD1}m?pE1W+j!u=EtQN6zNtX8|4_-VkeULF;Os*$gNjewBMA~z*T1(Tg
z1ZPYL<SrP1KD~t*ESut#LF7al7&8o$KzV65>wsX;P*vJe6E(QQ0Mi*bab~b(NzErd
z^CzBgNN@s%pa4BUj-Ua^U`8_TKKA&t$Bqwt{O+4S|F>VND=R#G_6%s)d*Iyu1E(fN
zMvF?!;-W&S<ig<b$6-c(n;QVoGA#sw$hKU2T|uNE>tycx{Qaq+UekoNtGix%>9wNL
zqE%fT+n;|0v~};@_x<SMpRQcq%D7~R(P$)*Od5;9T;QAY<rd~r>0mIRwFZQyhWd`x
zU3+)E^YoKX=122t>uROv<pSrC2*I)~KxJBnQrWKME3Ut8^OkEjTye#Q>5<XL9^3lK
z`|c^Ntnjkg-@Wwe=1psh3-X`;?Y385eSPEl?#k*4!MWgqA%E~kk8IugWF%ZrRa2eg
zrlSWa0SJIG1>6JF95o|FZZ;h-k)xY*<~o;Dx3^Rl7v<T(@W@Q!{J_k7dMcBd-gw2D
zWy_Y0jZaR`&QHw6#wI3v&mKN~^6cpoXZkPnOV7RK#%tHE?gVlfQb|#<^jOxR3j_Tp
zPMsMT9w{m-4u=92rG-s(WhMEMWMVEJn@!J851&7K^2q+a)2B_2dC_Pf7;+tnjQ>8y
z09*-zgLd4vcf2xo{<KU?rDw;PR$9FqZ}2j<Bsh+17^1eiVrff_>q@~5+b~@>Yne=u
zLd!baH*@UVtc&54r@$1#5Q3qUsfx0qRoyFz>3A}&m|#Z0b6v){s}!J5|3cD)o+hOc
zQE(2qmLMUZB9}n<D?`S_AHwW1=Y>nGy8wt+i+n^-Aemv<R)h-!(FITh804X#889&*
z&@@aNP!hQ=r=+I&gyXovaXB##+EuQr2&&52n)dRDnPK2&r8zk1oEuAg_1m8^BTR4<
zf^j5)nga?ZNP>2_5XJAjaq?%6?AWq-#ohPbY=~q<Ro<2@8}keE28Pbh&di@V*S~M~
zxq@JEV{N0!jdU^<idYgdz!)$MTmqB86fg};`&wXRa7i$V=7K7!^IBTV!HWw+=M{vJ
z>(l2>ojKRLe(myyfBNX({=;8OC;r-wSMR>-?y=FCS6_Xjx~it2yjo^lhC&l*DKC~F
zwB`)8l0cdPNbRBamb5o-zV5062M(S+d)BheXe7!QvxLc!yBWta%ycp>fN`z^mWYHc
zWb*A@J7;2(ANt7c3_Zz>Up=<<J-2;i`}SQgzV^~z|K(?vt!%S{Vd<hulfi@k{LhaG
zrmk4CuCzQqn{^|B66M(e7D{I_!bTwoBuVAhPPpKLi2G5*QfopiDk*7hX<fHwZG3wC
z^s$NQiA*M&t*fqfoODffWg?lJnoS4H!gvB^=Dhh>x+uTk=#l-&`O(c+th@EYAC6Cr
z%+5_jBX%$pnvEr<XXXzb8ypy#iWKA*l^2NsZ)~itsVW6m&W%sZ&rMB@4W2uB^!S1O
zA)t!7I%XPz`}SGBPn`yI4I#WtRwc*ZeCAO|jHV_=l;gOL6d=%NP+oGXoDG&{K%^v+
z=Qzm^-gdJv1TtWT<LWsp0LTr)D2TfS&%d^N-cg=F2hz+Chy<ifLlj1Bm6%=G+SqgU
zY*Rzs_~f|9EQySm?~!h3rM0I(YlZ}fnzZ(Dg&NQ|=knJoY{3RtUpjVhE*8zbLFe3J
z{E9lSH%&s&%tN%0ajD2tuBSi|kzzz3m2zFzbJAKW!4ZUs%+j6*%v9V!27*z*aDq|R
zR#RG$Z;;G#5y*O?e{Af&KfP(y>LrY!5FCMWGG{;}tvxi2$nb^9hkpF?XukNwy&o#6
zDmvfWH!?a^UR~SL)O_95*O(@opHIw8&h6WGWbZrsO<^@GX_H=-7$PntlKFA(WC0ln
z>@qgO#fo_DlL7?OG)&WIYinA+cIB?!`!{S@T~Su@>~q_$z3!Ug;^MD=^FQwX$Q@-%
zm;KXM{`Zv|H^;KxcfR%g&DUQ?(!+(N&!u&yMXx22vaO@NzP|R&x8B~f_aJAiyt2~G
zWEika#tDZbp5t(qGe*~1HMh5}U%SdMg!X7+V0{0f6UtL>@7eR$fA!g>B{fRRRK_*Y
z;An1r;+d+ll5i-zVZ++|{E%q`e(}>MXU6ABOUi=b0CG)Qf`WyO>*5fK+Gp7@B;<fl
zSWtMw_1COjw=^Tur%v|0v**NYY{m|R>+0*ODoawS^yt`Zd_G=XQCVDESXWn_OlNvd
zpX)zyZ1t-44}R=@g+-yPlUAUFX=+anUYI(0=FHi1{Q?5{d4(l~B`poL<)wL?$@u(q
zY;I<HY^>+h$s@bp%BW1lG^3FS2Lw`_X@TUpI&9&-9lskmeUOr~=|o(43IO@Sf_tIx
z>q~|f%DJFPYXsR?TU%FCZE<nn(82sX+cGuh9GNAhac(%XbN|VCCzF&J>HEz4p5#iR
zmTo!$TCH2R)(%Jd21g__37F41U;v~vNex;7C<0AzX)R!(q<;yc<@b(Dsf+@1e)>Kg
zg11Hlfg}K}Tn$_UcU^F^%GFwCvRZIOB&DYu4+sp?GEoJ%3EXu-X~wnZ1r1ghwCgML
z+iD9;@C2Adp#vxSmn>_(=f3wUl1eGg7jrQYfTYYCB9uwf)~(z2?eDw)-rLu1?4HlS
zzkT<ozk2fZp}yg|>bk<h$jUWst5!Cb6c^9U&h!mTA31h%=Ue+$bah1YB1oD6L*Pgp
zNg#3bT>w$P>ql_u;d!1?Din@1H8cf-p}E<aXP$fOp1W@U&C}0s+_-wlvX#Gj=&_RG
zish@<|KK|hZd|`UKd&GVG#9)^E;|-0U_^vk3ohE1w5(dada!?R$M!c6p|qqVloxf<
z>6|VL{47;)vu-F9N+wbqBRxGs+g^Ihap%AErTd#(YdkM!?4?}oY4*^M9{<9ZKKrxB
zpZNGEKMtPz#`c}R{q0L9j`!45R@Qg6&rXcnfe=W4-ok}pg>qcLoZSZ*26x@8<D^P!
zqBq{$ef8CAxDdVPC;R%x$7W{Iu2Y^DSigF?5d6&9;gN~);?jz>>o--E7A0rLPn|t^
z;r!XQC3RPAS>Msw5DfBw;EXHJb(8b%*|Ysa1LJN+S{9WQM{27p8fvS8mZ6=@{M7jL
z#L&qj`}<EHO;3*nEFR4Z2~#j62GU8)zV!4H-rQ6wHj_yvkpOYQUm9S6cM1R(w?qi!
zxhc-Yn(nTGNZyenCyyOJv#hN?la4#CYnowK^54C2yr*x{Axt>{wguck27nv|*V=Ps
zW@;`b$voFLoXko>BR6UyAOT4YN`qFgU?X`s3HTDO@VhI)FZNp)=NGk;KzwO51RzOy
z<N!%en3j@SX{j}60B*9JBfmh7nlZy<+7?2B>nc(lz{y4|D391}wfRw7D<^C4NZ;`6
zyp#U)=RQza8U`TK6rLy9qPh=>aX@YFeCzOUp5C#3P18s3`5=1fC!ToW?L9|0+7~X2
zzVX)n+1aUz^1O=L!ls6bwHr33W0{e$$w1h+^^Ti>X_2dDFX-e^A-ag_kCjF)1%|JS
z$)>Y@)jkjoUB6`m=j??SUj!05tKN9)olkt~)4gZT_w-zFJ^k#nFC^s*001BWNkl<Z
z+t#dJW?H$QtQWVj3t=b#z&V#vdQuvONG4LXO^q#$^%pMmzqaFbASx>@xs<WPkU6dt
zhWYhxK6vI--%GE&)zVse@BJTaYOD5S8W=gQv;zSS;-%ld%79&W+bz#M{hRmQch7~R
z#||GnUYuVvG&uF4J8uK2|M9Ee4F$}a%JNIfu(?}AYkx9BWaLWMG#G%V)x4XYEi2Aj
z+r9Ft&Fk|EBd3n{rc#NOEp=1l<8_tgD_68KWCsr)di~8qCWEe(s~Q`dWAVB3=X(bG
z&gVz$4Og!2T-i}mk|$kPNhKJYnVRb#7(9DnIG###5r~AN)fJ^pb(Mwr0TVryjKwBL
zdrlrZb>!eke{YaMVSXOB*qL|UI<;>Pr4yOhoSR8AM8+<P^6-*FExI5Bab|`?q4jH5
zDVJV-^_{gVTO&cCWIE+IN}HpTspnolC=COHkt|B!0bGbHM8>320Gt{2^n5IylE?-5
z$+|w!G=b7uY9K{^qB`isJs1F7%%s3SX1H*XibVjLw9W;+0dEe31ZSqfEK3*$^X(BC
zD5ilkU;>c|&ILD2ZrEH1PKqG`Cr6Q&QMQ2*E;p`P60u#-S=+SZNjiCc;6r!ax@KdW
z0uOTcqTf*Vk;V)&Fg}|2*<(*Tj{5V@f2_D9zvt}vA3d^FO7vVCDCByoufO+=ox8ic
zS_2`9M#|2f?mK$=>|g!Wr^_qzh)e01kN)(jfL%~rUMnoy&87()VOvN{Yps9J(C?B1
z7f9lqiyTHtDd`cY>Z)=?`N*SB-hb~$^9u{V{*7<`-B<p)bKRO_2aa@fwgdu}QUKjR
zBEO_0X$_vI3}I%ou4xJ%x{HlFrL<rMNF_M0t*u_x*)cIW`PR<e8P{oOtW{FGu4fnq
z=fd;6Oe!%nG+k7jf6qtX*VtI8Aq%KAg74p(jAwrK=+*}w`1n}gKq`}NtgZg}qrbTI
z#v4b6M{m6L%A(?8!!%N<R9jnXIAj}!&>9F9a>YUWAuj;nv$ZryKxF{f$U!;`(s@z7
zYUPsKZn@R~ab(YKlG%;xSI<pP73POKm$WD6XZ9XE|JqvzQdzZP`O1d+2J-Z&<7el_
zCY5xSbhKQ3Rd-2Iz%+m%NabZ+Jl{WZ>TGW^DNV}`1Ow%zg_Y&S<<W@Drjzm6_}t9s
zVE>6jhej`)51IPS7q+FQ$1`&?DxDUb6KKkXwfUprCD)8Izp4(Tvzg?Y?yl03;$$Ly
z;NX$#Hm|i!vMnYITk*VOXUF=dvYH2D>4apK83_0;lHBJg3&Dhe+#ocOagCg_T=F6!
z;zBr}FGT%ANy|kDk=7)0!8wdCY{z^%=iL7ytx0=Ir-_Im=Vc&BXAyyO%P=esOmJ=q
z!?tYV#E=n@CMA{Uk@U3Gs1XG+fk+^=39z)GsJ1ksWE_xZU3UEJ*osx{@Bi?PW>{%0
zbITZ5+)W`6%OvTMN1i!(YUq>qy|-)Qs@UYrV~;&OGBKx=05TY3hJbX&z51$^TW+~F
zkQdzX;@+SA{P~aG^`5J)?Q(To0sZc&ozFe@_WpfG5AHo(mS0&@-@?F1#O4(!U-<N&
z&uO{AaiNFE7$_xeTh!E6E$>*;+ST#o6HgpHK6vM!+%hqEVb`9W*Ijot=bWR^3Njhj
zwnIQH913ThG`!1_{o<>8(rav}Z(G_PFvU-Q_Vc3RqT<3r#f5S`E<{I1$NF_$n>Md4
zEX_})<BVfY1BuM@<kP=-5w+NI)s-*5^xC?0tH1y6Kls4=Z)b*a`sC?5K5$1k82G}M
z|E{aMYt`y*FPjy@n2)D~5V$~rT@)4q`F?{4NL&l9O+<y@3hpuT0v6x6cE!y%UX{(p
z_a4}78_daMrzfYhOO;hM!nAvOhhE*jCzWtoTRQgcKNAQPR8&>$+rLkPx9+-)olENL
z>nluy&&1{&H=9h+(8%P;vwag2Q-Ee57_KZTsjsaqD=RiRq!aVgW22*ey}Ne4mW|H}
z&q>V8O4lLf_t+5MO#`}E0|y|6xaI22MEZr7-mI=E>u9g%%n<_7ip-|?3vV7yDKjO#
ztmhelATmVI!goDm1Uc79L5Sq%4dMc^13)VY3Q*}qzVGjC!!F;F>vuETy0lddi;Ndd
z#7ng6ddhK?1nz0#%n*#5LRf|%;-pDB8P}DHNu{L(=_)Nra$o^r+QO?UwwE<k*}?^r
zB$<;l2@vwGd)`~oSe#DJ=F-G-yGI7#>-5CyJC1C9^7SjPSoxt3-fW=z)UUU__{uS4
zs5J)w&ZR4z>YDIhe)$tb&iL^BLk~SukXQ7vd+rEEWLhQz!4UV1q5i?)kvK_s>E+kY
zpY1O%tf*^mwJhbiu5WGde}S~z2jaL+z%~OxQ)?Lr2m@4pe)z^4HhlRnztY>=bN5~E
zud1qy#gYW<`#*U2&9`<xvGs*z9ZR?{g29VL|96F1I1))EQ(7s`*``hF2M32=eEGG!
zNTeXY0Ek@2b7h)zHl0ZYLm^jbqMS#UDa7fMJvZO5rL?U4)mL_mO^z?==(y^JYaV~(
z@s%r<w6wRr^UgclUODiwkG<cr13^2ON@k<c2mvhmR3TG<evpkoSiBHSBl^*J($m5)
z7%0w_!x9^B-nd~+XEYkzf8fNCgM(#7MOtS~!zs)UR#cX~bMVmfukAb2J2Rb7=g*yq
z&pU<)R+W^6BH_}?qR!6RRVy0uB8FCJ$H{1^`Y*)K_4W4;OuABs@}h+W(X!(Fx{A`$
zys#Ueor#TPlJl8Z5?w{oUnM9d6^8|vt4lslsdcVps&)6u6(vQ5*=**;9eZ!T?Ha*c
z#$4hcnZ5JCg}n#*(^-dEHgHojK&BaxK*dm#&rHcpPzV}8YlaKSEeIqP`PxFH#W2Q8
zk@J5KGXg-qklG6j5P4M)08QcnjYyi($+)L85=d#_-13N|<I+N{K>;`!Pznrg+MI_i
z-BMpsQ5MK#=0oAUtc2l-$>posuf1tgGBX>>3wm1RFzwH${>7K<d*At0&^A7K|3^w2
zOXIT>Z|vMNGac8GKx+<wOa+4aOJBUJsijO9=5KzzbMJv;_kHX`ZOiJiZrl*u;C3`<
z-2VPsD~h9sj-E0MJ~BGCYxluZCr&msRYsyA*UJiF0Qsdzy37ma5?bU%STOLUN2Ih?
zmMI)J8w}W{C2qdq>Km@#j7&{T%v9DkJoM1dmabTK&s`t3OzJs5yrz2v3P1v_AQ!Jr
zv~X#1FOo<kEz1NT!8rirMWbt1ckkN0_t^2%6&2-yfR%IQLzc~YoN*20{~@K<ba&-P
z^EBeK&p+R_YWaKbzo-A`k*A-3`GGHd%4G1ZZ+&msvep}}yRPs2!2kM(e}4GUZHEsZ
zTD_tx5HNlH0x(X#{Vh?B0-7U@BLM?42sshjwh7F0F|FMca%gI6yWxf#OY$Sz-`q7H
zn=Z~bB9Xwv<aB*gb7fUcBI6E@j%VGh2GezMZa!mh9*LTUt)qFYb7}1r>${`TNH!}C
zL!?uwiHYRtzQJ=n=e2^O!opzCE-%S%X{-!I!fw`4S%;+NOlVS`Oi1Y%+|H4C{5b{z
zfV6gzd~!ne$}83}G)|oENu**M)-5#!*#^tFDkH_yuO667L2-3WR?Cd%7>22VIQsbj
zzEQ*_;K}hha;#uRpgidpHy0X0Ig$3e!3^Lc%r1TM(wgMLngSVToOcv3!I1%wOiR}z
z6BGkS%ZyTKhcUrIVLKEs3}JF^d#+R_x(;#AHXzwpUDQ+`A?^|~<(VgYddusI?*Ht^
zrI2Kzt3BcdpdiKoxoO*4X=L#I@BO6b_)v94*_InN2Q1_q)~;W%tgAXR9rIF|Y}&I;
zbNz<Sn{T<&u#Lk9dw=@VZC78@^?{FEmGveKfyzM}LvB)e*-Udw)t2j4mz5R7W9gyc
ziP4c%eqP?PWvzjr$x%32kRF+);i1+Hb8buvC;B?QT#erM3qeGt36L?ykqhJkly=hD
z6c9uUOaJ``5B<eg{?ZayUtiVI)cE96zkTq>TVH(n)kvhcva(WXZ5V=aa+OD@HGu}r
z1=B?S{mp<2ZV*9Bb5mne-RQ{3TW{|!Eh!BJLY%QcFrZym0C0k!Z7Cp6c@jJkF_tcC
zTC;w6a(3*;KYn8K#x*OKFW>Rf>xT{<|FZ`^9-Er}+Sk5)#hOhYy7T&pk=V1(?6~8W
zYk*vn=R3;ExM?d$3LW393YqpLBtApMw;_`xmDUEDj06W$y3%!1Elca(d*?N!rKKlM
zoEsaTtST=9nF)$)Yi-`Tu0|`b{7mopk%_5vCKF2};>nETQY2EKxe<s4t7=MDcDI(5
z<#B<UlAPJIbE$K^6K8tI=MrfQ3cJ88iCVQ~#fAC#0Xq~=rn1?%DWU-@;5u>7L(kDf
zIUf*21(ZUvK~qIVxV5Dob>zw4yma&R>+++T6Qq+)BBKYVGH)C>Yv&h?rBn0SIc^3t
zX_E`iIAffcAmD_kfB-=wDF(oi2pL0CT6xlSU0*Am%OBB-v_f3GM<A!hV4Sg>%@+VD
zm08roF~*5}QlKKOm>)2J3;}s_B&>lmW)cIfq%gT(-1Kv-g#ji<gM)1tCg%(YxoHSy
zsdPz!)!o?`3ivk0#^CT+BI|wezkMRFIH<t$W8fKb$f;z3v;-jOIMdV9G9yo%89sgD
zWWcaWipqnbP+mB+`I?Oljdk<sxr|JH@eB7xqEW}?fA>HBwXiVq+0TB=3J`M15C!sd
zMt=Fv|Mm3gftKdlaMWm9(OzCuwEfL}H8mxl`uwLry8V5_+kW>}Q^S%-BuLuT0KX41
z!poBL{>XudTI>A$e8V)ER?<_yeC+W(yLXqDl^!~L%*oQ<{LNREHn;uwCtGj7<)&2H
zRi4gfq-pTWeL@$SZFJEIoHUh{l{Pgu?b~;tuYb_<WN}d;5HW_Ctdn(J!TcU5CFc{x
z1qJC;ngLFaPj0?uv*7&k$G4W06utMJyT0}HZ*$ZBv;TH)ZA)o+S>f~B-dekUX<>QY
z?|!>8mCn{wR%+>?VjKhq?yuTukqVaEHq%AvIsyUt^jz0-TH710-n6>4rS5Fcxija7
z3-b$Go7=|6XUWyw9Ua+ZGCn^e9VeBXpO~1Ko|<#AIuytYM~ebhpsA^D`O21#rOjHA
z)-vNH<MCwwz<BTZk;$n{UND$f5G^k+iiXXKvH}i<lT5|u6O0E1w-^(CF^5QNBEf?I
zOsd2+n>W~2<ox;3Gd;Z@yz?3a2^u`9O*^!G*O7VGNjf+_InQm2386`|1sVq|)HxQu
zF7U4j5l}0o{Empf$jcSRes9GCkjr*smsT1P7J}`Ga`PKQKdR-Dl_c>B3lRiE&X_PP
zQwW<ggZZyc8pzY&D9<4!88N1nRLWo~V(a$C(wfo`lG2K$QgUc)?C!hYzjRe=%9%$2
z01Qc791I8y#<Y?Qv7=*2XG^1PsmaN?H{N=ur>D;{0%a97O3RA6^404)x>hxnRTOa%
zdi3FEjvl}8+0T5ay`v$XoHk74$duGCyztubqZi7{i>|tAEf<(cWPkkQUk?q<aX~=~
z%F9ZB{F7h4w*82c&93S0)R6uI-D^&X@n6D>h&bo2>k=r}aaOJEuB)!9sjci>wd#pq
zY}<6rRS{-~LV0_39lGU~oBsaqzIEc*DK|rnjkODrF_$rnw9dgyDJ6vP<IihbnrbR4
zq?AuR{X7>U8i@o0wr}8)GeY4^2;n%cVHnGnb%uh$k->r2-`scS9XC~!mb~)vi(Orv
zYt}7yv-5cck+o|(ii%3IY4*);{djnAw6C`}8jO?_l``Lw3Ua#=|Cd8{Q3af<PXQqV
zr6hqeO)j{{nNw0$xM|b6#)j%+CwoqxI~@&0xF^Skhw?&!+i$t4p|&cWPAzF`?(Z9#
znTd^#%p~L4Xe3W*HypJ}%c9+@yUNR=fdChVR$9%^W+tcRj-9wLFf>IVii--1ilTKj
zW!07C`T3EI=Q*w`rRx`OeXfP)p;S&qMP5gHyI|obp8D<PD?5vegGgLU3Bac2vpWwS
z@kHV1%)B(v3Pk|Gv@GALG^agTbX(7jCjPdGk=9x%&y%oN2mgP988Y;n>EIy>KZ}|%
z-+>ZHYu|yAR~Uq7Xst*&{@XFQA-KU%WXY8pqyy3e&((}G)LJ`^_H<)qq@}*l6cRK@
zi9P+}Z5^$Da_^m~%&f417%&h>24?_33_vhWObBk6cF;*?@{979t?20LTAE46&z|ku
z@%sLO^P@$Twc$uKTo~p8gc&@3<lMji@aY?_TYJl`8<frn6Qy*uCM34Jb6In9RcA+2
zd3^&aYv-Fse)+_k)s@Bb$;6(6Cs%bfkB=p0XQ#jNSASs#v?J$C!&FK#0Kpk&2wDrl
zq$l6Coqy?rev?fIp~*E2K}v^$c2#A$avY`fFCTw?c6#F3XP^J{1NWXheu|X3{q{S4
z^rOcaQ>V_HUEa0Ib6hk`Qp$B*LkOuf`k8l(A)@Pgj4=UV7$O`BFKut@Ie($Ae{f=A
zs&UmyN~eLyG)+><^JFv{&Zg7AKuNctFu!|MM_p|-Lp>i)4)l$0x^naM*feTgTvig!
zFMsNn&mB2(sxUu%;llWaHLHq>%LH)4GSCWWPkCAi12rkv%Lrkbrj^Y~A-Lc|DNULf
zN1s<l%JVhq1XNK`dhN9v8yjm~CpFUBhoGisCI|Wl6Un61x~ZYw;2<~~9hp3Q^i2Q2
zC?GdX3plp~*3_3T?`&AIq&^ffJ?Xh#R$+8tboPATXy3q?lqdu*EzK*dEGRC`3xy5W
zOJ%bO0z?!_f#WEtQXAK=3WxH0FO2r~4Q{@2C89pxGnh;zL%~qbz+~@eBJQz?>7<B;
zeS<1wzH?-*d3c!=a{*?cQERQF^zF|U2Sfn!_iUG%3H$Z>g&h}MtbZ&lS1$62!QYhl
zD@X+ZyxJ6qT*-`=k=k>8v~pkwnD!i%0hM#3Gq`CG19W9svC+M(t|%&G)(He7L*tW4
zC-aF<e>9wDlTge+0z~2r7;5F)fjSxa!t<~G=E;{z@`@{}>OAR)fN9&%wP|&GQ++0t
zIezlQ>#rXg9v+F<W?e&bd?xcx-}sM6*!=S^JrE2Lp(aK`m|6m9Gz~L0oBqLnJer!7
zh0&_7ee(xRO(oy@&i`m@ttu`I-F(xQO`A834Nn2+>Y8HH^ycHKP#`Ec&tx)Mli)%t
zErjruOaBSX7Wz(pz=uzk$4oW@pc@<N+FKhD^^G@PTUk^2v&Vn_sZZYLdftT#z3;v4
zmVf!qV_UA-U>R0#Pw&&uzOa77`kCqJP$&q9dLi0z@r7u?6|AYTzNWhB*ol(|cI^pT
zR$)P*^gJi)1S}H?v?fCBkDj4$0Dz2e7?k(oOK-frea{Oo>^X7l^i><Wbq2osy$3s%
zH2$w|{Ot`_Zm4c(dF7>7fB55vw{3eJJlWdb&II@KJ;LE|JdrZE&6y>opVJ41A$(Re
zA~50zoCtuCVR6?@msb@p>ug@Ov@PqV$ET)ZiA*}3V#plF%cSB!G%+zV7fX$dPVL!$
zaAb6zk<Ae-Qy3-|mFF$(Z0cIkTv8HFyD37M&1U2A?8)OJgCnEKl-8gtD)K8Tii?U0
zii!$}bZmYW02$-O#laQJ+QXs3XP<wiwx+bby#a{7_WCZ%7H7`)T^O2~&4`!_p22|$
z2FU${JwH1NkXVjka<R{ygBfV0lu|xrCI_<|Uk7ryT0kG-r9``nTejRcF6fN?ok8xY
zoU0u2I-4_Y0D$%s5^$2B0dw?Z0#HD}ka5#wEMo`^SZaA&U1MDVXjcepZa#awXYdoB
z{BZk<#;lt{gG=9+kB|Xr?Fhk9V<xShdv5!&W5e6GAL{ApX=tzHoC(uNr;-)5RU0<1
zt0*a)o0vI%{PeEfho*+7wr}5m`s~nWK66(`ceC=6gg}5o7*19r3Bj#@_@6%<9GX9N
z{M<{gzJ|>GtN;Fq!XhdyDS7p^eW%WxDK02_<gs7A_WJ&GYNoZdDH1ML9=Z-`ZHx>}
z1_RMhD9_2d$o>nMU2@O@krg;6KrNLjF3zi{DGEmed-v@wsVHC4*6_7&e)ltf`aoS{
z>)u_vZoc6rM(peV{QWO{>GQTQCMPBfit>p_`8(;0-2aP*<GO&@+S1gybjk7KCwJ}M
zYY5TM(&T2H*nB)33cBDa(9B=cXi{FLytMS%Yc`sO-QL!^Wy{9m>hkTcy#4C-qhI{;
zy#e6_L*cLf)3;yS@y3ef%NiQ0UwmcP<kW2U>J_f*A)`#z2?ZjVj7BsOAd{6!Q7{mc
zN-o?<3yu~5bMx_VB&@WON?IYK>&gwSEsaEQ_;}Cs?EKu^techwGX=NWmMjSbLMKiS
zojN;o>U3XhdQM3mutT<Cl9G`~pslTT<?^PQ@;sAi>831;d#)NC9Y1?+C^nZs5M^a0
z1qG4XnzEYeN>8R^u{mL~4Qspm`=?)j``{h7T`7bZ7?_!unEuoQADNzwoxU)Vl);Ha
z#^WL<8)cm3_MylY5%LEx)1D?Gtu$%nFaIus*&n?be(%P3*M~J+G8yvbaKy4K&J896
zV+@%9?HR(d4KrX0Axv(V!ZHC|2Fetwy|K2jzC^ll!AMJXqGw>^rtX_>-;(xX%n%^N
z!upmFCFi~-j$20P>P^?AW7*!`{>t*oTkhN-3`;6Bge^S}DP7l4xTd3{y|E@XGr4Qe
z+5W-F+uw8JogcVyJ~nFjm3d$@v++nM&*0{hPyKGsu2ZHFL2!`4jaxR|a_iOHfIWLo
zJpJ5TBcr2RuDixI!kKjP{qK8kZEej!@7T!jY;}F>+i&ds>NkFJ?8vETsGzL82>H9v
z6#vL4o6A}N0Hr;~DG)Fn*9nA~9kB`u^BU@_d;9x?!9e%=?r;3#w?FW{JM)Um{^oD~
z{%imHe<U5}=a2q;?YgzVH3AC8FSUu*mz0csDv8z_5Zjluwzs$L-+$<h*WWS?(c0OO
zP9!x~;4>%zl~#gr&vk`K%}eSVn_40T!E84DKfm_f?$yg~xn*M{U-VuWeE889@4xrM
z_dW2@72T_XcIeknKY#s}t4tFWDbARbV4LCHdk)Xd#cHZ6gP~wNkrbRmjw<6*t`Pu(
z!C)ric%DMe?0kD}ey*^fc<rVuue)+%CX*Q&8k(M%iOtD)GBX>C#S*Eaq9S3~*{qzM
zj1TmWpE`44YI2@29ts78Fd`wlv8Hm>vgVG~+H58zU71N|NSmXhv;70(6O&V>38AoA
zR1_>L&#$kmuB$06Evb6?+3gi&MO|IZwi$Y2>x*~Z@t$y46c!d-7@8lMb*EE~2wO}8
zU$l<&BcO1RmiPNGBc-(>trU@F|G&aa`?&SXl7M_gUeI75kc7`P6^3Ei!Ze9<4knUP
zYF<gHJRu!b8jf7Gwk9Ofh7#oRiRn4T@l&6@E2HCfIEXAqj?M87ko_Op-ZQ+e;#?b^
zvfA!dWlLMV_byvDuGq!}V|oo>AoM`WNpjN8$;nCQB%uTndJDDzV`ISJ-g}puTqIe&
z*WFi}nfJ%qlI4VaIp6zT-(35bw6)jPT651l^E~%+->Rl#jvo(1L`RYm1)DeT9vB$7
z`KBf5S($+`<qyAoB|NTWX68Vk1A#Ds`qEPBr_WHC#tGVEkKGQDED0h4W<j!#4FrGt
z>(|blY<Al{Z@>E?BM3qkjuEq!|K%@#GCVw}BH_h9zSG$q`RPyYFD_0l$jVAjN^fs%
z^{4s%`{#fB^2-AfCYLTW_xFs1M?z<gwC>+~a@K-HgleJ%YLrj_5rY6=4Pe3mVUPer
zU5OEBgi(w!%9s(h0YVr;km^)dG!8)y0iVy4ot@IrcB$#Y#TDPY@4tTd{U;xPATimq
z=Ka-67S2!h`yYAa$4i#p!0{r}NHiSfG1fH|U`7Eo7<2#u!-5bngIve*^0I2GD>+_#
z<<D<=JU*w@Dq&8EDm*80JTGe+6gi3zVT3@HB3-ly{lh&Cvnn#OeMm(6_Z>dh)ck|*
zJw~+{FG>SlBU?5eT{^$P>EdKME?M|cK&Bf1{Bv&}*?VNmSNjqjUVnN951=e7X34Cn
znh`VuMj;>^20RBaVnk;G;vghU3z;mietOBAd9}fCq^+l~qiZ-C;i!%)N=pF?7Ud>o
zrg~#?^h$eMYkM2wV9!9WLS>ue0su-*lgnwTt*P|;yjC+WtD`oTEf9`&^aL-pjI?)#
zRU&!4eyfQld#wY5y#UCS<pnXBg#z^arM7$SSvVHz9URjRpY3hy>le+C$swz(C0RK$
zh*_|T0fR*2MP5Ld$rM2z^SlORga~4gsfcNWYC0o20+7deif-#Q-C|%ucVIG7M3aW5
zQ#?umrIUg+6Xj_J07MYsOo1na>O@mDS(Rmm5dnw*NEy>~U85=`Dg#JYHHQtA<)`^P
zNW@fCh^n!smaYd@-khHANBl&~Fq}eR0uTe!<qKW^{a-J%Hgz36c>3^>Mu7vT&z&9(
zj6}yHyLO&9cC4xK)ETQ?^ra?>f({YD0xl`es-ISrkme+6RM*(6fBCq#tLI8f*NNko
zFhY0Te{XJ@FF2-lboKHA=W=<I6Wv*b1+TyK#>vLEWlOHR`L?;T61H01@4m6>)6Wl7
zRi$tc=`8Ziryra(vobd`Wq4?8d@Nvd+Ztw8nk-1x4IOEO7y^JXq{X{t;)h`b7>?)R
zuKsURWAw>ok5NjjHp}emu3P)J)%kguHFee99UT`hU0Sky*$3~fPD}MQUu^#1gLR7+
zT`!p}r%s%9Ib2wT%n+}dn)rl9FCk@sK?EEwPln$=G~e4yPyhfR07*naR5Wt_+}S`d
zl$M%`IIO5DKu{wD#c5Rx0H&#G!?c<dU!ttUc!-IH_U}J^!@{{Xw^JF9Zri$VaH#LL
zdvDZ8P&6Z=5w|mC=a>5r?K^eT(i;*y-p@Af+`Idb*&-E`7O2tiL_?<Wjle`d5rB+~
z{{k{XbjEa(iLakg+fZ9&vsqi)dpkOMC?(VDst+DMB*%tRQ{7cng&wz~q_|iTZF_c|
z>ggG>SS<qs{Z6+Bi(*QuFF!xEs5ryvwS}V*h_Ec{eFI~cTRU3YIsu`SB2R)VJ;TR|
z$mwu@wC;<N;<U=DywTuDQ_DbOQ|HKVFe}5le160I%ctMGuzty$ngtD2WrZ0o8y5-m
zhDJts1R=nL#-YF%q7)fo1Pm}EJ$Utrex0~0x>{%b`e8W7#9x!21_6K&r(h03$N<oY
zMpQ-_Aq*12G@{8Q3?Sn$&mj&2y(q_1lH;*kU^o&(m~U>oGJQtP^*1e2)EF;v^y_v{
z4mp4S>pzbSDxK}a-Cg}vWhKQ0Sv~zdi*A@bXWqR0%#4xY@#7~t+-`GKbtxCO!zR2y
zF-J5xX12Hv9XPjY)t2&-;=20!NH}`yikp*N?vyk?k@3-EXB`e#chA7#<HtN!b6Z;n
zf^_9Ww_6>&$O~U?*tucDz7;o3zu}g}wGEXeB^j8Pbr4NVam|@OD=$04m+C1g&!dd!
zM8^mrqwxp=ij=r$8<=cqLueuk^3MiBNLExy6d7ZIK)AlXIx8!KG5Y@dtM0n<7EO+P
z`0>Uc{oD65($lx?*tulMl9&Jd+UFbhEWKeN<`D!F?nD!d6pZ%)PzH2?=R(1t$t0zv
zrDW%1_Vo50K6-q3Xe2Q?!R~ZMLSd`LqG`Huy5o6XQB}qmhdE4<$CEtV-@9?+COxWb
z-?3-=_5(Mrm{&W!II0BARw)|PwGe#&?F~+=^Ls!2Ze?llyoK|R9XWQXrFq`m8AMkQ
zG71xu>xj`jg{HE}Fh+tX>N<&q19rPqURgA6R=v$`K6AGD+=cV0N&b{XS9)5iARxQV
z+;sjjk1U^jw2uNUD?6iqV0fT^oDw9NMbV7yE|WhqIXlO1vhcDRL6|D4HaaR_X&LD1
z9f`yUL;@$6Wm((4`_y-zen3`7dWVAtj<=jT)4gDJ=^aa^RpdA=U<9dSCZtJNcSxu-
zFQcZcAUi!NG(I*uI>G>^05OOOfP_+@=|+zQMpp$X{wd7<bpdD!6Y`pTHNfde=LLb|
z1qL~Qk*a7+r@F4_x<)YLF)?F{Bp{EIO|QyHa6qQ(5Ocl#!;DAYeEdO%DdM5d$Q1d5
ztK;>TJ~)52ji>-YF~Mp5k6-@#wA#X&>VopRI-uyT#Iz&(PmGTbJoUsQ$^I0D@o&8L
zURGv~$t3YSM|2?^06+Y}D`rW0_`z=^CMRU3``2&yJUz`1G5FI9uZWWLi{Jb-J=JQq
zu$2$qF?-g`x|-7T9FMGoqY?eN=ibDOI_wGM#l^e`%?>FX8|NfQC>5}zMCn`aebUk1
zTV7fPAVv^iKp|v^A_{rHcog^UGRR5fUl!R2A(AM@WEo>@b-IQJhD3>1Ri&h?$eWb#
z%3t1o_B)S4%AGuQIyF7BASZAAr(a5<l#^ND_Sk^Y7X}byhR+dz08(o7vyhk^wcD%!
z0!`CZRn16GOHcDFiu%PDn*@wA()_BTTz$*{P)Y@!1BQS$rDf&CZijW(?%ln;{kJS%
zxb*hL8j6^$LM$R%1=sNd=RaMyudceJsyq*Hyu?fCsi|u}+di|Q+~sx{=|?a@9-6oU
zoP-%;Kv7hp6VYsf5U8pQ05M4@zbJRv%{MsAmd)Gu4E6<;n93uG=cMF><Zv*Ym*XE8
z87(f%k4Ck%pKkB%8xKY_hB>RtVYZmOiSELJtor)0M6Wv*jsT|WK<pm~x3&+pT<PxX
z4ei{0s=PF3>C)LlBc1KNp{;uw^K<-<+_}if1+6fIArUdJMwClUZAXtaN`mA|N=iv`
zlow}dveMDn$$-QFM*!3rg&F~dh(AVC@8SO)%rNE*4+(@Zog%*j7{l2JU<^5)7dW0U
zol-6CrNaP_fQWcZb+e#Wm*gZT2tW<1D%BW1bE)&mr&oG?2@Dg%4KA*92LS+pPznGW
z930%fY5&MTOyo=mlV_iOAiFFTqv-ZsyH~CHOhBfCyN?_?d=eqtc={9s`o7%<H*9Py
z$n$0AWibL29sTN;FUMk9I2b*2WWUWUZQHry$cgiN5A2>Xt)jcDYw6P2RkekMMZVga
ze8yA^k<}(BdQhYKx=%JYo$C>xxql$AdHe2AIA(Xc+#V+dM3IS!cfRw^`qQVcw6*tb
z-+6@SG%r7mLxkg`jbH5Cz58r>YL3I^;t(Q4=Q+Tra+MbNPlmx4!3Y5WR80{ifdXns
zGjIq<CY+a@H8>pD@c9>yKK5|q@kYkjkAL#Bf&QVN{^Acib{{It&v(1MA}=;Jo=Zqb
zRALH35CA4{Jb+BoHA(;gjOPT#7{_s5ucx%A@YKmuXU?2Q0Hmh)R8@=Xv;hDazz`Cu
zGpJ%rQvFHu=gwNPcwRwaCg4>KX&5k0=QvB^^S^)1;V`S3_Swb_Jmy-jw7v1}+o`FE
zOO`C)Fy;h48i`<z({&vJ$n%_0NSriHGRjAkQXXSK5rQ0mfHDmNO+b21j{lBZ7AJVE
zO_#2mXuQyLzO%EVzpcHCN9fiSi$kGsTYK;RLl-)G2d;FEcJ+>R^$Zb>+3gOKSu~l&
zjP#`0GwTu)-71UnCZwpbNLUR70wW{J!z*tDEEI{!+YVmn=pB6Gfm_UE+`*|BC>rD_
z<HHep=wwqctVm{yKP{D!s9gdXseXv0*7hF6o5v$z#3Q5{Y1^w^@c$1m1N16gm`(J3
zUUPVx2ow$5XhtccIs+6Uj7#l+!-m%ign)^XNf0Dn5IK>DSZ7fp0g~huN(z#BtU(4T
z6HcAIc*D{;^)u^qtW#vvfDG*c2qB=1au@*yEEdb$>9hN~1}?Sr+;Y>Lg-fbqvHq5}
zw%`8o^U<NuiQ}hRFSk;HAb`Vx@SHg{3m48PE=-z!U41k(%9z&E)qCj3>E6CDj~IjC
z)>{|Moj=`Tf(z$QFRv~sEGWFv)@n9kr&9_=0=C4&ts8fYjR*Z{NrGUiuB=E+NbKwB
z?;RZGdH(S63$f_<oZ0o1=`M%o^s!58)@-y&9$iJ_!Ejw|QDtQoMWC;J_{HbfUv6pN
zxpRLgs3s*OyBzjNB!VEs@eJz!Y7l4?HyMLW5;<L0)BGu8fw9ry!HV)C$!dP_#g`v`
z_E`{({P%C3d;7h&>guQc`d2UCc*Fdz-oZ~k`TY7hb0o=3C>13MAt=iVLU@8p11H<}
z5d&2fWxj-j-rl~Gjb{Z8+wFFfC_(@X!%c<&MH)kz@rM*L1{DG|3Uvu{m<b2AA6ob6
z;b*^n|NZyhaq86hP22XKJAc+}L61K2KvGKTtFOM_*4|cGQ93ybbwX54=eWOjI*0L&
zOhZl4=vbi$696>^W4VRNGiTMNruauk1D)MHfby{@*}7w&%VKSAX)DOfwOZW0gJb8K
zt_%!~$T39_%%M;i0H!K24#Tw6#JcN>($d`ytJ&?cRhH)FW|^*=QPe-ssT0drd(J|D
zZ<tkJg;AiAm`Y7{yQYIvr!RMQc3Z6WmiAV&O-T1SsS-hmrKF}dU+x|nj{t;qs-r2w
z4*wEnaH0qXz*QE=-;H=>CeA)FJ`F(#ah1mnm_n%v7~~KXcn(2mxD3m(id2xE<Sxle
zvDzR+l*iVVD}9{6Kk>b%LUIs_h)(DRPr__cm6hi?1Z^LE{Ds{vJoM=8b}!=1KqENO
z;~DLX=(0iyKv0M&v8sx^2OqeNlW0a}x~`~Zi-ng=35iMbuA8-g-{HP4WyMW1u3u1R
zl0bfbdRkf{BkCs~ZF}SGE#b&WadCmyop9x1$8Uf4&gN~6qKL9`GAU7Vvy<k}u5r1f
zrpuQlNqX{$`@IP!RS%DkjBNa3Yx9K>gb9GU*X#Jn&mN1(!y?A-z4cXh$2fsh(?H{y
zmIDV5X&TMXFS6NOx~~0i<PVHNA*FD_ZH6&fi6I2d7RhQ6M3EOnZs+b}nMv-})^?A_
z_0scy>1^o+R9(7w*?aGPuz11sDapQrhmNoMXw~$(X>g)Y3IGHQ#i{=Q001yTR3kjX
zX=(oa!o0KRn)dBKWHL!S&znpVgiu9@A;us95bFd31}M+~rU)=hAywE%pKKJ(@cxJI
z#3BF+-+1oiZ+`K^n^r7N%S`R>8GP-{b%_a%`i2@xv`8#wk|fC_VT}G^f<c4~fRPF7
zl=u$;Boq*hQHW7?R_fgOGm?`MdwTkMhX(X8tEs5)dR+|Z0K>G*G`HJ666kAf>xqUV
zHj9IUI2??o`jP>of?3SSNGU2zFUU(|WIQ3k6pIEGnT`heoqNw`W_oH0oq{G`X&c;g
zwCTcy%b`(auy-8loX?v$Iy!pm^7*P9<}lQBg~tK~rW2<xLeZoV6|rlytN%a4Y_fHl
zL4?306d=SIJg>$ySq6%ts8r=R6QcwY8R!a;f!z!$3NwoHl64Y;0EQ!Kb9djr|MXj!
zqk=^wkbnsSE(I7s03kJ8iZJ5k7=8QowZ|J<p83uLMb+6cC7@}<W^)zf6b1U^Gv}K`
z-i$Hk1#V=#U*OHDDajHqB8Zuec5FFd7Mv%JpV_?ictyGYiKp+^SxB^UI?<S5zIeXn
z)z{X0+}8W<zB8}1jB4=rzk79PAd;5m`o{gYnr#+E4gw@oK#HoX=FVzBK$te8R*3~H
zCTw*$it_Sp4ry?BG#HBh;eVbnnJJICv!^@Wdix81s{i-D{wc;<V7xmRQcpLwY}&XN
zYC@XdFG?aX2r<lv58>2E;~JPv+!JUtGgB&wVmJ~rStMTI6<J=oc)rDI85kM_fIa@b
zA9zgWnwsj-aOmiv6AwJ}z+m6NkN)%ZAN=4+m)#Z)hd2&lXxKd&GuY6nr##{SWsCui
z=XFXl($k8I3bt<B+SfOzs+!m9#Q;IZFhsh>0N^PEI$!_+#2_I|QT3tG(b{QM870}V
zSdc3GmzxeOm{;%dI3VUe-LPeFaP;vfR}xiaI`_!q|5;p^ZnK#&LWD2?DC9VeY6v65
zFa#WfkV0+3avef|0fI)dgaU!bm@rjVL-|D+OP0+`^*M$IBL|M07#JPS%FOVmC7(HW
z4gykHQeu{vqK@U|W=N8$r)N0TpUInSiVhirlEgXeVor|FZZQD{DynB}J96pZ(F@aS
zaw`jxy;gJoVEA%JKPI|aunL^0$b{#4o<}A5g`#Mtah5c)I+Hf<I!-xGV-t%QphnNe
z1m3=WJ&miCKmY)sj82e)uc78m!p$g`#kVy8a3(e*-lX$<Oh*dgRbAx(vI?R@G65iG
zq<IPp5&@8n+t=0CwczI2CDV#1rkbvxiAym68HNB+1~mpKBS;dR#}7AsxMu6(B{LS@
z+z{2nj9?x}qKO|G=zRONk9bTWMk<M50Yqflc&2sFu9GGXC;GgH_8t4fbL$dZZj)#Z
zg-2GbSeRFo8dJv!QxO!k2>;5TKN{$d=|lxgPI5bUZri_i-;qcFKJw_TRdu;Q1C&ug
z6oO&W+dZ0?ne)-=4ZC;j;~~y2sZfJ4z@wt7{F>^LvLatmS%RWQiR^gg<@LdE=tn<Z
znVck6Rb|!HmrDo@4UUIHT5D_f?p?<fndIi?W5f}{1dd0D5iJI$XhlpuCuDSVF=*(m
zAcS>75yrYk38fGthya5mEyLG0)brVgA4Ma<+1Jnb!|(p|-DkczJT&yX-@Wj==YICr
zmtHL`DssD>nyMg#8DSU-$S9LT1|id_P630M*BNAxGR7c6WhJE<8R=tVW4m_mH8Ys#
z^iY*a7OSGhAOe8Hlp)Fxg$VLEuP8e;JrU?KhY(fhzJmw7UT0xJac}p)sx|9Ni?U|V
zsFy_B>eZXhoxSqNLw7UCwr<*$om)&vOf=hMRYnj%DrzdwfNs#U;*I*oAtkO(qe~*M
z>pDb`Qcb7P)O64FOO|A1`A5b^_8vOfe5qq*ea%ga7DJ+oSkBE()b-F<AoRuN-TRK5
zb$Syhpq|8}KsW{ngOu7GF1sf=iY%|L`f{*;{JNUF%tVhI3SVh&3kJhW7tIqaBIQ`m
zNZ(y|-M;U@@#dDE!J&ZN<w#6QjLDkW;rVLc{*a~-WX2Oor+5R!1gHFKhmis?`ncIu
z8u8Tureqq8688lA1maA@5C<4wL?aYpUDYU6AO@I2E~lxyIK$}_2vvEWZ}0ALdR({M
zwLGRN7(oE0NE{<Zu?zu$kU<@qM8{Ci*xPTe!a(@;vkzGv0t7@t5@d*~GRHwo!NB0q
zcre<~P_=aNf}!D|a5yR;yyxIahn2$|R<+P$Pd}btoKaU*GCnwFcbVKCiyV$vohe^_
zyleZ`L!#t_kX~x(92@V=%}rA^IU^(Co_lU)l$<@=mYn3ryy>ME-(I(2tHVSuTx@CY
z=x#iH;o|9wDJlMhM2|wE4x8jpcE@6}#hmcTCp$m=;?Vu~E|`6N4J1U4=}Ac`MFn})
z6-6AU_w;o~W6G)1O$QGg7kMr>GnYd!CWk~5Pp3STDa+y2F_q*o(IW_B(U{d@iN@so
zyqwCilJd&pvuDrhx>{UX@cc_JfB(ndvkT(tk9XX2-`(rhe%94FSddpB3If0|PQr}4
zM;bv10+3M_=WH1q*%V)LYD!9L^Oa3oxB60iR;vXg1QFCJ1%#rB?4iMrH3$<{i|u6N
z39HRiTUWh#>-Iy3n!ok*gUM-09amak{>z%1md>rOuHL`r@H_8q6reEBJB*Q(oa~DR
z!y=M+lNqp>vE@!7`%T^%1|cGZOx^i|;{!Rlsk3L*)l`)zN_5M%L%a7L@9Mge=<)!@
z7{$Tym{oEP4-RkLwsUl3OfuO;(du%00pWrXqA|;78}|WS92xGeD9p-BcL_+z_NNu)
z<nsdT?CBOIAu}_*?)rJBj~(gn?~BR-heOOSEsRED;}NiR|Iw(<GbjS4Pcq%E2^#;&
zZg%xaPCVsn-!i2KbPB5&0D$xCB0_{QMbilZJQM^?l?l}WRw|2A{eFk8M|d8M1cE_1
zeD}R~x>CG6k5pANtcE9`%Lq~+Lx>8Pnjkg5|N6%l&b55w&fAM>N{AL)^}*WH$1eC2
z{dT9F!=SjjxU4uIB6j`tv+5VjgDN@Mcyc@-*Hq^|xbn`z!dy|1qTx_tqVu&^-}+?T
zuHm7+;-Va@)pq(=(+7XsKs0l5iZd7uq^Eg*{`;S0r6$%^mm`QXGIOr9_5bGgFE=$^
zhy){_Z#*z_dij0#-!`qG-eEC~jRh`V?y%YU(((cdR0L!WQ4U!<t^{6veN|Rw(zl+z
z8?aC~hJNvjmzj#wa?;&yzP_QnxFEf^cZ6s(6b_v{aqiH8Qyj$UnSKZeKwks1snS>1
zhVXH2mr0UhvLcCss;L%}7>$LKlRSBaS(`R}Ra%mtlj-N|&a)@Z_4f>)IB{v#jG1<q
z`?){<skks#5~ay$z~V6sVgOP`jH}7A%yFF2RgjUER#I9V4u@BNyxwfJIGqlQ$rL|1
zO?=8#yA!I_)|R+EE{nx{vAMOSy=T!4bChWGi_gC5>gxXX(@%*e+ed5G4-Z8!q!%x=
ztlzM^ASXS|=VMH2JbZHV)~$s_1soQxt+P*@D*>3405gU=!7R&TF(qO#i!&SQ>uSnI
z#|GQmyL!6&7{wgm$A&`^7JTjmiy*YObsai-;_SKBvC**EY)?qe+P3q^tFM3Pu_tzR
z4P1YHU2=kiVGL4=5sw9QxwWOZxIna7`r5Bxz#Mjq(;*Fw^jx~slAe`&=tS$m<5wte
z(;;LNLc$DCgz*2LFmsp%9zldD6m$v!hdB%Y(hG9Z3bPzm3x-frH2r*Y>yqV5N@~g!
zHL6nrAw&p62y~q=26zrL29z+|yYoa*QNzi7XTSV>TP&i5!;x4tG&(-E_M^=g&vl<V
zb}k%_WM*gZ9JRT<Jm&WuJnHj$-gs+uC>RmU;<ui@CneVxiG_dvhZi?)KAMzZ4~5ms
zt!)c$n3bNBf;e#G_{p97nr~Y%_nBuND9B4MD=A1z@^F&Se5vivue`Hu>%rZ-j*Sk-
zmflcv!@^l}XUuZh6Vfv>btP6(k~_1Z)N0eOn^om-Sr~*wlQl&%iN5Ebf3LlB=$R+)
zNlkN#ChmiGzB+QW>DbA$J9Zopc$!<7<8pgv&6-wUS2@trGddI*AB~<lcX88}!?iV~
z7P~mPab49FWY>uOPYh~E@dF49+Y~}6gizID9FGamIUZ)`WaZ{%1IPyZ`VZ`Hyl&=o
zkw_#zzwnRG|LM-#Ziz%A>ptDYb9{DIrmAT~*CFEVHfJaj!CZX369s`XMhIbyVT?GQ
zbGcm=<)y=;!|T?6L3AxYH;3ptVgN%(DPfdhqj8++lEq}VS~(6|ESBb$OB+7lbNJAq
z(`VWn>M9p4Uw&lo{`FsMd-{pHAAIPZqTI~wyLSUXODe10`|FxDA8$)aN~o`|mRz2F
zyY`zc7Lz1RPCJO;KQ1_`5(W?mJje5hG2(VxW;9eSy8b#w@PR|82D(SQZhL5aTnUFQ
zf@rmv6Woa^g{K;u_Ut~`bne2ot$Pqc<>fVJFJCGu&&@3G4GnZT9S%()HizlLr6#}M
zKRPmW{KTokyzHE;G_S|1GY#@mUSai1Z+#TdkW4V(Fkre-r8HW={?{;@1Q?rYXHO}`
zn1c{eO5=4#2pC|LQS1|_#Bm}o04xE_LBOaU%JAE&i?dx8h#=94);lzootLv@`630#
z2*+bZ5HA)n2q9t!$ifHje!k{|Jtq&I+P!;!FdVj60D(+0@z-BJ&tbB)HMb3qggX2B
zSKPdalTbJid;7h$`wyO<J+m$=J$+<2SXG_1Y{eX13w`|Yx??AMX3wm?@0$--l;$)v
zl$6yLXf$H>*iusx7tX8j`Q3@hPRVM2;l)=tEGBuqzxwS<p&*Gxct()Jf&cA$-!O^%
z#ip)5zVJq1I8<Dg&GWjfjMdI4b-FF%fdDT^h(Wu>vwM5vCmVJwoL9Tz=D7%iu8#hf
z|GG}%ZK|ed8a!~|V#}qA4x2qG#qLS5&8~0oCuQwFcuXgJO1kUDn-&ldn`nIa`^J`k
z7)CCRfeC^DjGx^IgTz?&5QY#j1{l!^0{Dhy3)X(J?(Dh7yYIYh+QPX!VGVT+yZ0XI
z?;lD`_7R=ft+xJwVY9_N>7p?8(vxV15c-mm%1euf28Z_S*)IuVVuF_uDsUWQz-R-3
z9AJi!2?9xe-|U&wX3whhC;5*aKl76xeakHH|MSAjPN)5`C+^nO@wT?^O*>93TF~Hi
zx!->CBMu7|t7&>eJtX>n|MpMq?JYBBOpE`^6RCy23(OF}5F)@ZgaAMSpazjDnNeMB
z?Si@2g@U8aE$1wf;PX2B`+5b@G&~;W1XEgin%7|ujtr+ICf3!|UFzt%(B6Hef8fz4
zA0)cm)!FHCxg(*_sWX=bhX-v|tHWU_F31-}&SWtqBqgS06}0t7H*7l+A)E?1#KQ?m
zk89nr|2536`SH~U%$OncWC-$1!i+J769@%Bg%B{nYdTXSBTk!8UzVNacS?ZCvK)@Z
zM#jeP`o`Uo)2spoVZ+TMK2Z=tj4`T#%f~z3efJBSWFH+15=NhX^1ife&%p4|Q_nue
zVOm^RGSU~kbh+c{XIEwx_#@$9Od-R=qw{9hPMg(`p6IQusYDp2WcoBETvA+Al%Kt1
z$s#=#5G+*Wq6k4v0ihAa?e-tpfAaYk-dAGLeS1zew{$k1K9}J2NP=l_Frun7Ff#s=
zA3d6u?jjoe)o)(cG}LtYVtSS{Dbelnx~NKGQ4L^(I7~G(*cJK9YaeNv{OxD%cO{yM
zLSKC8gOQ;CV^9+9a#Xh4ombii_8mM`J2Qvlbqu84JC8NDbSOl5^vS!E(w&URQ_sHt
z3TB46#AL{3%)d$gB#f6h8RU4JpPLy84edL$_rV8ltDaW<^B?`^smAl29fOyfTU`#<
zv>DS|F1L)2hf{s26aWVFf4rVf$)sWo1VASwCp$Ae&423jnG>f@n@p13W)nq05=F{r
zT$Km{%4jqeL70jr>`V6M<@yS$^1k}&i~WZiZ@Xnlc8(uQ-0Oc?rE1adeg8YLKw$fh
z!x?F*Hn+K9X6@l4$L3r&eeseTI0Pr;53cs?foqcH29;#uM#ZJqNlXt4B0qClT}?%a
z8XX_#?^(WZ;kF}3TKj_CBSXVuL66gs?n@+c?C`O}t$lsA#N?r1sJCz6_B&R@#>RlA
z>WVTtHYSOth%Eb4Qyg|HV^pUs5Y+^0;^sY#$4+#rSR@=~9L3irF#a!K#@N*Z0sz2>
zJii8JJ}gp=GNeHyDXI)~Qd62)R^UT=1OrY{)r&2c9(dsXwCr>pYEWd5LIjMyRDcYn
z8pd>)zW&1M@zF2<f~Lo2&zg3}%H{cm3H8&e>@GXvQQL*qzpYx|Fr)I8dv6ZLh6I7L
z*_=hC#b+8Dy*9Ho!F&GH>0kZv?Y7pIgamhTQeuiPnNS4@I;2saQH-sBetz|abw@}@
z`1138;qlnT%k5p=LyC;*s_R!id{6D{8DD+2g%Da>opaaSHz7dYd1u{;6D@$k1@o(K
zyJvwUN$<bAc6=n}_9U7uCRtNNX!>yVmZQg-R(|95x@o!5=-8gUC%@Qu3<8QVRaJ%K
zY;p{6JiKm3*|J+_L(GQz!mqsYE+cgOYXATs07*naRH3YHTE*@6EFfGMQGg9y$SKN@
z|EzWiCT;8?n;=Y1n8X>WDF)*`zl;hT14x}Yqta#-!@<yo&$s^Om%sF-WbWFt@9C$W
zc=grSx9&J#lBD$;HqM#dK$v!I;vrsOGZbGCgw%i>13br-RF>yvW;9=J-MM==hq29O
zLjZya+ZKcX$3q4P$3c#x$tf;`R7F*Ejox|JT@Zm&ry4)|Y~Ss--d0pswdR9WSK7LM
z_=9KW&9Bob`N5B$3kFB8pFf)!`kVkv-Oa9rnPJl$KOq_~hIGcu9O8A2xE<!=vb>C>
z#O|Jf=Dy&F9378>@sJz{^b<v~nWS`os?F<`DJSdb+?k7qckRzea+xsiaX2Buk*KU_
zT3u}wA(ZDZg@VbRxM}B+b(;=FF=B$1V!&X8gW{wj<25I%|2@pEk-dQb6lNZTkt6^B
zA&8im=5un_PcPzutf{h2S!+*cd0q94g)=myF-!m>M#l_;lp>~T1ZjXrrZ--E|9n$F
z5|E-rZDv!F+v&7Ro^-d>B`BdNpw_><@OoI&{_O`3OCq(Htw(mBwRw}af4XJe+HKpn
z93ATke)ZLMRZ#|e!-w~r8SjmFoepoZEv5zq0V5#n+;Vv9rUTI+J$dr9rYOEd59W|8
z$9Rqph6hrT9Oq7++JEqvqCr=pJGV5aqpg4S2Rjh5DIomApWH3*r0r7AyYGLw|H#?W
zszSTVX%-ykk6rrkgRk=Q(pRp$6LBaMhR^^0U8wR3RUu-GikimRY&OWr|M8QDB|aoU
z>4o3FKRgf?CGPv*zaI!8$&64uZ})d-LUAgv5%)6;84npYWQgLk3L@jzlmTY6LmAMZ
z)Nqug6ad4-Uf@j<KRDFW(Rul!4>vDgdP7ErFB(>k96kHk)8Fgq=;kqYTHM0}0f)s!
zHG&b7cz~eF7-w)%7@z=9h!|xALO?VM5lZ!^l#~?r^!6P(a!g~?<Fbn;2~wh}8iz2|
z37|luKm|~z(4F9|omQce5EkfL@4v6h%6Fc9DjHQ@eEu(0l|{>zF9J+`>y336&UXIz
zyU*Ap%Wr=Dd^D(}XQoR$uWGsg7(wU0u0fNDkIG?;IE+M9(|GP`sD=<khLsrPu_i!<
zFam_>6fmpTnOTroUX>n=s;zBdRl|{huBd7xDEAKZjs$|KNlEz`X*`RywvO&O*0lX(
z^H@Mh%g#&B%ge~i(EtL1C8DABpzzmEkAAWHctqzQXF&jRfbk4dLoT0D5O*gu(&mUk
zXmooTVh4r>90R~$o=$xkgrB(i3&Int35v6^SR8ve!{I=Pw@4<Q$w_Xhwmd7rZBo@J
zhtcr(cubEy^wcA&E<+v~O%RA-03bjV0)`=yB*(5V_io>QDBYj;<Wmp2y{3V|fr~9|
z{llGQRe6dYwMe#|8+Y#9b8O|x+Y3r_kyYBeW!E46w8rnT>53i*C}X36u8yJcK#(#3
z7@|6CX=^{(ct%zOl~qN$t}>Mfq6I;*t*eXUAmWw({EvUTZdNg+pu4+YmSs`oW;WEC
zC0kGLP<KzyzFh~-o<2V^7SeQO<-^OX>vI8OPNz3H!ISFu%wO1`C~`Cy`{3R6Lj&O_
zpIVubo6LB*r>CvGvwJKMW`OWmB7`Cg1HrM!zj<p(xsNe&WdGT1TMud)T()fPjCoZ^
zAhIfRko$X#fw)TbRd04M!IZihF~V!!d~F;V-{vOF_Yg#yuGiF7=H+E$Xf7)+JaYIz
zMMb$HYcIa^-hchax4j<M>NV@X*tlEQwRC?P#!wJ&BoaeBj_V4=8(1hn6aWlZTyj)Z
zl<e%xq{M{Lk&$D^PgqPQo6X8$j_A6vIa2@uFl<eLPBekX08orjUS@W2RmHm1A75^6
zec*xnJRYYKi@o=^Pja(-x7>AeTl19<*KX<U?c2Hi;F+^cCX+2AEi)Jji#%`iP;wX`
zOegNoHBmGqagvfD<Y4q}TP#9VWmQIcMr&JFBpmWMZ5Bxopb!aZtu5W*NHi-eyJ30-
z;%H~*;Q31fht4(aKXK{Q<@WuJS9Tt`^y!u}8@3&}GSJJ54#Zn@LX4{!rV>{-tI2re
z@3!B`((u=AaR6LZ*1zU0lb;MBfH)aJpfEsUCQ&cW^Jn@U5XulT20-7)$nAHm@cKN6
zhZM01{sCqH8UlJe<NLeD-+J?t@v-Rgn^rU|pOu&GDlE#-X>7rgIoX973{owoez|d1
zx<BpCdv0Zr4D@up@zz@zX{q11|F)8nf`;k!7tS}2j12J{k|dEaPQVrhXeb;_N_EuF
zs8JLZLS%C~t7^*2%L|6adgjintDj$Mv#V*ojNN-rG6sM6{cn1c?8Vi!NA@2Jj>VXY
zVo_ZX1)tyf^mp!!(hz}w5<M$3CBHC@GKI(7zU>FLZaU#{Cr+DIZFTd!pe6e~6_rJq
zIcb4mxw~(G;~61Jc4pE;kK6)KglN*wfBvS$Y_r&e@Bi>InFM(eF%VaE`TNamQh?R4
zO^(0l*G3)x2(yW26@Tiwu0sd~NmLcZ=Svnv5Rrp>_w8RWf9|&J+iPk|bqKd?-ucs?
z{pi%m#{CD6j*kZ@0ja5}3ey>63{eJ+7h{kDh9+TVk|bGHBuVn6BxPr33=9r_`PH^a
zB$AYrXf~S|1G=GE2_b}l0boc5<>qB)rKjpjw5PA{Ow;A;EPp{>-rfU;_Uu3Q=*l~M
z>1nIp|8RIDaPzWdOBXL$w_#gH=fJWXZ{iWhC^A_jMG2eD0;Sr-M7*ZXMp+zMaZ?tf
zMMBdwO-@O5)z=hXzI0KKg>7aF)2Rr}n3tl8+TPQdo|$^v%}d>Gfpa(p#^ozL<DJ8y
z_Mt$_l~4fM2+v7oK~YIeRscfrk45YnwbLmugK^3fKoG?p5-7pwYq;a+D$4#@avwqn
zaVph#jEJfvc}%qxnUbUdpb<v;hK6$svt})tLzouRHO$4e{1`w0Km;hF2xIg6Z++6*
zJftXKC@|!5fXti(yVFuxUYwel5>Ub%M-k<!>t{Jlwq#!tgUp)h%SuX}fBjs$*9P>c
zu4#u49qsEICxr35pc4|6qk?GhCR%^+@6Ql5hB=M^z)3uzF^fZ(y<mD~W|ABW2$F66
z$6JpcZGPs-dy7hvFemTXvG<G54~ZOvR3bVV3r7C*(hr#slWd}<Qve8u2%)msDj~q1
zJ#kKnsy%&uJ9i(Aghtc-X`(0*pr@rJ&b{us1h45zdlSIm(MNB|%t?WazVpV$uFm1!
zp3sxe-tJAdm~DJ85}|}~QyM6)MGl;Z4~^xJ0Kg#oXK(%&FcSnp*K}RiEjA$%8Ta`T
zN=pkiZrYTU>07vB**mYkbN$>|1-Uuzyua?w+g1z>jvhFCbnfig3XM&uxEtTcNOBr#
z3jj<If=!Yr%d#j5DZb?5;)3?J&c@T{OeV?Ua3I5=-H4<nJO2q)Raq3d?Ci|)vH}2M
za$5Q?e)+P)N*;gw@xIR9*WOw)Z&ux1E5G5eyU#W@HC=8$u<zi<>%P2nu{l3C(`v>O
z_hfSCo&qy^^|oA{rvyW&>)N=}VfDFu+c%$*Op;lWpr&IEaRMKbqnEC<A3J(977V7O
zXO@<h`22~1a6}_aa@ed+iy&djh^(rF0*J7&T`<Vt*TF0<tj`!U3^*ABj4&3%So#{6
zO(B9@dnUgYW?3eHiJqEhol#eq=-~l~5voNMl>o48#S*hsl8K5%&X@}jKuQ6J5YZ^d
z_-z~aZr{G2s61nMBr?2kQG?wsi6)7+IvJxB>5S-B-qv=m<IOi$A3Jf{o8V1OOm>@{
zKl|w)cnEz-iEGxZKYZkZ%`B;^4k^(!-D-2o`q;OgdN3nBiBTq5oRm^ojv@>Y)&WyB
zU6Vx9se|orzOivyebJqFE(Ca-7hzxTQ2#)0BpiVd@uDbMW4GV6#O<{XkBvxziD)th
zX*3ptP=pj$l$F&~7KkDp8t!g7-?@9ofw7@jd2x}|CaUsydPc&H%jP(pxW29o5ZKv1
z^3jL8LXmL&jNF^=SinnEp*qGK#vHn~B590pDCV@fc_dgYPEDn<93w<E3*zJ)VpGSp
z==w*PVT>oTScuRFFK~t=T1jz!X=z^fmG)h`58rkB^2^Q5EiKJA-?X&#N*hKnJ1YYU
zkWv64=6Mrf&|!B{0#rrgFh6zm)pQ*q$YDe&MG$3Xq?eWyoj-qZ$F99*vpF@z2N{!N
z3ehy1)dDExFh&S4Kp`Y<x6A8w1;@vZpE&TX#~(||$bRSbzm1IzKmEi?n*>LOhTdKE
zX<0$hBM;s&t-5~ujw8Xq@U;3;4oSgKj8d$q8bTNV#3qGe<7z9^$le-1#EeIPK&CO3
zcwMQDXInbj2L+R4w*VfIm>LPGT1+7bS#^z_I(e?G^@@P_@{;15tPGn8De{=EMN|#M
zqCp5nU^tEe!WhL<_2DLozeXLzKn{&-fFmdns;~*x52HF`6d?}94d5Ax>lDR51Y>UE
zQB%q&E_2(RHf`4Q5?_Lq=n;+wf+SsPX}<sddy>)<BT7^-iyGC9u1&;%PM9Q^AQi^?
zLa)5MDjKE`08SDYE}Xge#sxgjpFh*QZ~H+{g2(2vn0c%O^mS`CU%uSl-8;Jf;L)+Z
zp-o@zZn-kNcYkAUc1kR!Xo@DsRE(g69RTqWb^L~9vllIH;9b^_KKQh&tv}i4b9vlE
zjZs|}1rY-=8Ychq`&BwoE6Yo2X4W946OCnLW!BbKiIUXa+ZB_89FIQxYDY~~L2{B;
zSExl0sH)qn9tunV@`3Sji(9Iw&abL2L6nUQ1e=;#wr$%R3x^Ae^UY>6#xNtpr|YU{
zP5i@iZv{t4BoO=UbKencx{fJ`_c?ss_5^^_me6@+=>7LUJ$&G_!|KXROJhWfMq?b$
z|KpqgCCsiFkN|)I-~a#sssIqT%Q<~og(Tq@UViU8-+9#OPx;NS{_unEJ*DfK-R9C_
z#3EYXdv|SJMWrS)#IPh;3DN%HV*!BIfIl-Mt+cqXt*vX*rfn9BIVCCCY_*Jyi~-8R
z;RwQrFiIGOm~k95TTIKAE>1{r40iSW^^Fe~EtoxXW)(p6qmMto+|vHtZ#|Tomn=y3
zO<(PzM4dHzI?zSR#AuYbTwVkaGmf%=0Kgc;lc|Gvnl3(Bb)Yjyu%_V?r&}-e3;|wp
zTA1C0Bpz!(7#fzLV3lQ}s<NVjzK)^uXPY%$Pft%N%*%4Syn`cwNF>B@=81)kL4%w2
zkN22e-CjA4$H-_C!<15l@Pw)y03c3l1QU3g8aEn+u1S&t&NGAZ!pv;HjnNo~nWpQ(
zaJZ(XvaG&J(P9)bPU1B(A+N=NAemH^U}jnK?q{u+I{*NhP8ChL@19!{+>VH<z5mwQ
zZQG7w4i=SW^B8aXbo-`_hcc7XQd9h+W5Le$w!YqB%$xJ`JP$v8e`#4xMRBgh#P<$#
zQ$^A=)#rCV{mk8vSDG5nzVeq17cX8obM_L3)Z=l80>=o#z`AzrmSacHX&P<sXuov6
zDZ!oQPV_Sp6HKtUJg=-QA0sp{I9QmQvuM%WNGPaAHO!#dWE~sV)~wwknXSH5ufnu3
zIhgEs)mG#cmlub}!b8J>me%fVI}Y0|Znw*8^4Kv2TfW-6b^CEmCimR4sQ$YAkUR=_
z!>b-}S5wk)Ii5JNP&NJHzn&i-j>u8++2=cl`uZDYOoNoLuj>o_e+e@R7!Mc^Ak+1z
zBtb<X9FH^-D=*D)*sbf<d|XtJRZ&s$+8gie*mkfmr|@D^>$<gvx;k5%FSSjpYf$7E
zga1%uo6=JcAryF?Qc4-~r>9kvm5z;!ZricTY?9oGi5LP&lyrsxWB}?qkqMv>!$>rW
zSiou#GSbp(>#HRZ_4g0H^x}q!l9D^_oTuvJ2lt=awe!To58mU;@V)cq+E-p%{qg#(
zEzQkINr`T^9Y6}8#vq`OqX1Cja0>x75+O(dlmQJv9rq6mA3lAlYamR3C<(-4;Y}PA
zEskLg43CV<v6zgwh^nhlfELT(&~RH%`@qof$Y@|>bXb)Mgcw7kc473ze;v%GAZ=3a
z3K+S2h>#&n2IKAR82#^HR_PWhi+z%y0!A=~F-3_H{f>w33r8cOMWhU9lwpns@e4DZ
z=!g^c?>O|u=UV}RfC5p#CNuxl?t?CmrQ=G=rY#2(z3vAdyw8*3(ZZqAjZJ}I__4<x
zS$gNKWBvUd?Hw5Mx~e-IlE|q^DR#4sD=5z^F3OBVl#c$+dmmVlU!K7UbbNH&CJ0>}
zqdonRv*$0DmuDsT6Eu}{cLd&i^V76c`-<grolf)VbFI7g9*=~_i%YX9)Cr{tN%o40
zqRh0k`SWLCOe8b^@(Zhv9&U8n-A9i#zVqIW%nV0vb`ll<;Fu~$6<zasT(u1~Wfg@M
zo2jj(b=RJgr%#>M!@%K8|I5p3h$32?=zBkUfMHo<8p0f6hJ3RTLO{v@WsJjER}}%n
zNI+Zt;pW?KyY;aro=A4t)_(fcwAuo<+o2LdnToK^7z2Rg5YGSufFdKOWlVB_n8CuI
z#NpKQ1Drr2BoH!H)iB3H2rz~wv#6+1htpbJTdL`?>*h>zNX}GW>R(@f_qkvHXhy?~
zRjW7j_w=8?+*(+a1po>JLt}w)r_)X;<v2tQ13d^R0E(*UgmOHG7(@_yJf7mhf{Pa}
z@7uMHgUIf%i)OQ;#4v|>LC`5f7;BVbz!+m`nHf9>Ak@#EJ$LHtnJ2z^S7M4i7zn-i
z;(KYS8TYNcclEpPZ`pca@uE35-?;3+fzt#112xqp97h?W9FpP!k%nTF;pk_$XzK`3
zZagr4rL*Hw*Fg7(8i<9>0_U=dCIL{Qal9DRlo-UsjF}_=K>!d^NCD=fiaa(R0F()W
znL`|)lNd8l1SiGiAcP1^P@E>n1I&;cU~#^E+(IS}hj=prV+;VJBye@LnhITfZ$o-&
zqJ?NN2!O6@17oAhZoN@*+L(x;P8dc2VH&?EMSx)*MuLI8yAKWZ4{-=_SWs1sGNMU%
z@#1OI8;bqOu9D)Cvf3&V31~#GoO_+qD!CF9%#yTY>#mXEAq+(`ZyFdG<|Ms#dO71M
zftt-}tD07tm6uvkTNY8G2ok&5RzGXOj!pX_;n>WEs>RFaE738NXn*C!k9s-+Kl|z9
zwbRN9i*f;^qrtJ_lI)7=LQT;*#8DPwKuu0b6eXTQ^;F~W&0ikr?GN~py=BEkfCiS|
zxX5lbYifv66+<&XqQ-~@VhKKHcCNo5D?^ooms@(yoasDq<l@+9M3vPC9$lPYl7Km+
zX_SZDM9v)|02u%}qX0lnRjs0lhuCDXcXf7tzHv`(W>R%+c~l-MEXu?j!kh_0RS=k}
zY6yrJ35@B0lB<b+h5*0-U<MJoYPmdBu^k$02>=;{2xA_`S#u0P#_`DRFhfKz2LRKP
zys7*49k7~B^>wvtKUtrbojq&j%+()ntgEj`@FsM1b&G=Nal1m{uqc`czyQXR6A)pD
z5M_)3LuH=<0J1VN^0G4f`v>>z-fy*;U2dmnu?B-thB$zbD2a?>1Ubrdj41;oGbgjG
zD6OC{m0`Sd=dnXa&);#&4ZdX0>#wcGh&0Toyl(D15tu&PxOLI>^%e_603#@9j6eXe
zp>M<hq6|<*HG}}iC~LXWGB`BS+%?o6mZ>H&5;2=iPOIn;kVO(k!;x`WB}jk>V?z`b
zb0DtRfRT}rGSX3TNhN>*z6vu+C(=A<3dRUC;Dk{8kJtppCRkdGF~%qZfWzEmj62B<
zil;!HzOj<%5u)pYD75$X&RaOAtf4L#4skq>AYl`zHYAP^100V9o-ZpcN>51+MWVq_
zKoG4lqAgrpw`}oDA}c;`+KHp*0nwAvk`SWN(a7K4+pzY-&D||sXHK8z5r9BLJi;P+
z?1{S^UK@Zq001(mD{`XOg9ToVMg@+yrsix~^TnaV$1tM#x!IMK6=qM;`c+?U`topA
zYR=u?xDj!LVNzC}S6x$DR$fRU(TQsGL<2~9LC|!KLfx0_^(FX%!Qn@qekj4^9v%!F
z*nh%fPe@Mj3%tZAfPkoK$Ru&mXcPgEmf<fiEAjhNdItuEM*ArwrDZwyuUrvT0vKaO
zQ8;c&j~PG=FbXI_fKd<{i>~_HhRVvy%CeG+mo9GJzHjcF>9y0UT^@(3D44V8MCTBv
z>kK1aQDj0?qyO*k5^eynsmYaVcC)W7-%N>B;wdl25aZ9BJw0nygV`d!@y^@d{q|Ea
zC3f~)<I?5Jnwu`KTDA6u1q&gCJeD+7$K2#b8Mi=#fEn6ahRv=aaGRNxkzbHIG&H<^
z{YDHxy5Db-M5a?kRyd3&z8)lm%5u!%av%;90=Dhk0|EWUy|+Xnp^abeyyNCuFEpRu
zv3=LM3l|BEEm$zkBq2c%bOMOsLuS~)P|B#G3as-G2S&%Qw6=%BYV(y|qKUdr)#(2r
z?yaNayso|Bec*v%Nh4+k3(XWK#yClnh8f$&O#|(1iYa~l-uB-2_TIN`Zg1N(3=V^1
zJBbrB+cL<ONd`$4GmSL(&^hP*V`d~dRW7Y>t?yY{US68f%me#(&W7LqZ5>m~>$bZb
ziei%uprZl5A*`5YKEP!ESZuu6-%V$qu1hN>N4i`=niH`Ox|!U|IFMrNAc>c!VcKl?
z=m(Np=X#l?Q;80ZjpY>Pt-kpNJrW`kMbY3iMm7@&5aF0`Vwu=9xP)<DaqgVCHExgd
za`$Ds%l7EHyIl?kwWsX*<iH0XY&m+Y!9O~Yk&$}l)Y-!ak4RW;zuYe&ArZ;6EMLfc
z;QpHyEnjRI5rha57z;YkKSr<ug8c5EpWnUvP_p9K{OOLMKj>6#?VVlc&t0|x=7x_x
zLtt5k_U4D5W#xFXbCVQ10?at(24}K_0jwyMNi!J6SXGs<W)$aVU9)_?7W8v2z5L3C
z1N$!>J8{P63nnHedXrqH6<|zLBuQ0dgoJ6Cl0tLyvzIKLPZebG$hW_9zvAGsOaMSt
zl_}+Yfe=UnF%A|NmQAv2A^w-YY$+*9FDfpqsjA$6u%V~Bdv0B=Ovs=9`ijpN%*x0F
zAc6y>G#m~AFiPdAiZo2+yJk$T{HHJ@7)KLyoO4Byi;D{q5}h4g9jR$4rKN>$zWeUn
zy1J6WlIQ>W{B1XVy&xxl@9u+xeIqWLQ*|jQHYF#DvDj)H)y9r?6eElyx`r{yOiP`=
zaQ@{>Ee8(P3yZm(PKTmScHTvoWLc7kL?fE6DDv#u>e{-BghYEp*EWBAsJg1+vH$f<
zQL1-%WSCHX?X`;;w`57?2pGg+#yRI4gy5W0#I;Dcx4XZqYcLoVm)m=sasn4%P;P3v
z$7S=lWT#V=ZOZW2SU}?lu^6W&s+j=<fc^gnGmJ60W3D$84hcYp;Ez1|0OL$x6l)KJ
z*xEt}F*H+gCY?EU?!9-nrX*%&7MJj#pE0duR^fuhv#(yUDB0`64o~y3rstk}&E@o}
zit|Xr`OHjLK|$U?&)C?=s7<zWZfLsUcG?n>5}tnMCq^I?3>bU&)R)hi&BOe+zj^+%
z&-R{eZ0_plqTG4c?KfR@&7$_!j*$U>IKl=7$IdogGA*sHs<3Zp2rIVRZe1y>Ac%>v
zz?dLR2*O6hl&M3eb_{ak$)?WE{?gJaQxA@hk0)j2{q7(CJUAFM%m`<+>3qk~Snu)`
z3k@S+7?$1UF%1rYBt;(g`w=0kT`4Zkxn}u%*)D`Ix!|00i?Qj+cnky(2h0#cy2iYo
zw4uKKO<TSQ`GX7BUVrlN5kjP;ixxFs?s@L7pZWvcyLaz9dZcmniWS_lD8YtiNU}``
zz=%Y`nk17reMCU~d!|2BA$UCXJ#+XTM+d?fbIt$>E|}ZnOh|N%j*T8aaqQkZ?>Kv@
zrK`RBuKVtO^wB4Z3W~Le@!Fg3ELt+xVpdXO;>hTzs;U%IP1i9dcyj7`R8g8>KuA~&
zES8s>Q&TyMGq!2t7FCk6vopith{c%O<Bn(=7s6nc)8#M>Lm;r*6<rHEY^u|xezIlj
zcyH(B_Lc`9zWbW1=TOQCMVxakP_*@bQvW3C<oPGYWGtUN(WEn_skPr9WL&rGcG)7t
z3~N|GW~$3+#~!!KGDY8rA7O$B4UTId8^BG$5EcwaGwjj9f$?LyCfxLC?r|0vA+bS(
zU+$8QlJO}a7PF$k8v-PR;DRw0=1eD4<(zTBgx~;(+)|h5cDa0k;OgsFCZ&2U1RMhZ
zU;#Ypq$0tYa3`dM2LtcD^~vEwEv?O$BO|`dj0{(1I@3c$0h>z#WQ2WVZ@>G|=vd^p
zzx`o#RcTt9>z2E3@@8c&o;TZJS9<%}{6Wp-kU}AyG0ek8q9^&yx8D2wvjaUX-51VW
zZfI;~rZqm|Q>ao^Icw?iWsYQ*Z)B+D!k}Ri4#XeQ)~ufQ!=F7?J1dh?Wz`L95RX`<
z9)0#0z%opy>{`Em<LF=@H7WIl7vJ2r^+bPXe@<p@W<lx6gC{nBwmTBm1eXaWHmCLd
z@2zt=iA?GEn9fYquDA??$%>62iJ2ft)Ur&B7$7tL+`nwpINHpD1VWfIAz>*$H=7H#
zb?33IpKORk^mX5OB-xwx+yDK$wX2u>>K8w_ddc!nw;aL>EzQqSWQ8C_ATUe|A)J`t
zHmxac#8(JXOmTi@&XP_4<z#IdaVk-_+gV*z>9DJBuYdcxH7kussQ%cgAO7gOWhI4e
z9o<AC$=;MLTei<zyvU3gx@J%!5rm^!<I&M7lk*1!k0#s^!6Y%kQ(TbW-O*it{DdmY
z8CjWHFibGUlqj+^GUjuzdVK%@AOJ~3K~$4uisP1xDO6UJdXtj3@7~>XvDf7=iVCyh
zmx=@u(cVuaAnNx<|KoC~{XGL+U84b0*>j?aW1GvaDik3k1QWuDq$fKQ6R1N~O+&N~
zjA<GNYH<QU0E2=B#fVIT=!$&cOuoVNH+<D57JnGA6%EIRX<>{BLKI^q+QS#ik|0Fx
zTbwmKHlA0Mzi9bY0WE?g0x|7dBtVW*&X7QaOWQu#vvd3L!YprKBHY+`@zRB68<x_u
za;U0WjAM#)%`~*g!bO!8RfVZ#MH3^w%Wapl(vq-b6_jSpuB#-#+B*k<GiHk8C(fNa
z*VNh3i#cy;8VFDL(lV1P%Zmd6UpS->4f+NKdjYgp*S}{OLSP~=I9=lV-~X0Ec}i;1
zwrvLkzOnqgOh7=86qPPjsdQlXk=I|_)z#H@?aCG1on3*6U~l)}7u)N71A(2p>xYK}
z%mP)hha;g|Z(hA}&7yE{gktHb@BQxF=?=HUTUcCzIeGErH_x0tpOoNr*zFh#1Z-xQ
zA;7Wn4n~MbgmTMp+UUGx3zy6*n?I*^$&&ebMTPtJ?%T8f_|Jd(bSOOJa(P=@+5!`i
zMGI&9e15+_!V!17U0m=;B!WrwD>wi`e8va--+&oMJnHTXgt!0!$Zog$C&p7#60539
z{eg+$k-<f)uVIEhyRIs`q;%Jgy&r5iuy5BcZ$e^WZoX+)6a(TM2@uh!FMidGF+eEV
zt7e)eM!2Y?sHU>w()s4kKi|ffm6M$*Q5p<|9S)lS3xtFO#)JS^oN3uv-kWc^?fNzI
zOG>j5GUMq}5C~?3nS}B2W2Z;Pji#=#)6K({EXh>JB5ac+mAFhZY*!&UQSrE(isbC`
znWGZ{PC-x*02mY!<*~$hasMgI;s_GceZMc=WD(1Iu<0z2=u6Qm8^l^aqstK@x7MWy
zg1>gh*9}9ryB(I`@kksAAqgZ95){$a^X;#{w$bBo|KOQ_SiY!=8(K?CSN+km&6nD9
za|&Ee4`4#6T9BJpP@Hd>rf*>MUw;2Wb6eXDH?1^vKPAlOR;ns1O7aUWQ}{-FvV{Br
zzowgIg@yOseq&o(%P)TQ{pD*G7v^UlKi<f=sd0AKBX`a!$sX<>>mMG*1TZBv)uq|l
zX@~2NZQi^;DZxH(ejOzgqMQNX$YMi%Bg4akb84&S&#PH5e{N|($?iP|EyH&H;^kma
zv)kmXjBLY*BqTY1{F8N&&|pG(>RYdWe7SXSWF&IpWaH^mXY5YLhD|$LF88!|wp_Jj
zA*NA_n)$%dS#E$3AZA&D8vuH6e9YlcGqTcbsvHXVUwC;v0(SF_YusM@P|xUF?{2*N
z)|(nmoLv9ryXVd|fBMDY)Kq6qcE%Lx3Pq=j&gc{JxDmitS-><)nT+=!S}HJ1Lse*6
zdNRU56{-H%vBu*kjvi|$EXqR$dhYqxpZnXtuDWVTdTMG@)1`1occ_YtA<8Z!1V`^O
z0<bt2anA|?V1yJ|2?jz1#YL6nrNe{6r_P+~9~jKf&*6dz1V|77f&ffYM}%RCYavTf
zsBQ)j5%C#f04O>y7;wB;9)+22WTc^?DPl^yj<=2*mOp4Xoix!#Wv+XiNt_98`H~at
zF1tffoxX_Z8yPea2rL1TFwkg5WU`OtKZV)!7BV~&j}c%}c*lzKSE34LT*O4?;*70$
zFiqB0d)MB$#+~fK5*Exvf+G+ZkU+=+PO+&9VMXADzq~y>HgVIft7gwD@uWJdYf4g*
zon|=La;~lENK0r?bEVq7-eg3O!E}WA=*U<w;D6%D2Nauvkb;0B#DG{SnF*D3<sP^9
z%!Ou+nba-+;OF0(vvgKbah|~=NvY}GU4!)}PwNEz;F)zc2QSFaS1tRIBd3x*9<a>%
zLx<D6o|cvlF2uS=?~(|^K!=BdLjw~wRh1QIZgy_<+@jLDZ0bgs$_EadYCPGd%BrPX
zM6w=v@Va&1y2WmT+UlH=3a=fD?hF3cUjEdK$YuGt<6{#P<2xU^wz?)S7#V-)p<5G^
z9EilFZD#thEJg?c&Md=FWQl`7RHB$-OgKZFlkGeA4~+!wyXWSYUVVMEf8xClH<T3@
zFS+XKKRo+dUS|IHzW0+kmDMl4`p%ja%Y?;|rAWwT=>`J95g?2sS{N`;i85}PmPtv}
z72yyI-9Yfkk$97jKOWTa_-rx(1Y?YVU<3&9=!`XtmaSMeF+N&Qm|akqyY-8Gh1prN
zD`qK@^71R|8yYSR^ba07d~Dv*g@zGS6u~S*CKQ7ZrcMA80Z1SW5WQH7F)p~pOiD>+
zW=2kSW`EznnbYU|<Nn<AOlBCsO@f3>CClW%5Kv)(g$NNq7ytvr00eL%G{iA*f<UM;
z4Tr<3VsAQnawNb{cKI*%4{I7w01H__l|;8}C&EoYm?68(?R3~|Dll#|UmmoCWSBs)
z9Ro+m1TaAW0!$FbfG20TOh2YoO<?i?i}<h}0eq4X7DZHarNeltqi0%vUqq882*n~n
z@}qke&YD}p5u3_>#?#8OEFsRQZ2$D5ZS_Y_&zVzm&jYu~NiJ?`Ojre_1r_C`7?Y0f
zuA`^UUA%M}b2U9ROLe;tGo3DF!MtkKfek%kS5$6sZt)3U03)X@AtN#z*tNT!P_k^<
zqSb4c8Ij1Q4WEDX;a1<^_~+a94UbK%SiWHGwM&@@M*`vXuYc+fhMxS+14J?u6_zhw
zuypz2%BtM7?BqbeFA>KVU(`SU!bgFzP<l#+Y*VNr5rvoxj|>L?_@_4%S+$tSky%`v
z@$GNlWeT2`U;M?^Jrcrc>AA1Gw&C=tp2r@$?cwh}U`B>-xM6upmfMryTsXfbImN?b
zMJ+xp)jn<O5TH=0r>A#p)R$FQpohYCRRsYc7{=H%g>G2?@`u-+`p!L-)w7a3&c2@B
zB@5@>bmQ9n`w!|`xTL7~<yT)$OiF5N@3`^$Yjw@)?CkF8?JF%S*TNbT91|?d3Ic=?
z714+K<@FcE$RacQK3Bx_fB&+fX~ji_ndxbkY1JP%dfOd0o4OVXg|}?o`cMD+H;d-a
zZ|msn>FO>i$w3&~Z4MCB&@D<NF_n|VXo?ERA#QPu^Rm+7lw|M3_{8STUl5FPa<V{x
zrt7jK#c23K#A{HKg#bZ>K!PGboST3c#t;ky8;+eDn6M6>?haTI7XX}FrT}bu9kvv=
z!!8Rg5|U-b<F+d@#j>qqaAasi2h|Q3V_?y4S`-hHrr(OmSxX2Z#@M8zc%?90eA}M#
zFQ%tM{-X@!)EB+@j}IfkIEG1LNYtc|Kw3nz+Z>n9H2>wf4Nkl3sV5#u%uPMhaH8?l
z`J&<y>TxL&uB@pjD#-?{wO;BueCT|4M~_Q!WEJOe7N#~3OtZOMnm>Y7JCU8Q{Ozqx
z8+M@}-}3p+vEiT)I4L<PBQxdV`R2FZ+Ab{PQgbH(g;~~5pZ*?^u*2j0<l`+{w>92&
z>(VthUNw7m(fox~-V}Ev5^^OgTo^W2Vn@rs-~RTV9yAAf#tzjV(F~)osK~CkRO<fg
zU)OiE4ReMB(m048{$QQz<TjhUVdM5qpB+1T;=I#tn+OC8O1uv}ewP;Pt*$Ld%XA4M
z02l|ZDzati(OU47L0@U(6rr)Pu@67m+<g9GRz{k~<zkkF5Jw1s5S)vvmei!ABne@q
zr6*Na7G-250}{S*-?5WtfBd_DT0U>i7dt-pcs%(zMZf*sza2i-Fzy@tc;luUuDbza
zfdzi?r8f+nrl)whg#<%{(6}==`K12mFf&aPW2_qn=X~z$DpjSjj9c5<&o;GOzj_sR
zxOVN>nVFeVQC=odIUM8;msgLN2vae&?nH}f(E?k1Jx55Eq==?Vl9ZF3Ra;YavAOxu
zrPfd=oRgEKD2m|1;!_FR$;NXGfMT8093jhO8l||o<?^M=BNw~In>xl!S!Rf0nKHvf
znsBPJ*DWQu2qh5FLNb*cc8S>RzM$6L=SMaL2@HtG$GpSe!|cl25_4IiW7_}Tce#>|
z^W~5F(lO;zL}RmGe`h(zAf_0~Q!rC84UKDmc=lz)wR`Wry|S))e4zKu^&fBEeB}I@
zv)SGhx7$SsO36u^H>a|;tY~7?cly+&eFu)Wx3*MPml73&ArP^@^1}K<dk<raZ{5BR
ztnl%MCNmPG$j&(L9~u}B_zH8ggTAqmp`cSu@=c7oo!--@&gEz4DWLxPH!l_zCO!7}
zeX^uS%#b7#!!l(>GO?i>3>nhD{{FeZL?}NyPYaEkrgq{~+nEz*bJO!i2ZDe7%cg>?
z%up~SuvJ=GcJG5Xa}h9^k(ZapMJOfJb^nv=7B8wQC`{3HUqX^gH#Jjm#yO>gU>Kk9
z$r6n>l8_l;riCKOUhncXE19lu{$wi%k)NAuSUN^Ps6;8TIh-Jv!yzNYOdjE2$qLQN
z&NzIu{`md_l1v`_*6p>G6)(U3epb5o|NZ4tE3aF2p{Zr_r=KsFJKLr@mMmDDmXhkQ
zxhPg;qQ+GpC+DF}Mm7Hvm{CeYp-@!#8ITdxS4~Y#K7QiN_(WjyrcY0ty6_L*|IX)I
zwq|AKDzc-sx$~d@&!1|lDs46!LL^oI7SVB@JlZi6n~sT)X_`U^LMg^LB_(<8ygA+7
z-LJj=hM}98nHkdqPl_jbgVAyq0^kU9%hE9-r_VI^j6(g{zA>E{rT|PNSrP~#N+m!p
z2ll$D(;<(I`LKY*1eYKrY>MWN5m1y^e{F2<odIUkeQX-jn!xc&;g^3npH^^-r})KJ
zgzeL2Ss;WEdFGo}VM5|FU<AZEFMt5XCjIdJPmdgHomE+K`yDr`c6slv{q=i~s|W>r
zfyRdOecgjei3y2msfg=|DURBzy6%p?a7ZgI&R@J@$wV;dvM24`aronn2WqR!uDfwn
zQGTjr89n`@5<-$>i|FCR6!+6V_-0v2{`|Vxd-ooj2#!+;*%Zf^Z{py=<9qiWL7+eR
z<ilB+2~<XxF10z-M7K9Z4@Z~)Rq|}xdSuU@v&)yvedfoH>H0)>@1WpJ4~0%1Ki7Et
ztWB~oB7`u3?PKHP%naw}C(8<vB&nvRWWoGuY=ju|+w4?PU0oeR;UG^=&fvljAcTmH
zFN*i_eg({ALJ<Hr%&hFJy4tF~{()^fck6m2BRxZwRLf!nV~d#>@rWLhC_)Hx!Kf@R
zSvW7Og-)M6lbWnj3D&>$;r;jCmXhk37#}fA&Exh|S62V-|NJEqHfB}Ubaf8=_-DWV
zXw#nl!Jb76W;<Pua3mC?k4)wz001B!Goa~nTfPcr03ge9RE!B>E1ru(bv2d!gM%Ko
z;~Nj(;Z1OzI&)_8r`u-N&e^(sCqigwXb>X;7)w;9R3?;K7BdW8Rn$qsyTw@4WTTRm
zk|ddik)55nXu*PkfuU_XcFTmgolcj-VVR~X%a&nkn&xskEGsHy$teZhFav&L*RG@8
zK6<9P#{|2DWel8i9TS2uHT*$UMM;VF1dr;l+lNMnJr0l4We*ynb95{aj$p|Sz_~C1
z1VR!-iDU5{=F8Qv|FG^4(>+CmCZ#y1zd@oD$2ZQH>;lFBf^$ZG_U)A@_L=|?hG`0c
zIOj5!nvOQFe``xhy7Rl=eIzN_InX=s`fDF)69yO(L24iv8W<ivbo69SMp8yWHc+HR
z*zR2iB$+<`!*!UNib@DpTbnx&((k<gZYuQ5qO9_={QTU^f&Q_9;b8{kk#F8sT9a>?
z;l>ju4<A39nwnTwQ`OVoXIep<O&uB;Td{2M4L4kE=)u1Jq2K;yeOq&{gE}(P(=buG
zT1Wo&*AF>kKmYL)9ED~ttgI+6(6orpH(?qPQxD&;cJ+M^-3G|)?Hfg$oI2BVyy28h
zQj1C|Ff)ZP2@wc!BqT(Wp8dn?+qWN~SjsO<iyQ7F4GK>qYFq&`!Fg0l!Y~biQ0c7l
zg1npy7h4b2AGb`Nm7T*F#~2%?=5jg>CIrF)A;Z)$#rXx<OP0)bIc$`YQ)kZ3s;)}&
zri_k_)zp;NR976>d+c!i>HF`#=fK|jx8MDkneeAS{DD&T((51CRGgIPp_ELWNBj^m
z(dp<y`(Lg90D!<Omi-4#C@m{1EGo`(*ri}-eBROp^J;21gUz39|JgI&tF5lcDXaa_
z4}W&mq9rz)Effkn9Zp5HF=kDE%ZzJ0vn<oHN{S2T&Z+I~?ccliU?334&di_$o2I48
zvVX!a%h4VmVVI`dm9TGLV^^o|z}YTefN`50IACsIY#=OvAk(lwfXCs^%}!SBM2~0z
zzv=Zlkz(%}2n>!ykR(N$Yf!Yb8f#yg0?b$4jIRo~rr+nke;Feb&r!xDcVh1q<X4Yh
z%VSl+XgeA~fb1@JZ)e|IFMKfW4?X&=`)AE5jhMk#Us~UKall3#rV)`92S-d`WOpm8
z)?DRDbeTY3dgcA5^X=bw`1Zp56wMr$9Yl+0W##1y7cZn>+B~Wm31CF>3iB(=$|NeM
zq$S>T=XHkVCzzi<f3dk`_@29Ox$}YBYb*2pp%LFizr!j2=!f5y32?#Qe0@V-kFU3T
z<kYE)<G#`4#Dvd2+1q@nS5<6%gMG7VOJtcklN^h#s?Eso4h#(=g1-BMZ#fcC)tsWv
zmciE6_C%L=XmH|uQ_J~NElD14T4pLn90`oLy7Tj6J9ix&8x3V;B-hL?jmPBE!8T)C
z3NXfF5=|H@iV_M10ip7e(u(qm3l}eM+qNem!IO~amI&1h1F#(ZGXcPX5dxYS0ZtL3
zc2)V{!%y2U_kXc%Uuj8>(_w%1**8~Sy=30pxt1<I-nfTzWnN8nQE5(Dd2W7Qw#}vp
z&i~#T{^u}@T`>YcvPw;6T3n}uI~?-F*oed7djEq@ii&c}D~kzYC+g3Qj!u02mRrY0
zM&A2iQ(j)S&8C8Y$$_RbT48hpktj7xGsWwjyKsJJ!hifk<G{dBZg!R|Nq|tiatIjX
zv9WOdp>w^x!Lw~X;qaISA~HfOL@*%C1!Wvz2q`ilSs5;OBB59cj2o0PM`B9%NVune
z93%jY0b_y)o)%)w2(u}z=qtLKrVex^GixS$h|=8Hm6ZS?gdo3seC@Qq!3Ysx#MJQ{
zFTHdAe9z*mYHz#idH`+vmR&~=ou|U3P}#7;mQaX9O{PEm$Q@O6l^83h4xV5C_NUj~
zFz@TPuZ`$IS(Ul42(<-5K`IF%Ln!PAOc0hariz_Z%%1BT98FEjuzM18&0jUQyt-zA
zWg1yIN$wP-ZcbTtZp!T0WrY<5Oz=}D&TrVTA92-TOT-vjTU(DDI(zX#S58Li@UTA^
z7&%&he00btDK0QzEVnRcUR{-C8Fh2#2qb;FdDpft8r%u?N5A<s!x-u7^A8O8jyIg^
z?HI{Q%SlR28|w2v`|ocD{4Bq~``8nA%QhaD4U7ju00Ou`lRT)Xzb^z5oYQE#J78eK
zLIhJvu__4+rR630c{vRy8+YzHkeZs3mY!u<j0un>84zZSG0riifG`)lpfInrsE86=
zSzb~*clNGr`x;Jm{_uzELP70~cRxu_cm3*_$K39OU;gHwE6egd9-BgCZXpRP2rNq&
zvFQ~tN(w|rWn5Xxo?I-ViPOm^J{6Ep=c)q;jDQPnm?otX7oxkT>*^It1k+?m`u!i*
zKe_H9yMiyYw1g%ii{>uewX+^eC^aV=0O_V>aSJdoU|euTQes`w2npbZX+-DfYQbP;
zR%U*FP9PXMP=9n}Y%D)FPo-)oqRX<3g}8XJ<8<>#eN)ev!8xW}XjpJe%t`+aVN5{b
z!ti=+dD%&J85`lq`1p8&#~U_Sd&dZqDIf&{CJ-%YAdC<QfhUvc5FaDRW7Q7?VtU?V
zdUVEwDa4dXaKQyI0EkLrP3HRJX^*LarT~KcY~3m}E%RY%%wbPDvFG^C?e+FV_hU~y
z=<=!q{rzvhwV8!1WXOgY6xhZ%VLV)0S9;HbU&q|=4~@U@?5l~%j&D72pTL%)s=yEk
zWLV&GIxNdz%#x{MS>UiIjE?zLkGrj@`K6aWJh=CmJ`pM{DVE%hU0domY}`CJJeXIM
z>GG&qnQ6(%Ud&i`SLbVQYzzh?isTSnNEqpQ1cNO($@SeQ?ys%Q8XX-R92h@$w);fm
z@g>*HqXKb(o_p#2#)h-ha((o{4lT?cdhps+H`Y~^7fkrffq?+Ccy~|VzJn*ie*fvS
zEv;?6fW%#QU0+d|4%mzv;-m@2>Q4X&VA56N073wsRA}O{@qNe=79b%wx7pRIit^&3
z!VMcfYi(&uNbqE&r3XV1)37j=FqSw6gau$=+;Y1dsVNDw%8P@(u|Gfe>diM_UsjgW
z-8=Zs2cJCs4-b3OJo^sTUpn7*=dCx|Z7MU7V3I1^bUh-#0vbOtBmnc++!!P#0}eE~
zKf^RhscC(}(SN43cSf(42!W!Bgred+kK3*rnrW~dTld^|-yMjVfBwsJcinc2+nMzH
zKfWB&!*9R0Av-H0EiDZbqD3@}Fviq01)&mv;DSZVRRRQO0#m{TM;K>jq?Z&I_Vx9D
z@X;p<k(0eCPKSdM^4XSseSW<EOqY=C0vJXJkqE{yS0j3!1WAN&OAnXiXQsGqSePS2
zek!S0Rxb4oSXg2p5fFHK#d!*2A}(Bq;yPM@0OFa(crqt`Sj>$3o6#P#D56jtW_<Ei
ze<{(A5F$VS_Uh;`$0!ZoPVGY-L+`%%QFtPJ<1IJOz2>Sh-;gKSotlzJEbtBWYK&RH
zxrn5vB|Y`MhnyaTIP9-H|N5D;U5`C+Z%I{|8Hvb5?dj@G%*>?1Fto5DsqHPj3URno
z^ABv@|Hd01W~OF*_~GYWUBgaQKG}Hw@}=(4?ukz}?(Odnq$azUEnSE>5~iiP6ZMIp
z$t}w?$9-eLU^t?O0Vrca<JwI(ExT&v?CiXx`SYuZM1qk(X+_bZg>x*E_jLE}KX5V}
z3?4ap#y1`+DouU#@ms?aqe;oRT^+uC2Txa&=eS&wVFb@KwO?xOb~;?Sc`552zsE2p
z$PAKjF&Zltla<Zrob$<UdWiJ}a)@^;#f$+HV(8|z*R7T?*|h2N##3iXi;9vnGN>h(
z#T6<uWQe%M%Zls|2HXj*S+mNkt7ZW*pZ)h&W|fy-zjnE<>%afEzuj}|9Tjux-h2Cl
zKmPgM9lQ2Plvb3LS=<r?VrPV+_>YaHpGF#jsfFV|i}j~nb!=#0bhWljlThk%I!6Y_
zcI?`<{@stuN(<JkS^fFe9Z88vk3F@{rO2<ozIpBH6+5@@ednExi{~#)aCv<Gv81E~
z)3V~-9sn_suh@Ao&H<pPuwcc?WxWIaXU;Ya_6&5j_jdG5>^;>K1Q+9ztDHrsgfK^w
zQ|37$K#fQs!|N`{Nu!AA8u$4_io@MDFc`830F8F!O}iD-SRj~0Ge8hmXrG3YFCS6H
z*_51Plujj3y!mKqWbX7okGjg_=igo}5J$iP5D^$SegCbE-ECc_E=+?L=4Pg3B<ak^
z$V{!SE=~0&j{Ae70Uwd!p8Kw=tSS~JtKZ-7*_OT6UAy%9n^yZL#$8TN)A94a_|;z>
zloyv~D2mi}spnsQ_gdr8^V(pjq5jm_bDh^-yS%ol0&%^kyAv!J>>2H984iYmNr|rS
zKK|_lm!qe<_tlr)cT0}+^h{@>ZB|8DK|!vrg@gXE5VCHFtOD0JzJ0p|VX6YP)3RA5
z1;x45)fG;MgAkGI^(<ak8wwbm9sLRJ<nKIwQ$|*z>Pl?A*!R+_AEu-#zxl_ft1EMT
zW1;SzL5JO|*zl9zxhv5tA#BdXVFDEGwFQI(ncNo;5+GQtz$yq57zDzIM0@k13vMtF
zN=Z-gPmCudCS1E}MPfq2)-QIQKYK1cCB^IUn3~RMT>c&jlNpF&gPV4zjdQ~vm^j<i
z^zi+6+HJOvHh$LIH}vR354`&F%f}lo{rVT*y?W`wSJ%HG%SwJhj=+F~gaF4ppZM8A
zEP)Jh?9UL+{TE>ti=8mmbiJ;oX8wXXz5QMH-g}2(m~X!K{-fW#KRo6?cBHW|H?ugm
z;IGfUZR${4F)P87@czb+3ybrkoedb{*b*eB(xaSnyUk{pW+)QL%uTN<EeZQ0pMAb>
zBqTL74MnI8iD*|h0J1Pq09i1Zv*QFY34s|21}aPPlH3Z#a#v3uRb0aphA-^rNJYR1
zMugDG)ZdlZ0U<bJY&tN$0%jtn-5THLqQAs3@&_kmN-TUjXfa0Q=Z~&J@n%via9|?P
z-Pt=l=wk*8jP}<bI@;0GUA<@l7Mu%~ou4^x$?S>Xkj=>+c<7E$$OuI6AO7`KRkg2s
z{7%)ONQ8#`##=AHXKMUg-@M<Rta8pbeYCZ!t#53^-`g?V+S*l=n{(%bx2L2yYif$-
z)Rhko42=#=V2}kibW2N1ac7qnzWe3}Cr(^Cc<5wnYkNsmE}@W;l2Bb$nVy<<;?y}!
zGoJnTp98fp6&#qwEhdmBA;IC0Bie+bBGZg`Jg)h3=9Cwg>PGnbn^uiYgj8?lFMs-*
zzP`ZY-?^={Jkjm46XDpm{}du<@uG?wzP?B^e2iOwC;jZHgK?qA^4M6wm6&Ae1{Z>H
zCIq*bL5ZZuPRqoS?39RNnnIy85)KP4Br0Kw3`38SS1Fb44o7)eu@TXB?%Ep;h4XW>
zLx!d*s%4qFt~1UF#TGLW76frcRu?atYg1)iw|?=f*M9uN2h)<1UVLr+<KMo&th_im
zGkLJTZ*XX6`Pwz(BR)gpcEtglb0(ZNXC!1s{TYc$hM`*)v#E+@nbB&^fAtVkYx87=
z03jqTHxU2;AOJ~3K~xZ60TQ$8YGg_3?CK&I=FF~?73VX*df|Wl;(Hw7?K^h<=9fS5
zCMCcB!N<4Xbt7;=5J3n77YMLrSp?HbL&g|KtsD{LaN3NB#UrS*FSu=g(}XDurXbS-
zD<UjQARrV+=T{*FlmH-^F(gqXG7(Hmbd(fkQ9zN1-ZwNZB>Rxxumm82L0BkWvWjc5
zN9zrOa|VDYrEyPBd=<<PCR3?Yh*t$r?3YpJQvh(z8MD5`I3+({w>sARhJ--Erm8h{
zHJO=d-Mu|R51Y(rZ|gs_?~v2(%+D`CgdiE_&o5uPWImEqq$Iri+J@HFjtB3%qhd~8
zL<<vvwr<>YV9$wbmMomVY#H#7sT&ogm6<8o9c?`mV?iotBw|d226A$e?QZHxb=THb
zN=O<W88NwzDL--M^6c6|St5~eh?{0h`=B>nE-fu41S^W%+c&s<$BDJ87tdc>j;P=u
zm=FR*8Fqqm!|hZf;jqKz&~<@<q!#2i9&b2*v8{66qU|4V-gEHmqJ??)+<&8C`X_w)
zE3a${g#F1WNk9J4H!LxZDQALVJcHM$P&pjZQoJd9_Z(RN*5>rogv11os;G<^7|BBe
zfj8H0`skx=?d^TpS=la!;&Rw^!y*#lf{7?k6oF<KfP^AT1qC^?%1fG?n|JKk?Ql2}
zT!{{wUDr*A!yyDCl$yFGVG2M2gvBEmQI8vzEt_j-!JWGgT(@R5w=_lK<>f`?rDeiG
zue|#1>u-K>;>5|M#Ke-Kg5e>b$Cc>UOm6WgWt>vUVirJbg3o^$XII1+li&kvM*AHZ
z=jrJwMa6kcm>+NWq$tn3^y<Z%H*U_(&8@DjA_%?s>N_h|F4n?E^QD&Tj7*zq5BWn9
zrUcL6GYEtN6CoQ`PMv9OY#un@F&q>EsWJ!?2?hW_fJh_;Gr$;R4oqM|FolSg<hB*(
zWqTZQFcca0M}~Z1Unpz{j4*)U2*rYGLg<yQotSK60f3nJ>&!P}rY%m)@cQ&mh^|fK
z=j&Eu5p#3}=DMjfWG1J1XD_HqNO1KH^y?wR^y_UGFZXl~COAFrBqvs-U@)Y}uKK+V
zA8y#TeA%2^9==)NAffnD)8$uR+?1f$Iy?G(BSXnq-o%_NGpuK4X4fA&8uUkGY_}|9
zc%uL6YZj^w3CT!O<jTs5+S=*^hffDWk+s(@T(N3tS#?QiVYbsQ=`3{b!*^hWI1>o)
zzy0}dvLb!=$%j-Y2H;3=;37K1CrTF+9NBD%=g)M#_0}d;P8{hQeCMMr4X4^Li+EF9
zBfg>g?)_R?YH~zlpMQ4v*s*hx1b5xBwxlc#Q`0atO34&qeA*!q2`s@aAyau^p#SL6
z(^oHB5D5oWg-F=3Y17VKyUwm%weswl=H0swE?HPB%T!h*&RKNW3Lq{pAc_Uz05d_%
zzKolUnUtc+%Cgduf}=-H?cZ0gN=jaC4uD{cV}u+w8@D(J8L-KC1Y@bVs2I_RD#;z4
z{g*Da<mTrcZ#b5no#C*%O&yh%R^7es(UI={_dnXUa`_U=<n>1zUwHA|x|%A7-3|h)
zssaG<F|9LO(TtWgBg{B9M9l9ahGh{6!g?qxJ#ERN1&o=0e*Wckk3Jw%^7@-^uUdIk
zZQY!A-u!U)?!#k4V|qv{D=Jkb)!@dJ&Rg`$Fa^od`GKQN$1Zktj|6mqWCaO5Haz|c
zm~jeB6~qM00GNb;X_4Htl<dp|;35#zdx!j^VZ#6d7zwa2#8yxIWrU-+GYNlxN>{#d
zCYbT**|Mpk-1LmU5S;vC-D(VziC_*yAd0Yru#5_d^J?bIl^E&o9<X6&YjgX_lV?Z9
zM$5{|TsF_>Q1FEp-@zC^@x6x-8wXV|lTVC<+Ap@7VS{mgx&88ihVwGwc{w>p4jnyo
z=r~0r9M+v~*V-Ev&0AO}FgkXmal#k!dQ(D?z}C+XNrXQ7=r^4SYB)0H@!AUu)8@{b
z<#0MR&2lFsaxN-LOI%K6?lnt;{vj?bganz={S|~zW>R6O>)+UN_~7}Dj?NXURt*jG
zYewkd2X3D|w|w^O!oq@_Ku{kWioE>t1`v>up8Vub*O~gLC3J)_rG$$aU<Mp8ri4(Z
z+f!X#xp47pRh2-1!>)2po6dFg_Vhmd;KNrfUa({Lp1Rtyv{dhz)90KHC#Dj_vj2>s
zs4Fi(a6+-*j8I%zT3MK1c=>Ysr(3oqCMKk(r5m~_$uc(?fFzKGu!WICBy8~@w{Z2W
zn&A=O$D2RA)Y5U?+EqJt9(ewx4JS@Cc3o@<1%j=uonO0l`TF(mZ{Kk&zaagl>(?lX
z^7gy$x3#sE6c=EO;@qf7y4IwL&um#Uyn=+l(E&6BAwnsRXkm}XVN-2}WnzK?LI3Hq
zr|V|dz4PIF_uYM`?$_RVZ_}@T`BS^owR_jT^G!{b0T~&|0B~g|3Ic&tEML6Xe(2=I
zhKqd@I%j}XJLS3&v)Sn|V={1xu!#ubmgTg&Bfd~ZN<w~462T-CvHC{*L;ipXoMQ?Q
zn-+!yaL#!Ah-y(GgbBfnSyAr&S5~fP`sMV=tWnxA#)x1%rDOp@04Kj#w-O-{OZ^B;
z1jU>HLl`jT;C9+eD+&usa>oLr14BcIn|<xQM|Pb|_m*w>WM@m~<$E9adTC{mkSXGp
zO?4+Y-AfkNsSfDs>0mn3!rGZr7jsfGg8~1@=%~&^24`7CsSiGNOGNXB#*OFx@X_`y
zC-jKb)N*RDv(MC6duu0_<lLeh11!KuQEe7*(*#2^R0*ky^8PzpI?neMlofg0PQe&w
z;>@W_35jV2W3o&YA|KpyZsW$C7>RE``asRxin((ubCVtE87X#;Q&p9a9=6N29b5PH
z^z;RE^9MhAP*Dv`O+kQT%79W#{+>4q2m}@!F^)`*EKCIh1_TWa`I?&A=FgsY{%rI9
zgL~>`mll<0<QC+ILgpWT|H6?2r_x;6nW<TJhZ@nsDz+Qp2nbFk%miada6&K=E~lfk
ztSB`lW!J6)P3M|3Q?e7&G6l0NW(bTe0T$r~))_{G${>q^lJsk?S-4`^Vu#KC{7bJF
z<feY({yQjUpKss2V0P)+8*cIqjh#7nnKNH;K|y+IYGq}a%cf+cB>^`C!iE5j4GtCu
z;37IRLSUeA+V1q98PSK3kdTPA(t_ZWP-Y3v0TT=es;kS2it{_WE<0VeIddwv@7kZ3
z<XW;|LBr8T|3qlj)hqw{{OhY$TxA);ZBH}|W>aOuvUHP67*Wc<*mt`A!cbe!IFkX}
zY(ijSlZh%5RVI?m854pC5haLeAedkrh=T*+!i-ojzpB*fc4*89X#NrZ*yu3FPB#Wg
z5`tnv2>~u98)10d!Ha_g#TAeyFBQc|;GFSzJQn3oO-8EIt85UH8D@C09*z(~i2P#R
zsw+7D(+-KENH~Hh@g^nJ)>acDdir`XmPbZ|ji;L~wYSWfSMk7i?hXe>6ji=-roHKO
zb3tCQtSTjy<#ko1Ix{*42QqU~?|bm;<?|}$%q}y54UG0a`P4d_$L_Stmo8j7Qh!X-
z&6{st{k1!<O-po5jE|f?-<6Y>SU#)R?r;!;0s{t`-6pGwZ0WFV>*4LYPIq>6?c0Bh
zX{fS%cK79xA3yU7CE?1NVnVoYIPm&w8-f!|QS1>doZxY!rl<e$53ldseaO;zS$V0V
zP+bpKSCo~{DoIXutXjP&r1_{6B?wC(2$^|dpIX<a`~iVln|uE4PaiyT|9wjrE;@7i
z%$@^B9=!h!No5X|tXaPD)Tx#aKHhcg<jL&J6mN2pOo?G=4x62G4uT*-kx&$g>XwEv
z_9S|iU9-fds_Wl<=g_`=#f625i3x^o(x^zLKv-bT1qLAzL@5R#oNiY*5WaBn0st~h
zqpQ2)hfhDLQ1Wkoeg46FZ+&>(1DW|b|M;8VH8!5UVeLxaxK9X%sl-5_s059`NDu@9
zkRUK~|Ke91UjaXaq8*KjB6|`%Wu-;oNaU5*Ui;DazaIz$Hf-AXz3)Bc^?0`L+<n8>
zR=HC%KYV|aZ`_}n;zdLdN^G*!+1lA~uJcf1OHc<c0m2ggvX_VAMokDN2w4cr0wg53
zgpgB~=2T?aRasT#h-M6o2FJo0LyF*n0G~X?$&#3eR}|4#kbozlBjTgJr@?aankN~_
zS5Ww;eZqeLGbBuI$O^>-A%YQsS#^~~#d)1w{hAR7o8hDs$J0-LQ?Ub;Si~QB=jG2g
zZamc4(UF>w>`ie>c06ZMT~SFvP2H^YvV3h~h)8(e!uhEw$>nqBs91`GgPED$rB^M;
z%uZc;{W3G;%PlKdFuNu*GhxYfYus*U{l23Icb%v#sgfMXFmz_Z=#cjBe}0o-yQXmp
zM$5&{#-q)<cQ$Y<eD~eAr)Rnu81)Am_U&tusbZRJXmn`z{)XJ#)VAi134frW@%*ud
z#>~v5^fWKR%$4YzRh}ORkJ;^#5S9QU00T^uwEVJReHms5ung)KUmQyIICAp}%8E<h
z`QWpK^Q)b1&?8|*P1v?|e@#_cMn=j@Z+v#s*RIwL!{u~w&P~h0hyYL!I2;<6WeF1y
zz=DB*H#y<zWs6FRi{E(Ty`h1@qP%=rmJvtMsvQ@Mb4zfGSr(P4q3NZ?MWrQ05~X_%
z9IL7<yK3?Lz55RwZ@hHhU0=5hZMbh>{X09Je(F(KwoytkqChB%(pqBWH4<&s#^}EV
zvl)+=6=H;R!;mG33n5GLRZFjyWU}wTApp8)Zq24oKg~!_oxfz^kALuUjMTP{?vBpx
z%F0s3Mg`~fM=#Z%X>aTG>kNbh2utKjp@3LM9mmEaVuS!u0L&u+RZ<jet-WS87M9(i
zGK9u_!9m{`6O!Nz$782S#xNknV`Vgi5Q;jD(Tek=)A*ml49B*uC{X#ddogv=7-8~@
zb*pABSt7s`bjx6zONwlA6M!Y9BrdylnZvG(2ga|zaYaF4hTw)I+4k-@vTs|1+wN>_
z8#sODL}__$LTZA6Ot+Hq{`;Ffijtg`W>f4&$b9d;&F{XsAvY^ODbXz{SW%_?f~-g+
ztSCxo!l0_l)Y*pjKQ1ZC{piC_c7A&5#K{H@xG29U61HA><-?AS!L-z*C!V;!tGyYx
zF+LV#7LjGg%{N_-sKuC;nVwOYo!ipVH8C;4m{nVs_s}=)S+RVP$7%QbgKh1-H>|zd
z=~B61rWs;Fb0#{5h6Ze^O+@8>0e{tQCT4&cBqgW%M*4T|I()kE<fWF2nql1i$nD4q
zI}}gD@e6wo9Qo1Hk1t+Qd-c+al+3LE=U2}T^bZ&27fOT*!3hQcp{kSv*A0VEOe72>
zri3}KuCAx2ciWEr4x7W{blRwb1+u9MK{zVYDNDp;7GPwzJJQoqQc^s%wX^I_+p~Xp
zao(KrrPnMbAb;@D)?}~y`Zd>{I^Fd8`uBG2Im87?O-+$y3PJ!!I4XfEu8>mupB<C-
ziV!kQ698024o4y!ag4#VjQMk`EoMId(#D_s`UmY7E`9dJ;TzUod(+pxwq@&<dGo6<
z#hjBJ`_3IX)$TWt!MLD6V$w9z(|It-%)qh40~UaVZpwtH)Vl5ZWriM7WNMjg+#l>8
z95qeB1&WG-MH3!VFyoU`0MTSLH9a<)4k~d4%%abKI$LCN5)hgO)Y$vTFV?L>@jAfd
z=f>;_IKmWTY;hLdVHt2jwEW`Cvhu>RSw)0^Bq?W4wZ8erCdsgAks#xI?wqP?Z(Jn=
zBa-sgi<=JYX}ox@d8BtZFQ@3z*^WIs4+Z_f!v~L#kBz6Mrn(aoIS_3k^4e=35bRKh
z?UmQwX>RRYxpJY~?r<o$xw-Sy>DJ3FU4y-&M~|PhJCw)P-8FY%$%@tU(~{j26XSgY
z145WP_Z%<{BR?<4<8dV?XYSi`Sl1Ypq@VueDMG@O`tx!#7A#tVP2-x?%YmCFa4KVh
zm}Q!(%@%u9fB?aayV;a(o4E3k3#+!atf(Lj5i=##b?a@bJ#K~Rh;Z9K{p*X@tzBMO
zTYyj`F*$MHwu6n0ZS8HH1$lWMm&4_BNEoBIVlk#fAYg)V!7OfJj0hsL%F8NemG<=X
zTsVKBt+l<ptRfQ90EDV2flz=_2{7g$5CMcBIVDN8tBNAEceZu(wAWTujSf$&e|Pg^
z-+a(A`JbM9an&_fFPuOB^5xExjpypBE1AU<*+!6T8J10vrwil#cQXFdVMZp6GHS|<
zaY8VrAV4H}J%nJ1Vp+B-%Zpkrwd7=_XBXtZ`S$vW;Lw^iD-=aNc=&96W9Rv{euK!S
z#egD=DCU@h5MafcM>&fX{{aDKLTCaIAPEx!p|IUX*Ir#`Q;A@fL~ulBBcoy8gpUbe
z0&%8C>+}dAf=QIZ!@0m1k(f>~no*K525Ni-{H7o`y|HYXO9~KEn-o(pn<3?o&?F;O
zAc*SFB4IF{3+8gW02pT$x5Q_k?QU!7l}siRnM&l5hwe^IO9m_*-rw-vn_J5Z^1_iw
zb4&Y?Lq{7M&x8Ux1=&XJEiFAKPMjV0h4Kn3P9JaD@ZpYgO&6CgoYUXevvgT?WmQpe
zMM+KV-1ChW{eH8rf4HlwcOq!sa`UolZ&(tE_)Mnf6lRoH<Yr}f2L^ft6DJ#6PMvNt
zEphhbrDF{jB;q0z7Zzn?<tGXVSf;Q$(>~q!#qpy@lTwp2vQrt;k>DaerB<M*f)gh*
zxldn}=+!Jul5s|6a!FZXacMz9a)JdyMfT6P?Ct38d-ACVEfEmHB;a`F=g&R%=mR~y
zJ-6L{lgs70aK3r}fn!A_vjA}sPq>Mg{-!_(Nt9@&ZnG(QdAS9Jh3%KyckS96(aiju
zJcJP-h>a|Y(e9!x-a<ExC5z{$rKhE3q;A--S(ep1?!D!mx89Lu`prk~OGt1P<QKm3
z#>Wfi&vv`qCr>n`B&AY9OzR5n%l{N+Gfi(pf@2mJ=NF117v$$4BotZQf8bD3vTNm<
zC9`WQl9CbwLAG;OLqk(v|5%7on}KwM5k?dXjG_Y&r+ra$OCnKJU?PAJj0oroWh)m~
zrzU&GeWM<iOK?0s5gr{4MKms`j4&mH#=2Bcyqf`|Xr_^K@zu{60A|i#eC6GMscjIU
z{|IJ)#55uQ=-UASCV*ti;ur%#!m=zRP{8M>CYYA4>qd7^m!+GDZtv@_y(bg-SI<0M
zSy^COkw9=<*F&5O!7OYcyP6OPS!bJC&!4&2aO@Of(z<WnT)VJxc2z-co>x+FC>YlL
z`j*eO`u!2R;z39%DNTLgfv-`?!k7rf&M|j-Xilbgc6Ci}_t?m=Z+zT5d!e<xt<%)8
zOx;|FqbE+xnOo>|t1d^{-Y@Dmf4aZ3chu{(7nI}>0*HeEB7g!QfY`JK0_5*Q{26b*
z06;Rf7-O92rfxFE5W<uySo!@Q{&L@aw`Lb6W2zxRK6+=D7UVa4ZBf&OhE=Oq_jmVx
z{PETUht6I&)3)U5c_QwR3K9Pga1Me{j1fqLL_*=}s>+J8lD!9xpJ+Ud0CID4EWtQJ
z0tgaORegw39L6Wc)6>&5EzHcwifiV39LoMf2huZ=>T1gcGQ&Z0=dPoxmM`UuJ@d;K
zl034<?eVx>9Hz#^{C@~DfrLO-OyvQAru|>u-aEdo<2n~zYi4#i1-%m;Bq{-t0E^g3
zS<O_JtY*oUTw?3F#EG5cy|jCsyu`kFNu2n)TaIN*Rwq>`i4w)$dl7pVJ3#bu+AcG*
z?jQRc0Fpt=zR7*V^CJ(yefHV2_pF&UYklkc9MZ~{(zZfnB}L~ip5C@|)7-h!O(S&v
zgTAf1jvqX6g^X~@B{EGwkE3A3U?MXMie?ZIfN5faaZZi_uy9UeO=W2+5#t2Hu;X#R
zr*CA$brdrZkaHfWp9WqcA!!}VRHFhe*KPj^GeiEjU%CkZC<A&M|3a3jg@Z9AU<Qn|
zHn;#lO~{2&R#o2K-cnLnaPasckC@|+^bQO!o;TAH#x0*%P%*VKx5R9l-H>0L<4cut
z<HA7gaNmt1=z{EAcO;pJ4d;Zi9)56{8Rju}$jIV~$*>uD_Lr}nK7GaD5vjDJ65sga
z&y`i=Ba?|l^625t(xL+GkC=kx6jbcpb+WTFP9%s(N;J%HJTU}}HP%<&`N>-?(~QSc
zudaNvdtj)h)_m--PlY2UV<1VVr9qG&;9LyKS_0n*co494T`9Q5fHBkzX|O-ub9Jb^
zrYX^vU`&K9+w+`|ZE=PG3^erhUTbKop3&Y+T5}S^1IZu#bj4r)`Ty11b<HsC+Pb>`
z`1vcJSakE@1Lx+?ZJjxDx);;QVHFN#3zAMEmY<#DBs^{yLI~G)NK4ZYq_r^lw6^A|
z%F+|3POf}wT}feHaee^{@;m^XaReaJrfCpK(-M_+Wm);zNheWUQoQP&4GR`6VP@7Z
ze(@q_@}37D{ms+Ax!ToJRgt}G=b<;>+BBuUvZ$~SFdZQff=Mai4>mda$Se3T5<_69
zfiuB42Ly>;R$f*^Q^TAY(=0BKMc!JoYyF=0yN9I$)S!fc=qe^m)LJozm_Wu^@HYnG
zcohsx1Y$@CS^yHM1s#pGRplJ0zrQ~_D_eU0KwsarzP^O=QP{u`na@y@B27W1OTg71
zoDD|*W{h#p$ECkMVjJn@C&-(P{s?L0zUGV(jF$f~{x@Ix1Y{uG*S~9HjUn;T*kxKA
zhfIT)l@_+mXm<UPuHL?f9=v@@Yvbg}Rhu?!Z)vShswCQ2TT|WA+!(TrBPULyRNR0_
z*eoe57#QpcnN(U_^z!m|QObs?EoLZWMsjv--2djQ>ji|QL=@C9tMSHLW(&guQY&72
z`#=8Uz4DUW=9aot!tK5~^1@56r&5xkDYzYp*p547+syZ!hAFkPX11F)8U|amcy>{-
z)iSldsj<fQJmjFqL_X4;17Hj^0s*1xde6VGydXcnAisby9`L|0V9Q^6^H;xGbNTGW
z1vkvM!&W?zuq{JM89W^%mR}If&Cj+ip%rNfFTS)QV%zsUc-N1A`18jfdGNVsUv6q_
z9T`rZICJPPzWGO6w{8C0zx&yW<(to)JUnl9hiwW@EE39cr1o9c6g<GJLa-y@P*9Lt
zS65wKS+Z&K_T9Vp)laU?FD_QTc3q!{1Q!8Q8W1_skx~g^78ezz67KUay!66zZvyyV
zc;Z1p;+f}O_{%^0{IX>?&6~4u_nxDJvHmHOt2q;fA+*-<cq|;U|3GBc#0`Os!!c(D
z7AHai4P0x1{L<BdHCvCof21n~peaZw3M~~E1`(lU1*`;|2?Ap2%(_BK5%>f?L(YQx
zLu^6E<jFPVq}A}yU^Eo=JvlHiaIJrEBqcRNjZ$z!009a>4s5K%b9_e;KNS3!pi`Ot
zC`vQQ1)rcySTcy*W;VL`yUZ-u@CUDPo4*N@CTJKur#QcUN^NUf<Mi3>h_Ghu+E-S*
zcl7w_1&ih)A!sxK>ziulEtu)1{O+ONhaSHB{s(W*&JQt@U+z605uyDDPHx@2TacY+
z<*az|jo845WrRJY(U9Nzv#*4+8KF<4&tJIWrcw_-c%SrD)XM$EFP5J^(-*Qs0L)je
zWw51-W)2Pa1Nc2Xom;kUsjV*yXWNdKnmna?(xejLKumMa^n|IBO!b}bd;1R_dF9nj
zjSZCr1^EC9P$P*OW-Y8LFMn<2`sJ^#l8~sZm=p<zq*90+2mx5iODgRLVkVri1BZ@0
z@TogEsXhDl#gp-(qSE<`Zv5W&p1S9*CDU)1=B9=kr_|nd^C#AC+B-7bKdWPg?`zlB
zzSO}(1AxG(03<1u<9S?&Xe83nKE0@@@Wth?9oT=MtgO7Ov_wiu7v=^bQ-f=*8KA+9
z=H|&a%x=H^wnewyGH+7#q#ynG=Ya5;NADdTiE$QsZ|(M`meSU#O`h-lkAL~Ww6>;#
z{5;olKRWvU3mXXl#y}xzAiiby@wMBJ_6)nDo+}eVE5!^0h|u7e=JR1hI<rD50F@3k
zBFCU`k7!P7Ra1Sn!P&^rpuq(<tVGi38*;jbVhW`uCem!B0+~>x7)yh##-+jlMuYg*
zyZkZJ2x65VGP3~i37O;p08CU|HFmD?)d8cP_e2JX+SR_FOhod+wb?bUmv9~L?KK<C
z5Zry|ZH8g^9>s@KIgzN7atewHA9(Dxw%L>GYHO@Kw&d1X9rK%Z?JC*5;ZVxusieDn
z`I~h$m31{0{oUPz!^6OV8<8VNPS3odDUxL~p&z{eo+S$hv-3mRg^imI96oX~Co9KE
zB@83#%GkpX-F4e-^N$^GUAKPw;iD&Nsw<02^0-01lAZ)W1&RdclJvyX1L-^_ghJLg
zzV^k#M^98#lmW;ztPU`daGjLO&xziB=PfU-T4|ba@7<qF-<F^>29#wPN-4n&<@-;3
z_EUyo8C+;S63wx1z2lx={p6YQitt_c-!;<P)7Vn4<OP%GhAi9jgdxJ+-2+|SeI@0S
zii>iS$ssgR2Su`g+%%N$OVU!SkY!d>SAPBLPo6k=`ps4E7UUP+dehRJoE#zws-%6#
z6<i=eG8IDvBg9BakGxp#NZ)Yxz4v|6k**a9@7?=;&p_|&+4sldandRhu}#B_#p6P7
z#@HVK=l{c+K+=JHPwznN{o@xdT^hz{7Q|w|eW;QyGQk*!afvBF#+a4ywZ@*K>v;%h
zTLxpy^&Hd6%E^i3=SD(?0R$eP@;%KIuxv_mlctfwT91x)4D3j2#V4vh3|I`tewxT4
zv{sDq0FzHd0oZEH*&N>(r_p2}W`ZHtp&chg%{e1d!3-FVgbE6B7{VP7-kwZ`|GAt1
z03ZNKL_t&xdye-{-~GPySXp_6qg=z5g(Z31LZv-o%CLFul&WbhEmwQ4bq~fLdF0MH
z^QSjWt!iqiR@%LIVMr-@|H!%H$37@6E-5I?l}cvk3g!AkgU)~a^2J!p(Go$U0^Lww
z^|>eR_T*4WY2M8Cw)!d6GiSEtmt-Sq!w`%EfDR}d0B|BRqYOC<A~N4s1qJy+2u;%S
z9m6o46ftK1=qJDa<Sk2=-Z*#e{D$i4axQqlI;OSHxF$rMna_|R<BU*~R`pG_?bF+P
zuk}9t>lL5*^xXxyp+oN<np9cx+zW3!_rj{ysZ;K~>*k*R?(hD~4|nW3v2Oh~t^BsO
z7RN~%rU;0Af<Zri&wz-fCB@B6^&=z0Yu9f|CY|EKBF;?!W*Ur?46cnaK-3_BF%$-$
z*4j{2RgMUt*-xJO%?-1r&z;*QI75av%${MGX227g8FPPd8;|sxa6PmQTPol4lBO9x
zdgAJv>vnezdQ#YE3TB$jGzpOfI&z2_+~9eo2^2ID5$F_>LT(CSa&B<s91uabH%w}6
zuCq-xFwp0uQqio4@2jEV_`t}>;9v@c#kdKK6EX!zL>XqrG-7J>3K7R3#fU+cV$=%8
z$y2bgPbsZNV;)*7#u($AF$M%_Gn>e1B+O6|e|S@i6W#hu;T<u6K*WG5E6S&}HgN8f
zR<FMD*7<W+wrxMYVA0H+q8vb%#`NkipxFpTjkfmIy2+E;XSFIFXC~zq<V<U8KY#4v
z@UZ7PG8P-&w{PF&3m5Ba>cUwDu*mbjdGq-3a|OBi(TFuPJd$4!ef;xx7nVf0p&dVE
zSfXT7K{(sgJfOrR019@jgp`5peY7#AAX5!F>P>6XoO7)pY(-YRz4qF*zQ;dvuVoXn
zFh8%rb!8|N_C3WoO639P1RQ};CQXR|#54$PnAX+K?xCUnJMUP0^7!c={`AFVw=8X+
zyYT4yhaP<7o~p{cq2ZqT$+e&U)B_~NYb!U;nBGuWoG+y-$s+~`0iy<(mZeDtk3wn5
z7_~GvR+LXVedgTiwHvgex|$k;>trIq0J&fUK*%&OskCVrp@^->7l!e{#Y-DE@BYH)
z9t?#=%5lQskmq}x^Gx?AeAXY|#=Bb+ni&JGw95>xrTO;ieR~dH8gR8o9v8+0XG59J
zbp@e(NW(uEQ@{)umC__aQZwpH+uIrhgIH{+ySuxnxY#hn;83i$FFurrYcvTNAZR3w
zsHFl(`+k_Ah5ImOY7~<&aYsH>BKqN82gKfi+yA?q#_O~RR!O8Z0y;1=&V}nr*K-Y1
zc&_ieesyK}>7ySkoZC`6r8F*M0w%bd0MfEVdwZ+zy2#M5qh3;`V(Qw}0WUdHT~SKR
zliJ<8`{d;huFhLByC}bW&)%b2(Wf6-)-rYS>UY<fA-kocHjx<2iG(eS#}g?58c+gc
zrPnS59q>v8rO?;wA_h^1F-~tp#u<=i7cXC2yJ6E~58Z3$2`@g#L}c&2W7~J^FD@#)
z`4bDXvTebc52OPl3vPb!4}xLaDbKBMtoY-)huwIrv7s(D%y#TJT2NNn)7LxHe??Y^
z@`}8Qib@W-OBOC&wPvlG@_|q)ZAZeAeC27=vXjZAB%P_Q2LdGwN;$E@qMU~wx@TlK
z@!p!v|N8wO%%44V@#1;HFjHQ@Jc)oP3{z^U$mND`{8V*K#b5vRm-CCmBf}$au6p<0
zyOu?=!oOor@?X__l|)928OKjtegEi%k+@`*MW#Pa33%cbB#Hrmfk0$LK%|L{U9jtU
zh@42-wiSzyBvT2)wDWVaO7e3q_Y6yy6EQ;4NE!h%TvS?XA;jo@>_5LD4VFPoX*w1W
zL=69sGkoOW0Ea?pSu{Y#xbG{{#2NQJ#Z4oc9a*w?!Q|R01tkTJH*AHNaxo)TI(9<F
z4I)y$wC&JqD^@0x{%1e`)ioPd4Gs*NCVckMPgYJTU9sYg;lUFI&wg{|#%QP@K9Xvf
zTs42;tl^Q)hd*<BD(NurqFLd=k+>lYD`a>wLF9|k%O(b(0eEI{4xTC-?FpuVXP6=M
zPXC%C(*%ZLynp!Ur1GM93un3UeqgY5%f8oFuDbo!+X3+hKl<f=`}@C44)vKKGfjDj
zn$j^90szynebA0fy2+Sr+0jVuyt$K~e`SSIG`+2{d1|9nv7Dm93nx3b@7T6$*RhI<
z;+D21UydN6)~vg0z;$(X)g;s4oS8}!pafv1VJR6$&J4j3l;gx7dFbv-m#-e&xBKa*
zpP#?rhUVsGS4x76qoGL{LTi;3%}%BK;^I8y%JbdhCr*C);d_1GAFulRf2c|6g>2iC
zc<lHGSFZIZH7FrG&$A}}W&x0P!x31ZNrl7!5l9m#OlLlU5PS)MOoL|_qPu6PxMZlZ
zvZ}BkCnsXtrpY}e0W>fGVxSo32pREcN{0z?Tpl?+0<Jgh(1(}%@rSWd>32e8!qJ+I
z(rYoqaft#@6LeaQS-J+)FgpLR^a7<o6DQ=TK?{vQT6zvJD67r`&;SBltz=RNp%jL~
zSywJzEh{ebT;*G!Ihls;AMD?_Vc*a-zw`a?c6ImhP^huFc<PKP$lWh|{(<(H$5*f2
zH8e=f8xC<A8FnvT7^-coizRyqH9D|!=l=OOF7W+?)*f;TAOd>qI>*E(Q35Irf#ESq
zmxiLRO+d{+0Z4`{$oV+ZwZj%LY@OEBF{6!v&zLZ|`J1O#|I0u8c{Cb{=4HS0=GqH~
zPPR;Kx^VGQUVd(NZrG6t4boR00WfCx4gpGyT7<GZDTbW*7r*te8%r<{`S~S&!hPw*
zt$X($$jd6OnNoenr{>R?*5LR(ronZJvLksb)~?^MWzToM^HtMUVLRX8h9(yPwdBA|
zP2fo%z|YPLC)~k;;>aDh-|4yjv(LTs?&^)V-TaA;_UW;B!i-oRW5dHEp-?F4Dc}qM
zq@t{x@ZbISKUZ3&pX~2+7sqFlV7%b<xZnKtr^d%EB><2Z=o;B~=ybR1IiaWv+%U3<
zhJypRVFL<Mibx5xwUV|SM$kYi!waI6)&W@&1^jQCNGVqtk}=z6z5?xs&z$I~DW8%Z
zu}TUf*#`CKn2&i11Se?{$aH`a0hm(hFlV5E5NyEG><PidEcGZJQfsY)l48!aQkt|7
z#wdPBr(H$zeMbljf%xBj<yO*x;vD`yaiwv)xQrNNaAzl~q+k=D4}o#dM@xi<`V#;2
z-Jcylbh@&nCchwT2<;?eN~)5gVn%rB@&`$ov~tDQzW#&}W+VUvE1p!c<i`0rCA+Tm
zDD+(~v1!MaL^3vGR-1v=u|wzo^#?B;IB;<Of*X(rT3HjLVi5^YBVd3SMhJLy0GI+)
zh&}=_NUOau0}!>7bV`bfa&vPW$7P(6hPU6|a{qm|p&^_^^1XFi7cZQjOnKk>%kS6K
z7U$$-h3!zVq6uz#uE$xr7J{K*zy;?3k|UX>k&4G(eC5@RTMy>v<~;uC2k!XveU;_8
zo}Us7ITswQ{+{?#zkD&CqB*mtmX?$Z4kWK#>nSPCOQqrgQvJ8l1t5tbE?P9NVM^WB
z?K`$^-%(LfW`{#5*UgS*r5|9%m>7)DAbpH?^AWG|_l*0~xW-5eG<WPh_15}B15)`Q
z5XnSB@X{lP2|xzv;J6^tjB(O|sI*4XfP`pZz$lFAl1(7hQd2f}cC&4&L_B%=)Rhk|
zcFvg5N~9cDUh5m_9vX4U&^(w^2^r7q!!gs30PB=~J7G^T!^#K%X^BF{#@_)NgCkSG
zgvI~nbDscBfhgnell1@3o0&#H!KDP0{I%upoId)&VDHeL9S59bvZ%1QAipSNn-$gN
zjg58Doa~;#-laFsnl-0G5xSabV4BGBof)l7tyAlPv(x9h4MQzkc5{Ay7HadyKYA{f
z7|t&!TD15EWC20I#9{k%$$lD8#t;}1GQfc63qd0QBgP03m{PtZ8L~_ul}siXV+I$V
zR8pqSo;_1sTC)7rl>q$id+vGX?X?_JPdxSz=jL0h)-ooF3W}r*lpKPBb_T?>Mr2xR
z&$dmi{oK6lmd1vu&9#@WUU>DbjmhE8$&Hna0g-l6GACT{uityBsGw9SZ{fUodAa#-
zzq4WW+O6~EPDkcP!j@FOb)yLcH#ATpnY3)HqhoqONzuCXoAw?&R8cW0KQGVoys=y;
z0sjAGX2E*{v8!j~<yAY6p6^M3P#OeRCP&hKaKLyoLuP0#8FK9<ku#taXbA|&48*js
z1Z2#tsk&s|oF?0ZWGvOyIlTYi$r&?R!x2j<)i)IH?29FQmzW6H_At%+5^TR=wDY4j
z_wi<iz_?(7Yobh44*&o&>v>S!&%gb}+XNA5EjSy~V@z+k#(zQPX8otlEZBfDLXt|R
zWNdJFpnF)LJa+WT$z$gYW)+tfC*9%fyiiTkl*Xop%F;?Rlz;hr?|=K-e=Eu>sjjZ`
zQm*o2d4)M`9j#6E72$}z<fg?^`n$L9-?`&`0OOnA_+oZmh?qxA0urMMN#T$%ctTA1
z%3y{8NGibbVt|#lM7XbKI2_6`O^cKQ(kUku4%>*#k;*WP+9_2B4<9^q=ukA0_3)=2
zh{sbey!h(F58ho`Qh51N*AIU5;{3U@3i1oJ(za!Kt|Pe6zBYMSOU;m!bb)Chm?wQ?
zn4h0B?}nK*)kQ~7ot-tO8G{h87M)l7e)Y_nZ~e)a-#>DE+Kdk6>t8>&^3G*9w#}UG
zyD`^G2@z5%2zifz<`6-VB+!W9D?c2vJ36K*C0~7GWg?L(FD(&5Scajc3N|F1^U-+p
zL}oJX3H~8wHvV9(b>N8^XzV|F>9uuxdy?p(iKq?c3FH~C6_AO*3qb&2LTiZ{Kx<?W
zkoEyGF09df6957ckgBi9T{v%=X{uDxzjU#G`;N0s%{7IEIa<2|gR!gK12HF|2$2cW
zgc*j5@l(twE@*ttdi*itJ4MI>etw+^Q3hjb)NKxW!RO`6lH$T>evb4!01Qkmjr7wW
z`i{(b$IJ}b_&H#r;P`dSOp(VB1Y^}T6|GGTSrPNxh4acs>GO44_d9;9y`urRBwt@W
z-}8fiepbcRjx7hTUh3PmYyX*(CrgXU%BylyPTcpr(uzsd)fHjeOePb*_{DR>!->Zq
zy|-iTbfx3KT+I{!vT^htV>c_9b$}tUXee^@@bTe+k%~!Wp4Lc=5ppp4dxyUJKb|^u
z;$m4*NkLu#0a&&vrKgaP35^i4&DOT5)2C0LGiOdtR@R$uyxrFyd*bo?v@f6f<#R2K
zQ<f}R(l^k*e*MOy$B)%jRU`1+>_RuGl5sabH!J0gAV&qGQny4v)s^MV&9&TOh`@nI
zBUwNG*)vn>ikIDb(}9D>sw->OtlQ|z;V*vf@u9vUsk}%e<har@EiQ~etu}a3KsCV;
z7$8T+kw90Jm(OmWSyfT~^sk<Cl1?-d4%;EiG=rRv*4nbnk8Hhuhvke5&3(L?1#g1T
zx$><y*X`ebwrj*g;9PK@g8(u#`I*NwR+$38NGs4JOo0p$B?eJ^W-(+u!@><jq-A|Y
z*3w1of-Bci7cLC!-gl~`tgyMMT5uUpxZT|Y1F@K^C6SR1Pi3xuv@yhhq!`EL$9{Xa
znO@cyY9LJn2uiC=3I{2j8^9pd#v63+v6IJ@@~diU7zS#}=_nx3$C=rv;a|r!o6yWK
zK<N<z0BLF2#^k2zl1X{pSNjJ>My#;7^^*%HRpx808HNA(|9dLdn>uy+Y)@|w7f@J`
z)7{f~?D)}}ZdoKOQzN8O31M*1%1Jrh*RDnE@PnUuC^0-BEFhE`IDnW~Vi*Dd6C$AC
z#=6xTUw?i5)ytQr&72x|j2xI?A}bQvxA(|ftM-$UrDbJVQCn%BkO+|&c-lwCm6D$8
zhHUHVm8+edm!>vUA31XDowW!4{7=4e?OOLwp89!lQ63V$zH;@Fg^PU`5^?$cA3jxA
zTTxh;?USO6pTZbQr8G&#S$a_=cKXcOmzHn)&bPlNRqE8~t4gsoYj^(97w@aCs`~dI
zJbmWO`S$i!0s=%S6=WVW1mWLt&oB6wBWFyQrrA(GxvT5i)@?ib2L@~EYJ(7wQi|bq
zHq_&9-G>*bkBpGtaj<Ecj^mi7`To%>ufDhY>VWGiVBF)N0Bk}NPzT$s@uY}>nIQq=
z$T?@o7zzw@0x|_;5adL)Y^cm#ykLeQw3E<Xow1#}jw$ZUnmN@nr1Vr*&%m|8{*(eu
z2BH`*J~2is06>}mfH5Yx7_HX+5R5p}G#f_*Pa0Uj4U#?sq?2;MZz@$WCw}_Exy~!s
zCRLP0B4NV+vt|Z>pwp`#<0!#b<ds$wExBoKepYBoL-pcM+(6)PX0CX7-TvLDi}Q*J
zz>}%3KKa>Yw=YekhB`W0>YM8VOq5{?seIp;S<%R>nH?q*3|S-^4&e2aHnRz)=fJZ@
zKu*j}I5S$O)>f8fMZ@Jag@6h{lTu3Qrl#iE9n;U9y}W(r!ONE}%$_q1n9^zSFjS-o
zlx<iHQTbkdU3F1Gj+2VNwEVSYw=S7Ez2o11^oy3J`Uf7otEp+qyYFl+%qys?sekpg
zcRD+JZoYA0B+Okc0n_LjC6(ZUF=mG>U&+96bzQHev9z(VHklgPwfp3n^;@c{iynPs
z+2zYupMK`8&p-A^VNrHhch}J1a7j^-))~QCz;p%57*{?4lIQrAu#}R~P`G?j+1yzj
zXU?2iw{8O=78e#|XJyH8{JYm{<KTaY<Iobn&%s)2-}m2oZ~v}CXGY?jOoNll84y~U
z8JrQakJuP|$jlf+z`(dDh*c0W_S<GgPEuXC)W7%8@nlNP?5NMn5~SGGuKufiv4rO<
z%^5StX~2wg^TwIk_{-4apkAXPM>Wn!0%fJ3m~E8i8-R#3zop6yp=En=xTj~|p7)1`
zMq1li9LF(Dt|bZ10YPgD=)d(i#-pHz!HgT!kBkHKXQt<mx%H?6ZXqTBIWb)^xngpC
z4UjhM+zY3!JoVERC8eQnfA^2Ma1*JK&wTw+rIQOkapS<1{_^r-D^jp!^`7s4@8`w&
z6%DOze!`J4;|Kr#(#{?GhldB-+8O{Apa#@zbiEk=N~gAn5Ril7I=>{ZthzMrjBsH~
z-$aPyX6GL{dhG3Y-#&Kw+>JNRy!+mpa&sbxXdAYh@R1nj=}bQ&AS2Cn;iUZH(){YW
z%9hq9B3Sj_hDSgDuujDVhx_imEgA`@T=}CPKmFN<?<*=U%PyECT_=dZ2xMA;Wg4FJ
z7-J-jz>uTac3F9eClxcSZM*iIxiIiofAK_CR_Kkl-Zr>=^pU$rvG4uc3%%VvvuAYp
zp2vZcQXCoM(s#YE9dSKLAc9F*a6y^?L4y_s2L|=^lV{E9*uVeq^DnM24Xe4e)k}F=
zQZy8CJ(qFNS{Z`tF&cV66d7nzkb5KoHM)v^wCNyEuPuYQ@pyht(V_k4UfX>3;<cER
z9!U=j2((p5Dh^2i#gI5-K$;;M!c@s&VM^&r;v`Hv6ZB97gpBck6_1Dka*p-odABT?
z#VHXV8X4?O?bvh7BP=d0Y-y}^QzP-A;ofUQgM$u<s5Ut&H98(LqA(DYdjXIpMW8iF
zO-hrZw2ZZaAUwu^NJ%9@69(VT(hxPI@p7I(MEvF|<YX`<wI(EarSt0XW2Xx8@`?)!
zG=kQ|IUkOVn3e?qgaKN7d>g&a3EIb**@w=cm=5xe00^GizIAtJ=hep_zrVD)XnIFS
zeohwCP*h#J{>`=D|KakZhfm8mf9LJ(ef_bWyN-07zgSvWcKq1o9Xk$Q>ltqEsB3De
zA*KVo*u=5MaRFFL+Zz#5PFB?SaCjiKd)J|rE8khOcH7jZ+OK})iFxy9o2DtHGK7_g
zr=sDg)<I!801(3<C`N>Y45Hat(P-4R?TZ)Bx{2Y*b(KoVr0e8n=e+pbE6T^b+?=2O
z$FmnMTx{=X#vmC<NSgaT*|wQVIgDAsL==R<00aOR7B4FcEtos2x3~9|*H(SuGY{nF
z=N&tGcEg4(k3I6~vPl(PSGsoW+FMpyZd)M$BF&{@S<zhI*N6hfZAk$EN6S+X+ghf!
z&zP}u*WP#ET^F*g@=4{sREnf!3Z<0(5Ht~i#5h%|j1bjCG_vWti$F*qeN>=*W9Po(
z>knQS8uFNFNF`B%1^}&qBo8XWnFa(R571{!Ab7}8OCZj;umBX229gv|c2k;H009v6
z<g(~Zi)IN-ISHq?&)>M|h(l0Nl+#jQE|_+c&ebaeeKF5PLo;Ng$A&MZ>(3A&BMGF5
zGUNzp4ZxuPD1_iVkmeMCjEI!>0>*OuXzvMtgk@TwnFNbek_f;D8B4wO^2!6%lWw|a
zSz$?WEEX#%EJ`_!{`i>ff2wKBL;@Hfz>-_$*EiKRG)ze;cW^NN#v2>E`{Q4J@{xT9
z4w)95J=b;d;#*QWHPzM0RPU*i=T4tG9~)7^v|C!sZ@>K}<N<jTT;JFyXh;Z(AJ~0h
z#cS)ekAL*|Bj5VQRP7}ao+}J<u(#*x)oT|nUA}SY4Yo-J=Zex1SptASR}3JTaw4HD
z>3cruhaS4)+26ddYR$SyWzlbZ<C~YSbZy;z^zZ-bTQyZxk(|ggFRl3e7w=5xZO8~&
z;j<rH;9OT%m3zJ)@Cc^815`k`Xwl5}_U3R%#NxxA3#Mf!9RJO?H?~b}ZJpNf)K7o1
zW8abH`l8KScinaSCuhx?5ent*+`Vu2{sUir@(Cb`*DnxOTG_Vw<d>c}fAP|$&D)M1
zKe2HB+$oK9wk2Fonuh61IpGI?|E3jMcJy-R;Nepj`#Sp+G6qI~+yw&S066Ba5-HL^
z02(D1CLsgnkd|r8At?ajEJVSP<I1zN1_DCl$b=Av0+3o?y4sm?R9@J&ZL^>tH`3$8
zTn+FcoZ^R^TVOf>E$DGBG=As}W=dVs2<eXwGaCPf-`AK8Oc1gFJQ=cV?YR-dP7IIi
z*nc2w+qHGIsYHS?9)$XTSM2t;+V8iTrJLk3pc?@sA|R$q%8HX-0vW7+d&8l_r#(fF
zJbM3(X^pla`}#+uOqP}9eEYlqcU5WDr3;q^2jWVRN2y02y{E3RTxu6E2+y;LFL<Kg
zB7i}nr)S{O`OC2pCo5vs*HoEYgrd=tCqDS+fBmU#WcT;=uU)_C#wGJPBh<*!@W_Do
z4*|e3ZC^=1M5axP-*7|w%o$BLed5MYIQq)+H_D3hmMy!@^PH9MzFSdMHgjeppac>?
zmXgNb{lkw0hbdF4k$GvH&8VOuYR5}*PM+)J=Hv)LM~|G`vSr5y=Q=<4#3Q}ex?WiE
z#<&0KPj0{G?uwGa6>qFsJbxh~|M@R}6OBe^&zz2^kp&g2na+-Tl8mt+OK;m&TWfPc
zalz^}?;U*qa9(a+VL>4xQ{!To0Qlk6EI8YBS2N9k5ox6WtOLg{zq4sypQEMJN=d`E
znQb$}VBFwB0Qo^Wg*2vV(K#600_48$5daegfQRHU#tkEkY*g(wy_(gQWZ$%Smce8y
zCA<6Fbz2TX)beF=&a{?-yr`2*_7B9b_Qys%Um|iC)1MyY8xA5Kqa$LJ6!*7#rnCxf
z3nF}^WM+J=CIIl;s>3oce=dlW!FhHxTOczSdIV=qoIZT;@Z`yL*^w|Z21@x#2h!c_
zI-{3p>^sJjv3-~Zd7=-Zri@3UKp{g#iW$JT7R(wMPCoe1-Nhx5XjC-TSGBY?^bT|{
zS<*43x^PlyQEs$g%eJGQRITj|4?T3dBNN1Z9Uy>-jh`5JX8IW&A22?i3rJE|mRBsC
zH%I!;sWTUL?A*=}YnmFLe)@$Ir+OC7pZn>DAKtimSM$`#S>bSh&q!WQJ}^W2l5_4$
z#klaKG7J-eJl|nRnp8L(A_gPz)Q+9I@4x%bkYyY^{QkNvoBsN*{@6*4gzS*(Y6kY^
zEqnJJIQ*3-Kf{Cs<`_cwQX(Qlkjg`*krMzgV2tr8lPAxeJ#(OcptvM|$&#7pFMe?T
z!j;D#`&2SMn4M$SRF{;NRvbBUV*SSL|NXDN84jCDxwdVjl1U+iWtxdZ!Z5}F+=>7Y
zmDYd=jAdnI&79d$T~)bu-TF;ic21g9nv<Q48OxMXaUP7zvD-LW=J=5Y7<lbu3F}&K
z;*B+X4xj58ig|=6!eL~Llme|$YEY?whb4`5;=vwCGhmDvN^7ljAYLz+&6&`Y)|Vr#
zh%}HUtt$(oH!YgUnCE%AtJ~dn@KBO`tyFnoL4D06&h*eos;f8FHQ1|=7@DI)BQP_@
z0)9RX00?LZLz5<wnbbl+t>poTU_3J>#-T?jQz<igw%~@L=p7s~Op6;l5b5x|lxJE<
z1f+%b1UC}B1Ft;uQtR}o^KV=fjz*l=Fl2-?{%fJ!EZE>+#@mOWeohflQ*&K?U7aHx
z;7Lh9OqW&_eEF-7g-p}&m2&j!@2oeBkZIEGcizZCj8ZD?as444W6-!|xLzt03EzG1
zEq5u}xN%$G;D9@nIC|v5|NA#zdwKaAdv<S0#s|oiZc=^cAAY`QQOA;{^NQ;#-T1KJ
zjEETLj^h~y0%ICg5HlhGGsM62rN^>ES*b+qH_P9izhFivih#E3dA1o%B>dHDHr#dl
zlET6)#~&6v?E9KCTlyLV8iE5-I>UwpAho7M(pmP&MZy$7DZ`L?c}8zvcWz!ZnMyV`
zR{K)E_QpFM(^_-0@)Y@r5kHmkva+L|mjVFGvPQd10OL7rMt9#iIoW^o`7i9+y=T=s
z>!OkHjY}5R)>IFV#290q?}tOSFTIZ)0vXgO5WtnLzO$FIUy8#303ZNKL_t(~2L?$4
zkeS8`Lf|cW0OoZD1`~#9NF7#``uOKZ2*iLG0cu2rhC=R3b*+0y6Jwl5LRKVfnuhSx
z(5<nADx}kT<1Rj({u(9k=7a=bP$rE|>00&Q(GU^%oPv-ilLTG>8_=YMVQC@_%Fu|K
zEW_4P4h;@nxqKx%94aX<6Nd18`TO{f<5#oa$0mbhamF(a8bf9%PfOqBrbZ^UCZ?G-
z1u^DH9gRlLp8epRcefD8g^O>v<&Fi87bo(NsdQNM!>bt^ogF3&+#vYA2MhyBp+qV*
zd2&s2Q=^q#_|_Zm-E`xkdmgwu%QglEMm~A>?d#s%`2K+t(QwxC*H?93zT7r#nrWKH
zPo949<(2an%mvUyDowrzoB$R0oHM0-P12LY%WhvvTmqo)5<_$C+HGe)xboze9!aEn
zva>@@id#muWn_1C4jnsoRx8ZQ%h#j<Sb)6@g)HAs2?1Jrp6^YbJo(tMGi%px-oA5}
z=Oyc>)EwG>YR{g7U;FZx;|cdy&%W})D=QBiIGUfEQ(IT@Q97MKr6d#m$4vC!w!&`8
ztE#A&HFJj6^z!o8kDoj}wYfPf8YZA*G6j$U(p>k32Kh;1Ku*fvvh(QHgQtfRSv~*?
z$(VtNC<y>S0dP6Gnx)gL!6O61vMi;+b&`y6#)u;i5KE)ci_F(kZBh2kOJ@u2r(D_9
zo7%Mdhy%ocStw_<H-s%nB%H3k#I?bA!gn|ejb8KEE^Azgl&0VzG7-o%!MOiRAIE9T
zP(L)<$7Q^c-&9?olq8aZbA~=Jv`ia;A#j~aFm8Ij<GBf?&~=<^U7d+kDijIl=jKSM
z0u2Y931VjYJhuD$gUoD{tS+ccKtKx0TQ#=~BOun4phzKVK?dW3GlZ0zs;;Y=KX=;T
zVBcepe@a+{s66Qk&eN+|=FX(?jiY3>fDjZN1=dHwO$6IE9493Nj>O|u$P7iop6{WC
z$&+jT{f9rea`Ak5W%2zF-sdO0?|k>yU-;|;pZV&OmBj_mzq0P0Pu-D>r(S<!wbJUw
z#S4<jlwmN^fIvD3LW74vDUQ}NX0)0XbKDeph{SxCo_^-d#q(!%%xFgD`O?$UPQ=wS
z&%XMrXI|aC_vD(j2ej+7w6p{uSp;%D$M=)bXvkMS<3ej}Z=X>ysoeFQSu>~Q<>&n9
zCok1h)h@g9&cFY=e;OK!|IdH<o?!NYLkFj|H7Z4hVPwWJB4DtZWwu!y05t|Wl+5)#
z%MhWEecwY5bY8slo9CWSCB4aYwFqb#CTYU7p7Vq}jX+48fD!BKi>=vw;LyoFS4TAX
zC?s+N0g=YcO!Lg>&6rsLz_-n?l)e*pm?0Pw9Md$(6PQ_X_RUM@2=051f2}9AdG}#Q
zqYwsq{@j_(1-W)S=5%(CT<slBxG7{d1ZC+!41s_Gbn@r~q)7oO#sa?n2{vqLw>TJI
z85$V^2I(AHa3u1M0y8_3EzpW5VnARZm?C5e3rP^OeGOW1&TIyXJjaX2E`D&a`%0&Q
zthA^QImS{+SNXyaA_$CS{5{AF<KMj>gA8CtDfOWgCjkO7VjPeG1kB8&fq`I*gFuo5
zN&#rbz;jdF;?p{sfcrrNmNNms5qR2XhJZK#2+;9l#0VK^YNdTrV4#z7w2NULS-pBg
zPHuKIY#WSg&5#RV%vD+oaA2sYENkhK#kslJ(sN33bAI#dS1(__{LR08GLh)NaOv`?
zGpFxdcE<<D&cE^6s{iMkpO5C2pzkZ?yAA=@+#msAMv?{YKj%tmt$?E$;-&%Cs#O~f
z0M|e$zaBXKh0i{mmy;`i3ud9g-&wWk<jGTi`nAWNc=Wb8t<48^pFMo^%#3NR0MfQh
zLkJC8GbxoqZY$6l{oI1c)VBIiG<59b>Gd1;ed!AicXxHY{OWqkGWPC0*w!?4^R`_J
z=Pk<1&SMB#$*i0lFX>|d$wG~Q3<WYv5+T=8`v8hDR3syzP<&``T1(^X_V#mUFTM2A
z%cw+kc~!`W_zoFhY6MS7#zjEPkQQBGfCk8<Z$V`H-ZN|W9O+GZo@59~6u_85L}nQZ
zQd;;Vf@0|OZUGda0?;6s6&41fqnVVxG_7pVN&rWsfGk=d7swgo24Zzt)~!qD+gvGE
z_4LHI?>pcV2PTlbnbR6_Lfilt9!Yg~$Kr9{XQ)5|M`mzj2wJ1|ar|-y7@+ty>43OS
za3Q!5j0g4)NQfFy1JeYcK`ZhUB^a2axqC$9)hv}v#7xu3%`S9(S8D>~K_Z@;f=DAH
zWF)vCAkRyB(i<6xpE`MFcqmprsVp}qFJgyM@l-%h9lS7YWq|PeZr&&mCLZ_W#~nZR
zUI-D8IpB4%2n3jp)`cwl*wK^ktXi9&pI=&5oJgg@p@@kgPtr5byfAOx?2uuHLs6v(
zkSHBV(}7T~U@R{ur@FG{)X7V)y!u{QY3>aRX2s(1pZ)CFnKPQ(Tc`c(7r%;xvwQlw
zSFc)MU0G3(pG_c;0fEw*Gf?B)s&uy3b5acXz~Jz}K+oo_dt5hJRZ)qY62l`ud+LP;
z?!A5H%w|s}YNym(?z*;R`|;avS;)ZHuwiF*v>-c@=O)Pz)+ke_WtxuT5K(SUPJK;9
zQ$zi!(`UEuJo>|b`}_WZzSZkjpE}?F*kku^-@aqTYj1AYwC&`H)6ESnwjI#{-jFE*
zEu{-gA-Jd!QKaG32tX81#4OvIKDBku?Ab?;9eexT^}h5fYpNIkaNvSVr34?7=O!dY
znv)nDNUhnr|InGMaYrj|fbvlU4D=j;w3f&i;|wx&zKj72aL@=0gy5VBp7K2D5jSik
z$<xk9a4-w>A{b&-apaaIH<--#9KWk4v3bw?j^==zky}|(&{$i}5e9}*SGxxXVvY*1
z_JLgyr4cllvwbA`fTMqi5HrP~kjZNzq&aqi^gWHr#2^6hh6sy>BZI^7SkjGz@(D}=
zBvgdTm(te~Ky!wMAvhOG0@Gj{A<)=!t^54Bi{#6^?3_?2?5BkY$J-cOFH19#+5GRD
zSpY5nogW!9GtZY-FLmzNd1(K^!*x??^73;9aguoM__<>zKUlWxCfkS{I(%Z^f%h95
zrf97I2~d#+Q*grqB2b?A#nZ3MY;Re-_=Xo>U9o2URv_~$U;e_LJ^Od;+W)6t{nCOP
zm%jAEt0S?IdGlsENgc8cAwbChE}C{QMqj2WJm0UbscoOp&KSP-)`ngC_ucx5#hq6=
zw{1K2_+$4e?Qsh<YGLxK(t`TQ^}BW*`uS6DoIH6dCo8`=zbq6AOK^jJ24#rBHe=GH
zA_B_J$vS=ZbSyq_%d(pm&Fh#sqX{(r<9B~{|Gl?8@WB21_aC`<sk329BMZui15_>w
z4%`$LQo7U?0esgnO(6^ph`tZP5N&N!n_C(V9zL}4&A084otK}J9gP4HX&N10L9r!6
zd(Zw;8+IPN+?|jnS1ARcN6n113q*{WT$luYFnAam$P7e*D1sQDWt)!cdX5%W2$ahi
zN0#}PjNgW&tBRw)ZDxdsin2m{Ui(zr5Q8J}OV<YahZ8<AodHSdG{g}3sQv`vcz{)!
zS1U+oWXvo`d17W9!st)qWV-=~PYI!A*tQ)WiKm7}Vt~R5g@wuEP9l+Vfut}E&vOJ9
zhG9t$Om0dyCB2mLJ<#m@*$bT)uSUam-lQU72;cRD;L4W)tIv2TnvWRO==*fYbL^U~
zYi6Sp3<aC4OjBBqdgmW&W{9k=x~8MGskXMNqOwAfLSzPs?OXS8&S%b=asJHZmzS^H
zu<6(x%N7M9jv?Dr5`c8dO@!_6xevPDUA^<kCm*Y>EsN$vDl5t!f9!rF`q%&Y%Vjq$
zncCVE;^Nuo)+}8-t+A#4AHVa9PzXy)3gYpUWtd74XB@{>SV-v`h9Q+QEvvC{%A8qk
z;gH$b(2yLCZ`;0i$>If(tOy~dq*q*0SXWU+3V-~I<+EnA)Krzf^6H!0wjG@|t-+3_
z>z7BTDnkgV90G0I)~s1=m#<!V=J}_Q(UK*LHg4Kshxo$}J&=k!)m7CmuXtza;v0me
z87ILQBlFVvzO`$1=SGT)3X7F5J;xJFAVXhCr8VcAGp<SdT1KOhmX@aKnyPc>&+p!I
zP-|INSL?a1R@xLI2)b&5p+Rr;hQ0faUm9^WaSkB00u20042EV<nktd8;5}moLmsf}
zfL2H@3d1K*nn)|tFaoWK^fa!d)=FzdT2`0j+`4qG!F@O7_6@ijcfIdura^<0VIgju
zH_Ko&G&0;X80+dCawG*AA3#)E5fG3Lma^ahv5ayBB5LIjDIy7=8H(V$15|M^^bEs<
zK#75L0B*)is)N^uP12H>VVYqDFgTKkCsTl!m0hG1_Z7HaiV0~NA=9w51d^nbR7wGX
z@46)QKwo#))!u6Zy_IEUk&sPFo2DQH*O&Y{xwQ%H=X!Sd5rfQtJ;#nu=O_Xr{5{MJ
zd>yv!!h(E22!fivBR8$z{K>m-L*@VaSI<5C!2OpmpSf}ABFnG_hlcz62J><XG(k8V
zavW7qP}I~^TUA|}^hQcc3#zNj5cICyd#_yS{_2+>%g%}Z`kCjFso0mk_`vW`?@P;9
z-+9}urVUw<T+*B&LlB<l<CrQW)5J0bZaNaN%gaj)!L!2AU3(84J8`DAwpL5M>YaBh
zE6NOJ9Xfn!`_6q||H@}(&1#x5xpMcuLsEOqQ>%lKF*@}SY2*Y5n#eGW)~O9k7tgDz
zE)9jOlPAv%3=A)xe?ufI>)6rbhmW1U`KGyMSZPosIiu(suWxz%^&RgYIO?WS)s+?b
zxdpE4BWHw+aqfBkD7%y<1xUGhIa6C2!y)s){zGrRxu$$l$)u7JDScAfFbrVg%-ODW
z+mD{RGU#%lfpbtG0SrKfjEQkiRwCDc8bNau2t4BzY6c8BBjl1md5&e;oH0lT{?h4D
z06?OQnMo(<^bdI(b{upFHD?H((0uWnj)ELJo{IGi#;<hs$J{g_0R?>tPNB8ddb9{;
z^eaf~%p(gnY-3AbFvx@uM4GflqQKc6Z9*{9^<AHwg1kJ7BNvA2#=3e_v3M*eJCvJ~
zol5pfKPFA>dlJ%!LoS#A<iZNMUV;(#lkSOqM-qKQ^XAQ|tgF_VT;FGcYow1atN7n)
zA6paku?-Oz(}ci4bH*-Q=_xPH`^i(keB`0~W3hOBU0paUr?0E)AHVz5{CRD6-&N+g
zzQJ=yyRM4Y)ED@e;3jbHOGTz(G&WWh6=n;Qu3Y(G{gyp{@%7J#LNFXlWrb}+*m>D`
zFTb+#?D?x-{qpC+5jzwzT{jVAlQagr)EYo4DFGmo6ZYJ=Wtm_6(*4gpzw&SY{@=19
zY-q%9ZJb<Rm-piGwTl+a$SnwadSuRm>FYM^NhI8fZ&48T1r4BmEq##OVy+kK=x980
z{K(N`hX;m6o_T)x%#OzFyin5Xv8=GcBbP5EHgDeZ<l_%_Uc0#Rt*!6Ax8=|N^b0Lh
z8_|G-6C)sDu(1+GhPGu64Ucffsw*qo+uA<(;QV`QHm+N{_WpbCt(Y_^m2w=Z4;?#w
z?n<{Kg|wpxJ|`DV0FI2?h>X-2wP+xi&IkfI(_rjyCKwQ7jA`UtNB{!Tq&O3pVa!R_
zfa1jE1&D~84-JiUcJ|dys<A8)vW4KpNb3xN2LdAmAW-BoEg6e`<RqMrWg3I}RE7-G
zB;^1AO3Gjb_-)KQZwea(I^nsNEx6#Ckb&hoe4sBDON}sQ<Yq^RG?EV*K@sN+ks~(^
z(<Vhq0cXNV4I5na_FOrC;c7gd$j-~jE67WFuDBjl<m1}MtY$D)&jaHy9B|#e;Mi&g
zfSiIT7$GO%iXk4{_kM2J-n(!AjZ5ZEZJGMabI*VJp-*{^_seHqXlrSD{L#le>6@m#
zXV1~v>S|_q-0)m4Wf&G`%J+TSGA+|6D=C)J-?3|VQEuptyKajmy03M2U%D8-=kB{-
zc<F^T>vnwl!3VRVSx-OnLUUsSA`)mK0yH5=;G)*#n-*8vm)cY46&B^sY;UirC~t3_
z`ry4wTBkK^+kR}@&clE5$6uD1FvC(wc<uGgdHH$M+iOQxv$0OI(F8q{N(w`84v3VO
zmu;E$8*jaP;?&6*ZH=FO>^=>ygjC3idMW<wv#(t_KlEqc`of~69c_)(Bg2Wdwzlm%
z_jGn&D=RBy0<|U<=sY25t&~=VAwnT5D?7)HCoRiro!V4dQo7=`H!ff8Y;9@2+<9&F
z#=R%b40>i%p#V@^duRZ%P=IS1hZ{_DEnpgKNI)7$b2K<ZVQ@((H7G@#0TKyeq#e2p
z8j+!{D$W}3GzP1g1Zkk5l73TdRdao*>x}e|B(8Ri^p7|MjDq^Y(I|b8=OnF3k3y&j
zNHCt32?bDrnFSnvX^wADS`h|`DELTvgV#mEt|H%)j^{8Y2;qN~_omU7T*aAaMC`qD
zIK!Q4R+Z+GO7kpK0wIvVh`}-jYzBj&aktxUKm0r{FZ25O*}Y!(T94PJ-PrB6v5m1!
z1I9GQ7GMd)AkYMo5SoxmL#b4A)t&E|GIQ@85${KybMGmsgbFa2w>s8Y_g0;oCr{?i
zJ;aXq;`=&-Ua2l7X}44L!k||a?e;nXS5;matJq6iLY9ayO>LGsLI$l2Ca8)`^Ro+k
zpV|vvPTq2|$y`5F5j1cV1R0^7L2(uFb==n|hH}hnROd>BWXY_?73&R2{YR=fS)RSt
z4MUy?YKEvT@#2*wGf6DMr~dw?2OfU<s>{#0`l>6VZGGj|+irNn>p%1tf1T#`o$q{W
z=?fd&2j2JLFWhqHp#uw7UVh<Vuso5se5qi8hz8yVWi=!QPThXWC6}DaVc=Zzu}2Tb
zXy%R_{qk3Dd+)FR`h`2M`QQis?Cv`ryYm}&De#W-&SZ+@>VOsbz+|vi>rz#NfknvB
zy7g11ZQt6SX&g9s;6J_Zudcr0;+I}?wJ*it#O&ejCqI4b+u!=?^_yC&)6m-FGbEZN
z1a;QXaO;kua?;j~*IxUg>#yH=@g+ORDxl^rU7G999qxYQ<9`n%H-G*M%6ieI7hHG!
z&Q{yp^x4mU@)KX*^Yosn=G4hsHyeZ9Zok!P5ugZ%;6<4ws1dS=#%@@*{v}smrBY;>
zx$oiG&)<G;w=gOxlmUW|hS4TaM@xhO6v>gXWGqOaQScBssAobU=g<&K$Xw#9B~?~3
zXfus|REq?JKm>+(%ewZDUBA=0P*!1n*?;Md`vVx`QbbKt$s4%ioRjmG?JRa@k1TXL
z;u(dUuqK8Q#2Q8b^}?#9Fx0suLQ(`#Wn~4m){O)hwAK_xGy=l4@&UR!B_N|JY;$@B
z00bHhL7t|Ds0w{nU;)n{1|vs8Cjwd00Ca#9*jL_Xd5)xpz!)?p1+l^V7@4DVRys$I
z%pE;=IBz#LZQ3XT2J1q|A-T)<E5JHRUh1(G@;ICW;o0;0=p#5v)z?LtfMARP)pgTT
zXKmkl{SB``fIDxydwOc>YhS*t*Drtm=iWtVmsh%f`N5BMmWs<Rx#IDsc3u1O%bSga
zJvAEZDj$3ZhD@uK#}NZr7{n}X3peh(^MNOKKfQa;u3!7rU)s8D%fokk^QN0`e$RW}
zcHMP5x9>Q`Bork^UnRD|-bqXo({L{3sALdD0So|=MHU{E<)HMr$?o{Zx9+;@&eKoX
zdgSQr|NCG5=*-hMz4@nK7omKfMp}b79Q&u$a?cTFU!d8X`uHb5v$$0K+Asg2V7Te#
z+m||r&N=s#=7hWW!t>5K`-~?ZKk&&<-@1GEp7YK>vynHw4`i$=Wl2_7xegPwL$*;p
zY0Cz(+5f!do(CT}+N+e=0f2x?A~fdaa2XT>sDM^=8lMmh4vTTgq)4O)2+<l7Vi_5f
zlrW{5SE`;-YUKlnTh~v#>iV6|gtG7pi`AF!xZevYA*c}WWUF!26+03O%Zr`EhZklS
z%0b{TgvE2c7aUWFHmmvN)nuC1No-XXKSBnI>MAq?04%OiqYpc$Z6&FX5)=uQw8~x6
z69QKV!KY2;ZsDQVl2BHM4$PmlVdKnn+nUI+==6M+K$3#9U=6Vs<q#tfS0-ute!1(B
zUH3h5--VZ4{9~`Wesa@BUkqdj3pnvO{}0fNAr^_MV9i+<oC`6A=m~J&zCHU6%x~GU
z?$>|r7qjNXq5X&c_LG1A%-%!4_q)IIp$~od{PWKs0`}DJ@NKu=e(_ZoY}~wlr90c}
zdu!8rzn-Ks4?grXq5In159~O5+uPsz_VruZBE8Sw_QgvtIsL^ixu{z#F>+BAdETCA
zw{N}Wj?aAd?v>?Y!^Y{CUwi2_FTKpTn*LJ&Rg@)$G;M6zwB>DYKkFqgzWk=oec=Ni
z{0r51@x^Dq?ae>M`u&!u0DuDR-MjZ|cRlob?|sjiXPkWDMQ^?Cx=VcMO-!cC%L{or
zx%1kchYv45`uI~zi-p7HWMjsMD$Ubk(B;4g2JNuCQbEbu7=pw6YhS<Tp(pqED*)Gy
z!2pO@BbWmKz>xMshg^$8DKH$um<#}s1|qA<phh%^q(d%IQ6;H?AX4YOUg-8jB2qTL
z&|yYI%F?XWY#6&N>V**uibNnsNQ43eh$uB8`8X$26;`RF4v|V-?QC(??*s%|B{fi0
zu&Du6WC5dqTIFt{as<K%5>SAE5Dbu^JkMx$er0}n`Q&YzrY6?+dJARjx0LeC8Zs=P
z0G2GGi{68POR@>mKD_(DCqMeBbIv>G#n<fQn*V$C$G@ndApjLrB2t7w3|X40#JruH
ze#XYv-SBE(m9t0YKlX`#-1WpW|L1T1YO|Gn`-yMA`<kE1vMiMGYhStZQ~&V!TkrVB
zZ~Vs3PS0dM6ezV{25RWDx7>2%=+VosxZoW>^9Jh#OnmTL4?MAF_iz6Cy9dQQP%wn;
zW|Jd*^^5oa`Jevd>u-G7$=go3^X_~8{Dc39EU&uZC55bjA|M-5v}8z&vOw|E8=AlH
zi*MVve?KB^J!y;gK4|$uz3hdJjGdU8y#BiLFT8krSrt*LGtSy<NQ<&;HD>laJ^N>W
z{wIseo&V#v{_UA(oRYZ42S50+r}yqV<FqZWe${o`wrwt}k__<BH4kMd@~pM6)O+yT
z&m5RvDv;Dt2troX*51ro_qDl2a<!~d4Mqb1L<2*XO=PV|)7pC@bO2R7oRJ7rwXQ1o
zj;5fh0U+&mS40TWI+tWwYOE>@L=AyaU;sPX<=1<@<7cE05XlInL<WFG1E>R#8qSX}
z)ZeTNS?YpBb54tlNo|tniOUi@-EIMEQC7|*3gj?095@IQS(6kv`a*P}+ZmLSW%<NJ
zyQ+NTph9Wd1aPbf0M?`cq@qNqEGW2t|Di`7dGyqiPnq7brMIv|t}dk^Ii7cSB6eJ-
z5!O(8&wI|*Kh@<-s=%PELe|v$(c8~F?c8(EPV;myDE{cbf2ffsF&0lg`82BBdEcWy
z|F7Sq44tLwFF*8&>#upm-h+GJ`i?g&%pI~O%iIJA3Kw~TS6p%awbx#G&9#>Uc!lUJ
z9XND&)B5#SzUX{30gV!wqVJXQk3R5;Yp%ZZZEt(^wv#8XdeJ2@R(ITW@5^8IvY`DM
zGUuz1Wm#F4){-%53@F5j$-LQ06#^L<;&)%jRx|j=Jvb`Z#9egpc~uw)1jV4pNkYmv
zchvvhfBeIfHlO^z{o>osJO3o0>JR_u<NFUB*|Gi1d+&d2-~MOL*|B40X4+T?K6s8v
z3Q;`}J^l3D&0qf36SF<f5KV#!Au*u<qCvpXND~eK5y6565sw%V4X6M!fT}PcvqVB5
z&?Ik{p%evc(ptJxRcOSigut7pCtm%EomnE~pzL(z=G*QF;K&+4B{40RUUt!r^;6BF
zU#xWddk-xx_j^o9<Px;1Ilx4f$XIIubj@QN>pwL&WX*FbQX-0>JaK8A&{YK%mSHtb
z-QZvgAA}MBr9^>j<mi$#&(g>?qg0qIl>|mKBB`;YoOX*&XL)hCOEVMM*{5w=Sw0Gh
zjiDr@Mx(8uMNx`~f;eMAMWQ4`-MN(y{<lB5@`|f&{HYr~`Kt1WXo<f6(ERsiH8GL`
zfDYMD6#x;E+yPMK!%DGy*16kW|N5V7HX3)`cK^rz?$aALK(jGH;6CxWkDq(?jx$c%
zLXAt8jvn5$W$VZP=B8ec-}Hu8CpmNm3yr*K66_5YowLeN1-<Cv^Uph1OoB*BQI-Ud
zr_KAn^~l_O_jRwi!Sk|n4A^|-b=UmmC+<$HNz%#X<^Et0n$1ZAxr!KrEWEmKt(LAJ
z0344b^Te&*PYv;3I9eRk^oy$M@gM&2M^8QZ)L;4KcV!Lsq5r@GkM4Txsdv2P%{Scm
zs>|=b{eA!SkBdRE@0ooEjvT!7vWweUYjNe!)J)#%@q-WVeroqDBPcl`uqXzYKoAK=
zL~#Is1VkAU0a{pP*v4Ar7Z89!5F(O6w1&u<G)ko+##%#U2tgw}PiUGDXsF3)2}}sw
z>r}=h)*2#65+Vx-V#p3-*TVufVG%fXPa8)OQ3PClU(wY?`p@dd<ClX7wh|L!P_39*
z84PG@9g&OPvo@Fw3kn4akwC;~6tL;ECcZo9S(L|jAGrA39kCiLcK0}w5m-bBA|jrp
zVstD40MaChMP(v?<Eyvdf8RZ?dHYXZe%U2e<^QF|7}Rm@x?x9q#d@Sws==3yG~IgY
zmUq1Cja-Fp_vlMsd)=Yg`IYWcS;*mo2XFoIJ%8~2|M=k#{>hu(@%k(^cYNipFW>gy
z<4^WL@n_$8ZJJG0Ed74pI^qzUd8>{=hgc~Zkip|3001BWNkl<ZWkgLPgNR>0Jsnvi
zmm!9%kt=5NOY>VdU}w-hu>0Wq{_|fSI2<;t&wl)dtKRU&SHw`MkyU?twc+sl9Axz=
zh9X-4L&gLHU{dG4c;^?FR*wFM-+6b|EIZxa)Wn9HZ@zc#Q2%{@@K=BF*B|-qU;p`c
zz3nHPS$h8i-+KQa-+cC2H^1gJuYA>wFY(pVk=dpDAKcR)h~~K%sY}X80|JnG#I@Qo
z8b$UIV4M;FM?if7BM=F(=JB>RL#{ZMk~oWqNFv7v&kn(fI$V4}$cJ)vZUNwoG|igL
zW}au(pi!_U4M9LbL;;C4s;V(&eABn)KqBHO+eTy+7)F`2)q__>3G3C57|~ecY^nfN
zgl@lE`5+QJ`znUg`#~9cUW!;o5JqndF#Avxjpl?PBe}cpeemFsm5Ir1X+GI6<4SK3
zStC1%&8iY#nX2*<VK5k|I7c~Y_V=Is<V`o-3<kwPG{S2S7*<J7j%zyhI{pNvK%*Cq
zzm7eo-g7JHIKc^ye9^ktx!dpdi@ul8oX8gsKC`%ZbfVpCPqaSrvH$tvt1p|LZgz^|
zth3H|{IRF+yyL!K{l%ZV@a*+3zvgO*>4!h`+57H%Y9c?$VY`vE`-8%Vs`6fhD<7h0
zlH^H}5@?zliTdCpkF}bc%YIfA^wCfJ!}Tw}cxL^?9k)L)D3ag%&0oIotPB3`6JNXM
zo^Pe88@tRC@w9a{Jw5h%o&(p~b(P-<sw%wll`s9ZUwQZBG_e$|W<Gax<-ozE_x|?3
z`P4`M@SL;H{_w{?`Qn$pD4)u2c-<>L@@Kzu_UY&R>7Rc3H-F{--t)xl(@)Jkv475+
zNo7H0BLSmG04)H@V=lh-!A3Pu^(E`-ohl%LC3FM{A{oNe7{f*@71m+d<yudu^&EAW
z%o4#Gm8V#<n?<e;9-bfcy^18H&7>CRt)rVYX<My+C(2$W*0uM;BIsdpcunJ7FO@`S
z5Uhg8P&uzA-yPw3M=xuw5){DEGl3?lr5Ghi65}i2E|IcAR0twdjaDe*pjvTgY??<d
zlAKHF<*ms>M;8~CSGH`KX*C<xP`9&UunkHE66aW1$eM}P)Jks&&_EH(LYqlOj?|$<
z<T8q{Wisnn4UBI+b%d)DS<6YULZ^=Lo5$w$XAi;E|BoI?5K&wMt-%O^N($m50Ay)i
zZ)SqP%!bxwmu}y<apOY|-o3DN;63ko^P`V{Yi3jX(7xG!`rMuGdi%RS^0$9`<rSx#
zamLn19(w$%Uw-I|pMUV7Z#{LxYpyx{^o_Z*QL7L`;@ZPrgwb=AG?OVa@#-5c`t(11
z?ulK`Oi#BT{`QmI{_>5leTzjodDBMXhZ4}=eeZAmhyV26JMO&wn(NLZ9UEYyJ9?g3
zNnyMyY3)O-a-4jMd3LoJ127m-kZq@KU|>}n15=_dgOg92oY}PQ+H0@<(Es>|hkoi@
zH<<MsX8!d%-nz2VfAYy)kKVWUso9mIB`+f3pjvw<h?=Ho42?OBAVO$rNl6j_0RfK|
zc}Q>%2GBx=DjJxgHk|AEs7k6R!UAkC0vG@S6>Eo5bRz6S1)xM2BU>~GDu#|OuCUlF
zNn5E*WtgKD+%Lfb7yzca;0+9cF!x1r>k<ND6>FS`)X`LCw#Jg7A?uuyN@P*zoIw&4
zV6!$8Dws>Ba)2PJ3YkHZ8IvW(IU6|!AtZ-{fMU^1G@HUv#1kqDDUvlwYSTQ;08Ovz
zE_b><=+xwfENhp+Gek=&96-xv-punfde7`x<nqfe`-wN+Xj{24WDy)%V5l)Gs#;?d
z#~%48XmLzc!f_108%~0nkomcA%Hx^}pS*2ryWQOV%riT7oO=ER=RW$_V`ptY<K}<5
z<=y}4UC->@f79pg`lWySjz(kReZT)FmtS_?E3Vsl&;1YGeCr+SrzcN8{WKq=Dy$+r
zYtgzGW0EA7oPQ~ze)GX^_lu>Cn_6#w>y48WlTSXi`?5=SEG{0o>83BAx@~6X)t6M<
zzvz<lqF?KstF7^!ZejHH*a63136FaQtSNL65wWU#;xcEG!JzZyFMZ+Z-Fv@w$K830
zZhYNKeHjvJJ@Vk=@BhG`v?t9k{F}Ekn$LXs&cmHSSt+h6m>Yx6k*&*+$KAuB>@p&t
z`r*1Z;?M^GjimyEdIT?OvNRj`l7rebGXwxiD5Iho*}A@U!}U88%Vk+DFNZJPagT>I
ziq@Grm5Kmfbm_Ux6pLQx$lS`_BXfNLfgBJ)84+v2cmPxxv2N*5GH4Xi#9_0;nr4Nn
zAX4pT>M*{x_H=B6yoy9hYjyyZN+bm^M3xMo5{j*50xKV^Nz<f4AAAfPlYXzXm}iNg
zRg*N!sysN?UF!12b(5!T+t}+bN>NFysVX70HZcwi2MHwRbD#R0n@BF(c~PU0H}j@T
zlPZ9~$PM@rGel5`VD##%FH_Z`=<eC~WVh?z_=eZ4+dT8{|F8e&Z9o0WjT<)JamPKg
zbIWgk%LO~HyY`AJuX^A6|M>H_e)GjI*(svdn$?B0o=S`{Ax6;hO>e$o=QZa|PPVLd
z!shE=fAFt9@{j-h1Mhv;JKmz<)BpJcAN<|l`FB75+8fHk|IqKc#vZ{)usd37U;Se*
z|6I{~;NeFmCtE-J_Mc#1O;4@=AAfVxEjQo(ikDyZGw-}HlDqZpZ|yt0QVhhkQ(hUJ
zjfkwR^_rhA)kh{<J$n3Y06??=9Ks;WHl%4YRGs6Vfn^v@HDreHAQe?su(d1DA9Nx|
zV>6SuJkRQ&d_86aP(|v9$tadc%oU<Flpqp;0)dE#)B}=EBr`=sHa8S8V@i+=Da6=i
z21BW8v?h(LWG#U;s3MAn5|g?{?&E+tR0Hnfz*%TDvxTBmYLKzZE4{)WnO|8rb=%Ck
zsda;nYqb+r7J)o(#K4oysXb5bn_Zea^{kUNPEV$}JN?wtT#}g7sjxA|7*kc%>Lk57
z(GsoUkjL<*W2Ps>II?!O+J!!Wj|B0AfM|j+2%@9cyzbQ#jpkHq@{6~AAxX^DS6yCK
z<!5gGf+6{DAN;#ryAHhh&2M$Kk)*)PfPxfPWf@ncMx3<*+#M{mr)-oyNK%$``st^1
zdVKdCyIyhqtA6IE-nw_+AAJ3u`?jC=`ck@jyogafp&m!e&(tJMI*y4MW_3=?RDg#_
z5lK>~!jY?1JN@Z5-}t7VQV@0trCIW&TfX#_uiW<Azww^)&ff~Q|Hz|He*J+*dtSgo
z=vQXMpM}OiolRyYTBBRT5mXgaL_MNIs#CqAYqkkNE$C=Od}L13w96vGlsG~HVbGc$
zN0P*f)I`WiL@sG+DNwU|fD*aV`zRclt+UqJEOSyYnBiWFCBzt<O`LULT;#~CEG3E|
zV-S%ei<GJ)0y3%+sIkj+qO4xc>RF|3c|x**4Ja^2QB+YHafK5ZiG8jsxiCi(=A`04
zfXysv=30iX%}5k{gvgL)X{XbH*klH4CS&YB{`8UQeD0hx&r;&~rCA?>GnD78qVRyu
zsr2WU7xo`b8VOW!-G&WQCvD7{xvCEO16-4kI;K~Qxw}7HBdW<c0SOE#;MB|%Dkz6<
z+;i_wzww3*o2G8M>7OE3|NgiB_b+|vp1=O+7ys$juL|OC{K`9>Qw1sgAT<+fH!|c-
zP%sM0pa@8TBU!g$^Ym+PxctL^^Qm2r9lGeeb7yDE&70R(zHklWi}3uH_-w<qo!R$j
zqd1cSFd`x0aC%Fmrp7UVhYlV7>@8os=IV=2K6R$3RxHC~PwYFqxH9k%Q^JgqM?pm#
zo7KjB)YVKTDAv05&%tMoejuWaF&JZzVHAoOhev4*5)lz*R#ifSD1cb2fddkQ_Nyvt
zf`*JS)+A6v)ka9X5y!9rgqms<L74;D6cG&>5mytg)r}0ppxtnjuP}n%A_+)6_1k{5
zN*ZG?h>)ry5EfCjHq)w9g~$LfP%@PdMk=F}*>q|m_uMOdDq>2{IH;0Fl31u>FKf08
z8D`5IJ0*YR?p@o@oZhx&Ln!;*m5u=_23=>GsmXn}|KL6MZ`!sccdpmzEtLHYn>Wr(
zPbY~JsjGhEN63F1;u8p94XeP+?|jEwrlzJ3AKv$s+wXkaTV8wKrQ6qU*!aZLk6n7%
zg;(vo__WhE^~?FZm6+ox3<H2*tXbBF2p@}T$~V68m1k@{?eG5nrn~O>`jsy_`}*sy
zSRO1ilYAHn{FgBuiRDHnMgUUs0+Z7-Z+hb^FFfz8Mk^@m>}>CWhxX1bh6+GbQn%Vx
z|2#(ID({md#}rgpL`R93VY3+HsMcQ;snbQZ*w`@Uhk&4+P8YVcktj)=HI4{mY*g2Z
z@AYSeBcW5ED3wZM#GYzaQx8MP2tC^;8j@xJu`&x=uVjalMeSN3i>RtKWUY%F>IO!w
zF<A;6i?VD?w%5(9n_Dcaib5=)DzoNvt2Ir~K_DUoNeNBAQ#L2<(Z!{sb4wSTwQbW$
zCwG>Xi?SH>`;FYLpI+Z+CyR3n_YHcdoOVi;+2w9$!}|4`H*adU+aerd6#kJIX}YQ%
zpa?+2or6k@@uZValE7t&H@xb~^Upt{=*=c67NPU1S6#M#^Atb{QtKCg2i<h6iS7Wv
zB^2Ty&GAJqKK;t8ex=_X<avWkXtvYHp1#vbPSC#BQHsNYd<7CxR8=4%vWeZf^Rf^-
z0Xm6k?%K6~*RDgsBV{cPeWDCjGr7knl2{!fC-j&RF@~7u2GB|js;TNKGX?;FbBVQ%
zY#3pkl*qua;(piwy+OZTZmf028XEGBjdsouRg?NsMS`&zC@NRpm&Q6(Rb7kU)POIn
zhwrh(Aw;#1yE2O<>|}`KpdVuqV@af>eZMr3HBw_D20%apOU4lSh`~@5dwJPR(=>Pe
z;CqS?1Umg*;#$@vnU!@@`NI6H1Vb~eK@99MF=p4kg{_60vUw)U-JmyL6lEYz@&p`I
zRXF_g{KDeOy7iM;rP3`nZrz%+a?Fx6Pkg@sQ4ozjBuNrL1cvex!z>v908q`3Gn$ra
zzFza39n0EIZ&>(vVzzdI5l0pPAgDzj2Y}F;ZocfgYwIK0)9sa>_Dh}$Mp2z@L@yTI
z@#hO3621@#AaIBv7*wq_XrYx%h-xWb5eV$_4U&2vTW3gDZ;+YCJfT&`Y%N*x9n_M>
ztX8H?#=Djg2N(eaAVdvO0U%>vh3M}5<}(W`%$!gnNt#MgtwtJ=9MRB$Box$GryNEb
zP6dFvKn64*Sj5p@d^o|0XjEmR0XUtRoS0u+HkN<^)q(~qtXhR~APQoP7)lZgp&-qL
zOGPJYPzeaiK`aMVmgJ3;8ktoUW^bHBAQfT|<$+Ms8k;sISz-)PNBDap0<d*@x~5~R
zm%f@|u6DvyWi%j%UC$;iPYnTT0A;Ls+X@5=V2IEfG^EC4s0k60NdgzqLw_)6x7IbA
z4Ig<>1r{y6R|zP==2^4hx=zbjiV(+21S2}{Woe~rksZY?o3<EA%5u;h_z((fU107V
zS+4qB2)tqQrm`&UMDz4>wu{EO#l^BeIAz;bvK9?#<iODyD*%K;K3f{O1V1br&3p*Y
zorXL8-li>$#ifPKTh@~qKmPgB5cO{zduNnUALThua1}as#W+q<<a@GbeRg%+;!v<g
z3BWXx_5+XYeQMvK<$-6@(3;)NCz>3GDi{@p2z>>@<AYdMK?TRQFCr3%q?rX2kve#R
z2&S&?WY!QPiyB+g9}oc=a#F`olvKf20Tfl#)Uq!1m#EamjHC{SA}<VtsyYg}n%YGi
zpSbHC;Bzm2EEWPpWC2LXkfJqWlm)oHRv%TRt`}`un|L2W^pT4gL=^@_kK<Ik*{VD!
zde0cedmmAQ_f|n#ttQ8%5K99Qlt_&T^m<(*Ve`7_d%wBo)U8{#Y~Hxkne7+LS(+t@
zwo<1hFC3olb^E4~Om10!#`e>a%^TyM1GjwsOH-}(kG<k$>(;L`WX$Ns#zz{Ah$H^R
zEzj*Q{ld=xXrn=;4*&sB|9Q74&u8P{wG&&cz6V=HKd#Ol1WFvtH}Bu|^pRPQ5K~0}
z;*wa8Pa801XvS&AU!bT5(IA3~=FKJ`i3CG-SXW6#)uu@X2ntGss)}SRSc1CHh7gn)
z%BliH5wVtr{*K7V7a(ggL}ZB}7D#PXMIfRKfeaY{P+l8X%u%%toE|e-)FrE{L10_>
zfx!$hQB_n04uTQ@D?;Wd;*2rYT2%n3R884e*H9516h)RLaTL!<lSWl~j?n8BgF(@1
z<W<qBBqoGG!4erX!j*_^w`ZJNy6@pb8~3kVwe#G`smbM)`6{qeX=I6%+$mSQ;m%<2
zK>NN6{KaRSb@s()?f%+V@BEwH`>uZRi>`gyODw8iO8|l*Fb*d_^CPg4^PxE9l+CI<
zDEl<z&#!0w?-zUcg7(8oISSyjFqJfWr1$XS2j-U4H-HhWloU_My%>`$df}@dxx|{f
z1keaaBs*GU2$WjQcIpyUzZwY~h1wMr2|*RS4*;MlW>kZ(b-*8$YK0$FRT1Xep+!U*
zryW0rf~`{JS{iM<@kbuxh?H)7LkO)kwh99u3J$ffnh_yU6G9<c<yqSr!xBXcwDsx=
zi8F~ymb>#s=@}xDT1qTssH{>>PP7mS)yC)z5<&tXgzTKD%F3DyK&s%MeEQ(}_3e|k
zp49Ib$XpC6n<T*pL^J63d)>j}(S@vtPdu{Ac*)2f+`E78?!C=4-E!K=5@J=9?PfDZ
z#t{N|MAK4JWFC`=U){je_b+4K$hca~ap@w*&u~m`YV63>Q&@wDN~DHRhKX1`77Dgz
z&m9<A$Ix|{(lEx*7#+iLFJtvQ^})|oseK-h$M+Eq0RRw0tf`<u=_|KAc<a|6nC%N^
z7Qr|TCIVPcn~db7?Fj9G$^)oVOC}o+?h{!=W6+3Jsu63MbyHU{BMs@M5CF19W2IXn
zX$>I(VGuP0>n8G-zVs63xEvI{mH3t0@2><Iv6ekENV&69O?T-9+m)+Mr*~j}<-q(>
zB}M^70-~WINueqPV^UQWjUtRd#thTzpvoK(3DFTHh$JFNby)$ju(8Ri1CNMSFzr_Z
zGB!<HWwn?ksOngVg&TP$(qiuU;L|jzx9W*)L@Y>k)U`krRH8yuFe<1FMd9Zcmu4o~
zBFX_O0aoBBs8PhRNS-@bL1R<J{((aahi7NcJpI&mD_dTiU+(stL5hJAl0jTKvUKO6
zyQ_ZDPBRrr$;=%(`i0Nl`p~Y&uYbkMrl+U6E8QebRt0;HYsU<X@xa&j-{GFuMw9(o
z8sM1G`y+^SIbqY)yAx3nu+AJlH1~}MAD>$ZnxU^^?#M(?3+%r0sh-ymEy619Y3#dI
zMMQ_*oe_xRK|}ypobQAXi0GIGu7mEi`uZ{7f`n9yMZe(lV2(saxb{WSj)EM|J|U5{
zZVW=JB4PoE1z0poO)G0Um&K@M;1D@RMnZ!*0ullt5!H2XDTmVg(o9Skvc^UrFb0gO
zieWKC+F9v0(|q%WDM!>9#DPZ@1wmC7iD}vZ@|M~P0n{`bt$XhO_WF&}=kM6wYEK_I
zxIa`YM2t$AaR7jXG9n?g&MCm2Cw71MnSIw>v-6^zS7BKoj*7>Q+dyMG7PC6c#t!%a
zY-85exnuteaO^Pq0gUh;j@8~2S?dg$XP!B*Yww<Z2{6$zo=uG8AvAyq%=c94gi!No
zjMLcz0H{VC0tnG%wj7iS0%omw8!czZsPZuha6m%PIt)AZ;D;+DrbLEcs3xmMuGFza
zN6uQuF^=y&>t|Z8y<z-qQL8%Ch#-JGO+^$mF!wn~KxeE4lPIVq0#f6035YDHpivTo
zsR03SwxKvs31CPB0F%hvFG7+eQ&SDk-N033FA71x3knDj187hlRB}>tDoc+XKD>PJ
zz`YlrvwiE<vpOsD-OeFlsY(xo5+VUiG@FDNnSJmi;F!Mlr91Dr>;Bii_BE%Rc^a!0
zp#-bKVutOGwXhqn;r&<p_c62N_>=suR+-h{xE}LS8iI!uh68M<k9a~uYX~u04QA?U
zyj#ago^<?5M<>K%FaHGw@UeN0<J`9%e{ZFLQPnCKR3_kl>32PGbZ#X^L!jU+K?R%)
zIZ6@zkTzQx#MPw2GHewUWC8*J8Y)yr0H}S%I;KZMsX|p9N>n2$VuBJ|nJc;xOu|}=
zY$zeL+YLvA?41&-h(;F2b&?$GA{$WvRzU>8I$Z@QQge4xjZ_3xAVE9oE;RuxA=ChO
zQIL8W94{@Zxk-lDCBWL(tN&>YpeRV_tF@r)oQcAT6>C5^L<vaN$DnEnKqx^~3rQnu
zxFlwYoor;_dkvSCq7|2b1|WnepjuUObZ&mbx+zspP^l;jR51cU^lD5RS;%ICa!`~$
zPbWgT<QblPa{tjIi>IHqZOhgjbBp_+*LMav#Ae<IJ{W`sIpv@>(Wn`^!BX*=f4Jqc
zE3epb!MPJ#W;)&ZMkDjSf?5uEc%NgNqE$>PuI<jAF9p6j9-hy~ljF0OqbkUFsll<G
zconV*Bi8%p{&n>mWff*SJ`s;ON@FKGX6%heT#lPL9DDP5$i~Jixz;`}pu%btENXNH
z_Uxa1@Y@GFUDbvosQ^F|U`PPKN}zH6EM-I>%IniADyw(oM&T<Vtw#6i5FH}ai77y0
zK>)*A8D#?CP_?skE=0;Gh?pT~ny?hWY#5Coh(@iL(>U@MS;c??qNo}~21P<ENTPL`
znG`G_BPl9TBFX@yL_`)?q|V)e@UX;OiPpl~3K}_%@@Dz!02L8Sgc2n(cwbms*MU20
zGC{-I7n3NkN?Dd<$yB}wkyOwE1=grCIXyM-y(Duy-~hm24H{J-2}KbPAL(w{yk&ZF
zeW!Owg@u8mFm*vERICVyR3XOwhxTq-KNYGrVF^I93yTZOi<49B^LL!qYSPosJeVh0
zl4QQuPfS8cWYdJ$O9aKlfChj6z4z|fx97ZzFSy{6^Q)=?##$K%Pyv|G{b+>xzYF`(
z-Mo#}ycu#a(u0pawddfW?|B<`{4dd{ibQoMVMQP^0H~TGdQpxsk|kqdh@cwHFV>_q
z^kwvz^T{xnfOT+;5Cum%LY7DgNHpqb4XRC~LQ07o(J}1EHI@s8bJp67sVX8B0HdVV
zT3GcYRm%FRR3o8@k!vz>L^2krE+$vt(904-QUWj|RV<x;|IqAFF=&%?Vk$QljHyr=
zR6y9;%s>(X%+D`pNn@flow+o%#u+e_^arI6rK;A+z23k#8|g&5;eCi)I0u1YFyOns
z`R(0%7q@IVJImHBtn`mA%+D<?7NJZsXRSd|BbpdQ_NjrT*`uHN^i6;HXCGUh>$TEJ
zVuxD$1w0-n{O9ZoKS-02{RoaX8R|=@sy%pQ<)O#-FLYj59rwF3RR!=OQB_n+80LtH
z$iPr9o&kXDvoko>8Z%_w9uKdBsHlkO5GX?<d8M(~?XYTQd<7RCa>&v6a<3rbYg%F)
zR?E?-J{S=lfKyd#j2WR5EGe)85~#++IZ-LAK1*~i6UkVC$fPDi8CcZJ83hZ792pV3
z_k(^pGd<&dIWyT13C$#5Ug<>fh%rW=WH2|syljefGgAg^uip!0Z>rhs59Sd`Q~=mH
zXyy=toV0n<?A%e8q@oVU7k+?d;_;`C?%69BpLh0#_3LM64-{dcZCXXuN3_l+!B;Uv
z1yzpI6Kx;#p>I8Oc>mEGZ+zWlmtQDY9i2NcvtddUL4k<6z22(k@~~|EIkqbGT}S_)
zdq7>_P^bS_A%;VozzO%E7aTk%9+eqC+lhSY#G^0c6VrH8sGxD^tLR+o;cxGG_{nGb
z0X%~SPdOqbI9BHZ>c>t903ck9hlG%b1Zr;6G5zT%A^={*s{$E807C{;ETsg>B2sx!
zRv5}kSOm~utu4wbPYD5?b0C07#*mN*D<N8AiO2_^l87oIh0qJZC|N*I<q!nP03rez
zlZXU>G{j)m<dnry14gS@h(RPG)^eUTp;cgx0f)>yL}at15x6jz5-K7#^X8x!BrcD_
z3PwRt5U`wVx29T|551^d6Kx2)P=#K%XJBG!aV|l$Hs8E)-9)psxVVs78#7I^ws7q9
z7ZGJ<a*|^qZOStUlE%sp!E6d4K(|}9v#@S@<8pUCvR6U|Ace?DHRwP3)ZxwR+gmoD
z)M%V^<mdt6Zk|p$vWZKYNmlwwnI#4bCO7T5gY)ly|A)`nar)1^;|*tBc;3?DA%QAQ
z)5`m)$%&#ozOch_I@t*x_rIJWk@4PJoA!F;6T1)3EfrOgN#*f4v(oq2imT{H01zqb
z0lGHSN5wM6rn(w*0EA&`5ddIKn|YYf9v-Dy%i9mrlFTfiL{^YSWi3Qxlxj{CC&G2E
znnrU2jqwGAScx!^OI#8;j<n66Emm)hA%F&=0jVOhb2iVKgK`jAYR(`;VUg4(dE%y;
zlRnO))u<_82CAuPve#-Ll>nMPnH4f*3?&H~vg_AP6{Rn#UR8CveV%INn`W9Ty>6pn
zswe`{nv4)aD3_L3d>PhHPaC^2f*e_#6@Un(h~`<thw#k714rhLZk(Cee&(5jL3gD)
zUrLo&lP3-k5zL@p8Zfy{J5>*(KKkgs-~au;xa^Aaf8q^4)}BsQR+gI0W`9upz#vHf
zD;b&)io|9I4jkEcaIW8nN(uD)CfFLYx^lVxx9ZT{k}<HisuE(FBxO7Xe{YR7#vmRO
zys4p2A}T<lI62XVA<#oY3@TuZ9e&G@^Qo>OLn4D}RaGPi8UQ3brbwceI|Fbd&(i>a
z2tLbMA&!GO#2MN9;6sSb9)X>F000JdNkl<ZW~19LS)zidM%7Xk27~3YEGAk_1VE^a
zdK5*aspe!g@CcA6(-Pg{;_}kcLa*ED^%nd6qN==0T_bOb%1WoZ+?}78$WPk5E=`Rg
zAY^Bg#I``QK@pA|?)Hl!O_LZas3BD18KO`r5CCoA<1+{5?)~Od94FVW-)hrVzle(~
z-O>j`t|<J{a<3|i)a9vbrZ!uc@80tHyMFt(|H~I|y?tt8$~l)NYr5v&a}TJ)W<MhM
z$se#CFUpU@F3ur5{=}YV4jd6mAx-spKk=PxH4*Ww#;hwd>lcx&L$71S<2C4soO1*S
z!{n8M0*yd3`m7Mh5J#b^(rDy5B%_kZEUJbK3<D#ms?1TCnHh-?jjF1!NQ6-WdiA{4
zHi&Xn3DJ+Fbn6XdU7tD%%m^zJhDfD{2;LUm$%$sGg+5@#9<lb^(5BO6)I>u&w}UdW
zH6Fa7*!NwqYEwg|H`Qnkie&+4Po&*$Wocq@v5%xtC}<wIh(V5)gLBS06Kt}w)M@25
zL?|mYwi%_t$<jh^X?nv}?6U)xf*~ovp-mu!N;Lt^SakpV@_g_9ZJRfov;DNGnQ-XP
z?)hHV3l;^c=A|#oP)$v3o}KSGoKWsm-N8ry;;ToVUU=8P`thWJfFO~q%a}rtp~Ay>
zynRF<p*)Tq(Qy!m&``$_SmNqq<mYU+XiSw8#(bU=iE5a!xqK|RkE_YCv7ME^V4d`F
zw_#)5MMaK-*~Jl$yfJnR#Hc0vG@<4B-h+=ky;9lAM?~-PgzEH$sB>$ZR*s_>Jz1hr
zI1<->8&MpJJ_x8sOb`uGy(~mkA>ewo5+qUMnaC!Ht{C(c7&s7A6d3_6AQ6aaS%pZZ
zQ<Y*sV<1QjI5I>WiehEMx=D>e00gwC28!y%D_Ic%fx2$G4&I9}p+!LFCTb{f6af%x
z91DvGKtM7E6Cw({mU=Ok0Aii2uJ`a-vy&S#q7Y(%*h;M7$hBO&K`<b7o=+6&NM@3{
ziHTNK^=GCVF(wBNt%y>ikvE&!(#nxW-Y}SSy4}h*5Ge}!5ELLP96G$9V$ayJvE9z1
z*F4W7hssOf0!c#@>yl>PE(@zdL{^OlPyhxXmSHy&<++9V!?Uy7Pv3mrj&t_!e{%1>
zd4pDjSVEe(7=p7&Z!iEL!pz6s%+$pGea|%7cKwEpHgP`q2)-_oJdslVXP1J!@F#vi
zhR^v4-}MSIvazU!KL0K0v%dlXQB>@%#}Dk@H`nhKO3q~fVSGYaO$NRIwBp#WJ^sOj
zw$8haMf>U;BDY(UWjPC4vkMyn$+IlaGnEhmM`o!jQEH+BL?l3gEKd<ZB8M0vi`Io6
zqx)45)f)RM^+H-NQ)7yH!=@uz!_Yk|Cj6{<t(NXA4LQLCWDtWP#4OE2=pqnmLJ(17
zh|v)yE(I`z##yVXNoLawC(>r8*D8B<d1blTXiiVfv|35KowD?NDX0!rKrNY6HT1gv
zfIpZ5ubZA(Se#`k0SZJUtfD|s#-m3Urzcv*mX<-$Dw-$(Kmo`aXPr%~K?0TmsO;Wz
zaCUxf=N0G9Ol>)EU~XY?g~bE;!C*mQLNumngSkBC?2VUSx;<!Taj{tGuB@BcG%+=u
z5(Qy^A7+)>kCq*ip8jqcAxmu0(MKNJe`vN_Rscpo27n5qt^b(F;|tcoys#0v8c-qx
zDy!_@7-O`?Du6K=0iq&;9y)w*rMuk90TDwS5^~oiFn~aWsMu;Z0g4d4uQ-NUz-)L{
z0I5@FBCN{JCZlLS!D#MKRRI}i_#D=}$QWa}IVK81BP>KPM5w?)2qAHn5G)#tKxi$c
z2F;-8&Mz((6<gB+NS2m6#h~nT7MY_lF0zk-msaMhDx|49^Ng)&ZW0U5p|g-W74CzE
zP(r68hh~qmLc2XdCNg^iRbnAa5^G>?VX@h0Au6B;P#pr>5rC2;X=G`$+03$3R9Nf!
zclzc74<9%*f7Y32Z`-=9(Z~&fs)n$F7}GQf(ZA^O9nGfUFlgk&v7DPbeB{vHvfnWZ
z1ho{-_um=*|7SX8C;ll^0eS$1|6m`NmWrqMt*mq@LQ^0}(D4B^l8Y48e+JUKI$5&H
zWw-if^x}ip2xg=NUDL)T&RA;!QKVjl389vgA7&Kt)FG*eas(Evm3Y?*%(Wh94B$r~
qo@ZxVSE2V~NOV#4tFLF>!v6;r()1$c&O*ij0000<MNUMnLSTX&o})DY

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/pics/vgl_demo_linux.png 
b/scriptsrcs/wamr/doc/pics/vgl_demo_linux.png
new file mode 100755
index 
0000000000000000000000000000000000000000..848537382c321fd713caf51786031ae5e5647c5a
GIT binary patch
literal 5792
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

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/pics/vgl_linux.PNG 
b/scriptsrcs/wamr/doc/pics/vgl_linux.PNG
new file mode 100755
index 
0000000000000000000000000000000000000000..65ce063070aa4f0d159cd6a8f8e3eee4c4eac191
GIT binary patch
literal 25976
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

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/pics/wamr-arch.JPG 
b/scriptsrcs/wamr/doc/pics/wamr-arch.JPG
new file mode 100755
index 
0000000000000000000000000000000000000000..759ed3888d02da457451e225c07866dfaba34cbd
GIT binary patch
literal 131955
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
Y9tnV#@_Quw9tr>Hul}D$!q1ui1(TyoDgXcg

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/pics/workflow.PNG 
b/scriptsrcs/wamr/doc/pics/workflow.PNG
new file mode 100755
index 
0000000000000000000000000000000000000000..2bba240ff51e8c77786cfe1c491fd80a61fc867e
GIT binary patch
literal 68967
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
GLSTZ1J_x`7

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/doc/release_ack.md 
b/scriptsrcs/wamr/doc/release_ack.md
new file mode 100755
index 0000000..e724664
--- /dev/null
+++ b/scriptsrcs/wamr/doc/release_ack.md
@@ -0,0 +1,60 @@
+Major feature releases and contributors
+=========================================
+
+
+**May 07, 2019: WAMR first GitHub release**
+
+- Contributors: Wenyong Huang, Weining Lu, Lei Shi, Li Tian, Jizhao Zhang, Yi 
Zhang, Daoming Qiu, Xin Wang (Intel)
+
+**May 17, 2019: Application manager, WASM APP API, samples and test tools**
+
+- Contributors: Wenyong Huang, Weining Lu, Lei Shi, Li Tian, Jizhao Zhang, Yi 
Zhang, Daoming Qiu, Xin Wang (Intel)
+
+
+**May 23, 2019: Support AliOS Things**
+
+- Contributor: JinZhou Zhu (Alibaba)
+
+
+
+**May 24, 2019: Support memory usage profiler**
+
+- Contributors Wenyong Huang (Intel)
+
+**Jun 11, 2019: Add WASM APP API connection**
+
+
+- Contributor: Weining Lu (Intel)
+
+**Jun 10, 2019: Support VxWorks**
+
+- Contributor: Yiting Wang (WindRiver)
+
+**Aug 1, 2019: Add WGL graphic user interface API**
+
+- Contributor: Weining Lu
+
+**Aug 14, 2019: Add Docker support**
+
+
+- Contributor: beriberikix
+
+
+**Aug 14, 2019: WASM IoT app store demo**
+
+
+- Contributor: Luhanzhi Li, Jun Xu (Intel)
+
+
+**Aug 28, 2019: SGX support**
+
+
+- Contributor: Mic Bowman (Intel)
+
+
+**Sep 6, 2019: Mac platform support**
+
+
+- Contributor: Jonathan Dong (Alibaba)
+
+
diff --git a/scriptsrcs/wamr/doc/roadmap.md b/scriptsrcs/wamr/doc/roadmap.md
new file mode 100755
index 0000000..4cff8ac
--- /dev/null
+++ b/scriptsrcs/wamr/doc/roadmap.md
@@ -0,0 +1,16 @@
+
+# WebAssembly Micro Runtime Roadmap
+
+
+## Ahead of time compilation
+Status: under development. The first release is targetted to the end of 2019.
+
+## WASI support
+Evaluated solution.
+
+## Data serialization
+Evauating using cbor as the default data serialization
+
+## Threading
+Not started yet
+
diff --git a/scriptsrcs/wamr/doc/wamr_api.md b/scriptsrcs/wamr/doc/wamr_api.md
new file mode 100755
index 0000000..7b46e22
--- /dev/null
+++ b/scriptsrcs/wamr/doc/wamr_api.md
@@ -0,0 +1,310 @@
+
+WASM application library
+========================
+
+WAMR APP API includes built-in Libc API's, Base library and Extension library 
reference.
+
+
+**Libc API's**<br/>
+This is a minimal set of Libc API's for memory allocation, string manipulation 
and printing. The header file is located at ```lib/app-libs/libc/lib_base.h```. 
The current supported API set is listed here:
+``` C
+void *malloc(size_t size);
+void *calloc(size_t n, size_t size);
+void free(void *ptr);
+int memcmp(const void *s1, const void *s2, size_t n);
+void *memcpy(void *dest, const void *src, size_t n);
+void *memmove(void *dest, const void *src, size_t n);
+void *memset(void *s, int c, size_t n);
+int putchar(int c);
+int snprintf(char *str, size_t size, const char *format, ...);
+int sprintf(char *str, const char *format, ...);
+char *strchr(const char *s, int c);
+int strcmp(const char *s1, const char *s2);
+char *strcpy(char *dest, const char *src);
+size_t strlen(const char *s);
+int strncmp(const char * str1, const char * str2, size_t n);
+char *strncpy(char *dest, const char *src, unsigned long n);
+```
+
+**Base library**<br/>
+Basic support for communication, timers, etc is available. You can refer to 
the header file ```lib/app-libs/base/wasm_app.h``` which contains the 
definitions for request and response API's, event pub/sub API's and timer 
API's. Please note that these API's require the native implementations.
+The API set is listed below:
+``` C
+typedef void(*request_handler_f)(request_t *) ;
+typedef void(*response_handler_f)(response_t *, void *) ;
+
+// Request API's
+bool api_register_resource_handler(const char *url, request_handler_f);
+void api_send_request(request_t * request, response_handler_f 
response_handler, void * user_data);
+void api_response_send(response_t *response);
+
+// Event API's
+bool api_publish_event(const char *url,  int fmt, void *payload,  int 
payload_len);
+bool api_subscribe_event(const char * url, request_handler_f handler);
+
+struct user_timer;
+typedef struct user_timer * user_timer_t;
+
+// Timer API's
+user_timer_t api_timer_create(int interval, bool is_period, bool auto_start, 
void(*on_user_timer_update)(user_timer_t
+));
+void api_timer_cancel(user_timer_t timer);
+void api_timer_restart(user_timer_t timer, int interval);
+```
+
+**Library extension reference**<br/>
+Currently we provide several kinds of extension library for reference 
including sensor, connection and GUI.
+
+Sensor API: In the header file ```lib/app-libs/extension/sensor/sensor.h```, 
the API set is defined as below:
+``` C
+sensor_t sensor_open(const char* name, int index,
+                     void(*on_sensor_event)(sensor_t, attr_container_t *, void 
*),
+                     void *user_data);
+bool sensor_config(sensor_t sensor, int interval, int bit_cfg, int delay);
+bool sensor_config_with_attr_container(sensor_t sensor, attr_container_t *cfg);
+bool sensor_close(sensor_t sensor);
+```
+Connection API: In the header file 
`lib/app-libs/extension/connection/connection.h.`, the API set is defined as 
below:
+``` C
+/* Connection event type */
+typedef enum {
+    /* Data is received */
+    CONN_EVENT_TYPE_DATA = 1,
+    /* Connection is disconnected */
+    CONN_EVENT_TYPE_DISCONNECT
+} conn_event_type_t;
+
+typedef void (*on_connection_event_f)(connection_t *conn,
+                                      conn_event_type_t type,
+                                      const char *data,
+                                      uint32 len,
+                                      void *user_data);
+connection_t *api_open_connection(const char *name,
+                                  attr_container_t *args,
+                                  on_connection_event_f on_event,
+                                  void *user_data);
+void api_close_connection(connection_t *conn);
+int api_send_on_connection(connection_t *conn, const char *data, uint32 len);
+bool api_config_connection(connection_t *conn, attr_container_t *cfg);
+```
+GUI API: The API's is list in header file 
```lib/app-libs/extension/gui/wgl.h``` which is implemented based open soure 2D 
graphic library [LittlevGL](https://docs.littlevgl.com/en/html/index.html). 
Currently supported widgets include button, label, list and check box and more 
wigdet would be provided in future.
+
+The mechanism of exporting native API to WASM application
+=======================================================
+
+The basic working flow for WASM application calling into the native API is 
shown in the following diagram:
+
+![WAMR WASM API ext diagram](./pics/extend_library.PNG "WAMR WASM API ext 
architecture diagram")
+
+
+WAMR provides the macro `EXPORT_WASM_API` to enable users to export a native 
API to a WASM application. WAMR has implemented a base API for the timer and 
messaging by using `EXPORT_WASM_API`. This can be a point of reference for 
extending your own library.
+``` C
+static NativeSymbol extended_native_symbol_defs[] = {
+    EXPORT_WASM_API(wasm_register_resource),
+    EXPORT_WASM_API(wasm_response_send),
+    EXPORT_WASM_API(wasm_post_request),
+    EXPORT_WASM_API(wasm_sub_event),
+    EXPORT_WASM_API(wasm_create_timer),
+    EXPORT_WASM_API(wasm_timer_set_interval),
+    EXPORT_WASM_API(wasm_timer_cancel),
+    EXPORT_WASM_API(wasm_timer_restart)
+};
+```
+
+![#f03c15](https://placehold.it/15/f03c15/000000?text=+) **Security 
attention:** A WebAssembly application should only have access to its own 
memory space. As a result, the integrator should carefully design the native 
function to ensure that the memory accesses are safe. The native API to be 
exported to the WASM application must:
+- Only use 32 bits number for parameters
+- Should not pass data to the structure pointer (do data serialization instead)
+- Should do the pointer address conversion in the native API
+- Should not pass function pointer as callback
+
+Below is a sample of a library extension. All code invoked across WASM and 
native world must be serialized and de-serialized, and the native world must do 
a boundary check for every incoming address from the WASM world.
+
+
+<img src="./pics/safe.PNG" width="90%">
+
+
+Steps for exporting native API
+==========================
+
+WAMR implemented a framework for developers to export API's. Below is the 
procedure to expose the platform API's in three steps:
+
+**Step 1. Create a header file**<br/>
+Declare the API's for your WASM application source project to include.
+
+**Step 2. Create a source file**<br/>
+Export the platform API's, for example in ``` products/linux/ext_lib_export.c 
```
+``` C
+#include "lib_export.h"
+
+static NativeSymbol extended_native_symbol_defs[] =
+{
+};
+
+#include "ext_lib_export.h"
+```
+
+**Step 3. Register new API's**<br/>
+Use the macro `EXPORT_WASM_API` and `EXPORT_WASM_API2` to add exported API's 
into the array of ```extended_native_symbol_defs```.
+The pre-defined MACRO `EXPORT_WASM_API` should be used to declare a function 
export:
+``` c
+#define EXPORT_WASM_API(symbol)  {#symbol, symbol}
+```
+
+Below code example shows how to extend the library to support `customized()`:
+
+``` 
+//lib_export_impl.c
+void customized()
+{
+   // your code
+}
+
+
+// lib_export_dec.h
+#ifndef _LIB_EXPORT_DEC_H_
+#define _LIB_EXPORT_DEC_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void customized();
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+// ext_lib_export.c
+#include "lib_export.h"
+#include "lib_export_dec.h"
+
+static NativeSymbol extended_native_symbol_defs[] =
+{
+    EXPORT_WASM_API(customized)
+};
+
+#include "ext_lib_export.h"
+```
+
+Use extended library
+------------------------
+In the application source project, it will include the WAMR built-in API's 
header file and platform extension header files. Assuming the board vendor 
extends the library which added an API called customized(), the WASM 
application would be like this:
+``` C
+#include <stdio.h>
+#include "lib_export_dec.h" // provided by the platform vendor
+
+int main(int argc, char **argv)
+{
+    int I;
+    char *buf = “abcd”;
+    customized();                   // customized API provided by the platform 
vendor
+    return i;
+}
+```
+
+
+Communication programming models
+=========================
+WAMR supports two typical communication programming models, the microservice 
model and the pub/sub model. 
+
+
+Microservice model
+-------------------------
+The microservice model is also known as request and response model. One WASM 
application acts as the server which provides a specific service. Other WASM 
applications or host/cloud applications request that service and get the 
response.
+<img src="./pics/request.PNG" width="60%" height="60%">
+
+Below is the reference implementation of the server application. It provides 
room temperature measurement service.
+
+``` C
+void on_init()
+{
+    api_register_resource_handler("/room_temp", room_temp_handler);
+}
+
+void on_destroy() 
+{
+}
+
+void room_temp_handler(request_t *request)
+{
+    response_t response[1];
+    attr_container_t *payload;
+    payload = attr_container_create("room_temp payload");
+    if (payload == NULL)
+        return;
+
+    attr_container_set_string(&payload, "temp unit", "centigrade");
+    attr_container_set_int(&payload, "value", 26);
+
+    make_response_for_request(request, response);
+    set_response(response,
+                 CONTENT_2_05,
+                 FMT_ATTR_CONTAINER,
+                 payload,
+                 attr_container_get_serialize_length(payload));
+
+    api_response_send(response);
+    attr_container_destroy(payload);
+}
+```
+
+
+Pub/sub model
+-------------------------
+One WASM application acts as the event publisher. It publishes events to 
notify WASM applications or host/cloud applications which subscribe to the 
events.
+
+<img src="./pics/sub.PNG" width="60%" height="60%">
+
+Below is the reference implementation of the pub application. It utilizes a 
timer to repeatedly publish an overheat alert event to the subscriber 
applications. Then the subscriber applications receive the events immediately.
+
+``` C
+/* Timer callback */
+void timer_update(user_timer_t timer
+{
+    attr_container_t *event;
+
+    event = attr_container_create("event");
+    attr_container_set_string(&event,
+                              "warning",
+                              "temperature is over high");
+
+    api_publish_event("alert/overheat",
+                      FMT_ATTR_CONTAINER,
+                      event,
+                      attr_container_get_serialize_length(event));
+
+    attr_container_destroy(event);
+}
+
+void on_init()
+{
+    user_timer_t timer;
+    timer = api_timer_create(1000, true, true, timer_update);
+}
+
+void on_destroy()
+{
+}
+```
+
+Below is the reference implementation of the sub application.
+``` C
+void overheat_handler(request_t *event)
+{
+    printf("Event: %s\n", event->url);
+
+    if (event->payload != NULL && event->fmt == FMT_ATTR_CONTAINER)
+       attr_container_dump((attr_container_t *) event->payload);
+}
+
+void on_init(
+{
+    api_subscribe_event ("alert/overheat", overheat_handler);
+}
+
+void on_destroy()
+{
+}
+```
+**Note:** You can also subscribe this event from host side by using host tool. 
Please refer `samples/simple` project for deail usage.
\ No newline at end of file
diff --git a/scriptsrcs/wamr/samples/gui/README.md 
b/scriptsrcs/wamr/samples/gui/README.md
new file mode 100755
index 0000000..e04e33d
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/README.md
@@ -0,0 +1,121 @@
+Introduction
+==============
+This sample demonstrates that a graphic user interface application in 
WebAssembly programming with WAMR graphic library(WGL) extension. WGL defined a 
WASM application API set for programming the UI applications. 
+
+WGL implemention is based on [LittlevGL](https://github.com/littlevgl/), an 
open-source embedded 2d graphic library. Comparing the building the LittlevGL 
into WASM bytecode in the [littlevgl](../littlevgl) sample, WGL compiled 
LittlevGL source code into the WAMR runtime and defined a wrapper API for 
exporting to Webassembly application. These extension API's are listed in: 
`<wamr_root>/core/iwasm/lib/app-libs/extension/gui/wgl.h`. Currently only a 
small set of API's  are provided and that would be extended in future.
+
+
+The runtime component supports building target for Linux and Zephyr/STM Nucleo 
board. The beauty of this sample is the WebAssembly application can have 
identical display and behavior when running from both runtime environments. 
That implies we can do majority of application validation from desktop 
environment as long as two runtime distributions support the same set of 
application interface.
+
+
+Below pictures show the WASM application is running on an STM board with an 
LCD touch panel. When users click the blue button, the WASM application 
increases the counter, and the latest counter value is displayed on the top 
banner of the touch panel. The number on top will plus one each second, and the 
number on the bottom will plus one when clicked.
+
+
+![WAMR UI SAMPLE](../../doc/pics/vgl_demo2.png "WAMR UI DEMO")
+
+Configure 32 bit or 64 bit build
+==============
+On 64 bit operating system, there is an option to build 32 bit or 64 bit 
binaries. In file `./lvgl-native-ui-app/CMakeLists.txt` and/or 
`./wasm-runtime-wgl/linux-build/CMakeLists.txt` , modify the line:
+`set (BUILD_AS_64BIT_SUPPORT "YES")`
+ where `YES` means 64 bit build while `NO` means 32 bit build.
+
+Install required SDK and libraries
+==============
+- 32 bit SDL(simple directmedia layer) (Note: only necessary when 
`BUILD_AS_64BIT_SUPPORT` is set to `NO`)
+Use apt-get:
+    `sudo apt-get install libsdl2-dev:i386`
+Or download source from www.libsdl.org:
+```
+./configure C_FLAGS=-m32 CXX_FLAGS=-m32 LD_FLAGS=-m32
+make
+sudo make install
+```
+- 64 bit SDL(simple directmedia layer) (Note: only necessary when 
`BUILD_AS_64BIT_SUPPORT` is set to `YES`)
+Use apt-get:
+    `sudo apt-get install libsdl2-dev`
+Or download source from www.libsdl.org:
+```
+./configure
+make
+sudo make install
+```
+
+- Install EMSDK
+```
+    https://emscripten.org/docs/tools_reference/emsdk.html
+```
+
+Build and Run
+==============
+
+Linux
+--------------------------------
+- Build</br>
+`./build.sh`</br>
+    All binaries are in "out", which contains "host_tool", 
"lvgl_native_ui_app", "ui_app.wasm", "ui_app_lvgl_compatible" and 
"wasm_runtime_wgl".
+- Run native Linux application</br>
+`./lvgl_native_ui_app`</br>
+
+- Run WASM VM Linux applicaton & install WASM APP</br>
+ First start wasm_runtime_wgl in server mode.</br>
+`./wasm_runtime_wgl -s`</br>
+ Then install wasm APP use host tool.</br>
+`./host_tool -i ui_app -f ui_app.wasm`</br>
+`./host_tool -i ui_app -f ui_app_compatible.wasm`</br>
+
+Zephyr
+--------------------------------
+WASM VM and native extension method can be built into Zephyr, Then we can 
install wasm app into STM32.</br>
+- Build WASM VM into Zephyr system</br>
+ a. clone zephyr source code</br>
+Refer to Zephyr getting started.</br>
+https://docs.zephyrproject.org/latest/getting_started/index.html</br>
+`west init zephyrproject`</br>
+`cd zephyrproject`</br>
+`west update`</br>
+ b. copy samples</br>
+    `cd zephyr/samples/`</br>
+    `cp -a <wamr_root>samples/gui/wasm-runtime-wgl wasm-runtime-wgl`</br>
+    `cd wasm-runtime-wgl/zephyr_build`</br>
+ c. create a link to wamr core</br>
+   ` ln -s <wamr_root>/core core`</br>
+ d. build source code</br>
+    `mkdir build && cd build`</br>
+    `source ../../../../zephyr-env.sh`</br>
+    `cmake -GNinja -DBOARD=nucleo_f746zg ..`</br>
+   ` ninja flash`</br>
+
+- Test on STM32 NUCLEO_F767ZI with ILI9341 Display with XPT2046 touch</br>
+Hardware Connections
+
+```
++-------------------+-+------------------+
+|NUCLEO-F767ZI       | ILI9341  Display  |
++-------------------+-+------------------+
+| CN7.10             |         CLK       |
++-------------------+-+------------------+
+| CN7.12             |         MISO      |
++-------------------+-+------------------+
+| CN7.14             |         MOSI      |
++-------------------+-+------------------+
+| CN11.1             | CS1 for ILI9341   |
++-------------------+-+------------------+
+| CN11.2             |         D/C       |
++-------------------+-+------------------+
+| CN11.3             |         RESET     |
++-------------------+-+------------------+
+| CN9.25             |    PEN interrupt  |
++-------------------+-+------------------+
+| CN9.27             |  CS2 for XPT2046  |
++-------------------+-+------------------+
+| CN10.14            |    PC UART RX     |
++-------------------+-+------------------+
+| CN11.16            |    PC UART RX     |
++-------------------+-+------------------+
+```
+
+
+- Install WASM application to Zephyr using host_tool</br>
+First, connect PC and STM32 with UART. Then install to use host_tool.</br>
+`./host_tool -D /dev/ttyUSBXXX -i ui_app -f ui_app.wasm`
+
diff --git a/scriptsrcs/wamr/samples/gui/build.sh 
b/scriptsrcs/wamr/samples/gui/build.sh
new file mode 100755
index 0000000..a88987a
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/build.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+
+PROJECT_DIR=$PWD
+WAMR_DIR=${PWD}/../..
+OUT_DIR=${PWD}/out
+BUILD_DIR=${PWD}/build
+
+if [ ! -d $BUILD_DIR ]; then
+    mkdir ${BUILD_DIR}
+fi
+
+rm -rf ${OUT_DIR}
+mkdir ${OUT_DIR}
+
+
+cd ${WAMR_DIR}/core/shared-lib/mem-alloc
+if [ ! -d "tlsf" ]; then
+    git clone https://github.com/mattconte/tlsf
+fi
+
+cd ${WAMR_DIR}/core/iwasm/lib/3rdparty
+if [ ! -d "lvgl" ]; then
+        git clone https://github.com/littlevgl/lvgl.git --branch v6.0.1
+fi
+if [ ! -d "lv_drivers" ]; then
+        git clone https://github.com/littlevgl/lv_drivers.git
+fi
+
+echo "##################### 1. build native-ui-app start#####################"
+cd $BUILD_DIR
+mkdir -p lvgl-native-ui-app
+cd lvgl-native-ui-app
+cmake ${PROJECT_DIR}/lvgl-native-ui-app
+make
+if [ $? != 0 ];then
+    echo "BUILD_FAIL native-ui-app $?\n"
+    exit 2
+fi
+echo $PWD
+cp  lvgl_native_ui_app ${OUT_DIR}
+echo "#####################build native-ui-app success"
+
+
+echo "##################### 2. build littlevgl wasm runtime 
start#####################"
+cd $BUILD_DIR
+mkdir -p wasm-runtime-wgl
+cd wasm-runtime-wgl
+cmake ${PROJECT_DIR}/wasm-runtime-wgl/linux-build
+make
+cp wasm_runtime_wgl ${OUT_DIR}/
+
+echo "##################### build littlevgl wasm runtime 
end#####################"
+
+echo "#####################build host-tool"
+cd $BUILD_DIR
+mkdir -p host-tool
+cd host-tool
+cmake ${WAMR_DIR}/test-tools/host-tool
+make
+if [ $? != 0 ];then
+        echo "BUILD_FAIL host tool exit as $?\n"
+        exit 2
+fi
+cp host_tool ${OUT_DIR}
+echo "#####################build host-tool success"
+
+
+echo "##################### 3. build wasm ui app start#####################"
+cd ${PROJECT_DIR}/wasm-apps/wgl
+make
+cp ui_app.wasm ${OUT_DIR}/
+cd ${PROJECT_DIR}/wasm-apps/lvgl-compatible
+make
+cp ui_app_lvgl_compatible.wasm ${OUT_DIR}/
+echo "#####################  build wasm ui app end#####################"
diff --git a/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/CMakeLists.txt 
b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/CMakeLists.txt
new file mode 100755
index 0000000..95550af
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/CMakeLists.txt
@@ -0,0 +1,52 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cmake_minimum_required (VERSION 2.8.2)
+message ("lvgl_native_ui_app...")
+project (lvgl_native_ui_app)
+
+#################################################################
+
+# Currently build as 64-bit by default. Set to "NO" to build 32-bit binaries.
+set (BUILD_AS_64BIT_SUPPORT "YES")
+
+if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+        if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES")
+                # Add -fPIC flag if build as 64-bit
+                set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+                set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS 
"${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -fPIC")
+        else ()
+                add_definitions (-m32)
+                set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32")
+                set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} 
-m32")
+        endif ()
+endif ()
+
+set(THIRDPARTY_DIR ../../../core/iwasm/lib/3rdparty)
+set(LVGL_SOURCE_DIR ${THIRDPARTY_DIR}/lvgl)
+set(LVGL_DRIVER_DIR ${THIRDPARTY_DIR}/lv_drivers)
+
+#################################
+
+INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})
+INCLUDE_DIRECTORIES(${THIRDPARTY_DIR})
+
+add_definitions (-DLV_CONF_INCLUDE_SIMPLE)
+
+file(GLOB_RECURSE INCLUDES "${LVGL_DRIVER_DIR}/*.h" "${LVGL_SOURCE_DIR}/*.h"  
"./*.h" )
+file(GLOB_RECURSE SOURCES  "${LVGL_DRIVER_DIR}/*.c" "${LVGL_SOURCE_DIR}/*.c" )
+
+add_executable(lvgl_native_ui_app main.c get_time.c ${SOURCES} ${INCLUDES})
+target_link_libraries(lvgl_native_ui_app PRIVATE SDL2 )
+
diff --git a/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/LICENCE.txt 
b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/LICENCE.txt
new file mode 100755
index 0000000..beaef1d
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/LICENCE.txt
@@ -0,0 +1,8 @@
+MIT licence
+Copyright (c) 2016 Gábor Kiss-Vámosi
+
+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.
diff --git a/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/get_time.c 
b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/get_time.c
new file mode 100755
index 0000000..756191a
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/get_time.c
@@ -0,0 +1,11 @@
+#include <sys/time.h>
+#include "system_header.h"
+
+int time_get_ms()
+{
+    static struct timeval tv;
+    gettimeofday(&tv, NULL);
+    long long time_in_mill = (tv.tv_sec) * 1000 + (tv.tv_usec) / 1000;
+
+    return (int) time_in_mill;
+}
diff --git a/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/lv_conf.h 
b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/lv_conf.h
new file mode 100755
index 0000000..e299612
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/lv_conf.h
@@ -0,0 +1,495 @@
+/**
+ * @file lv_conf.h
+ *
+ */
+
+/*
+ * COPY THIS FILE AS `lv_conf.h` NEXT TO the `lvgl` FOLDER
+ */
+
+#if 1 /*Set it to "1" to enable content*/
+
+#ifndef LV_CONF_H
+#define LV_CONF_H
+/* clang-format off */
+
+#include <stdint.h>
+
+/*====================
+   Graphical settings
+ *====================*/
+
+/* Maximal horizontal and vertical resolution to support by the library.*/
+#define LV_HOR_RES_MAX          (320)
+#define LV_VER_RES_MAX          (240)
+
+/* Color depth:
+ * - 1:  1 byte per pixel
+ * - 8:  RGB233
+ * - 16: RGB565
+ * - 32: ARGB8888
+ */
+#define LV_COLOR_DEPTH     32
+
+/* Swap the 2 bytes of RGB565 color.
+ * Useful if the display has a 8 bit interface (e.g. SPI)*/
+#define LV_COLOR_16_SWAP   0
+
+/* 1: Enable screen transparency.
+ * Useful for OSD or other overlapping GUIs.
+ * Requires `LV_COLOR_DEPTH = 32` colors and the screen's style should be 
modified: `style.body.opa = ...`*/
+#define LV_COLOR_SCREEN_TRANSP    0
+
+/*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 anti-aliasing (lines, and radiuses will be smoothed) */
+#define LV_ANTIALIAS        1
+
+/* Default display refresh period.
+ * Can be changed in the display driver (`lv_disp_drv_t`).*/
+#define LV_DISP_DEF_REFR_PERIOD      30      /*[ms]*/
+
+/* Dot Per Inch: used to initialize default sizes.
+ * E.g. a button with width = LV_DPI / 2 -> half inch wide
+ * (Not so important, you can adjust it to modify default sizes and spaces)*/
+#define LV_DPI              100     /*[px]*/
+
+/* Type of coordinates. Should be `int16_t` (or `int32_t` for extreme cases) */
+typedef int16_t lv_coord_t;
+
+/*=========================
+   Memory manager settings
+ *=========================*/
+
+/* LittelvGL's internal memory manager's settings.
+ * The graphical objects and other related data are stored here. */
+
+/* 1: use custom malloc/free, 0: use the built-in `lv_mem_alloc` and 
`lv_mem_free` */
+#define LV_MEM_CUSTOM      0
+#if LV_MEM_CUSTOM == 0
+/* Size of the memory used by `lv_mem_alloc` in bytes (>= 2kB)*/
+#  define LV_MEM_SIZE    (128U * 1024U)
+
+/* Complier prefix for a big array declaration */
+#  define LV_MEM_ATTR
+
+/* Set an address for the memory pool instead of allocating it as an array.
+ * Can be in external SRAM too. */
+#  define LV_MEM_ADR          0
+
+/* Automatically defrag. on free. Defrag. means joining the adjacent free 
cells. */
+#  define LV_MEM_AUTO_DEFRAG  1
+#else       /*LV_MEM_CUSTOM*/
+#  define LV_MEM_CUSTOM_INCLUDE <stdlib.h>   /*Header for the dynamic memory 
function*/
+#  define LV_MEM_CUSTOM_ALLOC   malloc       /*Wrapper to malloc*/
+#  define LV_MEM_CUSTOM_FREE    free         /*Wrapper to free*/
+#endif     /*LV_MEM_CUSTOM*/
+
+/* Garbage Collector settings
+ * Used if lvgl is binded to higher level language and the memory is managed 
by that language */
+#define LV_ENABLE_GC 0
+#if LV_ENABLE_GC != 0
+#  define LV_GC_INCLUDE "gc.h"                           /*Include Garbage 
Collector related things*/
+#  define LV_MEM_CUSTOM_REALLOC   your_realloc           /*Wrapper to realloc*/
+#  define LV_MEM_CUSTOM_GET_SIZE  your_mem_get_size      /*Wrapper to 
lv_mem_get_size*/
+#endif /* LV_ENABLE_GC */
+
+/*=======================
+   Input device settings
+ *=======================*/
+
+/* Input device default settings.
+ * Can be changed in the Input device driver (`lv_indev_drv_t`)*/
+
+/* Input device read period in milliseconds */
+#define LV_INDEV_DEF_READ_PERIOD          30
+
+/* Drag threshold in pixels */
+#define LV_INDEV_DEF_DRAG_LIMIT           10
+
+/* Drag throw slow-down in [%]. Greater value -> faster slow-down */
+#define LV_INDEV_DEF_DRAG_THROW           20
+
+/* Long press time in milliseconds.
+ * Time to send `LV_EVENT_LONG_PRESSSED`) */
+#define LV_INDEV_DEF_LONG_PRESS_TIME      400
+
+/* Repeated trigger period in long press [ms]
+ * Time between `LV_EVENT_LONG_PRESSED_REPEAT */
+#define LV_INDEV_DEF_LONG_PRESS_REP_TIME  100
+
+/*==================
+ * Feature usage
+ *==================*/
+
+/*1: Enable the Animations */
+#define LV_USE_ANIMATION        1
+#if LV_USE_ANIMATION
+
+/*Declare the type of the user data of animations (can be e.g. `void *`, 
`int`, `struct`)*/
+typedef void * lv_anim_user_data_t;
+
+#endif
+
+/* 1: Enable shadow drawing*/
+#define LV_USE_SHADOW           1
+
+/* 1: Enable object groups (for keyboard/encoder navigation) */
+#define LV_USE_GROUP            1
+#if LV_USE_GROUP
+typedef void * lv_group_user_data_t;
+#endif  /*LV_USE_GROUP*/
+
+/* 1: Enable GPU interface*/
+#define LV_USE_GPU              1
+
+/* 1: Enable file system (might be required for images */
+#define LV_USE_FILESYSTEM       1
+#if LV_USE_FILESYSTEM
+/*Declare the type of the user data of file system drivers (can be e.g. `void 
*`, `int`, `struct`)*/
+typedef void * lv_fs_drv_user_data_t;
+#endif
+
+/*1: Add a `user_data` to drivers and objects*/
+#define LV_USE_USER_DATA        1
+
+/*========================
+ * Image decoder and cache
+ *========================*/
+
+/* 1: Enable indexed (palette) images */
+#define LV_IMG_CF_INDEXED       1
+
+/* 1: Enable alpha indexed images */
+#define LV_IMG_CF_ALPHA         1
+
+/* Default image cache size. Image caching keeps the images opened.
+ * If only the built-in image formats are used there is no real advantage of 
caching.
+ * (I.e. no new image decoder is added)
+ * With complex image decoders (e.g. PNG or JPG) caching can save the 
continuous open/decode of images.
+ * However the opened images might consume additional RAM.
+ * LV_IMG_CACHE_DEF_SIZE must be >= 1 */
+#define LV_IMG_CACHE_DEF_SIZE       1
+
+/*Declare the type of the user data of image decoder (can be e.g. `void *`, 
`int`, `struct`)*/
+typedef void * lv_img_decoder_user_data_t;
+
+/*=====================
+ *  Compiler settings
+ *====================*/
+/* Define a custom attribute to `lv_tick_inc` function */
+#define LV_ATTRIBUTE_TICK_INC
+
+/* Define a custom attribute to `lv_task_handler` function */
+#define LV_ATTRIBUTE_TASK_HANDLER
+
+/* With size optimization (-Os) the compiler might not align data to
+ * 4 or 8 byte boundary. This alignment will be explicitly applied where 
needed.
+ * E.g. __attribute__((aligned(4))) */
+#define LV_ATTRIBUTE_MEM_ALIGN
+
+/* Attribute to mark large constant arrays for example
+ * font's bitmaps */
+#define LV_ATTRIBUTE_LARGE_CONST
+
+/*===================
+ *  HAL settings
+ *==================*/
+
+/* 1: use a custom tick source.
+ * It removes the need to manually update the tick with `lv_tick_inc`) */
+#define LV_TICK_CUSTOM     1
+#if LV_TICK_CUSTOM == 1
+#define LV_TICK_CUSTOM_INCLUDE  "system_header.h"       /*Header for the sys 
time function*/
+#define LV_TICK_CUSTOM_SYS_TIME_EXPR (time_get_ms())     /*Expression 
evaluating to current systime in ms*/
+#endif   /*LV_TICK_CUSTOM*/
+
+typedef void * lv_disp_drv_user_data_t;             /*Type of user data in the 
display driver*/
+typedef void * lv_indev_drv_user_data_t;            /*Type of user data in the 
input device driver*/
+
+/*================
+ * Log settings
+ *===============*/
+
+/*1: Enable the log module*/
+#define LV_USE_LOG      1
+#if LV_USE_LOG
+/* How important log should be added:
+ * LV_LOG_LEVEL_TRACE       A lot of logs to give detailed information
+ * LV_LOG_LEVEL_INFO        Log important events
+ * LV_LOG_LEVEL_WARN        Log if something unwanted happened but didn't 
cause a problem
+ * LV_LOG_LEVEL_ERROR       Only critical issue, when the system may fail
+ * LV_LOG_LEVEL_NONE        Do not log anything
+ */
+#  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`*/
+#  define LV_LOG_PRINTF   1
+#endif  /*LV_USE_LOG*/
+
+/*================
+ *  THEME USAGE
+ *================*/
+#define LV_THEME_LIVE_UPDATE    1   /*1: Allow theme switching at run time. 
Uses 8..10 kB of RAM*/
+
+#define LV_USE_THEME_TEMPL      1   /*Just for test*/
+#define LV_USE_THEME_DEFAULT    1   /*Built mainly from the built-in styles. 
Consumes very few RAM*/
+#define LV_USE_THEME_ALIEN      1   /*Dark futuristic theme*/
+#define LV_USE_THEME_NIGHT      1   /*Dark elegant theme*/
+#define LV_USE_THEME_MONO       1   /*Mono color theme for monochrome 
displays*/
+#define LV_USE_THEME_MATERIAL   1   /*Flat theme with bold colors and light 
shadows*/
+#define LV_USE_THEME_ZEN        1   /*Peaceful, mainly light theme */
+#define LV_USE_THEME_NEMO       1   /*Water-like theme based on the movie 
"Finding Nemo"*/
+
+/*==================
+ *    FONT USAGE
+ *===================*/
+
+/* The built-in fonts contains the ASCII range and some Symbols with  4 
bit-per-pixel.
+ * The symbols are available via `LV_SYMBOL_...` defines
+ * More info about fonts: https://docs.littlevgl.com/#Fonts
+ * To create a new font go to: https://littlevgl.com/ttf-font-to-c-array
+ */
+
+/* Robot fonts with bpp = 4
+ * https://fonts.google.com/specimen/Roboto  */
+#define LV_FONT_ROBOTO_12    1
+#define LV_FONT_ROBOTO_16    1
+#define LV_FONT_ROBOTO_22    1
+#define LV_FONT_ROBOTO_28    1
+
+/*Pixel perfect monospace font
+ * http://pelulamu.net/unscii/ */
+#define LV_FONT_UNSCII_8     1
+
+/* Optionally declare your custom fonts here.
+ * You can use these fonts as default font too
+ * and they will be available globally. E.g.
+ * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \
+ *                                LV_FONT_DECLARE(my_font_2)
+ */
+#define LV_FONT_CUSTOM_DECLARE
+
+/*Always set a default font from the built-in fonts*/
+#define LV_FONT_DEFAULT        &lv_font_roboto_16
+
+/* Enable it if you have fonts with a lot of characters.
+ * The limit depends on the font size, font face and bpp
+ * but with > 10,000 characters if you see issues probably you need to enable 
it.*/
+#define LV_FONT_FMT_TXT_LARGE   1
+
+/*Declare the type of the user data of fonts (can be e.g. `void *`, `int`, 
`struct`)*/
+typedef void * lv_font_user_data_t;
+
+/*=================
+ *  Text settings
+ *=================*/
+
+/* Select a character encoding for strings.
+ * Your IDE or editor should have the same character encoding
+ * - LV_TXT_ENC_UTF8
+ * - LV_TXT_ENC_ASCII
+ * */
+#define LV_TXT_ENC LV_TXT_ENC_UTF8
+
+ /*Can break (wrap) texts on these chars*/
+#define LV_TXT_BREAK_CHARS                  " ,.;:-_"
+
+/*===================
+ *  LV_OBJ SETTINGS
+ *==================*/
+
+/*Declare the type of the user data of object (can be e.g. `void *`, `int`, 
`struct`)*/
+typedef void * lv_obj_user_data_t;
+
+/*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/
+#define LV_USE_OBJ_REALIGN          1
+
+/* Enable to make the object clickable on a larger area.
+ * LV_EXT_CLICK_AREA_OFF or 0: Disable this feature
+ * LV_EXT_CLICK_AREA_TINY: The extra area can be adjusted horizontally and 
vertically (0..255 px)
+ * LV_EXT_CLICK_AREA_FULL: The extra area can be adjusted in all 4 directions 
(-32k..+32k px)
+ */
+#define LV_USE_EXT_CLICK_AREA  LV_EXT_CLICK_AREA_FULL
+
+/*==================
+ *  LV OBJ X USAGE
+ *================*/
+/*
+ * Documentation of the object types: https://docs.littlevgl.com/#Object-types
+ */
+
+/*Arc (dependencies: -)*/
+#define LV_USE_ARC      1
+
+/*Bar (dependencies: -)*/
+#define LV_USE_BAR      1
+
+/*Button (dependencies: lv_cont*/
+#define LV_USE_BTN      1
+#if LV_USE_BTN != 0
+/*Enable button-state animations - draw a circle on click (dependencies: 
LV_USE_ANIMATION)*/
+#  define LV_BTN_INK_EFFECT   1
+#endif
+
+/*Button matrix (dependencies: -)*/
+#define LV_USE_BTNM     1
+
+/*Calendar (dependencies: -)*/
+#define LV_USE_CALENDAR 1
+
+/*Canvas (dependencies: lv_img)*/
+#define LV_USE_CANVAS   1
+
+/*Check box (dependencies: lv_btn, lv_label)*/
+#define LV_USE_CB       1
+
+/*Chart (dependencies: -)*/
+#define LV_USE_CHART    1
+#if LV_USE_CHART
+#  define LV_CHART_AXIS_TICK_LABEL_MAX_LEN    20
+#endif
+
+/*Container (dependencies: -*/
+#define LV_USE_CONT     1
+
+/*Drop down list (dependencies: lv_page, lv_label, lv_symbol_def.h)*/
+#define LV_USE_DDLIST    1
+#if LV_USE_DDLIST != 0
+/*Open and close default animation time [ms] (0: no animation)*/
+#  define LV_DDLIST_DEF_ANIM_TIME     200
+#endif
+
+/*Gauge (dependencies:lv_bar, lv_lmeter)*/
+#define LV_USE_GAUGE    1
+
+/*Image (dependencies: lv_label*/
+#define LV_USE_IMG      1
+
+/*Image Button (dependencies: lv_btn*/
+#define LV_USE_IMGBTN   1
+#if LV_USE_IMGBTN
+/*1: The imgbtn requires left, mid and right parts and the width can be set 
freely*/
+#  define LV_IMGBTN_TILED 0
+#endif
+
+/*Keyboard (dependencies: lv_btnm)*/
+#define LV_USE_KB       1
+
+/*Label (dependencies: -*/
+#define LV_USE_LABEL    1
+#if LV_USE_LABEL != 0
+/*Hor, or ver. scroll speed [px/sec] in 'LV_LABEL_LONG_ROLL/ROLL_CIRC' mode*/
+#  define LV_LABEL_DEF_SCROLL_SPEED       25
+
+/* Waiting period at beginning/end of animation cycle */
+#  define LV_LABEL_WAIT_CHAR_COUNT        3
+
+/*Enable selecting text of the label */
+#  define LV_LABEL_TEXT_SEL               1
+
+/*Store extra some info in labels (12 bytes) to speed up drawing of very long 
texts*/
+#  define LV_LABEL_LONG_TXT_HINT          0
+#endif
+
+/*LED (dependencies: -)*/
+#define LV_USE_LED      1
+
+/*Line (dependencies: -*/
+#define LV_USE_LINE     1
+
+/*List (dependencies: lv_page, lv_btn, lv_label, (lv_img optionally for icons 
))*/
+#define LV_USE_LIST     1
+#if LV_USE_LIST != 0
+/*Default animation time of focusing to a list element [ms] (0: no animation)  
*/
+#  define LV_LIST_DEF_ANIM_TIME  100
+#endif
+
+/*Line meter (dependencies: *;)*/
+#define LV_USE_LMETER   1
+
+/*Message box (dependencies: lv_rect, lv_btnm, lv_label)*/
+#define LV_USE_MBOX     1
+
+/*Page (dependencies: lv_cont)*/
+#define LV_USE_PAGE     1
+#if LV_USE_PAGE != 0
+/*Focus default animation time [ms] (0: no animation)*/
+#  define LV_PAGE_DEF_ANIM_TIME     400
+#endif
+
+/*Preload (dependencies: lv_arc, lv_anim)*/
+#define LV_USE_PRELOAD      1
+#if LV_USE_PRELOAD != 0
+#  define LV_PRELOAD_DEF_ARC_LENGTH   60      /*[deg]*/
+#  define LV_PRELOAD_DEF_SPIN_TIME    1000    /*[ms]*/
+#  define LV_PRELOAD_DEF_ANIM         LV_PRELOAD_TYPE_SPINNING_ARC
+#endif
+
+/*Roller (dependencies: lv_ddlist)*/
+#define LV_USE_ROLLER    1
+#if LV_USE_ROLLER != 0
+/*Focus animation time [ms] (0: no animation)*/
+#  define LV_ROLLER_DEF_ANIM_TIME     200
+
+/*Number of extra "pages" when the roller is infinite*/
+#  define LV_ROLLER_INF_PAGES         7
+#endif
+
+/*Slider (dependencies: lv_bar)*/
+#define LV_USE_SLIDER    1
+
+/*Spinbox (dependencies: lv_ta)*/
+#define LV_USE_SPINBOX       1
+
+/*Switch (dependencies: lv_slider)*/
+#define LV_USE_SW       1
+
+/*Text area (dependencies: lv_label, lv_page)*/
+#define LV_USE_TA       1
+#if LV_USE_TA != 0
+#  define LV_TA_DEF_CURSOR_BLINK_TIME 400     /*ms*/
+#  define LV_TA_DEF_PWD_SHOW_TIME     1500    /*ms*/
+#endif
+
+/*Table (dependencies: lv_label)*/
+#define LV_USE_TABLE    1
+#if LV_USE_TABLE
+#  define LV_TABLE_COL_MAX    12
+#endif
+
+/*Tab (dependencies: lv_page, lv_btnm)*/
+#define LV_USE_TABVIEW      1
+#  if LV_USE_TABVIEW != 0
+/*Time of slide animation [ms] (0: no animation)*/
+#  define LV_TABVIEW_DEF_ANIM_TIME    300
+#endif
+
+/*Tileview (dependencies: lv_page) */
+#define LV_USE_TILEVIEW     1
+#if LV_USE_TILEVIEW
+/*Time of slide animation [ms] (0: no animation)*/
+#  define LV_TILEVIEW_DEF_ANIM_TIME   300
+#endif
+
+/*Window (dependencies: lv_cont, lv_btn, lv_label, lv_img, lv_page)*/
+#define LV_USE_WIN      1
+
+/*==================
+ * Non-user section
+ *==================*/
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)    /* Disable 
warnings for Visual Studio*/
+#  define _CRT_SECURE_NO_WARNINGS
+#endif
+
+/*--END OF LV_CONF_H--*/
+
+/*Be sure every define has a default value*/
+#include "lvgl/src/lv_conf_checker.h"
+
+#endif /*LV_CONF_H*/
+
+#endif /*End of "Content enable"*/
diff --git a/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/lv_drv_conf.h 
b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/lv_drv_conf.h
new file mode 100755
index 0000000..d216a3e
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/lv_drv_conf.h
@@ -0,0 +1,310 @@
+/**
+ * @file lv_drv_conf.h
+ *
+ */
+
+/*
+ * COPY THIS FILE AS lv_drv_conf.h
+ */
+
+#if 1 /*Set it to "1" to enable the content*/
+
+#ifndef LV_DRV_CONF_H
+#define LV_DRV_CONF_H
+
+#include "lv_conf.h"
+
+/*********************
+ * DELAY INTERFACE
+ *********************/
+#define LV_DRV_DELAY_INCLUDE  <stdint.h>            /*Dummy include by 
default*/
+#define LV_DRV_DELAY_US(us)  /*delay_us(us)*/       /*Delay the given number 
of microseconds*/
+#define LV_DRV_DELAY_MS(ms)  /*delay_ms(ms)*/       /*Delay the given number 
of milliseconds*/
+
+/*********************
+ * DISPLAY INTERFACE
+ *********************/
+
+/*------------
+ *  Common
+ *------------*/
+#define LV_DRV_DISP_INCLUDE         <stdint.h>           /*Dummy include by 
default*/
+#define LV_DRV_DISP_CMD_DATA(val)  /*pin_x_set(val)*/    /*Set the 
command/data pin to 'val'*/
+#define LV_DRV_DISP_RST(val)       /*pin_x_set(val)*/    /*Set the reset pin 
to 'val'*/
+
+/*---------
+ *  SPI
+ *---------*/
+#define LV_DRV_DISP_SPI_CS(val)          /*spi_cs_set(val)*/     /*Set the 
SPI's Chip select to 'val'*/
+#define LV_DRV_DISP_SPI_WR_BYTE(data)    /*spi_wr(data)*/        /*Write a 
byte the SPI bus*/
+#define LV_DRV_DISP_SPI_WR_ARRAY(adr, n) /*spi_wr_mem(adr, n)*/  /*Write 'n' 
bytes to SPI bus from 'adr'*/
+
+/*------------------
+ *  Parallel port
+ *-----------------*/
+#define LV_DRV_DISP_PAR_CS(val)          /*par_cs_set(val)*/   /*Set the 
Parallel port's Chip select to 'val'*/
+#define LV_DRV_DISP_PAR_SLOW             /*par_slow()*/        /*Set low speed 
on the parallel port*/
+#define LV_DRV_DISP_PAR_FAST             /*par_fast()*/        /*Set high 
speed on the parallel port*/
+#define LV_DRV_DISP_PAR_WR_WORD(data)    /*par_wr(data)*/      /*Write a word 
to the parallel port*/
+#define LV_DRV_DISP_PAR_WR_ARRAY(adr, n) /*par_wr_mem(adr,n)*/ /*Write 'n' 
bytes to Parallel ports from 'adr'*/
+
+/***************************
+ * INPUT DEVICE INTERFACE
+ ***************************/
+
+/*----------
+ *  Common
+ *----------*/
+#define LV_DRV_INDEV_INCLUDE     <stdint.h>             /*Dummy include by 
default*/
+#define LV_DRV_INDEV_RST(val)    /*pin_x_set(val)*/     /*Set the reset pin to 
'val'*/
+#define LV_DRV_INDEV_IRQ_READ    0 /*pn_x_read()*/      /*Read the IRQ pin*/
+
+/*---------
+ *  SPI
+ *---------*/
+#define LV_DRV_INDEV_SPI_CS(val)            /*spi_cs_set(val)*/     /*Set the 
SPI's Chip select to 'val'*/
+#define LV_DRV_INDEV_SPI_XCHG_BYTE(data)    0 /*spi_xchg(val)*/     /*Write 
'val' to SPI and give the read value*/
+
+/*---------
+ *  I2C
+ *---------*/
+#define LV_DRV_INDEV_I2C_START              /*i2c_start()*/       /*Make an 
I2C start*/
+#define LV_DRV_INDEV_I2C_STOP               /*i2c_stop()*/        /*Make an 
I2C stop*/
+#define LV_DRV_INDEV_I2C_RESTART            /*i2c_restart()*/     /*Make an 
I2C restart*/
+#define LV_DRV_INDEV_I2C_WR(data)           /*i2c_wr(data)*/      /*Write a 
byte to the I1C bus*/
+#define LV_DRV_INDEV_I2C_READ(last_read)    0 /*i2c_rd()*/        /*Read a 
byte from the I2C bud*/
+
+
+/*********************
+ *  DISPLAY DRIVERS
+ *********************/
+
+/*-------------------
+ *  Monitor of PC
+ *-------------------*/
+#ifndef USE_MONITOR
+#  define USE_MONITOR         1
+#endif
+
+#if USE_MONITOR
+#  define MONITOR_HOR_RES     LV_HOR_RES_MAX
+#  define MONITOR_VER_RES     LV_VER_RES_MAX
+
+/* Scale window by this factor (useful when simulating small screens) */
+#  define MONITOR_ZOOM        1
+
+/* Used to test true double buffering with only address changing.
+ * Set LV_VDB_SIZE = (LV_HOR_RES * LV_VER_RES) and  LV_VDB_DOUBLE = 1 and 
LV_COLOR_DEPTH = 32" */
+#  define MONITOR_DOUBLE_BUFFERED 0
+
+/*Eclipse: <SDL2/SDL.h>    Visual Studio: <SDL.h>*/
+#  define MONITOR_SDL_INCLUDE_PATH    <SDL2/SDL.h>
+
+/*Different rendering might be used if running in a Virtual machine*/
+#  define MONITOR_VIRTUAL_MACHINE 0
+
+/*Open two windows to test multi display support*/
+#  define MONITOR_DUAL            0
+#endif
+
+/*-----------------------------------
+ *  Native Windows (including mouse)
+ *----------------------------------*/
+#ifndef USE_WINDOWS
+#  define USE_WINDOWS       0
+#endif
+
+#define USE_WINDOWS         0
+#if USE_WINDOWS
+#  define WINDOW_HOR_RES      480
+#  define WINDOW_VER_RES      320
+#endif
+
+/*----------------
+ *    SSD1963
+ *--------------*/
+#ifndef USE_SSD1963
+#  define USE_SSD1963         0
+#endif
+
+#if USE_SSD1963
+#  define SSD1963_HOR_RES     LV_HOR_RES
+#  define SSD1963_VER_RES     LV_VER_RES
+#  define SSD1963_HT          531
+#  define SSD1963_HPS         43
+#  define SSD1963_LPS         8
+#  define SSD1963_HPW         10
+#  define SSD1963_VT          288
+#  define SSD1963_VPS         12
+#  define SSD1963_FPS         4
+#  define SSD1963_VPW         10
+#  define SSD1963_HS_NEG      0   /*Negative hsync*/
+#  define SSD1963_VS_NEG      0   /*Negative vsync*/
+#  define SSD1963_ORI         0   /*0, 90, 180, 270*/
+#  define SSD1963_COLOR_DEPTH 16
+#endif
+
+/*----------------
+ *    R61581
+ *--------------*/
+#ifndef USE_R61581
+#  define USE_R61581          0
+#endif
+
+#if USE_R61581
+#  define R61581_HOR_RES      LV_HOR_RES
+#  define R61581_VER_RES      LV_VER_RES
+#  define R61581_HSPL         0       /*HSYNC signal polarity*/
+#  define R61581_HSL          10      /*HSYNC length (Not Implemented)*/
+#  define R61581_HFP          10      /*Horitontal Front poarch (Not 
Implemented)*/
+#  define R61581_HBP          10      /*Horitontal Back poarch (Not 
Implemented */
+#  define R61581_VSPL         0       /*VSYNC signal polarity*/
+#  define R61581_VSL          10      /*VSYNC length (Not Implemented)*/
+#  define R61581_VFP          8       /*Vertical Front poarch*/
+#  define R61581_VBP          8       /*Vertical Back poarch */
+#  define R61581_DPL          0       /*DCLK signal polarity*/
+#  define R61581_EPL          1       /*ENABLE signal polarity*/
+#  define R61581_ORI          0       /*0, 180*/
+#  define R61581_LV_COLOR_DEPTH 16    /*Fix 16 bit*/
+#endif
+
+/*------------------------------
+ *  ST7565 (Monochrome, low res.)
+ *-----------------------------*/
+#ifndef USE_ST7565
+#  define USE_ST7565          0
+#endif
+
+#if USE_ST7565
+/*No settings*/
+#endif  /*USE_ST7565*/
+
+/*-----------------------------------------
+ *  Linux frame buffer device (/dev/fbx)
+ *-----------------------------------------*/
+#ifndef USE_FBDEV
+#  define USE_FBDEV           1
+#endif
+
+#if USE_FBDEV
+#  define FBDEV_PATH          "/dev/fb0"
+#endif
+
+/*********************
+ *  INPUT DEVICES
+ *********************/
+
+/*--------------
+ *    XPT2046
+ *--------------*/
+#ifndef USE_XPT2046
+#  define USE_XPT2046         0
+#endif
+
+#if USE_XPT2046
+#  define XPT2046_HOR_RES     480
+#  define XPT2046_VER_RES     320
+#  define XPT2046_X_MIN       200
+#  define XPT2046_Y_MIN       200
+#  define XPT2046_X_MAX       3800
+#  define XPT2046_Y_MAX       3800
+#  define XPT2046_AVG         4
+#  define XPT2046_INV         0
+#endif
+
+/*-----------------
+ *    FT5406EE8
+ *-----------------*/
+#ifndef USE_FT5406EE8
+#  define USE_FT5406EE8       0
+#endif
+
+#if USE_FT5406EE8
+# define FT5406EE8_I2C_ADR   0x38                  /*7 bit address*/
+#endif
+
+/*---------------
+ *  AD TOUCH
+ *--------------*/
+#ifndef USE_AD_TOUCH
+#  define USE_AD_TOUCH        0
+#endif
+
+#if USE_AD_TOUCH
+/*No settings*/
+#endif
+
+
+/*---------------------------------------
+ * Mouse or touchpad on PC (using SDL)
+ *-------------------------------------*/
+#ifndef USE_MOUSE
+#  define USE_MOUSE           1
+#endif
+
+#if USE_MOUSE
+/*No settings*/
+#endif
+
+/*-------------------------------------------
+ * Mousewheel as encoder on PC (using SDL)
+ *------------------------------------------*/
+#ifndef USE_MOUSEWHEEL
+#  define USE_MOUSEWHEEL      1
+#endif
+
+#if USE_MOUSEWHEEL
+/*No settings*/
+#endif
+
+/*-------------------------------------------------
+ * Touchscreen as libinput interface (for Linux based systems)
+ *------------------------------------------------*/
+#ifndef USE_LIBINPUT
+#  define USE_LIBINPUT           0
+#endif
+
+#if USE_LIBINPUT
+#  define LIBINPUT_NAME   "/dev/input/event0"        /*You can use the 
"evtest" Linux tool to get the list of devices and test them*/
+#endif  /*USE_LIBINPUT*/
+
+/*-------------------------------------------------
+ * Mouse or touchpad as evdev interface (for Linux based systems)
+ *------------------------------------------------*/
+#ifndef USE_EVDEV
+#  define USE_EVDEV           0
+#endif
+
+#if USE_EVDEV
+#  define EVDEV_NAME   "/dev/input/event0"        /*You can use the "evtest" 
Linux tool to get the list of devices and test them*/
+#  define EVDEV_SWAP_AXES         0               /*Swap the x and y axes of 
the touchscreen*/
+
+#  define EVDEV_SCALE             0               /* Scale input, e.g. if 
touchscreen resolution does not match display resolution */
+#  if EVDEV_SCALE
+#    define EVDEV_SCALE_HOR_RES     (4096)          /* Horizontal resolution 
of touchscreen */
+#    define EVDEV_SCALE_VER_RES     (4096)          /* Vertical resolution of 
touchscreen */
+#  endif  /*EVDEV_SCALE*/
+
+#  define EVDEV_CALIBRATE         0               /*Scale and offset the 
touchscreen coordinates by using maximum and minimum values for each axis*/
+#  if EVDEV_CALIBRATE
+#    define EVDEV_HOR_MIN   3800                    /*If EVDEV_XXX_MIN > 
EVDEV_XXX_MAX the XXX axis is automatically inverted*/
+#    define EVDEV_HOR_MAX   200
+#    define EVDEV_VER_MIN   200
+#    define EVDEV_VER_MAX   3800
+#  endif  /*EVDEV_SCALE*/
+#endif  /*USE_EVDEV*/
+
+/*-------------------------------
+ *   Keyboard of a PC (using SDL)
+ *------------------------------*/
+#ifndef USE_KEYBOARD
+#  define USE_KEYBOARD        1
+#endif
+
+#if USE_KEYBOARD
+/*No settings*/
+#endif
+
+#endif  /*LV_DRV_CONF_H*/
+
+#endif /*End of "Content enable"*/
diff --git a/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/main.c 
b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/main.c
new file mode 100755
index 0000000..1e77838
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/main.c
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file main
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#define _DEFAULT_SOURCE /* needed for usleep() */
+#include <stdlib.h>
+#include <unistd.h>
+#define SDL_MAIN_HANDLED        /*To fix SDL's "undefined reference to 
WinMain" issue*/
+#include <SDL2/SDL.h>
+#include "lvgl/lvgl.h"
+#include "lv_drivers/display/monitor.h"
+#include "lv_drivers/indev/mouse.h"
+#include "lv_drivers/indev/mousewheel.h"
+#include "lv_drivers/indev/keyboard.h"
+
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/*On OSX SDL needs different handling*/
+#if defined(__APPLE__) && defined(TARGET_OS_MAC)
+# if __APPLE__ && TARGET_OS_MAC
+#define SDL_APPLE
+# endif
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static void hal_init(void);
+static void btn_event_cb(lv_obj_t * btn, lv_event_t event);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+uint32_t count = 0;
+char count_str[11] = { 0 };
+lv_obj_t *hello_world_label;
+lv_obj_t *count_label;
+lv_obj_t * btn1;
+lv_obj_t * label_count1;
+int label_count1_value = 0;
+char label_count1_str[11] = { 0 };
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+int main(int argc, char ** argv)
+{
+    (void) argc;    /*Unused*/
+    (void) argv;    /*Unused*/
+
+    /*Initialize LittlevGL*/
+    lv_init();
+
+    /*Initialize the HAL (display, input devices, tick) for LittlevGL*/
+    hal_init();
+
+    hello_world_label = lv_label_create(lv_disp_get_scr_act(NULL), NULL);
+    lv_label_set_text(hello_world_label, "Hello world!");
+    lv_obj_align(hello_world_label, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
+
+    count_label = lv_label_create(lv_disp_get_scr_act(NULL), NULL);
+    lv_obj_align(count_label, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);
+    btn1 = lv_btn_create(lv_disp_get_scr_act(NULL), NULL); /*Create a button 
on the currently loaded screen*/
+    lv_obj_set_event_cb(btn1, btn_event_cb); /*Set function to be called when 
the button is released*/
+    lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, 20); /*Align below the label*/
+
+    /*Create a label on the button*/
+    lv_obj_t * btn_label = lv_label_create(btn1, NULL);
+    lv_label_set_text(btn_label, "Click ++");
+
+    label_count1 = lv_label_create(lv_disp_get_scr_act(NULL), NULL);
+    lv_label_set_text(label_count1, "0");
+    lv_obj_align(label_count1, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+    while(1) {
+        /* Periodically call the lv_task handler.
+         * It could be done in a timer interrupt or an OS task too.*/
+        if ((count % 100) == 0) {
+            sprintf(count_str, "%d", count/ 100);
+            lv_label_set_text(count_label, count_str);
+        }
+        lv_task_handler();
+        ++count;
+        usleep(10 * 1000); /*Just to let the system breath*/
+    }
+    return 0;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the Hardware Abstraction Layer (HAL) for the Littlev graphics 
library
+ */
+static void hal_init(void)
+{
+    /* Use the 'monitor' driver which creates window on PC's monitor to 
simulate a display*/
+    monitor_init();
+
+    /*Create a display buffer*/
+    static lv_disp_buf_t disp_buf1;
+    static lv_color_t buf1_1[320*10];
+    lv_disp_buf_init(&disp_buf1, buf1_1, NULL, 320*10);
+
+    /*Create a display*/
+    lv_disp_drv_t disp_drv;
+    lv_disp_drv_init(&disp_drv);            /*Basic initialization*/
+    disp_drv.buffer = &disp_buf1;
+    disp_drv.flush_cb = monitor_flush;    /*Used when `LV_VDB_SIZE != 0` in 
lv_conf.h (buffered drawing)*/
+    //    disp_drv.hor_res = 200;
+    //    disp_drv.ver_res = 100;
+    lv_disp_drv_register(&disp_drv);
+
+    /* Add the mouse as input device
+     * Use the 'mouse' driver which reads the PC's mouse*/
+    mouse_init();
+    lv_indev_drv_t indev_drv;
+    lv_indev_drv_init(&indev_drv);          /*Basic initialization*/
+    indev_drv.type = LV_INDEV_TYPE_POINTER;
+    indev_drv.read_cb = mouse_read;         /*This function will be called 
periodically (by the library) to get the mouse position and state*/
+    lv_indev_drv_register(&indev_drv);
+}
+
+static void btn_event_cb(lv_obj_t * btn, lv_event_t event)
+{
+    if(event == LV_EVENT_RELEASED) {
+        label_count1_value++;
+        sprintf(label_count1_str, "%d", label_count1_value);
+        lv_label_set_text(label_count1, label_count1_str);
+    }
+}
diff --git a/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/system_header.h 
b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/system_header.h
new file mode 100755
index 0000000..9c8b1d2
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/lvgl-native-ui-app/system_header.h
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+
+int time_get_ms();
diff --git a/scriptsrcs/wamr/samples/gui/wasm-apps/lvgl-compatible/Makefile 
b/scriptsrcs/wamr/samples/gui/wasm-apps/lvgl-compatible/Makefile
new file mode 100755
index 0000000..b9081c9
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/wasm-apps/lvgl-compatible/Makefile
@@ -0,0 +1,57 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+CC = clang-8
+APP_DIR = ${shell pwd}
+IWASM_DIR=../../../../core/iwasm
+CFLAGS += -O3 \
+         -Wno-int-conversion \
+         -DLV_CONF_INCLUDE_SIMPLE \
+         -I$(APP_DIR)/src/ \
+         -I$(IWASM_DIR)/lib/app-libs/base/ \
+         -I$(IWASM_DIR)/lib/native-interface/ \
+         -I$(IWASM_DIR)/lib/app-libs/extension/sensor \
+         -I$(IWASM_DIR)/lib/app-libs/extension/gui \
+         -I$(IWASM_DIR)/lib/app-libs/extension/connection \
+         -I/usr/aarch64-linux-gnu/include
+
+SRCS += $(APP_DIR)/src/main.c
+
+# For app size consideration, not all but necessary app libs are included
+SRCS += $(IWASM_DIR)/lib/app-libs/base/timer.c
+SRCS += $(IWASM_DIR)/lib/app-libs/extension/gui/src/*.c
+
+copytouk: headergen
+       cp helloworld_wasm.h ../../../../../../
+
+headergen: compile
+       xxd -i helloworld.wasm helloworld_wasm.h
+
+compile: 
+       $(CC) $(CFLAGS) $(SRCS) \
+       --target=wasm32 -z stack-size=4096 -Wl,--initial-memory=65536 \
+    -Wl,--allow-undefined,--export=main \
+       -Wl,--no-threads,--strip-all,--no-entry -nostdlib \
+       -Wl,--export=on_widget_event \
+    -o helloworld.wasm
+
+clean:
+       rm -f helloworld.wasm helloworld_wasm.h
+
+all: copytouk
+
+#    -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s STACK_OVERFLOW_CHECK=2 \
+    -s TOTAL_MEMORY=65536 -s TOTAL_STACK=2048\
+    -s "EXPORTED_FUNCTIONS=['_on_init', '_on_timer_callback', 
'_on_widget_event']" \
+    -o ui_app_lvgl_compatible.wasm
diff --git a/scriptsrcs/wamr/samples/gui/wasm-apps/lvgl-compatible/src/main.c 
b/scriptsrcs/wamr/samples/gui/wasm-apps/lvgl-compatible/src/main.c
new file mode 100755
index 0000000..b23b58a
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/wasm-apps/lvgl-compatible/src/main.c
@@ -0,0 +1,116 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
+#include "lvgl.h"
+
+void uk_sched_yield(void);
+
+uint32_t count = 0;
+char count_str[11] = { 0 };
+lv_obj_t *hello_world_label;
+lv_obj_t *count_label;
+lv_obj_t *btn1;
+lv_obj_t *label_count1;
+int label_count1_value = 100;
+char label_count1_str[11] = { 0 };
+
+/*void timer1_update(user_timer_t timer1)
+{
+    if ((count % 100) == 0) {
+        sprintf(count_str, "%d", count / 100);
+        lv_label_set_text(count_label, count_str);
+    }
+    ++count;
+}*/
+
+static void btn_event_cb(lv_obj_t *btn, lv_event_t event)
+{
+    if(event == LV_EVENT_RELEASED) {
+        label_count1_value--;
+        sprintf(label_count1_str, "%d", label_count1_value);
+               printf("btn_event_cb: %s\n", label_count1_str);
+        lv_label_set_text(label_count1, label_count1_str);
+        if (label_count1_value == 0)
+            label_count1_value = 100;
+    } else {
+               printf("btn_event_cb: another event\n");
+       }
+}
+
+static inline long get_system_timer(void)
+{
+       struct timespec time;
+       if (clock_gettime(CLOCK_MONOTONIC, &time) != 0) {
+        printf("Error executing clock_gettime\n");
+    }
+       return time.tv_sec;
+}
+
+int main(int argc, char **argv)
+{
+    char *buf;
+       long time_start, time_end;
+
+       time_start = get_system_timer();
+
+    printf("Hello world from inside WAMR!\n");
+
+    buf = malloc(1024);
+    if (!buf) {
+        printf("malloc buf failed\n");
+        return -1;
+    }
+
+    printf("buf ptr: %p\n", buf);
+
+    sprintf(buf, "%s", "1234\n");
+    printf("buf: %s", buf);
+
+       free(buf);
+       
+       
+
+       hello_world_label = lv_label_create(NULL, NULL);
+       lv_label_set_text(hello_world_label, "Hello world WAMR LVGL 
compatible!");
+       lv_obj_align(hello_world_label, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
+       
+       count_label = lv_label_create(NULL, NULL);
+       lv_obj_align(count_label, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);
+       
+       btn1 = lv_btn_create(NULL, NULL); /*Create a button on the currently 
loaded screen*/
+       lv_obj_set_event_cb(btn1, btn_event_cb); /*Set function to be called 
when the button is released*/
+       lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, 0); /*Align below the 
label*/
+       
+       /*Create a label on the button*/
+       lv_obj_t *btn_label = lv_label_create(btn1, NULL);
+       lv_label_set_text(btn_label, "Click --");
+       
+       label_count1 = lv_label_create(NULL, NULL);
+       sprintf(label_count1_str, "%d", label_count1_value);
+    lv_label_set_text(label_count1, label_count1_str);
+       lv_obj_align(label_count1, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+       
+       /* set up a timer */
+       //user_timer_t timer;
+       //timer = api_timer_create(10, true, false, timer1_update);
+       //api_timer_restart(timer, 10);
+
+
+
+       while(1) {
+               if ((count % 100) == 0) {
+                       sprintf(count_str, "%d", count / 100);
+                       wgl_label_set_text(count_label, count_str);
+               }
+               ++count;
+
+               uk_sched_yield();
+       }
+
+       time_end = get_system_timer();
+    printf("WAMR start time: %ld us\n", time_start);
+    printf("WAMR end time: %ld us\n", time_end);
+
+    return 0;
+}
diff --git a/scriptsrcs/wamr/samples/gui/wasm-apps/wgl/Makefile 
b/scriptsrcs/wamr/samples/gui/wasm-apps/wgl/Makefile
new file mode 100755
index 0000000..fe1aac7
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/wasm-apps/wgl/Makefile
@@ -0,0 +1,57 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+CC = clang-8
+APP_DIR = ${shell pwd}
+IWASM_DIR=../../../../core/iwasm
+CFLAGS += -O3 \
+         -Wno-int-conversion \
+         -DLV_CONF_INCLUDE_SIMPLE \
+         -I$(APP_DIR)/src/ \
+         -I$(IWASM_DIR)/lib/app-libs/base/ \
+         -I$(IWASM_DIR)/lib/native-interface/ \
+         -I$(IWASM_DIR)/lib/app-libs/extension/sensor \
+         -I$(IWASM_DIR)/lib/app-libs/extension/gui \
+         -I$(IWASM_DIR)/lib/app-libs/extension/connection \
+         -I/usr/aarch64-linux-gnu/include
+
+SRCS += $(APP_DIR)/src/main.c
+
+# For app size consideration, not all but necessary app libs are included
+SRCS += $(IWASM_DIR)/lib/app-libs/base/timer.c
+SRCS += $(IWASM_DIR)/lib/app-libs/extension/gui/src/*.c
+
+copytouk: headergen
+       cp helloworld_wasm.h ../../../../../../
+
+headergen: compile
+       xxd -i helloworld.wasm helloworld_wasm.h
+
+compile: 
+       $(CC) $(CFLAGS) $(SRCS) \
+       --target=wasm32 -z stack-size=4096 -Wl,--initial-memory=65536 \
+       -Wl,--allow-undefined,--strip-all,--no-entry -nostdlib \
+       -Wl,--export=main,--export=on_timer_callback,--export=on_widget_event \
+       -o helloworld.wasm
+
+clean:
+       rm -f helloworld.wasm helloworld_wasm.h
+
+all: copytouk
+
+#      @$(CC) $(CFLAGS) $(SRCS) \
+    -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s STACK_OVERFLOW_CHECK=2 \
+    -s TOTAL_MEMORY=65536 -s TOTAL_STACK=2048\
+    -s "EXPORTED_FUNCTIONS=['_on_init', '_on_timer_callback', 
'_on_widget_event']" \
+    -o ui_app.wasm
diff --git a/scriptsrcs/wamr/samples/gui/wasm-apps/wgl/src/main.c 
b/scriptsrcs/wamr/samples/gui/wasm-apps/wgl/src/main.c
new file mode 100755
index 0000000..3627d1b
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/wasm-apps/wgl/src/main.c
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
+#include "wgl.h"
+
+static void btn_event_cb(wgl_obj_t btn, wgl_event_t event);
+
+#define CHARACTERS_PER_LINE            64
+
+wgl_obj_t hello_world_label;
+wgl_obj_t boot_time_label;
+wgl_obj_t code_size_label;
+wgl_obj_t memory_use_label;
+wgl_obj_t button_counter_label;
+wgl_obj_t button;
+
+char boot_time_string[CHARACTERS_PER_LINE] = { 0 };
+char code_size_string[CHARACTERS_PER_LINE] = { 0 };
+char memory_use_string[CHARACTERS_PER_LINE] = { 0 };
+char button_counter_string[CHARACTERS_PER_LINE] = { 0 };
+
+int button_counter_value = 0;
+
+
+static inline long get_system_timer(void)
+{
+       struct timespec time;
+       if (clock_gettime(CLOCK_MONOTONIC, &time) != 0) {
+        printf("Error executing clock_gettime\n");
+    }
+       return time.tv_sec;
+}
+
+static long wamr_strtol(char *str)
+{
+       long value = 0;
+       while((*str >= '0') && (*str <= '9')) {
+               value = 10*value + *str - '0';
+               str++;
+       }
+       return value;
+}
+
+int main(int argc, char **argv)
+{
+       long time_start;
+
+       time_start = get_system_timer();
+
+       if (argc < 4) {
+       printf("Not enough arguments to the main function\n");
+               return -1;
+       }
+
+    hello_world_label = wgl_label_create((wgl_obj_t)NULL, (wgl_obj_t)NULL);
+       boot_time_label = wgl_label_create((wgl_obj_t)NULL, (wgl_obj_t)NULL);
+       code_size_label = wgl_label_create((wgl_obj_t)NULL, (wgl_obj_t)NULL);
+       memory_use_label = wgl_label_create((wgl_obj_t)NULL, (wgl_obj_t)NULL);
+       button_counter_label = wgl_label_create((wgl_obj_t)NULL, 
(wgl_obj_t)NULL);
+
+    wgl_obj_align(hello_world_label, (wgl_obj_t)NULL, WGL_ALIGN_IN_TOP_LEFT, 
10, 28);
+       wgl_obj_align(boot_time_label, (wgl_obj_t)NULL, WGL_ALIGN_IN_TOP_LEFT, 
10, 360+28*0);
+       wgl_obj_align(code_size_label, (wgl_obj_t)NULL, WGL_ALIGN_IN_TOP_LEFT, 
10, 360+28*1);
+       wgl_obj_align(memory_use_label, (wgl_obj_t)NULL, WGL_ALIGN_IN_TOP_LEFT, 
10, 360+28*2);
+       wgl_obj_align(button_counter_label, (wgl_obj_t)NULL, 
WGL_ALIGN_IN_TOP_LEFT, 10, 360+28*3);
+
+       sprintf(boot_time_string, "Boot Time:      %ld us (+%s s GPU boot)", 
time_start - wamr_strtol(argv[0]), argv[1]);
+       sprintf(code_size_string, "Code Size:       %s kB", argv[2]);
+       sprintf(memory_use_string, "Memory Use:  %s kB (+ Code size)", argv[3]);
+       sprintf(button_counter_string, "Click counter:  %d", 
button_counter_value);
+
+    wgl_label_set_text(hello_world_label, "Unikraft running WAMR!!");
+       wgl_label_set_text(boot_time_label, boot_time_string);
+       wgl_label_set_text(code_size_label, code_size_string);
+       wgl_label_set_text(memory_use_label, memory_use_string);
+       wgl_label_set_text(button_counter_label, button_counter_string);
+
+
+
+    button = wgl_btn_create((wgl_obj_t)NULL, (wgl_obj_t)NULL); /*Create a 
button on the currently loaded screen*/
+    wgl_obj_set_event_cb(button, btn_event_cb); /*Set function to be called 
when the button is released*/
+    wgl_obj_align(button, (wgl_obj_t)NULL, WGL_ALIGN_IN_TOP_LEFT, 650, 
360+28*1); /*Align below the label*/
+
+    /*Create a label on the button*/
+    wgl_obj_t btn_label = wgl_label_create(button, (wgl_obj_t)NULL);
+    wgl_label_set_text(btn_label, "Click++");
+
+       return 0;
+}
+
+static void btn_event_cb(wgl_obj_t btn, wgl_event_t event)
+{
+    if(event == WGL_EVENT_RELEASED) {
+        button_counter_value++;
+        sprintf(button_counter_string, "Click counter:  %d", 
button_counter_value);
+        wgl_label_set_text(button_counter_label, button_counter_string);
+    }
+}
diff --git a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/ext_lib_export.c 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/ext_lib_export.c
new file mode 100755
index 0000000..e478b7e
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/ext_lib_export.c
@@ -0,0 +1,12 @@
+#include "lib_export.h"
+#include "native_interface.h"
+#include "connection_api.h"
+#include "gui_api.h"
+
+static NativeSymbol extended_native_symbol_defs[] = {
+#include "runtime_sensor.inl"
+#include "connection.inl"
+#include "wamr_gui.inl"
+};
+
+#include "ext_lib_export.h"
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c
new file mode 100755
index 0000000..856e864
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c
@@ -0,0 +1,512 @@
+
+#ifndef CONNECTION_UART
+#include <netdb.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#else
+#include <termios.h>
+#endif
+
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <signal.h>
+#include <unistd.h>
+#include <strings.h>
+
+#include "runtime_lib.h"
+#include "runtime_timer.h"
+#include "native_interface.h"
+#include "app_manager_export.h"
+#include "bh_common.h"
+#include "bh_queue.h"
+#include "bh_thread.h"
+#include "bh_memory.h"
+#include "runtime_sensor.h"
+#include "attr_container.h"
+#include "module_wasm_app.h"
+#include "wasm_export.h"
+
+#include "lv_drivers/display/monitor.h"
+#include "lv_drivers/indev/mouse.h"
+
+#define MAX 2048
+
+#ifndef CONNECTION_UART
+#define SA struct sockaddr
+static char *host_address = "127.0.0.1";
+static int port = 8888;
+#else
+static char *uart_device = "/dev/ttyS2";
+static int baudrate = B115200;
+#endif
+
+extern void * thread_timer_check(void *);
+extern void init_sensor_framework();
+extern int aee_host_msg_callback(void *msg, uint16_t msg_len);
+extern bool init_connection_framework();
+extern void wgl_init();
+
+#ifndef CONNECTION_UART
+int listenfd = -1;
+int sockfd = -1;
+static pthread_mutex_t sock_lock = PTHREAD_MUTEX_INITIALIZER;
+#else
+int uartfd = -1;
+#endif
+
+#ifndef CONNECTION_UART
+static bool server_mode = false;
+
+// Function designed for chat between client and server.
+void* func(void* arg)
+{
+    char buff[MAX];
+    int n;
+    struct sockaddr_in servaddr;
+
+    while (1) {
+        if (sockfd != -1)
+            close(sockfd);
+        // socket create and verification
+        sockfd = socket(AF_INET, SOCK_STREAM, 0);
+        if (sockfd == -1) {
+            printf("socket creation failed...\n");
+            return NULL;
+        } else
+            printf("Socket successfully created..\n");
+        bzero(&servaddr, sizeof(servaddr));
+        // assign IP, PORT
+        servaddr.sin_family = AF_INET;
+        servaddr.sin_addr.s_addr = inet_addr(host_address);
+        servaddr.sin_port = htons(port);
+
+        // connect the client socket to server socket
+        if (connect(sockfd, (SA*) &servaddr, sizeof(servaddr)) != 0) {
+            printf("connection with the server failed...\n");
+            sleep(10);
+            continue;
+        } else {
+            printf("connected to the server..\n");
+        }
+
+        // infinite loop for chat
+        for (;;) {
+            bzero(buff, MAX);
+
+            // read the message from client and copy it in buffer
+            n = read(sockfd, buff, sizeof(buff));
+            // print buffer which contains the client contents
+            //fprintf(stderr, "recieved %d bytes from host: %s", n, buff);
+
+            // socket disconnected
+            if (n <= 0)
+                break;
+
+            aee_host_msg_callback(buff, n);
+        }
+    }
+
+    // After chatting close the socket
+    close(sockfd);
+}
+
+static bool host_init()
+{
+    return true;
+}
+
+int host_send(void * ctx, const char *buf, int size)
+{
+    int ret;
+
+    if (pthread_mutex_trylock(&sock_lock) == 0) {
+        if (sockfd == -1) {
+            pthread_mutex_unlock(&sock_lock);
+            return 0;
+        }
+
+        ret = write(sockfd, buf, size);
+
+        pthread_mutex_unlock(&sock_lock);
+        return ret;
+    }
+
+    return -1;
+}
+
+void host_destroy()
+{
+    if (server_mode)
+        close(listenfd);
+
+    pthread_mutex_lock(&sock_lock);
+    close(sockfd);
+    pthread_mutex_unlock(&sock_lock);
+}
+
+host_interface interface = {
+                             .init = host_init,
+                             .send = host_send,
+                             .destroy = host_destroy
+                           };
+
+void* func_server_mode(void* arg)
+{
+    int clilent;
+    struct sockaddr_in serv_addr, cli_addr;
+    int n;
+    char buff[MAX];
+
+    struct sigaction sa;
+    sa.sa_handler = SIG_IGN;
+    sigaction(SIGPIPE, &sa, 0);
+
+    /* First call to socket() function */
+    listenfd = socket(AF_INET, SOCK_STREAM, 0);
+
+    if (listenfd < 0) {
+        perror("ERROR opening socket");
+        exit(1);
+    }
+
+    /* Initialize socket structure */
+    bzero((char *) &serv_addr, sizeof(serv_addr));
+
+    serv_addr.sin_family = AF_INET;
+    serv_addr.sin_addr.s_addr = INADDR_ANY;
+    serv_addr.sin_port = htons(port);
+
+    /* Now bind the host address using bind() call.*/
+    if (bind(listenfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) 
{
+        perror("ERROR on binding");
+        exit(1);
+    }
+
+    listen(listenfd, 5);
+    clilent = sizeof(cli_addr);
+
+    while (1) {
+        pthread_mutex_lock(&sock_lock);
+
+        sockfd = accept(listenfd, (struct sockaddr *) &cli_addr, &clilent);
+
+        pthread_mutex_unlock(&sock_lock);
+
+        if (sockfd < 0) {
+            perror("ERROR on accept");
+            exit(1);
+        }
+
+        printf("connection established!\n");
+
+        for (;;) {
+            bzero(buff, MAX);
+
+            // read the message from client and copy it in buffer
+            n = read(sockfd, buff, sizeof(buff));
+
+            // socket disconnected
+            if (n <= 0) {
+                pthread_mutex_lock(&sock_lock);
+                close(sockfd);
+                sockfd = -1;
+                pthread_mutex_unlock(&sock_lock);
+
+                sleep(2);
+                break;
+            }
+
+            aee_host_msg_callback(buff, n);
+        }
+    }
+}
+
+#else
+static int parse_baudrate(int baud)
+{
+    switch (baud) {
+        case 9600:
+            return B9600;
+        case 19200:
+            return B19200;
+        case 38400:
+            return B38400;
+        case 57600:
+            return B57600;
+        case 115200:
+            return B115200;
+        case 230400:
+            return B230400;
+        case 460800:
+            return B460800;
+        case 500000:
+            return B500000;
+        case 576000:
+            return B576000;
+        case 921600:
+            return B921600;
+        case 1000000:
+            return B1000000;
+        case 1152000:
+            return B1152000;
+        case 1500000:
+            return B1500000;
+        case 2000000:
+            return B2000000;
+        case 2500000:
+            return B2500000;
+        case 3000000:
+            return B3000000;
+        case 3500000:
+            return B3500000;
+        case 4000000:
+            return B4000000;
+        default:
+            return -1;
+    }
+}
+static bool uart_init(const char *device, int baudrate, int *fd)
+{
+    int uart_fd;
+    struct termios uart_term;
+
+    uart_fd = open(device, O_RDWR | O_NOCTTY);
+
+    if (uart_fd <= 0)
+        return false;
+
+    memset(&uart_term, 0, sizeof(uart_term));
+    uart_term.c_cflag = baudrate | CS8 | CLOCAL | CREAD;
+    uart_term.c_iflag = IGNPAR;
+    uart_term.c_oflag = 0;
+
+    /* set noncanonical mode */
+    uart_term.c_lflag = 0;
+    uart_term.c_cc[VTIME] = 30;
+    uart_term.c_cc[VMIN] = 1;
+    tcflush(uart_fd, TCIFLUSH);
+
+    if (tcsetattr(uart_fd, TCSANOW, &uart_term) != 0) {
+        close(uart_fd);
+        return false;
+    }
+
+    *fd = uart_fd;
+
+    return true;
+}
+
+static void *func_uart_mode(void *arg)
+{
+    int n;
+    char buff[MAX];
+
+    if (!uart_init(uart_device, baudrate, &uartfd)) {
+        printf("open uart fail! %s\n", uart_device);
+        return NULL;
+    }
+
+    for (;;) {
+        bzero(buff, MAX);
+
+        n = read(uartfd, buff, sizeof(buff));
+
+        if (n <= 0) {
+            close(uartfd);
+            uartfd = -1;
+            break;
+        }
+
+        aee_host_msg_callback(buff, n);
+    }
+
+    return NULL;
+}
+
+static int uart_send(void * ctx, const char *buf, int size)
+{
+    int ret;
+
+    ret = write(uartfd, buf, size);
+
+    return ret;
+}
+
+static void uart_destroy()
+{
+    close(uartfd);
+}
+
+static host_interface interface = { .send = uart_send, .destroy = uart_destroy 
};
+
+#endif
+
+static char global_heap_buf[270 * 1024] = { 0 };
+
+static void showUsage()
+{
+#ifndef CONNECTION_UART
+     printf("Usage:\n");
+     printf("\nWork as TCP server mode:\n");
+     printf("\tvgl_wasm_runtime -s|--server_mode -p|--port <Port>\n");
+     printf("where\n");
+     printf("\t<Port> represents the port that would be listened on and the 
default is 8888\n");
+     printf("\nWork as TCP client mode:\n");
+     printf("\tvgl_wasm_runtime -a|--host_address <Host Address> -p|--port 
<Port>\n");
+     printf("where\n");
+     printf("\t<Host Address> represents the network address of host and the 
default is 127.0.0.1\n");
+     printf("\t<Port> represents the listen port of host and the default is 
8888\n");
+#else
+     printf("Usage:\n");
+     printf("\tvgl_wasm_runtime -u <Uart Device> -b <Baudrate>\n\n");
+     printf("where\n");
+     printf("\t<Uart Device> represents the UART device name and the default 
is /dev/ttyS2\n");
+     printf("\t<Baudrate> represents the UART device baudrate and the default 
is 115200\n");
+#endif
+}
+
+static bool parse_args(int argc, char *argv[])
+{
+    int c;
+
+    while (1) {
+        int optIndex = 0;
+        static struct option longOpts[] = { 
+#ifndef CONNECTION_UART
+            { "server_mode",    no_argument,       NULL, 's' },
+            { "host_address",   required_argument, NULL, 'a' },
+            { "port",           required_argument, NULL, 'p' },
+#else
+            { "uart",           required_argument, NULL, 'u' },
+            { "baudrate",       required_argument, NULL, 'b' },
+#endif
+            { "help",           required_argument, NULL, 'h' },
+            { 0, 0, 0, 0 } 
+        };
+
+        c = getopt_long(argc, argv, "sa:p:u:b:h", longOpts, &optIndex);
+        if (c == -1)
+            break;
+
+        switch (c) {
+#ifndef CONNECTION_UART
+            case 's':
+                server_mode = true;
+                break;
+            case 'a':
+                host_address = optarg;
+                printf("host address: %s\n", host_address);
+                break;
+            case 'p':
+                port = atoi(optarg);
+                printf("port: %d\n", port);
+                break;
+#else
+            case 'u':
+                uart_device = optarg;
+                printf("uart device: %s\n", uart_device);
+                break;
+            case 'b':
+                baudrate = parse_baudrate(atoi(optarg));
+                printf("uart baudrate: %s\n", optarg);
+                break;
+#endif
+            case 'h':
+                showUsage();
+                return false;
+            default:
+                showUsage();
+                return false;
+        }
+    }
+
+    return true;
+}
+
+/**
+ * Initialize the Hardware Abstraction Layer (HAL) for the Littlev graphics 
library
+ */
+static void hal_init(void)
+{
+    /* Use the 'monitor' driver which creates window on PC's monitor to 
simulate a display*/
+    monitor_init();
+
+    /*Create a display buffer*/
+    static lv_disp_buf_t disp_buf1;
+    static lv_color_t buf1_1[480*10];
+    lv_disp_buf_init(&disp_buf1, buf1_1, NULL, 480*10);
+
+    /*Create a display*/
+    lv_disp_drv_t disp_drv;
+    lv_disp_drv_init(&disp_drv);            /*Basic initialization*/
+    disp_drv.buffer = &disp_buf1;
+    disp_drv.flush_cb = monitor_flush;
+    //    disp_drv.hor_res = 200;
+    //    disp_drv.ver_res = 100;
+    lv_disp_drv_register(&disp_drv);
+
+    /* Add the mouse as input device
+    * Use the 'mouse' driver which reads the PC's mouse*/
+    mouse_init();
+    lv_indev_drv_t indev_drv;
+    lv_indev_drv_init(&indev_drv);          /*Basic initialization*/
+    indev_drv.type = LV_INDEV_TYPE_POINTER;
+    indev_drv.read_cb = mouse_read;         /*This function will be called 
periodically (by the library) to get the mouse position and state*/
+    lv_indev_drv_register(&indev_drv);
+}
+
+// Driver function
+int iwasm_main(int argc, char *argv[])
+{
+    korp_thread tid;
+
+    if (!parse_args(argc, argv))
+        return -1;
+
+    if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf))
+            != 0) {
+        printf("Init global heap failed.\n");
+        return -1;
+    }
+
+    if (vm_thread_sys_init() != 0) {
+        goto fail1;
+    }
+
+    if (!init_connection_framework()) {
+        vm_thread_sys_destroy();
+        goto fail1;
+    }
+
+    wgl_init();
+
+    hal_init();
+
+    init_sensor_framework();
+
+    // timer manager
+    init_wasm_timer();
+
+#ifndef CONNECTION_UART
+    if (server_mode)
+        vm_thread_create(&tid, func_server_mode, NULL,
+        BH_APPLET_PRESERVED_STACK_SIZE);
+    else
+        vm_thread_create(&tid, func, NULL, BH_APPLET_PRESERVED_STACK_SIZE);
+#else
+    vm_thread_create(&tid, func_uart_mode, NULL, 
BH_APPLET_PRESERVED_STACK_SIZE);
+#endif
+
+    // TODO:
+    app_manager_startup(&interface);
+
+    fail1: bh_memory_destroy();
+    return -1;
+}
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/linux/lv_drv_conf.h 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/linux/lv_drv_conf.h
new file mode 100755
index 0000000..d216a3e
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/linux/lv_drv_conf.h
@@ -0,0 +1,310 @@
+/**
+ * @file lv_drv_conf.h
+ *
+ */
+
+/*
+ * COPY THIS FILE AS lv_drv_conf.h
+ */
+
+#if 1 /*Set it to "1" to enable the content*/
+
+#ifndef LV_DRV_CONF_H
+#define LV_DRV_CONF_H
+
+#include "lv_conf.h"
+
+/*********************
+ * DELAY INTERFACE
+ *********************/
+#define LV_DRV_DELAY_INCLUDE  <stdint.h>            /*Dummy include by 
default*/
+#define LV_DRV_DELAY_US(us)  /*delay_us(us)*/       /*Delay the given number 
of microseconds*/
+#define LV_DRV_DELAY_MS(ms)  /*delay_ms(ms)*/       /*Delay the given number 
of milliseconds*/
+
+/*********************
+ * DISPLAY INTERFACE
+ *********************/
+
+/*------------
+ *  Common
+ *------------*/
+#define LV_DRV_DISP_INCLUDE         <stdint.h>           /*Dummy include by 
default*/
+#define LV_DRV_DISP_CMD_DATA(val)  /*pin_x_set(val)*/    /*Set the 
command/data pin to 'val'*/
+#define LV_DRV_DISP_RST(val)       /*pin_x_set(val)*/    /*Set the reset pin 
to 'val'*/
+
+/*---------
+ *  SPI
+ *---------*/
+#define LV_DRV_DISP_SPI_CS(val)          /*spi_cs_set(val)*/     /*Set the 
SPI's Chip select to 'val'*/
+#define LV_DRV_DISP_SPI_WR_BYTE(data)    /*spi_wr(data)*/        /*Write a 
byte the SPI bus*/
+#define LV_DRV_DISP_SPI_WR_ARRAY(adr, n) /*spi_wr_mem(adr, n)*/  /*Write 'n' 
bytes to SPI bus from 'adr'*/
+
+/*------------------
+ *  Parallel port
+ *-----------------*/
+#define LV_DRV_DISP_PAR_CS(val)          /*par_cs_set(val)*/   /*Set the 
Parallel port's Chip select to 'val'*/
+#define LV_DRV_DISP_PAR_SLOW             /*par_slow()*/        /*Set low speed 
on the parallel port*/
+#define LV_DRV_DISP_PAR_FAST             /*par_fast()*/        /*Set high 
speed on the parallel port*/
+#define LV_DRV_DISP_PAR_WR_WORD(data)    /*par_wr(data)*/      /*Write a word 
to the parallel port*/
+#define LV_DRV_DISP_PAR_WR_ARRAY(adr, n) /*par_wr_mem(adr,n)*/ /*Write 'n' 
bytes to Parallel ports from 'adr'*/
+
+/***************************
+ * INPUT DEVICE INTERFACE
+ ***************************/
+
+/*----------
+ *  Common
+ *----------*/
+#define LV_DRV_INDEV_INCLUDE     <stdint.h>             /*Dummy include by 
default*/
+#define LV_DRV_INDEV_RST(val)    /*pin_x_set(val)*/     /*Set the reset pin to 
'val'*/
+#define LV_DRV_INDEV_IRQ_READ    0 /*pn_x_read()*/      /*Read the IRQ pin*/
+
+/*---------
+ *  SPI
+ *---------*/
+#define LV_DRV_INDEV_SPI_CS(val)            /*spi_cs_set(val)*/     /*Set the 
SPI's Chip select to 'val'*/
+#define LV_DRV_INDEV_SPI_XCHG_BYTE(data)    0 /*spi_xchg(val)*/     /*Write 
'val' to SPI and give the read value*/
+
+/*---------
+ *  I2C
+ *---------*/
+#define LV_DRV_INDEV_I2C_START              /*i2c_start()*/       /*Make an 
I2C start*/
+#define LV_DRV_INDEV_I2C_STOP               /*i2c_stop()*/        /*Make an 
I2C stop*/
+#define LV_DRV_INDEV_I2C_RESTART            /*i2c_restart()*/     /*Make an 
I2C restart*/
+#define LV_DRV_INDEV_I2C_WR(data)           /*i2c_wr(data)*/      /*Write a 
byte to the I1C bus*/
+#define LV_DRV_INDEV_I2C_READ(last_read)    0 /*i2c_rd()*/        /*Read a 
byte from the I2C bud*/
+
+
+/*********************
+ *  DISPLAY DRIVERS
+ *********************/
+
+/*-------------------
+ *  Monitor of PC
+ *-------------------*/
+#ifndef USE_MONITOR
+#  define USE_MONITOR         1
+#endif
+
+#if USE_MONITOR
+#  define MONITOR_HOR_RES     LV_HOR_RES_MAX
+#  define MONITOR_VER_RES     LV_VER_RES_MAX
+
+/* Scale window by this factor (useful when simulating small screens) */
+#  define MONITOR_ZOOM        1
+
+/* Used to test true double buffering with only address changing.
+ * Set LV_VDB_SIZE = (LV_HOR_RES * LV_VER_RES) and  LV_VDB_DOUBLE = 1 and 
LV_COLOR_DEPTH = 32" */
+#  define MONITOR_DOUBLE_BUFFERED 0
+
+/*Eclipse: <SDL2/SDL.h>    Visual Studio: <SDL.h>*/
+#  define MONITOR_SDL_INCLUDE_PATH    <SDL2/SDL.h>
+
+/*Different rendering might be used if running in a Virtual machine*/
+#  define MONITOR_VIRTUAL_MACHINE 0
+
+/*Open two windows to test multi display support*/
+#  define MONITOR_DUAL            0
+#endif
+
+/*-----------------------------------
+ *  Native Windows (including mouse)
+ *----------------------------------*/
+#ifndef USE_WINDOWS
+#  define USE_WINDOWS       0
+#endif
+
+#define USE_WINDOWS         0
+#if USE_WINDOWS
+#  define WINDOW_HOR_RES      480
+#  define WINDOW_VER_RES      320
+#endif
+
+/*----------------
+ *    SSD1963
+ *--------------*/
+#ifndef USE_SSD1963
+#  define USE_SSD1963         0
+#endif
+
+#if USE_SSD1963
+#  define SSD1963_HOR_RES     LV_HOR_RES
+#  define SSD1963_VER_RES     LV_VER_RES
+#  define SSD1963_HT          531
+#  define SSD1963_HPS         43
+#  define SSD1963_LPS         8
+#  define SSD1963_HPW         10
+#  define SSD1963_VT          288
+#  define SSD1963_VPS         12
+#  define SSD1963_FPS         4
+#  define SSD1963_VPW         10
+#  define SSD1963_HS_NEG      0   /*Negative hsync*/
+#  define SSD1963_VS_NEG      0   /*Negative vsync*/
+#  define SSD1963_ORI         0   /*0, 90, 180, 270*/
+#  define SSD1963_COLOR_DEPTH 16
+#endif
+
+/*----------------
+ *    R61581
+ *--------------*/
+#ifndef USE_R61581
+#  define USE_R61581          0
+#endif
+
+#if USE_R61581
+#  define R61581_HOR_RES      LV_HOR_RES
+#  define R61581_VER_RES      LV_VER_RES
+#  define R61581_HSPL         0       /*HSYNC signal polarity*/
+#  define R61581_HSL          10      /*HSYNC length (Not Implemented)*/
+#  define R61581_HFP          10      /*Horitontal Front poarch (Not 
Implemented)*/
+#  define R61581_HBP          10      /*Horitontal Back poarch (Not 
Implemented */
+#  define R61581_VSPL         0       /*VSYNC signal polarity*/
+#  define R61581_VSL          10      /*VSYNC length (Not Implemented)*/
+#  define R61581_VFP          8       /*Vertical Front poarch*/
+#  define R61581_VBP          8       /*Vertical Back poarch */
+#  define R61581_DPL          0       /*DCLK signal polarity*/
+#  define R61581_EPL          1       /*ENABLE signal polarity*/
+#  define R61581_ORI          0       /*0, 180*/
+#  define R61581_LV_COLOR_DEPTH 16    /*Fix 16 bit*/
+#endif
+
+/*------------------------------
+ *  ST7565 (Monochrome, low res.)
+ *-----------------------------*/
+#ifndef USE_ST7565
+#  define USE_ST7565          0
+#endif
+
+#if USE_ST7565
+/*No settings*/
+#endif  /*USE_ST7565*/
+
+/*-----------------------------------------
+ *  Linux frame buffer device (/dev/fbx)
+ *-----------------------------------------*/
+#ifndef USE_FBDEV
+#  define USE_FBDEV           1
+#endif
+
+#if USE_FBDEV
+#  define FBDEV_PATH          "/dev/fb0"
+#endif
+
+/*********************
+ *  INPUT DEVICES
+ *********************/
+
+/*--------------
+ *    XPT2046
+ *--------------*/
+#ifndef USE_XPT2046
+#  define USE_XPT2046         0
+#endif
+
+#if USE_XPT2046
+#  define XPT2046_HOR_RES     480
+#  define XPT2046_VER_RES     320
+#  define XPT2046_X_MIN       200
+#  define XPT2046_Y_MIN       200
+#  define XPT2046_X_MAX       3800
+#  define XPT2046_Y_MAX       3800
+#  define XPT2046_AVG         4
+#  define XPT2046_INV         0
+#endif
+
+/*-----------------
+ *    FT5406EE8
+ *-----------------*/
+#ifndef USE_FT5406EE8
+#  define USE_FT5406EE8       0
+#endif
+
+#if USE_FT5406EE8
+# define FT5406EE8_I2C_ADR   0x38                  /*7 bit address*/
+#endif
+
+/*---------------
+ *  AD TOUCH
+ *--------------*/
+#ifndef USE_AD_TOUCH
+#  define USE_AD_TOUCH        0
+#endif
+
+#if USE_AD_TOUCH
+/*No settings*/
+#endif
+
+
+/*---------------------------------------
+ * Mouse or touchpad on PC (using SDL)
+ *-------------------------------------*/
+#ifndef USE_MOUSE
+#  define USE_MOUSE           1
+#endif
+
+#if USE_MOUSE
+/*No settings*/
+#endif
+
+/*-------------------------------------------
+ * Mousewheel as encoder on PC (using SDL)
+ *------------------------------------------*/
+#ifndef USE_MOUSEWHEEL
+#  define USE_MOUSEWHEEL      1
+#endif
+
+#if USE_MOUSEWHEEL
+/*No settings*/
+#endif
+
+/*-------------------------------------------------
+ * Touchscreen as libinput interface (for Linux based systems)
+ *------------------------------------------------*/
+#ifndef USE_LIBINPUT
+#  define USE_LIBINPUT           0
+#endif
+
+#if USE_LIBINPUT
+#  define LIBINPUT_NAME   "/dev/input/event0"        /*You can use the 
"evtest" Linux tool to get the list of devices and test them*/
+#endif  /*USE_LIBINPUT*/
+
+/*-------------------------------------------------
+ * Mouse or touchpad as evdev interface (for Linux based systems)
+ *------------------------------------------------*/
+#ifndef USE_EVDEV
+#  define USE_EVDEV           0
+#endif
+
+#if USE_EVDEV
+#  define EVDEV_NAME   "/dev/input/event0"        /*You can use the "evtest" 
Linux tool to get the list of devices and test them*/
+#  define EVDEV_SWAP_AXES         0               /*Swap the x and y axes of 
the touchscreen*/
+
+#  define EVDEV_SCALE             0               /* Scale input, e.g. if 
touchscreen resolution does not match display resolution */
+#  if EVDEV_SCALE
+#    define EVDEV_SCALE_HOR_RES     (4096)          /* Horizontal resolution 
of touchscreen */
+#    define EVDEV_SCALE_VER_RES     (4096)          /* Vertical resolution of 
touchscreen */
+#  endif  /*EVDEV_SCALE*/
+
+#  define EVDEV_CALIBRATE         0               /*Scale and offset the 
touchscreen coordinates by using maximum and minimum values for each axis*/
+#  if EVDEV_CALIBRATE
+#    define EVDEV_HOR_MIN   3800                    /*If EVDEV_XXX_MIN > 
EVDEV_XXX_MAX the XXX axis is automatically inverted*/
+#    define EVDEV_HOR_MAX   200
+#    define EVDEV_VER_MIN   200
+#    define EVDEV_VER_MAX   3800
+#  endif  /*EVDEV_SCALE*/
+#endif  /*USE_EVDEV*/
+
+/*-------------------------------
+ *   Keyboard of a PC (using SDL)
+ *------------------------------*/
+#ifndef USE_KEYBOARD
+#  define USE_KEYBOARD        1
+#endif
+
+#if USE_KEYBOARD
+/*No settings*/
+#endif
+
+#endif  /*LV_DRV_CONF_H*/
+
+#endif /*End of "Content enable"*/
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/linux/main.c 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/linux/main.c
new file mode 100755
index 0000000..24cae03
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/linux/main.c
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+extern void iwasm_main(int argc, char *argv[]);
+int main(int argc, char *argv[])
+{
+    iwasm_main(argc,argv);
+}
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/LICENSE 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/LICENSE
new file mode 100755
index 0000000..8f71f43
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/LICENSE
@@ -0,0 +1,202 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.c 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.c
new file mode 100755
index 0000000..6d9048d
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.c
@@ -0,0 +1,337 @@
+/**
+ * @file XPT2046.c
+*/
+/*********************
+ *      INCLUDES
+ *********************/
+#include "XPT2046.h"
+#include "board_config.h"
+#include "stdio.h"
+#include <string.h>
+#include "spi.h"
+
+#include "zephyr.h"
+#include "kernel.h"
+
+#if USE_XPT2046
+
+#include <stddef.h>
+
+#define abs(x) ((x) < 0 ? -(x) : (x))
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static void xpt2046_corr(int16_t * x, int16_t * y);
+static void xpt2046_avg(int16_t * x, int16_t * y);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+int16_t avg_buf_x[XPT2046_AVG];
+int16_t avg_buf_y[XPT2046_AVG];
+uint8_t avg_last;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the XPT2046
+ */
+struct device *input_dev;
+
+struct spi_config spi_conf_xpt2046;
+struct spi_cs_control xpt2046_cs_ctrl;
+struct device *xpt2046_pen_gpio_dev;
+static struct gpio_callback gpio_cb;
+lv_indev_data_t touch_point;
+lv_indev_data_t last_touch_point;
+
+#define TOUCH_READ_THREAD_STACK_SIZE 4096
+static K_THREAD_STACK_DEFINE(touch_read_thread_stack, 
TOUCH_READ_THREAD_STACK_SIZE);
+static struct k_thread touch_thread_data;
+static struct k_sem sem_touch_read;
+
+K_MUTEX_DEFINE( spi_display_touch_mutex);
+
+int cnt = 0;
+int touch_read_times = 0;
+int last_pen_interrupt_time = 0;
+void xpt2046_pen_gpio_callback(struct device *port, struct gpio_callback *cb,
+        u32_t pins)
+{
+    int i;
+    cnt++;
+    if ((k_uptime_get_32() - last_pen_interrupt_time) > 500) {
+        k_sem_give(&sem_touch_read);
+        touch_read_times++;
+        last_pen_interrupt_time = k_uptime_get_32();
+    }
+
+}
+
+void disable_pen_interrupt()
+{
+    int ret = 0;
+    ret = gpio_pin_disable_callback(xpt2046_pen_gpio_dev, 
XPT2046_PEN_GPIO_PIN);
+    if (ret != 0) {
+        printf("gpio_pin_configure GPIO_DIR_IN failed\n");
+    }
+}
+void enable_pen_interrupt()
+{
+    int ret = 0;
+    ret = gpio_pin_enable_callback(xpt2046_pen_gpio_dev, XPT2046_PEN_GPIO_PIN);
+    if (ret != 0) {
+        printf("gpio_pin_configure failed\n");
+    }
+}
+
+void touch_screen_read_thread()
+{
+    int i;
+    bool ret = false;
+
+    for (;;) {
+        k_sem_take(&sem_touch_read, K_FOREVER);
+        memset(&last_touch_point, 0, sizeof(lv_indev_data_t));
+        memset(&touch_point, 0, sizeof(lv_indev_data_t));
+        memset(avg_buf_x, 0, sizeof(avg_buf_x));
+        memset(avg_buf_y, 0, sizeof(avg_buf_y));
+        k_mutex_lock(&spi_display_touch_mutex, K_FOREVER);
+        disable_pen_interrupt();
+        for (i = 0; i < 100; i++) {
+            ret = xpt2046_read(&touch_point);
+            if (ret) {
+                if ((abs(last_touch_point.point.x - touch_point.point.x) < 4)
+                        && (abs(last_touch_point.point.y - touch_point.point.y)
+                                < 4)) {
+                    break;
+                }
+                last_touch_point = touch_point;
+
+            }
+        }
+        enable_pen_interrupt();
+        k_mutex_unlock(&spi_display_touch_mutex);
+    }
+}
+
+void xpt2046_init(void)
+{
+    int ret;
+    input_dev = device_get_binding(XPT2046_SPI_DEVICE_NAME);
+
+    if (input_dev == NULL) {
+        printf("device not found.  Aborting test.");
+        return;
+    }
+    memset((void *) &touch_point, 0, sizeof(lv_indev_data_t));
+
+    spi_conf_xpt2046.frequency = XPT2046_SPI_MAX_FREQUENCY;
+    spi_conf_xpt2046.operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8);
+    spi_conf_xpt2046.slave = 0;
+    spi_conf_xpt2046.cs = NULL;
+#ifdef XPT2046_CS_GPIO_CONTROLLER
+    xpt2046_cs_ctrl.gpio_dev = device_get_binding(XPT2046_CS_GPIO_CONTROLLER);
+    if (xpt2046_cs_ctrl.gpio_dev == NULL) {
+        printk("Cannot find %s!\n", XPT2046_CS_GPIO_CONTROLLER);
+        return;
+    }
+    gpio_pin_configure(xpt2046_cs_ctrl.gpio_dev, XPT2046_CS_GPIO_PIN,
+                       GPIO_DIR_OUT);
+    gpio_pin_write(xpt2046_cs_ctrl.gpio_dev, XPT2046_CS_GPIO_PIN, 1);
+    xpt2046_cs_ctrl.gpio_pin = XPT2046_CS_GPIO_PIN;
+    xpt2046_cs_ctrl.delay = 0;
+    spi_conf_xpt2046.cs = &xpt2046_cs_ctrl;
+
+#endif
+
+#ifdef XPT2046_PEN_GPIO_CONTROLLER
+
+    xpt2046_pen_gpio_dev = device_get_binding(XPT2046_PEN_GPIO_CONTROLLER);
+    if (!xpt2046_pen_gpio_dev) {
+        printk("Cannot find %s!\n", XPT2046_PEN_GPIO_CONTROLLER);
+        return;
+    }
+    /* Setup GPIO input */
+    ret = gpio_pin_configure(xpt2046_pen_gpio_dev, XPT2046_PEN_GPIO_PIN,
+                             (GPIO_DIR_IN | GPIO_INT | GPIO_INT_EDGE
+                              | GPIO_INT_ACTIVE_LOW | GPIO_INT_DEBOUNCE)
+                            );
+    if (ret) {
+        printk("Error configuring pin %d!\n", XPT2046_PEN_GPIO_PIN);
+    }
+
+    gpio_init_callback(&gpio_cb, xpt2046_pen_gpio_callback,
+                       BIT(XPT2046_PEN_GPIO_PIN));
+
+    ret = gpio_add_callback(xpt2046_pen_gpio_dev, &gpio_cb);
+    if (ret) {
+        printk("gpio_add_callback error\n");
+    }
+    ret = gpio_pin_enable_callback(xpt2046_pen_gpio_dev, XPT2046_PEN_GPIO_PIN);
+    if (ret) {
+        printk("gpio_pin_enable_callback error\n");
+    }
+#endif
+
+    k_sem_init(&sem_touch_read, 0, 1);
+
+    k_thread_create(&touch_thread_data, touch_read_thread_stack,
+                    TOUCH_READ_THREAD_STACK_SIZE, touch_screen_read_thread,
+                    NULL, NULL, NULL, 5,
+                    0, K_NO_WAIT);
+    printf("xpt2046_init ok \n");
+}
+
+/**
+ * Get the current position and state of the touchpad
+ * @param data store the read data here
+ * @return false: because no ore data to be read
+ */
+bool xpt2046_read(lv_indev_data_t * data)
+{
+    static int16_t last_x = 0;
+    static int16_t last_y = 0;
+    bool valid = true;
+    int s32_ret = 0;
+    uint8_t buf;
+
+    int16_t x = 0;
+    int16_t y = 0;
+
+    char tx1[16] = { 0 };
+    char rx1[16] = { 0 };
+
+    struct spi_buf tx_buf = { .buf = &tx1, .len = 3 };
+    struct spi_buf_set tx_bufs = { .buffers = &tx_buf, .count = 1 };
+    struct spi_buf rx_buf = { .buf = &rx1, .len = 3 };
+    struct spi_buf_set rx_bufs = { .buffers = &rx_buf, .count = 1 };
+
+    tx1[0] = CMD_X_READ;
+    s32_ret = spi_transceive(input_dev, &spi_conf_xpt2046, &tx_bufs, &rx_bufs);
+    if (s32_ret != 0) {
+        printf("spi_transceive return failed:%d\n", s32_ret);
+    }
+    x = rx1[1] << 8;
+    x += rx1[2];
+
+    tx1[0] = CMD_Y_READ;
+    s32_ret = spi_transceive(input_dev, &spi_conf_xpt2046, &tx_bufs, &rx_bufs);
+    if (s32_ret != 0) {
+        printf("spi_transceive return failed:%d\n", s32_ret);
+    }
+    y = rx1[1] << 8;
+    y += rx1[2];
+    x = x >> 3;
+    y = y >> 3;
+
+    xpt2046_corr(&x, &y);
+    if (y <= 0 || (x > 320)) {
+        valid = false;
+    }
+
+    last_x = x;
+    last_y = y;
+
+    data->point.x = x;
+    data->point.y = y;
+    data->state = valid == false ? LV_INDEV_STATE_REL : LV_INDEV_STATE_PR;
+
+    return valid;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+static void xpt2046_corr(int16_t * x, int16_t * y)
+{
+#if XPT2046_XY_SWAP != 0
+    int16_t swap_tmp;
+    swap_tmp = *x;
+    *x = *y;
+    *y = swap_tmp;
+#endif
+
+    if ((*x) > XPT2046_X_MIN)
+        (*x) -= XPT2046_X_MIN;
+    else
+        (*x) = 0;
+
+    if ((*y) > XPT2046_Y_MIN)
+        (*y) -= XPT2046_Y_MIN;
+    else
+        (*y) = 0;
+
+    (*x) = (uint32_t)((uint32_t)(*x) * XPT2046_HOR_RES)
+            / (XPT2046_X_MAX - XPT2046_X_MIN);
+
+    (*y) = (uint32_t)((uint32_t)(*y) * XPT2046_VER_RES)
+            / (XPT2046_Y_MAX - XPT2046_Y_MIN);
+
+#if XPT2046_X_INV != 0
+    (*x) = XPT2046_HOR_RES - (*x);
+#endif
+
+#if XPT2046_Y_INV != 0
+    (*y) = XPT2046_VER_RES - (*y);
+#endif
+
+}
+
+static void xpt2046_avg(int16_t * x, int16_t * y)
+{
+    /*Shift out the oldest data*/
+    uint8_t i;
+    for (i = XPT2046_AVG - 1; i > 0; i--) {
+        avg_buf_x[i] = avg_buf_x[i - 1];
+        avg_buf_y[i] = avg_buf_y[i - 1];
+    }
+
+    /*Insert the new point*/
+    avg_buf_x[0] = *x;
+    avg_buf_y[0] = *y;
+    if (avg_last < XPT2046_AVG)
+        avg_last++;
+
+    /*Sum the x and y coordinates*/
+    int32_t x_sum = 0;
+    int32_t y_sum = 0;
+    for (i = 0; i < avg_last; i++) {
+        x_sum += avg_buf_x[i];
+        y_sum += avg_buf_y[i];
+    }
+
+    /*Normalize the sums*/
+    (*x) = (int32_t) x_sum / avg_last;
+    (*y) = (int32_t) y_sum / avg_last;
+}
+
+bool touchscreen_read(lv_indev_data_t * data)
+{
+    /*Store the collected data*/
+    data->point.x = last_touch_point.point.x;
+    data->point.y = last_touch_point.point.y;
+    data->state = last_touch_point.state;
+
+    if (last_touch_point.state == LV_INDEV_STATE_PR) {
+        last_touch_point.state = LV_INDEV_STATE_REL;
+    }
+    return false;
+}
+
+#endif
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.h 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.h
new file mode 100755
index 0000000..6f96c60
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.h
@@ -0,0 +1,71 @@
+/**
+ * @file XPT2046.h
+ *
+ */
+
+#ifndef XPT2046_H
+#define XPT2046_H
+
+#define USE_XPT2046 1
+#ifndef LV_CONF_INCLUDE_SIMPLE
+#define LV_CONF_INCLUDE_SIMPLE
+#endif
+
+#  define XPT2046_HOR_RES     320
+#  define XPT2046_VER_RES     240
+#  define XPT2046_X_MIN       200
+#  define XPT2046_Y_MIN       200
+#  define XPT2046_X_MAX       3800
+#  define XPT2046_Y_MAX       3800
+#  define XPT2046_AVG         4
+#  define XPT2046_INV         0
+
+#define CMD_X_READ  0b10010000
+#define CMD_Y_READ  0b11010000
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+//#include "lv_drv_conf.h"
+#else
+//#include "../../lv_drv_conf.h"
+#endif
+
+#if USE_XPT2046
+#include <autoconf.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "lv_hal/lv_hal_indev.h"
+#include "device.h"
+#include "gpio.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+void xpt2046_init(void);
+bool xpt2046_read(lv_indev_data_t * data);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /* USE_XPT2046 */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* XPT2046_H */
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/board_config.h
 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/board_config.h
new file mode 100755
index 0000000..1233c30
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/board_config.h
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __BOARD_CONFIG_H__
+#define __BOARD_CONFIG_H__
+#include "pin_config_stm32.h"
+
+#endif /* __BOARD_CONFIG_H__ */
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display.h 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display.h
new file mode 100755
index 0000000..b820b9c
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display.h
@@ -0,0 +1,405 @@
+/*
+ * Copyright (c) 2017 Jan Van Winkel <jan.van_winkel@xxxxxxxxxx>
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @file
+ * @brief Public API for display drivers and applications
+ */
+
+#ifndef ZEPHYR_INCLUDE_DISPLAY_H_
+#define ZEPHYR_INCLUDE_DISPLAY_H_
+
+/**
+ * @brief Display Interface
+ * @defgroup display_interface Display Interface
+ * @ingroup display_interfaces
+ * @{
+ */
+
+#include <device.h>
+#include <stddef.h>
+#include <zephyr/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum display_pixel_format {
+    PIXEL_FORMAT_RGB_888 = BIT(0), PIXEL_FORMAT_MONO01 = BIT(1), /* 0=Black 
1=White */
+    PIXEL_FORMAT_MONO10 = BIT(2), /* 1=Black 0=White */
+    PIXEL_FORMAT_ARGB_8888 = BIT(3), PIXEL_FORMAT_RGB_565 = BIT(4),
+};
+
+enum display_screen_info {
+    /**
+     * If selected, one octet represents 8 pixels ordered vertically,
+     * otherwise ordered horizontally.
+     */
+    SCREEN_INFO_MONO_VTILED = BIT(0),
+    /**
+     * If selected, the MSB represents the first pixel,
+     * otherwise MSB represents the last pixel.
+     */
+    SCREEN_INFO_MONO_MSB_FIRST = BIT(1),
+    /**
+     * Electrophoretic Display.
+     */
+    SCREEN_INFO_EPD = BIT(2),
+    /**
+     * Screen has two alternating ram buffers
+     */
+    SCREEN_INFO_DOUBLE_BUFFER = BIT(3),
+};
+
+/**
+ * @enum display_orientation
+ * @brief Enumeration with possible display orientation
+ *
+ */
+enum display_orientation {
+    DISPLAY_ORIENTATION_NORMAL,
+    DISPLAY_ORIENTATION_ROTATED_90,
+    DISPLAY_ORIENTATION_ROTATED_180,
+    DISPLAY_ORIENTATION_ROTATED_270,
+};
+
+/**
+ * @struct display_capabilities
+ * @brief Structure holding display capabilities
+ *
+ * @var u16_t display_capabilities::x_resolution
+ * Display resolution in the X direction
+ *
+ * @var u16_t display_capabilities::y_resolution
+ * Display resolution in the Y direction
+ *
+ * @var u32_t display_capabilities::supported_pixel_formats
+ * Bitwise or of pixel formats supported by the display
+ *
+ * @var u32_t display_capabilities::screen_info
+ * Information about display panel
+ *
+ * @var enum display_pixel_format display_capabilities::current_pixel_format
+ * Currently active pixel format for the display
+ *
+ * @var enum display_orientation display_capabilities::current_orientation
+ * Current display orientation
+ *
+ */
+struct display_capabilities {
+    u16_t x_resolution;
+    u16_t y_resolution;
+    u32_t supported_pixel_formats;
+    u32_t screen_info;
+    enum display_pixel_format current_pixel_format;
+    enum display_orientation current_orientation;
+};
+
+/**
+ * @struct display_buffer_descriptor
+ * @brief Structure to describe display data buffer layout
+ *
+ * @var u32_t display_buffer_descriptor::buf_size
+ * Data buffer size in bytes
+ *
+ * @var u16_t display_buffer_descriptor::width
+ * Data buffer row width in pixels
+ *
+ * @var u16_t display_buffer_descriptor::height
+ * Data buffer column height in pixels
+ *
+ * @var u16_t display_buffer_descriptor::pitch
+ * Number of pixels between consecutive rows in the data buffer
+ *
+ */
+struct display_buffer_descriptor {
+    u32_t buf_size;
+    u16_t width;
+    u16_t height;
+    u16_t pitch;
+};
+
+/**
+ * @typedef display_blanking_on_api
+ * @brief Callback API to turn on display blanking
+ * See display_blanking_on() for argument description
+ */
+typedef int (*display_blanking_on_api)(const struct device *dev);
+
+/**
+ * @typedef display_blanking_off_api
+ * @brief Callback API to turn off display blanking
+ * See display_blanking_off() for argument description
+ */
+typedef int (*display_blanking_off_api)(const struct device *dev);
+
+/**
+ * @typedef display_write_api
+ * @brief Callback API for writing data to the display
+ * See display_write() for argument description
+ */
+typedef int (*display_write_api)(const struct device *dev, const u16_t x,
+        const u16_t y, const struct display_buffer_descriptor *desc,
+        const void *buf);
+
+/**
+ * @typedef display_read_api
+ * @brief Callback API for reading data from the display
+ * See display_read() for argument description
+ */
+typedef int (*display_read_api)(const struct device *dev, const u16_t x,
+        const u16_t y, const struct display_buffer_descriptor *desc, void 
*buf);
+
+/**
+ * @typedef display_get_framebuffer_api
+ * @brief Callback API to get framebuffer pointer
+ * See display_get_framebuffer() for argument description
+ */
+typedef void *(*display_get_framebuffer_api)(const struct device *dev);
+
+/**
+ * @typedef display_set_brightness_api
+ * @brief Callback API to set display brightness
+ * See display_set_brightness() for argument description
+ */
+typedef int (*display_set_brightness_api)(const struct device *dev,
+        const u8_t brightness);
+
+/**
+ * @typedef display_set_contrast_api
+ * @brief Callback API to set display contrast
+ * See display_set_contrast() for argument description
+ */
+typedef int (*display_set_contrast_api)(const struct device *dev,
+        const u8_t contrast);
+
+/**
+ * @typedef display_get_capabilities_api
+ * @brief Callback API to get display capabilities
+ * See display_get_capabilities() for argument description
+ */
+typedef void (*display_get_capabilities_api)(const struct device *dev,
+        struct display_capabilities * capabilities);
+
+/**
+ * @typedef display_set_pixel_format_api
+ * @brief Callback API to set pixel format used by the display
+ * See display_set_pixel_format() for argument description
+ */
+typedef int (*display_set_pixel_format_api)(const struct device *dev,
+        const enum display_pixel_format pixel_format);
+
+/**
+ * @typedef display_set_orientation_api
+ * @brief Callback API to set orientation used by the display
+ * See display_set_orientation() for argument description
+ */
+typedef int (*display_set_orientation_api)(const struct device *dev,
+        const enum display_orientation orientation);
+
+/**
+ * @brief Display driver API
+ * API which a display driver should expose
+ */
+struct display_driver_api {
+    display_blanking_on_api blanking_on;
+    display_blanking_off_api blanking_off;
+    display_write_api write;
+    display_read_api read;
+    display_get_framebuffer_api get_framebuffer;
+    display_set_brightness_api set_brightness;
+    display_set_contrast_api set_contrast;
+    display_get_capabilities_api get_capabilities;
+    display_set_pixel_format_api set_pixel_format;
+    display_set_orientation_api set_orientation;
+};
+extern struct ili9340_data ili9340_data1;
+extern struct display_driver_api ili9340_api1;
+/**
+ * @brief Write data to display
+ *
+ * @param dev Pointer to device structure
+ * @param x x Coordinate of the upper left corner where to write the buffer
+ * @param y y Coordinate of the upper left corner where to write the buffer
+ * @param desc Pointer to a structure describing the buffer layout
+ * @param buf Pointer to buffer array
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_write(const struct device *dev, const u16_t x,
+        const u16_t y, const struct display_buffer_descriptor *desc,
+        const void *buf)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->write(dev, x, y, desc, buf);
+}
+
+/**
+ * @brief Read data from display
+ *
+ * @param dev Pointer to device structure
+ * @param x x Coordinate of the upper left corner where to read from
+ * @param y y Coordinate of the upper left corner where to read from
+ * @param desc Pointer to a structure describing the buffer layout
+ * @param buf Pointer to buffer array
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_read(const struct device *dev, const u16_t x,
+        const u16_t y, const struct display_buffer_descriptor *desc, void *buf)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->read(dev, x, y, desc, buf);
+}
+
+/**
+ * @brief Get pointer to framebuffer for direct access
+ *
+ * @param dev Pointer to device structure
+ *
+ * @retval Pointer to frame buffer or NULL if direct framebuffer access
+ * is not supported
+ *
+ */
+static inline void *display_get_framebuffer(const struct device *dev)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->get_framebuffer(dev);
+}
+
+/**
+ * @brief Turn display blanking on
+ *
+ * @param dev Pointer to device structure
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_blanking_on(const struct device *dev)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->blanking_on(dev);
+}
+
+/**
+ * @brief Turn display blanking off
+ *
+ * @param dev Pointer to device structure
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_blanking_off(const struct device *dev)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->blanking_off(dev);
+}
+
+/**
+ * @brief Set the brightness of the display
+ *
+ * Set the brightness of the display in steps of 1/256, where 255 is full
+ * brightness and 0 is minimal.
+ *
+ * @param dev Pointer to device structure
+ * @param brightness Brightness in steps of 1/256
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_set_brightness(const struct device *dev,
+        u8_t brightness)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->set_brightness(dev, brightness);
+}
+
+/**
+ * @brief Set the contrast of the display
+ *
+ * Set the contrast of the display in steps of 1/256, where 255 is maximum
+ * difference and 0 is minimal.
+ *
+ * @param dev Pointer to device structure
+ * @param contrast Contrast in steps of 1/256
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_set_contrast(const struct device *dev, u8_t contrast)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->set_contrast(dev, contrast);
+}
+
+/**
+ * @brief Get display capabilities
+ *
+ * @param dev Pointer to device structure
+ * @param capabilities Pointer to capabilities structure to populate
+ */
+static inline void display_get_capabilities(const struct device *dev,
+        struct display_capabilities * capabilities)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    api->get_capabilities(dev, capabilities);
+}
+
+/**
+ * @brief Set pixel format used by the display
+ *
+ * @param dev Pointer to device structure
+ * @param pixel_format Pixel format to be used by display
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_set_pixel_format(const struct device *dev,
+        const enum display_pixel_format pixel_format)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->set_pixel_format(dev, pixel_format);
+}
+
+/**
+ * @brief Set display orientation
+ *
+ * @param dev Pointer to device structure
+ * @param orientation Orientation to be used by display
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_set_orientation(const struct device *dev,
+        const enum display_orientation orientation)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->set_orientation(dev, orientation);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/**
+ * @}
+ */
+
+#endif /* ZEPHYR_INCLUDE_DISPLAY_H_*/
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.c
 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.c
new file mode 100755
index 0000000..07e77ff
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.c
@@ -0,0 +1,264 @@
+/*
+ * Copyright (c) 2017 Jan Van Winkel <jan.van_winkel@xxxxxxxxxx>
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include "display_ili9340.h"
+#include <display.h>
+
+//#define LOG_LEVEL CONFIG_DISPLAY_LOG_LEVEL
+//#include <logging/log.h>
+//LOG_MODULE_REGISTER(display_ili9340);
+#define LOG_ERR printf
+#define LOG_DBG printf
+#define LOG_WRN printf
+
+#include <gpio.h>
+#include <misc/byteorder.h>
+#include <spi.h>
+#include <string.h>
+
+struct ili9340_data {
+    struct device *reset_gpio;
+    struct device *command_data_gpio;
+    struct device *spi_dev;
+    struct spi_config spi_config;
+#ifdef DT_ILITEK_ILI9340_0_CS_GPIO_CONTROLLER
+struct spi_cs_control cs_ctrl;
+#endif
+};
+
+struct ili9340_data ili9340_data1;
+
+#define ILI9340_CMD_DATA_PIN_COMMAND 0
+#define ILI9340_CMD_DATA_PIN_DATA 1
+
+static void ili9340_exit_sleep(struct ili9340_data *data)
+{
+    ili9340_transmit(data, ILI9340_CMD_EXIT_SLEEP, NULL, 0);
+    //k_sleep(120);
+}
+
+int ili9340_init()
+{
+    struct ili9340_data *data = &ili9340_data1;
+    printf("Initializing display driver\n");
+    data->spi_dev = device_get_binding(DT_ILITEK_ILI9340_0_BUS_NAME);
+    if (data->spi_dev == NULL) {
+        return -EPERM;
+    }
+    data->spi_config.frequency = DT_ILITEK_ILI9340_0_SPI_MAX_FREQUENCY;
+    data->spi_config.operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8); 
//SPI_OP_MODE_MASTER | SPI_WORD_SET(8);
+    data->spi_config.slave = DT_ILITEK_ILI9340_0_BASE_ADDRESS;
+
+#ifdef DT_ILITEK_ILI9340_0_CS_GPIO_CONTROLLER
+    data->cs_ctrl.gpio_dev =
+    device_get_binding(DT_ILITEK_ILI9340_0_CS_GPIO_CONTROLLER);
+    data->cs_ctrl.gpio_pin = DT_ILITEK_ILI9340_0_CS_GPIO_PIN;
+    data->cs_ctrl.delay = 0;
+    data->spi_config.cs = &(data->cs_ctrl);
+#else
+    data->spi_config.cs = NULL;
+#endif
+    data->reset_gpio = device_get_binding(
+        DT_ILITEK_ILI9340_0_RESET_GPIOS_CONTROLLER);
+    if (data->reset_gpio == NULL) {
+        return -EPERM;
+    }
+
+    gpio_pin_configure(data->reset_gpio, DT_ILITEK_ILI9340_0_RESET_GPIOS_PIN,
+        GPIO_DIR_OUT);
+
+    data->command_data_gpio = device_get_binding(
+        DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_CONTROLLER);
+    if (data->command_data_gpio == NULL) {    
+        return -EPERM;
+    }
+
+    gpio_pin_configure(data->command_data_gpio,
+        DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_PIN, GPIO_DIR_OUT);
+
+    LOG_DBG("Resetting display driver");
+    gpio_pin_write(data->reset_gpio, DT_ILITEK_ILI9340_0_RESET_GPIOS_PIN, 1);
+    k_sleep(1);
+    gpio_pin_write(data->reset_gpio, DT_ILITEK_ILI9340_0_RESET_GPIOS_PIN, 0);
+    k_sleep(1);
+    gpio_pin_write(data->reset_gpio, DT_ILITEK_ILI9340_0_RESET_GPIOS_PIN, 1);
+    k_sleep(5);
+
+    LOG_DBG("Initializing LCD\n");
+    ili9340_lcd_init(data);
+
+    LOG_DBG("Exiting sleep mode\n");
+    ili9340_exit_sleep(data);
+
+    return 0;
+}
+
+static void ili9340_set_mem_area(struct ili9340_data *data, const u16_t x,
+    const u16_t y, const u16_t w, const u16_t h)
+{
+    u16_t spi_data[2];
+
+    spi_data[0] = sys_cpu_to_be16(x);
+    spi_data[1] = sys_cpu_to_be16(x + w - 1);
+    ili9340_transmit(data, ILI9340_CMD_COLUMN_ADDR, &spi_data[0], 4);
+
+    spi_data[0] = sys_cpu_to_be16(y);
+    spi_data[1] = sys_cpu_to_be16(y + h - 1);
+    ili9340_transmit(data, ILI9340_CMD_PAGE_ADDR, &spi_data[0], 4);
+}
+
+static int ili9340_write(const struct device *dev, const u16_t x, const u16_t 
y,
+    const struct display_buffer_descriptor *desc, const void *buf)
+{
+    struct ili9340_data *data = (struct ili9340_data *) &ili9340_data1;
+    const u8_t *write_data_start = (u8_t *) buf;
+    struct spi_buf tx_buf;
+    struct spi_buf_set tx_bufs;
+    u16_t write_cnt;
+    u16_t nbr_of_writes;
+    u16_t write_h;
+
+    __ASSERT(desc->width <= desc->pitch, "Pitch is smaller then width");
+    __ASSERT((3 * desc->pitch * desc->height) <= desc->buf_size,
+        "Input buffer to small");
+    ili9340_set_mem_area(data, x, y, desc->width, desc->height);
+
+    if (desc->pitch > desc->width) {
+        write_h = 1U;
+        nbr_of_writes = desc->height;
+    } else {
+        write_h = desc->height;
+        nbr_of_writes = 1U;
+    }
+    ili9340_transmit(data, ILI9340_CMD_MEM_WRITE, (void *) write_data_start,
+        3 * desc->width * write_h);
+
+    tx_bufs.buffers = &tx_buf;
+    tx_bufs.count = 1;
+
+    write_data_start += (3 * desc->pitch);
+    for (write_cnt = 1U; write_cnt < nbr_of_writes; ++write_cnt) {
+        tx_buf.buf = (void *) write_data_start;
+        tx_buf.len = 3 * desc->width * write_h;
+        spi_transceive(data->spi_dev, &data->spi_config, &tx_bufs, NULL);
+        write_data_start += (3 * desc->pitch);
+    }
+
+    return 0;
+}
+
+static int ili9340_read(const struct device *dev, const u16_t x, const u16_t y,
+    const struct display_buffer_descriptor *desc, void *buf)
+{
+    LOG_ERR("Reading not supported");
+    return -ENOTSUP;
+}
+
+static void *ili9340_get_framebuffer(const struct device *dev)
+{
+    LOG_ERR("Direct framebuffer access not supported");
+    return NULL;
+}
+
+static int ili9340_display_blanking_off(const struct device *dev)
+{
+    struct ili9340_data *data = (struct ili9340_data *) dev->driver_data;
+
+    LOG_DBG("Turning display blanking off");
+    ili9340_transmit(data, ILI9340_CMD_DISPLAY_ON, NULL, 0);
+    return 0;
+}
+
+static int ili9340_display_blanking_on(const struct device *dev)
+{
+    struct ili9340_data *data = (struct ili9340_data *) dev->driver_data;
+
+    LOG_DBG("Turning display blanking on");
+    ili9340_transmit(data, ILI9340_CMD_DISPLAY_OFF, NULL, 0);
+    return 0;
+}
+
+static int ili9340_set_brightness(const struct device *dev,
+    const u8_t brightness)
+{
+    LOG_WRN("Set brightness not implemented");
+    return -ENOTSUP;
+}
+
+static int ili9340_set_contrast(const struct device *dev, const u8_t contrast)
+{
+    LOG_ERR("Set contrast not supported");
+    return -ENOTSUP;
+}
+
+static int ili9340_set_pixel_format(const struct device *dev,
+    const enum display_pixel_format pixel_format)
+{
+    if (pixel_format == PIXEL_FORMAT_RGB_888) {
+    return 0;
+}
+    LOG_ERR("Pixel format change not implemented");
+    return -ENOTSUP;
+}
+
+static int ili9340_set_orientation(const struct device *dev,
+    const enum display_orientation orientation)
+{
+if (orientation == DISPLAY_ORIENTATION_NORMAL) {
+    return 0;
+}
+LOG_ERR("Changing display orientation not implemented");
+    return -ENOTSUP;
+}
+
+static void ili9340_get_capabilities(const struct device *dev,
+    struct display_capabilities *capabilities)
+{
+    memset(capabilities, 0, sizeof(struct display_capabilities));
+    capabilities->x_resolution = 320;
+    capabilities->y_resolution = 240;
+    capabilities->supported_pixel_formats = PIXEL_FORMAT_RGB_888;
+    capabilities->current_pixel_format = PIXEL_FORMAT_RGB_888;
+    capabilities->current_orientation = DISPLAY_ORIENTATION_NORMAL;
+}
+
+void ili9340_transmit(struct ili9340_data *data, u8_t cmd, void *tx_data,
+    size_t tx_len)
+{
+    int i;
+    char * buf1 = tx_data;
+    data = (struct ili9340_data *) &ili9340_data1;
+    struct spi_buf tx_buf = { .buf = &cmd, .len = 1 };
+    struct spi_buf_set tx_bufs = { .buffers = &tx_buf, .count = 1 };
+
+    gpio_pin_write(data->command_data_gpio, 
DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_PIN,
+        ILI9340_CMD_DATA_PIN_COMMAND);
+    spi_transceive(data->spi_dev, &data->spi_config, &tx_bufs, NULL);
+    if (tx_data != NULL) {
+        tx_buf.buf = tx_data;
+        tx_buf.len = tx_len;
+        gpio_pin_write(data->command_data_gpio,
+        DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_PIN,
+        ILI9340_CMD_DATA_PIN_DATA);
+        spi_transceive(data->spi_dev, &data->spi_config, &tx_bufs, NULL);
+    }
+}
+
+struct display_driver_api ili9340_api1 =
+    { .blanking_on = ili9340_display_blanking_on, .blanking_off =
+            ili9340_display_blanking_off, .write = ili9340_write, .read =
+            ili9340_read, .get_framebuffer = ili9340_get_framebuffer,
+            .set_brightness = ili9340_set_brightness, .set_contrast =
+                    ili9340_set_contrast, .get_capabilities =
+                    ili9340_get_capabilities, .set_pixel_format =
+                    ili9340_set_pixel_format, .set_orientation =
+                    ili9340_set_orientation, };
+
+/*
+ DEVICE_AND_API_INIT(ili9340, DT_ILITEK_ILI9340_0_LABEL, &ili9340_init,
+ &ili9340_data, NULL, APPLICATION,
+ CONFIG_APPLICATION_INIT_PRIORITY, &ili9340_api);
+ */
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.h
 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.h
new file mode 100755
index 0000000..8aab97a
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2017 Jan Van Winkel <jan.van_winkel@xxxxxxxxxx>
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+#ifndef ZEPHYR_DRIVERS_DISPLAY_DISPLAY_ILI9340_H_
+#define ZEPHYR_DRIVERS_DISPLAY_DISPLAY_ILI9340_H_
+#include "board_config.h"
+#include <autoconf.h>
+#include <zephyr.h>
+
+#define ILI9340_CMD_ENTER_SLEEP 0x10
+#define ILI9340_CMD_EXIT_SLEEP 0x11
+#define ILI9340_CMD_GAMMA_SET 0x26
+#define ILI9340_CMD_DISPLAY_OFF 0x28
+#define ILI9340_CMD_DISPLAY_ON 0x29
+#define ILI9340_CMD_COLUMN_ADDR 0x2a
+#define ILI9340_CMD_PAGE_ADDR 0x2b
+#define ILI9340_CMD_MEM_WRITE 0x2c
+#define ILI9340_CMD_MEM_ACCESS_CTRL 0x36
+#define ILI9340_CMD_PIXEL_FORMAT_SET 0x3A
+#define ILI9340_CMD_FRAME_CTRL_NORMAL_MODE 0xB1
+#define ILI9340_CMD_DISPLAY_FUNCTION_CTRL 0xB6
+#define ILI9340_CMD_POWER_CTRL_1 0xC0
+#define ILI9340_CMD_POWER_CTRL_2 0xC1
+#define ILI9340_CMD_VCOM_CTRL_1 0xC5
+#define ILI9340_CMD_VCOM_CTRL_2 0xC7
+#define ILI9340_CMD_POSITVE_GAMMA_CORRECTION 0xE0
+#define ILI9340_CMD_NEGATIVE_GAMMA_CORRECTION 0xE1
+
+#define ILI9340_DATA_MEM_ACCESS_CTRL_MY 0x80
+#define ILI9340_DATA_MEM_ACCESS_CTRL_MX 0x40
+#define ILI9340_DATA_MEM_ACCESS_CTRL_MV 0x20
+#define ILI9340_DATA_MEM_ACCESS_CTRL_ML 0x10
+#define ILI9340_DATA_MEM_ACCESS_CTRL_BGR 0x08
+#define ILI9340_DATA_MEM_ACCESS_CTRL_MH 0x04
+
+#define ILI9340_DATA_PIXEL_FORMAT_RGB_18_BIT 0x60
+#define ILI9340_DATA_PIXEL_FORMAT_RGB_16_BIT 0x50
+#define ILI9340_DATA_PIXEL_FORMAT_MCU_18_BIT 0x06
+#define ILI9340_DATA_PIXEL_FORMAT_MCU_16_BIT 0x05
+
+struct ili9340_data;
+
+/**
+ * Send data to ILI9340 display controller
+ *
+ * @param data Device data structure
+ * @param cmd Command to send to display controller
+ * @param tx_data Data to transmit to the display controller
+ * In case no data should be transmitted pass a NULL pointer
+ * @param tx_len Number of bytes in tx_data buffer
+ *
+ */
+void ili9340_transmit(struct ili9340_data *data, u8_t cmd, void *tx_data,
+        size_t tx_len);
+
+/**
+ * Perform LCD specific initialization
+ *
+ * @param data Device data structure
+ */
+void ili9340_lcd_init(struct ili9340_data *data);
+
+#define DT_ILITEK_ILI9340_0_LABEL "DISPLAY"
+#define CONFIG_DISPLAY_LOG_LEVEL 0
+
+#endif /* ZEPHYR_DRIVERS_DISPLAY_DISPLAY_ILI9340_H_ */
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340_adafruit_1480.c
 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340_adafruit_1480.c
new file mode 100755
index 0000000..a8581a7
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340_adafruit_1480.c
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2017 Jan Van Winkel <jan.van_winkel@xxxxxxxxxx>
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include "display_ili9340.h"
+
+void ili9340_lcd_init(struct ili9340_data *data)
+{
+    u8_t tx_data[15];
+
+    tx_data[0] = 0x23;
+    ili9340_transmit(data, ILI9340_CMD_POWER_CTRL_1, tx_data, 1);
+
+    tx_data[0] = 0x10;
+    ili9340_transmit(data, ILI9340_CMD_POWER_CTRL_2, tx_data, 1);
+
+    tx_data[0] = 0x3e;
+    tx_data[1] = 0x28;
+    ili9340_transmit(data, ILI9340_CMD_VCOM_CTRL_1, tx_data, 2);
+
+    tx_data[0] = 0x86;
+    ili9340_transmit(data, ILI9340_CMD_VCOM_CTRL_2, tx_data, 1);
+
+    tx_data[0] =
+    ILI9340_DATA_MEM_ACCESS_CTRL_MV | ILI9340_DATA_MEM_ACCESS_CTRL_BGR;
+    ili9340_transmit(data, ILI9340_CMD_MEM_ACCESS_CTRL, tx_data, 1);
+
+    tx_data[0] = ILI9340_DATA_PIXEL_FORMAT_MCU_18_BIT |
+    ILI9340_DATA_PIXEL_FORMAT_RGB_18_BIT;
+    ili9340_transmit(data, ILI9340_CMD_PIXEL_FORMAT_SET, tx_data, 1);
+
+    tx_data[0] = 0x00;
+    tx_data[1] = 0x18;
+    ili9340_transmit(data, ILI9340_CMD_FRAME_CTRL_NORMAL_MODE, tx_data, 2);
+
+    tx_data[0] = 0x08;
+    tx_data[1] = 0x82;
+    tx_data[2] = 0x27;
+    ili9340_transmit(data, ILI9340_CMD_DISPLAY_FUNCTION_CTRL, tx_data, 3);
+
+    tx_data[0] = 0x01;
+    ili9340_transmit(data, ILI9340_CMD_GAMMA_SET, tx_data, 1);
+
+    tx_data[0] = 0x0F;
+    tx_data[1] = 0x31;
+    tx_data[2] = 0x2B;
+    tx_data[3] = 0x0C;
+    tx_data[4] = 0x0E;
+    tx_data[5] = 0x08;
+    tx_data[6] = 0x4E;
+    tx_data[7] = 0xF1;
+    tx_data[8] = 0x37;
+    tx_data[9] = 0x07;
+    tx_data[10] = 0x10;
+    tx_data[11] = 0x03;
+    tx_data[12] = 0x0E;
+    tx_data[13] = 0x09;
+    tx_data[14] = 0x00;
+    ili9340_transmit(data, ILI9340_CMD_POSITVE_GAMMA_CORRECTION, tx_data, 15);
+
+    tx_data[0] = 0x00;
+    tx_data[1] = 0x0E;
+    tx_data[2] = 0x14;
+    tx_data[3] = 0x03;
+    tx_data[4] = 0x11;
+    tx_data[5] = 0x07;
+    tx_data[6] = 0x31;
+    tx_data[7] = 0xC1;
+    tx_data[8] = 0x48;
+    tx_data[9] = 0x08;
+    tx_data[10] = 0x0F;
+    tx_data[11] = 0x0C;
+    tx_data[12] = 0x31;
+    tx_data[13] = 0x36;
+    tx_data[14] = 0x0F;
+    ili9340_transmit(data, ILI9340_CMD_NEGATIVE_GAMMA_CORRECTION, tx_data, 15);
+}
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c
new file mode 100755
index 0000000..4868155
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c
@@ -0,0 +1,184 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "bh_platform.h"
+#include "runtime_lib.h"
+#include "native_interface.h"
+#include "app_manager_export.h"
+#include "board_config.h"
+#include "bh_common.h"
+#include "bh_queue.h"
+#include "bh_thread.h"
+#include "bh_memory.h"
+#include "runtime_sensor.h"
+#include "attr_container.h"
+#include "module_wasm_app.h"
+#include "wasm_export.h"
+#include "display.h"
+#include "lvgl.h"
+
+extern void * thread_timer_check(void *);
+extern void init_sensor_framework();
+extern int aee_host_msg_callback(void *msg, uint16_t msg_len);
+extern bool touchscreen_read(lv_indev_data_t * data);
+extern int ili9340_init();
+extern void xpt2046_init(void);
+extern void wgl_init();
+
+#include <zephyr.h>
+#include <uart.h>
+#include <device.h>
+
+int uart_char_cnt = 0;
+
+static void uart_irq_callback(struct device *dev)
+{
+    unsigned char ch;
+
+    while (uart_poll_in(dev, &ch) == 0) {
+        uart_char_cnt++;
+        aee_host_msg_callback(&ch, 1);
+    }
+}
+
+struct device *uart_dev = NULL;
+
+static bool host_init()
+{
+    uart_dev = device_get_binding(HOST_DEVICE_COMM_UART_NAME);
+    if (!uart_dev) {
+        printf("UART: Device driver not found.\n");
+        return false;
+    }
+    uart_irq_rx_enable(uart_dev);
+    uart_irq_callback_set(uart_dev, uart_irq_callback);
+    return true;
+}
+
+int host_send(void * ctx, const char *buf, int size)
+{
+    if (!uart_dev)
+        return 0;
+
+    for (int i = 0; i < size; i++)
+        uart_poll_out(uart_dev, buf[i]);
+
+    return size;
+}
+
+void host_destroy()
+{
+}
+
+host_interface interface = {
+    .init = host_init,
+    .send = host_send,
+    .destroy = host_destroy
+};
+
+timer_ctx_t timer_ctx;
+
+static char global_heap_buf[270 * 1024] = { 0 };
+
+static uint8_t color_copy[320 * 10 * 3];
+
+static void display_flush(lv_disp_drv_t *disp_drv,
+                          const lv_area_t *area,
+                          lv_color_t *color)
+{
+    u16_t w = area->x2 - area->x1 + 1;
+    u16_t h = area->y2 - area->y1 + 1;
+    struct display_buffer_descriptor desc;
+    int i;
+    uint8_t *color_p = color_copy;
+
+    desc.buf_size = 3 * w * h;
+    desc.width = w;
+    desc.pitch = w;
+    desc.height = h;
+
+    for (i = 0; i < w * h; i++, color++) {
+        color_p[i * 3] = color->ch.red;
+        color_p[i * 3 + 1] = color->ch.green;
+        color_p[i * 3 + 2] = color->ch.blue;
+    }
+
+    display_write(NULL, area->x1, area->y1, &desc, (void *) color_p);
+
+    lv_disp_flush_ready(disp_drv); /* in v5.3 is lv_flush_ready */
+}
+
+static bool display_input_read(lv_indev_drv_t *indev_drv, lv_indev_data_t 
*data)
+{
+    return touchscreen_read(data);
+}
+
+/**
+ * Initialize the Hardware Abstraction Layer (HAL) for the Littlev graphics 
library
+ */
+static void hal_init(void)
+{
+    xpt2046_init();
+    ili9340_init();
+    display_blanking_off(NULL);
+
+    /*Create a display buffer*/
+    static lv_disp_buf_t disp_buf1;
+    static lv_color_t buf1_1[320*10];
+    lv_disp_buf_init(&disp_buf1, buf1_1, NULL, 320*10);
+
+    /*Create a display*/
+    lv_disp_drv_t disp_drv;
+    lv_disp_drv_init(&disp_drv);            /*Basic initialization*/
+    disp_drv.buffer = &disp_buf1;
+    disp_drv.flush_cb = display_flush;
+    //    disp_drv.hor_res = 200;
+    //    disp_drv.ver_res = 100;
+    lv_disp_drv_register(&disp_drv);
+
+    lv_indev_drv_t indev_drv;
+    lv_indev_drv_init(&indev_drv);          /*Basic initialization*/
+    indev_drv.type = LV_INDEV_TYPE_POINTER;
+    indev_drv.read_cb = display_input_read;
+    lv_indev_drv_register(&indev_drv);
+}
+
+int iwasm_main()
+{
+    host_init();
+
+    if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf))
+            != 0) {
+        printf("Init global heap failed.\n");
+        return -1;
+    }
+
+    if (vm_thread_sys_init() != 0) {
+        goto fail1;
+    }
+
+    wgl_init();
+    hal_init();
+
+    // timer manager
+    init_wasm_timer();
+
+    // TODO:
+    app_manager_startup(&interface);
+
+fail1:
+    bh_memory_destroy();
+    return -1;
+}
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/main.c 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/main.c
new file mode 100755
index 0000000..708c8ff
--- /dev/null
+++ b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/main.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "bh_platform.h"
+#include "wasm_assert.h"
+#include "wasm_log.h"
+#include "wasm_platform_log.h"
+#include "wasm_thread.h"
+#include "wasm_export.h"
+#include "wasm_memory.h"
+#include "bh_memory.h"
+
+extern int iwasm_main();
+
+void main(void)
+{
+    iwasm_main();
+    for(;;){
+        k_sleep(1000);
+    }
+}
+
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_jlf.h
 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_jlf.h
new file mode 100755
index 0000000..5381b72
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_jlf.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __PIN_CONFIG_JLF_H__
+#define __PIN_CONFIG_JLF_H__
+
+#define DT_ILITEK_ILI9340_0_BUS_NAME "SPI_2"
+#define DT_ILITEK_ILI9340_0_SPI_MAX_FREQUENCY 10*1000
+
+#define DT_ILITEK_ILI9340_0_BASE_ADDRESS      1
+#define DT_ILITEK_ILI9340_0_RESET_GPIOS_CONTROLLER "GPIO_0"
+#define DT_ILITEK_ILI9340_0_RESET_GPIOS_PIN 5
+#define DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_CONTROLLER "GPIO_0"
+#define DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_PIN 4
+
+#define XPT2046_SPI_DEVICE_NAME "SPI_2"
+#define XPT2046_SPI_MAX_FREQUENCY 10*1000
+#define XPT2046_CS_GPIO_CONTROLLER "GPIO_0"
+#define XPT2046_CS_GPIO_PIN         6
+
+#define XPT2046_PEN_GPIO_CONTROLLER "GPIO_0"
+#define XPT2046_PEN_GPIO_PIN         7
+
+#define HOST_DEVICE_COMM_UART_NAME "UART_1"
+#endif /* __PIN_CONFIG_JLF_H__ */
diff --git 
a/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_stm32.h
 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_stm32.h
new file mode 100755
index 0000000..0ab295e
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_stm32.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __PIN_CONFIG_STM32_H__
+#define __PIN_CONFIG_STM32_H__
+
+#define DT_ILITEK_ILI9340_0_BUS_NAME "SPI_1"
+#define DT_ILITEK_ILI9340_0_SPI_MAX_FREQUENCY 24*1000*1000
+
+#define DT_ILITEK_ILI9340_0_BASE_ADDRESS      1
+#define DT_ILITEK_ILI9340_0_RESET_GPIOS_CONTROLLER "GPIOC"
+#define DT_ILITEK_ILI9340_0_RESET_GPIOS_PIN    12
+#define DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_CONTROLLER "GPIOC"
+#define DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_PIN 11
+
+#define DT_ILITEK_ILI9340_0_CS_GPIO_CONTROLLER  "GPIOC"
+#define DT_ILITEK_ILI9340_0_CS_GPIO_PIN            10
+
+#define XPT2046_SPI_DEVICE_NAME "SPI_1"
+#define XPT2046_SPI_MAX_FREQUENCY 12*1000*1000
+#define XPT2046_CS_GPIO_CONTROLLER "GPIOD"
+#define XPT2046_CS_GPIO_PIN         0
+
+#define XPT2046_PEN_GPIO_CONTROLLER "GPIOD"
+#define XPT2046_PEN_GPIO_PIN         1
+
+#define HOST_DEVICE_COMM_UART_NAME "UART_6"
+
+#endif /* __PIN_CONFIG_STM32_H__ */
diff --git a/scriptsrcs/wamr/samples/littlevgl/LICENCE.txt 
b/scriptsrcs/wamr/samples/littlevgl/LICENCE.txt
new file mode 100755
index 0000000..beaef1d
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/LICENCE.txt
@@ -0,0 +1,8 @@
+MIT licence
+Copyright (c) 2016 Gábor Kiss-Vámosi
+
+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.
diff --git a/scriptsrcs/wamr/samples/littlevgl/README.md 
b/scriptsrcs/wamr/samples/littlevgl/README.md
new file mode 100755
index 0000000..4f37d84
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/README.md
@@ -0,0 +1,144 @@
+Introduction
+==============
+This sample demonstrates that a graphic user interface application in 
WebAssembly by compiling the LittlevGL, an open-source embedded 2d graphic 
library into the WASM bytecode.
+
+In this sample, the whole LittlevGL source code is built into the WebAssembly 
code with the user application. The platform interfaces defined by LittlevGL is 
implemented in the runtime and exported to the application through the 
declarations from source "ext_lib_export.c" as below:
+
+        EXPORT_WASM_API(display_init),
+        EXPORT_WASM_API(display_input_read),
+        EXPORT_WASM_API(display_flush),
+        EXPORT_WASM_API(display_fill),
+        EXPORT_WASM_API(display_vdb_write),
+        EXPORT_WASM_API(display_map),
+        EXPORT_WASM_API(time_get_ms), };
+
+The runtime component supports building target for Linux and Zephyr/STM Nucleo 
board. The beauty of this sample is the WebAssembly application can have 
identical display and behavior when running from both runtime environments. 
That implies we can do majority of application validation from desktop 
environment as long as two runtime distributions support the same set of 
application interface.
+
+
+Below pictures show the WASM application is running on an STM board with an 
LCD touch panel. 
+
+![WAMR UI SAMPLE](../../doc/pics/vgl_demo2.png "WAMR UI DEMO STM32")
+
+![WAMR UI SAMPLE](../../doc/pics/vgl_demo_linux.png "WAMR UI DEMO LINUX")
+
+
+The number on top will plus one each second, and the number on the bottom will 
plus one when clicked. When users click the blue button, the WASM application 
increases the counter, and the latest counter value is displayed on the top 
banner of the touch panel. 
+
+The sample also provides the native Linux version of application without the 
runtime under folder "vgl-native-ui-app". It can help to check differences 
between the implementations in native and WebAssembly.
+
+
+
+
+Configure 32 bit or 64 bit build
+==============
+On 64 bit operating system, there is an option to build 32 bit or 64 bit 
binaries. In file `./vgl-native-ui-app/CMakeLists.txt` and/or 
`./vgl-wasm-runtime/CMakeLists.txt` , modify the line:
+`set (BUILD_AS_64BIT_SUPPORT "YES")`
+ where `YES` means 64 bit build while `NO` means 32 bit build.
+
+Install required SDK and libraries
+==============
+- 32 bit SDL(simple directmedia layer) (Note: only necessary when 
`BUILD_AS_64BIT_SUPPORT` is set to `NO`)
+Use apt-get:
+    `sudo apt-get install libsdl2-dev:i386`
+Or download source from www.libsdl.org:
+```
+./configure C_FLAGS=-m32 CXX_FLAGS=-m32 LD_FLAGS=-m32
+make
+sudo make install
+```
+- 64 bit SDL(simple directmedia layer) (Note: only necessary when 
`BUILD_AS_64BIT_SUPPORT` is set to `YES`)
+Use apt-get:
+    `sudo apt-get install libsdl2-dev`
+Or download source from www.libsdl.org:
+```
+./configure
+make
+sudo make install
+```
+
+- Install EMSDK
+```
+    https://emscripten.org/docs/tools_reference/emsdk.html
+```
+
+
+Build and Run
+==============
+
+Linux
+--------------------------------
+- Build</br>
+`./build.sh`</br>
+    All binaries are in "out", which contains "host_tool", 
"vgl_native_ui_app", "ui_app.wasm" and "vgl_wasm_runtime".
+- Run native Linux application</br>
+`./vgl_native_ui_app`</br>
+
+- Run WASM VM Linux applicaton & install WASM APP</br>
+ First start vgl_wasm_runtime in server mode.</br>
+`./vgl_wasm_runtime -s`</br>
+ Then install wasm APP use host tool.</br>
+`./host_tool -i ui_app -f ui_app.wasm`</br>
+
+Zephyr
+--------------------------------
+WASM VM and native extension method can be built into Zephyr, Then we can 
install wasm app into STM32.</br>
+- Build WASM VM into Zephyr system</br>
+ a. clone zephyr source code</br>
+Refer to Zephyr getting started.</br>
+https://docs.zephyrproject.org/latest/getting_started/index.html</br>
+`west init zephyrproject`</br>
+`cd zephyrproject`</br>
+`west update`</br>
+ b. copy samples</br>
+    `cd zephyr/samples/`</br>
+    `cp -a <wamr_root>samples/littlevgl/vgl-wasm-runtime vgl-wasm-runtime`</br>
+    `cd vgl-wasm-runtime/zephyr_build`</br>
+ c. create a link to wamr core</br>
+   ` ln -s <wamr_root>/core core`</br>
+ d. build source code</br>
+    Since ui_app incorporated LittlevGL source code, so it needs more RAM on 
the device to install the application.
+    It is recommended that RAM SIZE greater than 512KB.
+    In our test use nucleo_f767zi, which is not supported by Zephyr.
+    However, nucleo_f767zi is almost the same as nucleo_f746zg, except FLASH 
and SRAM size.
+    So we changed the DTS setting of nucleo_f746zg boards for a 
workaround.</br>
+
+    `Modify zephyr/dts/arm/st/f7/stm32f746Xg.dtsi, change DT_SIZE_K(320) to 
DT_SIZE_K(512)`</br>
+    `mkdir build && cd build`</br>
+    `source ../../../../zephyr-env.sh`</br>
+    `cmake -GNinja -DBOARD=nucleo_f746zg ..`</br>
+   ` ninja flash`</br>
+
+- Test on STM32 NUCLEO_F767ZI with ILI9341 Display with XPT2046 touch</br>
+Hardware Connections
+
+```
++-------------------+-+------------------+
+|NUCLEO-F767ZI       | ILI9341  Display  |
++-------------------+-+------------------+
+| CN7.10             |         CLK       |
++-------------------+-+------------------+
+| CN7.12             |         MISO      |
++-------------------+-+------------------+
+| CN7.14             |         MOSI      |
++-------------------+-+------------------+
+| CN11.1             | CS1 for ILI9341   |
++-------------------+-+------------------+
+| CN11.2             |         D/C       |
++-------------------+-+------------------+
+| CN11.3             |         RESET     |
++-------------------+-+------------------+
+| CN9.25             |    PEN interrupt  |
++-------------------+-+------------------+
+| CN9.27             |  CS2 for XPT2046  |
++-------------------+-+------------------+
+| CN10.14            |    PC UART RX     |
++-------------------+-+------------------+
+| CN11.16            |    PC UART RX     |
++-------------------+-+------------------+
+```
+
+
+- Install WASM application to Zephyr using host_tool</br>
+First, connect PC and STM32 with UART. Then install to use host_tool.</br>
+`./host_tool -D /dev/ttyUSBXXX -i ui_app -f ui_app.wasm`
+
diff --git a/scriptsrcs/wamr/samples/littlevgl/build.sh 
b/scriptsrcs/wamr/samples/littlevgl/build.sh
new file mode 100755
index 0000000..7bdae29
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/build.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+
+PROJECT_DIR=$PWD
+WAMR_DIR=${PWD}/../..
+OUT_DIR=${PWD}/out
+BUILD_DIR=${PWD}/build
+
+if [ ! -d $BUILD_DIR ]; then
+    mkdir ${BUILD_DIR}
+fi
+
+rm -rf ${OUT_DIR}
+mkdir ${OUT_DIR}
+
+
+cd ${WAMR_DIR}/core/shared-lib/mem-alloc
+if [ ! -d "tlsf" ]; then
+    git clone https://github.com/mattconte/tlsf
+fi
+
+cd ${WAMR_DIR}/core/iwasm/lib/3rdparty
+if [ ! -d "lvgl" ]; then
+        git clone https://github.com/littlevgl/lvgl.git --branch v6.0.1
+fi
+
+
+echo "##################### 1. build native-ui-app start#####################"
+cd $BUILD_DIR
+mkdir -p vgl-native-ui-app
+cd vgl-native-ui-app
+cmake ${PROJECT_DIR}/vgl-native-ui-app
+make
+if [ $? != 0 ];then
+    echo "BUILD_FAIL native-ui-app $?\n"
+    exit 2
+fi
+echo $PWD
+cp  vgl_native_ui_app ${OUT_DIR}
+echo "#####################build native-ui-app success"
+
+
+echo "##################### 2. build littlevgl wasm runtime 
start#####################"
+cd $BUILD_DIR
+mkdir -p vgl-wasm-runtime
+cd vgl-wasm-runtime
+cmake ${PROJECT_DIR}/vgl-wasm-runtime
+make
+cp vgl_wasm_runtime ${OUT_DIR}/
+
+echo "##################### build littlevgl wasm runtime 
end#####################"
+
+echo "#####################build host-tool"
+cd $BUILD_DIR
+mkdir -p host-tool
+cd host-tool
+cmake ${WAMR_DIR}/test-tools/host-tool
+make
+if [ $? != 0 ];then
+        echo "BUILD_FAIL host tool exit as $?\n"
+        exit 2
+fi
+cp host_tool ${OUT_DIR}
+echo "#####################build host-tool success"
+
+
+echo "##################### 3. build wasm ui app start#####################"
+cd ${PROJECT_DIR}/wasm-apps
+if [ ! -d "${PROJECT_DIR}/wasm-apps/lvgl" ]; then
+    if [ -d "$BUILD_DIR/vgl-native-ui-app/lvgl" ]; then
+        cp -fr $BUILD_DIR/vgl-native-ui-app/lvgl ${PROJECT_DIR}/wasm-apps
+    fi
+fi
+./build_wasm_app.sh
+cp ui_app.wasm ${OUT_DIR}/
+echo "#####################  build wasm ui app end#####################"
diff --git a/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt
new file mode 100755
index 0000000..78f6464
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt
@@ -0,0 +1,158 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cmake_minimum_required (VERSION 2.8.2)
+message ("vgl_native_ui_app...")
+project (vgl_native_ui_app)
+
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DLV_CONF_INCLUDE_SIMPLE 
-DPLATFORM_NATIVE_LINUX -DUSE_MONITOR -DUSE_MOUSE=1")
+
+# Currently build as 64-bit by default. Set to "NO" to build 32-bit binaries.
+set (BUILD_AS_64BIT_SUPPORT "YES")
+
+if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+        if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES")
+                # Add -fPIC flag if build as 64-bit
+                set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+                set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS 
"${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -fPIC")
+        else ()
+                add_definitions (-m32)
+                set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32")
+                set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} 
-m32")
+        endif ()
+endif ()
+
+set(lv_name lvgl)
+set(LVGL_SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/${lv_name})
+set(LVGL_DRIVER_DIR ${CMAKE_CURRENT_LIST_DIR}/lv-drivers)
+
+message(${LVGL_SOURCE_DIR})
+include( ExternalProject )
+
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in 
${CMAKE_CURRENT_BINARY_DIR}/download_lvgl/CMakeLists.txt)
+
+execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
+  RESULT_VARIABLE result
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/download_lvgl )
+if(result)
+  message(FATAL_ERROR "CMake step for lvgl failed: ${result}")
+endif()
+execute_process(COMMAND ${CMAKE_COMMAND} --build .
+  RESULT_VARIABLE result
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/download_lvgl )
+if(result)
+  message(FATAL_ERROR "Build step for lvgl failed: ${result}")
+endif()
+SET (LVGL_SOURCES
+    ${LVGL_SOURCE_DIR}/lv_core/lv_group.c
+    ${LVGL_SOURCE_DIR}/lv_core/lv_indev.c
+    ${LVGL_SOURCE_DIR}/lv_core/lv_lang.c
+    ${LVGL_SOURCE_DIR}/lv_core/lv_obj.c
+    ${LVGL_SOURCE_DIR}/lv_core/lv_refr.c
+    ${LVGL_SOURCE_DIR}/lv_core/lv_style.c
+    ${LVGL_SOURCE_DIR}/lv_core/lv_vdb.c
+
+    ${LVGL_SOURCE_DIR}/lv_draw/lv_draw.c
+    ${LVGL_SOURCE_DIR}/lv_draw/lv_draw_arc.c
+    ${LVGL_SOURCE_DIR}/lv_draw/lv_draw_img.c
+    ${LVGL_SOURCE_DIR}/lv_draw/lv_draw_label.c
+    ${LVGL_SOURCE_DIR}/lv_draw/lv_draw_line.c
+    ${LVGL_SOURCE_DIR}/lv_draw/lv_draw_rbasic.c
+    ${LVGL_SOURCE_DIR}/lv_draw/lv_draw_rect.c
+    ${LVGL_SOURCE_DIR}/lv_draw/lv_draw_triangle.c
+    ${LVGL_SOURCE_DIR}/lv_draw/lv_draw_vbasic.c
+
+    ${LVGL_SOURCE_DIR}/lv_hal/lv_hal_disp.c
+    ${LVGL_SOURCE_DIR}/lv_hal/lv_hal_indev.c
+    ${LVGL_SOURCE_DIR}/lv_hal/lv_hal_tick.c
+
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_anim.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_area.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_circ.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_color.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_font.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_fs.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_gc.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_ll.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_log.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_math.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_mem.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_task.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_templ.c
+    ${LVGL_SOURCE_DIR}/lv_misc/lv_txt.c
+
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_arc.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_bar.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_btn.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_btnm.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_calendar.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_canvas.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_cb.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_chart.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_cont.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_ddlist.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_gauge.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_img.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_imgbtn.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_kb.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_label.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_led.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_line.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_list.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_lmeter.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_mbox.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_objx_templ.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_page.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_preload.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_roller.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_slider.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_spinbox.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_sw.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_ta.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_table.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_tabview.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_tileview.c
+    ${LVGL_SOURCE_DIR}/lv_objx/lv_win.c
+
+    ${LVGL_SOURCE_DIR}/lv_themes/lv_theme.c
+    ${LVGL_SOURCE_DIR}/lv_themes/lv_theme_alien.c
+    ${LVGL_SOURCE_DIR}/lv_themes/lv_theme_default.c
+    ${LVGL_SOURCE_DIR}/lv_themes/lv_theme_material.c
+    ${LVGL_SOURCE_DIR}/lv_themes/lv_theme_mono.c
+    ${LVGL_SOURCE_DIR}/lv_themes/lv_theme_nemo.c
+    ${LVGL_SOURCE_DIR}/lv_themes/lv_theme_night.c
+    ${LVGL_SOURCE_DIR}/lv_themes/lv_theme_templ.c
+    ${LVGL_SOURCE_DIR}/lv_themes/lv_theme_zen.c
+
+    ${LVGL_SOURCE_DIR}/lv_fonts/lv_font_builtin.c
+    ${LVGL_SOURCE_DIR}/lv_fonts/lv_font_dejavu_20.c
+    ${LVGL_DRIVER_DIR}/linux_display_indev.c
+    ${LVGL_DRIVER_DIR}/indev/mouse.c
+
+)
+SET(SOURCES
+    ${LVGL_SOURCES}
+    ${CMAKE_CURRENT_LIST_DIR}/main.c
+    )
+include_directories(
+    ${LVGL_DRIVER_DIR}
+    ${LVGL_DRIVER_DIR}/display
+    ${LVGL_DRIVER_DIR}/indev
+    ${LVGL_SOURCE_DIR}
+    ${CMAKE_CURRENT_BINARY_DIR}
+    ${CMAKE_CURRENT_LIST_DIR}
+)
+add_executable(vgl_native_ui_app ${SOURCES} )
+target_link_libraries( vgl_native_ui_app -lSDL2)
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt.in 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt.in
new file mode 100755
index 0000000..225af16
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt.in
@@ -0,0 +1,29 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cmake_minimum_required(VERSION 2.8.2)
+
+project(lvgl_download NONE)
+
+include(ExternalProject)
+ExternalProject_Add(${lv_name}
+    GIT_REPOSITORY https://github.com/littlevgl/lvgl.git
+    GIT_TAG        v5.3
+    BINARY_DIR     ""
+    SOURCE_DIR            "${CMAKE_CURRENT_BINARY_DIR}/lvgl"
+    CONFIGURE_COMMAND     ""
+    BUILD_COMMAND         ""
+    INSTALL_COMMAND       ""
+    TEST_COMMAND          ""
+  )
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/.gitignore 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/.gitignore
new file mode 100755
index 0000000..2372cca
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/.gitignore
@@ -0,0 +1 @@
+**/*.o
\ No newline at end of file
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/display_indev.h
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/display_indev.h
new file mode 100755
index 0000000..f1b966e
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/display_indev.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef DISPLAY_INDEV_H_
+#define DISPLAY_INDEV_H_
+#include <stdio.h>
+#include <inttypes.h>
+#include "mouse.h"
+#include "lvgl/lv_misc/lv_color.h"
+#include "lvgl/lv_hal/lv_hal_indev.h"
+extern void display_init(void);
+extern void display_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p);
+extern bool display_input_read(lv_indev_data_t * data);
+extern void display_deinit(void);
+extern void display_vdb_write(void *buf, lv_coord_t buf_w, lv_coord_t x,
+        lv_coord_t y, lv_color_t *color, lv_opa_t opa);
+extern int time_get_ms();
+
+#endif
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.c 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.c
new file mode 100755
index 0000000..58f7be0
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.c
@@ -0,0 +1,95 @@
+/**
+ * @file mouse.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "mouse.h"
+#if USE_MOUSE != 0
+
+/*********************
+ *      DEFINES
+ *********************/
+#ifndef MONITOR_ZOOM
+#define MONITOR_ZOOM    1
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static bool left_button_down = false;
+static int16_t last_x = 0;
+static int16_t last_y = 0;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the mouse
+ */
+void mouse_init(void)
+{
+
+}
+
+/**
+ * Get the current position and state of the mouse
+ * @param data store the mouse data here
+ * @return false: because the points are not buffered, so no more data to be 
read
+ */
+bool mouse_read(lv_indev_data_t * data)
+{
+    /*Store the collected data*/
+    data->point.x = last_x;
+    data->point.y = last_y;
+    data->state = left_button_down ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
+
+    return false;
+}
+
+/**
+ * It will be called from the main SDL thread
+ */
+void mouse_handler(SDL_Event * event)
+{
+    switch (event->type) {
+    case SDL_MOUSEBUTTONUP:
+        if (event->button.button == SDL_BUTTON_LEFT)
+            left_button_down = false;
+        break;
+    case SDL_MOUSEBUTTONDOWN:
+        if (event->button.button == SDL_BUTTON_LEFT) {
+            left_button_down = true;
+            last_x = event->motion.x / MONITOR_ZOOM;
+            last_y = event->motion.y / MONITOR_ZOOM;
+        }
+        break;
+    case SDL_MOUSEMOTION:
+        last_x = event->motion.x / MONITOR_ZOOM;
+        last_y = event->motion.y / MONITOR_ZOOM;
+
+        break;
+    }
+
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#endif
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.h 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.h
new file mode 100755
index 0000000..6e7c88e
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.h
@@ -0,0 +1,72 @@
+/**
+ * @file mouse.h
+ *
+ */
+
+#ifndef MOUSE_H
+#define MOUSE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+//#include "lv_drv_conf.h"
+#else
+#include "../../lv_drv_conf.h"
+#endif
+
+#if USE_MOUSE
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "lvgl/lv_hal/lv_hal_indev.h"
+
+#ifndef MONITOR_SDL_INCLUDE_PATH
+#define MONITOR_SDL_INCLUDE_PATH <SDL2/SDL.h>
+#endif
+
+#include MONITOR_SDL_INCLUDE_PATH
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Initialize the mouse
+ */
+void mouse_init(void);
+/**
+ * Get the current position and state of the mouse
+ * @param data store the mouse data here
+ * @return false: because the points are not buffered, so no more data to be 
read
+ */
+bool mouse_read(lv_indev_data_t * data);
+
+/**
+ * It will be called from the main SDL thread
+ */
+void mouse_handler(SDL_Event *event);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /* USE_MOUSE */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MOUSE_H */
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/linux_display_indev.c
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/linux_display_indev.c
new file mode 100755
index 0000000..e8bbc52
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/linux_display_indev.c
@@ -0,0 +1,314 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdbool.h>
+#include "display_indev.h"
+#include "sys/time.h"
+#include "SDL2/SDL.h"
+#define MONITOR_HOR_RES 320
+#define MONITOR_VER_RES 240
+#ifndef MONITOR_ZOOM
+#define MONITOR_ZOOM        1
+#endif
+#define SDL_REFR_PERIOD     50
+void monitor_sdl_init(void);
+void monitor_sdl_refr_core(void);
+void monitor_sdl_clean_up(void);
+static uint32_t tft_fb[MONITOR_HOR_RES * MONITOR_VER_RES];
+
+void display_vdb_write(void *buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
+        lv_color_t *color, lv_opa_t opa)
+{
+    unsigned char *buf_xy = buf + 4 * x + 4 * y * buf_w;
+    lv_color_t * temp = (lv_color_t *) buf_xy;
+    *temp = *color;
+    /*
+     if (opa != LV_OPA_COVER) {
+     lv_color_t mix_color;
+
+     mix_color.red = *buf_xy;
+     mix_color.green = *(buf_xy+1);
+     mix_color.blue = *(buf_xy+2);
+     color = lv_color_mix(color, mix_color, opa);
+     }
+     */
+}
+int time_get_ms()
+{
+    static struct timeval tv;
+    gettimeofday(&tv, NULL);
+    long long time_in_mill = (tv.tv_sec) * 1000 + (tv.tv_usec) / 1000;
+
+    return (int) time_in_mill;
+}
+
+SDL_Window * window;
+SDL_Renderer * renderer;
+SDL_Texture * texture;
+static volatile bool sdl_inited = false;
+static volatile bool sdl_refr_qry = false;
+static volatile bool sdl_quit_qry = false;
+
+void monitor_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p)
+{
+    /*Return if the area is out the screen*/
+    if (x2 < 0 || y2 < 0 || x1 > MONITOR_HOR_RES - 1
+            || y1 > MONITOR_VER_RES - 1) {
+        return;
+    }
+
+    int32_t y;
+    uint32_t w = x2 - x1 + 1;
+    for (y = y1; y <= y2; y++) {
+        memcpy(&tft_fb[y * MONITOR_HOR_RES + x1], color_p,
+                w * sizeof(lv_color_t));
+
+        color_p += w;
+    }
+    sdl_refr_qry = true;
+
+    /*IMPORTANT! It must be called to tell the system the flush is ready*/
+
+}
+
+/**
+ * Fill out the marked area with a color
+ * @param x1 left coordinate
+ * @param y1 top coordinate
+ * @param x2 right coordinate
+ * @param y2 bottom coordinate
+ * @param color fill color
+ */
+void monitor_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        lv_color_t color)
+{
+    /*Return if the area is out the screen*/
+    if (x2 < 0)
+        return;
+    if (y2 < 0)
+        return;
+    if (x1 > MONITOR_HOR_RES - 1)
+        return;
+    if (y1 > MONITOR_VER_RES - 1)
+        return;
+
+    /*Truncate the area to the screen*/
+    int32_t act_x1 = x1 < 0 ? 0 : x1;
+    int32_t act_y1 = y1 < 0 ? 0 : y1;
+    int32_t act_x2 = x2 > MONITOR_HOR_RES - 1 ? MONITOR_HOR_RES - 1 : x2;
+    int32_t act_y2 = y2 > MONITOR_VER_RES - 1 ? MONITOR_VER_RES - 1 : y2;
+
+    int32_t x;
+    int32_t y;
+    uint32_t color32 = color.full; //lv_color_to32(color);
+
+    for (x = act_x1; x <= act_x2; x++) {
+        for (y = act_y1; y <= act_y2; y++) {
+            tft_fb[y * MONITOR_HOR_RES + x] = color32;
+        }
+    }
+
+    sdl_refr_qry = true;
+}
+
+/**
+ * Put a color map to the marked area
+ * @param x1 left coordinate
+ * @param y1 top coordinate
+ * @param x2 right coordinate
+ * @param y2 bottom coordinate
+ * @param color_p an array of colors
+ */
+void monitor_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p)
+{
+    /*Return if the area is out the screen*/
+    if (x2 < 0)
+        return;
+    if (y2 < 0)
+        return;
+    if (x1 > MONITOR_HOR_RES - 1)
+        return;
+    if (y1 > MONITOR_VER_RES - 1)
+        return;
+
+    /*Truncate the area to the screen*/
+    int32_t act_x1 = x1 < 0 ? 0 : x1;
+    int32_t act_y1 = y1 < 0 ? 0 : y1;
+    int32_t act_x2 = x2 > MONITOR_HOR_RES - 1 ? MONITOR_HOR_RES - 1 : x2;
+    int32_t act_y2 = y2 > MONITOR_VER_RES - 1 ? MONITOR_VER_RES - 1 : y2;
+
+    int32_t x;
+    int32_t y;
+
+    for (y = act_y1; y <= act_y2; y++) {
+        for (x = act_x1; x <= act_x2; x++) {
+            tft_fb[y * MONITOR_HOR_RES + x] = color_p->full; 
//lv_color_to32(*color_p);
+            color_p++;
+        }
+
+        color_p += x2 - act_x2;
+    }
+
+    sdl_refr_qry = true;
+}
+
+void display_init(void)
+{
+}
+
+void display_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p)
+{
+    monitor_flush(x1, y1, x2, y2, color_p);
+}
+void display_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        lv_color_t color_p)
+{
+    monitor_fill(x1, y1, x2, y2, color_p);
+}
+void display_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p)
+{
+    monitor_map(x1, y1, x2, y2, color_p);
+}
+
+bool display_input_read(lv_indev_data_t * data)
+{
+    return mouse_read(data);
+}
+
+void display_deinit(void)
+{
+
+}
+
+int monitor_sdl_refr_thread(void * param)
+{
+    (void) param;
+
+    /*If not OSX initialize SDL in the Thread*/
+    monitor_sdl_init();
+    /*Run until quit event not arrives*/
+    while (sdl_quit_qry == false) {
+        /*Refresh handling*/
+        monitor_sdl_refr_core();
+    }
+
+    monitor_sdl_clean_up();
+    exit(0);
+
+    return 0;
+}
+
+void monitor_sdl_refr_core(void)
+{
+    if (sdl_refr_qry != false) {
+        sdl_refr_qry = false;
+
+        SDL_UpdateTexture(texture, NULL, tft_fb,
+        MONITOR_HOR_RES * sizeof(uint32_t));
+        SDL_RenderClear(renderer);
+        /*Test: Draw a background to test transparent screens 
(LV_COLOR_SCREEN_TRANSP)*/
+//        SDL_SetRenderDrawColor(renderer, 0xff, 0, 0, 0xff);
+//        SDL_Rect r;
+//        r.x = 0; r.y = 0; r.w = MONITOR_HOR_RES; r.w = MONITOR_VER_RES;
+//        SDL_RenderDrawRect(renderer, &r);
+        /*Update the renderer with the texture containing the rendered image*/
+        SDL_RenderCopy(renderer, texture, NULL, NULL);
+        SDL_RenderPresent(renderer);
+    }
+
+    SDL_Event event;
+    while (SDL_PollEvent(&event)) {
+#if USE_MOUSE != 0
+        mouse_handler(&event);
+#endif
+        if ((&event)->type == SDL_WINDOWEVENT) {
+            switch ((&event)->window.event) {
+#if SDL_VERSION_ATLEAST(2, 0, 5)
+            case SDL_WINDOWEVENT_TAKE_FOCUS:
+#endif
+            case SDL_WINDOWEVENT_EXPOSED:
+
+                SDL_UpdateTexture(texture, NULL, tft_fb,
+                MONITOR_HOR_RES * sizeof(uint32_t));
+                SDL_RenderClear(renderer);
+                SDL_RenderCopy(renderer, texture, NULL, NULL);
+                SDL_RenderPresent(renderer);
+                break;
+            default:
+                break;
+            }
+        }
+    }
+
+    /*Sleep some time*/
+    SDL_Delay(SDL_REFR_PERIOD);
+
+}
+int quit_filter(void * userdata, SDL_Event * event)
+{
+    (void) userdata;
+
+    if (event->type == SDL_QUIT) {
+        sdl_quit_qry = true;
+    }
+
+    return 1;
+}
+
+void monitor_sdl_clean_up(void)
+{
+    SDL_DestroyTexture(texture);
+    SDL_DestroyRenderer(renderer);
+    SDL_DestroyWindow(window);
+    SDL_Quit();
+}
+
+void monitor_sdl_init(void)
+{
+    /*Initialize the SDL*/
+    SDL_Init(SDL_INIT_VIDEO);
+
+    SDL_SetEventFilter(quit_filter, NULL);
+
+    window = SDL_CreateWindow("TFT Simulator", SDL_WINDOWPOS_UNDEFINED,
+            SDL_WINDOWPOS_UNDEFINED,
+            MONITOR_HOR_RES * MONITOR_ZOOM, MONITOR_VER_RES * MONITOR_ZOOM, 
0); /*last param. SDL_WINDOW_BORDERLESS to hide borders*/
+
+    renderer = SDL_CreateRenderer(window, -1, 0);
+    texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888,
+            SDL_TEXTUREACCESS_STATIC, MONITOR_HOR_RES, MONITOR_VER_RES);
+    SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
+
+    /*Initialize the frame buffer to gray (77 is an empirical value) */
+    memset(tft_fb, 0x44, MONITOR_HOR_RES * MONITOR_VER_RES * sizeof(uint32_t));
+    SDL_UpdateTexture(texture, NULL, tft_fb,
+    MONITOR_HOR_RES * sizeof(uint32_t));
+    sdl_refr_qry = true;
+    sdl_inited = true;
+}
+
+void display_SDL_init()
+{
+    SDL_CreateThread(monitor_sdl_refr_thread, "sdl_refr", NULL);
+    while (sdl_inited == false)
+        ; /*Wait until 'sdl_refr' initializes the SDL*/
+}
+
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/lv_conf.h 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/lv_conf.h
new file mode 100755
index 0000000..76533a8
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/lv_conf.h
@@ -0,0 +1,389 @@
+/**
+ * @file lv_conf.h
+ *
+ */
+
+#if 1 /*Set it to "1" to enable content*/
+
+#ifndef LV_CONF_H
+#define LV_CONF_H
+/*===================
+ Dynamic memory
+ *===================*/
+
+/* Memory size which will be used by the library
+ * to store the graphical objects and other data */
+#define LV_MEM_CUSTOM      1                /*1: use custom malloc/free, 0: 
use the built-in lv_mem_alloc/lv_mem_free*/
+#if LV_MEM_CUSTOM == 0
+#  define LV_MEM_SIZE    (64U * 1024U)        /*Size memory used by 
`lv_mem_alloc` in bytes (>= 2kB)*/
+#  define LV_MEM_ATTR                         /*Complier prefix for big array 
declaration*/
+#  define LV_MEM_ADR          0               /*Set an address for memory pool 
instead of allocation it as an array. Can be in external SRAM too.*/
+#  define LV_MEM_AUTO_DEFRAG  1               /*Automatically defrag on free*/
+#else       /*LV_MEM_CUSTOM*/
+#  define LV_MEM_CUSTOM_INCLUDE <stdlib.h>   /*Header for the dynamic memory 
function*/
+#  define LV_MEM_CUSTOM_ALLOC   malloc       /*Wrapper to malloc*/
+#  define LV_MEM_CUSTOM_FREE    free         /*Wrapper to free*/
+#endif     /*LV_MEM_CUSTOM*/
+
+/* Garbage Collector settings
+ * Used if lvgl is binded to higher language and the memory is managed by that 
language */
+#define LV_ENABLE_GC 0
+#if LV_ENABLE_GC != 0
+#  define LV_MEM_CUSTOM_REALLOC   your_realloc           /*Wrapper to realloc*/
+#  define LV_MEM_CUSTOM_GET_SIZE  your_mem_get_size      /*Wrapper to 
lv_mem_get_size*/
+#  define LV_GC_INCLUDE "gc.h"                           /*Include Garbage 
Collector related things*/
+#endif /* LV_ENABLE_GC */
+
+/*===================
+ Graphical settings
+ *===================*/
+
+/* Horizontal and vertical resolution of the library.*/
+#define LV_HOR_RES          (320)
+#define LV_VER_RES          (240)
+
+/* Dot Per Inch: used to initialize default sizes. E.g. a button with width = 
LV_DPI / 2 -> half inch wide
+ * (Not so important, you can adjust it to modify default sizes and spaces)*/
+#define LV_DPI              100
+
+/* Enable anti-aliasing (lines, and radiuses will be smoothed) */
+#define LV_ANTIALIAS        0      /*1: Enable anti-aliasing*/
+
+/*Screen refresh period in milliseconds*/
+#define LV_REFR_PERIOD      30
+
+/*-----------------
+ *  VDB settings
+ *----------------*/
+
+/* VDB (Virtual Display Buffer) is an internal graphics buffer.
+ * The GUI will be drawn into this buffer first and then
+ * the buffer will be passed to your `disp_drv.disp_flush` function to
+ * copy it to your frame buffer.
+ * VDB is required for: buffered drawing, opacity, anti-aliasing and shadows
+ * Learn more: https://docs.littlevgl.com/#Drawing*/
+
+/* Size of the VDB in pixels. Typical size: ~1/10 screen. Must be >= LV_HOR_RES
+ * Setting it to 0 will disable VDB and `disp_drv.disp_fill` and 
`disp_drv.disp_map` functions
+ * will be called to draw to the frame buffer directly*/
+#define LV_VDB_SIZE         ((LV_VER_RES * LV_HOR_RES) / 10)
+
+/* Bit-per-pixel of VDB. Useful for monochrome or non-standard color format 
displays.
+ * Special formats are handled with `disp_drv.vdb_wr`)*/
+#define LV_VDB_PX_BPP       LV_COLOR_SIZE       /*LV_COLOR_SIZE comes from 
LV_COLOR_DEPTH below to set 8, 16 or 32 bit pixel size automatically */
+
+/* Place VDB to a specific address (e.g. in external RAM)
+ * 0: allocate automatically into RAM
+ * LV_VDB_ADR_INV: to replace it later with `lv_vdb_set_adr()`*/
+#define LV_VDB_ADR          0
+
+/* Use two Virtual Display buffers (VDB) to parallelize rendering and flushing
+ * The flushing should use DMA to write the frame buffer in the background */
+#define LV_VDB_DOUBLE       0
+
+/* Place VDB2 to a specific address (e.g. in external RAM)
+ * 0: allocate automatically into RAM
+ * LV_VDB_ADR_INV: to replace it later with `lv_vdb_set_adr()`*/
+#define LV_VDB2_ADR         0
+
+/* Using true double buffering in `disp_drv.disp_flush` you will always get 
the image of the whole screen.
+ * Your only task is to set the rendered image (`color_p` parameter) as frame 
buffer address or send it to your display.
+ * The best if you do in the blank period of you display to avoid tearing 
effect.
+ * Requires:
+ * - LV_VDB_SIZE = LV_HOR_RES * LV_VER_RES
+ * - LV_VDB_DOUBLE = 1
+ */
+#define LV_VDB_TRUE_DOUBLE_BUFFERED 0
+
+/*=================
+ Misc. setting
+ *=================*/
+
+/*Input device settings*/
+#define LV_INDEV_READ_PERIOD            50                     /*Input device 
read period in milliseconds*/
+#define LV_INDEV_POINT_MARKER           0                      /*Mark the 
pressed points  (required: USE_LV_REAL_DRAW = 1)*/
+#define LV_INDEV_DRAG_LIMIT             10                     /*Drag 
threshold in pixels */
+#define LV_INDEV_DRAG_THROW             20                     /*Drag throw 
slow-down in [%]. Greater value means faster slow-down */
+#define LV_INDEV_LONG_PRESS_TIME        400                    /*Long press 
time in milliseconds*/
+#define LV_INDEV_LONG_PRESS_REP_TIME    100                    /*Repeated 
trigger period in long press [ms] */
+
+/*Color settings*/
+#define LV_COLOR_DEPTH     32                     /*Color depth: 1/8/16/32*/
+#define LV_COLOR_16_SWAP   0                      /*Swap the 2 bytes of RGB565 
color. Useful if the display has a 8 bit interface (e.g. SPI)*/
+#define LV_COLOR_SCREEN_TRANSP        0           /*1: Enable screen 
transparency. Useful for OSD or other overlapping GUIs. Requires ARGB8888 
colors*/
+#define LV_COLOR_TRANSP    LV_COLOR_LIME          /*Images pixels with this 
color will not be drawn (with chroma keying)*/
+
+/*Text settings*/
+#define LV_TXT_UTF8             1                /*Enable UTF-8 coded Unicode 
character usage */
+#define LV_TXT_BREAK_CHARS     " ,.;:-_"         /*Can break texts on these 
chars*/
+#define LV_TXT_LINE_BREAK_LONG_LEN 12 /* If a character is at least this long, 
will break wherever "prettiest" */
+#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 /* Minimum number of characters 
of a word to put on a line before a break */
+#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 1 /* Minimum number of characters 
of a word to put on a line after a break */
+
+/*Feature usage*/
+#define USE_LV_ANIMATION        1               /*1: Enable all animations*/
+#define USE_LV_SHADOW           1               /*1: Enable shadows*/
+#define USE_LV_GROUP            1               /*1: Enable object groups (for 
keyboards)*/
+#define USE_LV_GPU              0               /*1: Enable GPU interface*/
+#define USE_LV_REAL_DRAW        1               /*1: Enable function which 
draw directly to the frame buffer instead of VDB (required if LV_VDB_SIZE = 0)*/
+#define USE_LV_FILESYSTEM       0               /*1: Enable file system (might 
be required for images*/
+#define USE_LV_MULTI_LANG       0               /* Number of languages for 
labels to store (0: to disable this feature)*/
+
+/*Compiler settings*/
+#define LV_ATTRIBUTE_TICK_INC                   /* Define a custom attribute 
to `lv_tick_inc` function */
+#define LV_ATTRIBUTE_TASK_HANDLER               /* Define a custom attribute 
to `lv_task_handler` function */
+#define LV_COMPILER_VLA_SUPPORTED            1  /* 1: Variable length array is 
supported*/
+#define LV_COMPILER_NON_CONST_INIT_SUPPORTED 1  /* 1: Initialization with non 
constant values are supported */
+
+/*HAL settings*/
+#define LV_TICK_CUSTOM     1                        /*1: use a custom tick 
source (removing the need to manually update the tick with `lv_tick_inc`) */
+#if LV_TICK_CUSTOM == 1
+#define LV_TICK_CUSTOM_INCLUDE  "system_header.h"         /*Header for the sys 
time function*/
+#define LV_TICK_CUSTOM_SYS_TIME_EXPR (time_get_ms())     /*Expression 
evaluating to current systime in ms*/
+#endif     /*LV_TICK_CUSTOM*/
+
+/*Log settings*/
+#define USE_LV_LOG      1   /*Enable/disable the log module*/
+#if USE_LV_LOG
+/* How important log should be added:
+ * LV_LOG_LEVEL_TRACE       A lot of logs to give detailed information
+ * LV_LOG_LEVEL_INFO        Log important events
+ * LV_LOG_LEVEL_WARN        Log if something unwanted happened but didn't 
caused problem
+ * LV_LOG_LEVEL_ERROR       Only critical issue, when the system may fail
+ */
+#  define LV_LOG_LEVEL    LV_LOG_LEVEL_WARN
+/* 1: Print the log with 'printf'; 0: user need to register a callback*/
+
+#  define LV_LOG_PRINTF   0
+#endif  /*USE_LV_LOG*/
+
+/*================
+ *  THEME USAGE
+ *================*/
+#define LV_THEME_LIVE_UPDATE    1       /*1: Allow theme switching at run 
time. Uses 8..10 kB of RAM*/
+
+#define USE_LV_THEME_TEMPL      0       /*Just for test*/
+#define USE_LV_THEME_DEFAULT    1       /*Built mainly from the built-in 
styles. Consumes very few RAM*/
+#define USE_LV_THEME_ALIEN      0       /*Dark futuristic theme*/
+#define USE_LV_THEME_NIGHT      0       /*Dark elegant theme*/
+#define USE_LV_THEME_MONO       0       /*Mono color theme for monochrome 
displays*/
+#define USE_LV_THEME_MATERIAL   0       /*Flat theme with bold colors and 
light shadows*/
+#define USE_LV_THEME_ZEN        0       /*Peaceful, mainly light theme */
+#define USE_LV_THEME_NEMO       0       /*Water-like theme based on the movie 
"Finding Nemo"*/
+
+/*==================
+ *    FONT USAGE
+ *===================*/
+
+/* More info about fonts: https://docs.littlevgl.com/#Fonts
+ * To enable a built-in font use 1,2,4 or 8 values
+ * which will determine the bit-per-pixel. Higher value means smoother fonts */
+#define USE_LV_FONT_DEJAVU_10              0
+#define USE_LV_FONT_DEJAVU_10_LATIN_SUP    0
+#define USE_LV_FONT_DEJAVU_10_CYRILLIC     0
+#define USE_LV_FONT_SYMBOL_10              0
+
+#define USE_LV_FONT_DEJAVU_20              4
+#define USE_LV_FONT_DEJAVU_20_LATIN_SUP    0
+#define USE_LV_FONT_DEJAVU_20_CYRILLIC     0
+#define USE_LV_FONT_SYMBOL_20              0
+
+#define USE_LV_FONT_DEJAVU_30              0
+#define USE_LV_FONT_DEJAVU_30_LATIN_SUP    0
+#define USE_LV_FONT_DEJAVU_30_CYRILLIC     0
+#define USE_LV_FONT_SYMBOL_30              0
+
+#define USE_LV_FONT_DEJAVU_40              0
+#define USE_LV_FONT_DEJAVU_40_LATIN_SUP    0
+#define USE_LV_FONT_DEJAVU_40_CYRILLIC     0
+#define USE_LV_FONT_SYMBOL_40              0
+
+#define USE_LV_FONT_MONOSPACE_8            1
+
+/* Optionally declare your custom fonts here.
+ * You can use these fonts as default font too
+ * and they will be available globally. E.g.
+ * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \
+ *                                LV_FONT_DECLARE(my_font_2) \
+ */
+#define LV_FONT_CUSTOM_DECLARE
+
+#define LV_FONT_DEFAULT        &lv_font_dejavu_20     /*Always set a default 
font from the built-in fonts*/
+
+/*===================
+ *  LV_OBJ SETTINGS
+ *==================*/
+#define LV_OBJ_FREE_NUM_TYPE    uint32_t    /*Type of free number attribute 
(comment out disable free number)*/
+#define LV_OBJ_FREE_PTR         1           /*Enable the free pointer 
attribute*/
+#define LV_OBJ_REALIGN          1           /*Enable `lv_obj_realaign()` based 
on `lv_obj_align()` parameters*/
+
+/*==================
+ *  LV OBJ X USAGE
+ *================*/
+/*
+ * Documentation of the object types: https://docs.littlevgl.com/#Object-types
+ */
+
+/*****************
+ * Simple object
+ *****************/
+
+/*Label (dependencies: -*/
+#define USE_LV_LABEL    1
+#if USE_LV_LABEL != 0
+#  define LV_LABEL_SCROLL_SPEED       25     /*Hor, or ver. scroll speed 
[px/sec] in 'LV_LABEL_LONG_SCROLL/ROLL' mode*/
+#endif
+
+/*Image (dependencies: lv_label*/
+#define USE_LV_IMG      1
+#if USE_LV_IMG != 0
+#  define LV_IMG_CF_INDEXED   1       /*Enable indexed (palette) images*/
+#  define LV_IMG_CF_ALPHA     1       /*Enable alpha indexed images*/
+#endif
+
+/*Line (dependencies: -*/
+#define USE_LV_LINE     1
+
+/*Arc (dependencies: -)*/
+#define USE_LV_ARC      1
+
+/*******************
+ * Container objects
+ *******************/
+
+/*Container (dependencies: -*/
+#define USE_LV_CONT     1
+
+/*Page (dependencies: lv_cont)*/
+#define USE_LV_PAGE     1
+
+/*Window (dependencies: lv_cont, lv_btn, lv_label, lv_img, lv_page)*/
+#define USE_LV_WIN      1
+
+/*Tab (dependencies: lv_page, lv_btnm)*/
+#define USE_LV_TABVIEW      1
+#  if USE_LV_TABVIEW != 0
+#  define LV_TABVIEW_ANIM_TIME    300     /*Time of slide animation [ms] (0: 
no animation)*/
+#endif
+
+/*Tileview (dependencies: lv_page) */
+#define USE_LV_TILEVIEW     1
+#if USE_LV_TILEVIEW
+#  define LV_TILEVIEW_ANIM_TIME   300     /*Time of slide animation [ms] (0: 
no animation)*/
+#endif
+
+/*************************
+ * Data visualizer objects
+ *************************/
+
+/*Bar (dependencies: -)*/
+#define USE_LV_BAR      1
+
+/*Line meter (dependencies: *;)*/
+#define USE_LV_LMETER   1
+
+/*Gauge (dependencies:lv_bar, lv_lmeter)*/
+#define USE_LV_GAUGE    1
+
+/*Chart (dependencies: -)*/
+#define USE_LV_CHART    1
+
+/*Table (dependencies: lv_label)*/
+#define USE_LV_TABLE    1
+#if USE_LV_TABLE
+#  define LV_TABLE_COL_MAX    12
+#endif
+
+/*LED (dependencies: -)*/
+#define USE_LV_LED      1
+
+/*Message box (dependencies: lv_rect, lv_btnm, lv_label)*/
+#define USE_LV_MBOX     1
+
+/*Text area (dependencies: lv_label, lv_page)*/
+#define USE_LV_TA       1
+#if USE_LV_TA != 0
+#  define LV_TA_CURSOR_BLINK_TIME 400     /*ms*/
+#  define LV_TA_PWD_SHOW_TIME     1500    /*ms*/
+#endif
+
+/*Spinbox (dependencies: lv_ta)*/
+#define USE_LV_SPINBOX       1
+
+/*Calendar (dependencies: -)*/
+#define USE_LV_CALENDAR 1
+
+/*Preload (dependencies: lv_arc)*/
+#define USE_LV_PRELOAD      1
+#if USE_LV_PRELOAD != 0
+#  define LV_PRELOAD_DEF_ARC_LENGTH   60      /*[deg]*/
+#  define LV_PRELOAD_DEF_SPIN_TIME    1000    /*[ms]*/
+#  define LV_PRELOAD_DEF_ANIM         LV_PRELOAD_TYPE_SPINNING_ARC
+#endif
+
+/*Canvas (dependencies: lv_img)*/
+#define USE_LV_CANVAS       1
+/*************************
+ * User input objects
+ *************************/
+
+/*Button (dependencies: lv_cont*/
+#define USE_LV_BTN      1
+#if USE_LV_BTN != 0
+#  define LV_BTN_INK_EFFECT   1       /*Enable button-state animations - draw 
a circle on click (dependencies: USE_LV_ANIMATION)*/
+#endif
+
+/*Image Button (dependencies: lv_btn*/
+#define USE_LV_IMGBTN   1
+#if USE_LV_IMGBTN
+#  define LV_IMGBTN_TILED 0           /*1: The imgbtn requires left, mid and 
right parts and the width can be set freely*/
+#endif
+
+/*Button matrix (dependencies: -)*/
+#define USE_LV_BTNM     1
+
+/*Keyboard (dependencies: lv_btnm)*/
+#define USE_LV_KB       1
+
+/*Check box (dependencies: lv_btn, lv_label)*/
+#define USE_LV_CB       1
+
+/*List (dependencies: lv_page, lv_btn, lv_label, (lv_img optionally for icons 
))*/
+#define USE_LV_LIST     1
+#if USE_LV_LIST != 0
+#  define LV_LIST_FOCUS_TIME  100 /*Default animation time of focusing to a 
list element [ms] (0: no animation)  */
+#endif
+
+/*Drop down list (dependencies: lv_page, lv_label, lv_symbol_def.h)*/
+#define USE_LV_DDLIST    1
+#if USE_LV_DDLIST != 0
+#  define LV_DDLIST_ANIM_TIME     200     /*Open and close default animation 
time [ms] (0: no animation)*/
+#endif
+
+/*Roller (dependencies: lv_ddlist)*/
+#define USE_LV_ROLLER    1
+#if USE_LV_ROLLER != 0
+#  define LV_ROLLER_ANIM_TIME     200     /*Focus animation time [ms] (0: no 
animation)*/
+#endif
+
+/*Slider (dependencies: lv_bar)*/
+#define USE_LV_SLIDER    1
+
+/*Switch (dependencies: lv_slider)*/
+#define USE_LV_SW       1
+
+/*************************
+ * Non-user section
+ *************************/
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)    /* Disable 
warnings for Visual Studio*/
+#  define _CRT_SECURE_NO_WARNINGS
+#endif
+
+/*--END OF LV_CONF_H--*/
+
+/*Be sure every define has a default value*/
+#include "lvgl/lv_conf_checker.h"
+
+#endif /*LV_CONF_H*/
+
+#endif /*End of "Content enable"*/
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/system_header.h
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/system_header.h
new file mode 100755
index 0000000..9c8b1d2
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/lv-drivers/system_header.h
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+
+int time_get_ms();
diff --git a/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/main.c 
b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/main.c
new file mode 100755
index 0000000..59d0e6b
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/vgl-native-ui-app/main.c
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file main
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stdlib.h>
+#include <inttypes.h>
+#include "lvgl/lvgl.h"
+#include "display_indev.h"
+#include <unistd.h>
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static void hal_init(void);
+//static int tick_thread(void * data);
+//static void memory_monitor(void * param);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+uint32_t count = 0;
+char count_str[11] = { 0 };
+lv_obj_t *hello_world_label;
+lv_obj_t *count_label;
+lv_obj_t * btn1;
+
+lv_obj_t * label_count1;
+int label_count1_value = 0;
+char label_count1_str[11] = { 0 };
+static lv_res_t btn_rel_action(lv_obj_t * btn)
+{
+    label_count1_value++;
+    sprintf(label_count1_str, "%d", label_count1_value);
+    lv_label_set_text(label_count1, label_count1_str);
+    return LV_RES_OK;
+}
+
+
+int main()
+{
+    void display_SDL_init();
+    display_SDL_init();
+
+    /*Initialize LittlevGL*/
+    lv_init();
+
+    /*Initialize the HAL (display, input devices, tick) for LittlevGL*/
+    hal_init();
+
+    hello_world_label = lv_label_create(lv_scr_act(), NULL);
+    lv_label_set_text(hello_world_label, "Hello world!");
+    lv_obj_align(hello_world_label, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
+
+    count_label = lv_label_create(lv_scr_act(), NULL);
+    lv_obj_align(count_label, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);
+
+    btn1 = lv_btn_create(lv_scr_act(), NULL); /*Create a button on the 
currently loaded screen*/
+    lv_btn_set_action(btn1, LV_BTN_ACTION_CLICK, btn_rel_action); /*Set 
function to be called when the button is released*/
+    lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, 20); /*Align below the label*/
+
+    /*Create a label on the button*/
+    lv_obj_t * btn_label = lv_label_create(btn1, NULL);
+    lv_label_set_text(btn_label, "Click ++");
+
+    label_count1 = lv_label_create(lv_scr_act(), NULL);
+    lv_label_set_text(label_count1, "0");
+    lv_obj_align(label_count1, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+
+    while(1) {
+        /* Periodically call the lv_task handler.
+         * It could be done in a timer interrupt or an OS task too.*/
+        if ((count % 100) == 0) {
+            sprintf(count_str, "%d", count/ 100);
+            lv_label_set_text(count_label, count_str);
+        }
+        lv_task_handler();
+        ++count;
+        usleep(10 * 1000); /*Just to let the system breath*/
+    }
+
+    return 0;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the Hardware Abstraction Layer (HAL) for the Littlev graphics 
library
+ */
+void display_flush_wrapper(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p)
+{
+    display_flush(x1, y1, x2, y2, color_p);
+    lv_flush_ready();
+}
+void display_vdb_write_wrapper(uint8_t *buf, lv_coord_t buf_w, lv_coord_t x,
+        lv_coord_t y, lv_color_t color, lv_opa_t opa)
+{
+    display_vdb_write(buf, buf_w, x, y, &color, opa);
+}
+extern void display_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        lv_color_t color_p);
+extern void display_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p);
+static void hal_init(void)
+{
+    /* Add a display*/
+    lv_disp_drv_t disp_drv;
+    lv_disp_drv_init(&disp_drv); /*Basic initialization*/
+    disp_drv.disp_flush = display_flush_wrapper; /*Used when `LV_VDB_SIZE != 
0` in lv_conf.h (buffered drawing)*/
+    disp_drv.disp_fill = display_fill; /*Used when `LV_VDB_SIZE == 0` in 
lv_conf.h (unbuffered drawing)*/
+    disp_drv.disp_map = display_map; /*Used when `LV_VDB_SIZE == 0` in 
lv_conf.h (unbuffered drawing)*/
+#if LV_VDB_SIZE != 0
+    disp_drv.vdb_wr = display_vdb_write_wrapper;
+#endif
+    lv_disp_drv_register(&disp_drv);
+
+    /* Add the mouse as input device
+     * Use the 'mouse' driver which reads the PC's mouse*/
+//    mouse_init();
+    lv_indev_drv_t indev_drv;
+    lv_indev_drv_init(&indev_drv); /*Basic initialization*/
+    indev_drv.type = LV_INDEV_TYPE_POINTER;
+    indev_drv.read = display_input_read; /*This function will be called 
periodically (by the library) to get the mouse position and state*/
+    lv_indev_t * mouse_indev = lv_indev_drv_register(&indev_drv);
+
+}
+
diff --git a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/CMakeLists.txt 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/CMakeLists.txt
new file mode 100755
index 0000000..6911407
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/CMakeLists.txt
@@ -0,0 +1,97 @@
+cmake_minimum_required (VERSION 2.8)
+
+project (vgl_wasm_runtime)
+
+set (TARGET_PLATFORM "linux")
+
+# Reset default linker flags
+set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
+set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
+
+# Enable repl mode if want to test spec cases
+# add_definitions(-DWASM_ENABLE_REPL)
+
+if (NOT ("$ENV{VALGRIND}" STREQUAL "YES"))
+  add_definitions(-DNVALGRIND)
+endif ()
+
+# Currently build as 64-bit by default.
+set (BUILD_AS_64BIT_SUPPORT "YES")
+
+if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES")
+  # Add -fPIC flag if build as 64-bit
+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+  set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} 
-fPIC")
+else ()
+  add_definitions (-m32)
+  set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32")
+  set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32")
+endif ()
+endif ()
+
+if (NOT CMAKE_BUILD_TYPE)
+SET(CMAKE_BUILD_TYPE Debug)
+endif (NOT CMAKE_BUILD_TYPE)
+message ("CMAKE_BUILD_TYPE = " ${CMAKE_BUILD_TYPE})
+
+if (NOT PLATFORM)
+SET(PLATFORM linux)
+endif (NOT PLATFORM)
+message ("PLATFORM = " ${PLATFORM})
+
+set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")
+set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -Wall 
-Wno-unused-parameter -Wno-pedantic")
+
+set(REPO_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../../..)
+set(WASM_DIR  ${REPO_ROOT_DIR}/core/iwasm)
+set(APP_MGR_DIR ${REPO_ROOT_DIR}/core/app-mgr)
+set(SHARED_DIR ${REPO_ROOT_DIR}/core/shared-lib)
+
+
+enable_language (ASM)
+
+include (${WASM_DIR}/runtime/platform/${TARGET_PLATFORM}/platform.cmake)
+include (${WASM_DIR}/runtime/utils/utils.cmake)
+include (${WASM_DIR}/runtime/vmcore-wasm/vmcore.cmake)
+include (${WASM_DIR}/lib/native/base/wasm_lib_base.cmake)
+include (${WASM_DIR}/lib/native/libc/wasm_libc.cmake)
+include (${WASM_DIR}/lib/native/extension/sensor/wasm_lib_sensor.cmake)
+include (${WASM_DIR}/lib/native/extension/connection/wasm_lib_conn.cmake)
+include 
(${WASM_DIR}/lib/native/extension/connection/${TARGET_PLATFORM}/connection_mgr.cmake)
+include (${WASM_DIR}/lib/native-interface/native_interface.cmake)
+include (${APP_MGR_DIR}/app-manager/app_mgr.cmake)
+include (${APP_MGR_DIR}/app-mgr-shared/app_mgr_shared.cmake)
+include (${SHARED_DIR}/platform/${TARGET_PLATFORM}/shared_platform.cmake)
+include (${SHARED_DIR}/utils/shared_utils.cmake)
+include (${SHARED_DIR}/mem-alloc/mem_alloc.cmake)
+include (${SHARED_DIR}/coap/lib_coap.cmake)
+
+
+include_directories(${SHARED_DIR}/include ${CMAKE_CURRENT_LIST_DIR}/src)
+
+add_definitions (-DWASM_ENABLE_BASE_LIB)
+add_definitions (-Dattr_container_malloc=bh_malloc)
+add_definitions (-Dattr_container_free=bh_free)
+
+add_library (vmlib
+             ${WASM_PLATFORM_LIB_SOURCE}
+             ${WASM_UTILS_LIB_SOURCE}
+             ${VMCORE_LIB_SOURCE}
+             ${WASM_LIBC_SOURCE}
+             ${APP_MGR_SOURCE}
+             ${WASM_LIB_BASE_SOURCE}
+             ${WASM_LIB_EXT_SOURCE}
+             ${WASM_LIB_SENSOR_SOURCE}
+             ${WASM_LIB_CONN_SOURCE}
+             ${WASM_LIB_CONN_MGR_SOURCE}
+             ${PLATFORM_SHARED_SOURCE}
+             ${UTILS_SHARED_SOURCE}
+             ${MEM_ALLOC_SHARED_SOURCE}
+             ${NATIVE_INTERFACE_SOURCE}
+            )
+
+add_executable (vgl_wasm_runtime src/platform/${TARGET_PLATFORM}/main.c 
src/platform/${TARGET_PLATFORM}/iwasm_main.c src/ext_lib_export.c 
src/platform/${TARGET_PLATFORM}/display_indev.c 
src/platform/${TARGET_PLATFORM}/mouse.c)
+
+target_link_libraries (vgl_wasm_runtime vmlib -lm -ldl -lpthread -lSDL2)
+
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h
new file mode 100755
index 0000000..154071e
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h
@@ -0,0 +1,74 @@
+#ifndef DISPLAY_INDEV_H_
+#define DISPLAY_INDEV_H_
+#include <stdio.h>
+#include "bh_platform.h"
+#include <stdbool.h>
+#include <inttypes.h>
+
+#define USE_MOUSE 1
+typedef union {
+    struct {
+        uint8_t blue;
+        uint8_t green;
+        uint8_t red;
+        uint8_t alpha;
+    };
+    uint32_t full;
+} lv_color32_t;
+
+typedef lv_color32_t lv_color_t;
+typedef uint8_t lv_indev_state_t;
+typedef int16_t lv_coord_t;
+typedef uint8_t lv_opa_t;
+typedef struct {
+    lv_coord_t x;
+    lv_coord_t y;
+} lv_point_t;
+
+typedef struct {
+    union {
+        lv_point_t point; /*For LV_INDEV_TYPE_POINTER the currently pressed 
point*/
+        uint32_t key; /*For LV_INDEV_TYPE_KEYPAD the currently pressed key*/
+        uint32_t btn; /*For LV_INDEV_TYPE_BUTTON the currently pressed button*/
+        int16_t enc_diff; /*For LV_INDEV_TYPE_ENCODER number of steps since 
the previous read*/
+    };
+    void *user_data; /*'lv_indev_drv_t.priv' for this driver*/
+    lv_indev_state_t state; /*LV_INDEV_STATE_REL or LV_INDEV_STATE_PR*/
+} lv_indev_data_t;
+
+enum {
+    LV_INDEV_STATE_REL = 0, LV_INDEV_STATE_PR
+};
+enum {
+    LV_OPA_TRANSP = 0,
+    LV_OPA_0 = 0,
+    LV_OPA_10 = 25,
+    LV_OPA_20 = 51,
+    LV_OPA_30 = 76,
+    LV_OPA_40 = 102,
+    LV_OPA_50 = 127,
+    LV_OPA_60 = 153,
+    LV_OPA_70 = 178,
+    LV_OPA_80 = 204,
+    LV_OPA_90 = 229,
+    LV_OPA_100 = 255,
+    LV_OPA_COVER = 255,
+};
+extern void display_init(void);
+extern void display_deinit(void);
+extern int time_get_ms();
+extern bool touchscreen_read(lv_indev_data_t * data);
+
+extern void xpt2046_init(void);
+extern void display_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        int32 color_p_offset);
+extern void display_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        lv_color_t color_p);
+extern void display_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p);
+extern bool display_input_read(int32 data_offset);
+void display_vdb_write(int32 buf_offset, lv_coord_t buf_w, lv_coord_t x,
+        lv_coord_t y, int32 color_p_offset, lv_opa_t opa);
+extern bool mouse_read(lv_indev_data_t * data);
+#endif
+
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/ext_lib_export.c 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/ext_lib_export.c
new file mode 100755
index 0000000..3897b3b
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/ext_lib_export.c
@@ -0,0 +1,17 @@
+#include "lib_export.h"
+#include "native_interface.h"
+#include "connection_api.h"
+#include "display_indev.h"
+
+static NativeSymbol extended_native_symbol_defs[] = {
+#include "runtime_sensor.inl"
+#include "connection.inl"
+        EXPORT_WASM_API(display_init),
+        EXPORT_WASM_API(display_input_read),
+        EXPORT_WASM_API(display_flush),
+        EXPORT_WASM_API(display_fill),
+        EXPORT_WASM_API(display_vdb_write),
+        EXPORT_WASM_API(display_map),
+        EXPORT_WASM_API(time_get_ms), };
+
+#include "ext_lib_export.h"
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c
new file mode 100755
index 0000000..f7d8b5c
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c
@@ -0,0 +1,358 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdbool.h>
+#include "display_indev.h"
+#include "SDL2/SDL.h"
+#include "sys/time.h"
+#include "wasm_export.h"
+
+#define MONITOR_HOR_RES 320
+#define MONITOR_VER_RES 240
+#ifndef MONITOR_ZOOM
+#define MONITOR_ZOOM        1
+#endif
+#define SDL_REFR_PERIOD     50
+void monitor_sdl_init(void);
+void monitor_sdl_refr_core(void);
+void monitor_sdl_clean_up(void);
+
+static uint32_t tft_fb[MONITOR_HOR_RES * MONITOR_VER_RES];
+
+
+
+int time_get_ms()
+{
+    static struct timeval tv;
+    gettimeofday(&tv, NULL);
+    long long time_in_mill = (tv.tv_sec) * 1000 + (tv.tv_usec) / 1000;
+
+    return (int) time_in_mill;
+}
+
+SDL_Window * window;
+SDL_Renderer * renderer;
+SDL_Texture * texture;
+static volatile bool sdl_inited = false;
+static volatile bool sdl_refr_qry = false;
+static volatile bool sdl_quit_qry = false;
+
+void monitor_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p)
+{
+    /*Return if the area is out the screen*/
+    if (x2 < 0 || y2 < 0 || x1 > MONITOR_HOR_RES - 1
+            || y1 > MONITOR_VER_RES - 1) {
+        return;
+    }
+
+    int32_t y;
+    uint32_t w = x2 - x1 + 1;
+    for (y = y1; y <= y2; y++) {
+        memcpy(&tft_fb[y * MONITOR_HOR_RES + x1], color_p,
+                w * sizeof(lv_color_t));
+
+        color_p += w;
+    }
+    sdl_refr_qry = true;
+
+    /*IMPORTANT! It must be called to tell the system the flush is ready*/
+
+}
+
+/**
+ * Fill out the marked area with a color
+ * @param x1 left coordinate
+ * @param y1 top coordinate
+ * @param x2 right coordinate
+ * @param y2 bottom coordinate
+ * @param color fill color
+ */
+void monitor_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        lv_color_t color)
+{
+    /*Return if the area is out the screen*/
+    if (x2 < 0)
+        return;
+    if (y2 < 0)
+        return;
+    if (x1 > MONITOR_HOR_RES - 1)
+        return;
+    if (y1 > MONITOR_VER_RES - 1)
+        return;
+
+    /*Truncate the area to the screen*/
+    int32_t act_x1 = x1 < 0 ? 0 : x1;
+    int32_t act_y1 = y1 < 0 ? 0 : y1;
+    int32_t act_x2 = x2 > MONITOR_HOR_RES - 1 ? MONITOR_HOR_RES - 1 : x2;
+    int32_t act_y2 = y2 > MONITOR_VER_RES - 1 ? MONITOR_VER_RES - 1 : y2;
+
+    int32_t x;
+    int32_t y;
+    uint32_t color32 = color.full; //lv_color_to32(color);
+
+    for (x = act_x1; x <= act_x2; x++) {
+        for (y = act_y1; y <= act_y2; y++) {
+            tft_fb[y * MONITOR_HOR_RES + x] = color32;
+        }
+    }
+
+    sdl_refr_qry = true;
+}
+
+/**
+ * Put a color map to the marked area
+ * @param x1 left coordinate
+ * @param y1 top coordinate
+ * @param x2 right coordinate
+ * @param y2 bottom coordinate
+ * @param color_p an array of colors
+ */
+void monitor_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p)
+{
+    /*Return if the area is out the screen*/
+    if (x2 < 0)
+        return;
+    if (y2 < 0)
+        return;
+    if (x1 > MONITOR_HOR_RES - 1)
+        return;
+    if (y1 > MONITOR_VER_RES - 1)
+        return;
+
+    /*Truncate the area to the screen*/
+    int32_t act_x1 = x1 < 0 ? 0 : x1;
+    int32_t act_y1 = y1 < 0 ? 0 : y1;
+    int32_t act_x2 = x2 > MONITOR_HOR_RES - 1 ? MONITOR_HOR_RES - 1 : x2;
+    int32_t act_y2 = y2 > MONITOR_VER_RES - 1 ? MONITOR_VER_RES - 1 : y2;
+
+    int32_t x;
+    int32_t y;
+
+    for (y = act_y1; y <= act_y2; y++) {
+        for (x = act_x1; x <= act_x2; x++) {
+            tft_fb[y * MONITOR_HOR_RES + x] = color_p->full; 
//lv_color_to32(*color_p);
+            color_p++;
+        }
+
+        color_p += x2 - act_x2;
+    }
+
+    sdl_refr_qry = true;
+}
+
+
+void display_init(void)
+{
+}
+
+void display_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        int32 color_p_offset)
+{
+
+    wasm_module_inst_t module_inst = wasm_runtime_get_current_module_inst();
+    if (!wasm_runtime_validate_app_addr(module_inst, color_p_offset, 1))
+        return;
+    lv_color_t * color_p = wasm_runtime_addr_app_to_native(module_inst,
+            color_p_offset);
+
+    monitor_flush(x1, y1, x2, y2, color_p);
+}
+void display_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        lv_color_t color_p)
+{
+    monitor_fill(x1, y1, x2, y2, color_p);
+}
+void display_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p)
+{
+    monitor_map(x1, y1, x2, y2, color_p);
+}
+
+bool display_input_read(int32 data_p_offset)
+{
+    bool ret;
+    wasm_module_inst_t module_inst = wasm_runtime_get_current_module_inst();
+    if (!wasm_runtime_validate_app_addr(module_inst, data_p_offset, 1))
+        return false;
+
+    struct {
+        lv_point_t point;
+        int32 user_data_offset;
+        uint8 state;
+    } *data_app;
+
+    lv_indev_data_t data;
+
+    ret = mouse_read(&data);
+
+    data_app = wasm_runtime_addr_app_to_native(module_inst,
+                                               data_p_offset);
+
+    data_app->point = data.point;
+    data_app->user_data_offset = (int32_t)data.user_data;
+    data_app->state = data.state;
+
+    return ret;
+}
+
+void display_deinit(void)
+{
+
+}
+
+void display_vdb_write(int32 buf_offset, lv_coord_t buf_w, lv_coord_t x,
+        lv_coord_t y, int32 color_p_offset, lv_opa_t opa)
+{
+    wasm_module_inst_t module_inst = wasm_runtime_get_current_module_inst();
+    if (!wasm_runtime_validate_app_addr(module_inst, color_p_offset, 1))
+        return;
+    lv_color_t *color = wasm_runtime_addr_app_to_native(module_inst,
+            color_p_offset);
+
+    void *buf = wasm_runtime_addr_app_to_native(module_inst, buf_offset);
+
+    unsigned char *buf_xy = buf + 4 * x + 4 * y * buf_w;
+    lv_color_t * temp = (lv_color_t *) buf_xy;
+    *temp = *color;
+    /*
+     if (opa != LV_OPA_COVER) {
+     lv_color_t mix_color;
+
+     mix_color.red = *buf_xy;
+     mix_color.green = *(buf_xy+1);
+     mix_color.blue = *(buf_xy+2);
+     color = lv_color_mix(color, mix_color, opa);
+     }
+     */
+    /*
+     *buf_xy = color->red;
+     *(buf_xy + 1) = color->green;
+     *(buf_xy + 2) = color->blue;
+     */
+}
+
+int monitor_sdl_refr_thread(void * param)
+{
+    (void) param;
+
+    /*If not OSX initialize SDL in the Thread*/
+    monitor_sdl_init();
+    /*Run until quit event not arrives*/
+    while (sdl_quit_qry == false) {
+        /*Refresh handling*/
+        monitor_sdl_refr_core();
+    }
+
+    monitor_sdl_clean_up();
+    exit(0);
+
+    return 0;
+}
+extern void mouse_handler(SDL_Event *event);
+void monitor_sdl_refr_core(void)
+{
+    if (sdl_refr_qry != false) {
+        sdl_refr_qry = false;
+
+        SDL_UpdateTexture(texture, NULL, tft_fb,
+        MONITOR_HOR_RES * sizeof(uint32_t));
+        SDL_RenderClear(renderer);
+        /*Update the renderer with the texture containing the rendered image*/
+        SDL_RenderCopy(renderer, texture, NULL, NULL);
+        SDL_RenderPresent(renderer);
+    }
+
+    SDL_Event event;
+    while (SDL_PollEvent(&event)) {
+
+        mouse_handler(&event);
+
+        if ((&event)->type == SDL_WINDOWEVENT) {
+            switch ((&event)->window.event) {
+#if SDL_VERSION_ATLEAST(2, 0, 5)
+            case SDL_WINDOWEVENT_TAKE_FOCUS:
+#endif
+            case SDL_WINDOWEVENT_EXPOSED:
+
+                SDL_UpdateTexture(texture, NULL, tft_fb,
+                MONITOR_HOR_RES * sizeof(uint32_t));
+                SDL_RenderClear(renderer);
+                SDL_RenderCopy(renderer, texture, NULL, NULL);
+                SDL_RenderPresent(renderer);
+                break;
+            default:
+                break;
+            }
+        }
+    }
+
+    /*Sleep some time*/
+    SDL_Delay(SDL_REFR_PERIOD);
+
+}
+int quit_filter(void * userdata, SDL_Event * event)
+{
+    (void) userdata;
+
+    if (event->type == SDL_QUIT) {
+        sdl_quit_qry = true;
+    }
+
+    return 1;
+}
+
+void monitor_sdl_clean_up(void)
+{
+    SDL_DestroyTexture(texture);
+    SDL_DestroyRenderer(renderer);
+    SDL_DestroyWindow(window);
+    SDL_Quit();
+}
+
+void monitor_sdl_init(void)
+{
+    /*Initialize the SDL*/
+    SDL_Init(SDL_INIT_VIDEO);
+
+    SDL_SetEventFilter(quit_filter, NULL);
+
+    window = SDL_CreateWindow("TFT Simulator", SDL_WINDOWPOS_UNDEFINED,
+            SDL_WINDOWPOS_UNDEFINED,
+            MONITOR_HOR_RES * MONITOR_ZOOM, MONITOR_VER_RES * MONITOR_ZOOM, 
0); /*last param. SDL_WINDOW_BORDERLESS to hide borders*/
+
+    renderer = SDL_CreateRenderer(window, -1, 0);
+    texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888,
+            SDL_TEXTUREACCESS_STATIC, MONITOR_HOR_RES, MONITOR_VER_RES);
+    SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
+
+    /*Initialize the frame buffer to gray (77 is an empirical value) */
+    memset(tft_fb, 0x44, MONITOR_HOR_RES * MONITOR_VER_RES * sizeof(uint32_t));
+    SDL_UpdateTexture(texture, NULL, tft_fb,
+    MONITOR_HOR_RES * sizeof(uint32_t));
+    sdl_refr_qry = true;
+    sdl_inited = true;
+}
+
+void display_SDL_init()
+{
+    SDL_CreateThread(monitor_sdl_refr_thread, "sdl_refr", NULL);
+    while (sdl_inited == false)
+        ; /*Wait until 'sdl_refr' initializes the SDL*/
+}
+
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c
new file mode 100755
index 0000000..68b42b3
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c
@@ -0,0 +1,478 @@
+
+#ifndef CONNECTION_UART
+#include <netdb.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#else
+#include <termios.h>
+#endif
+
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <signal.h>
+#include <unistd.h>
+#include <strings.h>
+
+#include "runtime_lib.h"
+#include "runtime_timer.h"
+#include "native_interface.h"
+#include "app_manager_export.h"
+#include "bh_common.h"
+#include "bh_queue.h"
+#include "bh_thread.h"
+#include "bh_memory.h"
+#include "runtime_sensor.h"
+#include "attr_container.h"
+#include "module_wasm_app.h"
+#include "wasm_export.h"
+#define MAX 2048
+
+#ifndef CONNECTION_UART
+#define SA struct sockaddr
+static char *host_address = "127.0.0.1";
+static int port = 8888;
+#else
+static char *uart_device = "/dev/ttyS2";
+static int baudrate = B115200;
+#endif
+
+extern void * thread_timer_check(void *);
+extern void init_sensor_framework();
+extern int aee_host_msg_callback(void *msg, uint16_t msg_len);
+extern bool init_connection_framework();
+
+#ifndef CONNECTION_UART
+int listenfd = -1;
+int sockfd = -1;
+static pthread_mutex_t sock_lock = PTHREAD_MUTEX_INITIALIZER;
+#else
+int uartfd = -1;
+#endif
+
+#ifndef CONNECTION_UART
+static bool server_mode = false;
+
+// Function designed for chat between client and server.
+void* func(void* arg)
+{
+    char buff[MAX];
+    int n;
+    struct sockaddr_in servaddr;
+
+    while (1) {
+        if (sockfd != -1)
+            close(sockfd);
+        // socket create and verification
+        sockfd = socket(AF_INET, SOCK_STREAM, 0);
+        if (sockfd == -1) {
+            printf("socket creation failed...\n");
+            return NULL;
+        } else
+            printf("Socket successfully created..\n");
+        bzero(&servaddr, sizeof(servaddr));
+        // assign IP, PORT
+        servaddr.sin_family = AF_INET;
+        servaddr.sin_addr.s_addr = inet_addr(host_address);
+        servaddr.sin_port = htons(port);
+
+        // connect the client socket to server socket
+        if (connect(sockfd, (SA*) &servaddr, sizeof(servaddr)) != 0) {
+            printf("connection with the server failed...\n");
+            sleep(10);
+            continue;
+        } else {
+            printf("connected to the server..\n");
+        }
+
+        // infinite loop for chat
+        for (;;) {
+            bzero(buff, MAX);
+
+            // read the message from client and copy it in buffer
+            n = read(sockfd, buff, sizeof(buff));
+            // print buffer which contains the client contents
+            //fprintf(stderr, "recieved %d bytes from host: %s", n, buff);
+
+            // socket disconnected
+            if (n <= 0)
+                break;
+
+            aee_host_msg_callback(buff, n);
+        }
+    }
+
+    // After chatting close the socket
+    close(sockfd);
+}
+
+static bool host_init()
+{
+    return true;
+}
+
+int host_send(void * ctx, const char *buf, int size)
+{
+    int ret;
+
+    if (pthread_mutex_trylock(&sock_lock) == 0) {
+        if (sockfd == -1) {
+            pthread_mutex_unlock(&sock_lock);
+            return 0;
+        }
+
+        ret = write(sockfd, buf, size);
+
+        pthread_mutex_unlock(&sock_lock);
+        return ret;
+    }
+
+    return -1;
+}
+
+void host_destroy()
+{
+    if (server_mode)
+        close(listenfd);
+
+    pthread_mutex_lock(&sock_lock);
+    close(sockfd);
+    pthread_mutex_unlock(&sock_lock);
+}
+
+host_interface interface = {
+                             .init = host_init,
+                             .send = host_send,
+                             .destroy = host_destroy
+                           };
+
+void* func_server_mode(void* arg)
+{
+    int clilent;
+    struct sockaddr_in serv_addr, cli_addr;
+    int n;
+    char buff[MAX];
+
+    struct sigaction sa;
+    sa.sa_handler = SIG_IGN;
+    sigaction(SIGPIPE, &sa, 0);
+
+    /* First call to socket() function */
+    listenfd = socket(AF_INET, SOCK_STREAM, 0);
+
+    if (listenfd < 0) {
+        perror("ERROR opening socket");
+        exit(1);
+    }
+
+    /* Initialize socket structure */
+    bzero((char *) &serv_addr, sizeof(serv_addr));
+
+    serv_addr.sin_family = AF_INET;
+    serv_addr.sin_addr.s_addr = INADDR_ANY;
+    serv_addr.sin_port = htons(port);
+
+    /* Now bind the host address using bind() call.*/
+    if (bind(listenfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) 
{
+        perror("ERROR on binding");
+        exit(1);
+    }
+
+    listen(listenfd, 5);
+    clilent = sizeof(cli_addr);
+
+    while (1) {
+        pthread_mutex_lock(&sock_lock);
+
+        sockfd = accept(listenfd, (struct sockaddr *) &cli_addr, &clilent);
+
+        pthread_mutex_unlock(&sock_lock);
+
+        if (sockfd < 0) {
+            perror("ERROR on accept");
+            exit(1);
+        }
+
+        printf("connection established!\n");
+
+        for (;;) {
+            bzero(buff, MAX);
+
+            // read the message from client and copy it in buffer
+            n = read(sockfd, buff, sizeof(buff));
+
+            // socket disconnected
+            if (n <= 0) {
+                pthread_mutex_lock(&sock_lock);
+                close(sockfd);
+                sockfd = -1;
+                pthread_mutex_unlock(&sock_lock);
+
+                sleep(2);
+                break;
+            }
+
+            aee_host_msg_callback(buff, n);
+        }
+    }
+}
+
+#else
+static int parse_baudrate(int baud)
+{
+    switch (baud) {
+        case 9600:
+            return B9600;
+        case 19200:
+            return B19200;
+        case 38400:
+            return B38400;
+        case 57600:
+            return B57600;
+        case 115200:
+            return B115200;
+        case 230400:
+            return B230400;
+        case 460800:
+            return B460800;
+        case 500000:
+            return B500000;
+        case 576000:
+            return B576000;
+        case 921600:
+            return B921600;
+        case 1000000:
+            return B1000000;
+        case 1152000:
+            return B1152000;
+        case 1500000:
+            return B1500000;
+        case 2000000:
+            return B2000000;
+        case 2500000:
+            return B2500000;
+        case 3000000:
+            return B3000000;
+        case 3500000:
+            return B3500000;
+        case 4000000:
+            return B4000000;
+        default:
+            return -1;
+    }
+}
+static bool uart_init(const char *device, int baudrate, int *fd)
+{
+    int uart_fd;
+    struct termios uart_term;
+
+    uart_fd = open(device, O_RDWR | O_NOCTTY);
+
+    if (uart_fd <= 0)
+        return false;
+
+    memset(&uart_term, 0, sizeof(uart_term));
+    uart_term.c_cflag = baudrate | CS8 | CLOCAL | CREAD;
+    uart_term.c_iflag = IGNPAR;
+    uart_term.c_oflag = 0;
+
+    /* set noncanonical mode */
+    uart_term.c_lflag = 0;
+    uart_term.c_cc[VTIME] = 30;
+    uart_term.c_cc[VMIN] = 1;
+    tcflush(uart_fd, TCIFLUSH);
+
+    if (tcsetattr(uart_fd, TCSANOW, &uart_term) != 0) {
+        close(uart_fd);
+        return false;
+    }
+
+    *fd = uart_fd;
+
+    return true;
+}
+
+static void *func_uart_mode(void *arg)
+{
+    int n;
+    char buff[MAX];
+
+    if (!uart_init(uart_device, baudrate, &uartfd)) {
+        printf("open uart fail! %s\n", uart_device);
+        return NULL;
+    }
+
+    for (;;) {
+        bzero(buff, MAX);
+
+        n = read(uartfd, buff, sizeof(buff));
+
+        if (n <= 0) {
+            close(uartfd);
+            uartfd = -1;
+            break;
+        }
+
+        aee_host_msg_callback(buff, n);
+    }
+
+    return NULL;
+}
+
+static int uart_send(void * ctx, const char *buf, int size)
+{
+    int ret;
+
+    ret = write(uartfd, buf, size);
+
+    return ret;
+}
+
+static void uart_destroy()
+{
+    close(uartfd);
+}
+
+static host_interface interface = { .send = uart_send, .destroy = uart_destroy 
};
+
+#endif
+
+#ifdef __x86_64__
+static char global_heap_buf[300 * 1024] = { 0 };
+#else
+static char global_heap_buf[270 * 1024] = { 0 };
+#endif
+
+static void showUsage()
+{
+#ifndef CONNECTION_UART
+     printf("Usage:\n");
+     printf("\nWork as TCP server mode:\n");
+     printf("\tvgl_wasm_runtime -s|--server_mode -p|--port <Port>\n");
+     printf("where\n");
+     printf("\t<Port> represents the port that would be listened on and the 
default is 8888\n");
+     printf("\nWork as TCP client mode:\n");
+     printf("\tvgl_wasm_runtime -a|--host_address <Host Address> -p|--port 
<Port>\n");
+     printf("where\n");
+     printf("\t<Host Address> represents the network address of host and the 
default is 127.0.0.1\n");
+     printf("\t<Port> represents the listen port of host and the default is 
8888\n");
+#else
+     printf("Usage:\n");
+     printf("\tvgl_wasm_runtime -u <Uart Device> -b <Baudrate>\n\n");
+     printf("where\n");
+     printf("\t<Uart Device> represents the UART device name and the default 
is /dev/ttyS2\n");
+     printf("\t<Baudrate> represents the UART device baudrate and the default 
is 115200\n");
+#endif
+}
+
+static bool parse_args(int argc, char *argv[])
+{
+    int c;
+
+    while (1) {
+        int optIndex = 0;
+        static struct option longOpts[] = { 
+#ifndef CONNECTION_UART
+            { "server_mode",    no_argument,       NULL, 's' },
+            { "host_address",   required_argument, NULL, 'a' },
+            { "port",           required_argument, NULL, 'p' },
+#else
+            { "uart",           required_argument, NULL, 'u' },
+            { "baudrate",       required_argument, NULL, 'b' },
+#endif
+            { "help",           required_argument, NULL, 'h' },
+            { 0, 0, 0, 0 } 
+        };
+
+        c = getopt_long(argc, argv, "sa:p:u:b:h", longOpts, &optIndex);
+        if (c == -1)
+            break;
+
+        switch (c) {
+#ifndef CONNECTION_UART
+            case 's':
+                server_mode = true;
+                break;
+            case 'a':
+                host_address = optarg;
+                printf("host address: %s\n", host_address);
+                break;
+            case 'p':
+                port = atoi(optarg);
+                printf("port: %d\n", port);
+                break;
+#else
+            case 'u':
+                uart_device = optarg;
+                printf("uart device: %s\n", uart_device);
+                break;
+            case 'b':
+                baudrate = parse_baudrate(atoi(optarg));
+                printf("uart baudrate: %s\n", optarg);
+                break;
+#endif
+            case 'h':
+                showUsage();
+                return false;
+            default:
+                showUsage();
+                return false;
+        }
+    }
+
+    return true;
+}
+
+// Driver function
+int iwasm_main(int argc, char *argv[])
+{
+    korp_thread tid;
+
+    if (!parse_args(argc, argv))
+        return -1;
+
+    if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf))
+            != 0) {
+        printf("Init global heap failed.\n");
+        return -1;
+    }
+
+    if (vm_thread_sys_init() != 0) {
+        goto fail1;
+    }
+
+    if (!init_connection_framework()) {
+        vm_thread_sys_destroy();
+        goto fail1;
+    }
+
+    extern void display_SDL_init();
+    display_SDL_init();
+
+    init_sensor_framework();
+
+    // timer manager
+    init_wasm_timer();
+
+#ifndef CONNECTION_UART
+    if (server_mode)
+        vm_thread_create(&tid, func_server_mode, NULL,
+        BH_APPLET_PRESERVED_STACK_SIZE);
+    else
+        vm_thread_create(&tid, func, NULL, BH_APPLET_PRESERVED_STACK_SIZE);
+#else
+    vm_thread_create(&tid, func_uart_mode, NULL, 
BH_APPLET_PRESERVED_STACK_SIZE);
+#endif
+
+    // TODO:
+    app_manager_startup(&interface);
+
+    fail1: bh_memory_destroy();
+    return -1;
+}
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/main.c 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/main.c
new file mode 100755
index 0000000..24cae03
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/main.c
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+extern void iwasm_main(int argc, char *argv[]);
+int main(int argc, char *argv[])
+{
+    iwasm_main(argc,argv);
+}
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/mouse.c 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/mouse.c
new file mode 100755
index 0000000..f5d071d
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/mouse.c
@@ -0,0 +1,96 @@
+/**
+ * @file mouse.c
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include "display_indev.h"
+#include "SDL2/SDL.h"
+#if USE_MOUSE != 0
+
+/*********************
+ *      DEFINES
+ *********************/
+#ifndef MONITOR_ZOOM
+#define MONITOR_ZOOM    1
+#endif
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+static bool left_button_down = false;
+static int16_t last_x = 0;
+static int16_t last_y = 0;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the mouse
+ */
+void mouse_init(void)
+{
+
+}
+
+/**
+ * Get the current position and state of the mouse
+ * @param data store the mouse data here
+ * @return false: because the points are not buffered, so no more data to be 
read
+ */
+bool mouse_read(lv_indev_data_t * data)
+{
+    /*Store the collected data*/
+    data->point.x = last_x;
+    data->point.y = last_y;
+    data->state = left_button_down ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
+
+    return false;
+}
+
+/**
+ * It will be called from the main SDL thread
+ */
+void mouse_handler(SDL_Event * event)
+{
+    switch (event->type) {
+    case SDL_MOUSEBUTTONUP:
+        if (event->button.button == SDL_BUTTON_LEFT)
+            left_button_down = false;
+        break;
+    case SDL_MOUSEBUTTONDOWN:
+        if (event->button.button == SDL_BUTTON_LEFT) {
+            left_button_down = true;
+            last_x = event->motion.x / MONITOR_ZOOM;
+            last_y = event->motion.y / MONITOR_ZOOM;
+        }
+        break;
+    case SDL_MOUSEMOTION:
+        last_x = event->motion.x / MONITOR_ZOOM;
+        last_y = event->motion.y / MONITOR_ZOOM;
+
+        break;
+    }
+
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+#endif
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/LICENSE
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/LICENSE
new file mode 100755
index 0000000..8f71f43
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/LICENSE
@@ -0,0 +1,202 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.c
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.c
new file mode 100755
index 0000000..6d9048d
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.c
@@ -0,0 +1,337 @@
+/**
+ * @file XPT2046.c
+*/
+/*********************
+ *      INCLUDES
+ *********************/
+#include "XPT2046.h"
+#include "board_config.h"
+#include "stdio.h"
+#include <string.h>
+#include "spi.h"
+
+#include "zephyr.h"
+#include "kernel.h"
+
+#if USE_XPT2046
+
+#include <stddef.h>
+
+#define abs(x) ((x) < 0 ? -(x) : (x))
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static void xpt2046_corr(int16_t * x, int16_t * y);
+static void xpt2046_avg(int16_t * x, int16_t * y);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+int16_t avg_buf_x[XPT2046_AVG];
+int16_t avg_buf_y[XPT2046_AVG];
+uint8_t avg_last;
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the XPT2046
+ */
+struct device *input_dev;
+
+struct spi_config spi_conf_xpt2046;
+struct spi_cs_control xpt2046_cs_ctrl;
+struct device *xpt2046_pen_gpio_dev;
+static struct gpio_callback gpio_cb;
+lv_indev_data_t touch_point;
+lv_indev_data_t last_touch_point;
+
+#define TOUCH_READ_THREAD_STACK_SIZE 4096
+static K_THREAD_STACK_DEFINE(touch_read_thread_stack, 
TOUCH_READ_THREAD_STACK_SIZE);
+static struct k_thread touch_thread_data;
+static struct k_sem sem_touch_read;
+
+K_MUTEX_DEFINE( spi_display_touch_mutex);
+
+int cnt = 0;
+int touch_read_times = 0;
+int last_pen_interrupt_time = 0;
+void xpt2046_pen_gpio_callback(struct device *port, struct gpio_callback *cb,
+        u32_t pins)
+{
+    int i;
+    cnt++;
+    if ((k_uptime_get_32() - last_pen_interrupt_time) > 500) {
+        k_sem_give(&sem_touch_read);
+        touch_read_times++;
+        last_pen_interrupt_time = k_uptime_get_32();
+    }
+
+}
+
+void disable_pen_interrupt()
+{
+    int ret = 0;
+    ret = gpio_pin_disable_callback(xpt2046_pen_gpio_dev, 
XPT2046_PEN_GPIO_PIN);
+    if (ret != 0) {
+        printf("gpio_pin_configure GPIO_DIR_IN failed\n");
+    }
+}
+void enable_pen_interrupt()
+{
+    int ret = 0;
+    ret = gpio_pin_enable_callback(xpt2046_pen_gpio_dev, XPT2046_PEN_GPIO_PIN);
+    if (ret != 0) {
+        printf("gpio_pin_configure failed\n");
+    }
+}
+
+void touch_screen_read_thread()
+{
+    int i;
+    bool ret = false;
+
+    for (;;) {
+        k_sem_take(&sem_touch_read, K_FOREVER);
+        memset(&last_touch_point, 0, sizeof(lv_indev_data_t));
+        memset(&touch_point, 0, sizeof(lv_indev_data_t));
+        memset(avg_buf_x, 0, sizeof(avg_buf_x));
+        memset(avg_buf_y, 0, sizeof(avg_buf_y));
+        k_mutex_lock(&spi_display_touch_mutex, K_FOREVER);
+        disable_pen_interrupt();
+        for (i = 0; i < 100; i++) {
+            ret = xpt2046_read(&touch_point);
+            if (ret) {
+                if ((abs(last_touch_point.point.x - touch_point.point.x) < 4)
+                        && (abs(last_touch_point.point.y - touch_point.point.y)
+                                < 4)) {
+                    break;
+                }
+                last_touch_point = touch_point;
+
+            }
+        }
+        enable_pen_interrupt();
+        k_mutex_unlock(&spi_display_touch_mutex);
+    }
+}
+
+void xpt2046_init(void)
+{
+    int ret;
+    input_dev = device_get_binding(XPT2046_SPI_DEVICE_NAME);
+
+    if (input_dev == NULL) {
+        printf("device not found.  Aborting test.");
+        return;
+    }
+    memset((void *) &touch_point, 0, sizeof(lv_indev_data_t));
+
+    spi_conf_xpt2046.frequency = XPT2046_SPI_MAX_FREQUENCY;
+    spi_conf_xpt2046.operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8);
+    spi_conf_xpt2046.slave = 0;
+    spi_conf_xpt2046.cs = NULL;
+#ifdef XPT2046_CS_GPIO_CONTROLLER
+    xpt2046_cs_ctrl.gpio_dev = device_get_binding(XPT2046_CS_GPIO_CONTROLLER);
+    if (xpt2046_cs_ctrl.gpio_dev == NULL) {
+        printk("Cannot find %s!\n", XPT2046_CS_GPIO_CONTROLLER);
+        return;
+    }
+    gpio_pin_configure(xpt2046_cs_ctrl.gpio_dev, XPT2046_CS_GPIO_PIN,
+                       GPIO_DIR_OUT);
+    gpio_pin_write(xpt2046_cs_ctrl.gpio_dev, XPT2046_CS_GPIO_PIN, 1);
+    xpt2046_cs_ctrl.gpio_pin = XPT2046_CS_GPIO_PIN;
+    xpt2046_cs_ctrl.delay = 0;
+    spi_conf_xpt2046.cs = &xpt2046_cs_ctrl;
+
+#endif
+
+#ifdef XPT2046_PEN_GPIO_CONTROLLER
+
+    xpt2046_pen_gpio_dev = device_get_binding(XPT2046_PEN_GPIO_CONTROLLER);
+    if (!xpt2046_pen_gpio_dev) {
+        printk("Cannot find %s!\n", XPT2046_PEN_GPIO_CONTROLLER);
+        return;
+    }
+    /* Setup GPIO input */
+    ret = gpio_pin_configure(xpt2046_pen_gpio_dev, XPT2046_PEN_GPIO_PIN,
+                             (GPIO_DIR_IN | GPIO_INT | GPIO_INT_EDGE
+                              | GPIO_INT_ACTIVE_LOW | GPIO_INT_DEBOUNCE)
+                            );
+    if (ret) {
+        printk("Error configuring pin %d!\n", XPT2046_PEN_GPIO_PIN);
+    }
+
+    gpio_init_callback(&gpio_cb, xpt2046_pen_gpio_callback,
+                       BIT(XPT2046_PEN_GPIO_PIN));
+
+    ret = gpio_add_callback(xpt2046_pen_gpio_dev, &gpio_cb);
+    if (ret) {
+        printk("gpio_add_callback error\n");
+    }
+    ret = gpio_pin_enable_callback(xpt2046_pen_gpio_dev, XPT2046_PEN_GPIO_PIN);
+    if (ret) {
+        printk("gpio_pin_enable_callback error\n");
+    }
+#endif
+
+    k_sem_init(&sem_touch_read, 0, 1);
+
+    k_thread_create(&touch_thread_data, touch_read_thread_stack,
+                    TOUCH_READ_THREAD_STACK_SIZE, touch_screen_read_thread,
+                    NULL, NULL, NULL, 5,
+                    0, K_NO_WAIT);
+    printf("xpt2046_init ok \n");
+}
+
+/**
+ * Get the current position and state of the touchpad
+ * @param data store the read data here
+ * @return false: because no ore data to be read
+ */
+bool xpt2046_read(lv_indev_data_t * data)
+{
+    static int16_t last_x = 0;
+    static int16_t last_y = 0;
+    bool valid = true;
+    int s32_ret = 0;
+    uint8_t buf;
+
+    int16_t x = 0;
+    int16_t y = 0;
+
+    char tx1[16] = { 0 };
+    char rx1[16] = { 0 };
+
+    struct spi_buf tx_buf = { .buf = &tx1, .len = 3 };
+    struct spi_buf_set tx_bufs = { .buffers = &tx_buf, .count = 1 };
+    struct spi_buf rx_buf = { .buf = &rx1, .len = 3 };
+    struct spi_buf_set rx_bufs = { .buffers = &rx_buf, .count = 1 };
+
+    tx1[0] = CMD_X_READ;
+    s32_ret = spi_transceive(input_dev, &spi_conf_xpt2046, &tx_bufs, &rx_bufs);
+    if (s32_ret != 0) {
+        printf("spi_transceive return failed:%d\n", s32_ret);
+    }
+    x = rx1[1] << 8;
+    x += rx1[2];
+
+    tx1[0] = CMD_Y_READ;
+    s32_ret = spi_transceive(input_dev, &spi_conf_xpt2046, &tx_bufs, &rx_bufs);
+    if (s32_ret != 0) {
+        printf("spi_transceive return failed:%d\n", s32_ret);
+    }
+    y = rx1[1] << 8;
+    y += rx1[2];
+    x = x >> 3;
+    y = y >> 3;
+
+    xpt2046_corr(&x, &y);
+    if (y <= 0 || (x > 320)) {
+        valid = false;
+    }
+
+    last_x = x;
+    last_y = y;
+
+    data->point.x = x;
+    data->point.y = y;
+    data->state = valid == false ? LV_INDEV_STATE_REL : LV_INDEV_STATE_PR;
+
+    return valid;
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+static void xpt2046_corr(int16_t * x, int16_t * y)
+{
+#if XPT2046_XY_SWAP != 0
+    int16_t swap_tmp;
+    swap_tmp = *x;
+    *x = *y;
+    *y = swap_tmp;
+#endif
+
+    if ((*x) > XPT2046_X_MIN)
+        (*x) -= XPT2046_X_MIN;
+    else
+        (*x) = 0;
+
+    if ((*y) > XPT2046_Y_MIN)
+        (*y) -= XPT2046_Y_MIN;
+    else
+        (*y) = 0;
+
+    (*x) = (uint32_t)((uint32_t)(*x) * XPT2046_HOR_RES)
+            / (XPT2046_X_MAX - XPT2046_X_MIN);
+
+    (*y) = (uint32_t)((uint32_t)(*y) * XPT2046_VER_RES)
+            / (XPT2046_Y_MAX - XPT2046_Y_MIN);
+
+#if XPT2046_X_INV != 0
+    (*x) = XPT2046_HOR_RES - (*x);
+#endif
+
+#if XPT2046_Y_INV != 0
+    (*y) = XPT2046_VER_RES - (*y);
+#endif
+
+}
+
+static void xpt2046_avg(int16_t * x, int16_t * y)
+{
+    /*Shift out the oldest data*/
+    uint8_t i;
+    for (i = XPT2046_AVG - 1; i > 0; i--) {
+        avg_buf_x[i] = avg_buf_x[i - 1];
+        avg_buf_y[i] = avg_buf_y[i - 1];
+    }
+
+    /*Insert the new point*/
+    avg_buf_x[0] = *x;
+    avg_buf_y[0] = *y;
+    if (avg_last < XPT2046_AVG)
+        avg_last++;
+
+    /*Sum the x and y coordinates*/
+    int32_t x_sum = 0;
+    int32_t y_sum = 0;
+    for (i = 0; i < avg_last; i++) {
+        x_sum += avg_buf_x[i];
+        y_sum += avg_buf_y[i];
+    }
+
+    /*Normalize the sums*/
+    (*x) = (int32_t) x_sum / avg_last;
+    (*y) = (int32_t) y_sum / avg_last;
+}
+
+bool touchscreen_read(lv_indev_data_t * data)
+{
+    /*Store the collected data*/
+    data->point.x = last_touch_point.point.x;
+    data->point.y = last_touch_point.point.y;
+    data->state = last_touch_point.state;
+
+    if (last_touch_point.state == LV_INDEV_STATE_PR) {
+        last_touch_point.state = LV_INDEV_STATE_REL;
+    }
+    return false;
+}
+
+#endif
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.h
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.h
new file mode 100755
index 0000000..92aa7e6
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.h
@@ -0,0 +1,93 @@
+/**
+ * @file XPT2046.h
+ *
+ */
+
+#ifndef XPT2046_H
+#define XPT2046_H
+
+#define USE_XPT2046 1
+#ifndef LV_CONF_INCLUDE_SIMPLE
+#define LV_CONF_INCLUDE_SIMPLE
+#endif
+
+#  define XPT2046_HOR_RES     320
+#  define XPT2046_VER_RES     240
+#  define XPT2046_X_MIN       200
+#  define XPT2046_Y_MIN       200
+#  define XPT2046_X_MAX       3800
+#  define XPT2046_Y_MAX       3800
+#  define XPT2046_AVG         4
+#  define XPT2046_INV         0
+
+#define CMD_X_READ  0b10010000
+#define CMD_Y_READ  0b11010000
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ *      INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+//#include "lv_drv_conf.h"
+#else
+//#include "../../lv_drv_conf.h"
+#endif
+
+#if USE_XPT2046
+#include <autoconf.h>
+#include <stdint.h>
+#include <stdbool.h>
+//#include "lvgl/lv_hal/lv_hal_indev.h"
+#include "device.h"
+#include "gpio.h"
+#if 1
+enum {
+    LV_INDEV_STATE_REL = 0, LV_INDEV_STATE_PR
+};
+typedef uint8_t lv_indev_state_t;
+typedef int16_t lv_coord_t;
+typedef struct {
+    lv_coord_t x;
+    lv_coord_t y;
+} lv_point_t;
+
+typedef struct {
+    union {
+        lv_point_t point; /*For LV_INDEV_TYPE_POINTER the currently pressed 
point*/
+        uint32_t key; /*For LV_INDEV_TYPE_KEYPAD the currently pressed key*/
+        uint32_t btn; /*For LV_INDEV_TYPE_BUTTON the currently pressed button*/
+        int16_t enc_diff; /*For LV_INDEV_TYPE_ENCODER number of steps since 
the previous read*/
+    };
+    void *user_data; /*'lv_indev_drv_t.priv' for this driver*/
+    lv_indev_state_t state; /*LV_INDEV_STATE_REL or LV_INDEV_STATE_PR*/
+} lv_indev_data_t;
+#endif
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+void xpt2046_init(void);
+bool xpt2046_read(lv_indev_data_t * data);
+
+/**********************
+ *      MACROS
+ **********************/
+
+#endif /* USE_XPT2046 */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* XPT2046_H */
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/board_config.h
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/board_config.h
new file mode 100755
index 0000000..1233c30
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/board_config.h
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __BOARD_CONFIG_H__
+#define __BOARD_CONFIG_H__
+#include "pin_config_stm32.h"
+
+#endif /* __BOARD_CONFIG_H__ */
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display.h
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display.h
new file mode 100755
index 0000000..b820b9c
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display.h
@@ -0,0 +1,405 @@
+/*
+ * Copyright (c) 2017 Jan Van Winkel <jan.van_winkel@xxxxxxxxxx>
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @file
+ * @brief Public API for display drivers and applications
+ */
+
+#ifndef ZEPHYR_INCLUDE_DISPLAY_H_
+#define ZEPHYR_INCLUDE_DISPLAY_H_
+
+/**
+ * @brief Display Interface
+ * @defgroup display_interface Display Interface
+ * @ingroup display_interfaces
+ * @{
+ */
+
+#include <device.h>
+#include <stddef.h>
+#include <zephyr/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum display_pixel_format {
+    PIXEL_FORMAT_RGB_888 = BIT(0), PIXEL_FORMAT_MONO01 = BIT(1), /* 0=Black 
1=White */
+    PIXEL_FORMAT_MONO10 = BIT(2), /* 1=Black 0=White */
+    PIXEL_FORMAT_ARGB_8888 = BIT(3), PIXEL_FORMAT_RGB_565 = BIT(4),
+};
+
+enum display_screen_info {
+    /**
+     * If selected, one octet represents 8 pixels ordered vertically,
+     * otherwise ordered horizontally.
+     */
+    SCREEN_INFO_MONO_VTILED = BIT(0),
+    /**
+     * If selected, the MSB represents the first pixel,
+     * otherwise MSB represents the last pixel.
+     */
+    SCREEN_INFO_MONO_MSB_FIRST = BIT(1),
+    /**
+     * Electrophoretic Display.
+     */
+    SCREEN_INFO_EPD = BIT(2),
+    /**
+     * Screen has two alternating ram buffers
+     */
+    SCREEN_INFO_DOUBLE_BUFFER = BIT(3),
+};
+
+/**
+ * @enum display_orientation
+ * @brief Enumeration with possible display orientation
+ *
+ */
+enum display_orientation {
+    DISPLAY_ORIENTATION_NORMAL,
+    DISPLAY_ORIENTATION_ROTATED_90,
+    DISPLAY_ORIENTATION_ROTATED_180,
+    DISPLAY_ORIENTATION_ROTATED_270,
+};
+
+/**
+ * @struct display_capabilities
+ * @brief Structure holding display capabilities
+ *
+ * @var u16_t display_capabilities::x_resolution
+ * Display resolution in the X direction
+ *
+ * @var u16_t display_capabilities::y_resolution
+ * Display resolution in the Y direction
+ *
+ * @var u32_t display_capabilities::supported_pixel_formats
+ * Bitwise or of pixel formats supported by the display
+ *
+ * @var u32_t display_capabilities::screen_info
+ * Information about display panel
+ *
+ * @var enum display_pixel_format display_capabilities::current_pixel_format
+ * Currently active pixel format for the display
+ *
+ * @var enum display_orientation display_capabilities::current_orientation
+ * Current display orientation
+ *
+ */
+struct display_capabilities {
+    u16_t x_resolution;
+    u16_t y_resolution;
+    u32_t supported_pixel_formats;
+    u32_t screen_info;
+    enum display_pixel_format current_pixel_format;
+    enum display_orientation current_orientation;
+};
+
+/**
+ * @struct display_buffer_descriptor
+ * @brief Structure to describe display data buffer layout
+ *
+ * @var u32_t display_buffer_descriptor::buf_size
+ * Data buffer size in bytes
+ *
+ * @var u16_t display_buffer_descriptor::width
+ * Data buffer row width in pixels
+ *
+ * @var u16_t display_buffer_descriptor::height
+ * Data buffer column height in pixels
+ *
+ * @var u16_t display_buffer_descriptor::pitch
+ * Number of pixels between consecutive rows in the data buffer
+ *
+ */
+struct display_buffer_descriptor {
+    u32_t buf_size;
+    u16_t width;
+    u16_t height;
+    u16_t pitch;
+};
+
+/**
+ * @typedef display_blanking_on_api
+ * @brief Callback API to turn on display blanking
+ * See display_blanking_on() for argument description
+ */
+typedef int (*display_blanking_on_api)(const struct device *dev);
+
+/**
+ * @typedef display_blanking_off_api
+ * @brief Callback API to turn off display blanking
+ * See display_blanking_off() for argument description
+ */
+typedef int (*display_blanking_off_api)(const struct device *dev);
+
+/**
+ * @typedef display_write_api
+ * @brief Callback API for writing data to the display
+ * See display_write() for argument description
+ */
+typedef int (*display_write_api)(const struct device *dev, const u16_t x,
+        const u16_t y, const struct display_buffer_descriptor *desc,
+        const void *buf);
+
+/**
+ * @typedef display_read_api
+ * @brief Callback API for reading data from the display
+ * See display_read() for argument description
+ */
+typedef int (*display_read_api)(const struct device *dev, const u16_t x,
+        const u16_t y, const struct display_buffer_descriptor *desc, void 
*buf);
+
+/**
+ * @typedef display_get_framebuffer_api
+ * @brief Callback API to get framebuffer pointer
+ * See display_get_framebuffer() for argument description
+ */
+typedef void *(*display_get_framebuffer_api)(const struct device *dev);
+
+/**
+ * @typedef display_set_brightness_api
+ * @brief Callback API to set display brightness
+ * See display_set_brightness() for argument description
+ */
+typedef int (*display_set_brightness_api)(const struct device *dev,
+        const u8_t brightness);
+
+/**
+ * @typedef display_set_contrast_api
+ * @brief Callback API to set display contrast
+ * See display_set_contrast() for argument description
+ */
+typedef int (*display_set_contrast_api)(const struct device *dev,
+        const u8_t contrast);
+
+/**
+ * @typedef display_get_capabilities_api
+ * @brief Callback API to get display capabilities
+ * See display_get_capabilities() for argument description
+ */
+typedef void (*display_get_capabilities_api)(const struct device *dev,
+        struct display_capabilities * capabilities);
+
+/**
+ * @typedef display_set_pixel_format_api
+ * @brief Callback API to set pixel format used by the display
+ * See display_set_pixel_format() for argument description
+ */
+typedef int (*display_set_pixel_format_api)(const struct device *dev,
+        const enum display_pixel_format pixel_format);
+
+/**
+ * @typedef display_set_orientation_api
+ * @brief Callback API to set orientation used by the display
+ * See display_set_orientation() for argument description
+ */
+typedef int (*display_set_orientation_api)(const struct device *dev,
+        const enum display_orientation orientation);
+
+/**
+ * @brief Display driver API
+ * API which a display driver should expose
+ */
+struct display_driver_api {
+    display_blanking_on_api blanking_on;
+    display_blanking_off_api blanking_off;
+    display_write_api write;
+    display_read_api read;
+    display_get_framebuffer_api get_framebuffer;
+    display_set_brightness_api set_brightness;
+    display_set_contrast_api set_contrast;
+    display_get_capabilities_api get_capabilities;
+    display_set_pixel_format_api set_pixel_format;
+    display_set_orientation_api set_orientation;
+};
+extern struct ili9340_data ili9340_data1;
+extern struct display_driver_api ili9340_api1;
+/**
+ * @brief Write data to display
+ *
+ * @param dev Pointer to device structure
+ * @param x x Coordinate of the upper left corner where to write the buffer
+ * @param y y Coordinate of the upper left corner where to write the buffer
+ * @param desc Pointer to a structure describing the buffer layout
+ * @param buf Pointer to buffer array
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_write(const struct device *dev, const u16_t x,
+        const u16_t y, const struct display_buffer_descriptor *desc,
+        const void *buf)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->write(dev, x, y, desc, buf);
+}
+
+/**
+ * @brief Read data from display
+ *
+ * @param dev Pointer to device structure
+ * @param x x Coordinate of the upper left corner where to read from
+ * @param y y Coordinate of the upper left corner where to read from
+ * @param desc Pointer to a structure describing the buffer layout
+ * @param buf Pointer to buffer array
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_read(const struct device *dev, const u16_t x,
+        const u16_t y, const struct display_buffer_descriptor *desc, void *buf)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->read(dev, x, y, desc, buf);
+}
+
+/**
+ * @brief Get pointer to framebuffer for direct access
+ *
+ * @param dev Pointer to device structure
+ *
+ * @retval Pointer to frame buffer or NULL if direct framebuffer access
+ * is not supported
+ *
+ */
+static inline void *display_get_framebuffer(const struct device *dev)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->get_framebuffer(dev);
+}
+
+/**
+ * @brief Turn display blanking on
+ *
+ * @param dev Pointer to device structure
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_blanking_on(const struct device *dev)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->blanking_on(dev);
+}
+
+/**
+ * @brief Turn display blanking off
+ *
+ * @param dev Pointer to device structure
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_blanking_off(const struct device *dev)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->blanking_off(dev);
+}
+
+/**
+ * @brief Set the brightness of the display
+ *
+ * Set the brightness of the display in steps of 1/256, where 255 is full
+ * brightness and 0 is minimal.
+ *
+ * @param dev Pointer to device structure
+ * @param brightness Brightness in steps of 1/256
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_set_brightness(const struct device *dev,
+        u8_t brightness)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->set_brightness(dev, brightness);
+}
+
+/**
+ * @brief Set the contrast of the display
+ *
+ * Set the contrast of the display in steps of 1/256, where 255 is maximum
+ * difference and 0 is minimal.
+ *
+ * @param dev Pointer to device structure
+ * @param contrast Contrast in steps of 1/256
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_set_contrast(const struct device *dev, u8_t contrast)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->set_contrast(dev, contrast);
+}
+
+/**
+ * @brief Get display capabilities
+ *
+ * @param dev Pointer to device structure
+ * @param capabilities Pointer to capabilities structure to populate
+ */
+static inline void display_get_capabilities(const struct device *dev,
+        struct display_capabilities * capabilities)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    api->get_capabilities(dev, capabilities);
+}
+
+/**
+ * @brief Set pixel format used by the display
+ *
+ * @param dev Pointer to device structure
+ * @param pixel_format Pixel format to be used by display
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_set_pixel_format(const struct device *dev,
+        const enum display_pixel_format pixel_format)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->set_pixel_format(dev, pixel_format);
+}
+
+/**
+ * @brief Set display orientation
+ *
+ * @param dev Pointer to device structure
+ * @param orientation Orientation to be used by display
+ *
+ * @retval 0 on success else negative errno code.
+ */
+static inline int display_set_orientation(const struct device *dev,
+        const enum display_orientation orientation)
+{
+    struct display_driver_api *api = &ili9340_api1;
+    //(struct display_driver_api *)dev->driver_api;
+
+    return api->set_orientation(dev, orientation);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/**
+ * @}
+ */
+
+#endif /* ZEPHYR_INCLUDE_DISPLAY_H_*/
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.c
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.c
new file mode 100755
index 0000000..07e77ff
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.c
@@ -0,0 +1,264 @@
+/*
+ * Copyright (c) 2017 Jan Van Winkel <jan.van_winkel@xxxxxxxxxx>
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include "display_ili9340.h"
+#include <display.h>
+
+//#define LOG_LEVEL CONFIG_DISPLAY_LOG_LEVEL
+//#include <logging/log.h>
+//LOG_MODULE_REGISTER(display_ili9340);
+#define LOG_ERR printf
+#define LOG_DBG printf
+#define LOG_WRN printf
+
+#include <gpio.h>
+#include <misc/byteorder.h>
+#include <spi.h>
+#include <string.h>
+
+struct ili9340_data {
+    struct device *reset_gpio;
+    struct device *command_data_gpio;
+    struct device *spi_dev;
+    struct spi_config spi_config;
+#ifdef DT_ILITEK_ILI9340_0_CS_GPIO_CONTROLLER
+struct spi_cs_control cs_ctrl;
+#endif
+};
+
+struct ili9340_data ili9340_data1;
+
+#define ILI9340_CMD_DATA_PIN_COMMAND 0
+#define ILI9340_CMD_DATA_PIN_DATA 1
+
+static void ili9340_exit_sleep(struct ili9340_data *data)
+{
+    ili9340_transmit(data, ILI9340_CMD_EXIT_SLEEP, NULL, 0);
+    //k_sleep(120);
+}
+
+int ili9340_init()
+{
+    struct ili9340_data *data = &ili9340_data1;
+    printf("Initializing display driver\n");
+    data->spi_dev = device_get_binding(DT_ILITEK_ILI9340_0_BUS_NAME);
+    if (data->spi_dev == NULL) {
+        return -EPERM;
+    }
+    data->spi_config.frequency = DT_ILITEK_ILI9340_0_SPI_MAX_FREQUENCY;
+    data->spi_config.operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8); 
//SPI_OP_MODE_MASTER | SPI_WORD_SET(8);
+    data->spi_config.slave = DT_ILITEK_ILI9340_0_BASE_ADDRESS;
+
+#ifdef DT_ILITEK_ILI9340_0_CS_GPIO_CONTROLLER
+    data->cs_ctrl.gpio_dev =
+    device_get_binding(DT_ILITEK_ILI9340_0_CS_GPIO_CONTROLLER);
+    data->cs_ctrl.gpio_pin = DT_ILITEK_ILI9340_0_CS_GPIO_PIN;
+    data->cs_ctrl.delay = 0;
+    data->spi_config.cs = &(data->cs_ctrl);
+#else
+    data->spi_config.cs = NULL;
+#endif
+    data->reset_gpio = device_get_binding(
+        DT_ILITEK_ILI9340_0_RESET_GPIOS_CONTROLLER);
+    if (data->reset_gpio == NULL) {
+        return -EPERM;
+    }
+
+    gpio_pin_configure(data->reset_gpio, DT_ILITEK_ILI9340_0_RESET_GPIOS_PIN,
+        GPIO_DIR_OUT);
+
+    data->command_data_gpio = device_get_binding(
+        DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_CONTROLLER);
+    if (data->command_data_gpio == NULL) {    
+        return -EPERM;
+    }
+
+    gpio_pin_configure(data->command_data_gpio,
+        DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_PIN, GPIO_DIR_OUT);
+
+    LOG_DBG("Resetting display driver");
+    gpio_pin_write(data->reset_gpio, DT_ILITEK_ILI9340_0_RESET_GPIOS_PIN, 1);
+    k_sleep(1);
+    gpio_pin_write(data->reset_gpio, DT_ILITEK_ILI9340_0_RESET_GPIOS_PIN, 0);
+    k_sleep(1);
+    gpio_pin_write(data->reset_gpio, DT_ILITEK_ILI9340_0_RESET_GPIOS_PIN, 1);
+    k_sleep(5);
+
+    LOG_DBG("Initializing LCD\n");
+    ili9340_lcd_init(data);
+
+    LOG_DBG("Exiting sleep mode\n");
+    ili9340_exit_sleep(data);
+
+    return 0;
+}
+
+static void ili9340_set_mem_area(struct ili9340_data *data, const u16_t x,
+    const u16_t y, const u16_t w, const u16_t h)
+{
+    u16_t spi_data[2];
+
+    spi_data[0] = sys_cpu_to_be16(x);
+    spi_data[1] = sys_cpu_to_be16(x + w - 1);
+    ili9340_transmit(data, ILI9340_CMD_COLUMN_ADDR, &spi_data[0], 4);
+
+    spi_data[0] = sys_cpu_to_be16(y);
+    spi_data[1] = sys_cpu_to_be16(y + h - 1);
+    ili9340_transmit(data, ILI9340_CMD_PAGE_ADDR, &spi_data[0], 4);
+}
+
+static int ili9340_write(const struct device *dev, const u16_t x, const u16_t 
y,
+    const struct display_buffer_descriptor *desc, const void *buf)
+{
+    struct ili9340_data *data = (struct ili9340_data *) &ili9340_data1;
+    const u8_t *write_data_start = (u8_t *) buf;
+    struct spi_buf tx_buf;
+    struct spi_buf_set tx_bufs;
+    u16_t write_cnt;
+    u16_t nbr_of_writes;
+    u16_t write_h;
+
+    __ASSERT(desc->width <= desc->pitch, "Pitch is smaller then width");
+    __ASSERT((3 * desc->pitch * desc->height) <= desc->buf_size,
+        "Input buffer to small");
+    ili9340_set_mem_area(data, x, y, desc->width, desc->height);
+
+    if (desc->pitch > desc->width) {
+        write_h = 1U;
+        nbr_of_writes = desc->height;
+    } else {
+        write_h = desc->height;
+        nbr_of_writes = 1U;
+    }
+    ili9340_transmit(data, ILI9340_CMD_MEM_WRITE, (void *) write_data_start,
+        3 * desc->width * write_h);
+
+    tx_bufs.buffers = &tx_buf;
+    tx_bufs.count = 1;
+
+    write_data_start += (3 * desc->pitch);
+    for (write_cnt = 1U; write_cnt < nbr_of_writes; ++write_cnt) {
+        tx_buf.buf = (void *) write_data_start;
+        tx_buf.len = 3 * desc->width * write_h;
+        spi_transceive(data->spi_dev, &data->spi_config, &tx_bufs, NULL);
+        write_data_start += (3 * desc->pitch);
+    }
+
+    return 0;
+}
+
+static int ili9340_read(const struct device *dev, const u16_t x, const u16_t y,
+    const struct display_buffer_descriptor *desc, void *buf)
+{
+    LOG_ERR("Reading not supported");
+    return -ENOTSUP;
+}
+
+static void *ili9340_get_framebuffer(const struct device *dev)
+{
+    LOG_ERR("Direct framebuffer access not supported");
+    return NULL;
+}
+
+static int ili9340_display_blanking_off(const struct device *dev)
+{
+    struct ili9340_data *data = (struct ili9340_data *) dev->driver_data;
+
+    LOG_DBG("Turning display blanking off");
+    ili9340_transmit(data, ILI9340_CMD_DISPLAY_ON, NULL, 0);
+    return 0;
+}
+
+static int ili9340_display_blanking_on(const struct device *dev)
+{
+    struct ili9340_data *data = (struct ili9340_data *) dev->driver_data;
+
+    LOG_DBG("Turning display blanking on");
+    ili9340_transmit(data, ILI9340_CMD_DISPLAY_OFF, NULL, 0);
+    return 0;
+}
+
+static int ili9340_set_brightness(const struct device *dev,
+    const u8_t brightness)
+{
+    LOG_WRN("Set brightness not implemented");
+    return -ENOTSUP;
+}
+
+static int ili9340_set_contrast(const struct device *dev, const u8_t contrast)
+{
+    LOG_ERR("Set contrast not supported");
+    return -ENOTSUP;
+}
+
+static int ili9340_set_pixel_format(const struct device *dev,
+    const enum display_pixel_format pixel_format)
+{
+    if (pixel_format == PIXEL_FORMAT_RGB_888) {
+    return 0;
+}
+    LOG_ERR("Pixel format change not implemented");
+    return -ENOTSUP;
+}
+
+static int ili9340_set_orientation(const struct device *dev,
+    const enum display_orientation orientation)
+{
+if (orientation == DISPLAY_ORIENTATION_NORMAL) {
+    return 0;
+}
+LOG_ERR("Changing display orientation not implemented");
+    return -ENOTSUP;
+}
+
+static void ili9340_get_capabilities(const struct device *dev,
+    struct display_capabilities *capabilities)
+{
+    memset(capabilities, 0, sizeof(struct display_capabilities));
+    capabilities->x_resolution = 320;
+    capabilities->y_resolution = 240;
+    capabilities->supported_pixel_formats = PIXEL_FORMAT_RGB_888;
+    capabilities->current_pixel_format = PIXEL_FORMAT_RGB_888;
+    capabilities->current_orientation = DISPLAY_ORIENTATION_NORMAL;
+}
+
+void ili9340_transmit(struct ili9340_data *data, u8_t cmd, void *tx_data,
+    size_t tx_len)
+{
+    int i;
+    char * buf1 = tx_data;
+    data = (struct ili9340_data *) &ili9340_data1;
+    struct spi_buf tx_buf = { .buf = &cmd, .len = 1 };
+    struct spi_buf_set tx_bufs = { .buffers = &tx_buf, .count = 1 };
+
+    gpio_pin_write(data->command_data_gpio, 
DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_PIN,
+        ILI9340_CMD_DATA_PIN_COMMAND);
+    spi_transceive(data->spi_dev, &data->spi_config, &tx_bufs, NULL);
+    if (tx_data != NULL) {
+        tx_buf.buf = tx_data;
+        tx_buf.len = tx_len;
+        gpio_pin_write(data->command_data_gpio,
+        DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_PIN,
+        ILI9340_CMD_DATA_PIN_DATA);
+        spi_transceive(data->spi_dev, &data->spi_config, &tx_bufs, NULL);
+    }
+}
+
+struct display_driver_api ili9340_api1 =
+    { .blanking_on = ili9340_display_blanking_on, .blanking_off =
+            ili9340_display_blanking_off, .write = ili9340_write, .read =
+            ili9340_read, .get_framebuffer = ili9340_get_framebuffer,
+            .set_brightness = ili9340_set_brightness, .set_contrast =
+                    ili9340_set_contrast, .get_capabilities =
+                    ili9340_get_capabilities, .set_pixel_format =
+                    ili9340_set_pixel_format, .set_orientation =
+                    ili9340_set_orientation, };
+
+/*
+ DEVICE_AND_API_INIT(ili9340, DT_ILITEK_ILI9340_0_LABEL, &ili9340_init,
+ &ili9340_data, NULL, APPLICATION,
+ CONFIG_APPLICATION_INIT_PRIORITY, &ili9340_api);
+ */
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.h
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.h
new file mode 100755
index 0000000..8aab97a
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2017 Jan Van Winkel <jan.van_winkel@xxxxxxxxxx>
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+#ifndef ZEPHYR_DRIVERS_DISPLAY_DISPLAY_ILI9340_H_
+#define ZEPHYR_DRIVERS_DISPLAY_DISPLAY_ILI9340_H_
+#include "board_config.h"
+#include <autoconf.h>
+#include <zephyr.h>
+
+#define ILI9340_CMD_ENTER_SLEEP 0x10
+#define ILI9340_CMD_EXIT_SLEEP 0x11
+#define ILI9340_CMD_GAMMA_SET 0x26
+#define ILI9340_CMD_DISPLAY_OFF 0x28
+#define ILI9340_CMD_DISPLAY_ON 0x29
+#define ILI9340_CMD_COLUMN_ADDR 0x2a
+#define ILI9340_CMD_PAGE_ADDR 0x2b
+#define ILI9340_CMD_MEM_WRITE 0x2c
+#define ILI9340_CMD_MEM_ACCESS_CTRL 0x36
+#define ILI9340_CMD_PIXEL_FORMAT_SET 0x3A
+#define ILI9340_CMD_FRAME_CTRL_NORMAL_MODE 0xB1
+#define ILI9340_CMD_DISPLAY_FUNCTION_CTRL 0xB6
+#define ILI9340_CMD_POWER_CTRL_1 0xC0
+#define ILI9340_CMD_POWER_CTRL_2 0xC1
+#define ILI9340_CMD_VCOM_CTRL_1 0xC5
+#define ILI9340_CMD_VCOM_CTRL_2 0xC7
+#define ILI9340_CMD_POSITVE_GAMMA_CORRECTION 0xE0
+#define ILI9340_CMD_NEGATIVE_GAMMA_CORRECTION 0xE1
+
+#define ILI9340_DATA_MEM_ACCESS_CTRL_MY 0x80
+#define ILI9340_DATA_MEM_ACCESS_CTRL_MX 0x40
+#define ILI9340_DATA_MEM_ACCESS_CTRL_MV 0x20
+#define ILI9340_DATA_MEM_ACCESS_CTRL_ML 0x10
+#define ILI9340_DATA_MEM_ACCESS_CTRL_BGR 0x08
+#define ILI9340_DATA_MEM_ACCESS_CTRL_MH 0x04
+
+#define ILI9340_DATA_PIXEL_FORMAT_RGB_18_BIT 0x60
+#define ILI9340_DATA_PIXEL_FORMAT_RGB_16_BIT 0x50
+#define ILI9340_DATA_PIXEL_FORMAT_MCU_18_BIT 0x06
+#define ILI9340_DATA_PIXEL_FORMAT_MCU_16_BIT 0x05
+
+struct ili9340_data;
+
+/**
+ * Send data to ILI9340 display controller
+ *
+ * @param data Device data structure
+ * @param cmd Command to send to display controller
+ * @param tx_data Data to transmit to the display controller
+ * In case no data should be transmitted pass a NULL pointer
+ * @param tx_len Number of bytes in tx_data buffer
+ *
+ */
+void ili9340_transmit(struct ili9340_data *data, u8_t cmd, void *tx_data,
+        size_t tx_len);
+
+/**
+ * Perform LCD specific initialization
+ *
+ * @param data Device data structure
+ */
+void ili9340_lcd_init(struct ili9340_data *data);
+
+#define DT_ILITEK_ILI9340_0_LABEL "DISPLAY"
+#define CONFIG_DISPLAY_LOG_LEVEL 0
+
+#endif /* ZEPHYR_DRIVERS_DISPLAY_DISPLAY_ILI9340_H_ */
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340_adafruit_1480.c
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340_adafruit_1480.c
new file mode 100755
index 0000000..a8581a7
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340_adafruit_1480.c
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2017 Jan Van Winkel <jan.van_winkel@xxxxxxxxxx>
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include "display_ili9340.h"
+
+void ili9340_lcd_init(struct ili9340_data *data)
+{
+    u8_t tx_data[15];
+
+    tx_data[0] = 0x23;
+    ili9340_transmit(data, ILI9340_CMD_POWER_CTRL_1, tx_data, 1);
+
+    tx_data[0] = 0x10;
+    ili9340_transmit(data, ILI9340_CMD_POWER_CTRL_2, tx_data, 1);
+
+    tx_data[0] = 0x3e;
+    tx_data[1] = 0x28;
+    ili9340_transmit(data, ILI9340_CMD_VCOM_CTRL_1, tx_data, 2);
+
+    tx_data[0] = 0x86;
+    ili9340_transmit(data, ILI9340_CMD_VCOM_CTRL_2, tx_data, 1);
+
+    tx_data[0] =
+    ILI9340_DATA_MEM_ACCESS_CTRL_MV | ILI9340_DATA_MEM_ACCESS_CTRL_BGR;
+    ili9340_transmit(data, ILI9340_CMD_MEM_ACCESS_CTRL, tx_data, 1);
+
+    tx_data[0] = ILI9340_DATA_PIXEL_FORMAT_MCU_18_BIT |
+    ILI9340_DATA_PIXEL_FORMAT_RGB_18_BIT;
+    ili9340_transmit(data, ILI9340_CMD_PIXEL_FORMAT_SET, tx_data, 1);
+
+    tx_data[0] = 0x00;
+    tx_data[1] = 0x18;
+    ili9340_transmit(data, ILI9340_CMD_FRAME_CTRL_NORMAL_MODE, tx_data, 2);
+
+    tx_data[0] = 0x08;
+    tx_data[1] = 0x82;
+    tx_data[2] = 0x27;
+    ili9340_transmit(data, ILI9340_CMD_DISPLAY_FUNCTION_CTRL, tx_data, 3);
+
+    tx_data[0] = 0x01;
+    ili9340_transmit(data, ILI9340_CMD_GAMMA_SET, tx_data, 1);
+
+    tx_data[0] = 0x0F;
+    tx_data[1] = 0x31;
+    tx_data[2] = 0x2B;
+    tx_data[3] = 0x0C;
+    tx_data[4] = 0x0E;
+    tx_data[5] = 0x08;
+    tx_data[6] = 0x4E;
+    tx_data[7] = 0xF1;
+    tx_data[8] = 0x37;
+    tx_data[9] = 0x07;
+    tx_data[10] = 0x10;
+    tx_data[11] = 0x03;
+    tx_data[12] = 0x0E;
+    tx_data[13] = 0x09;
+    tx_data[14] = 0x00;
+    ili9340_transmit(data, ILI9340_CMD_POSITVE_GAMMA_CORRECTION, tx_data, 15);
+
+    tx_data[0] = 0x00;
+    tx_data[1] = 0x0E;
+    tx_data[2] = 0x14;
+    tx_data[3] = 0x03;
+    tx_data[4] = 0x11;
+    tx_data[5] = 0x07;
+    tx_data[6] = 0x31;
+    tx_data[7] = 0xC1;
+    tx_data[8] = 0x48;
+    tx_data[9] = 0x08;
+    tx_data[10] = 0x0F;
+    tx_data[11] = 0x0C;
+    tx_data[12] = 0x31;
+    tx_data[13] = 0x36;
+    tx_data[14] = 0x0F;
+    ili9340_transmit(data, ILI9340_CMD_NEGATIVE_GAMMA_CORRECTION, tx_data, 15);
+}
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c
new file mode 100755
index 0000000..1ed562c
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <stdio.h>
+#include <stdbool.h>
+#include "display_indev.h"
+#include "display.h"
+#include "wasm_export.h"
+
+#define MONITOR_HOR_RES 320
+#define MONITOR_VER_RES 240
+#ifndef MONITOR_ZOOM
+#define MONITOR_ZOOM        1
+#endif
+int lcd_initialized = 0;
+void display_init(void)
+{
+    if (lcd_initialized != 0) {
+        return;
+    }
+    lcd_initialized = 1;
+    xpt2046_init();
+    ili9340_init();
+    display_blanking_off(NULL);
+}
+
+void display_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        int32 color_p_offset)
+{
+    wasm_module_inst_t module_inst = wasm_runtime_get_current_module_inst();
+    if (!wasm_runtime_validate_app_addr(module_inst, color_p_offset, 1))
+        return;
+    lv_color_t * color_p = wasm_runtime_addr_app_to_native(module_inst,
+            color_p_offset);
+
+    u16_t w = x2 - x1 + 1;
+    u16_t h = y2 - y1 + 1;
+    struct display_buffer_descriptor desc;
+
+    desc.buf_size = 3 * w * h;
+    desc.width = w;
+    desc.pitch = w;
+    desc.height = h;
+    display_write(NULL, x1, y1, &desc, (void *) color_p);
+
+    /*lv_flush_ready();*/
+}
+void display_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        lv_color_t color_p)
+{
+
+}
+void display_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p)
+{
+
+}
+
+bool display_input_read(int32 data_p_offset)
+{
+    wasm_module_inst_t module_inst = wasm_runtime_get_current_module_inst();
+    if (!wasm_runtime_validate_app_addr(module_inst, data_p_offset, 1))
+        return false;
+    lv_indev_data_t * data = wasm_runtime_addr_app_to_native(module_inst,
+            data_p_offset);
+
+    return touchscreen_read(data);
+
+}
+
+void display_deinit(void)
+{
+
+}
+
+void display_vdb_write(int32 buf_offset, lv_coord_t buf_w, lv_coord_t x,
+        lv_coord_t y, int32 color_p_offset, lv_opa_t opa)
+{
+    wasm_module_inst_t module_inst = wasm_runtime_get_current_module_inst();
+    if (!wasm_runtime_validate_app_addr(module_inst, color_p_offset, 1))
+        return;
+    lv_color_t *color = wasm_runtime_addr_app_to_native(module_inst,
+            color_p_offset);
+
+    void *buf = wasm_runtime_addr_app_to_native(module_inst, buf_offset);
+
+    u8_t *buf_xy = buf + 3 * x + 3 * y * buf_w;
+    /*
+     if (opa != LV_OPA_COVER) {
+     lv_color_t mix_color;
+
+     mix_color.red = *buf_xy;
+     mix_color.green = *(buf_xy+1);
+     mix_color.blue = *(buf_xy+2);
+     color = lv_color_mix(color, mix_color, opa);
+     }
+     */
+    *buf_xy = color->red;
+    *(buf_xy + 1) = color->green;
+    *(buf_xy + 2) = color->blue;
+}
+
+int time_get_ms()
+{
+    return k_uptime_get_32();
+}
+
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c
new file mode 100755
index 0000000..64e27d7
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "bh_platform.h"
+#include "runtime_lib.h"
+#include "native_interface.h"
+#include "app_manager_export.h"
+#include "board_config.h"
+#include "bh_common.h"
+#include "bh_queue.h"
+#include "bh_thread.h"
+#include "bh_memory.h"
+#include "runtime_sensor.h"
+#include "attr_container.h"
+#include "module_wasm_app.h"
+#include "wasm_export.h"
+
+extern void * thread_timer_check(void *);
+extern void init_sensor_framework();
+extern int aee_host_msg_callback(void *msg, uint16_t msg_len);
+
+#include <zephyr.h>
+#include <uart.h>
+#include <device.h>
+
+int uart_char_cnt = 0;
+
+static void uart_irq_callback(struct device *dev)
+{
+    unsigned char ch;
+    int size = 0;
+
+    while (uart_poll_in(dev, &ch) == 0) {
+        uart_char_cnt++;
+        aee_host_msg_callback(&ch, 1);
+    }
+}
+
+struct device *uart_dev = NULL;
+
+static bool host_init()
+{
+    uart_dev = device_get_binding(HOST_DEVICE_COMM_UART_NAME);
+    if (!uart_dev) {
+        printf("UART: Device driver not found.\n");
+        return false;
+    }
+    uart_irq_rx_enable(uart_dev);
+    uart_irq_callback_set(uart_dev, uart_irq_callback);
+    return true;
+}
+
+int host_send(void * ctx, const char *buf, int size)
+{
+    if (!uart_dev)
+        return 0;
+
+    for (int i = 0; i < size; i++)
+        uart_poll_out(uart_dev, buf[i]);
+
+    return size;
+}
+
+void host_destroy()
+{
+}
+
+host_interface interface = {
+    .init = host_init,
+    .send = host_send,
+    .destroy = host_destroy
+};
+
+timer_ctx_t timer_ctx;
+
+static char global_heap_buf[270 * 1024] = { 0 };
+
+extern void display_init(void);
+
+int iwasm_main()
+{
+    korp_thread tid, tm_tid;
+
+    host_init();
+
+    if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf))
+            != 0) {
+        printf("Init global heap failed.\n");
+        return -1;
+    }
+
+    if (vm_thread_sys_init() != 0) {
+        goto fail1;
+    }
+
+    display_init();
+
+    // timer manager
+    init_wasm_timer();
+
+    // TODO:
+    app_manager_startup(&interface);
+
+fail1:
+    bh_memory_destroy();
+    return -1;
+}
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/main.c 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/main.c
new file mode 100755
index 0000000..2b91f0b
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/main.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "bh_platform.h"
+#include "wasm_assert.h"
+#include "wasm_log.h"
+#include "wasm_platform_log.h"
+#include "wasm_thread.h"
+#include "wasm_export.h"
+#include "wasm_memory.h"
+#include "bh_memory.h"
+extern void display_init(void);
+extern int iwasm_main();
+void main(void)
+{
+    display_init();
+    iwasm_main();
+    for(;;){
+        k_sleep(1000);
+    }
+}
+
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_jlf.h
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_jlf.h
new file mode 100755
index 0000000..5381b72
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_jlf.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __PIN_CONFIG_JLF_H__
+#define __PIN_CONFIG_JLF_H__
+
+#define DT_ILITEK_ILI9340_0_BUS_NAME "SPI_2"
+#define DT_ILITEK_ILI9340_0_SPI_MAX_FREQUENCY 10*1000
+
+#define DT_ILITEK_ILI9340_0_BASE_ADDRESS      1
+#define DT_ILITEK_ILI9340_0_RESET_GPIOS_CONTROLLER "GPIO_0"
+#define DT_ILITEK_ILI9340_0_RESET_GPIOS_PIN 5
+#define DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_CONTROLLER "GPIO_0"
+#define DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_PIN 4
+
+#define XPT2046_SPI_DEVICE_NAME "SPI_2"
+#define XPT2046_SPI_MAX_FREQUENCY 10*1000
+#define XPT2046_CS_GPIO_CONTROLLER "GPIO_0"
+#define XPT2046_CS_GPIO_PIN         6
+
+#define XPT2046_PEN_GPIO_CONTROLLER "GPIO_0"
+#define XPT2046_PEN_GPIO_PIN         7
+
+#define HOST_DEVICE_COMM_UART_NAME "UART_1"
+#endif /* __PIN_CONFIG_JLF_H__ */
diff --git 
a/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_stm32.h
 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_stm32.h
new file mode 100755
index 0000000..0ab295e
--- /dev/null
+++ 
b/scriptsrcs/wamr/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_stm32.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __PIN_CONFIG_STM32_H__
+#define __PIN_CONFIG_STM32_H__
+
+#define DT_ILITEK_ILI9340_0_BUS_NAME "SPI_1"
+#define DT_ILITEK_ILI9340_0_SPI_MAX_FREQUENCY 24*1000*1000
+
+#define DT_ILITEK_ILI9340_0_BASE_ADDRESS      1
+#define DT_ILITEK_ILI9340_0_RESET_GPIOS_CONTROLLER "GPIOC"
+#define DT_ILITEK_ILI9340_0_RESET_GPIOS_PIN    12
+#define DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_CONTROLLER "GPIOC"
+#define DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_PIN 11
+
+#define DT_ILITEK_ILI9340_0_CS_GPIO_CONTROLLER  "GPIOC"
+#define DT_ILITEK_ILI9340_0_CS_GPIO_PIN            10
+
+#define XPT2046_SPI_DEVICE_NAME "SPI_1"
+#define XPT2046_SPI_MAX_FREQUENCY 12*1000*1000
+#define XPT2046_CS_GPIO_CONTROLLER "GPIOD"
+#define XPT2046_CS_GPIO_PIN         0
+
+#define XPT2046_PEN_GPIO_CONTROLLER "GPIOD"
+#define XPT2046_PEN_GPIO_PIN         1
+
+#define HOST_DEVICE_COMM_UART_NAME "UART_6"
+
+#endif /* __PIN_CONFIG_STM32_H__ */
diff --git a/scriptsrcs/wamr/samples/littlevgl/wasm-apps/Makefile_wasm_app 
b/scriptsrcs/wamr/samples/littlevgl/wasm-apps/Makefile_wasm_app
new file mode 100755
index 0000000..225a7a8
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/wasm-apps/Makefile_wasm_app
@@ -0,0 +1,67 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+CC = emcc
+LVGL_DIR = ${shell pwd}
+IWASM_DIR=../../../core/iwasm
+CFLAGS += -O3 \
+         -DLV_CONF_INCLUDE_SIMPLE=1 \
+         -I$(LVGL_DIR)/ \
+         -I$(LVGL_DIR)/lvgl/ \
+         -I$(LVGL_DIR)/lv_drivers/ \
+         -I$(LVGL_DIR)/src/ \
+         -I$(IWASM_DIR)/lib/app-libs/base/ \
+         -I$(IWASM_DIR)/lib/native-interface/ \
+         -I$(IWASM_DIR)/lib/app-libs/extension/sensor \
+         -I$(IWASM_DIR)/lib/app-libs/extension/gui \
+         -I$(IWASM_DIR)/lib/app-libs/extension/connection
+
+SRCS += lvgl/lv_draw/lv_draw_line.c lvgl/lv_draw/lv_draw_rbasic.c
+SRCS += lvgl/lv_draw/lv_draw_img.c lvgl/lv_draw/lv_draw_arc.c
+SRCS += lvgl/lv_draw/lv_draw_rect.c lvgl/lv_draw/lv_draw_triangle.c
+SRCS += lvgl/lv_draw/lv_draw.c lvgl/lv_draw/lv_draw_label.c
+SRCS += lvgl/lv_draw/lv_draw_vbasic.c lvgl/lv_fonts/lv_font_builtin.c
+SRCS += lvgl/lv_fonts/lv_font_dejavu_20.c
+SRCS += lvgl/lv_objx/lv_img.c
+SRCS += lvgl/lv_objx/lv_roller.c lvgl/lv_objx/lv_cb.c lvgl/lv_objx/lv_led.c 
lvgl/lv_objx/lv_cont.c
+SRCS += lvgl/lv_objx/lv_calendar.c lvgl/lv_objx/lv_gauge.c 
lvgl/lv_objx/lv_page.c
+SRCS += lvgl/lv_objx/lv_list.c lvgl/lv_objx/lv_bar.c lvgl/lv_objx/lv_tabview.c
+SRCS += lvgl/lv_objx/lv_mbox.c lvgl/lv_objx/lv_objx_templ.c 
lvgl/lv_objx/lv_sw.c
+SRCS += lvgl/lv_objx/lv_label.c lvgl/lv_objx/lv_slider.c 
lvgl/lv_objx/lv_ddlist.c
+SRCS += lvgl/lv_objx/lv_imgbtn.c lvgl/lv_objx/lv_line.c lvgl/lv_objx/lv_chart.c
+SRCS += lvgl/lv_objx/lv_btnm.c lvgl/lv_objx/lv_arc.c lvgl/lv_objx/lv_preload.c
+SRCS += lvgl/lv_objx/lv_win.c lvgl/lv_objx/lv_lmeter.c lvgl/lv_objx/lv_btn.c
+SRCS += lvgl/lv_objx/lv_ta.c lvgl/lv_misc/lv_log.c lvgl/lv_misc/lv_fs.c
+SRCS += lvgl/lv_misc/lv_task.c lvgl/lv_misc/lv_circ.c lvgl/lv_misc/lv_anim.c
+SRCS += lvgl/lv_misc/lv_color.c lvgl/lv_misc/lv_txt.c lvgl/lv_misc/lv_math.c
+SRCS += lvgl/lv_misc/lv_mem.c lvgl/lv_misc/lv_font.c lvgl/lv_misc/lv_ll.c
+SRCS += lvgl/lv_misc/lv_area.c lvgl/lv_misc/lv_templ.c lvgl/lv_misc/lv_ufs.c
+SRCS += lvgl/lv_misc/lv_area.c lvgl/lv_misc/lv_templ.c lvgl/lv_misc/lv_gc.c
+SRCS += lvgl/lv_hal/lv_hal_tick.c lvgl/lv_hal/lv_hal_indev.c 
lvgl/lv_hal/lv_hal_disp.c
+SRCS += lvgl/lv_themes/lv_theme_mono.c lvgl/lv_themes/lv_theme_templ.c
+SRCS += lvgl/lv_themes/lv_theme_material.c lvgl/lv_themes/lv_theme.c
+SRCS += lvgl/lv_themes/lv_theme_night.c lvgl/lv_themes/lv_theme_zen.c 
lvgl/lv_themes/lv_theme_nemo.c
+SRCS += lvgl/lv_themes/lv_theme_alien.c lvgl/lv_themes/lv_theme_default.c
+SRCS += lvgl/lv_core/lv_group.c lvgl/lv_core/lv_style.c lvgl/lv_core/lv_indev.c
+SRCS += lvgl/lv_core/lv_vdb.c lvgl/lv_core/lv_obj.c lvgl/lv_core/lv_refr.c
+SRCS += $(LVGL_DIR)/src/main.c
+
+# For app size consideration, not all but necessary app libs are included
+SRCS += $(IWASM_DIR)/lib/app-libs/base/timer.c
+all: 
+       @$(CC) $(CFLAGS) $(SRCS) \
+    -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s STACK_OVERFLOW_CHECK=2 \
+    -s TOTAL_MEMORY=65536 -s TOTAL_STACK=2048\
+    -s "EXPORTED_FUNCTIONS=['_on_init', '_on_timer_callback']" \
+    -o ui_app.wasm
diff --git a/scriptsrcs/wamr/samples/littlevgl/wasm-apps/build_wasm_app.sh 
b/scriptsrcs/wamr/samples/littlevgl/wasm-apps/build_wasm_app.sh
new file mode 100755
index 0000000..a88d2a7
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/wasm-apps/build_wasm_app.sh
@@ -0,0 +1,20 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#!/bin/sh
+if [ ! -d "lvgl" ]; then
+    git clone https://github.com/littlevgl/lvgl.git --branch v5.3
+fi
+make -f Makefile_wasm_app
+
diff --git a/scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/display_indev.h 
b/scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/display_indev.h
new file mode 100755
index 0000000..7188bd4
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/display_indev.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef DISPLAY_INDEV_H_
+#define DISPLAY_INDEV_H_
+#include <stdio.h>
+#include <inttypes.h>
+
+#include "lvgl/lv_misc/lv_color.h"
+#include "lvgl/lv_hal/lv_hal_indev.h"
+extern void display_init(void);
+extern void display_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p);
+extern bool display_input_read(lv_indev_data_t * data);
+extern void display_deinit(void);
+extern void display_vdb_write(void *buf, lv_coord_t buf_w, lv_coord_t x,
+        lv_coord_t y, lv_color_t *color, lv_opa_t opa);
+extern uint32_t time_get_ms(void);
+
+#endif
diff --git a/scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/lv_conf.h 
b/scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/lv_conf.h
new file mode 100755
index 0000000..76533a8
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/lv_conf.h
@@ -0,0 +1,389 @@
+/**
+ * @file lv_conf.h
+ *
+ */
+
+#if 1 /*Set it to "1" to enable content*/
+
+#ifndef LV_CONF_H
+#define LV_CONF_H
+/*===================
+ Dynamic memory
+ *===================*/
+
+/* Memory size which will be used by the library
+ * to store the graphical objects and other data */
+#define LV_MEM_CUSTOM      1                /*1: use custom malloc/free, 0: 
use the built-in lv_mem_alloc/lv_mem_free*/
+#if LV_MEM_CUSTOM == 0
+#  define LV_MEM_SIZE    (64U * 1024U)        /*Size memory used by 
`lv_mem_alloc` in bytes (>= 2kB)*/
+#  define LV_MEM_ATTR                         /*Complier prefix for big array 
declaration*/
+#  define LV_MEM_ADR          0               /*Set an address for memory pool 
instead of allocation it as an array. Can be in external SRAM too.*/
+#  define LV_MEM_AUTO_DEFRAG  1               /*Automatically defrag on free*/
+#else       /*LV_MEM_CUSTOM*/
+#  define LV_MEM_CUSTOM_INCLUDE <stdlib.h>   /*Header for the dynamic memory 
function*/
+#  define LV_MEM_CUSTOM_ALLOC   malloc       /*Wrapper to malloc*/
+#  define LV_MEM_CUSTOM_FREE    free         /*Wrapper to free*/
+#endif     /*LV_MEM_CUSTOM*/
+
+/* Garbage Collector settings
+ * Used if lvgl is binded to higher language and the memory is managed by that 
language */
+#define LV_ENABLE_GC 0
+#if LV_ENABLE_GC != 0
+#  define LV_MEM_CUSTOM_REALLOC   your_realloc           /*Wrapper to realloc*/
+#  define LV_MEM_CUSTOM_GET_SIZE  your_mem_get_size      /*Wrapper to 
lv_mem_get_size*/
+#  define LV_GC_INCLUDE "gc.h"                           /*Include Garbage 
Collector related things*/
+#endif /* LV_ENABLE_GC */
+
+/*===================
+ Graphical settings
+ *===================*/
+
+/* Horizontal and vertical resolution of the library.*/
+#define LV_HOR_RES          (320)
+#define LV_VER_RES          (240)
+
+/* Dot Per Inch: used to initialize default sizes. E.g. a button with width = 
LV_DPI / 2 -> half inch wide
+ * (Not so important, you can adjust it to modify default sizes and spaces)*/
+#define LV_DPI              100
+
+/* Enable anti-aliasing (lines, and radiuses will be smoothed) */
+#define LV_ANTIALIAS        0      /*1: Enable anti-aliasing*/
+
+/*Screen refresh period in milliseconds*/
+#define LV_REFR_PERIOD      30
+
+/*-----------------
+ *  VDB settings
+ *----------------*/
+
+/* VDB (Virtual Display Buffer) is an internal graphics buffer.
+ * The GUI will be drawn into this buffer first and then
+ * the buffer will be passed to your `disp_drv.disp_flush` function to
+ * copy it to your frame buffer.
+ * VDB is required for: buffered drawing, opacity, anti-aliasing and shadows
+ * Learn more: https://docs.littlevgl.com/#Drawing*/
+
+/* Size of the VDB in pixels. Typical size: ~1/10 screen. Must be >= LV_HOR_RES
+ * Setting it to 0 will disable VDB and `disp_drv.disp_fill` and 
`disp_drv.disp_map` functions
+ * will be called to draw to the frame buffer directly*/
+#define LV_VDB_SIZE         ((LV_VER_RES * LV_HOR_RES) / 10)
+
+/* Bit-per-pixel of VDB. Useful for monochrome or non-standard color format 
displays.
+ * Special formats are handled with `disp_drv.vdb_wr`)*/
+#define LV_VDB_PX_BPP       LV_COLOR_SIZE       /*LV_COLOR_SIZE comes from 
LV_COLOR_DEPTH below to set 8, 16 or 32 bit pixel size automatically */
+
+/* Place VDB to a specific address (e.g. in external RAM)
+ * 0: allocate automatically into RAM
+ * LV_VDB_ADR_INV: to replace it later with `lv_vdb_set_adr()`*/
+#define LV_VDB_ADR          0
+
+/* Use two Virtual Display buffers (VDB) to parallelize rendering and flushing
+ * The flushing should use DMA to write the frame buffer in the background */
+#define LV_VDB_DOUBLE       0
+
+/* Place VDB2 to a specific address (e.g. in external RAM)
+ * 0: allocate automatically into RAM
+ * LV_VDB_ADR_INV: to replace it later with `lv_vdb_set_adr()`*/
+#define LV_VDB2_ADR         0
+
+/* Using true double buffering in `disp_drv.disp_flush` you will always get 
the image of the whole screen.
+ * Your only task is to set the rendered image (`color_p` parameter) as frame 
buffer address or send it to your display.
+ * The best if you do in the blank period of you display to avoid tearing 
effect.
+ * Requires:
+ * - LV_VDB_SIZE = LV_HOR_RES * LV_VER_RES
+ * - LV_VDB_DOUBLE = 1
+ */
+#define LV_VDB_TRUE_DOUBLE_BUFFERED 0
+
+/*=================
+ Misc. setting
+ *=================*/
+
+/*Input device settings*/
+#define LV_INDEV_READ_PERIOD            50                     /*Input device 
read period in milliseconds*/
+#define LV_INDEV_POINT_MARKER           0                      /*Mark the 
pressed points  (required: USE_LV_REAL_DRAW = 1)*/
+#define LV_INDEV_DRAG_LIMIT             10                     /*Drag 
threshold in pixels */
+#define LV_INDEV_DRAG_THROW             20                     /*Drag throw 
slow-down in [%]. Greater value means faster slow-down */
+#define LV_INDEV_LONG_PRESS_TIME        400                    /*Long press 
time in milliseconds*/
+#define LV_INDEV_LONG_PRESS_REP_TIME    100                    /*Repeated 
trigger period in long press [ms] */
+
+/*Color settings*/
+#define LV_COLOR_DEPTH     32                     /*Color depth: 1/8/16/32*/
+#define LV_COLOR_16_SWAP   0                      /*Swap the 2 bytes of RGB565 
color. Useful if the display has a 8 bit interface (e.g. SPI)*/
+#define LV_COLOR_SCREEN_TRANSP        0           /*1: Enable screen 
transparency. Useful for OSD or other overlapping GUIs. Requires ARGB8888 
colors*/
+#define LV_COLOR_TRANSP    LV_COLOR_LIME          /*Images pixels with this 
color will not be drawn (with chroma keying)*/
+
+/*Text settings*/
+#define LV_TXT_UTF8             1                /*Enable UTF-8 coded Unicode 
character usage */
+#define LV_TXT_BREAK_CHARS     " ,.;:-_"         /*Can break texts on these 
chars*/
+#define LV_TXT_LINE_BREAK_LONG_LEN 12 /* If a character is at least this long, 
will break wherever "prettiest" */
+#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 /* Minimum number of characters 
of a word to put on a line before a break */
+#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 1 /* Minimum number of characters 
of a word to put on a line after a break */
+
+/*Feature usage*/
+#define USE_LV_ANIMATION        1               /*1: Enable all animations*/
+#define USE_LV_SHADOW           1               /*1: Enable shadows*/
+#define USE_LV_GROUP            1               /*1: Enable object groups (for 
keyboards)*/
+#define USE_LV_GPU              0               /*1: Enable GPU interface*/
+#define USE_LV_REAL_DRAW        1               /*1: Enable function which 
draw directly to the frame buffer instead of VDB (required if LV_VDB_SIZE = 0)*/
+#define USE_LV_FILESYSTEM       0               /*1: Enable file system (might 
be required for images*/
+#define USE_LV_MULTI_LANG       0               /* Number of languages for 
labels to store (0: to disable this feature)*/
+
+/*Compiler settings*/
+#define LV_ATTRIBUTE_TICK_INC                   /* Define a custom attribute 
to `lv_tick_inc` function */
+#define LV_ATTRIBUTE_TASK_HANDLER               /* Define a custom attribute 
to `lv_task_handler` function */
+#define LV_COMPILER_VLA_SUPPORTED            1  /* 1: Variable length array is 
supported*/
+#define LV_COMPILER_NON_CONST_INIT_SUPPORTED 1  /* 1: Initialization with non 
constant values are supported */
+
+/*HAL settings*/
+#define LV_TICK_CUSTOM     1                        /*1: use a custom tick 
source (removing the need to manually update the tick with `lv_tick_inc`) */
+#if LV_TICK_CUSTOM == 1
+#define LV_TICK_CUSTOM_INCLUDE  "system_header.h"         /*Header for the sys 
time function*/
+#define LV_TICK_CUSTOM_SYS_TIME_EXPR (time_get_ms())     /*Expression 
evaluating to current systime in ms*/
+#endif     /*LV_TICK_CUSTOM*/
+
+/*Log settings*/
+#define USE_LV_LOG      1   /*Enable/disable the log module*/
+#if USE_LV_LOG
+/* How important log should be added:
+ * LV_LOG_LEVEL_TRACE       A lot of logs to give detailed information
+ * LV_LOG_LEVEL_INFO        Log important events
+ * LV_LOG_LEVEL_WARN        Log if something unwanted happened but didn't 
caused problem
+ * LV_LOG_LEVEL_ERROR       Only critical issue, when the system may fail
+ */
+#  define LV_LOG_LEVEL    LV_LOG_LEVEL_WARN
+/* 1: Print the log with 'printf'; 0: user need to register a callback*/
+
+#  define LV_LOG_PRINTF   0
+#endif  /*USE_LV_LOG*/
+
+/*================
+ *  THEME USAGE
+ *================*/
+#define LV_THEME_LIVE_UPDATE    1       /*1: Allow theme switching at run 
time. Uses 8..10 kB of RAM*/
+
+#define USE_LV_THEME_TEMPL      0       /*Just for test*/
+#define USE_LV_THEME_DEFAULT    1       /*Built mainly from the built-in 
styles. Consumes very few RAM*/
+#define USE_LV_THEME_ALIEN      0       /*Dark futuristic theme*/
+#define USE_LV_THEME_NIGHT      0       /*Dark elegant theme*/
+#define USE_LV_THEME_MONO       0       /*Mono color theme for monochrome 
displays*/
+#define USE_LV_THEME_MATERIAL   0       /*Flat theme with bold colors and 
light shadows*/
+#define USE_LV_THEME_ZEN        0       /*Peaceful, mainly light theme */
+#define USE_LV_THEME_NEMO       0       /*Water-like theme based on the movie 
"Finding Nemo"*/
+
+/*==================
+ *    FONT USAGE
+ *===================*/
+
+/* More info about fonts: https://docs.littlevgl.com/#Fonts
+ * To enable a built-in font use 1,2,4 or 8 values
+ * which will determine the bit-per-pixel. Higher value means smoother fonts */
+#define USE_LV_FONT_DEJAVU_10              0
+#define USE_LV_FONT_DEJAVU_10_LATIN_SUP    0
+#define USE_LV_FONT_DEJAVU_10_CYRILLIC     0
+#define USE_LV_FONT_SYMBOL_10              0
+
+#define USE_LV_FONT_DEJAVU_20              4
+#define USE_LV_FONT_DEJAVU_20_LATIN_SUP    0
+#define USE_LV_FONT_DEJAVU_20_CYRILLIC     0
+#define USE_LV_FONT_SYMBOL_20              0
+
+#define USE_LV_FONT_DEJAVU_30              0
+#define USE_LV_FONT_DEJAVU_30_LATIN_SUP    0
+#define USE_LV_FONT_DEJAVU_30_CYRILLIC     0
+#define USE_LV_FONT_SYMBOL_30              0
+
+#define USE_LV_FONT_DEJAVU_40              0
+#define USE_LV_FONT_DEJAVU_40_LATIN_SUP    0
+#define USE_LV_FONT_DEJAVU_40_CYRILLIC     0
+#define USE_LV_FONT_SYMBOL_40              0
+
+#define USE_LV_FONT_MONOSPACE_8            1
+
+/* Optionally declare your custom fonts here.
+ * You can use these fonts as default font too
+ * and they will be available globally. E.g.
+ * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \
+ *                                LV_FONT_DECLARE(my_font_2) \
+ */
+#define LV_FONT_CUSTOM_DECLARE
+
+#define LV_FONT_DEFAULT        &lv_font_dejavu_20     /*Always set a default 
font from the built-in fonts*/
+
+/*===================
+ *  LV_OBJ SETTINGS
+ *==================*/
+#define LV_OBJ_FREE_NUM_TYPE    uint32_t    /*Type of free number attribute 
(comment out disable free number)*/
+#define LV_OBJ_FREE_PTR         1           /*Enable the free pointer 
attribute*/
+#define LV_OBJ_REALIGN          1           /*Enable `lv_obj_realaign()` based 
on `lv_obj_align()` parameters*/
+
+/*==================
+ *  LV OBJ X USAGE
+ *================*/
+/*
+ * Documentation of the object types: https://docs.littlevgl.com/#Object-types
+ */
+
+/*****************
+ * Simple object
+ *****************/
+
+/*Label (dependencies: -*/
+#define USE_LV_LABEL    1
+#if USE_LV_LABEL != 0
+#  define LV_LABEL_SCROLL_SPEED       25     /*Hor, or ver. scroll speed 
[px/sec] in 'LV_LABEL_LONG_SCROLL/ROLL' mode*/
+#endif
+
+/*Image (dependencies: lv_label*/
+#define USE_LV_IMG      1
+#if USE_LV_IMG != 0
+#  define LV_IMG_CF_INDEXED   1       /*Enable indexed (palette) images*/
+#  define LV_IMG_CF_ALPHA     1       /*Enable alpha indexed images*/
+#endif
+
+/*Line (dependencies: -*/
+#define USE_LV_LINE     1
+
+/*Arc (dependencies: -)*/
+#define USE_LV_ARC      1
+
+/*******************
+ * Container objects
+ *******************/
+
+/*Container (dependencies: -*/
+#define USE_LV_CONT     1
+
+/*Page (dependencies: lv_cont)*/
+#define USE_LV_PAGE     1
+
+/*Window (dependencies: lv_cont, lv_btn, lv_label, lv_img, lv_page)*/
+#define USE_LV_WIN      1
+
+/*Tab (dependencies: lv_page, lv_btnm)*/
+#define USE_LV_TABVIEW      1
+#  if USE_LV_TABVIEW != 0
+#  define LV_TABVIEW_ANIM_TIME    300     /*Time of slide animation [ms] (0: 
no animation)*/
+#endif
+
+/*Tileview (dependencies: lv_page) */
+#define USE_LV_TILEVIEW     1
+#if USE_LV_TILEVIEW
+#  define LV_TILEVIEW_ANIM_TIME   300     /*Time of slide animation [ms] (0: 
no animation)*/
+#endif
+
+/*************************
+ * Data visualizer objects
+ *************************/
+
+/*Bar (dependencies: -)*/
+#define USE_LV_BAR      1
+
+/*Line meter (dependencies: *;)*/
+#define USE_LV_LMETER   1
+
+/*Gauge (dependencies:lv_bar, lv_lmeter)*/
+#define USE_LV_GAUGE    1
+
+/*Chart (dependencies: -)*/
+#define USE_LV_CHART    1
+
+/*Table (dependencies: lv_label)*/
+#define USE_LV_TABLE    1
+#if USE_LV_TABLE
+#  define LV_TABLE_COL_MAX    12
+#endif
+
+/*LED (dependencies: -)*/
+#define USE_LV_LED      1
+
+/*Message box (dependencies: lv_rect, lv_btnm, lv_label)*/
+#define USE_LV_MBOX     1
+
+/*Text area (dependencies: lv_label, lv_page)*/
+#define USE_LV_TA       1
+#if USE_LV_TA != 0
+#  define LV_TA_CURSOR_BLINK_TIME 400     /*ms*/
+#  define LV_TA_PWD_SHOW_TIME     1500    /*ms*/
+#endif
+
+/*Spinbox (dependencies: lv_ta)*/
+#define USE_LV_SPINBOX       1
+
+/*Calendar (dependencies: -)*/
+#define USE_LV_CALENDAR 1
+
+/*Preload (dependencies: lv_arc)*/
+#define USE_LV_PRELOAD      1
+#if USE_LV_PRELOAD != 0
+#  define LV_PRELOAD_DEF_ARC_LENGTH   60      /*[deg]*/
+#  define LV_PRELOAD_DEF_SPIN_TIME    1000    /*[ms]*/
+#  define LV_PRELOAD_DEF_ANIM         LV_PRELOAD_TYPE_SPINNING_ARC
+#endif
+
+/*Canvas (dependencies: lv_img)*/
+#define USE_LV_CANVAS       1
+/*************************
+ * User input objects
+ *************************/
+
+/*Button (dependencies: lv_cont*/
+#define USE_LV_BTN      1
+#if USE_LV_BTN != 0
+#  define LV_BTN_INK_EFFECT   1       /*Enable button-state animations - draw 
a circle on click (dependencies: USE_LV_ANIMATION)*/
+#endif
+
+/*Image Button (dependencies: lv_btn*/
+#define USE_LV_IMGBTN   1
+#if USE_LV_IMGBTN
+#  define LV_IMGBTN_TILED 0           /*1: The imgbtn requires left, mid and 
right parts and the width can be set freely*/
+#endif
+
+/*Button matrix (dependencies: -)*/
+#define USE_LV_BTNM     1
+
+/*Keyboard (dependencies: lv_btnm)*/
+#define USE_LV_KB       1
+
+/*Check box (dependencies: lv_btn, lv_label)*/
+#define USE_LV_CB       1
+
+/*List (dependencies: lv_page, lv_btn, lv_label, (lv_img optionally for icons 
))*/
+#define USE_LV_LIST     1
+#if USE_LV_LIST != 0
+#  define LV_LIST_FOCUS_TIME  100 /*Default animation time of focusing to a 
list element [ms] (0: no animation)  */
+#endif
+
+/*Drop down list (dependencies: lv_page, lv_label, lv_symbol_def.h)*/
+#define USE_LV_DDLIST    1
+#if USE_LV_DDLIST != 0
+#  define LV_DDLIST_ANIM_TIME     200     /*Open and close default animation 
time [ms] (0: no animation)*/
+#endif
+
+/*Roller (dependencies: lv_ddlist)*/
+#define USE_LV_ROLLER    1
+#if USE_LV_ROLLER != 0
+#  define LV_ROLLER_ANIM_TIME     200     /*Focus animation time [ms] (0: no 
animation)*/
+#endif
+
+/*Slider (dependencies: lv_bar)*/
+#define USE_LV_SLIDER    1
+
+/*Switch (dependencies: lv_slider)*/
+#define USE_LV_SW       1
+
+/*************************
+ * Non-user section
+ *************************/
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)    /* Disable 
warnings for Visual Studio*/
+#  define _CRT_SECURE_NO_WARNINGS
+#endif
+
+/*--END OF LV_CONF_H--*/
+
+/*Be sure every define has a default value*/
+#include "lvgl/lv_conf_checker.h"
+
+#endif /*LV_CONF_H*/
+
+#endif /*End of "Content enable"*/
diff --git a/scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/main.c 
b/scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/main.c
new file mode 100755
index 0000000..7bb50c2
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/main.c
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file main
+ *
+ */
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stdlib.h>
+//#include <unistd.h>
+#include <inttypes.h>
+#include "lvgl/lvgl.h"
+#include "display_indev.h"
+#include "wasm_app.h"
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+static void hal_init(void);
+//static int tick_thread(void * data);
+//static void memory_monitor(void * param);
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**********************
+ *      MACROS
+ **********************/
+
+/**********************
+ *   GLOBAL FUNCTIONS
+ **********************/
+uint32_t count = 0;
+char count_str[11] = { 0 };
+lv_obj_t *hello_world_label;
+lv_obj_t *count_label;
+lv_obj_t * btn1;
+
+lv_obj_t * label_count1;
+int label_count1_value = 0;
+char label_count1_str[11] = { 0 };
+
+void timer1_update(user_timer_t timer1)
+{
+    if ((count % 100) == 0) {
+        sprintf(count_str, "%d", count / 100);
+        lv_label_set_text(count_label, count_str);
+    }
+    lv_task_handler();
+    ++count;
+}
+
+
+static lv_res_t btn_rel_action(lv_obj_t * btn)
+{
+    label_count1_value++;
+    sprintf(label_count1_str, "%d", label_count1_value);
+    lv_label_set_text(label_count1, label_count1_str);
+    return LV_RES_OK;
+}
+
+
+void on_init()
+{
+    /*Initialize LittlevGL*/
+    lv_init();
+
+    /*Initialize the HAL (display, input devices, tick) for LittlevGL*/
+    hal_init();
+
+    hello_world_label = lv_label_create(lv_scr_act(), NULL);
+    lv_label_set_text(hello_world_label, "Hello world!");
+    lv_obj_align(hello_world_label, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
+
+    count_label = lv_label_create(lv_scr_act(), NULL);
+    lv_obj_align(count_label, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);
+
+    btn1 = lv_btn_create(lv_scr_act(), NULL); /*Create a button on the 
currently loaded screen*/
+    lv_btn_set_action(btn1, LV_BTN_ACTION_CLICK, btn_rel_action); /*Set 
function to be called when the button is released*/
+    lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, 20); /*Align below the label*/
+
+    /*Create a label on the button*/
+    lv_obj_t * btn_label = lv_label_create(btn1, NULL);
+    lv_label_set_text(btn_label, "Click ++");
+
+    label_count1 = lv_label_create(lv_scr_act(), NULL);
+    lv_label_set_text(label_count1, "0");
+    lv_obj_align(label_count1, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+
+    /* set up a timer */
+    user_timer_t timer;
+    timer = api_timer_create(10, true, false, timer1_update);
+    api_timer_restart(timer, 10);
+}
+
+/**********************
+ *   STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the Hardware Abstraction Layer (HAL) for the Littlev graphics 
library
+ */
+void display_flush_wrapper(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p)
+{
+    display_flush(x1, y1, x2, y2, color_p);
+    lv_flush_ready();
+}
+void display_vdb_write_wrapper(uint8_t *buf, lv_coord_t buf_w, lv_coord_t x,
+        lv_coord_t y, lv_color_t color, lv_opa_t opa)
+{
+    display_vdb_write(buf, buf_w, x, y, &color, opa);
+}
+extern void display_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        lv_color_t color_p);
+extern void display_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
+        const lv_color_t * color_p);
+static void hal_init(void)
+{
+    /* Add a display*/
+    lv_disp_drv_t disp_drv;
+    lv_disp_drv_init(&disp_drv); /*Basic initialization*/
+    disp_drv.disp_flush = display_flush_wrapper; /*Used when `LV_VDB_SIZE != 
0` in lv_conf.h (buffered drawing)*/
+    disp_drv.disp_fill = display_fill; /*Used when `LV_VDB_SIZE == 0` in 
lv_conf.h (unbuffered drawing)*/
+    disp_drv.disp_map = display_map; /*Used when `LV_VDB_SIZE == 0` in 
lv_conf.h (unbuffered drawing)*/
+#if LV_VDB_SIZE != 0
+    disp_drv.vdb_wr = display_vdb_write_wrapper;
+#endif
+    lv_disp_drv_register(&disp_drv);
+
+    /* Add the mouse as input device
+     * Use the 'mouse' driver which reads the PC's mouse*/
+//    mouse_init();
+    lv_indev_drv_t indev_drv;
+    lv_indev_drv_init(&indev_drv); /*Basic initialization*/
+    indev_drv.type = LV_INDEV_TYPE_POINTER;
+    indev_drv.read = display_input_read; /*This function will be called 
periodically (by the library) to get the mouse position and state*/
+    lv_indev_t * mouse_indev = lv_indev_drv_register(&indev_drv);
+
+}
+
diff --git a/scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/system_header.h 
b/scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/system_header.h
new file mode 100755
index 0000000..5333432
--- /dev/null
+++ b/scriptsrcs/wamr/samples/littlevgl/wasm-apps/src/system_header.h
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+
+uint32_t time_get_ms(void);
diff --git a/scriptsrcs/wamr/samples/simple/CMakeLists.txt 
b/scriptsrcs/wamr/samples/simple/CMakeLists.txt
new file mode 100755
index 0000000..e5c4e18
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/CMakeLists.txt
@@ -0,0 +1,107 @@
+cmake_minimum_required (VERSION 2.8)
+
+project (simple)
+
+set (TARGET_PLATFORM "linux")
+
+# Reset default linker flags
+set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
+set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
+
+# Enable repl mode if want to test spec cases
+# add_definitions(-DWASM_ENABLE_REPL)
+
+if (NOT ("$ENV{VALGRIND}" STREQUAL "YES"))
+  add_definitions(-DNVALGRIND)
+endif ()
+
+# Currently build as 64-bit by default.
+set (BUILD_AS_64BIT_SUPPORT "YES")
+
+if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES")
+  # Add -fPIC flag if build as 64-bit
+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+  set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} 
-fPIC")
+else ()
+  add_definitions (-m32)
+  set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32")
+  set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32")
+endif ()
+endif ()
+
+if (NOT CMAKE_BUILD_TYPE)
+SET(CMAKE_BUILD_TYPE Debug)
+endif (NOT CMAKE_BUILD_TYPE)
+message ("CMAKE_BUILD_TYPE = " ${CMAKE_BUILD_TYPE})
+
+if (NOT PLATFORM)
+SET(PLATFORM linux)
+endif (NOT PLATFORM)
+message ("PLATFORM = " ${PLATFORM})
+
+set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")
+set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -Wall 
-Wno-unused-parameter -Wno-pedantic")
+
+set(WAMR_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
+set(WASM_DIR  ${WAMR_ROOT_DIR}/core/iwasm)
+set(APP_MGR_DIR ${WAMR_ROOT_DIR}/core/app-mgr)
+set(SHARED_DIR ${WAMR_ROOT_DIR}/core/shared-lib)
+
+set (LV_DRIVERS_DIR ${WASM_DIR}/lib/3rdparty/lv_drivers)
+set (LVGL_DIR ${WASM_DIR}/lib/3rdparty/lvgl)
+
+file(GLOB_RECURSE LV_DRIVERS_SOURCES "${LV_DRIVERS_DIR}/*.c" )
+
+enable_language (ASM)
+
+include (${WASM_DIR}/runtime/platform/${TARGET_PLATFORM}/platform.cmake)
+include (${WASM_DIR}/runtime/utils/utils.cmake)
+include (${WASM_DIR}/runtime/vmcore-wasm/vmcore.cmake)
+include (${WASM_DIR}/lib/native/base/wasm_lib_base.cmake)
+include (${WASM_DIR}/lib/native/libc/wasm_libc.cmake)
+include (${WASM_DIR}/lib/native/extension/sensor/wasm_lib_sensor.cmake)
+include (${WASM_DIR}/lib/native/extension/gui/wasm_lib_gui.cmake)
+include (${WASM_DIR}/lib/native/extension/connection/wasm_lib_conn.cmake)
+include 
(${WASM_DIR}/lib/native/extension/connection/${TARGET_PLATFORM}/connection_mgr.cmake)
+include (${WASM_DIR}/lib/native-interface/native_interface.cmake)
+include (${APP_MGR_DIR}/app-manager/app_mgr.cmake)
+include (${APP_MGR_DIR}/app-mgr-shared/app_mgr_shared.cmake)
+include (${SHARED_DIR}/platform/${TARGET_PLATFORM}/shared_platform.cmake)
+include (${SHARED_DIR}/utils/shared_utils.cmake)
+include (${SHARED_DIR}/mem-alloc/mem_alloc.cmake)
+include (${SHARED_DIR}/coap/lib_coap.cmake)
+
+
+include_directories(${SHARED_DIR}/include)
+include_directories(${CMAKE_CURRENT_LIST_DIR}/src)
+
+#Note: uncomment below line to use UART mode
+#add_definitions (-DCONNECTION_UART)
+add_definitions (-DWASM_ENABLE_BASE_LIB)
+add_definitions (-Dattr_container_malloc=bh_malloc)
+add_definitions (-Dattr_container_free=bh_free)
+add_definitions (-DLV_CONF_INCLUDE_SIMPLE)
+
+add_library (vmlib
+             ${WASM_PLATFORM_LIB_SOURCE}
+             ${WASM_UTILS_LIB_SOURCE}
+             ${VMCORE_LIB_SOURCE}
+             ${WASM_LIBC_SOURCE}
+             ${APP_MGR_SOURCE}
+             ${WASM_LIB_BASE_SOURCE}
+             ${WASM_LIB_EXT_SOURCE}
+             ${WASM_LIB_SENSOR_SOURCE}
+             ${WASM_LIB_GUI_SOURCE}
+             ${WASM_LIB_CONN_SOURCE}
+             ${WASM_LIB_CONN_MGR_SOURCE}
+             ${PLATFORM_SHARED_SOURCE}
+             ${UTILS_SHARED_SOURCE}
+             ${MEM_ALLOC_SHARED_SOURCE}
+             ${NATIVE_INTERFACE_SOURCE}
+            )
+
+    add_executable (simple src/main.c src/iwasm_main.c src/ext_lib_export.c 
${LV_DRIVERS_SOURCES})
+
+target_link_libraries (simple vmlib -lm -ldl -lpthread -lSDL2)
+
diff --git a/scriptsrcs/wamr/samples/simple/README.md 
b/scriptsrcs/wamr/samples/simple/README.md
new file mode 100755
index 0000000..2f8626c
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/README.md
@@ -0,0 +1,357 @@
+Introduction
+==============
+This project builds out both host tools running on the host side, and an 
application running on the device side. The device application consists of 
iwasm, application library, application manager, timers and sensors support. 
The device runs on Linux OS and interacts with host tools.
+
+It demonstrates an end to end scenario, the wasm applications life cycle 
management and communication programming models.
+
+Directory structure
+------------------------------
+```
+simple/
+├── build.sh
+├── CMakeLists.txt
+├── README.md
+├── src
+│   ├── ext_lib_export.c
+│   ├── iwasm_main.c
+│   └── main.c
+└── wasm-apps
+    ├── connection.c
+    ├── event_publisher.c
+    ├── event_subscriber.c
+    ├── gui.c
+    ├── request_handler.c
+    ├── request_sender.c
+    ├── sensor.c
+    └── timer.c
+```
+
+- build.sh<br/>
+  The script to build all binaries.
+- CMakeLists.txt<br/>
+  CMake file used to build the simple application.
+- README.md<br/>
+  The file you are reading currently.
+- src/ext_lib_export.c<br/>
+  This file is used to export native APIs. See the `The mechanism of exporting 
Native API to WASM application` section in WAMR README.md for detail.
+- src/iwam_main.c<br/>
+  This file is the implementation by platform integrator. It implements the 
interfaces that enable the application manager communicating with the host 
side. See `{WAMR_ROOT}/core/app-mgr/app-mgr-shared/app_manager_export.h` for 
the definition of the host interface.
+```
+/* Interfaces of host communication */
+typedef struct host_interface {
+    host_init_func init;
+    host_send_fun send;
+    host_destroy_fun destroy;
+} host_interface;
+```
+```
+host_interface interface = {
+    .init = host_init,
+    .send = host_send,
+    .destroy = host_destroy
+};
+```
+This interface is passed to application manager by calling
+```
+app_manager_startup(&interface);
+```
+
+The `host_init_func` is called when the application manager starts up. And 
`host_send_fun` is called by the application manager to send data to the host.
+>**Note:** Currently application manager keeps running and never exit, 
`host_destroy_fun` has no chance to get executed. So you can leave this API 
implementation empty.
+
+- src/main.c<br/>
+  The main file.
+- wasm-apps<br/>
+  Source files of sample wasm applications.
+
+Configure 32 bit or 64 bit build
+==============
+On 64 bit operating system, there is an option to build 32 bit or 64 bit 
binaries. In file `CMakeLists.txt`, modify the line:
+`set (BUILD_AS_64BIT_SUPPORT "YES")`
+ where `YES` means 64 bit build while `NO` means 32 bit build.
+
+Install required SDK and libraries
+==============
+- 32 bit SDL(simple directmedia layer) (Note: only necessary when 
`BUILD_AS_64BIT_SUPPORT` is set to `NO`)
+Use apt-get:
+    `sudo apt-get install libsdl2-dev:i386`
+Or download source from www.libsdl.org:
+```
+./configure C_FLAGS=-m32 CXX_FLAGS=-m32 LD_FLAGS=-m32
+make
+sudo make install
+```
+- 64 bit SDL(simple directmedia layer) (Note: only necessary when 
`BUILD_AS_64BIT_SUPPORT` is set to `YES`)
+Use apt-get:
+    `sudo apt-get install libsdl2-dev`
+Or download source from www.libsdl.org:
+```
+./configure
+make
+sudo make install
+```
+
+- Install EMSDK
+```
+    https://emscripten.org/docs/tools_reference/emsdk.html
+```
+
+Build all binaries
+==============
+Execute the build.sh script then all binaries including wasm application files 
would be generated in 'out' directory.
+`./build.sh`
+
+Out directory structure
+------------------------------
+```
+out/
+├── host_tool
+├── simple
+└── wasm-apps
+    ├── connection.wasm
+    ├── event_publisher.wasm
+    ├── event_subscriber.wasm
+    ├── gui.wasm
+    ├── request_handler.wasm
+    ├── request_sender.wasm
+    ├── sensor.wasm
+    └── timer.wasm
+```
+
+- host_tool:
+  A small testing tool to interact with WAMR. See the usage of this tool by 
executing "./host_tool -h".
+  `./host_tool -h`
+
+- simple:
+  A simple testing tool running on the host side that interact with WAMR. It 
is used to install, uninstall and query WASM applications in WAMR, and send 
request or subscribe event, etc. See the usage of this application by executing 
"./simple -h".
+  `./simple -h`
+>****Note:**** The connection between simple and host_tool is TCP by default 
and is what this guide uses. The simple application works as a server and the 
host_tool works as a client. You can also use UART connection. To achieve this 
you have to uncomment the below line in CMakeLists.txt and rebuild. You have to 
set up a UART hardware connection between 2 machines one of which runs the 
host_tool and the other runs the simple application. See the help of host_tool 
and the simple application to know how to specify UART device parameters.<br/>
+`#add_definitions (-DCONNECTION_UART)`
+
+- wasm-apps:
+  Sample wasm applications that demonstrate all APIs of the WAMR programming 
model. The source codes are in the wasm-apps directory under the root of this 
project.
+    + connection.wasm<br/>
+    This application shows the connection programming model. It connects to a 
TCP server on 127.0.0.1:7777 and periodically sends message to it.
+    + event_publisher.wasm<br/>
+    This application shows the sub/pub programming model. The pub application 
publishes the event "alert/overheat" by calling api_publish_event() API. The 
subscriber could be host_tool or other wasm application.
+    + event_subscriber.wasm<br/>
+    This application shows the sub/pub programming model. The sub application 
subscribes the "alert/overheat" event by calling api_subscribe_event() API so 
that it is able to receive the event once generated and published by the pub 
application. To make the process clear to interpret, the sub application dumps 
the event when receiving it.
+    + gui.wasm<br/>
+    This application shows the built-in 2D graphical user interface API with 
which various widgets could be created.
+    + request_handler.wasm<br/>
+    This application shows the request/response programming model. The request 
handler application registers 2 resources(/url1 and /url2) by calling 
api_register_resource_handler() API. The request sender could be host_tool or 
other wasm application.
+    + request_sender.wasm<br/>
+    This application shows the request/response programming model. The sender 
application sends 2 requests, one is "/app/request_handler/url1" and the other 
is "url1". The former is an accurate request which explicitly specifies the 
name of request handler application in the middle of the URL and the later is a 
general request.
+    + sensor.wasm<br/>
+    This application shows the sensor programming model. It opens a test 
sensor and configures the sensor event generating interval to 1 second. To make 
the process clear to interpret, the application dumps the sensor event when 
receiving it.
+    + timer.wasm<br/>
+    This application shows the timer programming model. It creates a periodic 
timer that prints the current expiry number in every second.
+
+Run the scenario
+==========================
+- Enter the out directory<br/>
+```
+$ cd ./out/
+```
+
+- Startup the 'simple' process works in TCP server mode and you would see "App 
Manager started." is printed.<br/>
+```
+$ ./simple -s
+App Manager started.
+```
+
+- Query all installed applications<br/>
+```
+$ ./host_tool -q
+
+response status 69
+{
+    "num":    0
+}
+```
+
+The `69` stands for response status to this query request which means query 
success and a payload is attached with the response. See 
`{WAMR_ROOT}/core/iwasm/lib/app-libs/base/wasm_app.h` for the definitions of 
response codes. The payload is printed with JSON format where the `num` stands 
for application installations number and value `0` means currently no 
application is installed yet.
+
+- Install the request handler wasm application<br/>
+```
+$ ./host_tool -i request_handler -f ./wasm-apps/request_handler.wasm
+
+response status 65
+```
+The `65` stands for response status to this installation request which means 
success. 
+
+Output of simple
+```
+Install WASM app success!
+sent 16 bytes to host
+WASM app 'request_handler' started
+```
+
+Now the request handler application is running and waiting for host or other 
wasm application to send a request.
+
+- Query again<br/>
+```
+$ ./host_tool -q
+
+response status 69
+{
+    "num":    1,
+    "applet1":    "request_handler",
+    "heap1":    49152
+}
+```
+In the payload, we can see `num` is 1 which means 1 application is installed. 
`applet1`stands for the name of the 1st application. `heap1` stands for the 
heap size of the 1st application.
+
+- Send request from host to specific wasm application<br/>
+```
+$ ./host_tool -r /app/request_handler/url1 -A GET
+
+response status 69
+{
+    "key1":    "value1",
+    "key2":    "value2"
+}
+```
+
+We can see a response with status `69` and a payload is received.
+
+Output of simple
+```
+connection established!
+Send request to applet: request_handler
+Send request to app request_handler success.
+App request_handler got request, url url1, action 1
+[resp] ### user resource 1 handler called
+sent 150 bytes to host
+Wasm app process request success.
+```
+
+- Send a general request from host (not specify target application name)<br/>
+```
+$ ./host_tool -r /url1 -A GET
+
+response status 69
+{
+    "key1":    "value1",
+    "key2":    "value2"
+}
+```
+
+Output of simple
+```
+connection established!
+Send request to app request_handler success.
+App request_handler got request, url /url1, action 1
+[resp] ### user resource 1 handler called
+sent 150 bytes to host
+Wasm app process request success.
+```
+
+- Install the event publisher wasm application<br/>
+```
+$ ./host_tool -i pub -f ./wasm-apps/event_publisher.wasm
+
+response status 65
+```
+
+- Subscribe event by host_tool<br/>
+```
+$ ./host_tool -s /alert/overheat -a 3000
+
+response status 69
+
+received an event alert/overheat
+{
+    "warning":    "temperature is over high"
+}
+received an event alert/overheat
+{
+    "warning":    "temperature is over high"
+}
+received an event alert/overheat
+{
+    "warning":    "temperature is over high"
+}
+received an event alert/overheat
+{
+    "warning":    "temperature is over high"
+}
+```
+We can see 4 `alert/overheat` events are received in 3 seconds which is 
published by the `pub` application.
+
+Output of simple
+```
+connection established!
+am_register_event adding url:(alert/overheat)
+client: -3 registered event (alert/overheat)
+sent 16 bytes to host
+sent 142 bytes to host
+sent 142 bytes to host
+sent 142 bytes to host
+sent 142 bytes to host
+```
+- Install the event subscriber wasm application<br/>
+```
+$ ./host_tool -i sub -f ./wasm-apps/event_subscriber.wasm
+
+response status 65
+```
+The `sub` application is installed.
+
+Output of simple
+```
+connection established!
+Install WASM app success!
+WASM app 'sub' started
+am_register_event adding url:(alert/overheat)
+client: 3 registered event (alert/overheat)
+sent 16 bytes to host
+Send request to app sub success.
+App sub got request, url alert/overheat, action 6
+### user over heat event handler called
+Attribute container dump:
+Tag: 
+Attribute list:
+  key: warning, type: string, value: temperature is over high
+
+Wasm app process request success.
+```
+
+We can see the `sub` application receives the `alert/overheat` event and dumps 
it out.<br/>
+At device side, the event is represented by an attribute container which 
contains key-value pairs like below:
+```
+Attribute container dump:
+Tag:
+Attribute list:
+  key: warning, type: string, value: temperature is over high
+```
+`warning` is the key's name. `string` means this is a string value and 
`temperature is over high` is the value.
+
+- Uninstall the wasm application<br/>
+```
+$ ./host_tool -u request_handler
+
+response status 66
+
+$ ./host_tool -u pub
+
+response status 66
+
+$ ./host_tool -u sub
+
+response status 66
+```
+
+- Query again<br/>
+```
+$ ./host_tool -q
+
+response status 69
+{
+    "num":    0
+}
+```
+
+  >**Note:** Here we only installed part of the sample WASM applications. You 
can try others by yourself.
+
+  >**Note:** You have to manually kill the simple process by Ctrl+C after use.
diff --git a/scriptsrcs/wamr/samples/simple/build.sh 
b/scriptsrcs/wamr/samples/simple/build.sh
new file mode 100755
index 0000000..f803fff
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/build.sh
@@ -0,0 +1,80 @@
+#!/bin/bash
+
+CURR_DIR=$PWD
+WAMR_DIR=${PWD}/../..
+OUT_DIR=${PWD}/out
+BUILD_DIR=${PWD}/build
+
+IWASM_ROOT=${PWD}/../../core/iwasm
+APP_LIBS=${IWASM_ROOT}/lib/app-libs
+NATIVE_LIBS=${IWASM_ROOT}/lib/native-interface
+APP_LIB_SRC="${APP_LIBS}/base/*.c ${APP_LIBS}/extension/sensor/*.c 
${APP_LIBS}/extension/connection/*.c ${APP_LIBS}/extension/gui/src/*.c 
${NATIVE_LIBS}/*.c"
+WASM_APPS=${PWD}/wasm-apps
+
+rm -rf ${OUT_DIR}
+mkdir ${OUT_DIR}
+mkdir ${OUT_DIR}/wasm-apps
+
+cd ${WAMR_DIR}/core/shared-lib/mem-alloc
+if [ ! -d "tlsf" ]; then
+    git clone https://github.com/mattconte/tlsf
+fi
+
+cd ${WAMR_DIR}/core/iwasm/lib/3rdparty
+if [ ! -d "lvgl" ]; then
+    git clone https://github.com/littlevgl/lvgl.git --branch v6.0.1
+fi
+if [ ! -d "lv_drivers" ]; then
+        git clone https://github.com/littlevgl/lv_drivers.git
+fi
+
+echo "#####################build simple project"
+cd ${CURR_DIR}
+mkdir -p cmake_build
+cd cmake_build
+cmake ..
+make
+if [ $? != 0 ];then
+    echo "BUILD_FAIL simple exit as $?\n"
+    exit 2
+fi
+cp -a simple ${OUT_DIR}
+echo "#####################build simple project success"
+
+echo "#####################build host-tool"
+cd ${WAMR_DIR}/test-tools/host-tool
+mkdir -p bin
+cd bin
+cmake ..
+make
+if [ $? != 0 ];then
+        echo "BUILD_FAIL host tool exit as $?\n"
+        exit 2
+fi
+cp host_tool ${OUT_DIR}
+echo "#####################build host-tool success"
+
+
+echo "#####################build wasm apps"
+
+cd ${WASM_APPS}
+
+for i in `ls *.c`
+do
+APP_SRC="$i ${APP_LIB_SRC}"
+OUT_FILE=${i%.*}.wasm
+emcc -O3 -I${APP_LIBS}/base -I${APP_LIBS}/extension/sensor -I${NATIVE_LIBS} \
+     -I${APP_LIBS}/extension/connection \
+     -I${APP_LIBS}/extension/gui \
+     -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s STACK_OVERFLOW_CHECK=2 \
+     -s TOTAL_MEMORY=65536 -s TOTAL_STACK=4096 \
+     -s "EXPORTED_FUNCTIONS=['_on_init', '_on_destroy', '_on_request', 
'_on_response', \
+                             '_on_sensor_event', '_on_timer_callback', 
'_on_connection_data', '_on_widget_event']" \
+     -o ${OUT_DIR}/wasm-apps/${OUT_FILE} ${APP_SRC}
+if [ -f ${OUT_DIR}/wasm-apps/${OUT_FILE} ]; then
+        echo "build ${OUT_FILE} success"
+else
+        echo "build ${OUT_FILE} fail"
+fi
+done
+echo "#####################build wasm apps done"
diff --git a/scriptsrcs/wamr/samples/simple/src/ext_lib_export.c 
b/scriptsrcs/wamr/samples/simple/src/ext_lib_export.c
new file mode 100755
index 0000000..1ba108a
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/src/ext_lib_export.c
@@ -0,0 +1,12 @@
+#include "lib_export.h"
+#include "sensor_api.h"
+#include "connection_api.h"
+#include "gui_api.h"
+
+static NativeSymbol extended_native_symbol_defs[] = {
+#include "runtime_sensor.inl"
+#include "connection.inl"
+#include "wamr_gui.inl"
+        };
+
+#include "ext_lib_export.h"
diff --git a/scriptsrcs/wamr/samples/simple/src/iwasm_main.c 
b/scriptsrcs/wamr/samples/simple/src/iwasm_main.c
new file mode 100755
index 0000000..24f9c95
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/src/iwasm_main.c
@@ -0,0 +1,509 @@
+
+#ifndef CONNECTION_UART
+#include <netdb.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#else
+#include <termios.h>
+#endif
+
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <signal.h>
+#include <unistd.h>
+#include <strings.h>
+
+#include "runtime_lib.h"
+#include "runtime_timer.h"
+#include "native_interface.h"
+#include "app_manager_export.h"
+#include "bh_common.h"
+#include "bh_queue.h"
+#include "bh_thread.h"
+#include "bh_memory.h"
+#include "runtime_sensor.h"
+#include "attr_container.h"
+#include "module_wasm_app.h"
+#include "wasm_export.h"
+
+#include "lv_drivers/display/monitor.h"
+#include "lv_drivers/indev/mouse.h"
+
+#define MAX 2048
+
+#ifndef CONNECTION_UART
+#define SA struct sockaddr
+static char *host_address = "127.0.0.1";
+static int port = 8888;
+#else
+static char *uart_device = "/dev/ttyS2";
+static int baudrate = B115200;
+#endif
+
+extern void * thread_timer_check(void *);
+extern void init_sensor_framework();
+extern int aee_host_msg_callback(void *msg, uint16_t msg_len);
+extern bool init_connection_framework();
+extern void wgl_init();
+
+#ifndef CONNECTION_UART
+int listenfd = -1;
+int sockfd = -1;
+static pthread_mutex_t sock_lock = PTHREAD_MUTEX_INITIALIZER;
+#else
+int uartfd = -1;
+#endif
+
+#ifndef CONNECTION_UART
+static bool server_mode = false;
+
+// Function designed for chat between client and server.
+void* func(void* arg)
+{
+    char buff[MAX];
+    int n;
+    struct sockaddr_in servaddr;
+
+    while (1) {
+        if (sockfd != -1)
+            close(sockfd);
+        // socket create and verification
+        sockfd = socket(AF_INET, SOCK_STREAM, 0);
+        if (sockfd == -1) {
+            printf("socket creation failed...\n");
+            return NULL;
+        } else
+            printf("Socket successfully created..\n");
+        bzero(&servaddr, sizeof(servaddr));
+        // assign IP, PORT
+        servaddr.sin_family = AF_INET;
+        servaddr.sin_addr.s_addr = inet_addr(host_address);
+        servaddr.sin_port = htons(port);
+
+        // connect the client socket to server socket
+        if (connect(sockfd, (SA*) &servaddr, sizeof(servaddr)) != 0) {
+            printf("connection with the server failed...\n");
+            sleep(10);
+            continue;
+        } else {
+            printf("connected to the server..\n");
+        }
+
+        // infinite loop for chat
+        for (;;) {
+            bzero(buff, MAX);
+
+            // read the message from client and copy it in buffer
+            n = read(sockfd, buff, sizeof(buff));
+            // print buffer which contains the client contents
+            //fprintf(stderr, "recieved %d bytes from host: %s", n, buff);
+
+            // socket disconnected
+            if (n <= 0)
+                break;
+
+            aee_host_msg_callback(buff, n);
+        }
+    }
+
+    // After chatting close the socket
+    close(sockfd);
+}
+
+static bool host_init()
+{
+    return true;
+}
+
+int host_send(void * ctx, const char *buf, int size)
+{
+    int ret;
+
+    if (pthread_mutex_trylock(&sock_lock) == 0) {
+        if (sockfd == -1) {
+            pthread_mutex_unlock(&sock_lock);
+            return 0;
+        }
+
+        ret = write(sockfd, buf, size);
+
+        pthread_mutex_unlock(&sock_lock);
+        return ret;
+    }
+
+    return -1;
+}
+
+void host_destroy()
+{
+    if (server_mode)
+        close(listenfd);
+
+    pthread_mutex_lock(&sock_lock);
+    close(sockfd);
+    pthread_mutex_unlock(&sock_lock);
+}
+
+host_interface interface = {
+    .init = host_init,
+    .send = host_send,
+    .destroy = host_destroy
+};
+
+void* func_server_mode(void* arg)
+{
+    int clilent;
+    struct sockaddr_in serv_addr, cli_addr;
+    int n;
+    char buff[MAX];
+
+    struct sigaction sa;
+    sa.sa_handler = SIG_IGN;
+    sigaction(SIGPIPE, &sa, 0);
+
+    /* First call to socket() function */
+    listenfd = socket(AF_INET, SOCK_STREAM, 0);
+
+    if (listenfd < 0) {
+        perror("ERROR opening socket");
+        exit(1);
+    }
+
+    /* Initialize socket structure */
+    bzero((char *) &serv_addr, sizeof(serv_addr));
+
+    serv_addr.sin_family = AF_INET;
+    serv_addr.sin_addr.s_addr = INADDR_ANY;
+    serv_addr.sin_port = htons(port);
+
+    /* Now bind the host address using bind() call.*/
+    if (bind(listenfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) 
{
+        perror("ERROR on binding");
+        exit(1);
+    }
+
+    listen(listenfd, 5);
+    clilent = sizeof(cli_addr);
+
+    while (1) {
+        pthread_mutex_lock(&sock_lock);
+
+        sockfd = accept(listenfd, (struct sockaddr *) &cli_addr, &clilent);
+
+        pthread_mutex_unlock(&sock_lock);
+
+        if (sockfd < 0) {
+            perror("ERROR on accept");
+            exit(1);
+        }
+
+        printf("connection established!\n");
+
+        for (;;) {
+            bzero(buff, MAX);
+
+            // read the message from client and copy it in buffer
+            n = read(sockfd, buff, sizeof(buff));
+
+            // socket disconnected
+            if (n <= 0) {
+                pthread_mutex_lock(&sock_lock);
+                close(sockfd);
+                sockfd = -1;
+                pthread_mutex_unlock(&sock_lock);
+
+                sleep(1);
+                break;
+            }
+
+            aee_host_msg_callback(buff, n);
+        }
+    }
+}
+
+#else
+static int parse_baudrate(int baud)
+{
+    switch (baud) {
+        case 9600:
+            return B9600;
+        case 19200:
+            return B19200;
+        case 38400:
+            return B38400;
+        case 57600:
+            return B57600;
+        case 115200:
+            return B115200;
+        case 230400:
+            return B230400;
+        case 460800:
+            return B460800;
+        case 500000:
+            return B500000;
+        case 576000:
+            return B576000;
+        case 921600:
+            return B921600;
+        case 1000000:
+            return B1000000;
+        case 1152000:
+            return B1152000;
+        case 1500000:
+            return B1500000;
+        case 2000000:
+            return B2000000;
+        case 2500000:
+            return B2500000;
+        case 3000000:
+            return B3000000;
+        case 3500000:
+            return B3500000;
+        case 4000000:
+            return B4000000;
+        default:
+            return -1;
+    }
+}
+static bool uart_init(const char *device, int baudrate, int *fd)
+{
+    int uart_fd;
+    struct termios uart_term;
+
+    uart_fd = open(device, O_RDWR | O_NOCTTY);
+
+    if (uart_fd <= 0)
+        return false;
+
+    memset(&uart_term, 0, sizeof(uart_term));
+    uart_term.c_cflag = baudrate | CS8 | CLOCAL | CREAD;
+    uart_term.c_iflag = IGNPAR;
+    uart_term.c_oflag = 0;
+
+    /* set noncanonical mode */
+    uart_term.c_lflag = 0;
+    uart_term.c_cc[VTIME] = 30;
+    uart_term.c_cc[VMIN] = 1;
+    tcflush(uart_fd, TCIFLUSH);
+
+    if (tcsetattr(uart_fd, TCSANOW, &uart_term) != 0) {
+        close(uart_fd);
+        return false;
+    }
+
+    *fd = uart_fd;
+
+    return true;
+}
+
+static void *func_uart_mode(void *arg)
+{
+    int n;
+    char buff[MAX];
+
+    if (!uart_init(uart_device, baudrate, &uartfd)) {
+        printf("open uart fail! %s\n", uart_device);
+        return NULL;
+    }
+
+    for (;;) {
+        bzero(buff, MAX);
+
+        n = read(uartfd, buff, sizeof(buff));
+
+        if (n <= 0) {
+            close(uartfd);
+            uartfd = -1;
+            break;
+        }
+
+        aee_host_msg_callback(buff, n);
+    }
+
+    return NULL;
+}
+
+static int uart_send(void * ctx, const char *buf, int size)
+{
+    int ret;
+
+    ret = write(uartfd, buf, size);
+
+    return ret;
+}
+
+static void uart_destroy()
+{
+    close(uartfd);
+}
+
+static host_interface interface = { .send = uart_send, .destroy = uart_destroy 
};
+
+#endif
+
+static char global_heap_buf[512 * 1024] = { 0 };
+
+static void showUsage()
+{
+#ifndef CONNECTION_UART
+     printf("Usage:\n");
+     printf("\nWork as TCP server mode:\n");
+     printf("\tsimple -s|--server_mode -p|--port <Port>\n");
+     printf("where\n");
+     printf("\t<Port> represents the port that would be listened on and the 
default is 8888\n");
+     printf("\nWork as TCP client mode:\n");
+     printf("\tsimple -a|--host_address <Host Address> -p|--port <Port>\n");
+     printf("where\n");
+     printf("\t<Host Address> represents the network address of host and the 
default is 127.0.0.1\n");
+     printf("\t<Port> represents the listen port of host and the default is 
8888\n");
+#else
+     printf("Usage:\n");
+     printf("\tsimple -u <Uart Device> -b <Baudrate>\n\n");
+     printf("where\n");
+     printf("\t<Uart Device> represents the UART device name and the default 
is /dev/ttyS2\n");
+     printf("\t<Baudrate> represents the UART device baudrate and the default 
is 115200\n");
+#endif
+}
+
+static bool parse_args(int argc, char *argv[])
+{
+    int c;
+
+    while (1) {
+        int optIndex = 0;
+        static struct option longOpts[] = { 
+#ifndef CONNECTION_UART
+            { "server_mode",    no_argument,       NULL, 's' },
+            { "host_address",   required_argument, NULL, 'a' },
+            { "port",           required_argument, NULL, 'p' },
+#else
+            { "uart",           required_argument, NULL, 'u' },
+            { "baudrate",       required_argument, NULL, 'b' },
+#endif
+            { "help",           required_argument, NULL, 'h' },
+            { 0, 0, 0, 0 } 
+        };
+
+        c = getopt_long(argc, argv, "sa:p:u:b:h", longOpts, &optIndex);
+        if (c == -1)
+            break;
+
+        switch (c) {
+#ifndef CONNECTION_UART
+            case 's':
+                server_mode = true;
+                break;
+            case 'a':
+                host_address = optarg;
+                printf("host address: %s\n", host_address);
+                break;
+            case 'p':
+                port = atoi(optarg);
+                printf("port: %d\n", port);
+                break;
+#else
+            case 'u':
+                uart_device = optarg;
+                printf("uart device: %s\n", uart_device);
+                break;
+            case 'b':
+                baudrate = parse_baudrate(atoi(optarg));
+                printf("uart baudrate: %s\n", optarg);
+                break;
+#endif
+            case 'h':
+                showUsage();
+                return false;
+            default:
+                showUsage();
+                return false;
+        }
+    }
+
+    return true;
+}
+
+/**
+ * Initialize the Hardware Abstraction Layer (HAL) for the Littlev graphics 
library
+ */
+static void hal_init(void)
+{
+    /* Use the 'monitor' driver which creates window on PC's monitor to 
simulate a display*/
+    monitor_init();
+
+    /*Create a display buffer*/
+    static lv_disp_buf_t disp_buf1;
+    static lv_color_t buf1_1[480*10];
+    lv_disp_buf_init(&disp_buf1, buf1_1, NULL, 480*10);
+
+    /*Create a display*/
+    lv_disp_drv_t disp_drv;
+    lv_disp_drv_init(&disp_drv);            /*Basic initialization*/
+    disp_drv.buffer = &disp_buf1;
+    disp_drv.flush_cb = monitor_flush;
+    //    disp_drv.hor_res = 200;
+    //    disp_drv.ver_res = 100;
+    lv_disp_drv_register(&disp_drv);
+
+    /* Add the mouse as input device
+    * Use the 'mouse' driver which reads the PC's mouse*/
+    mouse_init();
+    lv_indev_drv_t indev_drv;
+    lv_indev_drv_init(&indev_drv);          /*Basic initialization*/
+    indev_drv.type = LV_INDEV_TYPE_POINTER;
+    indev_drv.read_cb = mouse_read;         /*This function will be called 
periodically (by the library) to get the mouse position and state*/
+    lv_indev_drv_register(&indev_drv);
+}
+// Driver function
+int iwasm_main(int argc, char *argv[])
+{
+    korp_thread tid;
+
+    if (!parse_args(argc, argv))
+        return -1;
+
+    if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf))
+            != 0) {
+        printf("Init global heap failed.\n");
+        return -1;
+    }
+
+    if (vm_thread_sys_init() != 0) {
+        goto fail1;
+    }
+
+    if (!init_connection_framework()) {
+        vm_thread_sys_destroy();
+        goto fail1;
+    }
+
+    wgl_init();
+    hal_init();
+    init_sensor_framework();
+
+    // timer manager
+    init_wasm_timer();
+
+#ifndef CONNECTION_UART
+    if (server_mode)
+        vm_thread_create(&tid, func_server_mode, NULL,
+        BH_APPLET_PRESERVED_STACK_SIZE);
+    else
+        vm_thread_create(&tid, func, NULL, BH_APPLET_PRESERVED_STACK_SIZE);
+#else
+    vm_thread_create(&tid, func_uart_mode, NULL, 
BH_APPLET_PRESERVED_STACK_SIZE);
+#endif
+
+    // TODO:
+    app_manager_startup(&interface);
+
+    fail1: bh_memory_destroy();
+    return -1;
+}
diff --git a/scriptsrcs/wamr/samples/simple/src/lv_drv_conf.h 
b/scriptsrcs/wamr/samples/simple/src/lv_drv_conf.h
new file mode 100755
index 0000000..d216a3e
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/src/lv_drv_conf.h
@@ -0,0 +1,310 @@
+/**
+ * @file lv_drv_conf.h
+ *
+ */
+
+/*
+ * COPY THIS FILE AS lv_drv_conf.h
+ */
+
+#if 1 /*Set it to "1" to enable the content*/
+
+#ifndef LV_DRV_CONF_H
+#define LV_DRV_CONF_H
+
+#include "lv_conf.h"
+
+/*********************
+ * DELAY INTERFACE
+ *********************/
+#define LV_DRV_DELAY_INCLUDE  <stdint.h>            /*Dummy include by 
default*/
+#define LV_DRV_DELAY_US(us)  /*delay_us(us)*/       /*Delay the given number 
of microseconds*/
+#define LV_DRV_DELAY_MS(ms)  /*delay_ms(ms)*/       /*Delay the given number 
of milliseconds*/
+
+/*********************
+ * DISPLAY INTERFACE
+ *********************/
+
+/*------------
+ *  Common
+ *------------*/
+#define LV_DRV_DISP_INCLUDE         <stdint.h>           /*Dummy include by 
default*/
+#define LV_DRV_DISP_CMD_DATA(val)  /*pin_x_set(val)*/    /*Set the 
command/data pin to 'val'*/
+#define LV_DRV_DISP_RST(val)       /*pin_x_set(val)*/    /*Set the reset pin 
to 'val'*/
+
+/*---------
+ *  SPI
+ *---------*/
+#define LV_DRV_DISP_SPI_CS(val)          /*spi_cs_set(val)*/     /*Set the 
SPI's Chip select to 'val'*/
+#define LV_DRV_DISP_SPI_WR_BYTE(data)    /*spi_wr(data)*/        /*Write a 
byte the SPI bus*/
+#define LV_DRV_DISP_SPI_WR_ARRAY(adr, n) /*spi_wr_mem(adr, n)*/  /*Write 'n' 
bytes to SPI bus from 'adr'*/
+
+/*------------------
+ *  Parallel port
+ *-----------------*/
+#define LV_DRV_DISP_PAR_CS(val)          /*par_cs_set(val)*/   /*Set the 
Parallel port's Chip select to 'val'*/
+#define LV_DRV_DISP_PAR_SLOW             /*par_slow()*/        /*Set low speed 
on the parallel port*/
+#define LV_DRV_DISP_PAR_FAST             /*par_fast()*/        /*Set high 
speed on the parallel port*/
+#define LV_DRV_DISP_PAR_WR_WORD(data)    /*par_wr(data)*/      /*Write a word 
to the parallel port*/
+#define LV_DRV_DISP_PAR_WR_ARRAY(adr, n) /*par_wr_mem(adr,n)*/ /*Write 'n' 
bytes to Parallel ports from 'adr'*/
+
+/***************************
+ * INPUT DEVICE INTERFACE
+ ***************************/
+
+/*----------
+ *  Common
+ *----------*/
+#define LV_DRV_INDEV_INCLUDE     <stdint.h>             /*Dummy include by 
default*/
+#define LV_DRV_INDEV_RST(val)    /*pin_x_set(val)*/     /*Set the reset pin to 
'val'*/
+#define LV_DRV_INDEV_IRQ_READ    0 /*pn_x_read()*/      /*Read the IRQ pin*/
+
+/*---------
+ *  SPI
+ *---------*/
+#define LV_DRV_INDEV_SPI_CS(val)            /*spi_cs_set(val)*/     /*Set the 
SPI's Chip select to 'val'*/
+#define LV_DRV_INDEV_SPI_XCHG_BYTE(data)    0 /*spi_xchg(val)*/     /*Write 
'val' to SPI and give the read value*/
+
+/*---------
+ *  I2C
+ *---------*/
+#define LV_DRV_INDEV_I2C_START              /*i2c_start()*/       /*Make an 
I2C start*/
+#define LV_DRV_INDEV_I2C_STOP               /*i2c_stop()*/        /*Make an 
I2C stop*/
+#define LV_DRV_INDEV_I2C_RESTART            /*i2c_restart()*/     /*Make an 
I2C restart*/
+#define LV_DRV_INDEV_I2C_WR(data)           /*i2c_wr(data)*/      /*Write a 
byte to the I1C bus*/
+#define LV_DRV_INDEV_I2C_READ(last_read)    0 /*i2c_rd()*/        /*Read a 
byte from the I2C bud*/
+
+
+/*********************
+ *  DISPLAY DRIVERS
+ *********************/
+
+/*-------------------
+ *  Monitor of PC
+ *-------------------*/
+#ifndef USE_MONITOR
+#  define USE_MONITOR         1
+#endif
+
+#if USE_MONITOR
+#  define MONITOR_HOR_RES     LV_HOR_RES_MAX
+#  define MONITOR_VER_RES     LV_VER_RES_MAX
+
+/* Scale window by this factor (useful when simulating small screens) */
+#  define MONITOR_ZOOM        1
+
+/* Used to test true double buffering with only address changing.
+ * Set LV_VDB_SIZE = (LV_HOR_RES * LV_VER_RES) and  LV_VDB_DOUBLE = 1 and 
LV_COLOR_DEPTH = 32" */
+#  define MONITOR_DOUBLE_BUFFERED 0
+
+/*Eclipse: <SDL2/SDL.h>    Visual Studio: <SDL.h>*/
+#  define MONITOR_SDL_INCLUDE_PATH    <SDL2/SDL.h>
+
+/*Different rendering might be used if running in a Virtual machine*/
+#  define MONITOR_VIRTUAL_MACHINE 0
+
+/*Open two windows to test multi display support*/
+#  define MONITOR_DUAL            0
+#endif
+
+/*-----------------------------------
+ *  Native Windows (including mouse)
+ *----------------------------------*/
+#ifndef USE_WINDOWS
+#  define USE_WINDOWS       0
+#endif
+
+#define USE_WINDOWS         0
+#if USE_WINDOWS
+#  define WINDOW_HOR_RES      480
+#  define WINDOW_VER_RES      320
+#endif
+
+/*----------------
+ *    SSD1963
+ *--------------*/
+#ifndef USE_SSD1963
+#  define USE_SSD1963         0
+#endif
+
+#if USE_SSD1963
+#  define SSD1963_HOR_RES     LV_HOR_RES
+#  define SSD1963_VER_RES     LV_VER_RES
+#  define SSD1963_HT          531
+#  define SSD1963_HPS         43
+#  define SSD1963_LPS         8
+#  define SSD1963_HPW         10
+#  define SSD1963_VT          288
+#  define SSD1963_VPS         12
+#  define SSD1963_FPS         4
+#  define SSD1963_VPW         10
+#  define SSD1963_HS_NEG      0   /*Negative hsync*/
+#  define SSD1963_VS_NEG      0   /*Negative vsync*/
+#  define SSD1963_ORI         0   /*0, 90, 180, 270*/
+#  define SSD1963_COLOR_DEPTH 16
+#endif
+
+/*----------------
+ *    R61581
+ *--------------*/
+#ifndef USE_R61581
+#  define USE_R61581          0
+#endif
+
+#if USE_R61581
+#  define R61581_HOR_RES      LV_HOR_RES
+#  define R61581_VER_RES      LV_VER_RES
+#  define R61581_HSPL         0       /*HSYNC signal polarity*/
+#  define R61581_HSL          10      /*HSYNC length (Not Implemented)*/
+#  define R61581_HFP          10      /*Horitontal Front poarch (Not 
Implemented)*/
+#  define R61581_HBP          10      /*Horitontal Back poarch (Not 
Implemented */
+#  define R61581_VSPL         0       /*VSYNC signal polarity*/
+#  define R61581_VSL          10      /*VSYNC length (Not Implemented)*/
+#  define R61581_VFP          8       /*Vertical Front poarch*/
+#  define R61581_VBP          8       /*Vertical Back poarch */
+#  define R61581_DPL          0       /*DCLK signal polarity*/
+#  define R61581_EPL          1       /*ENABLE signal polarity*/
+#  define R61581_ORI          0       /*0, 180*/
+#  define R61581_LV_COLOR_DEPTH 16    /*Fix 16 bit*/
+#endif
+
+/*------------------------------
+ *  ST7565 (Monochrome, low res.)
+ *-----------------------------*/
+#ifndef USE_ST7565
+#  define USE_ST7565          0
+#endif
+
+#if USE_ST7565
+/*No settings*/
+#endif  /*USE_ST7565*/
+
+/*-----------------------------------------
+ *  Linux frame buffer device (/dev/fbx)
+ *-----------------------------------------*/
+#ifndef USE_FBDEV
+#  define USE_FBDEV           1
+#endif
+
+#if USE_FBDEV
+#  define FBDEV_PATH          "/dev/fb0"
+#endif
+
+/*********************
+ *  INPUT DEVICES
+ *********************/
+
+/*--------------
+ *    XPT2046
+ *--------------*/
+#ifndef USE_XPT2046
+#  define USE_XPT2046         0
+#endif
+
+#if USE_XPT2046
+#  define XPT2046_HOR_RES     480
+#  define XPT2046_VER_RES     320
+#  define XPT2046_X_MIN       200
+#  define XPT2046_Y_MIN       200
+#  define XPT2046_X_MAX       3800
+#  define XPT2046_Y_MAX       3800
+#  define XPT2046_AVG         4
+#  define XPT2046_INV         0
+#endif
+
+/*-----------------
+ *    FT5406EE8
+ *-----------------*/
+#ifndef USE_FT5406EE8
+#  define USE_FT5406EE8       0
+#endif
+
+#if USE_FT5406EE8
+# define FT5406EE8_I2C_ADR   0x38                  /*7 bit address*/
+#endif
+
+/*---------------
+ *  AD TOUCH
+ *--------------*/
+#ifndef USE_AD_TOUCH
+#  define USE_AD_TOUCH        0
+#endif
+
+#if USE_AD_TOUCH
+/*No settings*/
+#endif
+
+
+/*---------------------------------------
+ * Mouse or touchpad on PC (using SDL)
+ *-------------------------------------*/
+#ifndef USE_MOUSE
+#  define USE_MOUSE           1
+#endif
+
+#if USE_MOUSE
+/*No settings*/
+#endif
+
+/*-------------------------------------------
+ * Mousewheel as encoder on PC (using SDL)
+ *------------------------------------------*/
+#ifndef USE_MOUSEWHEEL
+#  define USE_MOUSEWHEEL      1
+#endif
+
+#if USE_MOUSEWHEEL
+/*No settings*/
+#endif
+
+/*-------------------------------------------------
+ * Touchscreen as libinput interface (for Linux based systems)
+ *------------------------------------------------*/
+#ifndef USE_LIBINPUT
+#  define USE_LIBINPUT           0
+#endif
+
+#if USE_LIBINPUT
+#  define LIBINPUT_NAME   "/dev/input/event0"        /*You can use the 
"evtest" Linux tool to get the list of devices and test them*/
+#endif  /*USE_LIBINPUT*/
+
+/*-------------------------------------------------
+ * Mouse or touchpad as evdev interface (for Linux based systems)
+ *------------------------------------------------*/
+#ifndef USE_EVDEV
+#  define USE_EVDEV           0
+#endif
+
+#if USE_EVDEV
+#  define EVDEV_NAME   "/dev/input/event0"        /*You can use the "evtest" 
Linux tool to get the list of devices and test them*/
+#  define EVDEV_SWAP_AXES         0               /*Swap the x and y axes of 
the touchscreen*/
+
+#  define EVDEV_SCALE             0               /* Scale input, e.g. if 
touchscreen resolution does not match display resolution */
+#  if EVDEV_SCALE
+#    define EVDEV_SCALE_HOR_RES     (4096)          /* Horizontal resolution 
of touchscreen */
+#    define EVDEV_SCALE_VER_RES     (4096)          /* Vertical resolution of 
touchscreen */
+#  endif  /*EVDEV_SCALE*/
+
+#  define EVDEV_CALIBRATE         0               /*Scale and offset the 
touchscreen coordinates by using maximum and minimum values for each axis*/
+#  if EVDEV_CALIBRATE
+#    define EVDEV_HOR_MIN   3800                    /*If EVDEV_XXX_MIN > 
EVDEV_XXX_MAX the XXX axis is automatically inverted*/
+#    define EVDEV_HOR_MAX   200
+#    define EVDEV_VER_MIN   200
+#    define EVDEV_VER_MAX   3800
+#  endif  /*EVDEV_SCALE*/
+#endif  /*USE_EVDEV*/
+
+/*-------------------------------
+ *   Keyboard of a PC (using SDL)
+ *------------------------------*/
+#ifndef USE_KEYBOARD
+#  define USE_KEYBOARD        1
+#endif
+
+#if USE_KEYBOARD
+/*No settings*/
+#endif
+
+#endif  /*LV_DRV_CONF_H*/
+
+#endif /*End of "Content enable"*/
diff --git a/scriptsrcs/wamr/samples/simple/src/main.c 
b/scriptsrcs/wamr/samples/simple/src/main.c
new file mode 100755
index 0000000..14afb07
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/src/main.c
@@ -0,0 +1,5 @@
+extern void iwasm_main();
+int main(int argc, char *argv[])
+{
+    iwasm_main(argc, argv);
+}
diff --git a/scriptsrcs/wamr/samples/simple/wasm-apps/connection.c 
b/scriptsrcs/wamr/samples/simple/wasm-apps/connection.c
new file mode 100755
index 0000000..89aed51
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/wasm-apps/connection.c
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_app.h"
+
+/* User global variable */
+static int num = 0;
+static user_timer_t g_timer;
+static connection_t *g_conn = NULL;
+
+void on_data1(connection_t *conn,
+              conn_event_type_t type,
+              const char *data,
+              uint32 len,
+              void *user_data)
+{
+    if (type == CONN_EVENT_TYPE_DATA) {
+        char message[64] = {0};
+        memcpy(message, data, len);
+        printf("Client got a message from server -> %s\n", message);
+    } else if (type == CONN_EVENT_TYPE_DISCONNECT) {
+        printf("connection is close by server!\n");
+    } else {
+        printf("error: got unknown event type!!!\n");
+    }
+}
+
+/* Timer callback */
+void timer1_update(user_timer_t timer)
+{
+    char message[64] = {0};
+    /* Reply to server */
+    snprintf(message, sizeof(message), "Hello %d", num++);
+    api_send_on_connection(g_conn, message, strlen(message));
+}
+
+void my_close_handler(request_t * request)
+{
+    response_t response[1];
+
+    if (g_conn != NULL) {
+        api_timer_cancel(g_timer);
+        api_close_connection(g_conn);
+    }
+     
+    make_response_for_request(request, response);
+    set_response(response, DELETED_2_02, 0, NULL, 0);
+    api_response_send(response);
+}
+
+void on_init()
+{
+    user_timer_t timer;
+    attr_container_t *args;
+    char *str = "this is client!";
+
+    api_register_resource_handler("/close", my_close_handler);
+
+    args = attr_container_create("");
+    attr_container_set_string(&args, "address", "127.0.0.1");
+    attr_container_set_uint16(&args, "port", 7777);
+
+    g_conn = api_open_connection("TCP", args, on_data1, NULL);
+    if (g_conn == NULL) {
+        printf("connect to server fail!\n");
+        return;
+    }
+
+    printf("connect to server success! handle: %p\n", g_conn);
+
+    /* set up a timer */
+    timer = api_timer_create(1000, true, false, timer1_update);
+    api_timer_restart(timer, 1000);
+}
+
+void on_destroy()
+{
+    /* real destroy work including killing timer and closing sensor is
+       accomplished in wasm app library version of on_destroy() */
+}
diff --git a/scriptsrcs/wamr/samples/simple/wasm-apps/event_publisher.c 
b/scriptsrcs/wamr/samples/simple/wasm-apps/event_publisher.c
new file mode 100755
index 0000000..96717ee
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/wasm-apps/event_publisher.c
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_app.h"
+
+int num = 0;
+
+void publish_overheat_event()
+{
+    attr_container_t *event;
+
+    event = attr_container_create("event");
+    attr_container_set_string(&event, "warning", "temperature is over high");
+
+    api_publish_event("alert/overheat", FMT_ATTR_CONTAINER, event,
+            attr_container_get_serialize_length(event));
+
+    attr_container_destroy(event);
+}
+
+/* Timer callback */
+void timer1_update(user_timer_t timer)
+{
+    publish_overheat_event();
+}
+
+void start_timer()
+{
+    user_timer_t timer;
+
+    /* set up a timer */
+    timer = api_timer_create(1000, true, false, timer1_update);
+    api_timer_restart(timer, 1000);
+}
+
+void on_init()
+{
+    start_timer();
+}
+
+void on_destroy()
+{
+    /* real destroy work including killing timer and closing sensor is 
accomplished in wasm app library version of on_destroy() */
+}
diff --git a/scriptsrcs/wamr/samples/simple/wasm-apps/event_subscriber.c 
b/scriptsrcs/wamr/samples/simple/wasm-apps/event_subscriber.c
new file mode 100755
index 0000000..aea0d77
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/wasm-apps/event_subscriber.c
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_app.h"
+
+void over_heat_event_handler(request_t *request)
+{
+    printf("### user over heat event handler called\n");
+
+    if (request->payload != NULL && request->fmt == FMT_ATTR_CONTAINER)
+        attr_container_dump((attr_container_t *) request->payload);
+}
+
+void on_init()
+{
+    api_subscribe_event("alert/overheat", over_heat_event_handler);
+}
+
+void on_destroy()
+{
+    /* real destroy work including killing timer and closing sensor is
+       accomplished in wasm app library version of on_destroy() */
+}
diff --git a/scriptsrcs/wamr/samples/simple/wasm-apps/gui.c 
b/scriptsrcs/wamr/samples/simple/wasm-apps/gui.c
new file mode 100755
index 0000000..b3beb9d
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/wasm-apps/gui.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <stdlib.h>
+#include <unistd.h>
+#include "wasm_app.h"
+
+static void btn_event_cb(wgl_obj_t btn, wgl_event_t event);
+
+uint32_t count = 0;
+char count_str[11] = { 0 };
+wgl_obj_t hello_world_label;
+wgl_obj_t count_label;
+wgl_obj_t btn1;
+wgl_obj_t label_count1;
+int label_count1_value = 0;
+char label_count1_str[11] = { 0 };
+
+void timer1_update(user_timer_t timer1)
+{
+    if ((count % 100) == 0) {
+        sprintf(count_str, "%d", count / 100);
+        wgl_label_set_text(count_label, count_str);
+    }
+    ++count;
+}
+
+void on_init()
+{
+    char text[32] = {0};
+
+    hello_world_label = wgl_label_create((wgl_obj_t)NULL, (wgl_obj_t)NULL);
+    wgl_label_set_text(hello_world_label, "Hello world!");
+    wgl_label_get_text(hello_world_label, text, sizeof(text));
+    printf("Label text %d %s \n", 
wgl_label_get_text_length(hello_world_label), text);
+    wgl_obj_align(hello_world_label, (wgl_obj_t)NULL, WGL_ALIGN_IN_TOP_LEFT, 
0, 0);
+
+    count_label = wgl_label_create((wgl_obj_t)NULL, (wgl_obj_t)NULL);
+    wgl_obj_align(count_label, (wgl_obj_t)NULL, WGL_ALIGN_IN_TOP_MID, 0, 0);
+
+    btn1 = wgl_btn_create((wgl_obj_t)NULL, (wgl_obj_t)NULL); /*Create a button 
on the currently loaded screen*/
+    wgl_obj_set_event_cb(btn1, btn_event_cb); /*Set function to be called when 
the button is released*/
+    wgl_obj_align(btn1, (wgl_obj_t)NULL, WGL_ALIGN_CENTER, 0, 0); /*Align 
below the label*/
+
+    /*Create a label on the button*/
+    wgl_obj_t btn_label = wgl_label_create(btn1, (wgl_obj_t)NULL);
+    wgl_label_set_text(btn_label, "Click ++");
+
+    label_count1 = wgl_label_create((wgl_obj_t)NULL, (wgl_obj_t)NULL);
+    wgl_label_set_text(label_count1, "0");
+    wgl_obj_align(label_count1, (wgl_obj_t)NULL, WGL_ALIGN_IN_BOTTOM_MID, 0, 
0);
+
+    /* set up a timer */
+    user_timer_t timer;
+    timer = api_timer_create(10, true, false, timer1_update);
+    api_timer_restart(timer, 10);
+}
+
+static void btn_event_cb(wgl_obj_t btn, wgl_event_t event)
+{
+    if(event == WGL_EVENT_RELEASED) {
+        label_count1_value++;
+        sprintf(label_count1_str, "%d", label_count1_value);
+        wgl_label_set_text(label_count1, label_count1_str);
+    }
+}
diff --git a/scriptsrcs/wamr/samples/simple/wasm-apps/gui_lvgl_compatible.c 
b/scriptsrcs/wamr/samples/simple/wasm-apps/gui_lvgl_compatible.c
new file mode 100755
index 0000000..8f2c37a
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/wasm-apps/gui_lvgl_compatible.c
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include "wasm_app.h"
+#include "lvgl.h"
+
+extern char g_widget_text[];
+
+static void btn_event_cb(lv_obj_t *btn, lv_event_t event);
+
+uint32_t count = 0;
+char count_str[11] = { 0 };
+lv_obj_t *hello_world_label;
+lv_obj_t *count_label;
+lv_obj_t *btn1;
+lv_obj_t *label_count1;
+int label_count1_value = 100;
+char label_count1_str[11] = { 0 };
+
+void timer1_update(user_timer_t timer1)
+{
+    if ((count % 100) == 0) {
+        sprintf(count_str, "%d", count / 100);
+        lv_label_set_text(count_label, count_str);
+    }
+    ++count;
+}
+
+void on_init()
+{
+    char *text;
+
+    hello_world_label = lv_label_create(NULL, NULL);
+    lv_label_set_text(hello_world_label, "Hello world!");
+    text = lv_label_get_text(hello_world_label);
+    printf("Label text %lu %s \n", strlen(text), text);
+    lv_obj_align(hello_world_label, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
+
+    count_label = lv_label_create(NULL, NULL);
+    lv_obj_align(count_label, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);
+
+    btn1 = lv_btn_create(NULL, NULL); /*Create a button on the currently 
loaded screen*/
+    lv_obj_set_event_cb(btn1, btn_event_cb); /*Set function to be called when 
the button is released*/
+    lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, 0); /*Align below the label*/
+
+    /*Create a label on the button*/
+    lv_obj_t *btn_label = lv_label_create(btn1, NULL);
+    lv_label_set_text(btn_label, "Click --");
+
+    label_count1 = lv_label_create(NULL, NULL);
+    lv_label_set_text(label_count1, "100");
+    lv_obj_align(label_count1, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+
+    /* set up a timer */
+    user_timer_t timer;
+    timer = api_timer_create(10, true, false, timer1_update);
+    api_timer_restart(timer, 10);
+}
+
+static void btn_event_cb(lv_obj_t *btn, lv_event_t event)
+{
+    if(event == LV_EVENT_RELEASED) {
+        label_count1_value--;
+        sprintf(label_count1_str, "%d", label_count1_value);
+        lv_label_set_text(label_count1, label_count1_str);
+        if (label_count1_value == 0)
+            label_count1_value = 100;
+    }
+}
diff --git a/scriptsrcs/wamr/samples/simple/wasm-apps/request_handler.c 
b/scriptsrcs/wamr/samples/simple/wasm-apps/request_handler.c
new file mode 100755
index 0000000..b482093
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/wasm-apps/request_handler.c
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_app.h"
+
+static void url1_request_handler(request_t *request)
+{
+    response_t response[1];
+    attr_container_t *payload;
+
+    printf("[resp] ### user resource 1 handler called\n");
+
+    if (request->payload != NULL && request->fmt == FMT_ATTR_CONTAINER)
+        attr_container_dump((attr_container_t *) request->payload);
+
+    payload = attr_container_create("wasm app response payload");
+    if (payload == NULL)
+        return;
+
+    attr_container_set_string(&payload, "key1", "value1");
+    attr_container_set_string(&payload, "key2", "value2");
+
+    make_response_for_request(request, response);
+    set_response(response, CONTENT_2_05,
+                 FMT_ATTR_CONTAINER,
+                 (void *)payload,
+                 attr_container_get_serialize_length(payload));
+    api_response_send(response);
+
+    attr_container_destroy(payload);
+}
+
+static void url2_request_handler(request_t *request)
+{
+    response_t response[1];
+    make_response_for_request(request, response);
+    set_response(response, DELETED_2_02, 0, NULL, 0);
+    api_response_send(response);
+
+    printf("### user resource 2 handler called\n");
+}
+
+void on_init()
+{
+    /* register resource uri */
+    api_register_resource_handler("/url1", url1_request_handler);
+    api_register_resource_handler("/url2", url2_request_handler);
+}
+
+void on_destroy()
+{
+    /* real destroy work including killing timer and closing sensor is
+       accomplished in wasm app library version of on_destroy() */
+}
diff --git a/scriptsrcs/wamr/samples/simple/wasm-apps/request_sender.c 
b/scriptsrcs/wamr/samples/simple/wasm-apps/request_sender.c
new file mode 100755
index 0000000..f1a9952
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/wasm-apps/request_sender.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_app.h"
+
+static void my_response_handler(response_t *response, void *user_data)
+{
+    char *tag = (char *) user_data;
+
+    if (response == NULL) {
+        printf("[req] request timeout!\n");
+        return;
+    }
+
+    printf("[req] response handler called mid:%d, status:%d, fmt:%d, 
payload:%p, len:%d, tag:%s\n",
+           response->mid, response->status, response->fmt, response->payload,
+           response->payload_len, tag);
+
+    if (response->payload != NULL
+        && response->payload_len > 0
+        && response->fmt == FMT_ATTR_CONTAINER) {
+        printf("[req] dump the response payload:\n");
+        attr_container_dump((attr_container_t *) response->payload);
+    }
+}
+
+static void test_send_request(char *url, char *tag)
+{
+    request_t request[1];
+
+    init_request(request, url, COAP_PUT, 0, NULL, 0);
+    api_send_request(request, my_response_handler, tag);
+}
+
+void on_init()
+{
+    test_send_request("/app/request_handler/url1", "a request to target app");
+    test_send_request("url1", "a general request");
+}
+
+void on_destroy()
+{
+    /* real destroy work including killing timer and closing sensor is
+       accomplished in wasm app library version of on_destroy() */
+}
diff --git a/scriptsrcs/wamr/samples/simple/wasm-apps/sensor.c 
b/scriptsrcs/wamr/samples/simple/wasm-apps/sensor.c
new file mode 100755
index 0000000..3270588
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/wasm-apps/sensor.c
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_app.h"
+
+static sensor_t sensor = NULL;
+
+/* Sensor event callback*/
+void sensor_event_handler(sensor_t sensor, attr_container_t *event,
+                          void *user_data)
+{
+    printf("### app get sensor event\n");
+    attr_container_dump(event);
+}
+
+void on_init()
+{
+    char *user_data;
+    attr_container_t *config;
+
+    printf("### app on_init 1\n");
+    /* open a sensor */
+    user_data = malloc(100);
+    printf("### app on_init 2\n");
+    sensor = sensor_open("sensor_test", 0, sensor_event_handler, user_data);
+    printf("### app on_init 3\n");
+
+    /* config the sensor */
+    sensor_config(sensor, 1000, 0, 0);
+    printf("### app on_init 4\n");
+
+    /*
+     config = attr_container_create("sensor config");
+     sensor_config(sensor, config);
+     attr_container_destroy(config);
+     */
+}
+
+void on_destroy()
+{
+    if (NULL != sensor) {
+        sensor_config(sensor, 0, 0, 0);
+    }
+    /* real destroy work including killing timer and closing sensor is
+       accomplished in wasm app library version of on_destroy() */
+}
diff --git a/scriptsrcs/wamr/samples/simple/wasm-apps/timer.c 
b/scriptsrcs/wamr/samples/simple/wasm-apps/timer.c
new file mode 100755
index 0000000..d6605fe
--- /dev/null
+++ b/scriptsrcs/wamr/samples/simple/wasm-apps/timer.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "wasm_app.h"
+
+/* User global variable */
+static int num = 0;
+
+/* Timer callback */
+void timer1_update(user_timer_t timer)
+{
+    printf("Timer update %d\n", num++);
+}
+
+void on_init()
+{
+    user_timer_t timer;
+
+    /* set up a timer */
+    timer = api_timer_create(1000, true, false, timer1_update);
+    api_timer_restart(timer, 1000);
+}
+
+void on_destroy()
+{
+    /* real destroy work including killing timer and closing sensor is
+       accomplished in wasm app library version of on_destroy() */
+}
diff --git a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/README.md 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/README.md
new file mode 100755
index 0000000..06d17a6
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/README.md
@@ -0,0 +1,36 @@
+# IoT Application Store
+Wasm application management portal for WAMR
+
+# Requirement
+Install django with pip3  
+```
+pip3 install django
+```
+
+# Run 
+1. Start wasm server  
+    ```
+    cd wasm_django/server
+    python3 wasm_server.py
+    ```
+
+2. Start IoT application management web portal  
+    ```
+    cd wasm_django
+    python3 manage.py runserver 0.0.0.0:80
+    ```
+
+3. Download WAMR runtime from [help](http://localhost/help/) page
+    > NOTE: You need to start web server according to *step 2* before 
accessing this link!
+
+4. Start a WAMR runtime from localhost  
+    ```
+    ./simple
+    ```
+    or from other computers
+    ```
+    ./simple -a [your.server.ip.address]
+    ```
+
+# Online demo
+    http://39.106.110.7/
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/db.sqlite3 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/db.sqlite3
new file mode 100755
index 
0000000000000000000000000000000000000000..211576ca3e5992d4ec1abe50c687985dcaa1f3f0
GIT binary patch
literal 45056
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

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/__init__.py 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/__init__.py
new file mode 100755
index 0000000..e69de29
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/admin.py 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/admin.py
new file mode 100755
index 0000000..8c38f3f
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/apps.py 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/apps.py
new file mode 100755
index 0000000..d43cc4b
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class DevicesConfig(AppConfig):
+    name = 'devices'
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/migrations/__init__.py
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/migrations/__init__.py
new file mode 100755
index 0000000..e69de29
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/models.py 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/models.py
new file mode 100755
index 0000000..71a8362
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/application.html
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/application.html
new file mode 100755
index 0000000..5585297
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/application.html
@@ -0,0 +1,152 @@
+<!-- /* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/ -->
+{% load static %}
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en">
+
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, 
initial-scale=1.0,shrink-to-fit=no">
+    <title> Wasm-Micro-Runtime </title>
+    <link rel="stylesheet" type="text/css" href="{%static 
'css/application.css'%}"/> 
+    
+<link rel="stylesheet" 
href="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/css/bootstrap.min.css";>
+<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js";></script>
+<script 
src="https://cdn.staticfile.org/popper.js/1.12.5/umd/popper.min.js";></script>
+<script 
src="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/js/bootstrap.min.js";></script>
+</head>
+
+<body  style="background-image: linear-gradient(to right, rgb(248, 248, 248) , 
rgb(194, 194, 190))">
+                                               
+<div id="container" style="background-image: url('{%static 
'photo//totalblack.png'%}')">
+    <div id="content">
+        <div id= "mainnav">
+            <ul>
+                <li ><a 
href="https://github.com/intel/wasm-micro-runtime";>GitHub</a></li>
+                <li ><a href="/">Devices</a></li>
+                <li ><a href="/appstore/">App Store</a></li>
+                <li ><a href="/help/">Help</a></li>
+            </ul>  
+        </div>
+    </div>
+    <div class="headers" style="background-image: url('{%static 
'photo/milky-way-2695569_1280.jpg'%}')">
+        <h1 id="maintitle">WebAssembly Micro Runtime - APP Store Demo</h1>
+    </div>
+</div>
+                                       
+
+    
+<div class="row">
+        <div class="col-sm-2 col-md-2 col-lg-2 col-xl-2"></div>
+        <div class="col-sm-8 col-md-8 col-lg-8 col-xl-8" id="section">
+            <div id="photo"> 
+            <p>
+                <img src="{%static 'photo/net_device.png'%}" ;height="65" 
width="65" />
+            </p>
+            </div>
+            <div id="IPs">IP : </div>
+            <div id="ports">Port : </div>
+            <div id="installs">Installed apps : </div>
+        </div>
+        <div class="col-sm-2 col-md-2 col-lg-2 col-xl-2"></div>
+</div>
+
+    <div class="middlebox" style="display:none;">
+        <div class="warning">Dialog Box</div>
+        <div class="findapp"> APP </div>
+        <button class="surebtn" type="button" value="sure">OK</button>
+    </div>
+
+    <div class="deletebox" style="display:none;">
+            <div class="warning2">Dialog Box</div>
+            <div class="findapp"> APP </div>
+            <button class="suresbtn" type="button" value="sure">OK</button>
+            <button class="cancelsbtn" type="button" 
value="Cancel">Cancel</button>
+    </div>
+
+    <div id="loading">
+        <p class="loadapp"> app is downloading now </p>
+        <div id="preloader">
+            <div id="loader"></div>
+        </div>
+    </div>
+
+    
+<div class="main">
+    <div class="mainbox">
+        <div class= "close"> × </div>
+        <div class="hotapps">HOT Applications</div>
+        <div class="col-sm-6" id="searchbar">
+                <form method="post" action="/apps/" 
id="form_addServiceInfoAll">
+                    {% csrf_token %}
+                    <div class="input-group">
+                        <input type="text" name="mykey" class="form-control" 
placeholder="Input the product name" required />
+                        <input type="hidden" name="voip" id="aa" value="">
+                        <input type="hidden" name="voport" id="bb" value="">
+                        <span class="input-group-btn">
+                            <input type="submit" class="btn btn-default" 
value="Search" />
+                        </span>
+                    </div>
+                </form>
+        </div>
+        <div id="scrollba">
+            <div id="Dapplications">
+                <div id="appslogo" style="width:45px; height:25px; float:left; 
"><img src="{%static 'photo/application.png'%}" ;height="35" width="35" 
/></div> 
+                <p id="appsinfo1" 
style="font-size:15px;font-family:'sansationlight';width:310px; height:25px; 
float:left; ">    Product Name:   </p>
+                <p id="appsinfo2" 
style="font-size:15px;font-family:'sansationlight';width:120px; height:25px; 
float:left; ">    Current Version:   </p>
+                <button class="mybtn2" type="button" onclick="getthis(this)" 
value="downloadit"> ↓ Install</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+
+    <div class="col-sm-8 col-md-8 col-lg-8 col-xl-8" id="download">
+            <p class = "explain pull-left" >List of Installed Apps:</p>
+            <button id="btn" class="btn btn-outline-primary pull-right" 
style="float:right" type="button" value="add">Install Application</button>
+    </div>
+
+
+    <div id="APPS" class="sourceapp">
+        <div id="applications">
+            <div id="applogo"><img src="{%static 'photo/app(1).png'%}" 
;height="35" width="35" /></div>
+            <div id="appinfo1"> Product Name: </div>
+            <div id="appinfo2"> Staus: </div>
+            <div id="appinfo3"> Current Version: </div>
+        </div>
+        <div id="delete" ><img class="mybtn" style="cursor:pointer" 
src="{%static 'photo/delete.png'%}" ;height="35" width="35" /></div> 
+    </div>
+
+<footer class="footer">  Copyright&copy; intel.com</footer>
+                    
+
+
+<script src="http://code.jquery.com/jquery-2.1.4.min.js";></script>
+<script>
+var alist = {{alist|safe}}; /*alist is a list of downloaded apps under the 
current device*/
+var dlist = {{dlist|safe}}; /*dlist saves the device info that includes its 
IP, Port and number of apps*/
+var llist = {{llist|safe}}; /*llist is a list of apps avaliable for installing 
that are synchronously updated with appstore*/
+var open_status ={{open_status|safe}};/*check is the search bar 
working&searching,otherwise, close window and return to the main page*/
+var search_node ={{search_node|safe}};/*THe queried app node*/
+</script>
+<script type="text/javascript" src="{%static 'js/application.js'%}"></script>
+
+</body>                                
+
+</html>
+
+
+
+    
\ No newline at end of file
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html
new file mode 100755
index 0000000..36f1fb8
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html
@@ -0,0 +1,106 @@
+<!-- /* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/ -->
+{% load static %}
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en">
+
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, 
initial-scale=1.0,shrink-to-fit=no">
+
+    <title> Wasm-Micro-Runtime </title>
+    <link rel="stylesheet" type="text/css" href="{%static 
'css/appstore.css'%}"/> 
+
+<link rel="stylesheet" 
href="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/css/bootstrap.min.css";>
+<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js";></script>
+<script 
src="https://cdn.staticfile.org/popper.js/1.12.5/umd/popper.min.js";></script>
+<script 
src="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/js/bootstrap.min.js";></script>
+</head>
+
+<body  style="background-color:rgb(240, 240, 240)">
+                                               
+<div id="container" style="background-image: url('{%static 
'photo//totalblack.png'%}')">
+    <div id="content">
+        <div id= "mainnav">
+            <ul>
+                <li ><a 
href="https://github.com/intel/wasm-micro-runtime";>GitHub</a></li>
+                <li ><a href="/">Devices</a></li>
+                <li ><a href="/appstore/">App Store</a></li>
+                <li ><a href="/help/">Help</a></li>
+            </ul>  
+        </div>
+    </div>
+    <div class="headers" style="background-image: url('{%static 
'photo/milky-way-2695569_1280.jpg'%}')">
+        <h1 id="maintitle">WebAssembly Micro Runtime - APP Store Demo</h1>
+    </div>
+</div>
+<!-- <div id="introinfo"></div> -->
+<!-- <div class="style-one"></div> -->
+
+<div class="deletebox" style="display:none;">
+        <div class="warning2">Dialog Box</div>
+            <div class="findapp"> APP </div>
+        <button class="suresbtn" type="button" value="sure">OK</button>
+        <button class="delsbtn" type="button" value="Cancel">Cancel</button>
+</div>
+
+ <div id = "introstore">
+    <div id="applicationlist">
+        <div class="bar">
+            <div class="leftpart">The products </div>
+            <div style="position:relative; float:left; left:50px; 
font-size:14px; height:50px; top:10px;">Application List</div>
+            <div class="rightpart">
+                <form action="/upload" method = "POST" 
enctype="multipart/form-data">
+                    {%csrf_token%}
+                    <div class="stylehere">
+                        <input type ="file" required name="myfile" class = 
"file">
+                        <a href="#" class="choosestyle">Choose File</a>
+                    </div>                
+                    <div class="stylehere">
+                        <input type="submit" value = "upload" class="btn 
btn-info">
+                    </div>
+                </form>
+            </div>
+        </div>
+        <div class = "appbook">
+                <div id="applications">
+                    <div id="appimage" ><img class="mysoftware" src="{%static 
'photo/software-icon-32081.png'%}" ;height="50" width="40"/></div>
+                    <p id="appinfo1" style="position:relative; 
font-size:15px;width:35%; height:25px; float:left; left:5%;">    Product Name:  
 </p>
+                    <p id="appinfo2" style="position:relative; 
font-size:15px;width:30%; height:25px; float:left; left:5%;">   Product 
Version:   </p>
+                    <p id="lable" 
style="position:relative;font-size:11px;font-family:'logo';width:10%; 
height:25px; float:left; left:5%;">   Preloaded Apps   </p>  
+                    <button id="delbutton" type="button" style="position: 
relative; height:25px; float:left; left:5%;" onclick="deleteClick(this)" method 
= "get" name="delete">Remove</button>                        
+                </div>
+            </div>
+            <br>
+        </div>
+    </div>
+</div> 
+
+<footer class="footer">
+    Copyright&copy; intel.com
+</footer>
+
+<script src="http://code.jquery.com/jquery-2.1.4.min.js";></script>  
+<script>
+var elist = {{staticlist|safe}}/*saves all the apps that preloaded and are not 
able to be removed from applestore*/
+var flist = {{flist|safe}} /*a list of locally uploaded apps installed by 
users*/
+var ulist = {{ulist|safe}} /*Declare about is the app avaliable for uploading 
to the appstore: wasm_file OR preloaded already*/
+</script>
+<script type="text/javascript" src="{%static 'js/appstore.js'%}"></script>
+
+</body>
+
+</html>
+
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html
new file mode 100755
index 0000000..6aef0f2
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html
@@ -0,0 +1,119 @@
+<html xmlns="http://www.w3.org/1999/xhtml";><head><meta 
http-equiv="Content-Type" content="text/html; charset=UTF-8">
+
+<meta name="viewport" content="initial-scale=1, maximum-scale=1, 
user-scalable=no">
+<title>wasm-micro-runtime</title>
+
+<style type="text/css">
+html, body{overflow:hidden;margin:0;background:#000;}
+body{font-family:'Open Sans', 'Helvetica Neue', 'Hiragino Sans GB', 'LiHei 
Pro', Arial, sans-serif;color:#333;}
+#wrapper{position:absolute;left:0;width:320px;text-align:center;top:50%;left:50%;margin-left:-160px;margin-top:-160px;-webkit-user-select:none;-moz-user-select:none;user-select:none;}
+h1{font-family:'Montserrat', 'Helvetica Neue', Arial, 
sans-serif;font-weight:700;font-size:50px;letter-spacing:9px;text-transform:uppercase;color:#eee;margin:12px
 0;left:4px;}
+h2{color:#999;font-weight:normal;font-size:20px;letter-spacing:.200em;margin-bottom:30px;left:3px;}
+h1, h2{position:relative;}
+p{font-size:14px;line-height:2em;margin:0;letter-spacing:2px;}
+canvas{position:absolute;top:0;left:0;z-index:0;width:100%;height:100%;pointer-events:none;}
+a{color:#999;text-decoration:none;transition:color .2s ease;}
+a:hover{color:#f33;}
+</style>
+
+
+
+</head>
+<body>
+
+<script type="text/javascript" src="./js/jquery.min.js"></script>
+
+<div id="wrapper">
+       <h1>404</h1>
+       <h2>Server Not Found</h2>
+       <p><a href="https://github.com/intel/wasm-micro-runtime"; 
target="_blank">Github</a></p>
+</div>
+
+
+<canvas width="1920" height="917"></canvas>
+
+<script type="text/javascript">
+document.addEventListener('touchmove', function (e) {
+       e.preventDefault()
+})
+var c = document.getElementsByTagName('canvas')[0],
+       x = c.getContext('2d'),
+       pr = window.devicePixelRatio || 1,
+       w = window.innerWidth,
+       h = window.innerHeight,
+       f = 90,
+       q,
+       m = Math,
+       r = 0,
+       u = m.PI*2,
+       v = m.cos,
+       z = m.random
+c.width = w*pr
+c.height = h*pr
+x.scale(pr, pr)
+x.globalAlpha = 0.6
+function i(){
+       x.clearRect(0,0,w,h)
+       q=[{x:0,y:h*.7+f},{x:0,y:h*.7-f}]
+       while(q[1].x<w+f) d(q[0], q[1])
+}
+function d(i,j){   
+       x.beginPath()
+       x.moveTo(i.x, i.y)
+       x.lineTo(j.x, j.y)
+       var k = j.x + (z()*2-0.25)*f,
+               n = y(j.y)
+       x.lineTo(k, n)
+       x.closePath()
+       r-=u/-50
+       x.fillStyle = '#'+(v(r)*127+128<<16 | v(r+u/3)*127+128<<8 | 
v(r+u/3*2)*127+128).toString(16)
+       x.fill()
+       q[0] = q[1]
+       q[1] = {x:k,y:n}
+}
+function y(p){
+       var t = p + (z()*2-1.1)*f
+       return (t>h||t<0) ? y(p) : t
+}
+document.onclick = i
+document.ontouchstart = i
+i()
+</script>
+
+<script type="text/javascript">
+var snow = function() {
+if(1==1) {
+$("body").append('<canvas id="christmasCanvas" style="top: 0px; left: 0px; 
z-index: 5000; position: fixed; pointer-events: none;"></canvas>');
+var b = document.getElementById("christmasCanvas"), a = b.getContext("2d"), d 
= window.innerWidth, c = window.innerHeight;
+b.width = d;
+b.height = c;
+for(var e = [], b = 0;b < 70;b++) {
+e.push({x:Math.random() * d, y:Math.random() * c, r:Math.random() * 4 + 1, 
d:Math.random() * 70})
+}
+var h = 0;
+window.intervral4Christmas = setInterval(function() {
+a.clearRect(0, 0, d, c);
+a.fillStyle = "rgba(255, 255, 255, 0.6)";
+a.shadowBlur = 5;
+a.shadowColor = "rgba(255, 255, 255, 0.9)";
+a.beginPath();
+for(var b = 0;b < 70;b++) {
+var f = e[b];
+a.moveTo(f.x, f.y);
+a.arc(f.x, f.y, f.r, 0, Math.PI * 2, !0)
+}
+a.fill();
+h += 0.01;
+for(b = 0;b < 70;b++) {
+if(f = e[b], f.y += Math.cos(h + f.d) + 1 + f.r / 2, f.x += Math.sin(h) * 2, 
f.x > d + 5 || f.x < -5 || f.y > c) {
+e[b] = b % 3 > 0 ? {x:Math.random() * d, y:-10, r:f.r, d:f.d} : Math.sin(h) > 
0 ? {x:-5, y:Math.random() * c, r:f.r, d:f.d} : {x:d + 5, y:Math.random() * c, 
r:f.r, d:f.d}
+}
+}
+}, 70)
+}
+}
+snow();
+</script><canvas id="christmasCanvas" style="top: 0px; left: 0px; z-index: 
5000; position: fixed; pointer-events: none;" width="1920" 
height="917"></canvas>
+
+
+</body></html>
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html
new file mode 100755
index 0000000..2e77cfa
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html
@@ -0,0 +1,110 @@
+<!-- /* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/ -->
+{% load static %}
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en">
+
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title> Wasm-Micro-Runtime </title>
+    <script 
src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js";></script>
+    <!-- <link rel="stylesheet" type="text/css" 
href="{%static%/css/index.css"/>  -->
+    <!-- <link rel="stylesheet" type="text/css" 
href="/home/xujun/mysite/static/css/index.css"/> -->
+
+    <link rel="stylesheet" 
href="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/css/bootstrap.min.css";>
+    <script 
src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js";></script>
+    <script 
src="https://cdn.staticfile.org/popper.js/1.12.5/umd/popper.min.js";></script>
+    <script 
src="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/js/bootstrap.min.js";></script>
+
+    <head>
+
+    <body>
+        <div class="container">
+            <div class="row clearfix">
+                <div class="col-md-12 column">
+                    <div class="jumbotron">
+                        <h1>
+                            How to use?
+                        </h1>
+                        <p>
+                            1. Download a simple runtime (build for ubuntu 
16.04 64 bits, other platforms please build
+                            from the <a 
href="https://github.com/intel/wasm-micro-runtime";>source code</a>)
+                        </p>
+                        <p>
+                            2. In the terminal: <code>cd ~/Download && 
./simple -a 39.106.110.7</code>
+                        </p>
+                        <div class="span12">
+                            <div class="alert alert-info">
+                                <!-- <button class="close" type="button" 
data-dismiss="alert">×</button> -->
+                                <h5>
+                                    Notes:
+                                </h5> We also have a <strong>UI-enabled 
runtime</strong>, please <a
+                                    href="../static/upload/simple">download 
here</a> and enjoy.</strong> It may require
+                                a few more setups.
+                                <p>Before running the UI-enabled runtime, 
please install some required softwares:</p>
+                                <p><code>sudo apt-get install 
libsdl2-2.0-0:i386</code> </p>
+                                <p>For more details please refer to this <a
+                                        
href="https://github.com/intel/wasm-micro-runtime/tree/master/samples/littlevgl";>guide</a>
+                                </p>
+                                <p><code>cd ~/Download && ./wasm_runtime_wgl 
-a 39.106.110.7</code></p>
+                            </div>
+                        </div>
+                        <p>
+                            3. Return to device page, find your device 
according to the IP address and click it, you
+                            will enter application installation page
+                        </p>
+                        <p>
+                            4. In the application installation page, click the 
Install Application button, and chose an
+                            app to install. (The "ui_app" is only for 
UI_enabled_runtimes, simple runtime can't install
+                            this app)
+                        </p>
+                        <p>
+                            5. If you want to upload a new application, go to 
App Store page, choose a file and click
+                            upload
+                        </p>
+                        <p>
+                            <a class="btn btn-primary btn-large" href="/">Go 
Back</a>
+                            <a class="btn btn-primary btn-large" 
href="../static/upload/simple">Download
+                                simple_runtime</a>
+                            <a class="btn btn-primary btn-large" 
href="../static/upload/wasm_runtime_wgl">Download
+                                UI_enabled_runtime</a>
+                        </p>
+                    </div>
+                    <div class="container">
+                        <div class="card">
+                            <div class="card-body">
+                                <h4 class="card-title">Like this project?</h4>
+                                <p class="card-text">Join us and build a 
powerful and interesting world for embedded
+                                    devices!</p>
+                                <iframe
+                                    
src="https://ghbtns.com/github-btn.html?user=intel&repo=wasm-micro-runtime&type=star&count=true&size=large";
+                                    frameborder="0" scrolling="0" 
width="160px" height="30px"></iframe>
+                                <iframe
+                                    
src="https://ghbtns.com/github-btn.html?user=intel&repo=wasm-micro-runtime&type=fork&count=true&size=large";
+                                    frameborder="0" scrolling="0" 
width="158px" height="30px"></iframe>
+                                <p>
+                                    <a 
href="https://github.com/intel/wasm-micro-runtime"; class="btn btn-success">View
+                                        on GitHub</a>
+                                </p>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </body>
+
+</html>
\ No newline at end of file
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html
new file mode 100755
index 0000000..88f0e92
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html
@@ -0,0 +1,99 @@
+<!-- /* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/ -->
+{% load static %}
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en">
+
+<head>
+       <meta charset="utf-8" />
+       <meta name="viewport" content="width=device-width, 
initial-scale=1.0,shrink-to-fit=no">
+    <title> Wasm-Micro-Runtime </title>
+       <link rel="stylesheet" type="text/css" href="{%static 
'css/index.css'%}"/> 
+    
+<link rel="stylesheet" 
href="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/css/bootstrap.min.css";>
+<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js";></script>
+<script 
src="https://cdn.staticfile.org/popper.js/1.12.5/umd/popper.min.js";></script>
+<script 
src="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/js/bootstrap.min.js";></script>
+</head>
+
+
+<body>
+<div id="container" style="background-image: url('{%static 
'photo/totalblack.png'%}')">
+    <div id="content">
+        <div id= "mainnav">
+            <ul>
+                <li ><a 
href="https://github.com/intel/wasm-micro-runtime";>GitHub</a></li>
+                <li ><a href="/">Devices</a></li>
+                <li ><a href="/appstore/">App Store</a></li>
+                <li ><a href="/help/">Help</a></li>
+            </ul>  
+        </div>
+    </div>
+    <div class="headers" style="background-image: url('{%static 
'photo/milky-way-2695569_1280.jpg'%}')">
+        <h1 id="maintitle">WebAssembly Micro Runtime - APP Store Demo</h1>
+    </div>
+</div>  
+        
+<div class="row">
+    <div class="col-sm-1 col-md-1 col-lg-1 col-xl-1"></div>
+    <div class="col-sm-4 col-md-4 col-lg-4 col-xl-4">
+        <div id="photo2">
+            <p>
+                <img src="{%static 'photo/net_device.png'%}" ;height="45" 
width="45" />
+            </p>
+        </div>
+        <div id="devic"><p style="font-size:22px;">The devices</p></div>
+    </div>
+</div>
+ 
+<div id="dividebar"></div>
+
+
+<div id="devices" class="devics">
+    <div class="deviceClick" style="cursor:pointer" 
onclick="deviceClick(this)">
+        <div id="section">
+            <div id="photo">
+                <p>
+                    <img src="{%static 'photo/net_device.png'%}" ;height="60" 
width="60" />
+                </p>
+            </div>
+            <div id="IPs">IP : </div>
+            <div id="ports">Port : </div>
+            <div id="installs">Installed apps : </div>
+        </div>
+        <div class="smenu">
+            <p id="del" style="cursor:pointer">
+                <img class = "toapps" src="{%static 'photo/menu.png'%}" href= 
"javascript:void(0);" height="30" width="30" />
+            </p>
+        </div>
+    </div>
+</div>
+
+<!-- <button class="prev" type="button" value="prev" 
onclick="prevpage(this)">Previous</button>-->
+<!-- <button class="next" type="button" value="next" 
onclick="nextpage(this)">Next</button> -->
+
+<footer class="footer">
+    Copyright&copy; intel.com
+</footer>
+
+
+<script src="http://code.jquery.com/jquery-2.1.4.min.js";></script>
+<script>
+var dlist = {{dlist|safe}};/*Devices List that render to the current page*/
+</script>        
+<script type="text/javascript" src="{%static 'js/index.js'%}"></script>
+</body>
+
+</html>
\ No newline at end of file
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py
new file mode 100755
index 0000000..7ce503c
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py
new file mode 100755
index 0000000..4fd4c09
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py
@@ -0,0 +1,284 @@
+'''
+ /* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'''
+
+# _*_
+from django.shortcuts import render, render_to_response
+from django.http import HttpResponse, HttpResponseRedirect, 
HttpResponseNotFound
+import json
+import socket
+import os
+
+# Create your views here.
+
+
+avaliable_list = [
+    {'ID': 'timer', 'Version': '1.0'}, 
+    {'ID': 'connection', 'Version': '1.0'}, 
+    {'ID': 'event_publisher', 'Version': '3.0'}, 
+    {'ID': 'event_subscriber', 'Version': '1.0'}, 
+    {'ID': 'request_handler', 'Version': '1.0'}, 
+    {'ID': 'sensor', 'Version': '1.0'}, 
+    {'ID': 'ui_app', 'Version': '1.0'}
+]
+
+# Help
+def help(req):
+# return "Help" page 
+    return render(req, "help.html")
+
+# View
+def index(req):
+    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+
+    host = '127.0.0.1'
+    port = 8889
+    msg = ""
+    err = ""
+
+    try:
+        s.connect((host, port))
+        s.send(bytes("query:all", encoding='utf8'))
+        s.settimeout(10)
+        msg = s.recv(1024)
+    except socket.timeout as e:
+        err = "empty"
+        print("no client connected")
+    except socket.error as e:
+        err = "refused"
+        print("server not started")
+
+    s.close()
+
+    device_list = []
+    if msg != "":
+        devices = msg.decode('utf-8').split("*")
+        for dev in devices:
+            dev_info = eval(dev)
+            addr = dev_info['addr']
+            port = dev_info['port']
+            apps = dev_info['num']
+            device_list.append({'IP': addr, 'Port': port, 'apps': apps})    
+    else:
+        if err == "refused":
+            return render(req, "empty.html")
+
+    dlist = device_list
+
+    return render(req, 'mysite.html', {'dlist': json.dumps(dlist)})
+
+
+def apps(req):
+    open_status = ''
+    search_node = []
+    if req.method == "POST":
+            dev_search = req.POST['mykey']
+            dev_addr = req.POST['voip']
+            dev_port = req.POST['voport']
+            open_status = 'open'
+            for i in avaliable_list:
+                if i['ID'] == dev_search:
+                    search_node = [{'ID':dev_search, 'Version': '1.0'}]
+                    print("search_node:",search_node)
+                    break
+                else:
+                    search_node = ["Nothing find"]
+                    print( "final:",search_node)
+    else:
+        dev_addr = req.GET['ip']
+        dev_port = req.GET['port']
+        open_status = 'close'
+
+    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+    host = '127.0.0.1'
+    port = 8889
+    msg = ""
+    err = ""    
+
+    try:
+        s.connect((host, port))
+        s.send(bytes("query:"+dev_addr+":"+str(dev_port), encoding='utf8'))
+        msg = s.recv(1024)
+    except socket.error as e:
+        print("unable to connect to server")
+        msg = b"fail"
+    s.close()
+
+    app_list = []
+
+    if msg != "":
+        if msg.decode() == "fail":
+            return render(req, "empty.html")
+        else:
+            dic = eval(msg.decode(encoding='utf8'))
+            app_num = dic["num"]
+            for i in range(app_num):
+                app_list.append(
+                    {'pname': dic["applet"+str(i+1)], 'status': 'Installed', 
'current_version': '1.0'})
+
+    alist = app_list
+    device_info = []
+    device_info.append(
+        {'IP': dev_addr, 'Port': str(dev_port), 'apps': app_num})
+
+    print(device_info)
+    return render(req, 'application.html', {'alist': json.dumps(alist), 
'dlist': json.dumps(device_info), 'llist': json.dumps(avaliable_list),
+    "open_status":json.dumps(open_status),"search_node": 
json.dumps(search_node),})
+
+
+def appDownload(req):
+    dev_addr = req.GET['ip']
+    dev_port = req.GET['port']
+    app_name = req.GET['name']
+
+    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+
+    host = '127.0.0.1'
+    port = 8889
+    msg = ""
+
+    app_path = os.path.abspath(os.path.join(os.getcwd(), "static", "upload"))
+    if app_path[-1] != '/':
+        app_path += '/'
+
+    try:
+        s.connect((host, port))
+        s.send(bytes("install:"+dev_addr+":"+str(dev_port)+":"+app_name +
+                     ":"+app_path + app_name + ".wasm", encoding='utf8'))
+        msg = s.recv(1024)
+    except socket.error as e:
+        print("unable to connect to server")
+    s.close()
+
+    success = "ok"
+    fail = "Fail!"
+    status = [success, fail]
+    print(msg)
+    if msg == b"fail":
+        return HttpResponse(json.dumps({
+            "status": fail
+        }))
+    elif msg == b"success":
+        return HttpResponse(json.dumps({
+            "status": success
+        }))
+    else:
+        return HttpResponse(json.dumps({
+            "status": eval(msg.decode())["error message"].split(':')[1]
+        }))
+
+
+def appDelete(req):
+    dev_addr = req.GET['ip']
+    dev_port = req.GET['port']
+    app_name = req.GET['name']
+
+    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+
+    host = '127.0.0.1'
+    port = 8889
+    s.connect((host, port))
+    s.send(bytes("uninstall:"+dev_addr+":" +
+                 str(dev_port)+":"+app_name, encoding='utf8'))
+    msg = s.recv(1024)
+    s.close()
+    r = HttpResponse("ok")
+    return r
+
+static_list = [{'ID': 'timer', 'Version': '1.0'}, {'ID': 'connection', 
'Version': '1.0'}, {'ID': 'event_publisher', 'Version': '3.0'}, {
+         'ID': 'event_subscriber', 'Version': '1.0'}, {'ID': 
'reuqest_handler', 'Version': '1.0'}, {'ID': 'sensor', 'Version': '1.0'}, 
{'ID': 'ui_app', 'Version': '1.0'}]
+
+def store(req):
+
+    store_path = os.path.join('static', 'upload')
+    status = []
+
+    print(user_file_list)
+    return render(req, 'appstore.html', {'staticlist': 
json.dumps(static_list), 'flist': 
json.dumps(user_file_list),'ulist':json.dumps(status)})
+
+user_file_list = []
+files_list = []
+def uploadapps(req):
+    status = []
+    local_list = 
['timer','connection','event_publisher','event_subscriber','reuqest_handler','sensor']
+    req.encoding = 'utf-8'
+    if req.method == 'POST':
+        myfile = req.FILES.get("myfile", None)
+        obj = req.FILES.get('myfile')
+        store_path = os.path.join('static', 'upload')
+        file_path = os.path.join('static', 'upload', obj.name)
+
+        if not os.path.exists(store_path):
+            os.makedirs(store_path)
+        
+        file_name = obj.name.split(".")[0]
+        file_prefix = obj.name.split(".")[-1]
+
+
+        if file_prefix != "wasm":
+            status = ["Not a wasm file"]
+        elif file_name in local_list:
+            status = ["This App is preloaded"]   
+        elif file_name in files_list:
+            status = ["This App is already uploaded"]        
+        else:
+            status = []
+            avaliable_list.append({'ID': file_name, 'Version': '1.0'})
+            user_file_list.append({'ID': file_name, 'Version': '1.0'})
+            files_list.append(file_name)   
+       
+        print(user_file_list)
+        f = open(file_path, 'wb')
+        for chunk in obj.chunks():
+            f.write(chunk)
+        f.close()
+        return render(req, 'appstore.html', {'staticlist': 
json.dumps(static_list), 'flist': 
json.dumps(user_file_list),'ulist':json.dumps(status)})
+
+appname_list = []
+
+def addapps(request):
+    types = ''
+    print("enter addapps")
+    request.encoding = 'utf-8'
+    app_dic = {'ID': '', 'Version': ''}
+
+    # if request.method == 'get':
+    if "NAME" in request.GET:
+        a_name = request.GET['NAME']
+        if a_name != "" and a_name not in appname_list:
+            appname_list.append(a_name)
+            message = request.GET['NAME'] + request.GET['Version']
+            app_dic['ID'] = request.GET['NAME']
+            app_dic['Version'] = request.GET['Version']
+            avaliable_list.append(app_dic)
+        else:
+            types = "Exist"
+    print(avaliable_list)
+    return render(request, 'appstore.html', {'alist': 
json.dumps(avaliable_list)})
+
+def removeapps(req):
+    app_name = req.GET['name']
+    app_version = req.GET['version']
+    remove_app = {'ID': app_name, 'Version': app_version}
+    avaliable_list.remove(remove_app)
+    user_file_list.remove(remove_app)
+    files_list.remove(app_name)
+    return render(req, 'appstore.html', {'alist': 
json.dumps(avaliable_list),'flist': json.dumps(user_file_list)})
+
+# Test
+if __name__ == "__main__":
+    print(device_list[0]['IP'])
+    print(device['IP'])
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/manage.py 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/manage.py
new file mode 100755
index 0000000..341863c
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/manage.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+"""Django's command-line utility for administrative tasks."""
+import os
+import sys
+
+
+def main():
+    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
+    try:
+        from django.core.management import execute_from_command_line
+    except ImportError as exc:
+        raise ImportError(
+            "Couldn't import Django. Are you sure it's installed and "
+            "available on your PYTHONPATH environment variable? Did you "
+            "forget to activate a virtual environment?"
+        ) from exc
+    execute_from_command_line(sys.argv)
+
+
+if __name__ == '__main__':
+    main()
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/__init__.py 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/__init__.py
new file mode 100755
index 0000000..e69de29
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py
new file mode 100755
index 0000000..7eb3685
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py
@@ -0,0 +1,136 @@
+"""
+Django settings for mysite project.
+
+Generated by 'django-admin startproject' using Django 2.2.2.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/2.2/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/2.2/ref/settings/
+"""
+
+import os
+from django.conf.global_settings import STATIC_ROOT
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = '8m05#6yx5wcygj*a+v6+=-y(#o+(z58-3!epq$u@5)64!mmu8q'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = ['*']
+
+
+# Application definition
+
+INSTALLED_APPS = [
+    'django.contrib.admin',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+
+ 
+    'devices',
+]
+
+MIDDLEWARE = [
+    'django.middleware.security.SecurityMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'mysite.urls'
+
+TEMPLATES = [
+    {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+        'DIRS': [],
+        'APP_DIRS': True,
+        'OPTIONS': {
+            'context_processors': [
+                'django.template.context_processors.debug',
+                'django.template.context_processors.request',
+                'django.contrib.auth.context_processors.auth',
+                'django.contrib.messages.context_processors.messages',
+            ],
+        },
+    },
+]
+
+WSGI_APPLICATION = 'mysite.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.sqlite3',
+        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
+    }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+    {
+        'NAME': 
'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+    },
+    {
+        'NAME': 
'django.contrib.auth.password_validation.MinimumLengthValidator',
+    },
+    {
+        'NAME': 
'django.contrib.auth.password_validation.CommonPasswordValidator',
+    },
+    {
+        'NAME': 
'django.contrib.auth.password_validation.NumericPasswordValidator',
+    },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/2.2/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+APPEND_SLASH = False
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/2.2/howto/static-files/
+
+STATIC_URL = '/static/'
+HERE = os.path.dirname(os.path.abspath(__file__))
+HERE = os.path.join(HERE,'../')
+STATICFILES_DIRS = (os.path.join(HERE,'static/'),)
+#STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),)
+#STATIC_ROOT = (os.path.join(os.path.dirname(_file_),'static')
+#templates
+TEMPLATE_DIRS=[
+   '/home/xujun/mysite/templates', 
+]
+
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py
new file mode 100755
index 0000000..8a74b55
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py
@@ -0,0 +1,41 @@
+#config:utf-8
+
+"""mysite URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+    https://docs.djangoproject.com/en/2.2/topics/http/urls/
+Examples:
+Function views
+    1. Add an import:  from my_app import views
+    2. Add a URL to urlpatterns:  path('', views.home, name='home')
+Class-based views
+    1. Add an import:  from other_app.views import Home
+    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
+Including another URLconf
+    1. Import the include() function: from django.urls import include, path
+    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
+"""
+from django.contrib import admin
+#from django.conf.urls import include,url
+from django.urls import path,include
+from devices import views as devices_views
+#from login import views as login_views
+
+
+urlpatterns = [
+
+    path('admin/', admin.site.urls),
+    path('',devices_views.index),
+    path('apps/',devices_views.apps),
+    path('appDownload/', devices_views.appDownload),
+    path('appDelete/', devices_views.appDelete),
+    path('appstore/',devices_views.store),
+##    path('apps/appstore/',devices_views.storeofdevic),
+##    path('search/',devices_views.search),
+    path('upload',devices_views.uploadapps),
+    path('removeapps/',devices_views.removeapps),
+    path('help/',devices_views.help),
+    
+]
+
+
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py
new file mode 100755
index 0000000..45e28c9
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py
@@ -0,0 +1,16 @@
+"""
+WSGI config for mysite project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
+
+application = get_wsgi_application()
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py
new file mode 100755
index 0000000..1754b36
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py
@@ -0,0 +1,616 @@
+'''
+ /* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'''
+import select
+import socket
+import queue
+from time import sleep
+import struct
+import threading
+import time
+from ctypes import *
+import json
+import logging
+import os
+
+attr_type_list =  [
+    "ATTR_NONE",
+    "ATTR_TYPE_SHORT",
+    "ATTR_TYPE_INT",
+    "ATTR_TYPE_INT64",
+    "ATTR_TYPE_BYTE",
+    "ATTR_TYPE_UINT16",
+    "ATTR_TYPE_FLOAT",
+    "ATTR_TYPE_DOUBLE",
+    "ATTR_TYPE_BOOLEAN",
+    "ATTR_TYPE_STRING",
+    "ATTR_TYPE_BYTEARRAY"
+]
+
+
+Phase_Non_Start = 0
+Phase_Leading = 1
+Phase_Type = 2
+Phase_Size = 3
+Phase_Payload = 4
+
+
+
+class imrt_link_message(object):
+    def __init__(self):
+        self.leading = bytes([0x12, 0x34])
+        self.phase = Phase_Non_Start
+        self.size_in_phase = 0
+        self.message_type = bytes()
+        self.message_size = bytes()
+        self.payload = bytes()
+        self.msg = bytes()
+
+    def set_recv_phase(self, phase):
+        self.phase = phase
+
+    def on_imrt_link_byte_arrive(self, ch):
+        self.msg += ch
+        if self.phase == Phase_Non_Start:
+            if ch == b'\x12':
+                self.set_recv_phase(Phase_Leading)
+            else:
+                return -1
+        elif self.phase == Phase_Leading:
+            if ch == b'\x34':
+                self.set_recv_phase(Phase_Type)
+            else:
+                self.set_recv_phase(Phase_Non_Start)
+                return -1
+        elif self.phase == Phase_Type:
+            self.message_type += ch
+            self.size_in_phase += 1
+
+            if self.size_in_phase == 2:
+                (self.message_type, ) = struct.unpack('!H', self.message_type)
+                self.size_in_phase = 0
+                self.set_recv_phase(Phase_Size)
+        elif self.phase == Phase_Size:
+            self.message_size += ch
+            self.size_in_phase += 1
+
+            if self.size_in_phase == 4:
+                (self.message_size, ) = struct.unpack('!I', self.message_size)
+                self.size_in_phase = 0
+                self.set_recv_phase(Phase_Payload)
+
+                if self.message_size == b'\x00':
+                    self.set_recv_phase(Phase_Non_Start)
+                    return 0
+
+                self.set_recv_phase(Phase_Payload)
+
+        elif self.phase == Phase_Payload:
+            self.payload += ch
+            self.size_in_phase += 1
+
+            if self.size_in_phase == self.message_size:
+                self.set_recv_phase(Phase_Non_Start)
+                return 0
+
+            return 2
+
+        return 1
+
+
+
+def read_file_to_buffer(file_name):
+    file_object = open(file_name, 'rb')
+    buffer = None
+
+    if not os.path.exists(file_name):
+        logging.error("file {} not found.".format(file_name))
+        return "file not found"
+
+    try:
+        buffer = file_object.read()
+    finally:
+        file_object.close()
+
+    return buffer
+
+def decode_attr_container(msg):
+
+    attr_dict = {}
+
+    buf = msg[26 : ]
+    (total_len, tag_len) = struct.unpack('@IH', buf[0 : 6])
+    tag_name = buf[6 : 6 + tag_len].decode()
+    buf = buf[6 + tag_len : ]
+    (attr_num, ) = struct.unpack('@H', buf[0 : 2])
+    buf = buf[2 : ]
+
+    logging.info("parsed attr:")
+    logging.info("total_len:{}, tag_len:{}, tag_name:{}, attr_num:{}"
+            .format(str(total_len), str(tag_len), str(tag_name), 
str(attr_num)))
+
+    for i in range(attr_num):
+        (key_len, ) = struct.unpack('@H', buf[0 : 2])
+        key_name = buf[2 : 2 + key_len - 1].decode()
+        buf = buf[2 + key_len : ]
+        (type_index, ) = struct.unpack('@c', buf[0 : 1])
+
+        attr_type = attr_type_list[int(type_index[0])]
+        buf = buf[1 : ]
+
+        if attr_type == "ATTR_TYPE_SHORT":
+            (attr_value, ) = struct.unpack('@h', buf[0 : 2])
+            buf = buf[2 : ]
+            # continue
+        elif attr_type == "ATTR_TYPE_INT":
+            (attr_value, ) = struct.unpack('@I', buf[0 : 4])
+            buf = buf[4 : ]
+            # continue
+        elif attr_type == "ATTR_TYPE_INT64":
+            (attr_value, ) = struct.unpack('@q', buf[0 : 8])
+            buf = buf[8 : ]
+            # continue
+        elif attr_type == "ATTR_TYPE_BYTE":
+            (attr_value, ) = struct.unpack('@c', buf[0 : 1])
+            buf = buf[1 : ]
+            # continue
+        elif attr_type == "ATTR_TYPE_UINT16":
+            (attr_value, ) = struct.unpack('@H', buf[0 : 2])
+            buf = buf[2 : ]
+            # continue
+        elif attr_type == "ATTR_TYPE_FLOAT":
+            (attr_value, ) = struct.unpack('@f', buf[0 : 4])
+            buf = buf[4 : ]
+            # continue
+        elif attr_type == "ATTR_TYPE_DOUBLE":
+            (attr_value, ) = struct.unpack('@d', buf[0 : 8])
+            buf = buf[8 : ]
+            # continue
+        elif attr_type == "ATTR_TYPE_BOOLEAN":
+            (attr_value, ) = struct.unpack('@?', buf[0 : 1])
+            buf = buf[1 : ]
+            # continue
+        elif attr_type == "ATTR_TYPE_STRING":
+            (str_len, ) = struct.unpack('@H', buf[0 : 2])
+            attr_value = buf[2 : 2 + str_len - 1].decode()
+            buf = buf[2 + str_len : ]
+            # continue
+        elif attr_type == "ATTR_TYPE_BYTEARRAY":
+            (byte_len, ) = struct.unpack('@I', buf[0 : 4])
+            attr_value = buf[4 : 4 + byte_len]
+            buf = buf[4 + byte_len : ]
+            # continue
+
+        attr_dict[key_name] = attr_value
+
+    logging.info(str(attr_dict))
+    return attr_dict
+
+class Request():
+    mid = 0
+    url = ""
+    action = 0
+    fmt = 0
+    payload = ""
+    payload_len = 0
+    sender = 0
+
+    def __init__(self, url, action, fmt, payload, payload_len):
+        self.url = url
+        self.action = action
+        self.fmt = fmt
+        # if type(payload) == bytes:
+        #     self.payload = bytes(payload, encoding = "utf8")
+        # else:
+        self.payload_len = payload_len
+        if self.payload_len > 0:
+            self.payload = payload
+        
+    
+    def pack_request(self):
+        url_len = len(self.url) + 1
+        buffer_len = url_len + self.payload_len
+
+        req_buffer = struct.pack('!2BH2IHI',1, self.action, self.fmt, 
self.mid, self.sender, url_len, self.payload_len)
+        for i in range(url_len - 1):
+            req_buffer += struct.pack('!c', bytes(self.url[i], encoding = 
"utf8"))
+        req_buffer += bytes([0])
+        for i in range(self.payload_len):
+            req_buffer += struct.pack('!B', self.payload[i])    
+
+        return req_buffer, len(req_buffer)
+
+
+    def send(self, conn, is_install):
+        leading = struct.pack('!2B', 0x12, 0x34)
+        
+        if not is_install:
+            msg_type = struct.pack('!H', 0x0002)
+        else:
+            msg_type = struct.pack('!H', 0x0004)
+        buff, buff_len = self.pack_request()
+        lenth = struct.pack('!I', buff_len)
+
+        try:
+            conn.send(leading)
+            conn.send(msg_type)
+            conn.send(lenth)
+            conn.send(buff)
+        except socket.error as e:
+            logging.error("device closed")
+            for dev in tcpserver.devices:
+                if dev.conn == conn:
+                    tcpserver.devices.remove(dev)
+            return -1
+            
+
+def query(conn):
+    req = Request("/applet", 1, 0, "", 0)
+    if req.send(conn, False) == -1:
+        return "fail"
+    time.sleep(0.05)
+    try:
+        receive_context = imrt_link_message()
+        start = time.time()
+        while True:
+            if receive_context.on_imrt_link_byte_arrive(conn.recv(1)) == 0:
+                break
+            elif time.time() - start >= 5.0:
+                return "fail"
+        query_resp = receive_context.msg
+        print(query_resp)
+    except OSError as e:
+        logging.error("OSError exception occur")
+        return "fail"
+
+    res = decode_attr_container(query_resp)
+
+    logging.info('Query device infomation success')
+    return res
+
+def install(conn, app_name, wasm_file):
+    wasm = read_file_to_buffer(wasm_file)
+    if wasm == "file not found":
+        return "failed to install: file not found"
+        
+    print("wasm file len:")
+    print(len(wasm))
+    req = Request("/applet?name=" + app_name, 3, 98, wasm, len(wasm))
+    if req.send(conn, True) == -1:
+        return "fail"
+    time.sleep(0.05)
+    try:
+        receive_context = imrt_link_message()
+        start = time.time()
+        while True:
+            if receive_context.on_imrt_link_byte_arrive(conn.recv(1)) == 0:
+                break
+            elif time.time() - start >= 5.0:
+                return "fail"
+        msg = receive_context.msg
+    except OSError as e:
+        logging.error("OSError exception occur")
+    # TODO: check return message
+
+    if len(msg) == 24 and msg[8 + 1] == 65:
+        logging.info('Install application success')
+        return "success"
+    else:
+        res = decode_attr_container(msg)
+        logging.warning('Install application failed: %s' % (str(res)))
+        print(str(res))
+
+        return str(res)
+    
+
+def uninstall(conn, app_name):
+    req = Request("/applet?name=" + app_name, 4, 99, "", 0)
+    if req.send(conn, False) == -1:
+        return "fail"
+    time.sleep(0.05)
+    try:
+        receive_context = imrt_link_message()
+        start = time.time()
+        while True:
+            if receive_context.on_imrt_link_byte_arrive(conn.recv(1)) == 0:
+                break
+            elif time.time() - start >= 5.0:
+                return "fail"
+        msg = receive_context.msg
+    except OSError as e:
+        logging.error("OSError exception occur")
+    # TODO: check return message
+
+    if len(msg) == 24 and msg[8 + 1] == 66:
+        logging.info('Uninstall application success')
+        return "success"
+    else:
+        res = decode_attr_container(msg)
+        logging.warning('Uninstall application failed: %s' % (str(res)))
+        print(str(res))
+
+        return str(res)
+
+class Device:
+    def __init__(self, conn, addr, port):
+        self.conn = conn
+        self.addr = addr
+        self.port = port
+        self.app_num = 0
+        self.apps = []
+
+cmd = []
+
+class TCPServer:
+    def __init__(self, server, server_address, inputs, outputs, 
message_queues):
+        # Create a TCP/IP
+        self.server = server
+        self.server.setblocking(False)
+
+        # Bind the socket to the port
+        self.server_address = server_address
+        print('starting up on %s port %s' % self.server_address)
+        self.server.bind(self.server_address)
+
+        # Listen for incoming connections
+        self.server.listen(10)
+
+        self.cmd_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        self.cmd_sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
+
+        self.cmd_sock.bind(('127.0.0.1', 8889))
+        self.cmd_sock.listen(5)
+
+
+        # Sockets from which we expect to read
+        self.inputs = inputs
+        self.inputs.append(self.cmd_sock)
+
+        # Sockets to which we expect to write
+        # 处理要发送的消息
+        self.outputs = outputs
+        # Outgoing message queues (socket: Queue)
+        self.message_queues = message_queues
+
+        self.devices = []
+        self.conn_dict = {}
+
+    def handler_recever(self, readable):
+        # Handle inputs
+        for s in readable:
+            if s is self.server:
+                # A "readable" socket is ready to accept a connection
+                connection, client_address = s.accept()
+                self.client_address = client_address
+                print('connection from', client_address)
+                # this is connection not server
+                # connection.setblocking(0)
+                self.inputs.append(connection)
+
+                # Give the connection a queue for data we want to send
+                # self.message_queues[connection] = queue.Queue()
+
+                res = query(connection)
+                
+                if res != "fail":
+                    dev = Device(connection, client_address[0], 
client_address[1])
+                    self.devices.append(dev)
+                    self.conn_dict[client_address] = connection
+
+                    dev_info = {}
+                    dev_info['addr'] = dev.addr
+                    dev_info['port'] = dev.port
+                    dev_info['apps'] = 0
+
+                    logging.info('A new client connected from ("%s":"%s")' % 
(dev.conn, dev.port))
+
+            elif s is self.cmd_sock:
+                connection, client_address = s.accept()
+                print("web server socket connected")
+                logging.info("Django server connected")
+                self.inputs.append(connection)
+                self.message_queues[connection] = queue.Queue()
+
+            else:
+                data = s.recv(1024)
+                if data != b'':
+                    # A readable client socket has data
+                    logging.info('received "%s" from %s' % (data, 
s.getpeername()))
+                    
+                    # self.message_queues[s].put(data)
+                    # # Add output channel for response
+                   
+                    # if s not in self.outputs:
+                    #     self.outputs.append(s)
+                    
+                    if(data.decode().split(':')[0] == "query"):
+                        if data.decode().split(':')[1] == "all":
+                            resp = []
+                            print('start query all devices')
+                            for dev in self.devices:
+                                dev_info = query(dev.conn)
+                                if dev_info == "fail":
+                                    continue
+                                dev_info["addr"] = dev.addr
+                                dev_info["port"] = dev.port
+                                resp.append(str(dev_info))
+                                
+                                print(resp)
+
+                            if self.message_queues[s] is not None:
+                                # '*' is used in web server to sperate the 
string
+                                
self.message_queues[s].put(bytes("*".join(resp), encoding = 'utf8'))
+                                if s not in self.outputs:
+                                    self.outputs.append(s)
+                        else:
+                            client_addr = 
(data.decode().split(':')[1],int(data.decode().split(':')[2]))
+
+                            if client_addr in self.conn_dict.keys():
+                                print('start query device from (%s:%s)' % 
(client_addr[0], client_addr[1]))
+                                resp = query(self.conn_dict[client_addr])
+                                print(resp)
+
+                                if self.message_queues[s] is not None:
+                                    
self.message_queues[s].put(bytes(str(resp), encoding = 'utf8'))
+                                    if s not in self.outputs:
+                                        self.outputs.append(s)
+                            else:   # no connection
+                                if self.message_queues[s] is not None:
+                                    
self.message_queues[s].put(bytes(str("fail"), encoding = 'utf8'))
+                                    if s not in self.outputs:
+                                        self.outputs.append(s)
+                    elif(data.decode().split(':')[0] == "install"):
+                        client_addr = 
(data.decode().split(':')[1],int(data.decode().split(':')[2]))
+                        app_name = data.decode().split(':')[3]
+                        app_file = data.decode().split(':')[4]
+
+                        if client_addr in self.conn_dict.keys():
+                            print('start install application %s to 
("%s":"%s")' % (app_name, client_addr[0], client_addr[1]))
+                            res = install(self.conn_dict[client_addr], 
app_name, app_file)
+                            if self.message_queues[s] is not None:
+                                logging.info("response {} to cmd 
server".format(res))
+                                self.message_queues[s].put(bytes(res, encoding 
= 'utf8'))
+                                if s not in self.outputs:
+                                    self.outputs.append(s)
+                    elif(data.decode().split(':')[0] == "uninstall"):
+                        client_addr = 
(data.decode().split(':')[1],int(data.decode().split(':')[2]))
+                        app_name = data.decode().split(':')[3]
+
+                        if client_addr in self.conn_dict.keys():
+                            print("start uninstall")
+                            res = uninstall(self.conn_dict[client_addr], 
app_name)
+                            if self.message_queues[s] is not None:
+                                logging.info("response {} to cmd 
server".format(res))
+                                self.message_queues[s].put(bytes(res, encoding 
= 'utf8'))
+                                if s not in self.outputs:
+                                    self.outputs.append(s)
+
+
+                    # if self.message_queues[s] is not None:
+                    #     self.message_queues[s].put(data)
+                    #     if s not in self.outputs:
+                    #         self.outputs.append(s)
+                else:
+                    logging.warning(data)
+                    
+                    # Interpret empty result as closed connection
+                    try:
+                        for dev in self.devices:
+                            if s == dev.conn:
+                                self.devices.remove(dev)
+                        # Stop listening for input on the connection
+                        if s in self.outputs:
+                            self.outputs.remove(s)
+                        self.inputs.remove(s)
+
+                        # Remove message queue
+                        if s in self.message_queues.keys():
+                            del self.message_queues[s]
+                        s.close()
+                    except OSError as e:
+                        logging.error("OSError raised, unknown connection")
+            return "got it"
+
+    def handler_send(self, writable):
+        # Handle outputs
+        for s in writable:
+            try:
+                message_queue = self.message_queues.get(s)
+                send_data = ''
+                if message_queue is not None:
+                    send_data = message_queue.get_nowait()
+            except queue.Empty:
+                self.outputs.remove(s)
+            else:
+                # print "sending %s to %s " % (send_data, s.getpeername)
+                # print "send something"
+                if message_queue is not None:
+                    s.send(send_data)
+                else:
+                    print("client has closed")
+                # del message_queues[s]
+                # writable.remove(s)
+                # print "Client %s disconnected" % (client_address)
+            return "got it"
+
+    def handler_exception(self, exceptional):
+        # # Handle "exceptional conditions"
+        for s in exceptional:
+            print('exception condition on', s.getpeername())
+            # Stop listening for input on the connection
+            self.inputs.remove(s)
+            if s in self.outputs:
+                self.outputs.remove(s)
+            s.close()
+
+            # Remove message queue
+            del self.message_queues[s]
+            return "got it"
+
+
+def event_loop(tcpserver, inputs, outputs):
+    while inputs:
+        # Wait for at least one of the sockets to be ready for processing
+        print('waiting for the next event')
+        readable, writable, exceptional = select.select(inputs, outputs, 
inputs)
+        if readable is not None:
+            tcp_recever = tcpserver.handler_recever(readable)
+            if tcp_recever == 'got it':
+                print("server have received")
+        if writable is not None:
+            tcp_send = tcpserver.handler_send(writable)
+            if tcp_send == 'got it':
+                print("server have send")
+        if exceptional is not None:
+            tcp_exception = tcpserver.handler_exception(exceptional)
+            if tcp_exception == 'got it':
+                print("server have exception")
+
+
+        sleep(0.1)
+
+def run_wasm_server():
+    server_address = ('localhost', 8888)
+    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+    server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
+    inputs = [server]
+    outputs = []
+    message_queues = {}
+    tcpserver = TCPServer(server, server_address, inputs, outputs, 
message_queues)
+    
+    task = threading.Thread(target=event_loop,args=(tcpserver,inputs,outputs))
+    task.start()
+
+if __name__ == '__main__':
+    logging.basicConfig(level=logging.DEBUG,
+                    filename='wasm_server.log',
+                    filemode='a',
+                    format=
+                    '%(asctime)s - %(pathname)s[line:%(lineno)d] - 
%(levelname)s: %(message)s'
+                    )
+    server_address = ('0.0.0.0', 8888)
+    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+    server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
+    inputs = [server]
+    outputs = []
+    message_queues = {}
+    tcpserver = TCPServer(server, server_address, inputs, outputs, 
message_queues)
+    logging.info("TCP Server start at {}:{}".format(server_address[0], "8888"))
+    
+    task = threading.Thread(target=event_loop,args=(tcpserver,inputs,outputs))
+    task.start()
+    
+    # event_loop(tcpserver, inputs, outputs)    
\ No newline at end of file
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css
new file mode 100755
index 0000000..5876b94
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css
@@ -0,0 +1,411 @@
+/* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+{% load static %}
+<style>
+#container{  
+    position:relative;  
+    margin:0px; 
+    height:110px; 
+}  
+#content {  
+    margin:0px 20% 0px 18%;  
+    border:solid 1.5px; 
+    border-color: white black white black;
+    height:50%;  
+}  
+#mainnav{
+     display:table;
+     margin: 0 auto;
+}
+#mainnav li{
+    display: table-cell;
+    padding-left:10px;
+}
+#mainnav ul li a{
+    width:120px;
+    height:30px;
+    background:black;
+    color:white;
+    margin:0px 50px;
+    font-size:21px;
+    font-family:'sansationlight';
+    display:block;
+    text-align:center;
+    text-decoration:none;
+}
+#mainnav ul li a:hover{
+    width:120px;
+    height:33px;
+    line-height:30px;
+    border:solid 1.5px;  
+    border-color: black black white black;
+    color:#3FC3DF;
+    background:black;
+}
+.headers{
+    background-image: url("{%static 'photo/milky-way-2695569_1280.jpg'%}");
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
+    color:white;
+    clear:both;    
+    height:50%;
+    text-align:center;
+    padding:10px;
+    margin:0px;
+}
+#maintitle{
+    font-size:25px;
+    font-family:'sansationlight';
+}
+
+#section {
+    position:relative;
+    top:5px;
+    width:100%;
+    float:left;
+    height:120px;
+    border-style:double solid;
+    border-color:black rgb(194, 194, 190) black rgb(248, 248, 248) ;
+    border-width:0.5px;
+    padding:10px;               
+}
+#photo{
+    position: relative;
+    float: left;
+    top:18%;
+    left:10%;
+    widows: 60px;
+}
+#IPs{
+    position: relative;
+    left: 20%;
+    top:10%;
+    width:35%;
+    font-size:17px;
+    font-family:'sansationlight';
+}
+#ports{
+    position: relative;
+    left: 20%;
+    top:30%;
+    bottom: 5%;
+    width:35%;
+    font-size:17px;
+    font-family:'sansationlight';
+}
+#installs{
+    position: relative;
+    float: left;
+    left:55%;
+    bottom:40%;
+    font-size:17px;
+    font-family:'sansationlight';
+}
+
+#download{
+    position:relative;
+    text-align: center;   
+    left:15%;
+    width:70%;
+    top:40px;
+    height:40px;
+    /*border-color:#192C4F;*/
+}
+.explain{
+    width:250px;
+    height:40px;
+    top:50%;
+    float:left;
+    font-size:18px;
+}
+#btn{
+    float:right;
+}
+
+
+#APPS {
+    position:relative;
+    top:30px;
+    left:16.67%;
+    width:75%;
+}
+#applications{
+    position:relative;
+    float:left;
+    background-color:white;    
+    width:88.9%;
+    height:45px;
+    padding:2px;       
+    margin:5px 0px;
+    border-style:double solid;
+    border-color:black;
+    border-width:0.5px;
+}
+#applogo{
+    position:relative;
+    float:left;
+    top:10%
+}
+#appinfo1{ position:relative; float:left; left:40px; 
width:34%;font-size:15px;height:25px;top:33%}
+#appinfo2{ position:relative; float:left; left:20px; 
width:24%;font-size:15px;height:25px;top:33%}
+#appinfo3{ position:relative; float:left; left:20px; 
width:34%;font-size:15px;height:25px;top:33%}
+
+#delete{
+    position:relative;
+    margin:8px 0px;
+    float:right; 
+    right:7%;
+}
+.main{
+    position: absolute;
+    float:left; 
+    width:650px;
+    height:350px;
+    z-index: 9999;
+    background-color: white;
+    display:none;
+    border:solid 1px rgb(4, 30, 66);
+    border-width: 1.5px;
+    border-radius: 10px;
+}
+.close{  
+    background-color: black;
+    color:white;
+    border-top-right-radius: 10px;
+    border-top-left-radius: 10px;
+}
+.hotapps{
+    background-color:rgb(202, 202, 202);
+    font-size: 16px;
+    font-family:'days';
+    height:30px;
+    text-align: justify;
+    border:solid 2px;
+    border-color:  rgb(202, 202, 202) rgb(202, 202, 202) rgb(202, 202, 202) 
black;
+}
+#scrollba{
+    overflow-x: None;
+    overflow-y: scroll;
+    height: 270px;
+    width:650px;
+}
+#Dapplications{
+    width:630px;
+    margin:4px 10px 0px 10px;
+    height:45px;
+    border:solid 1px;
+    border-color: rgb(221, 221, 221) white white white;
+    /* background-color: rgb(233, 233, 233); */
+}
+.mybtn2{
+    position: relative;
+    float:left;
+    left:45px;
+    top:3px;
+    height:33px;
+    border-radius: 10px;
+    background-color: rgb(22, 109, 121);
+    color:white;
+}
+#types{
+  background-color: rgb(3, 90, 90);
+  color:white;
+  text-align: left
+}
+
+
+#loading{
+    position:relative;
+    float:left;
+    width: 100%;    
+    display:None; 
+    height:40px;  
+    top:10px; 
+    z-index:1010;
+}
+.loadapp{
+    font-size:20px;
+    text-align: center;
+    color:rgb(24, 77, 24);
+}
+#preloader {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+}
+#loader {
+    display: block;
+    position: relative;
+    left: 50%;
+    top: 50%;
+    width: 150px;
+    height: 150px;
+    margin: -75px 0 0 -75px;
+    border-radius: 50%;
+    border: 3px solid transparent;
+    border-top-color: rgb(135, 155, 241);
+    -webkit-animation: spin 2s linear infinite;
+    animation: spin 2s linear infinite;
+}
+#loader:before {
+    content: "";
+    position: absolute;
+    top: 5px;
+    left: 5px;
+    right: 5px;
+    bottom: 5px;
+    border-radius: 50%;
+    border: 3px solid transparent;
+    border-top-color: rgb(23, 62, 146);
+    -webkit-animation: spin 3s linear infinite;
+    animation: spin 3s linear infinite;
+}
+#loader:after {
+    content: "";
+    position: absolute;
+    top: 15px;
+    left: 15px;
+    right: 15px;
+    bottom: 15px;
+    border-radius: 50%;
+    border: 3px solid transparent;
+    border-top-color: rgb(21, 44, 87);
+    -webkit-animation: spin 1.5s linear infinite;
+    animation: spin 1.5s linear infinite;
+}
+@-webkit-keyframes spin {
+    0%   {
+        -webkit-transform: rotate(0deg);
+        -ms-transform: rotate(0deg);
+        transform: rotate(0deg);
+    }
+    100% {
+        -webkit-transform: rotate(360deg);
+        -ms-transform: rotate(360deg);
+        transform: rotate(360deg);
+    }
+}
+@keyframes spin {
+    0%   {
+        -webkit-transform: rotate(0deg);
+        -ms-transform: rotate(0deg);
+        transform: rotate(0deg);
+    }
+    100% {
+        -webkit-transform: rotate(360deg);
+        -ms-transform: rotate(360deg);
+        transform: rotate(360deg);
+    }
+}
+
+.middlebox{
+   position:absolute;
+   z-index:1003;
+   height:180px;
+   width:340px;
+   background-color: white;
+   border-radius: 7px;
+   border-style:double;
+   border-color:rgb(2, 37, 11) solid;
+   border-width: 0.8px;
+   display: none;
+}
+.warning{
+    position: absolute;
+    left:10%;
+    top:6%;
+    FONT-size:18px;
+    color:rgb(0, 85, 0);
+    height:20%;
+    width:80%;
+    border-style:none none dashed none;
+    border-width: 1px; 
+    border-color:rgb(0, 85, 0);
+}
+.surebtn{
+    position:relative;
+    float:left;
+    left:44%;
+    top:75%;
+}
+.findapp{
+    position:absolute;
+    left:10%;
+    height:25%;
+    top:40%;
+    width:80%;
+    font-size:15px;
+    text-align: center;
+    border-style:none none solid none;
+    border-color:rgb(182, 182, 182);
+    border-width:0.5px;
+}
+
+.deletebox{
+   position:absolute;
+   z-index:1003;
+   height:180px;
+   width:340px;
+   background-color: white;
+   border-radius: 7px;
+   border-style:double;
+   border-color:rgb(43, 9, 1) solid;
+   border-width: 0.8px;
+   display: none;
+}
+.warning2{
+    position: absolute;
+    left:10%;
+    top:6%;
+    FONT-size:18px;
+    color:rgb(185, 0, 0);
+    height:20%;
+    width:80%;
+    border-style:none none dashed none;
+    border-width: 1px; 
+    border-color:rgb(185, 0, 0);
+}
+.suresbtn{
+    position:relative;
+    float:left;
+    left:24%;
+    top:75%;
+    color:green
+}
+.cancelsbtn{
+    position:relative;
+    float:right;
+    right:20%;
+    top:75%;
+    color:red
+}
+.footer {
+    position:absolute;
+    bottom:0px;
+    left:0px;
+    background-color:black;
+    color:white;
+    clear:both;
+    text-align:center;
+    padding:1px;
+    width:100%; 
+    height:4%;
+    z-index: 999;               
+}
+
+
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/appstore.css
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/appstore.css
new file mode 100755
index 0000000..2c49aa1
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/appstore.css
@@ -0,0 +1,227 @@
+/* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+{% load static %}
+<style>
+#container{  
+    position:relative;  
+    margin:0px; 
+    height:110px; 
+}  
+#content {  
+    margin:0px 20% 0px 18%;  
+    border:solid 1.5px; 
+    border-color: white black white black;
+    height:50%;  
+}  
+#mainnav{
+     display:table;
+     margin: 0 auto;
+}
+#mainnav li{
+    display: table-cell;
+    padding-left:10px;
+}
+#mainnav ul li a{
+    width:120px;
+    height:30px;
+    background:black;
+    color:white;
+    margin:0px 50px;
+    font-size:21px;
+    font-family:'sansationlight';
+    display:block;
+    text-align:center;
+    text-decoration:none;
+}
+#mainnav ul li a:hover{
+    width:120px;
+    height:33px;
+    line-height:30px;
+    border:solid 1.5px;  
+    border-color: black black white black;
+    color:#3FC3DF;
+    background:black;
+}
+.headers{
+    background-image: url("{%static 'photo/milky-way-2695569_1280.jpg'%}");
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
+    color:white;
+    clear:both;    
+    height:50%;
+    text-align:center;
+    padding:10px;
+    margin:0px;
+}
+#maintitle{
+    font-size:25px;
+    font-family:'sansationlight';
+}
+
+#introstore{
+   z-index:1003;
+   top:10px;
+   margin:10px 220px 10px 220px;
+   height:108px;
+}
+#applicationlist{
+    margin:26px 0px 0px 0px;  
+    height:100%;  
+}
+.bar{
+    height:50px;
+    top:2px;
+}
+.leftpart{
+    position:relative;
+    float:left;
+    left:30px;
+    font-size:22px;
+    display:inline-block;
+    height:30px;
+    border:solid 1px black; 
+    border-style: none none solid none;
+}
+.rightpart{
+    position:relative;
+    float:right;
+    height:50px;
+    right:20px;
+    font-size:17px;
+}
+.rightpart .file{
+    width: 120px;
+    height: 35px;
+    position: absolute;
+    left: 0px;
+    top: 0px;
+    opacity: 0;
+    z-index: 2;
+} 
+.stylehere{
+    position: relative;
+    display: inline-block;
+    width: 120px;
+    overflow: hidden;
+    height: 35px;
+    line-height: 35px;
+}
+.choosestyle{
+    position: absolute;
+    width: 120px;height: 35px;
+    background-color: rgb(0, 121, 202);color:white;
+    text-align: center;
+    left: 0px;top: 0px;
+    font-size:14px;
+    border-radius: 4px
+}
+.appbook{
+    margin:0px;  
+    border:solid;  
+    border-width: 1.5px;
+    border-color: white rgb(194, 194, 194) white rgb(194, 194, 194);
+    background-image:linear-gradient(to right, rgb(245, 243, 240),white)
+}
+#applications{
+    margin:1px;
+    left:0px;
+    width:100%;
+    height:50px;
+    border-style:none none solid none;
+    border-color:rgb(172, 172, 172);
+    border-width:0.5px;
+    padding:5px;       
+}
+#delbutton{
+    width:100px;
+    height:40px;
+}
+#appimage{
+    float:left;
+    left:5%;
+}
+#lable{
+    color: red;
+    opacity:50}
+    .suresbtn{
+    position:relative;
+    float:left;
+    left:50px;
+    top:135px;
+    color:green
+}
+.deletebox{
+    position:absolute;
+    z-index:1003;
+    height:180px;
+    width:340px;
+    background-color: white;
+    border-radius: 7px;
+    border-style:double;
+    border-color:rgb(43, 9, 1) solid;
+    border-width: 0.8px;
+    display: none;
+}
+.warning2{
+    position: absolute;
+    left:10%;
+    top:6%;
+    FONT-size:18px;
+    color:rgb(185, 0, 0);
+    height:20%;
+    width:80%;
+    border-style:none none dashed none;
+    border-width: 1px; 
+    border-color:rgb(185, 0, 0);
+}
+.findapp{
+    position:absolute;
+    left:10%;
+    height:25%;
+    top:40%;
+    width:80%;
+    font-size:15px;
+    text-align: center;
+    border-style:none none solid none;
+    border-color:rgb(182, 182, 182);
+    border-width:0.5px;
+}
+.suresbtn{
+    position:relative;
+    float:left;
+    left:24%;
+    top:75%;
+    color:green
+}
+.delsbtn{
+    position:relative;
+    float:right;
+    right:20%;
+    top:75%;
+    color:red
+}
+.footer {
+    position:absolute;
+    bottom:0px;
+    left:0px;
+    background-color:black;
+    color:white;
+    clear:both;
+    text-align:center;
+    padding:1px;
+    width:100%; 
+    height:4%;
+    z-index: 999;               
+}
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/index.css
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/index.css
new file mode 100755
index 0000000..2428418
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/index.css
@@ -0,0 +1,208 @@
+/* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+{% load static %}
+<style>
+#container{  
+    position:relative;  
+    margin:0px; 
+    height:110px; 
+}  
+#content {  
+    margin:0px 20% 0px 18%;  
+    border:solid 1.5px; 
+    border-color: white black white black;
+    height:50%;  
+}  
+#mainnav{
+     display:table;
+     margin: 0 auto;
+}
+#mainnav li{
+    display: table-cell;
+    padding-left:10px;
+}
+#mainnav ul li a{
+    width:120px;
+    height:30px;
+    background:black;
+    color:white;
+    margin:0px 50px;
+    font-size:21px;
+    font-family:'sansationlight';
+    display:block;
+    text-align:center;
+    text-decoration:none;
+}
+#mainnav ul li a:hover{
+    width:120px;
+    height:33px;
+    line-height:30px;
+    border:solid 1.5px;  
+    border-color: black black white black;
+    color:#3FC3DF;
+    background:black;
+}
+.headers{
+    background-image: url("{%static 'photo/milky-way-2695569_1280.jpg'%}");
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
+    color:white;
+    clear:both;    
+    height:50%;
+    text-align:center;
+    padding:10px;
+    margin:0px;
+}
+#maintitle{
+    font-size:25px;
+    font-family:'sansationlight';
+}
+
+#photo2{
+    position: relative;
+    float: left;
+    top:10%;
+    left:20%;
+}
+#devic{
+    position: relative;
+    font-size:22px;
+    float: left;
+    left:25%;
+    top:30%;
+    width:40%;
+}
+#dividebar{
+    position: absolute;
+    top:210px;
+    margin:10px;
+    width:100%;
+    height:1px
+}
+
+#devices {
+    position:relative;
+    bottom: 2px;
+    background-color: #F2F2F2;
+    height:125px;
+    width:80%;
+    margin:8px 10%;
+}
+#section {
+    position:relative;
+    background-color:white;
+    top:14px;
+    left:13%;
+    width: 70%;
+    float:left;
+    height:96px;
+    border-style:double solid;
+    border-color:black;
+    border-width:0.5px;
+    padding:10px;               
+}
+#photo{
+    position: relative;
+    float: left;
+    top:0px;
+    left:6%;
+}
+#ID{
+    position:relative;
+    float:left;
+    left:12%;
+    height:20px;
+    width:8%;
+    top:75%;
+    z-index:9999;
+    /* display:none; */
+    font-size:15px;
+    color:rgba(7, 38, 85, 0.87);  
+}
+#IPs{
+    position: relative;
+    left: 14%;
+    top:10%;
+    width:30%;
+    font-size:17px;
+    font-family:'sansationlight';
+}
+#ports{
+    position: relative;
+    left: 14%;
+    top:25%;
+    bottom: 5px;
+    width:30%;
+    font-size:17px;
+    font-family:'sansationlight';
+}
+#installs{
+    position: relative;
+    float: right;
+    right: 20%;
+    bottom:57%;
+    font-size:17px;
+    font-family:'sansationlight';
+}
+.smenu{
+    position: relative;
+    float: right;
+    top:45px;
+    right: 5%;
+    width: 6%;
+}
+
+.prev{
+    position:absolute;
+    left:72%;
+    clear:both;
+    text-align:center;
+    padding:1px;
+    width:100px; 
+    height:30px;
+    color:grey;
+    background-color:white;
+    border-radius:5px;
+    z-index: 996;       
+}
+
+.next{
+    position:absolute;
+    left:80%;
+    clear:both;
+    text-align:center;
+    padding:1px;
+    width:100px; 
+    height:30px;
+    color:grey;
+    background-color:white;
+    border-radius:5px;
+    z-index: 996;               
+}
+
+.footer {
+    position:absolute;
+    bottom:0px;
+    left:0px;
+    background-color:black;
+    color:white;
+    clear:both;
+    text-align:center;
+    padding:1px;
+    width:100%; 
+    height:4%;
+    z-index: 999;               
+}
+</style>
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js
new file mode 100755
index 0000000..d359962
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js
@@ -0,0 +1,228 @@
+/* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/*
+ *  Dom Location
+ *
+ */
+
+ function setDivCenter(divname)
+// make qn element center aligned
+ {
+   var Top =($(window).height()-$(divname).height())/2;
+   var Left = ($(window).width()-$(divname).width())/2;
+   var scrollTop = $(document).scrollTop();
+   var scrollLeft = $(document).scrollLeft();
+   
$(divname).css({posisiton:'absolute','top':Top+scrollTop,'left':Left+scrollLeft});
+
+};
+
+setDivCenter(".middlebox");
+setDivCenter(".deletebox");
+
+function setmain(divname){
+// Set the pop-up window of apps for download at the right place
+    var x = $('#btn').offset().top;
+    var Top = x + $('#btn').height()+15;
+    var y = $('#btn').offset().left;
+    var Left = y + ($('#btn').width()/2)-($(divname).width()/2);
+    console.log(Top,Left)
+    $(divname).css({'top':Top,'left':Left});
+}
+setmain(".main")
+
+/*
+ * download apps
+ *
+ */
+
+function getthis(val)
+//Telling background which app to be loaded from appstore_list and to be 
installed in the current device.
+{
+
+    /* Get the ip adress and the port of a device, as well as the application 
ID to be downloaded on this device*/ 
+    var ip,port,name,version;
+    var ipArr=$("#IPs").text().split(":");
+    ip=ipArr[1];
+    var portArr=$("#ports").text().split(":");
+    port=portArr[1];
+    name = $(val).parent().find("#appsinfo1").text().split(":")[1];
+    version = $(val).parent().find("#appsinfo2").text().split(":")[1];
+    $(".main").fadeOut();
+
+    for (num in alist){
+           if (alist[num]['pname'].trim() == name.trim())
+                {alert("This app has been downloaded.");
+                 return;}};            
+    $("#loading").fadeIn();
+    var sNode = document.getElementById("APPS");
+    var tempNode= sNode.cloneNode(true);
+    sNode.parentNode.appendChild(tempNode);
+    $("#appinfo1").html("Product Name : "+ name);
+    $("#appinfo2").html("Status : "+"Installing");
+    $("#appinfo3").html("Current_Version : "+ version);
+
+    
$.get("/appDownload/",{'ip':ip.trim(),'port':port.trim(),'name':name.trim(),},function
 (ret) {
+        var status = $.trim(ret.split(":")[1].split("}")[0]);
+        $(".loadapp").html(name+" is downloading now");
+        var msg = JSON.parse(status)
+        console.log(msg)
+        if (JSON.parse(status)=="ok"){
+            $(".middlebox").fadeIn();
+            $(".sourceapp").fadeOut();
+            $("#loading").fadeOut();
+            $(".findapp").html("Download "+name +" successfully");
+            $(".surebtn").click(function (){
+                $(".middlebox").fadeOut();
+                 window.location.reload();
+                 })}
+        else if (JSON.parse(status)=="Fail!"){
+            alert("Download failed!");
+            $("#loading").fadeOut();
+            sNode.remove();
+        }
+        else {
+            alert("Install app failed:" + msg)
+            $("#loading").fadeOut();
+            sNode.remove();
+        }
+    })
+};
+
+window.onload = function clone()
+//Add & Delete apps to the device.
+{
+   /*Install Apps*/
+   var sourceNode = document.getElementById("APPS");
+   if (alist.length != 0)
+   {
+   $("#appinfo1").html("Product Name : "+ alist[0]['pname']);
+   $("#appinfo2").html("Status : "+ alist[0]['status']);
+   $("#appinfo3").html("Current_Version : "+ alist[0]['current_version']);
+   $("#delete").attr('class','delet0');
+   $("#APPS").attr('class','app0');
+   
+   for (var i=1; i<alist.length; i++)
+     {
+       var cloneNode= sourceNode.cloneNode(true);
+       sourceNode.parentNode.appendChild(cloneNode);
+       $("#appinfo1").html("Product Name : "+ alist[i]['pname']);
+       $("#appinfo2").html("Status : "+ alist[i]['status']);
+       $("#appinfo3").html("Current_Version : "+ alist[i]['current_version']);
+       $("#delete").attr('class','delet'+i);
+       $("#APPS").attr('class','app'+i);
+     }
+    }
+    $("#IPs").html("IP : "+ dlist[0]['IP']);
+    $("#ports").html("Port : "+ dlist[0]['Port']);
+    $("#installs").html("Installed Apps : "+ dlist[0]['apps']);
+    
+
+
+    $(".mybtn").click(function ()
+    {
+    /*uninstall apps*/
+        var thisitem = $(this).parent().attr('class');
+        var indexa = thisitem.match(/\d+\b/);
+        var pname = $(".app"+indexa).find('#appinfo1').text();
+
+        var ip,port;
+        var ipArr=$("#IPs").text().split(":");
+        ip=ipArr[1];
+        var portArr=$("#ports").text().split(":");
+        port=portArr[1];
+    
+        var name = pname.split(':')[1].trim();
+        $(".deletebox").fadeIn();
+        $(".findapp").html("Are you sure to delete "+name);
+        $(".suresbtn").click(function (){
+                $(".app"+indexa).remove();
+                
$.get("/appDelete/",{'ip':ip.trim(),'port':port.trim(),"name":pname.split(':')[1].trim()},function
 (ret) {
+            console.log(ret);});
+                $(".deletebox").fadeOut();
+                 window.location.reload();
+                 })
+        $(".cancelsbtn").click(function (){
+                $(".deletebox").fadeOut(); })
+    });
+
+};
+
+function getdownloadapps()
+{
+/*Acquire apps for download from Appstore simultaneously whenever appstore is 
updated*/
+   if (search_node[0] == "Nothing find"){
+       alert(search_node[0])
+   }
+   if (search_node.length == 1 && search_node[0] != "Nothing find" ){
+    $("#appsinfo1").html("Product Name : "+ search_node[0]['ID']);
+    $("#appsinfo2").html("Version : "+ search_node[0]['Version']);
+   }
+   else{
+       var sourceNode = document.getElementById("Dapplications");
+        if (llist.length != 0)
+        {
+        $("#appsinfo1").html("Product Name : "+ llist[0]['ID']);
+        $("#appsinfo2").html("Version : "+ llist[0]['Version']);
+        $("#Dapplications").attr('class','dapp0');
+        
+        for (var i=1; i<llist.length; i++)
+            {
+            var cloneNode= sourceNode.cloneNode(true);
+            sourceNode.parentNode.appendChild(cloneNode);
+            $("#appsinfo1").html("Product Name : "+ llist[i]['ID']);
+            $("#appsinfo2").html("Version : "+ llist[i]['Version']);
+            $("#Dapplications").attr('class','dapp'+i);
+            }
+        }};
+};
+
+getdownloadapps();
+
+function givevalue(){
+    var ip=dlist[0]['IP'].trim();
+    var port=dlist[0]['Port'].trim();
+    document.getElementById("aa").value = ip;
+    document.getElementById("bb").value = port;
+    if (open_status == "open"){
+        $(".main").fadeIn();
+        $(".close").click(function(){
+            $(".main").fadeOut();
+            var newurl = "?"+"ip="+ip+"&port="+port;
+            window.location.href= newurl;});
+        $(".mybtn2").click(function(){
+            if (alist.length >=3){
+                alert("Install app failed: exceed max app installations.")
+            }
+            $(".main").fadeOut();
+            getthis(".mybtn2");
+            var newurl = "?"+"ip="+ip+"&port="+port;
+            window.location.href= newurl;
+   });
+
+    }
+}
+givevalue();
+
+function popbox(){
+/*Open and close the "install apps" window*/
+   $(".btn").click(function(){
+       $(".main").fadeIn();
+   });
+   $(".close").click(function(){
+       $(".main").fadeOut();
+   });
+};
+popbox();
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js
new file mode 100755
index 0000000..911de1f
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js
@@ -0,0 +1,136 @@
+/* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+function setDivCenter(divname)
+//Center a dom
+{
+   var Top =($(window).height()-$(divname).height())/2;
+   var Left = ($(window).width()-$(divname).width())/2;
+   var scrollTop = $(document).scrollTop();
+   var scrollLeft = $(document).scrollLeft();
+   
$(divname).css({posisiton:'absolute','top':Top+scrollTop,'left':Left+scrollLeft});
+
+};
+setDivCenter(".deletebox");
+
+function setDivheight(divname)
+//set the height of "appbook" to contain all its child elements.
+{
+   var leng = elist.length + flist.length;
+   var heig = 51 * leng;
+   $(divname).css({height:'heig'});
+};
+setDivheight(".appbook");
+
+function setfooterposition(divname)
+//Locate footer on the right place
+{
+   var Top = flist.length* $("#devices").height()+300;
+   var scrollTop = $(document).scrollTop();
+    if (flist.length >=4){
+        $(divname).css({posisiton:'absolute','top':Top+scrollTop});
+    }
+}
+setfooterposition(".footer");
+
+function deleteClick (obj)
+//Remove an app from apppstore if clicks the "OK" button
+{
+    var indexapp = $(obj).attr('class').match(/\d+\b/);
+    var removeitem = $(".applic"+indexapp);
+    var name=removeitem.find('#appinfo1').text().split(":")[1].trim();
+    var version=removeitem.find('#appinfo2').text().split(":")[1].trim();
+
+    if (flist.length >= 1){
+        $(".deletebox").fadeIn();
+        $(".findapp").html("Are you sure to delete "+name);
+        $(".suresbtn").click(function (){
+            removeitem.remove();
+            $.get("/removeapps/",{'name':name,'version':version},function 
(ret) {
+            console.log(ret);});
+            $(".deletebox").fadeOut();
+            window.location.href="/appstore/";
+                 })
+        $(".delsbtn").click(function (){
+            $(".deletebox").fadeOut(); })}
+};
+
+function upload_file()
+//Make sure the uploading file is eligible 
+{
+    var type = ulist[0];
+    console.log(type);
+    if (type == "Not a wasm file"){
+            alert(type);
+            window.location.href="/appstore/";  
+            }
+    if (type == "This App is preloaded"){
+            alert(type);
+            window.location.href="/appstore/";  
+    }
+    if (type == "This App is already uploaded"){
+            alert(type);
+            window.location.href="/appstore/";  
+    }
+};
+upload_file();
+
+
+function clone()
+//Render a interface that shows all the apps for installing in appstore,
+//including preloaded ones and locally uploaded ones.
+{
+    
+    var sourceNode = document.getElementById("applications");
+    $("#appinfo1").html("product name : "+ elist[0]['ID']);
+    $("#appinfo2").html("product Version : "+ elist[0]['Version']);
+    $("#delbutton").attr('class','del0');
+    $("#applications").attr('class','applic0');
+
+    
+        for (var i=1; i<elist.length; i++)
+        {
+        var cloneNode= sourceNode.cloneNode(true);
+        sourceNode.parentNode.appendChild(cloneNode);
+        $("#appinfo1").html("product name : "+ elist[i]['ID']);
+        $("#appinfo2").html("product Version : "+ elist[i]['Version']);
+        $("#delbutton").attr('class','del'+i);
+        $("#applications").attr('class','applic'+i);
+
+        }
+
+        for (var i = elist.length; i< elist.length + flist.length; i++)
+        {
+        var cloneNode= sourceNode.cloneNode(true);
+        sourceNode.parentNode.appendChild(cloneNode);
+        $("#appinfo1").html("product name : "+ flist[i - elist.length]['ID']);
+        $("#appinfo2").html("product Version : "+ flist[i - 
elist.length]['Version']);
+        $("#lable").html("Custom Apps").css("color","green");
+        $("#delbutton").attr('class','del'+i);
+        $("#applications").attr('class','applic'+i);
+
+        }
+
+        for(var i = 0; i < elist.length; i++)
+        {
+            var tmp_node = document.getElementsByClassName("del" + i)[0]
+            tmp_node.disabled = true
+        }
+        
+};
+
+clone();
+
+   
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/index.js 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/index.js
new file mode 100755
index 0000000..f80f7a5
--- /dev/null
+++ 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/index.js
@@ -0,0 +1,62 @@
+/* Copyright (C) 2019 Intel Corporation.  All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+function setfooterposition(divname)
+//Locate footer on the right place
+{
+   var Top = dlist.length* $("#devices").height()+300;
+   var scrollTop = $(document).scrollTop();
+    if (dlist.length >=4){
+        $(divname).css({posisiton:'absolute','top':Top+scrollTop});
+    }
+}
+setfooterposition(".footer");
+
+window.onload = function clone()
+//Show the list of connected devices
+{  
+   var sourceNode = document.getElementById("devices");
+   $("#IPs").html("IP : "+ dlist[0]['IP']);
+   $("#ports").html("Port : "+ dlist[0]['Port']);
+   $("#installs").html("Installed Apps : "+ dlist[0]['apps']);
+   $("#devices").attr('class','devic0');
+   $("#dbutton").attr('class','bt0');
+   $("#choose").attr('class','chos0');
+   
+    for (var i=1; i<dlist.length; i++)
+     {
+       var cloneNode= sourceNode.cloneNode(true);
+       sourceNode.parentNode.appendChild(cloneNode);
+       $("#IPs").html("IP : "+ dlist[i]['IP']);
+       $("#ports").html("Port : "+ dlist[i]['Port']);
+       $("#installs").html("Installed Apps : "+ dlist[i]['apps']);
+       $("#devices").attr('class','devic'+i);
+       $("#dbutton").attr('class','bt'+i);
+       $("#choose").attr('class','chos'+i);       
+     }
+     
+};
+
+function deviceClick(obj){
+//Render to the application.html 
+    var deviceObj=$(obj);
+    var ip=deviceObj.find('#IPs').text();
+    ip=ip.split(':')[1].split(' ')[1]
+    var port=deviceObj.find('#ports').text();
+    port=port.split(':')[1].split(' ')[1]
+    var newurl = "apps/?"+"ip="+ip+"&port="+port;
+    window.location.href= newurl;
+}
+
diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/app(1).png
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/app(1).png
new file mode 100755
index 
0000000000000000000000000000000000000000..661750e543eaf00ff017db1d8de728e9b8ac79d3
GIT binary patch
literal 5421
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

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/application.png
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/application.png
new file mode 100755
index 
0000000000000000000000000000000000000000..f4c7a3e901de4d5e0dcb8a072daec4354077c49d
GIT binary patch
literal 7875
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
P;81+^TCQByIPiY}Nx06%

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/delete.png
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/delete.png
new file mode 100755
index 
0000000000000000000000000000000000000000..73e456815f24fa1b5ffc0473adf56f7f1d7fdc0e
GIT binary patch
literal 4107
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
C2J}7v

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/download(1).png
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/download(1).png
new file mode 100755
index 
0000000000000000000000000000000000000000..9a68da599c7b1617400b4c7e73ac7d2519ce2221
GIT binary patch
literal 1502
zcmcgsYc$(;7*=i3x<t>msQcQkV`4*{iAy8Yttio~bvvqdEKQYR31alG4wcN5w411o
zaENfUL)y?ZDGAGrMaGFsE!8B)Y4I;omnMIelq}lQecnE7zw^BBbDr~Fzr4TlnCLL`
z{Wkjz3=GV}PX=T4JiKEjMta{7-`QYbu$LJg9C#+bUirl1JNj9;@v7B<eOLQe=Zmf%
zE~_l_@`{aZUtaG1p`SP}PdQ?03eUW|r=}+!UenXlJ>hcBWd-o1MV<60s|?w1T2X9r
zxOo(gsNk*HI4QKF8~oQr*&6LAO4oawOpHV5Xa4>2Pj#Hvz2a6c^$aHpw%3RfpxD@k
zpv`txx^@$^?mXCPfT5xNKL@<^P3vOjI>{1Ty_o}ATK)^L-1ojIcclqR11N%)AWCt-
ze+d?n+>2@`@czQWB5cxn9rD)jeJF=GBrA0N0Nz`yR7f_&T>80#gucGXSu=D{CnxR>
z+f>34GaeLeU|p0s-w3TQlg~VUzNnE!N~T9l9&wYSn6mSt?9j$Tw7e_yr75rw7rb;2
z@Ss65J`At2#-=GcMxa4Z`;{?P%D+D*^r3jR+yg$<I7pkCx=B#3H)AZjc1FQiq3&xL
z&s5I5ZH3UtYelWeb`cNRZbF|@&nF3AFAjp~sV9W3$>B`kuCdU%K);BUUY7IS4DIZI
z_17_vkwp7Z>-yQcQU<1h%6BqkK7|M(<<My(7Y@5R{i6Aiy&ug%slJ(RVG5Y1`!nb!
zcx4kGpB1Js^*mM$4VaM$a2lZyt?{p|i^DWVFaaA>{VZ+i_r*lun8vrZX#{yGf-5t1
z9Dk5iRcKsSU<ts)e|{<V_p63-RV<^)Y09_Sj2xYG_mb_*O>7!koN}>kbKY4=QCBJ>
zB><jkhSRoz19X=B+6!c%^Bg2MBa=7^2X3F03=d8H!FIx?IflU2Mt?c|IP6Xx9uv&D
zg{rBF{;X}>zrtbO{_0b9P7c9`Cvfc_uvI_*BsR~<Y-p<#xi}#KaDlDyQo6HU>;-A%
zxvu5t_bd_Y<rtB=Q4&=2BKsLc1-I|!Pxyx-<wy!Gq4n5oYR-|er;{Sr9}^b}a)*^8
z;H*w2QbtmH4;;3ivLa&z=CFaR*ex%;Xx9Fknn7PetOe$0cMyT2JTxnUE5BwT>_X6>
zX^`KqGkcjR-TIK{xEkr1AdO-IyaKhV9n9<3l_yK1xUz?r8Lgmyf0iZ<N9rB|w*wMx
z;n3GK2W7%7j!5LHJvs+Hy1HwVs9GpPyUsz|djx(zi|@5{PB~GMFnRFnNf^DHw(wG?
z3@cx*2_^m;!?qRf8TZFp#`!jD$e}pl1??%-LW!g$sf(E;xS~?nskQne2gi0ZY}cVz
z5?y)^s%qPg<r$Q@(x973)pmg|g;jJS4mmw@XG&TIP6%IYk#HMLj*Lhqy|Yu%_dbwO
zD-J@3;&C-YQ!8&dX~n}A!Dc0PkjLelx!x8dP?lt&M0%1b(@3cVYVUws#^PX8w_i{i
z>G--4j5VrWWVOdNkL`N*|A;3r7`gN3mqNzW7k?{ok7{p>QzcP9=H0k->jTs@qdc=E
z@xo55*|xnVK|)0R1cu(m#r`iTgEl?l?;FzJZMwtr3+Sc?%(J&CPj2kU@Q~=>&J!sm
Fe*w#*=WPH0

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/menu.png
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/menu.png
new file mode 100755
index 
0000000000000000000000000000000000000000..919da3519fb2bf0228acd5d4118c8473a0341b75
GIT binary patch
literal 1839
zcmd6odrVVT9LL-4zz!Ac<uT?1@s_k`ksu>5tV-na(6-v@E-j^t0>e7RNexukz=&`~
z9%Iq21r<ciB8bqgjOuW_hI1HNUvn}<$HPYvA_X-#V9KLACi`~_S+Zp(IrrxL@w>ls
zzMt>++@dX#4KB<@Od5^mA{0cC=xu&8p(A>J9cMgEqd86pqX_9|@uR)(sW>~Z{73x_
zp^ioKH1~IhP$$~Q9L%mx@`v*^YTy$@h0(M}zbW*#-sUaTE-_}@1_HsZkF!Nj67{Er
z)%Ly9t+Kjo{!_V*#eiPi7tF-~TP4ZC8{W!w2QVoN!wZ*$<LfWGxLF6K?hKF|v@2vg
zfdBd`A1J!VRpsYS-rHQUHoZBehrMRzg8y~-%e8GnmS-GwIlIlCd8y}s+UQK&aveJ$
zWPsE|C0j=fBw!2f29(}lLqZgg5zC`6&L_u3gIFHUeRqxCgMiv^H*(c5LZdA{CHou)
zmS3y1d{kq(ddn{wqm-kh#f!o!2a<M{`ar^zQKOtsKr*fVg2*)wS2Rn53UI({yr-x_
zpD=9mD~rUaziC^^B()k6I%5m6^p@}=8?fcV9Gu%xEA^yP$}dY|v@}9=L{{U^02Uu!
zHHS`>c<D(6fZAwMf{w)F$5xpj#wo6>&;qmzgJ_2<F7OocxlU+{ai!OM!ZrTdG?5!F
zu+;mNM(5xP&XW>OxJJ8O=2uK3OoD5?IW<IbAA8b~d3xPXuYW$6*57u}-ZwKd(=*Z=
z+23SLkaYg`<3{E6=@(8TlT!(wHup^ql{-6`jJCdDap=$$#)Ai{o(!|Z?jP@U{MJP>
zak$tD$>flIeB_?Rc}~k9QXjC*sf^jTA9e5;Dl8O6_TnncvmJg%^y2k5lhY81WYchc
zIU=z~U0#8tFE?Zvd<p2*Q{h{UwD#3|>xCHA{(iLuF|D-JcI<Y`n|o=QpV{P}aO354
z>d0n(_VBA$uSTs_Yr_4;f)<<2wmD$s%60pT_LOnqbYn`-Qgpo5u7RzE&t1=pa&Xx)
zy_`v>Dib}(QW{Y!iLLWs0O1eIEB)w{^pqi<hj>vR2xJUUvs%$gB3=$>HMNLWx+$v)
z!v)OsY#HJ;tQ;4y!!;gXMARZ)U6$d}h#Z`^;INb%uBp{^tvF00$UtVzoEqi>e#^wr
z<HwKBmLyEe&7GZ{d*i2cVp%_)+tNL2uw{jcJ8wQ@+0S&SE~TtdRv+|Sd1T|x4|##(
zS5raF#YIhC5Nmh2l7})Lfl=7ND!Tp93#$h`6!Bue;WIA@AVQjZgTZ{1ieSZfoERmk
zfiISz7>HxTVs$tuN|ESd5HOwWXcq?(Nhdo8P`>UcyS9foMa;c)(>qGVvAsi?v%wS9
zUhBr6^);XIM&p8-l_^J~E}?DqHP^Hw`*$!gHS@f=@7Zy+I6r<$9nd}r|A}`08LV73
zaW}p7<hiGV4tVeXJ|TaGt42zc2gbPP+R>FY%2L67$el)A_x?f}ksp|Oeg&P{cdDg7
z62PE5OXN0WYumuMH@b${o4kjSb+;|6o5bjp^G9P_<P7k1b!KY;#FS81(1bkSZLx(#
z<=~Mg*8YNm)Fg?2&SrpxR|dW^0(d8VEQ{ren=xNj`d_r1bv(47%%LUr`-|vDNE1d&
JqKpxV)F1W=+{XX_

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/milky-way-2695569_1280.jpg
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/milky-way-2695569_1280.jpg
new file mode 100755
index 
0000000000000000000000000000000000000000..61d935b7f81464a074173a4980d2a3cfc583fdf2
GIT binary patch
literal 535384
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%0DGVi6I}5Mduss6YKpW8M-U_Z0
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%0DUB<t{E^vP=msuZ)SISH
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%0DE^<W~E-p$aijUCELBWCQMZ;b|3Nau!79q
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

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/net_device.png
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/net_device.png
new file mode 100755
index 
0000000000000000000000000000000000000000..e988a6aa1efe1a642a1c4026cecf3d6819b948b1
GIT binary patch
literal 6867
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
JS_?5p{udMa9%BFi

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/software-icon-32081.png
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/software-icon-32081.png
new file mode 100755
index 
0000000000000000000000000000000000000000..cab8cdaef77c3796dbe84183ce050d688fdd39d6
GIT binary patch
literal 39956
zcmdRVhgXwJ_ipGYN>PeR6+}ErQ&2ht5m8Wz^bP{jYbX*30TmHYP>|jND7{1I9T9=h
zr8hwc9fX7$0(atfzTf?=`ybr1)>&tr@V@iznc4H~XFq#SsHVEg`LkEfLLiXyj~_jF
z27yp4lm4Zp2ERPb{J8-BbJ<hbz*F1xg{P0DhYdv0+V!~&&tqpxTbpM#me#)Roi?%%
zNK)nF2Z}l`C)TGCZqvI6ful73NqE`zr&q6He&zqBz2NkMb9{G(8vFcK!ZnHbgzvd^
z;(oY53Yl_@6UCPvOi!D4l)A*+Ov04x$IWXpF!o2>E?E`KJ1TBsHOBA9gS?Bw&!l{_
zeqUN4`a_5L@y|YuDcs@8@q1Bf>$OKm#DJyU#DQchRZc>F=IfawS^sECVE6x@|5&&P
zc~C-1N~n+WhbNT0-ku)yQyq_7L`Mp|IM|XeMOwdXwWWYidO~g}mB>rTy2>w&#!Phl
zIt(cOnm^jRj4VeJ2EU*OWipZb_-_Ut@Z<K&#JcQ<A<<$T5y=wOqpwdq8PafTDMP6Y
zqpwa%^l2cp%Mj7YemT!n(P;&tcWLJrg*H+;=Nt8Lhf$3u)><2B4SS=eOO)GpgQX)c
z((E;2M~gXRl9M?&6ZY2liVt_C6p_^@pX9iu1n?R^TaPcAc|mwk6#f2ler`s8ik{HT
z*tWfN^w}Ce>&2RtO|zZ5M5KpNs}H~OV;#w+*%!oX=pJ-L!S4I9E|l;2U*&?3aYD{s
zYR=znPNDj<Kf)c76|z<E)F1vw*vO{NsjNSh>aalWG?}rfoNEdxFVyUqO9O?{1SY@v
z)3e*rBIssIc02`DcTZs-D>v83$JnwQgarGL7R=6{k-GqCUAU~YjSLTVFkJ4%*6TJW
z8SDHiKRghuPm}!9y?$CR=8N_U$o@qi7)TFUVwfL4-tWirr0TZu1y<<^%MtvKF5G*0
zYy3i8PDNVk%k6a>e3&@(Yco%Z^o7Lh?-{NaS7y5wDd?4j9Yn<tUrFM)rZl)X63pED
zCVq3Pn>j~UeW3?a3~UYAK6vR$+;-BHofycz`Mcp>M)a-hRiPcGnM~)CWCuUWT?5Vi
zH~l0-pk{3^@A`U~$ripJZGCA2zhrL0u%Ic<G{#q*c5$Mwuwv^c7Xx^%`99^2(+gQg
z?c#??wW8|fZ};GS$A2pN8?|FNN#A@Jvb~}<#ru(=eb>hRlKFU=i_T~kz4pd7(@(1`
zx%+;^lf4u}3k|_^3b3NTc*zgPMY-l=^X3hMO}sc>T+c7FW!cNA6xj7XSQx%p*Gw|4
znVn`w@O?+-ht>W|<Jbe*wV{c5DsQkDf!7%pnZ79`KFR-BRXF~#Qk5PPDVW1OTSu5W
zONex|L}XtiXY41tVa}5#uhi%T?}p3feQawDKTE)`!sSX7J{m~V05{THhH^Qt8LtJ&
zZgLk_79!C1UEXr+h`bo<(;Gw9$P{_AtFI34K9G?mEmM(_uO7dK@hIQ>s^Y`D#v|$1
z%7nH%_D+=UHOb2r<QGu@R~K}<F`G!WQ=mFymc~C?Nxv9_ZsVS;BX|w(8W|v)&yay<
zFbJMLqfx%kX({|$22GD+I1&wXMk6=JV|t1-t`+Nza`&HQAh~$8rdbMWS4h^)1;?nI
z*d%_MUY7DTE#1h&-JFuNiz6W^jHDH658g>~;C{{2Rles{xYqnc`Ii3(wK>Du?ferZ
zOHQ!T7H`w*zc#=`=@#4-q@aA?5Nku&kzg;<K}hFd93cbC^u`17_ffkE%~WUe$b_AA
zr!3jZVv2>wPOsDMl{dnS464p^fw69QiuT<<)C->p<dy1sRa0$F4B0fK0V9MlchNX9
zR0(MBf7Z`X-BcAv{V2<y%&0YMvX#4k<l|sTJd;fUCbb~+SwA|Lb#KymLMES+{a*IQ
zS~%f|lV0;?_Cu9HQ~-WE#L5gI`3nBrjAZ){MN#BaI=_y$Ph%U%p7O<Zb0YlXSYHC$
zEn4pT-c4|@oSm7NHeRX4@;%nU^u$o~+{6xNW&|9RHa%94j8vvOmh04^J1!X_%@WHS
z@2Zhi^pHI)VW-HkXtb5yEy6BH;dm@!y{j^%Q%9G`B|x$fa}U@EN6WG{dYSn(2(3fJ
zJ~{^}>?}t(m72Wq)FrLluUD^qEB`!2b6CXoYU`dx82<gS=f3aPJvWt&-&rG@GkN14
zf#0QV^$^v2kpTvT18<=M4N1~D;dynac?TVe@T(|RVJ8d@J93<B=8$%`aGf|Yn}r}X
z?%d699O{ISOG9DQxQ$L7c7ny5ooe1f^x&EW1Us-2T8huBq+N^cA|pK#yfa!+Dne+k
z{9;ACPDAmLLS=uwE4J&rz{D&W87HcurQXQzKy|~)k&yU-#d#fac(;%!*Xk=6O`w?k
z`@}(u|BVC(tJy1)W0}v3K5(KgWe|z|vomqd$Vk))Cu|isnP$C3W5b@Cwn;SW@J`W0
z2pFfGd2*IPp|&kq8mt(zXgsprUkWPKo($I+UK_0-2BGMIryrhO9G|b6j4LuT4s~9C
zB?Ucv4R=B+xc`c~oqdw>?Y<Ogi#0?e!)n@HAwB%8UCPR)nl#{a2cN+X(=MVTH-L-i
zN{_g*V#p|W7nV~)GV{3Rj#I52(x*zI$-sj(bXfCT8W{UH*~=6soL@!L=<C{B6JV90
zqBKxVl4rJXKq$SycNj5bj6cCEsOpybXAD>$S}X*kq<QKsmos@pvUTW{FWl6~$%YL>
z7T<x|gx>@2NbYmtSSC*zEa;o-X?8maC*giS!K&J=x`E~RQ%H-|y6qDw1)=+AQ!6qI
zE|-HWVjbLazX?`MTuJn_3k0~;9icQ}{0~#j(>R*bYf@6ucaop<WYdvW^|Nq1gR-dW
z#wKT2m~Y3?Q+levDd}2UeIqReIr++RuAe^AEWn5`E=)c;qz)XIA&VK`ja~3q>${Hu
z3j>^;305k+DCGBHComfG?f4GzYS&@;N)^$qJSv>>MhZQ3V5{%q*rx?Ip)V>18d;l~
zr^(75q-Xh)k$2r~u0Z%<o5N1%k0-j><h09Bv)6}v6K(pjV7t%>oPlMDmD>o(guE<;
zUpin#f2fIa7s&Z{lS@JpJEg)GcykoyNWUB8SfutQR8{!6L@v5wF=Tf4#{J=lPg8QC
zhn~QER-WWpEx&^>DH!DCv_IUWd(WBlv1St*T>3=YwA#^8es`7sM6wj*$wl1C>CUgT
zYXT}NZ=-V^$G!i~{|YB2zf(tsptqku(VQgntSNQ_Q_5Eg-Gpsw0AE3A%^l}ICQekS
zRsJ0X1I1)F9sf$Jjy=!VAM}=z^p&bu{4RroElps!SmB0TWj#`TQU<s!+XYOYi|uGH
zJ><jf!VO~Tw@M#i@C(M?Diujr^YYTN=aYpK<7B9yj19z2<CZ|j-ezh}2;MLGEO>c|
z8t1Svw+T*qI!lvpzPC3dUTI)Y{%~|w10c`FldQ@H1{oIAFcV~#-)*0CLLF=-3p?j$
zd?cA6@!hVib$-#k=aZt9!{c-uEr}7Ssx|`$3*XcQD0-e!aVE;dGw|=q^kh0TRu|8v
zLz-n}?n+1L4Na#2U+qtBk&SIeeEr&hqgVR{;o;5_`b6;Fh(lV0a)50-Y&+BhmI1=1
zr|(4Af9&{mG#vs}Pfoq0c72N=(iuw8#G$S;qzI)^WyfSX1o)`=EsZQn_)D)CG<A}m
z<eV<Qbr_d+9C~XUtcU8Q-l~U^K3-QK%pFqtWy*JnWZC58(wb8i0hJD1E%nYl4@1Zy
zR51UoP4S#GDer|KxTgM78Zyos29o-BX#%4(|NhSl(a5~RDx(RRs{BL>Xw8%StVujQ
zx%5YzoBZb|x;^=MScs<jP~J*g=+iCDn}rb&RVK_WxtOjLz!zuDPv#=^pQ{lv+SNGD
zK|X69OEe;;?>^pWBE&@Z$u~6k8S49U|JnZ?eX%2%p80rfk_kH3c4%?OtN0M**F%P?
zc~U1q47JWnJb9xXH2+L7<ar3Lc!VpUVx3}A@1dHXnqQm}S>W{xryE;iCI6%r$+}x?
z6@rgvY<GsHs8feMrs52{{P!5f0Z%GC=rN9NM-b_$Ac<4C1D~vSiks2^V+{@D8pc~@
zlecHQqHm{Laz{)=6gd_*-OR%lP8&^-1zxi^G<z&PVrs0mDv*CWX+}Hu*umdp{vQE~
z_H^*Z8ElaT1>}YGgqPF)&wxXz(b6CQB*MuZywwB}gl?RC+p3j64|%EP&N+FIh7@D{
zaeg%5@HX87&uK-q(n;GPCsVJ;_)cyYKX*g>u05pr{kQ#drBLA_E1AZvP6HkZDS4@F
zA9ZSvW3M$@o~jmEqlqn-jm_x^ViU1Q*$vXH98Tr&`?OCYdg!+m!!>QXg^K#uf%F*B
zWQJj`P11?DfWwj|G9DJYAFrlR>ErVTXXiV+qQhfOGNAQPAE4A$<3eUtg~;ij4s-<t
z<UG@?c13aBb(cVU1>awBlXY=kHDa7QdtR%wJQ9B`@Tro5h>rHwh!L%fW`I+gonI>b
zN=%P9pL8?M>98W!8)DI`+)e0aIC<=W-!^6HoptS&5tJ3$Ecr7hJ3ZJ44(Ud>e92Qa
z8HlLJVC?=~_MzDQ-+n%mJM_K>wVsqE7A;d?5FR!s-w=OI#gO1LO9O*k#uFiMm!tc~
z3lr%O2wj$qFaOF^iIkMw-mz}Bng0nN*!<Z@4RsFBJ3J_*@ir1LM#ds6jCZ3VXEMHW
zLVg50b^G;nfs7@fo^{YXC)g9V0-m&Q`|IPUk()`4{WGPO(G+A558IVh^fnW0#TZOp
z*WoHLTb&9Ua@jLJ%_3m$EV@e|K*GMz&YlLcvjK9dJKIaMo-FJbJ{He-f?KL-`aOfg
zjmfB38y0ZN7R=QA^ao2fCl)a2p{v04?0k`9CepOanhSqJQYHXFhs7O+Q)3(!0!_Ep
zFGW}Q=tXS#4gP&-%q_rsroPdQ3WE9=TTlyr#88MW_a9ie%y2+%@WWO_t91I)OXp<k
zW{(lmX$NwoQF5(eE7={X#kC@wl%79elH7T6>uya_5X~1$H6noAfj~^gxpSen3WR_e
zb2{vX>8RNj6cRWXP8c+<^PAM*I#}G>v@zw2?EwDlOS|MV3LM4H<&gMgqibK95rVQ8
zTv^j-I+fasjBMYjb`bh<I+okqUVe>USUx_@l$veMU&}9Bi42lBc&j7gnh0^5+lY&%
z{L3qPHnv_68aV+;Xei#9tU9v<fog}>;9;>HL{EQ@`;S8Ch(;ciZY^`N_s|MIy*74Z
z7LDZ>p%6&cA&AD}Qpd{?v`bsF3U{1@IfVnyN}Cu+&YJlh41_sX>DAsNz6F~nse<{^
zu~QBFspIWFn_wgb87G!Ed3IoM=CGm56<OIpG&lVXMx22PM&=_b(#H0223!(`bSuau
z9Vj&9VK8p&=Si>uHJg4I1o8*Vy5Gn*`R9a*9e8@kLrR>g#@C$&egtt+gqU*5H-Y9j
z3u!)w7A(G&a*CsgzDNj=ug>t&Lhm7l+t8>0OlR|<;RPDk3%!mE48yI5D94`=i118>
z<Jfa9BC*KwHBMVG1Q&vHxa0L<!eala`J-ZbGRUv_Z~M=*9xKS*uH5;#{LXO<*mXGs
zSN(9K)JU?p2!I(UEd=_yqIf($7{9UmF`z%UIlrR1ZLRH4$^C;7iJ4GBEa*8vR7j}b
zB5bOLz;aM+`E&k$8<r|U$yIbq5C}}5$TEL6CcshS>z(-`PsaYayK^Axz-@vxy64^@
z1!+EhgFncbjS>C=5XD}yDU-FgX(<8*2|T>JQG};mi3TjhN1cj{Gf^UW)|76^{GA&q
z@&!R4nDXjd4P1i?&*)Z$jUJtrYJ-)#er^d6hbkZB{Qes-2FDwGbf26YSgKDSBLeAr
zF7;-5fV^N0?28BEpv;IVyV%NoX>w`t$D+k}otp}I!MI2jN%NmGE1KYm=L7Tn#b;K~
zTa#QxRJ&H{Z?g`sxKWC0OBTz?>d-B{Zk2*S0~$QmAMFfspIUl&cwW0#*I~MHQ9bwt
z>Xo{7FmCTIJB=0AM3M&bqqra{U}rpAKQ;9d;Stzdwwo*9aAvpxC>XMsf^oSXKp@OK
zUtGsN|0F-^($3@~nf3Xf<l=vKp#|*1jW2wt*KYKXz>gq4(t^dM1!M3eQ$TpWv>ki&
zTxpg1lQm-Q-AP3x5WYuV3sFz@aD!kHI-5=cNB~)6p#-Iw<LFxK+AOkOEUUzCcWw4s
zj}Nxna@#ug(TSuX-uE}U9+yBE{(hiUs$ZXOUW=)T_xx{DHWN<Q&#yxw1qfz|XV?79
z;$_(v$e@o@NCT>_)#}RGGtTPxnT!v|PAb@f4Sl&V9yh2e^RI<U|J?Vb+*uRea(R@0
z<R5<4@6E0$x`Zo;6Y|EB(vz__T{Odn`28*-`23>lHS93AuZwJr&sI*CG=#JYv`Zh&
zjj7?$NSLnqmHuwwn`=xzx&2>YGNk@}-EvMj`1rfgji&9qn6G)U=I=PsAGw77jK6&e
zVH{-Yw<K#l1lbe~K$b{)%9dmuOs>Mtl#T(noaa;!M7$>M<UoO6fd2Rym`;ck{qnxZ
z%G&G%tb0o!d_snk_9_3X!=5!^Hq7jOOzzg0LM*knB_~RXwC@0rNZY;;WCT5pzX;s#
zdkC)1an8TaO}#wy)?lOm21`vNuTb&x7jhH7_)3gLY5FU!5>tV*z6Vc(r4u&N>1y)t
zfx>OBl*c*0_VHr>cW*_ln7a6q9c|NO#;1;oY&(P!C>RH?vKeubNii(>R8;r`q!TVS
z#Z`C%oKzJdKjc0Z(Z4QHY#bx#?Cj11%Rwru9KHUiVMgq=CfeMJT11y4SH?Px3=}rp
zAgb2DuR8~I^{;oFY?rnG1day$2*A>hjkRH>kH0~{VC~(C=sKKl44}Ec(k_Sfp>OCY
zI3y1@+#REKb>T#rsDFs~5`zcQp8t!}AAjW3DaknBz$A->C>lEBifURF7oJpF3zOH?
zctNg$*pPTTnPG%$&l5TC6J2?ios;$}8~a2tGL9*tzB?AP;cGcKB@GSYoUN0&e2R1Z
zKC}yt{2S78N-!)j6pnd2ekG-__jB9p4^xt6qs=lOZd<EiGio;*y#k+0fyC&J@9e&S
zgT|}~I3R6@ZNBKe5*5j8!`4F|g^GJAGT8^u_2gcR@D(H()7&t56sdYta`7sIle>V(
zT>Ue@v4K)cZLe{fN-4%Su(ONKoNCeLNEQC^qs{IpAqrOwJz+;RGimsp>9Y(_c_9#x
z)HU9t)2?t{Ud`1xc@Ah=ytZX}E-E_C?L<>3nc+XM*(&w*Q%_+>hLjo>vSUx8fgA{b
z{fZiuI>MWamREC8<-g!JW46F>r;h*}yIrDP`m8!-!=1LppeOQlt1@!QIovpEpiLm^
zVs@V-Paub#dHHSDjzU?OoyQ``1|m~v$)%q<qMG17LdmX?Yd=|q%;uqtz5k$3SU5Yq
z^5IecYwt&uD_Xdv-6!TCf~W|u(dz<xM1MEswT!%vz4r&_d+)!+$pHG@G)y?Giy~!*
zZ=Ml0Ly9U3QzV$f7oWG72qu<W(_2{91CPJ6_hE8A0^hg6efgvkOe6<Yt_kp7C>beo
zbE$B86PYzNpNh*#Y-JDShv}Qw9^VBUC3k|X_y0Ku!9*`(o$7WPI!lrM>wMGQwGY1w
z2$(c|KW?JuB%@>O9jfbfoU1SM+`R%e+xhbH(?-u87W!A=Q9=omxK``3wefBIC<Ido
zVy?h%<jGSXu-!w<bM=YUYsuG{a9E$&l3vAr(b6*~pO(y2C+AccIDL2^uy33zg3Lmj
z7+Xn=E$OY=y(5RwtXVgn&qjj5giHqW6#4s^z@1#`^F$C%j?RzOlLOijYmoD-K3|%^
zj0v5#Y2GT*xGtXvOg3S1)QQ8SaZy|S)nFaM>aOAVFqS7?Y#`lz@q4Z@89kSL>I~YY
zlLPwu+kQcIM+bG}#xw%C5x3>Ti=koh#3~b|(S;=bG@7dg*BY<)BAzbr#7hk1eiBLu
zUxlBB<tE)0OrVHQsq|@*C^FBl4ft^QoI2%@cB!<K=rWo+AgH*K%07~t8qGdFRm%^9
zu-Q)RI;M>)-0_dRXepeF5*wZK&jF{`C*?{H@6DyAlZdd_JQ8I!yZ_f6)Y!7c)<A6V
zmV}6jZX5x7x@)<((vmNE-^7fs^)QKs%*i&W_k8zG3@+SYevHZMxc3sa1`!i;F0We~
zjTgJQjM0^hyf9A$+`4cAa3}gVS$}9o8)R0Dv(PEeUmAA|mc!PJsb^9P3L3oQDl6lS
zX<ky4jyGfxzXdgHm5+0hrQFYLu-{l7D_KF1n0y=RpMs|Ks0FN7J_lv+XQ2dw#qMCa
z8a7tM`RPN3v`6a6^1lNit3ZB8O1{Er=)2m!G^<aytl-H@ySy+1MeZ7dn6F?4*szmR
zw!Q!1#4Vk^e>x=63WZjxAKt6t>YHS(0?{z_UKRbv`WNMXUs(r{s}Jn1i7ksuCug%y
z&hE+hTrXr%o3o?Wk~;;iFFZYaYjcE4&Qmr;Bf`S_&!1BK=+ecj!g(d#v6br6ebdtk
zCy5@RqxUfd9qY9<UZ{i=kVBswMmE}&%aBXg&@Zh#t4=izX!?&Y5505ay4rAV?$#^)
zz1x$wYIsp9nvp$o?(#O0d}b^P&Evc4YOxryr)yw+I@OTJA+g`DqN2OqxYXwMOv)Cu
zht+{;yvnmvTvyj-8ZuYp#$9zlIHp}^8k8tpeOy#mZyen4U_L}DQdT0Bdav4t6J^NZ
z>#4G{^BO5_;#b?qIw+6~@WS`ZGJ}`Xn0Up!gsayj@tAnIrW4b4_NB3HjKR*Y6Qt^`
zMY^l4hgrJQ=yJchF8CScN0Hn|>u_)Xk(5giUkQ?g5h35`Xe)$jnziRaMTd|~++40%
z+>ic?8(B<Oajq`Mqrr6QKE$>^$@<+Q4+KZUQ30kxB`PZ9i%~s=eJXL(&G%md@yX6h
zLp>tGzm9cKVd(*5zu^xzmwz~(I(9={cfL9n-T0Pv*J!+HZ+VDL?{?G2l7Q(&IeT5X
z%6Hn0C0xadur=to!Ih9eb*|Q$uWsV#csY^#?fWy?52Lwd4^8HbK9t`(5G+YD6p1@X
z*Lvdx9ycUCPQp5av-|yJ3{LC?2ua37bshMr$J$$y)60AxksGDNuV)mrv?8fsOe6Z<
zHL%7fW&AKecEqdbnF+*o*RAkKfz_+igOb7q`Fy{glNh6edAa*CNd4wT?Np6tcJ~%W
zXSF)LejTp&1tbt+_vp42%;XbKO0G(ibL9qCU$pJL=DKE(S7t`8W^6p@^7-H@MxZ#r
z_DEK~N`zC!&`&7M8wz!w>C-EI3Sw-5?Cv~H|AU75aWDvnw!P=^`dfAzn+=&uSt8fM
zSw-A=#J?Jk?q}=bWkYax`VJnt5eQ2HgC$(-D-2xHsd!Jp$4Z>-qfHrnM6$6D`nzA#
z8wy!}X(R{m6YD7!OegDRlQ;++9YuK+LMa8o_$C;y39ZnkiJfF*4NflZBt+(~nDHj-
z^U}sf4`c7_DlEFE(D;tN{OzjLo`Ses8Oj@JfU0(epB{#9dp7t2GKamHtfH_L#4_np
z=vgqk0JSq>I^LW*PBl3hm&Zj5ICrG7j#!z=VMmIA*WU8)w1%w#*Z1}E>?^VcQd$Sc
zkppfS^O@D>MM3tnaS)n^bYoiw)+-wcWeclnaZ8(hUZb0H_#*qPWJv^eed;KUIDc3%
z4_{uehpq90n2Rid+k4<@byske?LwW)a~D^ZxGd5^pp9G`ozVCYQSS;ub_ifBDQ_<?
z7YCsCu9r7}6fr?2d!_wCetl1x%E9q>B=Wn!($fcio&Y`6u+LL{#|QPm@Jz6^@u(Un
zm+2@ei*$4$fFqFAt%i*#hdW#ag{8SdJ9pdb0D!+Xh;7P9_|V@y-H0At*zEg)CeF7r
z7?;(J^c2Qv_?v!XDDhtB#@!_sd>5~RT!}mtm4dB5GHJLD0-9L9o69CgR_MKnI#+|Z
zd<AW%+ouzm8iWP$W;{QPX$;*Or{<~kz(Ask9wYIerJB(pHsV?qxlgLw0u%Qe%A@LT
zuElYk#N3;q4jo@a{8ouNmEP%FnS#qI_+n$MeT8!9*4o+9+MHbEirm)B2Mh^Qm5IhQ
zSQAVp;5GI>3V?L8^&po1z()(=#zuxc;W^~;C0kT!@lqfZcVkC1lBKLVO&)`&2_nl&
zt~6uVTC<6}g0xtAdy2%_rA?U-+`F~m9UaBfBP$I7hD~l<Xo4*uvbz)w_9dAnf7w_j
z=ggFJ|D#P673k9QR$olYR*iLcc3uieBd|!^3Rqq>(d}38*gB1yq3LN&kgsy-G&%e>
z1;1Ag@&=2_2-#Xb-@_IK&Y}=c+;aU}Rv)wM>}Q8Ffar$^A1({gQ}nub`{^%cHAuC#
zMxv`ks#joZ`|@6*hwb4ZgEhO2MU@pF5}$_`@8^q{raE1INf@u$W&F(mVYBMYyA=)O
z8$H1D3OUk}4@xguO0#&HS)rP0(I9g@ndzI25p>w{<Z+9TH7#X@4ft$u?LF=+U0<zy
zijIsyH>=k?&?S;6h_{?fQ8ZOG4=7wmy+{16tcGt`5merCyMe%!ERwA6$lzD2uw57P
zmlQ9^qLLIuVx6vzd*#;xKhXrf7lgp~yVH=@fBl#8^w_ya>g`(!-0z?7H3Ui&5lAY?
zm>SqiD-!olQc%<Bw~~*2{%+&fxWWA?Q)CJ2e1=>jQaPmUpP(_w>DpG#7w13Quj3Eu
z8$I#XN4_+YY3&VL?^NL=mcvDwY&rm%rGlW7Red06x|)}6=;`MvDw4ym>`>zGhdI`R
zy-PCg!zRp*l!DE8+zQ7Ox+3;%R@RSV<g__2Vn>2tLLYqb2!-MzJJX6B)<GX>ri$v{
zs&}g)z7FnHEe*+K3A^#;5>;lx+q*|UV81(4*{=5#QrOnOKdk8V2ji-rZJgL}k5!fd
z9haVR=6>qUW#nG?(h#eC7k^$sslVXEOaCJ27nbq*DX!-B@XdElY%TwV(E)01Qx+)9
z0Vt~68XRMU##Gfs5x_Geq*%yOuIu_;tcC&A%{UXyc|#9+3gEJ$I?jZ$>OfY-pbtCZ
zCms7GJz_pwY8SYRGa7=N$KS$^q@NjX<c<t%+yOG2pAhQwXQ;S{(B@MoRFm{ip!f7o
z1}yc0=7%+?1@+F)`IGT9BCo0RLtLoC5s0OoUUB<hS|U6`x$8H=ZcRCGH-1m|{n_ff
z(}%>j1CJmAkMNQHg#GerrhZNqZtpD!6w+JH`i-MO&F2<#U!8nYXh>dXSD23;eDl2G
zs{B5HAOlIC9n7uA=K4weFn&gbKtQ%jErj#dh_|GNkbr-FHU@HFZNcF|qd*AAGq@eR
z*!t~x(IQ7%=;Cq7isQE$GUsmCK_dgRY9GGY1vs#G;hW=pe<vsatMMiop921cCkmui
z3AsE51gzvWxvCvF6;}2pi$BBr9KBqh8BHbiLy=yNph7@wNNc)f2qY8eFY<-lcDYvu
z6*X<_ovcx&Re3T9^%`J$@;XSHWp}33I+w2!ZlDCsq`a?PCVY1uSUo8v^0hHYGLfZt
zgy8I)75a&xvxOCf<I7M~GnrhGU0D8z#r30D^jEPpcSKUn?oKCmgs()!jV5g4U}m}#
zh~2P^Jx?#8FB+1cu<7j$o&Sx=Zlr|nTs19ly2z2y>bKqBZC~&fZHF0>W}9RiVBB#5
z0Q$$C|HpgN<4HoC(e$K7!@;pGDJ`CRK<TNPGc$2AoQm8htdO5YjgiSckdz4N4Nh#d
z7RHYJ_7zMpHly>!j&w7Pl-KMU++k~(o|0zP_#0k{Tc=yPfMExi(XD7meZr#J8+==9
zM!f9;Wzp3kc8<hC0{4Dsx+U+JsX~8}lhJT=!MX#Chd<hM`h^Q;m}0&kPD|1Cg3)C9
z?HxVENY#XUK3D!RQ$wB}Kk(Sn&g_h^{T}ri%{V$#dTsiw#`bRU@}mGEXG}#IR~_v<
z?#ge586}>yEOc%0e~|1S1s42u(SCDI2m3AmA0yuJ4fVSHN^f$C<&G*e=wUYlE>+m;
z`qbL>M%C<e#$s$(ym=I|oV}2zC!gk0)E_{z$L3^>Cie?KQjR7i<>dV5makUUbm;lS
z7ng8N{>nUmQrlez(CbNk9N6%eSH}1X{9J>Aeg2K_45O(<qpM~vMpJ4<+0SZ7N0FO^
z`yABb&>5pCF#+|ajMaA8#+lwPlP#GOSJbeBj6OS_6T(6TZ01h8eX$tC&Z<vVpHRZ<
zVDy(_1u0M-Uj(O;0CHlDly`yZWW&ajO|uO|q=wN%9S5yA^j>*_gub^=7JH3VEHl=)
zLd6yYarHMgYR16I2bjVRKl3-cFP-wK4h}f{nt~3|cvHtHtH>?5`F>eZh~rhnSSal>
z^AjN1_3tns>j%9T{Wz(`AL)EPid}Rq_tM)A^Yt`%G(L<}nAvX~=Z9%|efX%d-OgYN
zsH6MrQP%`vPEAF_=nf5z=d6pn?#?zsgMOI&$R`;X8*~n@-&E_lJ5d<tk7o@bJI_4(
z5qldIasX3SUSkvC+6m=lD;u@)^qC_3Y^e|mxVa$o7@6~+v|UnZs<d%;I_~S%2mQS#
zUTZdKwy13&+}|lO%P;sZ?ta=Sy;hVw2kQKiZY#)YF~h0REhs9ek&vE0v}oYF*B*k5
z>7`amRnGSmOb9O)*e{Gz6O8HJG@9LAujYsKTY%1sD7I4^+i&}+5Ay2|x|FFJ-T*Wq
z#DQ`Lngq`jR|NZ5@EF33*5mxx+id52WBxZic;NF5U$c9uDYUP!#>?(~>|zXl8)P`I
z!KnhN8@aU9y?*m)pvL;Cfcodk`?LN2WO9vC5el}Hc)(fw2Y)osy8NYE4cS%z;P{y=
zNuh_;`JpD@K5VX!&F_*51G=}I)l@+3<cz>GE~BY#mfqhT_B3!%MCc-QP|#w6cq^(k
z*esW1>O#=*&mL(#ovp}|soC5~6(7?Q-d6fn?MVD|gjj11Cb`mIA$KaYabkLTG5wVp
zF9@;w6QfT4<|M`7lBi0Ured0~k=nG?6U(N<f(E@zx@)l*;;+u7!6kvd`Y5~?+VGA(
zIWYRA`3F)u--}OEv6&_?V|ade?SGer6LQ(o%t^&ID}iV9H<$UfnsCSI|HCK1_<D*8
zX$3|sbjc4H61219=hsAy#cfH%hwzyn_Gje3z)33b&oqIiyzGli{hb<61-H&v4PBYy
zh8fGiKzS>|cLo8Oy~wXYa;Zv8${~;ZP0awf$Y-0B?f;{o^9CmadR7(|X-@H>Mo{xD
z@i2{WKPgapAw_&s5b;CEU<GzUo38w^ciVTe*13MipqnO1PCWA<{oC4I7vY2LMz&tz
zgmBgs1NDc#GuavEX9&#oW<(c!%;rN88W#LKC^c+YMz*_&Ds<^7BKZcMkwU#Ko1`L>
zjT&~uypk8}fQx>0%oE^wo7`L4e-eY;*QP(1Io({Q8r9C7nkLEOaR8s#Z1Pb}pA4E=
z3R}4g%o6nqpMQ$xhcR!mj~qqS(7KYSL7y-Qe^*=K+wDvJ1m>SgrarD7@aF}@pUaQD
z0NEEwe&n8uVv7gXoF;yKb@D<mA@dyXSUU#p4;*S=p326;GC8ofmBurC4hl8bjKyeC
z53pSHA!Rx<`?)HqoEl1X`~P$mHHx}av-a!De0V-MZ#Lx?&;j~5B8|_{;PMTPrfj>S
zq`H3fhYs1sVWz=xT>zSwIB_W!6SIW48BiikMBFs`W%ZV`E2~kos4T;4U;#kZtkkD@
zEk%(RlEpu{=ncR~8dQj^pbjw7)jG%Ns2YzZ4P~~Egpq&3?dg8&ZE;^tb>js^WHTtq
zF{ST0!P7{SnrHXYMOVG(<gj5H#yfSIT$xu-Rlil%3a^>TmiOJ28CsgjzM<Ug=Vdw7
z1?tw^GM}D<kH!O%X941OY8A0Jh13fW)GS-)JDoStu}J@%RnRr#94|&$;zP}@N7tU?
z%e0If2Qs<CC55Bsg73o}M@fc&6Cw%>i3Am~hiC+-_LI@^Y-*3p%gYP|F~Zig3?ujE
zDo0`$zOCqE3bk)+!+WqJKC)u590kGEIkl@L|AaU-J*?LlFIHp%)kyy0Wa-Nrn}5^Y
z{!r$Svv3kTR#kfM&maMO4WS)MpgR3a>Vi&ThW$B4;}uV|l-CG=V68CVFokiE#4F5?
zP3rdMktfeR;Qs6X5^Zwn4-CsRdQNrdiPC`RHVE0YM2jW_oY3WZ!|_GxcV!J4Hov9o
zQaP)vBTPt5HY6?Cv`&x5Xe#_-@4w*ebojX~km^f2A|ScWx(KOkTjp<{zxb3{z0!IU
zXbwYl)gU8^Zfwj9PMmMjXn&-1%y>N((~jhh6){b&Z0Q(Ae53&qRc22^*?dfNIAEjR
z(w~mC6-7Y%MB$Z%H)oGp!%Hr*<mZ?e&OFfC6>?MqnodVlO;p(Jl!Krr_2!qyEz@hf
z3k`Jo>6+0FAGvQX(~0C8JT<?Q{akqf97*FlK3m!}L#lpzM_C6MO1vk=r64+_nBHMy
z*<Z(<!(BNrsnff0b6HBF-@I^yiyj|vB2%RMnnP2uPecuSBb=1d*6buSn)B5LVhY8~
z=O@smu2WnZnPC9;chsolmj1>4B*$SM0iAx_tyh@gIAI0j(%LfHJZFRUuna)VPS@G`
zG=i(6vxmY8O3eI+_8mcrAnR&86%`QSMRq$5jOsSuJfk>Tw3u`j9s$&h5THAAuM&?<
zficONiXy26&(TZ4kCS5msi1{zQ{0EGEi$Jl43II)+*=>D5dMaCw3@9J0?G0Z!hYnr
zEl=LVFRxOqfDcZ0D;#gH0>tN}2FnTGwr0t98Y&B8QD&)Q1vx5b-+O)<$E(6FcSWnr
z=m+?>NtqDgF8E7aMCucTt$tddraU&2^173^tgDOXK&Emi$^-kVs(|-R6Z~e~FMZ^@
zxxAS1T>0{Yf1QpI@P|H9fI|e1Um-NPkh*&i|0#zkL2a>Q#AZ^pSZ2i4;}Q=_i~)d-
zAfN;T8|7vBJwcxZ3p&hR9i(S`;uIbkkgJR8Bs40R&@JbuJUp>;@3WPhZTwP<B=9%6
zhqnbL56qjH0aRiIZtItJ<>}VEygT-Z^eU6kPiA9(uJZirR@MS1Nfq^bGmCkTg&zpn
zUhCN3ECNJ8{0@jUZ!UJSvEYw`ajF}0&_1CibHiHr2a2F%z$@iRqawN|qCjn~)Vk<P
z22LP==b}RL0M$3+|Hi|)2Y0+SCcq#JEcoP=T%E=eKv*IL3C;IH$fQ8h;!m2{{BEL9
zLfwAuYuh>{!Gv2O%OBsJ%G;PiORa@xnmozeXBfw(*{?Pb@!!U_|F+ItQ_$&$J=o>g
z(V$9M`MWkXUTWAbTY&2E=A%>(9<s=#{pX3Wt2Zw)W|@aGlL_4XRHU5o4(yr&p&h4v
zb#q|_ze^&9BUJd7)vvXIFP#~6l>7LBoj>xH8q!YHzmk$Np6m?7pE~Z^3B^BIWgq^m
zRN9R4YFRL0=MjBVa4BWBeslS|iL%v5jHP(4k)+1=M)$g#@Q57L(gTgJ9=4#xREcv<
zLgw6$QiHNDuX>F;@3pG5-~2b%;)>b*TcA11XI2gbj=yX?BqF=m5_m47>4gE}Mee2o
zM5@=Rcv|dU5$(zb;8YVG0s;Z64_H&r!s!9RfgZM9SuME`e{DtE%8ZOndaE$u09rJO
zhD#0s1HTalM!6=7*RszH=Pz%I=PkFXTU+L$mY{%=7J_CNYTdr8r#k%!g)2UnI;@Nx
z!)4z8lbn;W#jfDt?IM?&CW}*r3sjYuJ-MCFWvXyH@uHQqcqE)fPU^1ov&(<w4MPKf
zCr@@c!j!2}YA%$cwm-N#1^a~DR%R_<y<N_=6^9)O7r42S=KJTdgtqu)UHq}8qPa!h
zlBOW21;oTteW>yBxuoqmz_hd9r&0gH1@N`UM^^++=MmY(`9g=qe5dQ8iSKU019DIz
zJj1XXT%Zz?1gr$GL#*x2j*a@{ns(S3UF)0p{w7@he?2tGK5Z!rKX~)u53?#zLt@5(
zxH|=Onw*jEYsvnh`<Ll{Cx-v$6-F@bbr#Q^Yk9`NWaGJ>@Mrk_k(@l&JVZeOl{c%I
zU>E_UT0V?VAF?3ka#14x^TG=_5+qFcqFq{v(yJ$5GX<t?o?LCSz!c6Be%kH)DF3~(
zNd;S@yY=wGCSnz(o^m}itnrUdKU?6c6m#5JY2`CA<Ct1j-7vv`8&|~E41-e+cS!;O
zf;+t?CqqP#1y9wlo$LSAsx50jH&y9&lcA2Hz*fc%3;Udvi`@UXk=L+j*aBb=og!wk
zpL+{c?n>MQMH*1Dkk=R#I^KNXDm|39-1#@l`EmSAG0m2OIIMa{SFSiGRcSj1rR@o1
z>x5m?zKBU$jdUBawe3bH7lca=N}?Ffg5XWa%K!=TVdg9OJ^<t*o=#(UrvEHhm@xJy
z-`KZ@2fJ~Fk4WK4ZzS{C8RZMZ_=6zrdsPARn1qTv7ncTio&F^KhOn6c2hW8AV1~K?
zFDmX?1N?;4SybDAHs0l+^fWja#gRlxC*B<6J1PU;9Pa^k{Bo8~JAJ3$T@6d=d4+Kh
z^t0a`0}XC*MvoM*4=C}2p{u0oyh0i1xZ|LvUH*8B$vQ*#<yxJHn)&Zrj>Wt2`ujan
z%0PJjE6^x;M)IIwWQwJA5+r~ktc2dy^(1SkAS0dt%~@A2gxt8|#^d}CnlAuY(yk80
zVQds>!gvFIRJa~Ls<qyv(U6am2QnxN$sA#xFDfhzto^4N*|!x~WnLZL1{p~sfVaQ7
z12yy5^3~a#et%2ik<V@xcT1F1m>_~UQp|-ZatT+4#bR0xmAymHiG92_38K;L?+4h_
zvq!REKKv5?d1cl6ob(iDH%Ub;@~7Q^((&GG1G+gV^w9$yx%lfVbqB2|4p8*YTL$5U
z9RAOP-FkGL&wnr<w9l%xk=`M}3LF&ECw?a(Tuh+?pd%{s-oENr=M~U>pa8@PeCry(
zWUtQiX+__|*%|xO-~StF{(eiwbH`J=w~%hx+DN)KBg`z93ePS5p$7ef2~!C8pC;gc
zO0K7or&Vo%Q3tMR_1~{Hzi;c!UHG*0J=%2W1u{Jc$aM#nI%1eY<eqKQqrLh+Wg4=%
z$RmwY;r|<kufRH@s%w1wme8Xzp!G3|ANIKu_yI_}`9~S>S(YFT8CTAd!dLB2oB7>D
z^<8DbONj#}Qd!}{wG5(vXU3j7kP<+z;|Hdg8o`pft3kZsh;yT+Gttz0cY?iGJhS{j
z#mIV{y-Jw{u?w^aOMyEQ7*t<+yqv4KPmcwmX{Sf_bLeGHJCmGJ>xer)up>aA29Ocf
zXx)2GdPvBq{+bl1rF4SMxOnB$(u)b1FmFm2kaUf5<=*cDHuRSOLqkFT(o`7qV^2Z;
zjFu+=bgwv{Y(8$~j90xiKn~^y>;sXp2Qc`e`j>6+{S+CH9WwWl{UUGQDa^_12mz_d
z^dU*2k|6D#K-p8F-#QVX2CT9XXYR#I4*xV|EyV%B^pZ}=$Pg*y-N-@w4v9w8F$e$|
zS-lM|7=LSWN_vs)ayDzf>xKTMx0mr!K(Lwq%Ljl0F=YuolK`3(nS3-mp14+=Lz486
z^y^^4FXUbXrazkZN&<}s1^YwjKU_QFRW8&iIO-ppGoVM_G)8rD@Dqr>0zi96_4~`3
zPDhb-Wvqjo;NUfLgz|_XI!%m)n$skSVPGce$AR{<2cH(2B93uD*#K~)epEX#$o=HZ
z^1@R!6@3rT*=xYMuarGtU^K=4uNo>f_LpY|`T_{KC83T!W2=S*#SS&&uyg}UqRx)R
z2AZAwYQO<=;UD9fVPhaPeAc&4K^}Idom1Weh3xtvpttzG*yDh(eguDe417PyFr@w+
z2DS|9Z-(Hk2N`iF{{C64H#t+PxXS_A;Q{P-3A=v{3H#lo&Rumb=K(oJPY&l)Y|BH5
zH}ODUfh<TCsMP%dohkE929Y=YX77xel9}Wj#W>nidt4!ho7uaDTxT4WC2ME1BvyVH
zUJ$8rd9>MRX?kVE)Q3tGw!03Cj<(|<nx4M{Hev$YD=`HOstpqOs??hPSF7?~=sEF^
z*Ng!MDExZxLW8Qo-DL}0JW(fuoE0{{!=}4y7ks*d*8ei>4KXWD4RZ0h@FD%x3<My!
z12})09dCQ+DIluXz@yxyO!5y+xO_LiT91OjQ%sg<YK>At`k9;5=uIo!kzIfALWQc~
zwu`HA-EETOdJTg5W(lfMfumvPm<?}e0Wt%#_8Yw$+eQWz1IAgX%F#LdTqw_ON5q1g
zeUl)=*Js_|l{p8odq%1_bKZ0`ym4m$D)a^9mW>^uCbBH}aTr)Jw-Ml>$lcQOq^DY9
z9D%{|bmJb?prehG8saunB9G{t;_Le$0IH)E*7P@0emppR*8MQHy(i-A(YgUW4FvP3
zk|_YNInWaX#`tPsXkwLv>Wf$;brXkH?icLJy%+{ATja(L+OXyz!OY{!%fIU?M^giO
z?P-^B4y0-ex^C1%5@Im|cylSsOq3L=WUegs125nCYn>zi>c$B9>7QObD#_%KeocV*
z2k%N6mxAMlnok~WQ1EQ=@-={t|L<jzWTwzG?$QI)UJ2T&?L`O~1Y>Vd1?-Oc@dzE*
zI9yg8ZuNMoef)~?S)mXL2sWG_24#BiFmKiaJ#23x$$}4uk?tCS9W@XIv+-pyTp630
zF6|*ssw+X$w82ic#P0PvB-Qni1tynR)BlM6q53I-R|d4n1hj@?l3DlZeCozwb}o%`
zR6ByeU-!?iMKv9by<O-YHFK{Vq!%?`P3TNnW_v_MY<1o+C~n|P98bTP%}K5qUjp>}
z5+1UK*aUioT0U&Q!f$a(ycCm98fa7V*$3^ml3?Ds%CN_9XJbqO-CA=pWslK|u=NFX
zPcnq?^cOfi<g+3;MXjJ;q}k-%x~Ioa@S)aoN9RC-a|<0(=<G<Ea~D6zSYOpNP1Rma
zF^yc>?t{F@OiigADQ6Z#y^@EmOfMD2m<f<UK1&yLs0b!@-)r6Som;Hn=lXU3fwxgD
z+}UHkS;UGJT$SQQNen*C11+~=fGT&WfKSt{gSt?{JDCATGU9cx6|O*ga6s>g{@mPz
zK~RrD9?J&0US9Ct`DrbrrkpkL*VAW`FXIy)PfoI-eWcGo0<YzY#Mkj2Cb6G-Nmp^{
z?lsyt(^J3v@I!O={*qqy_J~fuEjG)p2Lk!E3(9*Rw8OE_`TQ%IJM<1-(lchZf-4#k
z_x4?7&XXbZGFURfy|<F5eln0|%->}Zcb}eUI$qGAM%U0SfB5Ba7ZMn5(aG^K^obW}
zoE*Rwg$bkjx}Jh#1;IoBX>^KLdzifTo(~yu-rki463<?0?cy+C64jg6fq_%*4JdVR
z(tp;p&ikP^F-3(R@1LQEh;|4jyuN;Bh4h2rAnAu$OQJ03jyf+NP}oY}{<X&x+GIB|
zNd{phoxKF7@hOH>e?5bcR|D9S5hIQkcJNYioXtZBoq+MZ{WxQZYvzr6VfayK(ETHw
z?-Q%nDDiY(8#pCJ#6Cd|85N1el|>rH^FhyZYzvZ--vCu`z(dQAWXVUEmLlkK89BS6
z$+-Leu0fv(?Xp;zE`U<#BbqD4sptx@2x5C$IM89*es;yY*1K5|O7^pSL?z`-;0Xyw
zVkX)?o|T3`OCL}nx}n9d1C#S@3)A6y_n}B_dp`n*=D<-jML|t+k&$PK*U=uv)^EF-
zsit4-4z7GtG5cgEDTf^A+X_2xF1fictks-y+^DFg-UR%2iP*FO{7Qm&YFb&bd%mf3
z!+0b%;5XezpV7iqcmC@OCW$p%$3s^IuA-XK0fQL<J<^XI+t)9AY-&a<f6JY~@eQ4f
z=N{qsY}5L(SAr0$zJ5o?pwZRSFdE7r_<1+Zbe?1rY`9Dx+$XQx1Shl^M4Tnu0Js+;
zO=V$b(?a+)_q%gB{kLt~{(Y*ggfIn1|2J|X_1jHsmU46(S}A?6{Py}Ffmr78wT0zJ
zq}3un@;&bb+8vk!rOwYYH8YI7emSG`GV^4{(2>a3*XTL(hpPp#Se9F()xrr$RI)B^
zi`=~Aae@434J3dx;BG`d>9Qkre~BizBbx2VZHP`7O&h8y-`27L?YC>D_W61J^br1Y
zndo(v%YtQNfB}($xcv0TMYrbmFve7>r<VSEWqXG!Ec>(@Oe4jT>=VxR)PWh{=e&Uf
zE1|Q=YXeWNNDObyQ@m6&yflkzT`+cenEfdoQLyJENc7VA$(LixO)djr*03%yf<{W=
zNk>KQE+A<?xu}KSQM|a)t3W6>mwZRXy0NWg*_XFIL;=J%xqCk-fNzM6X<C;7M7~Ha
zy+X%pb_q1jrcgr9kP}SnLi#Gdnfv%^zy<C=J}P`_;SEm#H=fhKfy2|VnYrN@(DM)E
z^P`aqr@u~eV-ILov<#boGz?nDc~p4A!6924p~RQJt*D~-Jc;){h}UllK<VF-g)Bfv
zu$$K?JxBA&#MANgN7ErgdM_<GA*_<0Yh5-9SVd?^fAKQ_R~3!-6;l1T=gj$KQZK75
zjgti)YWG<y^#srxO+_zcf)ht;$nKBHaWxuFF*z-&$_~du0&7?j)<HPBC-5|2Ix#S{
zHw}0$G`C(W=Y0?MR^7zxpVO^hb5<)JXq<f(VJ7nxSNGyPU$5Y+qu3xbp+68&TQa#G
zYvUv$N1`-}0q9)do|yo^Pje<{QF}7J>}z51nK3|*Q>P!w6A%5V#z4WtY+rVw{r4yh
z12?h_WiGzGf6x-$m&ILrCZM|xZaPT~Iua8E%f_Km=Rj1M`3EH-u(1Jkc`z(<-}}vW
zF3-%ptrowm`9ARm)zgPTcj;Egttby(?{@HZ8U6Z=!?_l%s<qYLnuMTk^CqQma9+-n
zW9d)&yytB(qYN>xDG)-u|CkiKeJ8AGl$|)uTe0Q0;%0=1Y(DYa$h@Jue*pXbyoS_T
zC7mAtnrpxvQi~BX#8Z!h0Zw=BBYi6Tb+P}rif(^U4fCAL{R0-XXeyP58T(9MVPi*u
zALZUljGtYad_EU4lD&8pCq*3?PQPq_kNtf?C8%TEhq?-{93KMYFh2urdmw3y91p9w
zE9Ypq^t|^^l=%9KtCFop_+P0ih6KOk@v3w6ay2KWdr6Sy;CD`}mkVdGCxL-8fbbW(
zpGx(|LsNrQuZRTvU>aUoiP;k@QQ_&Gl=a)Q4gcyfa3q{V(Tq`km`{c8A&28G15`E1
zu_HNMYI%@Ju)n4C5)xP24eoh!0~&_EEh4nNy>tLNaOhScZe&?^CJ;(JNBgc_TY}~(
z3ROJx@rIY)uWn>bgeY4a!d!yo9AD3tA_duoy%aei!q-sQmkaHe`jgQ3OgMdguHZ*-
z6sm6ewwM^2|6mhaFa1Zp^{D8`zZyjkQKnsS1brs~QlG^wll;m9Mr#arIT*XTMWnfS
zX**OZT0ztL!K;v6!JOGTAMqMztKm&@$V*eG`9-pZf0p{e!e_-gPqBg*<eP@tj$Ze@
z7qVmbKi&!;<!$D#nSN%jGC;)lIp9MGiNv0?j-vpSRC`7h=&Dak*tyQIHb9<+Zc(`_
z6N?f0_NvCN<rJfl`lRw4KC5ucEE*zS2iJ4#lES|bWIJDb%8{r|iCUZ8^%iQce@Ho>
zW6_}kj{|*03e`xbnNyDKrW#VOZU}X03Kt}CxPs76<JdIy4=OHc&)bgI5bX~<8eM{m
zEpz@;MKrow19U@B$Ud<*%U>OUbE_@PBPCAG4Q&O`1irYCP{`UJLW$og=b=x$W~a>m
z44oX#q<{&%>Fp1?Y)I<69{%ux0`tLqTa&7J6Nrgtowp$3mQeF(jsVXN><faQgbfv<
z^bmH#IVVi@@Pp$K<&`Vf^Yc0i;5t=H<wUuF8-GX;(VOMyM}x|JwW{-i{X)MQDV-Uc
zm`<wDo06lm$@q|R$f$rn9K5Ta4DLVY!7IM>g%oVao$PxBL;BD0mMeR+KZ<Gr5U4@B
zyeR&qfwPMRlUa6Y^hJw*=ftdQy@L(B82)DIFkU<I^h0&5P%P(nhBL>aX9LT^*S$Uc
zopSbcpdz_FYI+W?G%XxgF8(a{8wRzKd#;LdlY1wNj?{vmC{RCn>o^N-swakA>A*+q
zUdzy8`|WU?KQqztu|Jfdk*K0Xdg$fh@<|IZVoDOWY1zFKv61ee$U%$Mj74#=W07mY
zak@ifH*5`3x?F~Tc!1UufyBA3slf+n=KE<%WUqZqZtntWLA%5(oYS#(&#Vb%I^CPM
zVvby2@ijK0f#ANT&b>`s+?sqshUkAKdE;#^zezqNOqJ>9sl(b4ephx>QSQZ%0`6Bd
z4sI?3!JzrIb@5sDFxRZWM&HmqZ&1^{qaE};rSG#+<*u9=xXFkRwn>^n{#k(0a|J%j
zVKbBfQxmg0;n=x_wLM+6VjtwOnq#p!zv>=&I4x0-gsa0?oe;$oeD6rTJg9z6gX(9^
zN5%DlUX+rr4doZ&rYR0Dz_7E#{^3s2U4g&N6rX2ercG_laoa~}w@9VYNyn>ltes>~
zE#<f2f@}%uP?5-%c7$%R%a2bhFf7dU=^NRwqEB^I1!_(7Sk+4CX3=yTJx5?`o~;yF
z!-E+|MUI7A@l&uiX&6?#p&Yluoixd<18RObu|ANq`KgODw@`5%C@S}oKN%?!6L55S
zn`8T^Qbj}GBHGEYyH02e!u(Xs*~2w9P~KXRL$Cngq1vP`0ElFBZ=p#OM9PD1KPTVF
zFlh+0vRwE1Gt2y%=8SO$j5Kt7#^gSe-}5%sMJcwuE|^~5_7c-qTX=q*xE3jwLhTLt
zQFoM4{pB)i`&}if2C(mf?+YAU&TyDiAJm2xryWQq(t&0?HF*%o6V+%?jH?Mn_?Du}
z<VV0*(I%aq^xN}m0*w(F8S-rAYU3twS#oIVuvp4j_!*~49(rsa2yVJCyOQ|FY5C*$
z+#0<3br4cv{g4GcxglrP{&3g+V<}97lgpmks7bm5J?!A_J+`D7zAwm)foxJ^Zt`nt
zp19Qnb*hFRe_5nbJGD=|v6fI;ch69B{_`P%oJ4_I(fX#t!4~ngK-$x|4l?M>PchT4
zsoRwJS657G;f4BQnDnI4Le-@n-5$%6Zw)Ixv!W7o3t8Z1U+Y^Rh(~tnhN`Kuh#!>O
zVWaWqt;<*_<qj=YqPT9#vY9*~pUT7U|1kB|VNpKc|M0!EQX&FMBL<C>G%O$?(%mQ`
zDcwt|go1<u(y){?NH?g6fYj0r0t!nk2utTP`~LjC*Y*6T?0wHYbK-T*oO9-kg|B$V
z6S`qocRZpFD0);$aE~emgR(Pz(yZwE<)2lJHJ{1+^J@Q4PlkC|cNC(I+v_X0Kir2{
zLfEKg)WJR?;N7Rg?I1fRMAYjz3b?UIhdDam#m%RaURa4>caoWjw-zqbuCz=Wb|m4H
zw@LqyjVUC|V9;9u4*>%^t`c0Eo1AIl2a<ukpNl;zrRlrtk0hcA-J>_%slcq>bbEi;
zxxH}(-I?3UM9;d?w>>W?YA6BoU~jW{uK9?)-MKpMqPv=3{3%4MHZ?Qb%ZRG2@8Ic_
zD)IB+_*|4mOD~zk%yu3{dC4`k)0d1-^i(dPwZFA*!RxTzz^sypj(f$Zwnkw`0nwLV
zvFV^0^zTnK`Dq}o(t0iTkOW#Wm0nJ)yI#`C<U1$2=T=eW(vmIZY~kbAk<_KAV)&T&
zX`8(pKOgUwD-|dOvRbxyfizo+aE@j+2D49gdEw&5{{lW(cQW;xLWr(6?{>N=5%FJ|
zCoIbwEkkT`-agRElTSOpntEDGY4&glyH<pp81VphKWLCVx;5n+%}c1S05MLDBDMZf
zJM&tsA<orVS5i1O(cFprJUiVVd_!};RFnfrr<`AF^^K+_u_0&;R0CXDMTJ&nP|Hg|
zVWenX<BHozx-J{irQc;8erD|iBx})4+|s0LJ0y@te&+r|Qgo-b@u>4B+E9<D_t>Q8
zDMLMf{n()VRhGFAQmodlYwIEwjo@UR&}erYv(uKm1StrFQAI#^4F(Z5s3_KPOnrj|
zIe7V-!io9igH0`1avG~?Z@`NdhqCuzT}y4nhCC#zU-2ULh!11$0{FC#xC-wW6Uqv)
zfXa>V7a6;?RTcny6bO;ozYt?4xA2>|$Khhc?l*>UoB&0U7T$%BFds5$ueer_Xz#Gj
zn-q7{FPda+gTFbCt$l)y<swmX7-nY%&-xXxO@jiZ1K<o6QVv&a{pZ)#l%+X6!(96X
zIw)-pW~T->l;eM&ebTv)s#!`~n+YmgXALoq@*i$L&8{WCvZf6x%Os#a31pfae~e<e
zac)nCUw{zPf*!uGVBR6GW7_^UO*I+>D8Z!q_>d*Y)dhgKK->Fy+Wcq-UNwSk;=);G
zcuPB|R4VM>g8F3gCaNs0;V|j;zO3am+eOA?_UKL2@xa!zC(BT>Ih_9)P3ue891~i&
zOsW4ZUW>j;d*E}g@%Gq!H{3juTq(>6nN)v+@CaKvK6V8J;P2IofN(wGxnnHG2ML*(
zfh7&LUeJ;**$Lu`UxTX29%SJT@w5)O)iL`W<a^!&4wzV<#*20x^F{r-5DW8J!+q6!
z`yZlRI5?1lNS6RieZZYOF}{@XNl^x^heoR{i}0SVnasAT+0$-G5bypT=-;;Qe%p^L
zr}hJ#mSpfhIX|8SV%zeFvvpI$iecuJR0~Vs+Vm^qc9v*Rb3eOJ*+Fq5<W`BT?31OC
zu)FE_e%ERC_$`GVY%HvPJAb~WCIJbT3=`}%AZ7T9BdVhMdmh%|`+3Y2XL{QIec5Sn
z2u@i_YC$%41fN>V!K8!DDwWncbs8qq$>NkNYuxLeEL%|k8pvQCz><yO{8Rdl`B%{v
znF%TRu5hX!!wn!VQhg$gi_@1(Kz6@)j6R1r%Q5DU72Z{YuscEf`z9(`yoMF92h=Z2
zZ`eL&yzv#YGVluTv1E|LwrTbLzVe}@8kDM<f`<rx;$JYxkx%WhI?>)6M2Ix9vQ*-U
zNsBH-UV@4z#(R(pqg{dE)Ao=|*)g2?)Kcx771y$M+n;`^?16(7lR22L!akW%s!MWh
zgF;M-Byl9qeEZf*loX)B8y$UAZG-N;ElJ{EtmWou;Cyji6aK&OSKeIs284TzM0=o-
zf<^XGI4!F!{SJOtvZ5?7_#FhlMb>X=!HHLtYC?m+NgqZ6EiQp7AqH@uNwqC^j49+J
zw<4ScUE$zTAiShn3t)o+k0Y@VxzOS~RvHwmoEgaJ<U<@X5jt%``(BL$xf(&fl^}2S
z_>ZaxvJ}AFaj7ZLn#mD+5hh6R#q^)@PA2!;PEPGMU*(|uhcgC;Ahr|lpCy52g>l@4
zf#0~El<VRDDyJ&jsvMg8E(Q_ooza_Ey^$oeag;=<+03jvKVyVOYP~H}ZRBCn%CyGU
zmF1?UDTH&U>Y7Y%5`UcvvEUq}xDUD(e9dup2JgJgc`Y+Dklm~|1mm~`W1`hssH&?O
zqekB9Jhg10v?#@;3qU=CxC;1G`qWFJjN2!}A|^AhR%qB|fH&=B(B1_CN8`1Qka~G0
zA#kU}s|s6tx#Q)h1W{>x5%_jCAd-?Y=AZ320deTkjxJG<BB}J*L#mQ7IeiV@>NL1s
zL=7C3H+wQxAzdr&m6x<X6~zn{LA$fTSk)-UaSoEGMaY7Gp3WBgruTnrc|%}lK?9SP
zC89G0%d>ML_H89ut#?VEJAEDsv}O<}%rGD}KHVK!wodswki|Ao=z;a=T7Zs4Ik?_R
zLLOjSNdfz<-gj{FSl<(L^7_r&Xh8nEtn>8G%Xx17A<(GlRXqr1K9Jo`Dn^6uairGB
zc852TjdWw+#5zex{ll3+Ch$W)XH|Ac+dm?@L;Y6zp0Y``QUrzTGn?k2b8vKuf(rSL
z$Gr7ne>k4Rzs~?IH1`=n?&j3Slf}H0IP2CEiVU&8thi5cYD<IT#FtsE&C$_Vscphb
zbOxeQvFh1v8rnyuJL9{?V(wh&(c~%yk+g3|DNBUQhF%UabDz8Fq&w-@4$?LI*NIHu
zBSCqU`jU#VEOkHDEuHgXCw`mYoEG|#Vlz*l*F^3Sp<vmwe38E>nuwT3+5sQD%NO6P
zmwb9Oupu;f7WDOL;T^<ce@YKFxO}5+%ZnBdi8toSq9_);^+!C41T^dEi(K~u)TJ$-
z<~s4XU)zWy<GXcnIIo_mqU_Q1TSWqJp5MDZP$3EYF|oKTN79`fu=YVC6Dwg>K?fb*
z{jPc6-rIPfJ4LhmmN*>qW7R%A+Je&`N9*k9qD=g}RgeAd6l_mpR1)uP(0HmQ&55B&
ze-P#X68}ElW#vbQvZBaH(2s4N#Pn0y0{Z@AhaW=@(C8x8%j0iW1+kh3ad*vK^KEV$
z1z78`1f5suZsZ-BoF?6Vna5DM%PNy}&xuH)7l*hzIqNd4wc2+{xgdn1r7U%w0>WNd
z+pah|WWITpLipc8uGwZPdl846`28#QqPd(GbMF5Fw9V5lDoSb0BLoqZmhG1CBA+Y@
zG?9yVsMSx%4q*>X^=Ge1yC1atHv*4G4LvxR2_I06HDhRVZS>`n0AduU-MlGHY**+I
z?p}<OL<ObJ53<^F#7MWgxpDp3Sc`Y~Z`eDZPe5SUKJz<QSD|Ry#emcB^2p%J57oJ}
zRDh&aKc`lqe(nAgbOc5L=t)Iv%GukjJL*&lkz_#OV*F)Y9o^Ej?^<c4KlBONOlD?|
zENBUt4+s>>bwMZ&-vGh#etmTs^E64gw^_=~*n%J!)3gy8Cmzzz+o|~M2D#G~Zl;N@
zZQ0FBSH44|N-u?q_tZR{wx<5BUIl%BZ0aOU$XRK;4YU;}Rx;HKl=w~lqZw5qHp6Gn
zh$Q4j;YxVXLtH;XyW=Q1|3TRB?djQi{hP!8iH$<kj5pYthX}u8pWyP^jIQTl#c}&3
zy#A7rRlnHYL)P6OO%nVGG#wayBr-BfnI*u1YbR*(aSa2l>8%MLPQGzo7lrT;PJixc
zX8nuLdsa7R180QO>yLrpIR$E1HRX#X+@<PUw%I`M2c>rhJz`emA$#v09_~9D=<WH(
zwhGw5U?#E*D}<hQ?1^=nc&M9+nN?KrvrP3wK-PKlQlAGvDu=5z%j1yU!`7w;nnMqb
z*FvAFL`^+2TAn!H-rh8M!9dJgmKy)?Hd3+(A2&NtqESZso&9Bcv)BhR%LcQvefeo0
zcF^)FmO*#Jz~_eL<#)-l8^f{b#z#{tTsTmv{g5UljcPtS=nu*n6+l+hlH@&%Q~o06
zeh}cke&(wl6UB9z0@UU(nA!Xe)%bGuunI!9!ljG@+2w!V;?(&OtmczE?fZfYo&f%o
zE9fxgillq{ZNJ|LhwZZ4D#v$(UDJ7dtw@g`*;mTPz2T<SQefpq4D+*$z5okH4`Msx
zW1awNXQ~dVM`I6SwqMyu`s}#x?(GPLJ(Zc>dpFXVMv%`yKsC+|0xf>6hgXY^`eG)m
z?{0sXq_~a5$!=s(=EzI!v8bn+<I+`Bp*h9Ou_U6D^R@G*;h%$@4eKbS2Nc@-@qo%3
zF0cPklvQ6}8E_t%q3T;LG1HF?*-I&F)sRJY;x);+K~+z&)_)oI6m&ZjEK)}I<tgbo
zO{Q4H_eTCuUM}9}Ww^Pt(7Gzw6+hU%=P)v}v(w0%hi`4jNy>a3l}+BqEc8N?HyXRQ
zQ{AHw_H?Fu(PiKBsq3BN{`0O#%r=T+%+q;v=?(z|kcL8U&_02LP}?o$(?O|z`ts@V
z?vPm}J8Kg@Yk$^4#Z??%#u_CAwhA7b2cRyD=~;_=gO4ch3tBctjW6<e5yu^bwAJM-
z_^h`$UJaq`dz~U?!^;h89c1=g?+oEy=j7_GRF*96#Z+lZwhc~NvMdOV9%B9VU%-Hi
ziOf%^0xk@N6Ff?CpR8D0BvyJFV^`<+`#w?khhKv(Z<fFm<-`iqABFJ|71a9Y^T}(?
z=6&JMKp0gA*t?-@^S8CZ6WsA>%mc^vIv&$AMTTOrTE*^X1Bf4Op0C~_3O!@q0&<q+
zCJ+iykqA+th$Gw^xx;^G$A--FBH7bL<s0WLRSH(JmT8Fg7D<~VAQMIFZ{4AI64vS1
zL8^f;PZQI8)5J|V9I$9OPv7y;aeqb(`nR#24=KpjYK*Go`=j1Wkw9yPze2=e(qS-w
zBem9-;<aQMS;1~v==1_RUT>i{Chs%~Z_*mBIZ}mqa=(DXm;{5h>y`W^YpHC59A_+&
zjVkyrpA5)rQ72|bl=p+Kou;YT+xcQWfybD%bG@P=!i=jDW2b;MTztE^{i2_ZyEYL0
zyLY#bPxvk+f&Lo2#5j5HKNyIJ4aUClDLa(USs%oz&PS~BX&6a`B=imw9F`L9vGHz=
z9=vu=R77$q52R~mN{Y`Wv`d;G>Rr&P0C3II^B-i<F8J8+%^F<2pA?mS5ASqQC|BKH
zJeGlRXWPBwy~6@!B5H{uE-0TYIpvx4lXI2qIy%p5xBD(SpS&Tz^k?r=>hzll-zvT=
zoosH##$+xn51oGe^V^ZV=he3?krsB=@SlNB6VmhXdi!mKKZ>+PFMzq@9+UM$eAP_&
zY>AS4>pI^Zi7i)`?kU)s(wfMH^*)ovI~nO36y_;ZropZ)+r|&R#O#01xt*xtE?Rhv
z^<4GV7g_EF%}?P!{<caL(IiR~Q<Y(M>_Qtp?A2Pf-}l>VqZ}7Ww><TcId;6vKC;u>
z@Ow$~;7gRMK6d`WZz?$L4HUO<Jj>2--n~uP0v&BP#~*t;4exHy{8bA7voXi`_E#YL
zk08&&Gmk*8u<f;5QN(c<WE{wX{@+^VE;f4bf`{XhR?%0beRj>}h@U8;e0L|dH2OWU
znsXke0)-Q&fz*k8lf;yXZ%0VE0_R|HOCc8BAz?g)olI3P=hi8rzP?u6Z<*Jfd46OX
zimg!>i4E2yb1yk;=RRngp;ODR82U9o@gF=U3Ub7xYRMH`*OsoZ^?fhrYU%qsNk@{M
z?ZRC9acr<{>mwieQX#$FlhV+u5}>Pz6WojzAArf|qug+(4@~>znab#BIoC4Qi;R7;
zHDb%t6goyygSD4bObn19GQ^^BcF%R-NkXxHli`O0{lRrV?l5d4TPv+?WqVR#&P>$6
zci9Q<5~QOWu}X!`L9ZUvX98zw5){}<R2>_xYfsuMG1M2mmtSup#(%ne`fv=>x;Ojv
z3mp?F89Mw2%vzoE6hzb35`9MLQFd-Ce$w~ql{@(l((9dBxz0{~Mr{WJLhpTh7v{Q5
z!|Gq<{lkP7A92}-PO~U#c$=F|F<LYy(T~5l!o4E?=x!_X#X%mIMD(J~HMlDN$;$(w
zJA9pbsG`*KRh~zilCf72Wu3QHhvqX0E9qL9PlqV8ZtdfNa9=G^TxCf4>r7`icp#%5
zC5l6NU|i;o(%6~q;q0d(uanL3`BWeL(Tx=nP@c{M|A~iSJ5?mQff~7ZqoY`G^)TpZ
znc~xViU~H>arVB4rZr8<hVU{bac-n;@G7509e{zpfD}m^$tVDTGN1{fgZVe}b{oYi
zpb2W_V?Z%Wj-w-<yR`gO>~7JYUb2W~i-YuTp@bSPrAlCP;0?BQDhgSz!SKFv!%(b=
z;Sjsnt>2yU7H=TyJ7D8q|K4y@p`eLW%>RbH20ZrP7ffBbTE!I5mZD2>2;#klvK3n3
z#zUMGA$4iGN(C;TiW!W^x&VKv&+y2KA5nI{slE8MMn)%G9@3!&SqszfYS4{QOhm#0
zJhsZT?GoiRW3e0(w0_n=$Bw-&#LVSi(R_s<t|`Qs64BeOPPy7*^{Oc{(uB9fL0f$A
zSL3Rv?#9EQ#dpV%6ckWZcEYhB-I*ZW|4^2?m=hj2)`XbnTa+4Iwh4`+fG~FjEv;o?
zts;Axnaux+3D<9;92rPvIFW-v?T(HotLDk+J2?a)54C?G&W+FJtLRZ!!~1%=g?$<3
zB|LcKl%bf1>0idTh2m#n$iRdu3z?_|Qv>{y?4m`s3Nx;ybh8yYl%wQW;~W=yV|<d7
z4AT3YuupLXUDl!P2sfX?nlW|V!h;fjty4J~Q=nr^@J*DO^#?by$8Cr4Ax;YPEom#>
zUYN9~-$|$;A3U;A00!yhB<vIH8E7-t2amZqLJ*XqJ>VPGSJ2toxp(UZF$Bdi<-eau
z8r$Z_y(pcIy$af>cfZy7+4~aJ>kem0?P0h<9A_}VM-0&xC+rB$aAo`rnXl+%x~4bN
z(aK`vNChFu?c7`zL%?pgkZ#r2uuFUwg5Rxas4q<Z6ZFDr_Kpwj=J!7}ioZXP^H`dU
z$X3i1qgVON4sPQ?w0Ek^ty^}B%<&K#0zDaok|OJ$DX>@2PaMvgn$dv<gto=_@Pikv
zt*uOWO^>(W=A%uWt$;XP^EXS@vJ5vE?m_Sq>;HZ}L5+&jcp{l$fr%j&*^^2-8`~3V
zU?pujb-kWndjq0Q`wDZ%L#Cso(Y3P?7O|*Q1Lc93tE<9cx7eYwvINWt!QMCkazHsj
zExOwB9F_o#ty86Q#9(>_W-!}75eSsd+9tl}D`+?yJWaSqD<YQAOP9GjLeyD_Bo*tD
z6_Bl!@jv~SG6bY`z`P}$vB(X6iTw8{W9(#<XuV=?1p$}jc+nKVxqJo9TN->%c8R9H
z1&B-~NuLmM!DM-2-m`zEePre9Z<Y063b3*SLG$48_CaqFbOccS8hJRSCW~zR)P5wx
zwZRO=^0lnSp#H0vE*`W93EYwEMH7e;Z){{qN&luHAMLCopA$L9hVz?gP_%vOFV9-l
z$Sm=L>qy(Oam{_dA^IA!E7$p~D>n$)W>>S;%4DUy#HkMR0dxP0@?kpvK}U0G${FX4
zgWGvq;~<R&OD#)S1A-(fmax$-D3CcBK{47<H`C;BVXGt-d~!6UR;DZMEb-%axf26{
zC++UM;Bx{bjpC;$HN$Ri;8`%7sJV9$GVW_t#N8ZQDOF>ODZ<od&NA1zpmzbZ)imJO
zeAfB2;TW-93#6eP!2T&-%t7r&OlH$rV=Uu|eQ$k}vLlFM2pc8Ip4M-fY<DUv*trpd
zReaiT`R}b0ZlX@uK8Tnh^d@hoE33HZcLoPr209D=_~Sh?WBj(km;gtnMni(VO|&RS
zOqiCUZMOIP&IR}asFOKPvT*7VdH2h&b^ZyZvw^hjv!&2b)dng8R6st@#C@dgBYQ2g
zd8F7%uZ$-x<IQaoL$JZ4BqmZe;mhl4uV+3TQ1Im5EFG!Ct2%46FuvcF`u7PBGn_h+
z=*QogXK=F_g1wJHZ<dnz%i?&>ZU@=3<xNx+&#1CVUu5iTmn9**xZ|7(l)AWsT<}p+
zBThA!EpvD$Y~Y0oRZ}*5m;KV5Bn3n&aaU)%<DgH>gh;ybzSQ_FF26tn`6x-aN8&*i
z%XL(B!2+1!#%$*mV3^06BbjrY&VbAPXnp0*k9OO^SIb_PK7s3*<XowGXY^&8fn}Xc
z$du1|sA@)(rf--KKNnh$nboD_G^K}1_;y~G@tXZV;D&bsqAZAN_tYGwtLjUbJ_4?9
zqw1}4P55B)u-2>eKy)8J6m3etb&z7Y<piHh)@Tb5HY8b><<vm9gdh2{C(8z&sXZU}
za;%`E(+?;wLE_h>>Uj6kRGC@82k+^7t}q25b=>$6QuH(*+4H)d)+v#T@?2)@*y)u7
zzGP}R#IHxVX@78-X8?{wzwR&RbIhJ}{fttZg6?X#w||k)!nNDiw2EZgTy%HS!X~tG
zoezFIt@8yX<lkRPJ6~fA;Jt_e-kTMRDUsC%q*pwQp<7{sgbmr6X@t^4GR*^tIt46?
z(R%EBo8arC`%01j7-Nr4|Ie)?!z2<!7fK9V_&x8z`IG*d0T-_<uO}3q1ZuyNY&I~K
z3c1JiqFx3jol6wqexCMms$(n3lV12obf?UoQY~k^`p(Ha2XCS9M#W@4!!ZTDY}v`$
zrpa;!e}{z<r+P-K+i}WbnjK$$O!|~}CY!XdaA|M9iiON9t?N>TK3IiQqpHhX5WaSx
z1x-KxiDDF79nYraQ>sXJ8P9ibsiovPgGxtT&AHgJj@9F65Q2QR1EuB(vzAxPwQYAg
z9aYQZ^=BN5trm(n{2`@0`^fbVuM;6+MK6Q7j^dU~>0rDbvcmbIP62ZeSpOWpE!2~7
zY>omJn4vQGWaw0MN?BTS$l&Zx#hg=X;k(K5Y#=c-_z3@u;Q0YqYp{baN2A1Ix}$UX
zlv9tjvR-J|Kw8wkz>OG_Vw+Fjo5nypaiK>BX{k<b+b;Fntr$GSTHNWyFeRgNq4ugO
zd!7)(!1KVD#K=!vtwY7FOh~_9t651^X(97OHH||21p|&A$|`gN_G^PXSL?Y!y_{WU
z(L<(d69ce0q}V#*8L|Ay_wnZo6$|X?x^xu=N8%T970Mx>?I&Pv7)IbBq|o`JiflQ~
zgS{7K4zh)(-!9vPwYH5akVTYuQZ_LtLH%TCj5uq#6F$O^rHM;IUZP*mc_RkfHlv;H
zcJZg;oH&CZZx=hm>=|MchP6_1>^)y~Vn9978%m*b+8UM2lSM2L<6L^DG$j3kZ94h?
zHi*qt)TVlau+&?qnR>+h7VI4L_f_sZY<9E+PlEh`srtZ0Tuq_s&mb&_iJha0nxDJ8
z*QZ4_8{$NX^F@sU=H$HIi*U{l-M5XW86_D_wRq+j_V1*~|DknxD)WM-USDqhT#(1`
z#jz6zlz8-sU$$t%U4*tb6(&{&qB}#_R<lP`vYJ-w)bvxH#|D!9h~k6UB{<aGw+DzB
z<1KU9g26{T&XRNMivVsYt^Uen0Ta!t0h0mE<rbRct@HuWw;|Q68KNIBVQwT{^%N<l
zg$Topvec5ZmC?wkr_5Lhn<ZH*yD^%(Yk47B@@UurW-dl-X9IWHhPh>zJ)wW2(AcIP
zwwiLLQk7TTCHXql5-nE-`n1>ko*bq80XA~!)}TEV&91r6-W^J33zt}NUS`yU30VGH
zHQLib_S`FIjML?xwO4c8AV1aEHradgo60}r)RKsi)F(_*K|F|vkjkA0xaa+|GvHWg
z%jTZ)Hmxt(%-a%b9%eA|@lN?ofg;O4I5@|&QQ#pyGNwue=3GP7n_h9|C>D_1c4d$7
zeCx_s(dGN-+PewcW4GcMWqhSxgdTR8Eg^noa6=VGDFZlvT|JA#q1QE3eBSo%yWGdS
z479J)%>PASLFYXzRW{-yULn~8pdH2bceeB0(qn?1jWE3%%Y*M#mrg{uKYEo&MrPj)
za++iS?wT9^FGohCcw|ax|6vv>`mq}e;_`EJYvbBt_I&<^D8g0?ODbch^pxMQu|l6>
zdm<O1LaWz=>DXXFieEM6X#_?$>g7Eo^$7@)`KrKIm267l=+yJ?Q7?kr9k>C2_a2en
zU@xud>l_7Y{7WmE22Op?kj)^Cv=Ru#I3P=hs;HF>ziyUsv;O)l>f1M}C@9WKc>t7*
z*xmi`Ej^eI+1~qGi!ZCMuF;gtxiB@?A1bU6qY$cN2a=f)45<0n)#8^mUejIQ8Bi-q
z>8jv%APlW}G(?`S&OG!qhKJnac<}&(!8>UmF{H;(dNo4?$RMt{@EcuM=%K49#u!6t
z)PnB&z1X1(fh88_KW{@Q;v|OVnP=j-o?VK=J;W^3;q57HPr4{f2}3<YXm$1dPn|y3
z;|nWr`eW)rz2kn%Q!Pg9RkSUkXNYjoimwQbXUGc2iwXq;P&=v#B<>u9n|jpdwM}Lx
z7lnW?kf&HvZ#X@5!#1nJxNY<{p0JU1x%|N|Wuj_&yp!lnQIL>&mpe|;wxUD<r`H>q
zZwq__0+}`s7&YKo6?FGBDUAr%5ppDOjGjcR^vmY{9S5ji>z5gBAubNV>771aR<o+E
z3PT#V5<#M(AaxA`3IbEvs|?o8JaB}FCa3tj8&=RZOiJX;I6OEVMS)TyE-uV;1T>G)
z8DHmq!B4Q4hWIAqxw72&>RA+odIYw$#+~hk{=lFoRDC+|h6T<alpuvzh74|D5+Pv=
z#<GV2*;Rv2F&L;nw-pp{#et}3`M=R%V-;Iwko8H;O<ivUivV;fz0g^ahiBE>0<4N<
zw^aur!kU}Ien)D5J>Z}uQdpVux%Bh91bbob%o5n^m_%j9Mk17!KwkB5ys)>^`p`TD
z>Q4UqeB4Kp?HU^d1<Ly~{KWr(+yG>Ubf}|qY6eBnaNX~IY^I7ohv)f_hN@|j*y}W&
z9ZL{BJCUaW;@}u4K_vbXWG4m4fdI9^LM~(JoupsS&M}Wc+}$7#3|<lW(1&)ZG5&KS
z{;27uWW`E2`c2w|>7x*vP#h5v(RLoT^K{X~7)9d35}XrzbU1(d$~4}q#L(zb$UPMJ
z@B|oQC3q37<{8pdyt0WkPn&mv!BQXjH-}hI|9yCf6Dcxhu5el=|7BiMm{yXjjE>ZF
z)pfVh=>bUu&uuvMqffX6ObiPZqx+It(U8|kKv~Wcdyq*+3Fq_RXi$-IUTM3u{-YuB
z_h&#TE&rhmy|p2SZ?0k?D{sm4r-RFJ4@K*6D`h=%>ze=(A0vX0gn;s&jjQ1uFhFdD
zeR~(MyThbB;h%{ZIQu~bFGfSP+L(Y?;%yy}MEIl={@)yCFM3Aqe@tn4UX#oM6nOe*
zhRepk)UrCqw}l>xrkmmv)XTwrsunO_#_bP1sq0an-Ofu-h>LDcWhhavNOP|G8<6$K
z$9A<kpXA{cjkb*SKLh@k`vHp&b7=a&SVn|0%isKu{ITD%XD^Btv(NVa#dSWlSn3u5
zU;U+LDqVlrBCRh}0TpI+t9{70tzb+JYt1|;$q@ps5|mg{hq(A{z5$3ApCC9Q!_9`A
zn3;dV&r)@@&s1+n-ILfT*`Z{$c?-=M4s_!N*xAPeX>M)9c}Rx$etINjyc>{Gq?vo<
z6B0J%FKjrr9qd|-)4q45H&QsO;>WI`7~JQ6t9jCXZ$v{_I{&w^>Ef0<+Y7Zt_l@fj
zVPOPzA9W0-9f1HVP00$l3WFf8^W9`oF!`SW77`}pNWa_c>V4h}3>5c~qCWw$(eaD<
z4;jBL%t_-Rb$z}gZrpF150YCRiGsryIyRt)G})G~ZO^>q>+8ZC{MpG>OGIt)LIr{X
zQ0l$4SbE63kz3|MANsA(ka3*Dp+27V)VB$xkBg*<gBx0af92guA3mf9@*zcg+oJfH
zYOeBhCtcpPrGm<-?px?dHk$7<0;hS(E-UdGD(%JgU+VDA$_Ls^h?65@QrH9K06ry^
zihJoLnfSt*);Zlu@793qSO56^hMRghkb2;e?JE%OG#d-!fPeZSkg(HeR3y@ybPt5*
z2juaDhkk5Mtp<j7TtW9A^c_V_&l)F_tbz=>&3R|k7<st=zw-S~P;P`x5d5&{iihw3
zxOAXSPI-&A>$SKyIV&f{K<P@g>v<{-NG7S%8gmG0TeFw2Aq!qTbJNS4UJiv!jCq^h
zS#3As=yeMav>+P%^5d%*GNW_VQlzVRZmL#d%1=2KaOHN#BEjA$CuLOg-Y#3zx7VFd
z^KQlwpfoh1ElM38m>u<vTaaEsS$}v%7D0^~vD@xUYICG9`eL_J>J7gRFF8JodZT}S
z0sNwPkohVB16Jt}=}6O|Mqapb)Cb#m-Vp`CR;w>h1z3xwRly5y#}5jThFk~f!3KcB
zYqw7y5k>M?ixBJyyZ@orH~%8Rz|`GDvI2I_x?@>XUBzXlt>3Nigi~_I2=;3Ht*n0A
z3C6QjUgt5Y96QgKBZXO;)Rtjl^zl_9x}`n@-o^)FFP#Xa_W1iq8<6k1n|gN!@MVrt
z8KmG3^=GD;nOnEt#OUYp>YvURZEkzYQ%xBDk~&qrMFNusfTx?-s_gN(2|tC5Zmh13
zflOJ_zxEqwPNn#=by-O@rOQ<eCOrp64+J`K%Fm>$SRe?VHr8`;Z2sn2)7)XJ#Bg?)
zQI9qQ=iG*e9L^0C;4Xyz`~jDKCGbu)FXE~{y~-Z?^{YYanKNYJxn-T?XG+d*PE9A+
zX3_g%X<j%Yn|A!xa?WC(Q0XA#g;$R)g+H&U?fT<w=QHL^ol?<2^&sGzx8(dxdhXZ(
zPRA1`qcp~H?v7sYBlSC1C)gu`O!l*|x5_YDH?qZ@e^2OcN-vnMw!ax)u@ix{>UVx{
z^iwX^29+Jb$ChVVcTlNI=xzrWK`<lo9uW89y_fJvS+&(<E=qLlB&b;It5;%-K~xbY
z#sJLh$y&p!^Mf4SGLR>YvA{PGe8gDf-mOP~o%E+@F(r#H+pm=i-IYCypst&6Tb}57
zSvR%)-&du*kADpPSq~MuQ#4?4I`oQGXY-;+E^0IP(4{Kb^-UbJsfvR(CMM0kz40>H
zk=&U>P~AGMTg)Ig=#$awlUq!^tIgx3^Hp|hRn4Ckg6avgt>T3YKT^9`s07s>(tZ5<
zWY!RWnEU&8+l!q?i+-PrW$zzkxGbQY<cz;eD$Ma^*j}ED=UZPEWzm#Vm*3l%DCJ;Q
zZn##d;U<Ks2;N2PnBY7ASz2_tpQOnYyMAm~s&vj%OW;-SbJqE$dE)HX{Zayb&TZvj
z5ZpH*W3A1}F~scI>drj7So&<F<`b(Nx<~0<*0wksezedfqL}^#BGsm+sGm?JLGwDf
za!l0QKX+Nke;(me+Tznpn9WtmB7G4%5yl;-1jO8QUolt@x;zRJy`6pC&4Y(|Y#=zq
zk)}$`{e@Kve^vBYA%AOC^v?TdZljUdp;y9@aIGkz)XSqb^`53NZXOPJWJ1+@oOZmt
z$@mMCc8jT}Gvj_?SaKD;|0Xod>P-LhgTvS~fZ-{d1#x)sqwse;)G0q5NYKW+lle)6
zo(>)2`S4VkSeZ+!{nd=F`KiG(_X<Kn6;pUt|ATw=r0A*ZKIy=R?FKQ_FE>XY`PnhT
zg*vqwOkOr0pW(OH{Jt^@jT%}fbw4Ox#X}fiYUwgeBD38D60RU`$y^SXh@=oODHqS#
ztqX&+`7b`)h$;J_ToSdk3MtcnTMSvHaY)(n*r;sMW6Sz#$R4NRAbW=qP~&)@Xghcd
z{%ezLQF7`48!J*bDTLK#Z@j0zTTG*mO`fIzLAOC^{ueh1_WBS@!@Ut$AwL>T2kv{#
zq-*fj&egto`cUko%LV#8ZBvq1CA*u88eds|kZ^C4d+yb=EkBq9bpngDb(N&nf-AEq
zzT=KK*7$S)HtcV1JndhO;6v6&wYr(T0<(P>u;|{;mkFEqsx;_G3#nWU03{8yG^}B_
za}#0=W^4h1)ja?a#=FJn(Z{^pX3$?(<}7YE>MtgTLBGeBM!g}OlN8xB?Sn)?Qar?r
zuNqATBHYt955JadwKmy}iWh^+ukdieRr`xFWo>Z7<wR<<cJ3&<DG9(u9B2l}!|+vP
z$2?%Ib45AqdH6*%SuC{@OrY~~_;*-d(t2aa{DIyO)$l9f2<*{WVVG>&<(tmdRp`H;
z26*&6Lp@om7iWKXhwSMBeCE_vR8}Fbq95>aS{JBfLJ}5clA>GEa9irQB3I_qepzhq
zcX9Z15%{xNu4lpemH$TIUOeluY@Pw5&}#i+jm7=i0vrfzF`8rzuE5`SufUOhfIR`6
z=_z}L@Z~68J^r4g37DB7j$`J}Ny&pVLmnb|3Dg%?=GAoY7-p>uf8lLGYd+8GkO7g*
zWU0X0xb&PV>PuW3NI6H*t-<}nu_hTF78I)k62x}oAH;9_-vOc~v0Y}SSWlOs6d8qW
zP@x;n4oq+MH3qv{kNm!Dz&Q`<Vze-C-o&~Ulgi=gdG<DA#o8%u*UO808LQXyX8+$H
zWx$*jYaYG`t`NduUI5#57_0>z5y&sy`2r|9a3+7!2Ar)~puD_9<ofgRh(CRPQLtMc
z|7t&cKRvxKLb)orjjn8fc<%@*Sx0v>0>HPuV6LXiunF5!rZ}(h6`-{40N&-j;2kR`
zO{Z%EFq1u#3eT;^M3sWOpI9@Lx^~YqxIb-k1WbWSgl1k6aytFJn|ErR6zV%e3|dLj
z(lsu2vn-wf9pOnIdAM}hJZl}k5rOT+S3U(4r8JH9)REJy@A_#emHgjcQCN|&!(ii+
z5z=k3<&$lCMDqAW7;(^Juqe3?oVQK?qg>)G#$Ws9DL1#9#ZHx8e}0>-<4?gTDn((U
z(qb9xaaoz#=F+QNv{nqWQ^&pY=;s%DJc+~^>M{-?zcLfy!GB>>Lh-d^@+Y0Ap19a%
z4YpGpFr2sQk^S~DbIAwi17yK0+DK+$ZfeTk%PQbW*Gd^}=;xI5MxEKDpl9y)j<bR)
zM_$8!B^;)8!5d7j57>(wAUoO*vG@xrpCcj;fWwnnNx$~_^*lXu+urWt*`GBSx7<kQ
z7tYgRw!l|;<EQ-!q3(-}$Xdnlw>(rS-vOMBeg#hByp}&xvy#b=w!O&(`a!sdqHV9j
zLeY6T$s!{wgX%3S7f#(ccavGuA84aC7tB~u#3#>vPd?N3q1PzSp<S67`38<g5WY0I
zX7`$(rT?zwMUvUhxzUrI%nRAz7ao<ZOeWE^KE7Q*9G<)TmtPx@brvysa~0v}C$<$L
z?j0@c2f`&*z5Zs`V9}(k0wm?*t7#D=f14k+$~Ha_d7ce3F|rQV**A0aCj}jO*m9pA
z$K#l9RO4y9y*smA$C}5*!|3aDXUccum-X^=A}zr>2iF^1IDO7JGLcwb=}6YyMmVL#
z{qAvCVz2&)ebJ>RxX9{Gqwmp74+vR-9TGc`zyggXNlD8TX66&mF6qO&QIeaacchnc
zF8mcP4O$*V9!&myB8-Ofc0T<nd%RunvHhaw(h&RUU_)G1An^>nA0SYw{9D{-(S5kp
z-B{oYxT|H2rmMJh|4g@MY^^9ZHs<f3G3eqc@lMoeB6TdroV^zGucmv0Ap2y}ZWBiM
zivDfn0n5emyFX*}l&?)E$zP}ZxeqM0h1kB5z*)j2Z<Eb66kFhuQEib>#m`Cy%Ss?!
zUgL99ejLT<UYGXf=Z_6z3E8}s<Yo9`mX2jxT%sK$^v*0&H8Ld*D!gtH7-IZe0))02
z<5wfU1+M=Zvp!#^ncoJbQPysyCTz&A9|swLvRAloBXw<el(<9pdPi2nW$M;tFNz7-
zYL{}%MVPp#yKY`gu#nv_?b8ip6Z5!xJW<a_Q*su39zPNFP1<A`V_IMwlP;Zga!5X^
zd*Q;YS#EaI-x}C*0Q8>pbi=_7-aR=Hv_7TlW_61ir1B0$pF89igsT1fbKRM@(+sGe
zwYIplN`aP0hX-XN9I}YOQr|bE(?ds5#LITIVg{IagItlu+PUciv!e^FtkLlz@kd3b
zl2W1~gBBxMf0^Sx{=<79PGfq_m(oqhaeK&2AkX$&(NI)RQ7$+xlpAF;<22VZpf256
zP7gUa4pch$mnv=O$hkZNOE&{-F)cUiUU>18v5d9&)zB_8@0ZKxgS^w0*>?{5eh%5Y
zv2&~Y_dA|n@KdHl1#W2DQ-=3xJ8DZC$`vrR?qe!`K5aM$5gL9IfZX@iwl>d(_Wq$1
zh<*;KE`668P|r$lG?Ds9KCQ3!>-mDW^q`1lZo`#l-Hdn=qyIeiGrqaHm8P<h;Ysvg
zclj!>VksWzY!~s$t!A1KVFp)xQo-h4lY6uH0KJ$+n>BM@{WVUUz_U=p{=qCAsFyh{
z3lGu2Dj*i7??!p^ZyD7Nd=)cM_j{XO=QFLi*?Tc^8B}~z$<&R+tkql+9Cbedc^k46
z1$e{;2YL90=uHjyeMKPt!4h68V-Y!#ZFXydr1DQJ61oT*?YFJ<YpO5*%C>$w`x~oK
zuP^B@0y0mi$iNLZ_U+lQ-p)ZHCQ%af18$;@zwO7q?p}!Xc!8{6ktFE6NA^$6w)?s_
zOeMA&2VbMAtoYY2bY-h$Gt>yNg`c{H>~~H+4|}CE3DU{U;ntHZa<CcSGuoIP2<X@f
zl=A)yFe^&+_T!TRa^SD^&t(Pm?&il>=e+22JPJO&=&|bcHYlhT-4M!=vfcufCsCFR
zf}rdDOdu`b#^vE<%qv$(<*r?7gGXSjrD$W4H5auNBJYaG>Y>`Ek)<3f+BdlbUM2#`
zvIukmD1f2*)&g6hNQrvt{mkKKoH%SwKF)q<TIOV*|0kA(jN)&Qog#tfFvIYvq#@6O
zHpyx$(7l=0tc42kuNz^m{Zyx?<SEoBLeHwL|2$*jm;;*c#~lXjrnJVdH>YYU>+An{
zo&;Y0CG8pBXW%7Cp~laV0ks6yt4ww7ahXpqKrLI(Kf;cM;j_j{Ox@Pf%P6o*<W&jp
ztc&oKl{ZkQq`d2LF~+|07ZVneS$%sd=XIuBe)SNYdPd;b6x#Y@q{NyplLp-(yd=4P
zU{#4MB`Rxbmd&I6i+f7o#;x4f8Y>n1?H8S5*fRlJ;D*!~sKizev6#$O7LQD!YZSC%
zD?pv#U->j}{o}6Q!S>(z8-1oIFu+c=u(bv}!eFrvyD21ncjo_TpxfcN_2UAAr&Zk3
zk+~TH2kBc)x%d5Cu_xAZ4y$)`O)KlgEo`-U@0%_uSxU)!{@I)zjeog-!gvs<B!alP
zPD5QRKSpx!0nHv6cSiKQxb#^Ci}CRyhBmY>s@SOJi;`Asq!C$IWMF}olkaJ7FoG9X
z`?lkySl6l5*r>3QL(}H}S5RTa<n2`n<HXCAq>pQ&mcdr89EUVuZ$FZQlW9;mbd0%c
zE}hX!_C7cIhoV<aTNnGw7O(tq{gtxWpSYZ;`au>V*GRfRx&tx0=b!zL{_WsL4>~?N
z7XoLq=HVrPl3GbIOfd%sW{bU=5?HAjH8&Uhw1)><MzfXc#L}1hy*)WG`m~{SwIE3a
zDoGCM3dB16IqM{{q${E`7$UJ_AkT*I=W4-@k96Mfsk%2H#d6#`cn55VWhFqexf*nP
zog!IVSf6b1@>$&u7_dSe<Y3N02G}K*Q&F2K*!gM0%|51hrMpX$bw^U~zHA98!Xr$2
zgRwi-R=?40@?s0m0mN2Oqa;Z+3z~ygJu<i-y4132U8ftx*-?-;Na8YLct?AHUrA`?
zdPiIYG4xtXD7^0qTI)#?am>Bkg#f9nzD&Q&dfZH|t~Jy7l%9Mt@bPu|%a!~kb51Mh
z&!(Nb@4ye|!UFX8yN5^MZjD)Ra}?W3O<nM83h)i5$k$Bf<cwSxhT51razfpQuZ`zE
zzmMl1(8h}F=uZGWk?Fo4ca<rfx{gf+9o(2lOY%`Nj;&LOJ~%Y{v!v+7`Nh##z1_|@
zR;xTPL-^e>Q3st;BtA*6!phe9R})d#tHT>*m@vl!JNx?Wmi|IyJzLq9R-=2bL#X#i
z+6WuC7CNpguHN?{I@;iQx0zEBa%8=x4hXod%B2qQq=NItn2LoMMkm^sChgx_vC0ZD
zbnEx@Tvq^Ht~hGzWPvJEngZNDxPlfKJD)6T4yyMVJD21o85R4oFjcD>)~fW2X4m~@
ztgRg}j%+nqJ9L!yT$qlO`1m;0oIv;R_PDm^Ze7JJXWuVR!mJ<L#uC1gFn_A7b@_C0
zNrLZ-{*;Te^R?jGf2A*&KGq+WF$msA#+wTrfB3U-QK6hud!8HSI&TZWWm+gN*!~#f
zbE$m@T4U4V)8Bc0(j@Q7PkcbKgPHtA&vs_U767gx;1A+`-*MJ~2=ErOmxtds9SGhZ
zj0a)W|5oh>2W{|KN{<sYUvf(EkO*rx-j#XnFJ7Zu62NU4&?R6?1x|2phq|Bs%r>Y?
zB<h>0=R=M(@daES`|i=TofVFI!<g6tpDeCTo?i6QeFUi+lWQv3?oauNj~<A&h)Q&K
zwf!p$usro5*go<SkHe4FXBMP;)oOkSI%(CUf^5&9{&vKjw)cUn=Ky&lNY;XzUY`Gy
zUAs8HTtSO;hiqWHvdB-ECe8yv^<#_em$nDux$ES-pUoq1wEZZigE=$2<Vm4tMwDI~
zxEzfH4I)MJK-cwiNuSxO4If@2$XZ1bhqU&0Wo7?G|5=J6KE1klmTU0lX)%chhBE-p
zXc~07GC-47Z$b`AeI^m^PhInl9#~ThFYbOF0@npC1jLRZU%tDGeCf%PwGE8*+MgoB
zApf!8voY(T;TN=okf4qGit28Ki@9n{x_H(ZxFLw2+1~e=!#$iEDFkYpPu~&e88_CR
zukVfC2R2x?2HaX;#-Eq9X;R(fv))%?Y7pexOb82kAC(;=i;&L3RWx6lR*uI~>xLoQ
z@@`I=4t<*lIym^Ps)7+Y6tYzNybus*$(9~G<N#W@Da>VLMA+=Ix3@Mt*I%t7_c6H!
z*-=vs<er>;FA}{f=ac8lv$T6RDhhwqL~&Ctb{l`#0YqMUj%0)R4Ucx0|MTX)n}z?_
z$z*ILf)Z+f#WhYkURJJNOi{icb<d+0&3!%KPtVkwwXwCy*nGCW6I*uj5C0$+AI<>0
zo1upnt=Ylc28GKTMcjt*`z3}qxHs*oF54zeDed)UeJ=L0y09H#u5Al|In}7Ri;e-B
z-uk}xEkTCBeKrP{Q*x9ktT0Q1a_H}W-m_dQ68_J$rx@aJpu+$kmJ#Xc<9%_ymsSys
zcx<TIC0MoveHAGOzQAIu|KF-`;A6F4`Zoq+@!1mjm?YE9q|PuvE^-et*pa%GM-XS|
z9*cU0%nmA2QZ|97Eq^2jg0?xstIz-RlWx-s(qVQOCdx}U7W^Idtagu+h@yh&^3*}y
z;rcP~$1{L`5pMwQIB`%wlsopXE9%->&Q<Pao??`VA!ja=e)duz;UE*kZ7|-!UutGB
z61YJ%aQTl#;|B2$x#=Hm*s}$x%)UPh0YE+vjj0Gc9cYG6$N7wFmVbo>xZt*K1W<B4
zuuxVDh%x{et9f&#3l|RV$D=#{L+fNpQ2gftY=~0u=~`{pk>~0!|9VqEHV1HUM8n&8
z{V}K-(iktxy!6`;P`?1K4G(J(&FMf_W-!-5#)1Xt0ml70L_=D>2|EM}X$srNouLr;
z(ls#=`N|U%bZK53{BacwSgaysuTA%f3DICzIAP&kTR+wb-2*-|4+*5@0YZ8zxSC?A
zCSH@N=fBOQ6s9}duq3NOx$JK9$J99bD2491c)gr&YR3A=*a|=p^3G*{SNuD$YnlgW
zPDENed0i`8I*c;&f^;ExUKN7ia%K!&BJO6~rsTlq|16BQ(p*&Fz(prsLlA0wDOIdI
zdYOJoON{GpvIy5hiBGZ<b5qAZ!9J{6a;uTwc(!sHFcRerB)<m@FrZOFdY?GV^}-yt
z+G=@3FmTf|bPI@OssOj*6`v#--+-WLC9*Jvz?G=5xQi8P@UY^44=bE3RG3%UbtRG>
z&&Twe@{&N1({h<hut;OTx-U-8h8?tcLFq(dtR>>u)fp&{0Ui`mcWt80jhu1fJ5EMN
zImo{s9hnlhJ+otkpcJ}^7B>vT#Mkie+T13yMYj}|Aqd!m@4(gIVw*#WL6BgtmKcGj
z32z=<#LxcsE%OW@YYKHoR@!F0Kk!yqEF=ZrON!MbW5l%oJ6|m$0E1qesB?=>yLnYP
z1GK5618VzjYhZvyJ(Kwe=e02Pj=R)wKu}F7$nf2l4YuVl8;I1R<U)_CFTN@9^#PaO
z9wP*$rL5(^R35wWGECIuyUx2P7Shppt~&s1+c2p{*e!MOV=VSrg2!-kG*KlBJFN%!
z4ASjw1wejHf&7|C=XF^h&iCk6ycC#Xf<g?guCBJ9*a}qQ5J}cX@fxZ}RVDbFwGVi|
zC;c5J{QJ<g1LTNGXU`TuU~+C41TXFsDS3w>L0gZ5vTL#ZT>#2h0YYjB8s;e1UrrTC
zVY-@Be_J?`)`uQ9F&yZgf{;wG|I|q|(-Z%oA;9=J`ml}BJC~dBRKH|RNLKHcfor*p
zDc4r7vYkhRxoujwtwwz8toJklTu<eT(Z#tye*gfp+yIvu;vU9aAAVkSI{72k@+5hA
z0??#RysJpsjAT_4r=`>2MoQEUC=tzLOCJ>1z);}?r8#_0EU4_}aPCJ62#WT;;J#EA
z6p^~Ih_etWYHs(*nfU@(4`R<VG;Tu>J$Jd>vWal{<1(WD&#yH`qGSHv2VQ1Y1_&HX
zss&k_<8+@83JDLzf=o(`>xFh#(FY<fbe{b2`@QePc|yZ5sIa+V<-OzJ598H5;I|eD
z9KPTC|8aWsZhEZrWkU4;6>9Mw+qoHMUa$n-$#AA6P7FrX7A1swWKXRF`~YA6<6MKE
z3QMZg{;w?>pCAt7fF}itFn}T>9SV;x(qiu$78D%(A8q>h^A3H=jHQKlmXpB2ILP7p
zz;Y=TB;Tn1hhav(DlA~<AA4mDe26t&7Eo>A063ag6;3Eg*;;+pH-Sx?_Xq|l1;Hph
z=xd94#!b!LV63koxO)^QCRRX9vYX;AzJqNj;=X3<?L2(w3(}Q25ewphB&+_VfI%c+
zaFSJ4B#6dBtmz8eMlY|}2~g6>*qti3A2%d|{$$dfwN_?AKWlTxkl<kIhzU#G|8&CE
zc9)%nTWTEOk%Kk_`OZu(NGF;xi_rta5AeK&2Hc2A6uP&z$i@Z)*e49f09rsrITd0E
z932N9jXC(&wSh1XaHlF@!?gi9I4HaV{|fb3WCS;K0+NJ!fYU7hJq7L`1;ap#plvJe
z;s5*LzkzU1{@)MacGfytW4!5apw1;Dtbm25{d|kpydB$Ut=+{1s1#>qc>ibokc&*F
zTBZzJIy+LqK;finpP}CK@*<cTjI6^rFbI6NkDx$$F}*IQGow!1*{9w8*=9Kq_}SY3
zgSnefh-Wx9Fw8PYM-1G<N*1yAeR-<(3GF_u{0S|XDQm`J%eB74AGK-vfDW6)`*gq9
z0*}MN6=nZvOUS)cW@c5utfQI5Szxji7{d47v9#B`=*(cb4rY;xyZToqK3EqwxHrX`
zxuZcWjr>U$SZc^h7*0qif#GHcHi2ncGVk)swc&`XY=MVBEY+5P?w^}8i>3Yn+y79k
zGyvcPzzgErd51{~Cm+i*t$~6Aoj}Im?D(IoKtTZNG>ZXQG~oX0d79y75O-^ka^0&3
zGNu4%UuY@D;(t*jCW8T{^0J)fm2nggtYrq!*Yv6;F6x8Ha134^0Tvb+{_|q1=nu$Y
zu%`#tTpKtoBWY0}WGWZ<e`aM91YlxP&bpg$@P8G8W4`+ZbEaq2-2Ugxg?42E*7v8%
zAq$UbyW11sY}fxkj%mFrp<eEMi~*H4e_b={x&CbzAv?U@14YmI81(o1WD^b~jr|7C
zdvfx7dB`C6i^TxT#iXno1B)kmsAtR%oi@*>mtyoO74HTXExJJvR&ez_;M~);uE?*^
zU@R#xmL(eC@=Jirfqlk6BSb~PBN3#FXH?vHARr_NDC}u)LecdF25KbN-eb>z(;~|e
ziY+K5>5HZHF+%PNye!#XnDXl_U#MjT*GQk8eHHx}#n0^do?Z`5$V6KhKsGa)V(6nr
zNm*vPBOB2DPYgn0Iv+IPOwoGd^HFeIGdz4RV5f9X)bg?$IKK#WUt(xlI=$;bL(d34
z5VS3xP^^amA+1J~q+U;`4}{D}8KtPreNCayrS2QM=+;cPFr0FenHZ{xx=BRmgaOVV
zuqG_kw}Eug153@8$I>L_>gltX#Dt5I0CZ3BUOXKH!RzEvW?l?n7C5u{IW80UpJ%7w
zlPm&K6i|2Z?t_M%;0p_~H>bXA>6fTtxYOht3XwXH4zyidGX>^wcIa3#>&Yk21EU)d
zD>ZNw{sTI|t-yR7yR;;^&|1%NcJ%vl3Q!O)jh28T_TGoHDLiXH(nH1{`XN|vov&vB
z@lMmc@%s4wa%xvGI73->ee_Z$yvtm|+qVm_kBMp&2ASZ3kMU<7nxKvmM}K}3szOTM
zEiGFhJI<U^fsTJ8>JR6eHV$!tNS><@>bh0?G4K~M&45e6m*Ql<UC#x`Q4-;K3O@bG
zs$E<-lh(%$!u`(x{11c{DCEvDfot!u;4e2KvHe{aTb!r;K!xi_*3Ji>5JST&(gUKG
z<@!KbrrGkc06^OoECigF1MT&kh@9Ehpj{ZYe+Gqo2FGSq2V~DzdjQ`LlfL^6;1-3s
zG5p-}q#8ubW1}yzhcdMO!%1ZecHsH&CeKY*!IM6^+}9VbY{{}O!Q5gwx8m^fb0>qo
z>~_pZGIbI`!r#-`N3A4Im6@`Mz?pCjmEcp3y4v=gHR~b=2}tYy(6G#bkEXahxsFnl
zWZsYT+(}yXv!i^b%KPTMl8~0;&@gkyZ<}2g83U3P|C$;FL?Ke)s?+pjbMC*rGN6`{
z6G2NOCiAe6Vw!>)*-Je^Q07wnS6gJe8qf_NOS(3+dr=FlV{`LG(xAN`F~mj7i^;{=
z93hG8y3>bt_7R@LOB9@5n1sVlrjm~@7`AF2Kwn?KZ}<Ijb3olbVh`NxPOFu=dr|hc
zeqnBAUovZCmjasAtEq_%0^yV0y?17UGsDiRl6mP@C2B&3D$g2$|78orYJ=~5<o~Pg
z*#DW{`(KH9$kHhxnf0V2ITF=N?o&yLa57E^wTcKO+1w?nQ-?W6=tOKM;wT*F2*ZZa
z#Vw0+nVHD!F`F^Au`$o*>-j65{rdgveSg0{m-pxW{y0WnU@ksBV+Y=;?*?ns&XsD#
z1<SSRS-I<kT?iJv=FK3#y#cssnqPYJMJnV6ESeU3x+5U=PV6FB5j#+pC)<W`sDxgr
zzc#3vm)&1ttId3LLqJ_s)}x8U3hP>w*&HJcWVBX9zt4PIU!@u>6q~iIMQSKR5eF)!
zSGb@mDL~h>I08^ui`I?_y;Z6d9b~$B$t>J)p*UyXb9)e3nH_G)MtTVfQwz0&s;vSG
zHKbnwV5XrTqJ(IyBgQNiL=(gx{2F_1-GCUXlgqVm5OBKbVdTf$v)!Aq=L85@V_pQA
zA6UFl0o?1#QxN*zWi8h5qQ^dv{k>fp%m&=*!$Se7lw(;Dvfd$ESU$-e0A{us=i9)`
zkDAV3R&z3LCihohVu6}Z<q~nT!_9BbgH{oKqlFceZvz+%!tY24{?zFpR!tZ_eF@&5
z?|?!rKw0TcP)CypqH_TQJl@WrJAs4)<o8Pj@DNPwiFogUmf8l~mlO4?GT}Z`;aH>>
zgf4}rlhsw*AY#P|jc#t}a}><+AFg?h|JqYjz@BBrK&SJqxzD)YZD*1NPbZNPFYRW=
zC^Jy@!69&$`?ziG9w1I!X_zb@)aEx_6+|W4Txd*w;jEOZS^!)Lo?5Pi5y~BZj|c(Q
z$S4B3&U8LXonP((%bT6BH~ssyardC~doL^k;+fuWy$H6bM(eDc&Rh)~Q5y~{>jjlt
zYRy5-PUyfpHk&>$1X5@GhhZ|&sFnW?s2rTvD8H>(>G{v;Aj_tqfI|q-)nQyk{6O6!
zDB4IL`piD+Qs!(ccX+i4w4csAE*o|EyAqt~7`>VszwQN*TrD=w(WS-sm|ehCv{l3g
zXRbeFnKdPQjM_rpXy!;t^4Hn>txB70Jab5jvW&96s?~YPM}G~ci(mjNp!S~@tlD&b
zpu_H55j7)NQRbrpOw=!ZiG8I`kW^oXhZ<_E1$=qVNCk)`pt{|2mP7+?`{wGbl_V?y
zk%})E_=vijNQ?z<vLbeY7H8%2OU9ohC~fhES*F$<%`r6b={YOl-+BqQlQ8sC_m}F+
zs4m@d9=%-=12NC=54QjpxqP;1h7Y1u$)574pTXJ4s}L9O0bh30*dI`K95{MC=+hf=
z%0=ed);taqlATAQ*`@(03g<FOktsINg&p#qy-z)g9DX%bSzOz|RI4g>ba#FK_ee1k
z;}h^tAFJj%Kv3&;+I-H#+z$098~$HqMRT7WJ+6(`;c$DyHp`_ui)eMg(z0}obS?o4
zbWRubLk+YmlHuAytkUKf(wBR(Ec!sPt`P!b+HehG;XWP)YC}JES|h9R!0g1QUL6wZ
zfv*)EP(!iday-~eJONaJN-w~FtQyZ^fjZEEhx)a8&gP8ZqE_0|tbzIjJNt3jEJJNn
zaVCi-*}gskhU^Lhw*lg2Tdlg<5~C&-(v@xk4%B#A*OW<4RrZ$du)U<F7=B(iqQ~zk
zH%_yG?rfP}=r;asBx!mBXn=9KG%rnd0{)^lEq86R3%LsF{xO~i%prspL&?biYTFI?
z*7~fZ)dQGA9|l~M91$mRs9TS@7?673T2BM%AMm(J45s;RpnInx#y@|7(gy7tNo#3w
z-aXH8NVWe!CR=!)6f_ZAuu~P?4*W9U22Q63%vfmZr8P1T*AFwinaoFxBxE)<7^S@k
zYCZxin_3c!VUeaTA;jyjcV}UxLN^~B)MFc;3%aR0WA0qGgX8Cw=6P^4m+iYuEZPRc
zB#F~t6@+LwB}pGO)jwNBGLCm`A2BaJwyP~M#nN`Uvabsm2__sNW?zv!tQ#{ZsE<8`
z9m80s#yo0^0`1gvkL^n6+WXY@fF=-vrS9i$WsV{zi3iO@_bNmo-`yJrLLx=bWhXid
zlXw<u7v;7XoU?v{8?L?u7S}@(t#p2Ag#L{TCa~=SAtbgc%d}6{yK5)Om-_305nspO
zv{ciCxX!Mvj=?fpOlHRs3D}Le!j~^2_<*?9=62cKl~|cP>#2e!qdnh92W`QqfJDAJ
zc{Mn0S3;1bzu9=yRnU<lHDj}wUGiB$14pQnOVZGLzF0&<O?jS+JifNZLvyQhMq-f3
zQ|@cfX9VdP@l(ov6V2T7SOg(T=w)WLqzT9=_xBXKyJE#~7DQ5^ESP&n<y3HB8J(xc
z^Req58Sm#plZY>vK0At(m~CL9d%L&aHD?&-v2s|FrwsJli{w$a_2-PVMN_@Jg5rd+
zX7iZolNxf6)PJlE?+z&Rlv*n~CCnNSk^SzkKnLF>{Fc1OBvis+K3J*kChhB;a(M(x
zJztgPoXetYpg)@-uJ`|%Kc0-QQDN^OkhGta{pF$|pPJcz=8p^mK>3H$o<g^4{$KaL
z7Cy{IVa4TD$|YyKJ74$(GJV-PWV_!ZF7^4t4SCSvm#Fo-2SMI~`JEG0cUUuD`I*su
zsx#W$Aal^s_{smogMO{71|x>(Hs~jCKNz*y+w}N}n$qTwu~h5eJze+M(|i-1E?|{V
znAYGrx8z80B&hE<7*lO76a5;RQ-+vE#wR%KhrOpf;wNFD{@}Ml@#I2;G}0rlYCQBV
z$sOeAw9BgB-wG|g-Nn5hJun0V+oc5_dUVtxCxH|JJ6b<6J+^W_`yyvhtTt7;Hbsfv
zk3R=X4zt)U%cBoum3UtyW}_<Sw+&;5$YSSQyG?Q4U1jP)#zOB-xjMOdTwMt$rR4By
z{721M4lmxicC-mOqm$5yGh9i)cAg~%%-X=<G*l(gcc{b27GOH{?TxX7(+@)ZiH8D_
zoYDhvwXY0ay*pv*EcJ)+Mndo5`jf#yH7n26Z5g^zz8?@-dCGC=^U)d2eH-X%eSb2q
zZ+G;JXIs`cq9!h87*yzJi~j6)5Jev{R}raAat=`H?f_jtRffadx{mj))(OKC)0eld
z@Pq5|Z(eImfkqXOxAri1?$UTo$*VHm!Tibs&AFEy?Y8F!%Rctr7lF8NB~q7o^I$ft
z9M4&XgB3W^q;g^j*jQ#8i$|bDP|^84J|8sifHpP=()GJk*3OpF-Atf&UO*!aU)LX~
z#y@UbiF#M&dN(otn2t*khnv2jIN4+atK9@Cpq4Te<R5Pm7l(5wWcy7`5<<UG8ey|2
zoK9HvO)5nzTrEc{s%&6q!gN27m~|GqCQN+N6D*u<Wc#uPP)h760<RK0NVJK-*DKab
z`iJ#0IpV6F@h>pNjDzH)IjzS1WiAg>nwSp$*HenWp8MjI`2G6yXi(pukGSeYa)*``
zaB8R_@}|)2ftb=}uV{*XYwtG|azf6#JZdK}WqztY7x07Xe5hCP`E4oHXcTs#5DT-L
z%1cY2Oa|T{dR+78JYK&*;RPavw|2Ami}Eey;kP&pd%2xRQqA>lf1zn#G5+8;JoB^4
zEf`toj|8FnHB$j+UO|o~5V_&X3DyjR_VV;2b;5qcT)6T|A;X}rT5ST>5QC|d+|6n&
zY96o&QuMK_8v8T_x9_d;hraLYb8$Oq4zA+*G>#*`-KOI$jT2plQP1>0XkOnSP=Z{D
zdLXfOaxk%%2I{lg-<;rg$-i;K-nb@NyXEIf<MMM&$Asx3d>X;z26sBqKE_>Fho%Jc
z_AGscZQW+iZ<tOIwH|FL(w9~LYYyKxD-8IMEDLX6%)Gb!^X!^0=aBsnIXrpHiW_bQ
zdSH{3G2N<bv#L_5XVrY43&lOrVYdaS?*701=}Ff$4na!q#%H9HHD6#h&N!btS#>-(
F?Y~63Oyd9m

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/totalblack.png
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/totalblack.png
new file mode 100755
index 
0000000000000000000000000000000000000000..85723f893b5ccb0016aa7e19817d425ce9409c38
GIT binary patch
literal 2301
zcmeAS@N?(olHy`uVBq!ia0y~yU}<1rVCvvt0*bVIibVk_#^NA%Cx&(BWL^R}Ea{HE
zjtmSN`?>!lvI6;>1s;*b3=BdgAk26#O}>JGfn$=Vi(^Pd+}neUyg(&~7JT>5<ug|R
xGDpE^2#kinXb6mkz-S1JhQMeD&?y9V1T!17F);SdO#BP7(bLt>Wt~$(69AGWAY}jm

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/connection.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/connection.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..ba4dab23f7b6e22ba6041c4fa25fc60503d98ff7
GIT binary patch
literal 7894
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
E0mtChKL7v#

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_publisher.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_publisher.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..a48f4b0c37da273120b86fa6102dbed2224cba21
GIT binary patch
literal 6817
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

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_subscriber.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_subscriber.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..820ad112c113b83da950217ca6ac8cc4991f3ba8
GIT binary patch
literal 5273
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
QG!k@2Y^?_|%H+<!0SRSAWdHyG

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_handler.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_handler.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..40507d1b572e1220cdca8b5c146039a866f9cd85
GIT binary patch
literal 7995
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
af6AmchWPI2=8%MuNOHTiu6Gb7XZ{0nQ?k7P

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_sender.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_sender.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..7f7c5b858a0359ed6e1ab8cb7cacc91e413802b3
GIT binary patch
literal 6019
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
J6(dca_z#Wp#*Y91

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sensor.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sensor.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..d32c94c3fae648bbf89586fb38d5b94a1cdf3acb
GIT binary patch
literal 5356
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

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/simple
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/simple
new file mode 100755
index 
0000000000000000000000000000000000000000..b7e86e25e89bfc609c498fb85f40eb87b4cdc112
GIT binary patch
literal 1066464
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%0AewIW}nD{-3
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%0A!;#QN!Pf0f$n0P`#nzUYd#{!%?5dCO%E0?
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%0A7&Jqj51txk4S(
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

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/connection.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/connection.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..ba4dab23f7b6e22ba6041c4fa25fc60503d98ff7
GIT binary patch
literal 7894
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
E0mtChKL7v#

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_publisher.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_publisher.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..a48f4b0c37da273120b86fa6102dbed2224cba21
GIT binary patch
literal 6817
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

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_subscriber.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_subscriber.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..820ad112c113b83da950217ca6ac8cc4991f3ba8
GIT binary patch
literal 5273
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
QG!k@2Y^?_|%H+<!0SRSAWdHyG

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_handler.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_handler.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..40507d1b572e1220cdca8b5c146039a866f9cd85
GIT binary patch
literal 7995
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
af6AmchWPI2=8%MuNOHTiu6Gb7XZ{0nQ?k7P

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_sender.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_sender.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..7f7c5b858a0359ed6e1ab8cb7cacc91e413802b3
GIT binary patch
literal 6019
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
J6(dca_z#Wp#*Y91

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/timer.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/timer.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..be209fd3777c727b3e06ce6875752f94e1db96bf
GIT binary patch
literal 4150
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
IQ6_Kx8_uGZ)&Kwi

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/timer.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/timer.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..be209fd3777c727b3e06ce6875752f94e1db96bf
GIT binary patch
literal 4150
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
IQ6_Kx8_uGZ)&Kwi

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/ui_app.wasm
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/ui_app.wasm
new file mode 100755
index 
0000000000000000000000000000000000000000..ddda9e2d3b2df8c35f2aafec7c0d5557445c1404
GIT binary patch
literal 1953
zcmZ`)J#!m35M2PrPmm%=#&Ik+pw5|i#!cL~a7Bz_B}K+5(qz&=NAhGJbvi2KiHc@2
z!?fv=Ka%lJaN)v53KcF~r0`7A`9~xV07XfWb2G#(cCl}F-!6`nERGoAX;&v_c~%_0
z=tmI|`>ejtR<zGoSco9A)xKD*E?!VVLF^~~f_Fq(EPKglHZQ*|lkwp<%XEH_&rXS)
zp;?^d`QAw}w%-Ls%^oFrJ{yy8=88Q&DHlPm+r{xbE6M|koT+9P<vdS|V7z5dk*Xb)
zg)NdYTc&ml7^?W-!8V?!NtxO*J4)vP;&w3P$tcZlx~(B+qv=gsKX`g9J5Lv7GB1g_
zU~OxU(xch@%#M;pDptPAmbGOv%G0a5YB<J&TgBViF%s)4;!IFgFg!3<YSpjXD`rTB
zh0J+ZuE@Of>ubNh^Xpr`p5q{yKfL_LukZc(%CC22?N{FGS$jNNlr}4ndQoN|hCZ&_
zSpiK}Qmg00P@Us(guYQnIpt|Kd6t$oU8Y4zw;GePViyO{z1z(Td705C@^X{Wor-JB
zLlIT&cy>~hqS6Y2_0)@MbG=1JMXh0<h0qI8--5i3Sf)RgqS3R@Q;df_oz3&f+P&Eh
zLI8OvWcS+M&53CBuj`gcev*oI<c(X6CZm|iXuB=9n}5~SFCcyu^8v-&sOdc(^H@BM
zhDIrpv15LEpVJOAe^W8wnrRLxKa7UKrkP>WN1Qa>;~l9<b8KLG*PX^ts%RUV*B&Ei
zRWCS(70{Rd@^=iu%8=?J8Q0aRCJ&8`n0iO(yo>5@jsbjq%y89L%KM&gl(9=teFO;T
zoG+>VW}~_g6`(h0Z!R6l+zCOUbB+}_GQ+28>pqW6Q#IujoPCftu<{T4!PLHthJhG_
zdF2>!Yp8jL`O>s|LI3_LUm;-7s-8oT-=j&UX>c=CZNN=S@g4TWH{tG7iETq5A4Z3X
z7Cqt-Uf9(E^45pkA>`t9zO7LD(3(jD(l3uW)Q;psJ`^~QN;SDEAYllew0Vn3iJuGS
zl=Uu=eEk0tq(QhZ)V(5ukwBNKngHkPdhCMp0sFx4t+NefIaiRc>OK?AK#9+r4=}Jd
z=2r7C5|~#<1zxJ+=d5nr01LoyAUqAh9fH0x`5KeILGXDy1lLgz3U^e}3NK{<j=^Yn
zxZl<{NdWJ^H%SZ619<*3w1b0Z-$o~B;ct(J#uakO`>aC);o+~97QQMY0LBnAIN?0H
zv<DC*=@NvxB8DxJB;{`C?Uk6D-a4<)TS&CSuk{vWJJ@=ck?gtoe91gP=4TWpWDU*h
za*_>qj@$@H?*SPO9e2st7qot)++%={!%rvlmHVJ+|3MqjZk~+~^@9iWImL0TljH2-
UGwlDpbog`B2T7Js27`hA7k$EpLjV8(

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/vgl_wasm_runtime
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/vgl_wasm_runtime
new file mode 100755
index 
0000000000000000000000000000000000000000..fa68f3a2d029cb9a52f48b27da192cd5e9ccf4c4
GIT binary patch
literal 512936
zcmb4s3t&{$wf0F!V8Gx+jW$@+sGwM1QBkpAJ5|P_f(}S5ULSyvI7D8B89-|wIEgY&
zQ)8>GT3bQzN?TfKi;5O(KrW#z?M*eURIyEKTK70(J8D`}i_QOiYwdI9%mnYfKbkpb
z?Z<lUwbx$zan4y2o_a+|Nr~hBD|LoAgnAw+3ykOWm%}7$yi?;0cg8tmol~5lNMYXi
zW|YBS4Jz=j9BF0v8-l-?fM>2P3-Iq4!2Dw#lI0H<$3b2GjVT%8@Q?MKO3lw5ImF3*
zdsu*f4<7+O{t*zm%r8Z;L&!gbJpQ>z$rowxFA73Y(B|J{!2EObB7cs}@7Y%B^o$=C
z;9vKVj>A7Ue>(C}e9%8?0_2?;$oKPC30nMPead(4!UeaUyKw&53l}VouR3S>l5@`2
zJl19Y=dY>5ugXE5Yw*XqRrsUsn7_60%3F^aKEWCP>d3PneRJ4t$F_!VV%`G$QGV9r
zzve&3PGwpn{+8hHj1#^*ddt;sb~LVe^sa`wxs}`7-aYb?_fn(Ze&ugR{`iRxjz*D!
ze~Y2?b>D>!<=-f0E#R()DlL4x6EDa=-q}nh>^~w~PJ!${!e1tH_8;NWqVhj4f;)@q
zf4>NRyr_Iz5nNqF?*uB+{v-Woi}I-__aF0Ti_vKc;W<V0JBsSRQ-uFhMfFD%)xXmv
zhAZ(OTf~1?QU1@1@IO+NKcOgpW)Z%}i}J@7@$*EHJZp;T|D`DZjH3Kdk-Qfa<-bz|
z4=chqzet|CB7Vmd!9Oa3uPB25S%iOR5q~cf@pEcX{=G%|*;T~f=Znf;T~wZZ&i%*s
zy`iZ5Ka2SNz%7g`%img*A1>l|O;P!IMe<(c%df%xZAJC}Uc_%l5xt{}^1ogLzg`4?
zrl|gRiuifk#}DQEVNw2VMf&-55x&}@@|P6RzqzRVHAQe$5&qgD_&<xvFE4_(74g5W
zDE~`EaD5T}6-E4istEpPQTt$M^ZwP~E>(noLJ|Jgi|U_WRQ~ft^iKD%>o{{}QTb6t
z_^&D||3Fds$9?&1-*^%HyQ1<fMfu+^%6}g4dW=6zKFT@XITAO`Zw|F^r85)!z5Zxf
zpceT@J4ZTqBfrB}z6A0%e+_Yj<R9Vu1^LF8|8MAPCh%!~(D?)Mdwls0#_B~Jqc3u1
zUpaHy?D_S}>Tg@HJXXJK=CsQfE?HbZbMCDR>z&!NZ(Fov@$BWXxyxd+XFId6S}}Wu
zEqD3CxyzT=FW2gatsGkxUp&ugSTuK))39*Kl4Z`a1&d>V7c6#`e{osNnODDHA^BJu
zi!Q65JD=RtIxCkgh}AnbY4*G&i|2#4<*{W;?(h<q*Dq}FfO)9utFR~@t6w!Y7F#xZ
zd3`K)$I?8i#wDQZ;+0~v7c5=?E|x4_Tt6@7W!+wX2PiJA_aOzU<xA`5EofLU&nqUJ
zt(*%4g*fAj7cQB1yO&68MJ!6q<qK|GJa?g2Y<_)g?!2f6=A{r8T?(#TXpVWeFJEwH
zUbx#1!(kptu>yqy!906*{jz0?m&^vwb7KpZ<P{{OR6h%sEYA~?s<8!&>gN~8?sBGb
zfIpx1RM!Ps(WKb2I}VfTGCOzPy!xei?bfe?s-d;H^9J+jR)H;DH+ky$XP<vgtr`=c
z*^||JX4bEY#h2APOuCZo&YR1{cxKcurui?EBwM^FZQ<NIB)4wqe2C`9r3EivvQ!IP
zS04+ns9zkrV!=Z6C8>iXTj8>WpfqjCeB~mtWZ^<7E2R`qWLf=k)RvU#am%G;=?e=M
z&tJ0ASNQUU^>dYk%Hb=Z34T6piu5#Rb_1H0U2mT20<J|LpTA)7?D+Ef`Ob1!a6Niz
z!@~ITsDsWo57I?rOBOGb-{nkNJa5rbUYE^_E_0T`iqO9$8AX@IWAF>~8uM<SJuiCu
z?1s7M=}4Uy1;Y#JX5a!yk5w9IPAE=y0xu(Fkqliqi|QAl?>V<Za^5S+`Agz4XTjq7
z*zCFU=P#3V&|I;U-lf60_0IZbOPnQ3;jwNb4RGe5cOU^qzW6rYlires`DoI4w7=Ol
z$(b8l0;QlQEEJBw17%yju)ZFW-mx6%3rTI!k`?vjo7~KvO(k0YxM(f}S{z#vT`0d$
z(_+ii?0T5ZT$H|b`Eo7n%!VmApPzc=WtY!}xq5f!d3WQzyYnvgZZF`RinA&H#~G0h
zi$ff^cl;~ETyhBJNc`ozQXw~;L!RbHVchedmS<VQoa?cSVhTv=5X^ubCxBG`E0ui3
z?@}p8D%11-DRrgBdWxNJ{=O7A%jK_J<l(RWQNmJ@kaI_lft3puj3f{DfJvquCGb$E
zU4=kd@C+p|FND7;$sg`KYRiA)fv;ogILz5(VZ~Q2_)uKxCvjzc{!{#Af}d$xeuzhZ
z*{B6jN~!a-rGM!0VS%Bu9U0ThF)`&>UA|Dq-14P5HkU7UoQn0s0>j8Buc%waD>$p>
z70MsYD@N@aUO{0DuOl319IptP&f>KKI^h)>8P6-`@Dq3qI?g0s!ElJzqcH#H6#>f>
zUa=T4l~+u-BfK7q7=hR09A_4<pKzR;c&&DvIlPW?ocX*Sk2M8eKj}CNc^&OIOL;xP
zabmol=s2r*J;`zI;<W~`39lzRP7AN6V6M&UshB78I>vF@c^&IG5Au4N<2=kOg0{za
z9S1$~dWPd{;`LLGvzga39cK%#XF1MRUe9)%ZM>f2INNzW*Kv06S_}R2dY<F#;T3&m
zAFmfU&VF98h||UEg;@XK6_beryk6`$2YH=<cH{LD$LZzu(~e_!o#;4OUMD$Dj@QpP
zP9LwIb)0@)Ls*~T^>Z+o4Y*#0p2zFuuv}gzqy2deqy2fk0`1T1=h6PWPC@(gdL`PQ
zR|KVFc)c3!&+AmQKd;l!{=8m;_UH9lv_G#Av_G%Y(f+*7K>PE09onDQnP`7ru?!R8
z^?I~FuU|m>^EwOd&+C7n{dv6+?a%8?Xn$UBM*H)63)-L8IcR@g=c4_2orm`4bw1jk
z*Lt)+uMKE_UT;JD^BQ%W>k`?3xp%1JtbJ)^#SkZzI5aRY(Ap6zH|HZUu_tijOHg9|
z-@t`s(Con20DhS|Ft!4BK;$^-9#kC|TS=IC=`Mk*2%{%B=?;Ob3B$6T^j3jK6Rsh=
zUf>$S;|RA4JcckV$w@a0JdQ9d!$~g{_$<O9!gB<!B|L?2MBwp+(IQSdB=7{n(6E!P
z6?hWiIfQEj4iTn6=}Lho6JAQ#5qJvWRfKc@M#9*sgqsQX2pl22j&PU2GYPj7?htqu
z;fD!t75FB?>j|$Hcn;ysgxdw4Pk1ZgW`U!Gw-a6}@It~Jgy#snl<+>n5rJcby9kE_
zUPbr-;aY+3BHTl`M&M?`hH$08ErfG~9f8*o?kAl4i1L4#F#I;;7r32pfN+<<4-)3`
zWV%D(hY42`-YW28glh<|7kEA4afI6i-bA>TaI?Uh2~QxrRNyUyLxkrDyp`}2!V!VD
z5snZJ3A~-~EW)({?;t#faE-tngt>g1t`v9=;iZHff%g$!ML5U4GIl@VX2LxJcM)Dk
zxJ%$}!tI1R1U^9cVZvJlK1g^y;q?Od5Z+9<UEp5ATM0J{YzS{Byj0*U;SR!c1kMrO
zM>ryIAK@;-A%Xh|A0S*S@FBuIglhzL;2ENZaHYUygmZ))fdhp53FrPr`6~!x1cv+q
z)1yWMgu4W$XN^`8?hu$BHp*qw^j3lCX`?lS*9%-jcpTw&fyWT$vP`;J;BkZ}5MC<q
zS%gD`=Lk%X9GyZqA}~F3G(tEeFg<j17U5cf>8Yc02-gT4A{-@LDez>%O9?vyPa(XD
zaPC9t|Ad<f_Xtdn9$iPcOJI8TXglE!f$8C+4-?)hFg<;AJ>m5N&mp{-aJ#_s32!Cb
zEO3<YcEU>q=136jAUsE4jtJ3xgd+lTWQcYV4hhT=B6@&ut-u^9qCJFb1a2m52v-W+
zLO4g*5qKTpe!{tbO8+O!crx81Fe9)A`aAh|-aEG>|Cs2_MP|;3Mz9VN&HZU;VEXk@
zuBn)(VNiVy?f(B#qsP4DhqtE?z@5z<f<*t&701)>IT)Ufs!RSkk*$g{W1uUsr}Ag-
zztr9qJI&e76e+)}zcjgf*V`wRbp5(N_Q@Bd;>)q4rDA17Yrd>CS+Q*gq8^Nwmu7*$
zi60~70_HA=xVM~XB_PqzzP%qCKB>yqm*eG`ueGgkT)gioLy-YNnU14c+te{-kbK~a
zhmbctku6K^!(cnGv}~Z()XCslDdME29r{_@+(R#+)Y|NX0M_8bfn;m<2Ll838xSEn
z$#CC!9UHbl&58bj*im|yt%#WQ@JA2;m>ZqOlEzXKL<1mUBg?uK;-5-nE23Y4>P-jK
zjciM_ul|COL?3K9ft~pn{IKL^mi)Sw1iOuuZLPgvC1T!FY7LzNmpU8PlOyu68T|ry
zldT2?H*7+3@VO4jxkVXjNVfikSt0|tt!#UUIA=u68~suhEqW4(?<4V1F7b-S5oU`P
z$Sh;_JIwx2se!jB<{?g7YoD-powDcB(7cD32Qv34%4BN~;KWY;I;&4i2`Ib<A}*eW
z8yNOfW*%=(ufup}ZimtTjBP`g>)gz{M7EmT<X{x0LNT{?#HV{2|Ad$OdzD`_p1Ckp
zSLw1hV;~O2ovXs3fxQ}Av_>l2mnq*4BU0KBHu!9L;CsUYEwKF!n_bO++tr2T=C4}Y
zQUQggq5{*jK)Xn^HhaLew(-!2&)Pa$qe!5@Vq9$kMjA(&o&S*b%A4F{ny`^9316)p
zcN|Y?hV`PYZh`WkOu&sL=3UZOi<$!LuwP{k7Dc$!>1>^fD~LJ;Ml=eEKmsGW3U^j`
zF(Ot&>#kBfF6Ggr+^d2r<&^+zy+C7m#9XXwb+(3ppi-o?3jDsdh)bmHA(oiY_RuV)
z^eZc^8nUhPPvn6=QM${++2mo4pNIE}8G5;tITyJ(g*JS@^5q&yp$+fWI?2|_q_>m5
z&YG);QVj8Z9~VfBn7g%nXE~XrC3!`uHrpzt=IXx-kU2Reh>Lo|EKE&MG(7|L)4xT3
z5c6lZkJeF;MXE2tHxa%$53eFTEe~%Yd}$uuM)>SJT>59gC*<MLgh%FKssEA3dUOu+
z-^s(<2*07Q+IJ#5E)}jwhI{>%9nR9gz;IhQ8;N#6H_;DJb0FS35C=bf)J9D*oJ%z2
z2I3>6)2AOqjTDmlvG#_aHNz79b7RM5aKAKGo9JI2uiq=3vm_JUz{UNIbdA<O1|reY
zzkstL%30<LDFONs6VarN^q6At=pB)06-)m{4J}h`Qc$}3kE6^Q@4h^J0a_$g2Pb|k
zojB%eyU~!+tq&(QFk1<GfrE{oD}gH+v7LsIenK<?Tg2{ev<6<rjCe-c9e!Dy*@@(7
zt@0#QGRw^Q4|61r-(nUGa~yNk*YWemdoY}Me(LzBvz`Y7qIZ0&EYKFtMa(ZA6|9+R
zH|L0N+MFM14((_wv|-M|lp0)SO4`kDwqaF)Y!*n{jfN6wF<5pwHBSr+Y{#mM`e)2(
ztLSK)=$Nln224`gv~mN11qTcwmDI>_xPRf5X}4A;_kHm8t`CPM_wDLG>5SdUu95?f
zpz)J+eQ590&4;W)s}oI?PH<f__0&}5th#e;Q{c03k88fTwyEN8NL>?6g)7et2NE46
z@aAH5xy<G8;%ybJ$aYe7xn$R_p3)Nh3{CC^)4VG!uX*zbbf&WD1M%vJseDhG2DMl+
zT%8E#O2Ed%aMkK(_LiRvmP?=z%TkT9^i#`Ha2<`rvK74l2LcFd!TUD>5EDu?1)SiO
zh%Ule3s(?E7s+j>IBT0Kc?n(<u7niZDcIVkDqfIOl??Z%!qv&}p;S1FPL;U`yd}dX
zb4set6bjc{0tpW#%N`Q(!Uj^9iQ)d$zfFXDao;;J+_!qSE76Gd%&_)MS^FT-egV4F
zc5vMuVMH_@yq^)5)q3#$tpJKd%N2>%H(0d(!J<K^KBy%##R@epRhKOk%2254l;eq2
zU6#m;)+O!V?>1Z(VrD0X53Sz%abmW+p@g|{EMvSJ$J7$o!9YA`9yv|SUpi^LRywbw
zpNkk3-9iI~fq36QylNm`iCBWZYlcKXHLe~7l`ng*WLK&E6lb=GSFo9gZ_M5?ex~3&
za;D73RBV`NIdh8eCfQ%pY>zk7f}RFu#a_`R$ER+tNKLCu)m5d!qZ^VpcQ+)bbu}dG
z_OA=?GhYyLy?Gt<nunkk*HOjixH{-HXS#HZOS{*6!cEHte;Q`TO76nV{<bRVe7Nln
zKE1oGij7jz1zk%cqnq}@bW=ws>1XntJz$<eC&-i=EUVI;oq~?1E%A=|59Gi}H9F?h
zckN&}#W%X3G`nd_N3i8}RMxh4Hq63-rYM%w;at(*8=Z*x&0nRfZ<vD|84KqBP5b__
zEGx-~=^X?&|I&<n$r0~J$xIXKwS{+J7{Oc&ib{odT<YL9K0o+ucwg|@jzs^E_!kaC
z`-WoLMiWwlXs;=z{gtfJE@^j(?^kYGJA$nX;iIXW^UbT8*bW8PUr=txr&EB;dhCjn
zbEyMO#)s_{?Uwjs>wvH<N?D_L^0NO*>2J8nRa;X=7&3px)%A>2Xk(3ePb<SnFc9RP
z!gRAoYugmGk1QKSv50w+{+#$0hPg&TS+kKeEFsRX5U+-m*hV&*%ag2(2_8@>tGVd7
zh`BOHo@zEqOY(;VOCn~jsu?yOb+(o{jg!S1OruruU?bV8{8|sPx4ecUfKN)W6+H_q
zN5Ar)knXEmx*ayif@-nvY4PB5$DV^U3_A_UN&vMk5Gh6RvjEAMv@Q~mZY{0}h0#nU
zWe6_DTw2P@@Jq2B<-{(_+=9H|v!TjKCGl(bN_8i5MLz8_nugvMNQJ5zHd@lDP<6vb
zQqG+4u{kmfxULZ<U6C*tP!FZ*!22N?RX*rCxyv1ufo5H}59Z#N=x>T0haZM!cg2p$
zR44jZ$0`#2YvM<42hUEXW;>=jPG(eeLJkUJH;zuA>ejQ#-$Kj$|KUV^;zV~N&fMRC
zsj(2}*L*k|I>YZdPG`6e#T|~9kfyJsEBGwjONUr`Gy4waI3?lt639aK#Bjy3-v*xx
zzh@a^<E0Qs1QNSxP>~sCz1H#Phssc(?WzDN99{BrEw`$$9D9djo_ZkfoKXz_V+cX|
zeofC?8A68GaRc$n=o8SC9chNy{_T=BqyAe~W$d7Ev8gM7Pd7uq;?HMD2~u|}UuGq?
zd&B_<I*M6Wkwn{LnFT+|2xO|j=*rdy6mYErF<FHZU(Rx&sR%?rCwEgsonQK%NGC>}
zj7;^)oB%naPl_OzBBC*%bFujJZve1ZWQrC}O$)5uWmqCxHX}0K+^Wo`?~!tFU^<E<
zI)){B`sKbN1x~}rITK+U1{p?yDXvx3@FrA-yW@CgOC@(<5ISSuCA*hnx*Uk^v`k&=
zV~PP}4o$gsw`Bw)KHB|N8^LGGyiwdVEG?12GAoe)_QMFlDL>fZwh^@zI}ySqIwEMs
z=<6UT+ZGWsLH$~07;^W9B91mb0QB)lOGn%`>rkz1;}-F14&#o;R5f{%A!BY(@~Q6%
zV;&dEU_w*fDriasrY&t?+wCNa(FN@A4YDO&qRF~JiK);y)o@W^q>CYJ|Bh&4P(8`K
zT{C?h?mnbbr0JUD@dp-m^;FWF#0;w>6fEgVbWD=K4Rvy6nATzZ)70n0Yv|{*(yBEB
z@zLh{x=^In_8J?AYRWZ2g?*+WE!`h%qPc1NxK_~ep@hgJ{KD=fu`(G!U+7B_6jqRP
zmL$lp11`xMQekyKQk{&9k!%4&V{B%vWL703<0TWIh=ghrBthzgAVL5U$c>vthm;-#
z#<2jk9zRx;)n~?Nz6OLtkS&dUJwm>k&TtPT)s6)Q(NingHB6$(IPsC3!Ni7jB8ZkU
zhH+asD_FB;`%_9)X5t0v91XKKx9FOWs`DsDKvZXz>dcu>7^_YYL<=44470C0=@y~W
z(-tX7*7bPSm1`SanhGCGMG%-C1c!o&M7-!4O6b$zIyodY#BJg8@+~YZ{lZ=Bf}1pC
zgZoLIgINS2IsHk54~`a1oHa4r8@zWBI*-fV6aNEyfz*_lsk&ZFP&;JiSh6oQ1vU^!
zEiFvW!P5*DV0y${@V^T%qF8|0ew*C_?sWdfW)$YHWzTQwapFr-;lpWlFe40V&1OMc
z<JaXm)Mbs~2qU^&<1LU`U3UB0I|K9VnHV;)QPIsDc~9ZUI}??od+=jMy@j=caIUSs
z|HfO~NfsSUtj={Vn7J1D3pf!3B}IwiB(8W;?9k^Vc3UTLmgcCFfVGeDTRXZ5)KnqX
zj@fU4X}_^aP||fY<*aG<i0t&52CMvevpGPs@tO9dKj%$*g3q*p65R~uTb1Y-qSQXF
zP2jDv<_60{u|50v_?Nr3=GyZQb>PuH$AyACV|`|0uVqX-5<CUG7w)T}R(P)h(;p|+
zGtFoEFADq6SOiAC>rZ8H_#uo`{})N_->BO3Ng~$dljOW&N#64H%*-mk7zf|X>o?Df
zcwdpIfJO1eRyb{M5loimTnp`>g)a6i^yoA!bR~4fq20f}1pB<swNHBGT|H$IzKAAZ
zo^Tq4X=0t5;WOZ3eAc<gTIW|Z#~s4PAqK^$qg*n2>4ACh+KX$V14}~2=7q}Ogx!0j
zBLYDg%$rL(@^ky+6}t_v#1Vx87!yXQaUlG|NPZB%4ws3bGz4`AOI|M7jfnQOhGZ${
z-Qj};A#jr}(;)<Y4L%Yf@IfeZ*=`rjM2luxFERbR09URU*LjD*m0h+o_*~s<Kofi}
zR2qD4pWY3{igyXZFgTNLHr1nEQ`NGm_WudXuSjxi1T&6oa7?94?A=gRmTkoa9Ek%4
z)~h}G<A8-gr7@9tQdv_y-S2iH8wcF-M{9jpi-LkcV?0{Qjt`le;Yjv6&<uPnI+u}H
zpa)(?OyRfhOI<dJX-Gyeq<LAd7iO_;LuY6x_zWA^4hN+k9hAmE=PMs}2c#cEZlS4m
zGgbN~)-V~ED|G|vDfj`bW?x@O1oVBGHxy=)1J)EVc!SO^vBrK~0(FHLDmpdh678?L
zXpPM`C^O5r>8HK{Die04(Z-Rk_!;;Zv9&%f?(XU@n;6cbr7JiI{GHd*o7mES>S3qU
z-~|+9#5hvu2h8Ulmo{}f(}d3O0jS0`aWM(RP-w2Iyu)WVlImHL{kAm;pTj>OCczlP
zd{u>3lSsKHVPl!A|6olbCw&z(LdkHq9cnU7sc?6q1Eet9z(kmSs&^e)hxfyIAAz|L
z7$HDu3f+g{V<nWH{9GV8y#ndzP~zKqeG}4e$|6Q(30yeBlxIVw*e$?%=K=in!en}2
zGTmx2wG+cV!Fyxk%zLPn%xY1^tW;f(c=F)0U`V(E^S)HFrVJLP!*r0&-@|cM^1pGW
z4Ix}Dm*$7aIj{K{HH=~NpIquj4Ha*r`QQ9Ko4+DecYyJCB`M>Yv)vw}n7T-qD)gW2
z4D&>klfD$K1qUEOS0H*Z5JgP-HEA&}iSg+s$)<TnCrb9u-R#&W^I2C&*3)iQJctg`
z843uEU*b1ka;B7QbxZn@+#*?xZdL)3bp=Rnmy#i`<jIscbXJP<2kCn<-!RfYG3A()
znVM(dPN`ew)rAGQtY*gMizTGk8^5!<h{FKgV%*nAgtMdBUuA9#6Uqhe-G=bO)vG(r
zroH6EihNe?Ogc4wm6$R72pXjJlHJQjMI&s~YrIBn2Yqwo8`7uIJig&{8swtKQTxwe
zQr-vT@Df}&fk$$ZCCTYr+lQTV0|sTQgu&ZkO|A<7<FMMB(D6FM{cNVr@F89@pOF3*
zD#N@PIQk*zA^i10ODJEBErFH4Plfxv`7q;B*UP;AXn~iJp@t+d5>)Q$!MwvAVjk0i
z+UwyK5>34}jNAvQb>?Cw>2jlbm6ySqggJJg`MWk>r|yPk?m*+9lauKN+{*M4?2dtA
zVfijRWsC?B;BX0rN2&1pJcXBKpzv?KPK6r|5WVa_aPg>Qplvh&C!f9WG;kq^2eVL%
z@zjzH-ph3=i8ZXR9x^dpiOwoyzUq-_CYg(bjO(kbtr*sLGM^PTv4aE48N#IlcD@%-
zFJh*>>e?fk9TMgXN!XJKYLg>}O}_HkL{k>4)Di$>CW&!lxKq7zMS@n1*)Z33Y$09S
z;xttJcfdqst*pl9M`TdfMFLxChS-b)?K4_tc+vpe&<*d)a1S-CqqcwIsiBK%IG3%+
zwKQ2p;E%h=t@N&2o7E{Vd{+zR_{ngyZ?mE^ydG8o!+lUM5A%{}YH{2sZUg*JBjXmc
z=xwSESSmSZk7LeW>D0)6;Q%&&R|<^6*gxdS{S^Y^CIzaITK?+5xINLd-HDwmqasGW
z=C<&|k+$%ISdVHk8)ep0lMJs<G_ChoI1yM;Jj%Xhp8N&??tbk^H0^NWI%mvUgKsuh
z>oS&LUvDn*&!S!hmoR@pLpAL%eQF5UG)dKMmp}?P>t)#lJf9^z%Tme?85)s>?g%+5
zXv9dvK#MfkHqrt%4J!wT09(xKI#;D5MM<nG><|-)4;Aro4Cvuh_(2I`s08SDhG?Ku
zI&6)t21`J-YK$T+=<QG?AVk=))1(_~#TIincA=;eC4~VQrADJvqugNyu&De5J?&x3
zgME}AgHoTCyDHpG(L1k=z}gN9wLpY&xq~uLldC{H3Ppw9$8geJO}!0(lt9mjkD%DW
zmPfep&RW&<4p0n~4Ct(6xI=H`9@7`B<B;M&e7$MbMoggy{B?L+s_wy5cpGD^eUet2
z3~v>6Ze`m3RCs+dys0z1847dK|0QbMWP=)P5RBpm!3b^;Oika5Ozsg}#ytW=Q79HF
z)%bEGAn|}(u`vjhDzFXitZrK>yypz)8aavZHaN1aWtkiNmE)tL>)BDyg|NCLaUBfQ
z-1A$y#Z8!J$pDj@w$+X?TLaiWkQ(E?8nPuZ6Ezay&G3<%psmdl!`p**pGyZB-ZnA3
z5B@+ZUF=nwPckP7nXMDU``rQ)yaLTE@bBLc15CEoj)&{1H&<hsm6C@ccXNKo?Mj8Y
zQGp?MI_^^5NQ#;^EWCtG!EU|@xy0A)Cb-3Sp<%FKrMU-E;RCdQZtBn#5G=vrZVuji
zr^raVpnnav%tHj_Hs}<IrciXgaL9=WeDOgpGjN^V>f~xq<i{!U5hC(Ij&74a7lXy?
z?Wu0@sb29NEPk+?8nR{LGl@GCfcBSTT<2|GZ&b<}7t0I}%j9=}<?D*2puCvWLGc_!
zBr|Z_R3^h)to=*$B@=SYU6zkT{G1AJDd_^RLVR5ZP|M)nY-ayO`n~OYco#{&?`1GX
z2(MMCX?uW!+d$}2Td;HR^nYtDs9jpRMpXVC#9hJx+)J<}CQ9Cs3XQhi6b%cgHqn7&
zB1WpsNroSD+vFlC{+Pc3zUb-VAJoNtuMquX`3BHiuK|{M#jE~`;y3z=pUMV!EZ+dU
z{g?*0!^83zu^g*d3d&0ZJSGi5MB)P>7|arzFbjl`HinzKMf|#3WCbFI9RxUOWf4v(
zr17@6hkTe^m8yFzH6zeA`XM?YM3p74LI2aC{quh1X+IHu4E`OKJX%`dC(;4{qdego
zVooF~`G~-lTf63)N7SW^#yW+$;AL$!I|fB<d<DNco_yA|$Xfo6PI7@!9b07>l`EVY
zb;8_Tm?GtNB-^=8gZuJsmgH34=pvYz6vrVD8Cu%8b!n|_ot^_zXF1*`{zBI!^K;(o
zy8ITpkk#$zkeO=hynQ%Cce{w(V0T0TqEr2du-UL9bu-QwoKS^ioPm20D$cK}$s9h|
z!o?^F_86vN&LuurqH&DDSlYisDQ3n=A&j`PO@^T!cU78(g51HsHoy4F002?qXhrc2
zcmD>s;o6WfMl(*-O?gSG5#4@UxBDeU_o&``Uo<5t*vO0>t#?v-A2v>*H&Ix?yr7VK
z!UrVqe{?3yfstR8uE0vbui+*q7c0>AWh<5fCma?c%yV#uQ)={HbK{uz0l*mmXVUUG
zWyO*!fkp0~-=+U+y(Rv7F*jD`*=6svG*y*1u9U8EnLjL3;|e6jxKM_BUhQ3It^9%;
zQahWO#DCt-uQ?w$5QTH2EryPS5S*dWk$RVs3OGK^I&R!;2C%&2Rsln-QdEQ-VAx?q
zl6CLL$)pSFm8HG4*r8;!WtaAjq4vLIwf}W26tbnr5>^rVFj=63D5Rk#rZjq88i;v~
zdq1X_Hg|1D$Od?CiHpn?<21~yaFlNOiL%0l6<Po*jsjD1GAw5@Ulw-VDXXrVVT%ES
zB1TyeL>8oCutU_zF^7u{Rz!{(C=JQ`O#EloM%@LGadauGFh*5yBNCJ=bssxv)p4)3
zva|uGm!4{kR56Sbtd?~b)h&We4d^b1b-I;sr6?lU`&QbilD6u)@LSFGZ^4MeZ>bxS
zrf_K=p|qJR&2LdN;KYWE9&RDumM1oocj6@!@^0xPLuzwUc5*?^WX%x)B_olY!1IB1
zmC3p;9CAz6b*~HWZ*JO;Eza$j7U4jd96>>2=clWf-5|Q5Z*|h!@Ph`$ffsK$0iN#Q
z_q$$s`yab%Vr9v$^IlH$1SxydTTZ+}=BAian3DKJpu|AzAY=IIVK3l0QjmM078fd^
zqziR|FG5#r=86cUk!NPOYrt7;t}QZ<tb@vH)|``Q8eI}US_?K}=+}~&<B(n&haVz>
z#u_(0vB;EgFE`kF87-=5^pN<cQsJ7Cjx(|86V7D@Rq%+lcC2~RHOz5XZyxyBqgdfb
z*Yarxk6Tka6fDtH?F8?~h8q&9nULm-sYC<l%;*KZE6%k#z#2o_6vQ{?1(a|;csJ2e
zdpNl-5F@Kzb0&_MmaZI&-x4@4stgTPgUewmB^Gf#s1SXUI~lz%{Br;P{U7`ZOUwrA
zG+dAg1n<3BVp($-2AZmd#Ni97|G(5kXHV^iJ?$%u)dSm}MX;;iS)E}T7gQ(K+8N#f
z#<0}Z!NhbI;)+DmHYYv>`ls_B%dJq}1z+qaQbL-qLjyLpfQQB+RcxzKAYa>zP4w3V
z?>&!+Wv#XEW1#8*7XY0!-yFty{2fPgei*Mnx-{%0H~lCdo?1-$Gbg3$cGxqy*o#73
zVwuE248sC4&usk{;$Psxuao{8eiPx2lJuLrY3e9hg9V-{#BWup(4k~_Pv!=IFrcbb
z<WMSvb37(lm!(y$8N=UI!`C+9D8ay*mB#`cSOY7`4&22=Aa7oNoN9+|^F~B)aGU96
zpaatb>O|8X=MJm}Nt2!JHqi$+?@27$0VC3FI?QvoV}cDA8!+$cu6X*~!?L<BGr5RW
z9#ZFMvkYAIIV-^x7RCqGtnhL5U%G9QJ_yCa+%ap`$O}{l;`=P!J1pJjP{^|D^?M7i
za@n_Sgr=wG(gv8c6sL^Vg?}vS#hG<cZ^CdLHNSOrOcC=v$vW&Rpi&M_99E`te(Iuk
zAl_p+d+I|fwI<Ey(+cq(Kn)(2KER_O3+-6}d7^=XT=aQN!I@KvWkR;fzrd`BBIV!K
z@;Y<GszC;)qV~&~ko|`>dgLM<q0<2v*pOf=k13_<_G6C4rGOo0bS1-Ghx2q@;#Rxp
z=`uH2{>ALNRjmW@Zdb3FORc7{fNnkRnZ+rdxod{!#SsnK{;h}T6BseIERG?!o`Tku
zLGU^*#&VimDXX$DdaP?>=5rUqKHLSM0NlvzD8S`@tlZi%7?Cd79Y^3?kwUB`W#L~j
zI$jkhIj|T0@?)}al!;qWfgA1c2>&I9p4=m?Vo~|Xy0MyVTq%6N-MVMv#&J@vtWl$q
zfQkEZ+~eq0jqFZkx^%=?iG2`(Ou*!{3PvV&`MN$X>EO0HS(%SG@$`&ujnuq|1v5Bw
z98yB7!>?rZlH&#Pw1s=Hf_c#PVOX!Z1f38@t6_<IN?xY&2Sxtg8K__)(Z9TcGrKpd
zg`;n#rn%2!VjA<oF7G^Q0W;?bGd)&6kgCTl@z0^`?t4mjL$;LomzLnDM1Bu~`~mO_
zg+ReQCMlk)kl$%sr<akK9>p%JV@C`tHzGrim7#$$JR;qxMl_kdWOoym&vJCmh*x18
z#iEV=7}2iBwzw>bU^BZ6><Q~%g}ms$s!J=}eFeguczEITv4<YBMI2zEaIkF(2lGP&
z`oGAwQ;g{UDqE<-Yqo0BidmgZ9>h^WoSb<HGJ4`z(>PtMQ?h5Mw64YWMSlY~W_|&r
zsAT(w+lRtXBT@^@)*LM)5kU2-b-I*|x$-cSm%EgWIiT6l2S>fw_0q^$)3H<e<ugq=
zDV@V<Eb}Y7N3Z)%cJctXZA`n12Yn9R6s5DAJWNnL(7W5i&27LT697brwz;!rqfUgS
zx#L)PwRtepthv{hSJ>O3yR13RrL25Pl~Oki^9hRz56tAu^U99L%j;M}7tyh^Q4W8_
zO?5w86+Y6%Y~@rJYN1j&<f=7m)@nspdBW5pH?4@ND#T=HP>}cdx?K4xWM++zU@<fE
ze0i~AX8JU<fSDdQt%#YGKOMx(vj{Fw*UwDOyr;VlKIzYLrO%nfVC2w1pSknJLC9|q
z<Tx$iT5Q&QV-V`kyQs5foQv9P?VPzl73j{5IU$s3aMp~}(sm~92F2CpO{~PQ-F;L~
z_EFW*20@0j+b~~_Yk!yIIr_S07iibro3SI1*xoN+5aGQxp6&6VLlkZKF=)ee6Y)<<
zPf}+Mi}Gc;TujPyQF$0H4rvwfDmruuBjZ(F9wWcS=2MX}s(i!>mGPmjVQITtN9JQA
z>5}xCCu`sgD3s^i*byVHU&!11wH_OJeSFzRtw<kV^kupF_-tMuj!V?XNLH&9>!aoQ
zL00(^c5bCXU8~HQlEcvRJp$M6!!5SH8p~ji+SBq<L8%c5&C}d1yTe-G3p_G?79KqK
z3EelwCz-$|{}6n-Kl$6>)9;r2`-4BWRUDW6ImStZ&-!al5R^C&bU>UwP6Dhr5~qVO
zaJ%P<aS#kD!I;`@j!|++jN?rQoY)yMplen)G%pQ=QJxV-g!`li&3-jl6l|;SyYZIU
zHkPY4Phw?LmB@%pgn3i3tN+#xDCs4do?o`CHn+L8Q9#P9Q}X%V8FovEB5%=bQ6zk1
z1LmBJF|ZrJcTEiE?N|pZj=M}?xVM<ItEXBDX--eT7DG7}lj^407RNJ>{;;nTd&v?c
zV4o%{p#ofAmNCw>%EA>H<YVnbGi8NFRBg<2DzvTTe^7fAjKZ}DKh5j@Cz?<0ex*lO
zfp(wQQAiVSIr;D;ZDC_VA4~R$=kjFDTiDQ-)~ksAj#0*wYN&44=`%+wo_u>eldsXo
z8q3`p(mn@to!b@5+$*K&Tl4*RkKLb_P`=QweaDxjBbToie_C-D_}0_hG>tUiAH}Qv
zYFkk+p5RyTdswB%Tn!c%t$256ps}Vc+#NBWb_KyR>fPuiUFH}21xq_tiSv&y&U@BV
zUjfo@<&hqrNBU<dn?5}2Azg7eq(^=X(kXeQ7v_<+4?=qK;gCN6jK?WY#+(Gdfayy!
z9+8)4n(YGw>>08OizQ%e6JQ+?TSQA`Ehqg|@jpfm&OlocbDZiGoB23*WiW3PL%~kb
zM?V%hF|C9zVFnkFX2-G3Dy2F~+=AV1!8m4>$O~j@_4p6g?sCh%s>MLdoc%B+R^A#r
zje&1Mp>K1I3o-i<B2(7c1ewA)yCsMPaGErw!P+R+%^?#)x*Judpsayp^D<rLadaU&
zX<nu?yo}L&UKx4zxL8GUx<=gT-Jp*XOw7cZ`?9CNesl^NiUPd-Bdd~NE8dCVFzYxj
zeBosOf4f=nPj29gDcJ`4L{H`3&<K4BHnV^=POvq;<*Tv&<7!;Y8e?sZ+kG|oBI?7^
z@F`TL5aQK0jK{N?*1t!6{iZX_M?YXgTlKPSUEffhhio%zMoDXl%MZ5hmnEc%=mRKV
zCf#8ha#Je236{ghg`(@3)2|9nf7=$1;u%@<!hcBd4f6pc!<#b|3G98R!kf8_v^mkV
z*@^#Eyvdg6YrxSK-V`y9HRp-P1bq+DKVs2y*~mqg{t<Y`aShlb{MFXz$$!TojdA#~
zPT)c@@EXudbWG*wM_(XBW(^`zi)v=PB|_t}IF}dU{G${hPJO5-kMqqnKE^RnRzz13
zXOA{rdj@Cl@^S}TCu1xJPmQA+owo3HJg=v;aTElLo><1kVH<=Cn{;_kN}OG-1b}%P
zG4EB(C<I~=bEcIE*`oVLZ;;|{_S{thV!ST!fOCK7_bak#LDmJsp;=PJsyoNl<5R3T
zww~-UvGr`(vs`NK`8_T#Cc_WPFxy^Wc&^1kKxc3GKk@gJ^E`p=5YS2V97^uqPB1yO
zd<V{OUedMf?<DgoW!|wuSc3IHo3OtNnbXUh?GOYm28Xcd4ay`jx*ljE=2+lGmLN@^
z#+7K7>*Hrhj+Jl=CEN-Lw@|_@iKZ>I&!%=KevMe^R%@l3Bjz7XQc;8DTH>qv2bj2^
zhzTZICfYwCHPQ*J1iSRoFS4_MK(O^M;1s8i)ReakGUY}=471x(V9Ma6?eLs@XKSH4
ze4GrmocvRJ>Og#3wAjl3CACSez{)}Hqr38g2V4F@t|9zX3V%@%NhVt1zjmC|O5X#L
zt_+M&+sy;t_Z%x8wWKXj|5nK8JwVYG2HB^4Wbt+$ko+=9zVvjVluWcFYb;5=0xd6x
zNGce|`!V9FzlvxFF@CWKBNHvgUmYt#w5L13C{emb5^SBo^)|F)Yy#H5pHizhn>Y^<
z=LtnPnP_p|sW>xB>7>|;PgAy%;qCDMd=tb#{6RAs2iwH9S%$j{jq@7A@|uX>-ou<4
zBn!B`N(!P^(U792e*o%_|G?@<36xp6ku9Bkd7Te80;iaO5aT}!Ud?j}+Q}WOg^7Ua
zOh{4d3u2c?Us_xqXdI16VB>hRWRA_$GqDJoz<AC)iKDBKB=ZS<kCsg5Bjy3T^OmXJ
zdl1Hn^C*196ZdQ|`zczh<?8G^-xUdyc!n>~cv|Byc?r~KAUj^j)@zOw<smH0>Vp4p
z`)q1vE=SnQQH<qH;Cq4uK7|F)!cHc{0#n=qZz&a909NH>7@$X|xdrxm1#l>b?^=YB
zn1UtXKF|;)eqn8Pyx1k*2?*Qq`9~`18K#+WH>nC+djO^M*GabWT~8Kbcmtbx=Q~z@
zUvgQrjtYpFf2+pv9zWDe?BuT#{K`9E&z8o?C&|Nx8<E|`VhGh*vr?YF1AJReMRX1j
zn(134n;w?1nDM|f<jMTtXyG^gXLwkb6TICJn=3Cv7v^CuDfgGI7F_MbRi4L1*pKU0
zi%ZUzs^}pcd{svFvGP7`FET>dUwN#p%x_zzL=NmzZbewhqi|D-6H`3t9c-yROuDoM
zwXZwtoZ|#rhM`~@9~Se=SQc!3j_s|S7HRZTAAOuga};Di&4z*y_6u^;QL53eNo%nw
ze1fbgPE7H<Ot9s)!=xWpkk6oCdV-V|3&Z1D{UyQHCm=}MLwz771LpHJfRnGj|Gh!N
zC0lbSB&c~~8lF-)Z8u!g)=DH1apE%uo{=(Z6O^b%v!p-9`1%H0bl@2>Vs_|`PWoHu
zBFMy=g{E(^>8+Ap5v}Qm`a0D3sXoGf^_@_u>Z@Z{vqq#n<|qGYS@k8CMXy4A^qBo?
zrCL#s;ppU7OX%a&LQb$~;Y6%Z=HE)pC50nf9VpZIkzxbE6GsX`->@-*lKo|~FiCub
z{gPcClp2}UMC3GvZ4W%lCg0ZCdJu{P6Hexul-zrU6T7G&0pmO7d8ZVo6&eh7>5fha
znv%p$VlG|%9XRXu!cg)!w129}d%K$Z+-q$LXMf!O$5VJNBpa7<yi0Ra4!Rj4OzeD@
zuKu~ZND(j?c?QgdIR3Jca~YY?(9ZcBqZvzyrC+w*Px$$ZEFAw5MZnDMy9lJ=&#0(>
zN8dW7JP=(%<-R-Km;AdlzUfDQX<i$YOrtO_xycpLIN__+)P)z00Vih40uhtJE8TS%
zGuw`Y>Py;f0l3vuz<<FI=U<t^s8%+lv;^Z222%vsoNt$51HNDce(p(c1g^yJh%)QK
zID?Cu2#!qZu54QbC;h?$>q;d(RH7wh7Z~M2rIOLc_XDwzsu=5&nAzi<JG~OC_xQ#l
zEE=+r;&||&r&AwXW0D-A#8!^?DC!6GBAk?}pw;31Lp$JaKOOFkkHP&?v>P5ZL?a+>
zqyCPtT>@zN$|!x?Tl%|nsw4?N6c3}`PK)ETA{<+YqZ9goMoE-!$Z|4xG!nP`r;+}R
zd32@0*6$;o$U~JpNL1I8yo%$=xFXE^iFuJ?4nE6gq<iq#?a)lLs9c)m!X5{Bq6aSk
zgjRd8b~(I@({rhZ3$x_?n=pdd2G{L)*_{r!Bx9W+cq^Cn_4LZB2@Ici(tp_px)H><
z>cru7iUa$LL<9c>Kk-ejM*LEenJk{s26JqFsnU-D>v+YAQ3K5qG2=God6NSJ&}A7I
zDyE0hpf`c^%6;^BuGVi7z4MApLMUT^;#pPOOnKB|88;E<yUK>18hXTI@ltsN=@_r7
zw(uRAPZc*L`paS$D-n@rnld0w;XP9g^2InVR2(WS@%!7M+A;u(gvQDX$pu@vC%<7E
z*Q-L+(sRYUc=(|w8NsR1oD;iIS;DL9pno`_wmLIodIWu3LJD+>8ZCg+o|kmRaro0U
zVbF5Y5924F1i(qR;zy+C6S;0-=42KV)2s^q`i#7-iY~!xdeH~k9EU&7_v+^xLTyUh
zxSj2B@)Kef(jJ)#C9Dfg1!uI6hh^u_XitGB;X7~Y_B7x@paO@o2MZc_V!tC5-p7@_
z{b^2o0l=NfxEP2|hO>y6dG>Lua95(K3sDKTPc}r5Mc4lg0Kw<VuL6j!g=bR|P2Ht&
zF7fDc$^ksDt6gowRFp~XlA5CZ1JJ&CYPlFEOcpOt$RRvq6vGn~=GJr6P3uNScXSVR
zaDv4}@?u;3CI?(kXE{^Ai_=+7I=mwfRd|IPr7-igA_js4#D$c2h$ndWk)S7vESMV{
zc-(XEBoduP1hcLXLIp^JiWDw8<!qdQQoIY5ZJgxZ1~!IpyMbAdaJbwI@R%`8N~Rxh
z`IE)j@A0+G1|pz#&k-}nu3opt$9u|0V`-Fby|J_{+#4}}3<-1Yz7w8i{18z}6>3L&
zp|<D@fMzbZZM(TQ@sbQl_6_2rza>W1kQ`!i{R0E&1wm;5EZmQlgC~_BfTf>CbeHZK
zjb#xNcWE6=G#zyCfR4~Qv5?l^*W-=Ql!E#SwAJ;_K<LQ#$YWOxZ?p;MYi~udO)8Mu
zbDdjBwl((nD!J`&joS`b@$HG;M8N`RFCBg|vP!v}i5F<%;MV;R66gB|rni+c-lE~S
z7iABuWN@4dYuQ-u<~4-Z8dSu`H)HcJcDneI5nOxY0VfW1SofD#urSKOPOQ$LwVR?7
zYaoH+x^nm<{*-VeZI7A~ce@V*s9Cr>fE!{^A8T=D9*AzDP$zy{Bt;7`p2C(Y<<?;J
zGq&75mivdcs*p<07bD8z0V9qVtoYP7r6NocW44H?y#0>d11D61t>2UWBUFyp!ikQN
zAR95wH(OKFD)KJ!9BJ<M)67YIyhNP4oLTc1&9i*(dsN6vETn94hZE6v`)4d}S<;Lh
z7p*vi735o^mH&bbFUODh78H;=mYShr$^AwGv@#G9{f|XZ46VSD?UDA|K(-M<ik-vT
zhYResI$rP%17+nt6H+c27V~U+8Fj-$dOXL5TieLG8(R@=CO>VD39)>C#y+RpaMqO4
zTu_x=6CC@stpIT&=44d^`g!X*6d?&392s&?McnX_E6ee2U7qHth;AbBN+r&UoNva%
zZW%-c`&i&_w&^(f<t>&HS*?k}_Gqk3Iq`yC%mUP6^L7zzy%d&KAR|l{Z-#7c>KhVQ
z|6Ixam&=vi%!$Y-^Jl!NZBn$+B;FD;-Jx(IHE8K5CwAJ{e<S-_A)i%dj>~d5M~@+u
z9u|fSbLn|lv;)bnW_M)&?aSaH0X{LF=>Lev>BWMv8z2Gyu{O*0f}_StG80AbIOQAP
zP5FJR>i4+|ZI+KdKE;IB8L%r!Bi`ikV66>7jSt_;`Q9$C4F`+<r8FGb0^86)yjE^?
zN_?NcU-N<Y=y}kNnXC397&BLb0WOwtS*`MRf46bH$?3EPIsBEwrz;*%XD%Aand28q
z4QbMXnavvz$BGO=i@5cXynE6AMskQbv4G@L%H&{@jd_w&xLp_akA&WfV7k$UAGbAe
z(A}EAk?`2%)Yp~N*C*8x%k#3`@O5WE8w2q@(W{UtJJWBtb0v<h5pz+4mFWOq`a;t=
zfYn{tH4k-~50)~wMwG&nrjq!I+BM1pKi(;#h}QZ>fCBBV`G%+6Kxa93;wTjvmi6Di
zBeaI+f<y3LD~aRQHuFREjj~?>V&`N|m0K}gxkJf_>DRd}Y;Ysd+tP9Jr8I({6&fCV
zgQE4O_+G|+mR<*<j6{DfKBBXnw-`&D4ZPuj?qhkw=<>2MmlE7eKuBkfNgYcTs4%!s
zP4uv@D<qp2^O!<0uNS-%!-4pba)&sJNHd=ii2WS|^8Jlo4iL*5c~XooA5j>d19yDp
z7Vg~R!}&NqQrZ?)tk@MEy^DZA_C$0jz3D;M2TAB5?f5;di-MU`g(|%|y~`et?m8{v
z_YQd-1Pf_T@Mxn;(zj8(Jhe+dj@ru}wc`g<W4q*+f=<apc)}Lug=a(DY$Qm?N>jD2
zfl)Ez2<&=F;1wz>%6MA)MN#UbIz0GojaWX^WQ%hsd&HhfuMikXbc{wOUhq6dvd9`=
z++ZK%q~7r2k+7TB848hADW(4OrPExSC%NCuEFb`b_#a<_90ejg!taaDL9emIJgXw|
zr3v^yGzHs4Dg4jZoa_)$Hkpqu7fSL12D~l&!eGl|=st=5`e4hbA-owMY~9NnYIBo$
z$t}JIkFQAJu?Of<)3zmcO~os6qqFGLMytKSl||P8j;_NGUk`EIotD<VMAJS;&Er8<
zI8!U6e=LOH__koo*kcaPx8?UI@CY5=4U25<_Q`;;pBTq=O5@@{52k%iJS1H1FqgTD
zya+P3k-&XllX5mY<Yq&p{pLsNVbd46Qtmg8yH2+Y(FQ1T&x+nO8)+=XLo<xTc9<{8
zqMkihPLIySeeNQxOS!Uu@?I}{Al}9DZ~vDtmVO>9I5J#IYPY5WXY?T1KSGhTr}+vT
zp|r_da+y_5H(WZ~pl(}Y_f+a;M%4KTmA?K}E3<8dlaWZ0?W=4>Isd1vP|FHWYK8RK
z%8Rx_x0&b;IWm_Dwv0fw*9r%T@d;&Dr%m}**rBVQ5X-hgnah!=>IF9&&_Q#Swsm?d
zt&h4qXhvxgmK_e)3J0_m{w|AZMXhj|i`u1p-vb5h?`6w#Mmx-WeHtZwfe?q5dMMU4
zn#xv~N&U1clJ<0k%i|{VWAtMk4qN_?4o#C^iL%iqtL#%(T4n3|nZzTu6WIhsmhO;R
zkav^0O>xPQLnD(aH8}*@y((<LCv32##jU!-OxFd{ys95*_X~WjW@qs7)2*oFWbiE7
zR(RG9OiLz)@l1_^&V!t#K>SVE<d>OnW{jMdY1%q`^)IQ1?PR@4apynT0gs<QBlp?+
zz4!q`0o+oLtT4g%V09FcBz%vNn+g$8m2J$cyOd#FoF5JiqnaJVqK0Jm0x?ug6%PQ8
zmj0XeY)nVos#qpuYR?tOGr!Ra=`E@!eM6GG`^uOXW!=!4jlPV?m?K2Jpa8Quix{qR
zNuqs>8LrtG1g%&ygG&!YCk-jbB<YmN!hskHtKH;Qvz#usoF3<LDkH5dFZf>DWXu_s
zDVo1ArK%B5cbR}kBPO_H@c!H%T_8Zg;4H%l6pi%&oq%A>x#k2Z=cWX3q}TlOUD2ew
zjBqAr6J@O-v_1x`v3UqlQ)&i>rx{`l^2)ZR-0;=^4W4wAM_$A{_@bbblqyM?{s~JI
z(Ton%xRIO>b-fnsxC3UbGKgFbeE0SXE^lNtk8}BoMxm=Q&D8IqHYp^s``4+kO<pC=
z3ESj+SF>+C>};*ZSV-INY#nXy+8&DGPOv;*gB<Q!cD7#UmHUFd!?(%!XeUmawBF2X
zXX`CqnOpN^8f=-UmRaDHS(GpHMO$V$uX|gs)XP=4l<aN28kf?&ty6IsvbS{_E@gXL
zufe5!Z|k+V4Bgur!DZOq*6Fwe_O{NzW%%CKDYzWb*;<1OcSlkpJJxie`H?Pwcqu*s
zI*x9o0)O&lZ80q=UW@6nWr*`n@8{K<zG`?Lqedz}NJ=(VhAkl^mqibvKBl`rRiB+~
z9RqF>JNfIZ85Ny61fSSy2XoP0(wRO0CRVT&Z3+8a*Bh8?SghO>XKk$dwvHn%*vB)x
zG3U7S(E)LM1N+8o#z^!wAjQ71l(|v{@EXn1^(&EnAqnqHi2#<6NY8XD{U_d&TrrFE
zR4@d}mW0`%PiH}~g6&~qTQV3M(=E22X;)Kh{~kv3D+9L<>@6?RP3wfDdmv>*n;00@
zM}WtbXr(9?64CZVqSzI}8R3W-u3RJq``VqPA#Y`?u=F5D<~U84t&tHn-N6gmY%^Bn
zTa+#kjk)tD%2(@IK$qCbUo5SE4PC{pgL5CXNOi%gWb1eqWn0l4+jL8R;2GiP8RiW<
z!wP2ai$q<Ml+KvgDP1zydZR=h711s#_Bbptz~B3uiRo6cOLLN|ihU9Rx$=i)!QcD)
zK(e(8<Wl;}t*bK2nVeXFjME+$JW25niJjsl;`1Q^K3|P*kUgNr=4XQGmWj;Yq%yQ+
zCB-+XQE9YWNod;*vrF}qi89<*PD`i+Yfz?>Ij`*@x`LFXxGzLbJ;dq>_e&pBwSGd&
zXwgLf@D+OwuWbYj&rlfi&!@>_p{C<;3OJd(ZdKd!3&?aU;E2NuI8iGJWg&9vw?z>?
zJ!4$BT92cs#HE8IrrY`-CH@bsZzWFb6m`Y+W~A>mllk}WwPfk-^&BVDE%Vd#c@d?5
zcUeJCPPa(SM8~wGp2mYOfoV*j#**p*G$W<i9n}yvVov`&u<*3gBos{S<gXLIfXduP
ze&!A4hv}A|o$m<E^!=R1<k8AgHqQ`MzCI!Bpu>`#)I$WcJl;hml=<E!x#66yH6;1+
z`_O3Ib5&RqA7bNRWy3;5gpEeqN?0|PbiADq0=O=&D<MpB(_1LCML4IhxzlHu2Tr#d
zm<(k20wsRAzakF)1JA+#nc8>=+URTzphV42OMUKck&^JaJC3=L=-*Jub$9D#lMLJ)
zv((+O1r&~$<L?nJlY%|<5NWuYsWO*bC=Ui%O;x*^!fafds*lWVZxsxFyJxy>s-v@#
zo9?AAd5GT2MPJ$3S^=;MEdze+aP!T(l^uJO2@ag2e<XTZNnWC7Z?O_FOC`eN{g6nC
znkmXpQm`j>lE#TE;HBlpCB_Cc)3i^f9%7a&9L8XJ>|Y<Nt>f8A$Sn|ZrLP4~<^?r>
zzw}JE(pP0v`o9#=Z8}D9YcM7@KcA?U3`WIti|S`@E2?kOlEvJxE**6u_}-S7eDsxJ
zjG&(#C%7@NeonM1g5INzfCPLR9hAxkQ)0TMG+QZU#+%RnH)x_#H!E3t_DPD6`*RUf
ztHouhHxsp8IffS}p-qMQDe65WVKnvr{U3`ccASZ8QSp9bA1TN=w$Keu#t|3z3~@uL
zCd`yBrSaei|6^e_?g1!-uG^?0Oqg0{VwCiSt_V|+Al09*K^Z+<$3mD)fjw-3HVb`@
z-(Ip8k)5qOC&||NsFB#oUuTVtxBekRrPQI%U>@VGC`(ciyfH7XvDowR7LvVqOUnFC
zh%nwlmM`AQu?ePW@373F+u-D4zTKWOf?mCJJs1LI#S<}8)dG_GS-G7Hf!xtBwx$$_
z`_@WTKVqg^gSf_zm{azYppm_d5)I&{63Y(;V_~|*f&-U~LX^F|Y$Cye(@~Q!Cy}A(
zE@Fue#=>-qW%pY?EX^JknMI-jFXk~chB}l`eEL$}w90R&0vc-^;1>heeM-tn+pwr9
z)1k^t-4FaQ`3|!3hMI#<Ein1ZBIZ)d1XSS^oF(}3n!F*RkvTcz6u5`TB8p7pcb7`d
zoj>yC_)@w9V+1OcAj&r<X$5x%SBZCGgHxQu?gv>}dFc069s)6(U?Iqr2RNvTMAM;x
z_)w(bdvEgM?52LKJjjl3{|Ihg^mEs<O3G)>U}>HrI+RZoAb=8F+Q``bQ{PdBM3xK*
zCm?;uoA&Yrc0j|LoCm90z<Yx5-tMMD!&i6b<>v#sA*g6wc+ZAr5CPjKc9!#wSUbyG
zyt}RTZUb-dy1k9OrjC_g>>*XU)yFh9?J2=$cv(OF970(|$7T{f(i@Q`g?Z5JbR5sw
z^F$J;v=~BWA62ceEMK8Cjx#I!??dqo<V<!%c*BD|`{kI|o^_>?g~QhIS{##MS@#6m
zdv}W6Hf&^~(nIhvh+b))-jMj5&T!Y4QG77Ht|EG6@lS1FNmy>gyn2_A+Q<Z@goter
zrH2tlT2+*hQg{1dDRm!)5=#oDMV1m1loF5*qI6E4QhBhI&KdiB4<44<fg)<9@zu~H
z%es2}?j2T-n&{>6*+|IVHA(vQ#>a@BKRj1+KIHeI!3#KcOCG!d4ys@)ut{*L1ZaRk
z5-bD)tE-{Z)xn1k%l*M3?%66VDV%-oOWG<-P)eA?4x+>_Lt0A1;@74|iW~*zhVQP@
zZgHaUSf=OY!ojjCMa=$_?>=hC-+{GR#DVy1Jkq}26(RU+^B!#MeLB1+*m?v@6_BHK
z_Y9KD62gkcAVQ%$q2VOdyU9mrpG)XTbhg2S@TFsw&32<QS0Z_Lo#zl#qF0H6-XhUI
zBG{@gvZ-jSG{5|`m;e?><z0F$m&#Pw9!|l_TeKZ;#uOVb`0Pp<emfxtkZlGsI3c_-
z)NJHEuUl}<9KC@ToD}5VrlzT;k2s71KAY$3h+ylhM9kV;qs3txywbXvOE{m0nsf<g
z6n*`V!4*Z9!;D!uOqfgbtV!<GR_1%!hTzp$yI%QAGB^CCB)+?o#o0<#6Z|2Y%<8Os
zg)EJaA=VSr>7+l$F*}?a+YDwP;3U+>Sz<BE$1hQBp_zdZBJ1grU<((HRY)EzE;c8A
z^3y86BG~%JypX!}X@$JCP{?0_9j<LoDe`EZNs9=yIP7~?z@Fpc@Oc_*8kmi)gOuhi
z(836hkYSPS#OU^an;?mu<?Jsgz|g31JWd1BKFsy%Gt_L>BUj}*oKfA4Tq&3NQhR1(
zd&c)UZEGH}Ps)ub@5j&rc<C&swV<YBT@K2S5h*jXm^CHN(s`wJmUAp)nv7iqA6v7F
z%RtsR+T<=4irhxy$Ik3fcLw=@#CW8Y&w4ei5?6zv6~Ps}MHkv$UqyxkyZBa<!WGEJ
zZm%$T-6%y1)uSZ3M6NSbjg<f%bC)+X=V<vztf~Z$xN|GcvHWO7mO&_u$p?1kamRz+
zv_>*D<{BX(@@2lHDEQS*45Zas7!pj!%xe}RUnsTUp|(fQuwtuuxj4I~`EZ_Y?%9o+
z_Q|&Abat(CtiwewAc{Vj;|U@;0feP~9x4Lw=>NPE#e7}kNh`xT8(qrlIHdu0yU`im
z4Ul8|QDHb=l+DazSK>({=~8l}aB|UMLPmT%X9l%tuOn&R3F%MzNaM9T3T0SAoP>A8
z@Egj4C{|7r9`3IA^{V+YIKn0;QjN%H%q@Qq^;>tPdt;!fVS4;7DHSl2ueJ@MXZNB7
zt(8^XyXPRV1}YYC%2cVt4~jrYEJ9$@sV`zio+ioCQt?xe=k8T)r3*VgF6{U_q6E*y
z(>%)18iB?BU*~%|jq}a(;6_eZrm`1K|9%ZVV3+5pvDr!8&M0W%c|JzK76~VQOy%=@
zWsPeh?%ZpoVuieo=elWMvy}Yvv0%%O1R3Wed!ZAqg>n`ciM~orRBFG_sSTn}rHbAP
z^}1-szM%rhd?&G!vmQqu-RmQYkuHjv$k0_jrrW92ZLg`SKj}`FxD*l@c!q_|%kTy=
zv689}ae@od`i?~S>-?@|5|X)daj`AW$&^{<>_DhyflbigDOo%fDjQc1TvcFNS4KxK
z!PBkyL`SaiLi4~_o2ib#HLV)0!%t!RP3uRe=1mJzA2A$EI;u8AF*AXAX1>6oW)}RN
zx65}tbOt#&2x(f`b!hwZ)!bV<R)YctCwAM^42+;yX2TnIc+?r`I0S`E_IWw~vr#%(
z{_t_NC7W{}(86az=q`Z;NFruniI9fRv~K-1@h2!!ffqva`$t7D0qC$AYtV}F5%?9h
z?zd4FTm)BJ81FiVMKM15{&`k~I)qr?_(j@mrH&t`xdtokaj~veQ6qM25Et(`_T`FC
zgw1@4BJnsare{<#>&U2p7di7dXKo`?WrVeJU{@>NS!{d(#OF96dLaJk!H%;}5J_|E
z(oMEj+nPp{HNRIVgBfs<yWC*iC5B8#+@-okG=jOR29LTe1b-X&gLaV9nB&UOb6!!i
zP$3Iu!CXw`Y1q@W_t?gdjpCLsO{KcgnbBB}5Bi-V{JCa`u7QWo(2HcXVJl9#8T)zw
z;EV1f{D;wQLuD{cR!f1C>O9*f)5->7ReXzX47B*}l+}<|1_t%G+dK?1SiL~hLh6I#
zR9UFX4;f_VybajRTx~OXeljcNqs`=JO|@2X%l$~prN={vy5ygsK@Y`57X=PZvubxy
z)s>p>4W2%y?TP=V<2`bM<MBLBk>L$2{xME)*5kWMPV}kM%W>Q(7ctw^UfZFGyjOaE
zk+;qQPlEnd5xrv^9!Xq`TIM_Mcva9NIMm@F`D%SI#qHE?=+Qh*sH;ItXXmlU%F~Ob
z7qji_*k3%IoUSX%(%bvAh0n-~C?d_#B4}*4b9lAWDy^rT-CC7S>}Ihu?FI9cEq0m<
z{gg&(abL-w+5m}`(r134MwOw(6TZ_!FRtuc9v?fE53l8rf#Y%CcvZco^?cT+&=^yp
zkjTQt9=snGE}(K<UEexBY8l7h&3$GY%;);+!~?#oJo&@lfO$~*h`PwrG!AsB<J+&k
z%qLa$eCB^hCaf4D!M|QpT$u)J6^;G_chBhWJnQ)T=gFrS+-U5Z=SzDt{$fFhjZa;i
z<yt84o7)v~$&ZuM%?DB3J-DMS#E%AXfYJAT23y{wW5%O3!Ip!(qxuh;N9?SO2YeWq
z;Xv}4Ldy%wBvfD?pAf*=v8<_CAc)x@6=t7XTuoZX$*k$rWcf&MBffOTz<dJY4H>`0
zajUb|sUYJ0vUy-CI{r+Iz+f!b*kFPuT1E;-V0%E4Z-2(oBrmwDRS%RI)~=y~Rk!~=
zydrYI%)r8n=tZXO?hrUuW;QgjFS>fmQYCg5@fEwViS7qkvOMhbSr?B=jzvwcbct^K
zN}o;t0)o-2>R`niJ3{em1N`iWSMBFY1Sv3PSO^_MbPh*_r_QxJ_o5x>Qx+pt9?`m1
z=S7lS8C~fnPw*vIMc25=Cu_1&z(@Pga}ie<8&?2?0UYle-;Ali%o^G<87wx)Xj-rg
zT@F)lHEpiKa}_YbLGQ8cF>Al279)p(Mr=oK8AwkSg|oNub;cvVU1+Q)ySXriUNaqw
zRRv8Z7)re+d+`-p+uvk0l~Rcw(`~XZyLhC@xDM^<{u(W<ylvJF(pYWM+SOgBJjz#N
zw68|y4wAtLOqUkX{vnPT_Kl#g5A)f3VA`Vh39{}W(_|wbua|k5;rxsro%1-_!3W=Y
zcn&HsriH?y9r$4_K~sriR8)gif3^9=qg2299R@fBu!JrvwH-7KaY+MMr`afOTe9!h
zY}@B!c<hC-jO{O{s0Fwxu(i)pmy6iNCg5%2^udBO2Q}znMBf|B5QqRHI#}h)wzcSU
zNRtv`gA*1eja)D|HlXXco$#6?y%xm*%Pf70S4o_N{Um3fnWFyPS9h^n7qoKbA~rCz
ziD6K!TC@lkx^Wc(GA~fuKnNXinA{9>xh|Je`cz0ic@l8B+d5KkN>-I!H;LikA*c8p
zJz;IU<(FUZaGy=(4dQqe`S+;nVtX-<jfOGaBTXGnHq&)3>o$swy-$}OQPwzF4Y9L9
zTV3^gV3_I`;WZG_D#a7QC~*T%g!KtDAl6juw*mW1sS?S%F?l^7Ug!%QR+x1K_%Pn0
zHl7iWLuBGXsfg*&S(Mc1Ge1&DLz&eZVo)ykSa?;Se;__`aI)<$7}TM6us$hO2VLSO
zv|*{Vk9^K^Bk%ci2(QeBXYG?jTwSfcjiorWJ5t<kBPiHB7><=~4FF!hRdfe=SX$bx
zg0Gn_o_qaFq_Nm4Ew)1$aEdQeR5Cn5r9+&s9b!Wt!rqh<|C7HG`aB*L#jK<s#wg1=
zA(&4eS1)9acSsrI;v}}6@Sg8ciKc#e@D4j`hrCBc4~h3EX749{O8ysMVrPWj!+Zk$
z0wIEB{9yVY!oxv)FioEhmM5B)*;PA63CJ3cE`fD7-0_SeUL21P`Qft+=@;C(<0s;~
zwD%@laFVqDLGcK#kGV|iW4z$QEI6E7#TV7jpwmLv#-P+=2POI1Js<9M;;#yxtXZY;
z6*1s_x{+GE6n6mUCIRvzY6mXay#nWB$tNCM&eZ7bnRGSiW+(~kIDofTHX&-vp#<~E
zzQjhY4wQoYf>G`y*g}!L<TBTzwrf_;3>UNF7y!ov1In3`asEKOS)pTkS|?||y1&u7
z1&&~o+uNtWBjCw3SvT`PWiN{8Fz?%_q`v_Vwbl;BbK9p!*I}%WmX#xD*f)=&;9-v`
zc-TTe0;z2}5brSG*Q)l>?qJI`>N=w5pl0;b_~CnptEZ^TQ03@3?Wsh4w)T$nC>f0o
zu)8CSg$Kc{hO8ksV(D=c(XKrhkGjoi4_Vdd0s9C&qoCl1^g^Ql%3LWS1|_0)n^O>g
zL!TI4BGGo1Y1A?{yGFCq>%`^`ut8y~y|6YImyTupd_&_9#ISUZ-DZib_u1p*7`EWk
zy7BVCJeBRFQdU6a1uq*>3CsUppYq6HaT^Mgq+i&iqPH-<KHIaQanh*%=QTk+`g@Z5
zsk`cwgFT>^od}bP_8}))j@Fe~=Ng?rA>TgsTJR`f%q1iJ-hJlVeDp8I1~f&PhWD-G
z)Rog~_)7DE2C~xg`XnjZ%=G?%wQ5`LOm+B~ALi%aQf`h~uxqpa*WQqZl(|~#dNk*j
zTik)@w=c%@_+tJTL>ic2kASGrG59ef{>kR3VXco)z|87*n<skfg_tQcn5+L_Q!1kG
zk4K693cGXl&8Q_>3uxrm4quv|tAG9$uT9{u(b1rF%$K01DtvZPG?=NAN34gT2ex+H
zF-#(^%;)%mTDlQ@`?O*Ozixu@kXDs5GogQ&sg@fhIaLgXkd?ksvtXg#WKfWwD(LW%
zESO-WDZNQ0>L>y7m4$@$8$p$fmVRLg`LJP~r;nf@#e=*+hy6aKig6YR5i_b_QWZPZ
zmTL2rV$cX<#`hmI5h`<?AKoIe50-%~F&l8SgB(_MNHudBqQ+f4rRBXSf$qTl?iH9A
z=bd2uJo$QfQ?_J9H|R$9)5vBOMwdtJ6$&M){PFEr#d4o{z!NWg=0VXzlz&=9$;aOL
z;kjkM7qwev2lq1Z2aIZI5zz?UCC#mYmUesv?Ga-|4lk8h`zOAEUScE^$MY8@W}ybB
zWWnL<#JMDEpRqt1?jxpKXP_cFYJ6I2h#&={$*-YS%i|Qkdl%c=;a{Ml86Fp%GYpL0
z6kW((@jLRGyBS)=Gs$k=&6;PJ*DZM+UfwO5mu22|<Y7GM<PgWjz_xH##3W{^xv{|{
z;Z|Z0M>`O&l9XC40(S(1)>_}!B+<8i(hX5*rTNJxrB~ynFMRqh4s+Gwt9`{Yi*Sl1
zRoB7z3|D;k6fcrN4749JB0Sp{{nn@1WxHU6d(1^@KcGCuMRkFq0>}pe=O{tpgHBk<
z1uZ$6Wr6Ci2R^HMj#BKh=$+_K(p7k>6E@%$Fq`uYC8bLY;tqz7s2VYU)`cs#xv%!J
z*z3LpLe@(*1xi+oir$4rj6R4m+8*z*J;uR+VE}%ce&%{nzRLo7GAplR<wpxEXTY4l
zGIR%~e)9#XFGlAfVbhYSDK|(aLN@E$3MP<)`wPB?$5R9klKOW&>caq<MRX0+b}nMp
zDq1(Nvp#YP6@&Mkp+Jucg#?0}&%dY*q;o$hGgXnu!3E3RP-)fng5m8URJ3wc)6Ids
ztz?gpr)pN%`xWg*{oe(3BD4;Eo>woB+{LtqnD!N7YRO}|(q&pBI=<8pUNTxqeY~N0
zw5b8p0l*s!EtlQI{ij0Q<MOx{X}ei2<%NmFT}#|+{kZ4*a0e{zUgGA<MpXl|SZP1?
z={Ee+iXGj^Hcr8;+(pwzG@mI%(<*4Bcig8fbXX)<avdYCtXCpcgwz;D5Bgo1x|eLk
z{8){FD-16&?5jgKCIde<zh1?2%;;Vv2RP&FmF=7b9SjNv7ajd=DY~E|bXm~B3$QR2
z;~1<|<J6W9EndoRQ?5RVfWuu(#mJntcITpc1l5>3lodt<7lOO|KAP<kB9s56c^Iz;
z=-kl$Jv8T_+j=I0Ws%B9un`mClgH+dItf4+pzqX>(!W*>*kePnkvKfGxUgXgO#TTN
zu-BE<<O2b;RIIS2UMCM~^0hO><PY0YU|RT=CLN}nc-Xc253%uzR*+O#OfPIld8E3;
z+^D5ML|+-k9_VB)MY}$-;5D|{?faaz@kcz*+YkPj+?9N#t?Wd!V?6gl;`g7tJem98
z?Oh)poy_g(KZzf5eWYaHQLh!eZ|u7ukYAr4%m|#1!Ta`Hb253dCBOTLP<^xH*U6s;
zpPQBqKKHZaFJ2^rB?pdrkGuq*3+Ec(2>rZ|*xvltiyV>Tj9sHx<gX7e=-`HxG8aeW
zcp)|=cn*AI0dw*RS%i<>V)tFJMZ5xy-=_=j_vsEV2gBzF^VXimyYHZ9%z(v{LYSx2
zR|)0YyI`O_e1V!~_u%v1t}D}dlXa6Az%cLVk}<5?lxdlQQE$$5t_9J2tP5bk+ewvh
z#R1Fjypv(W&KcY@xAZagD-*UROdQVvV^t!+w_acYf_Geq;1!*VT`ho~<sXEAt)CR^
zLEgbgv9%<}S^6`GiTb(LaXwc{@JVKzA67CMEIG)%zW75(aR_utWw1EQL&z+J>0dur
zN#Z}+&R|C^oRT1(1|2(dQc*u9IXiejY@^^giTC)Hj$Xs?7fsk+FspcXx+MrwI9EUE
z`Z#s1-|ohzS=%CA8?uOeFWJ4O;M>TFo)WA2{{!K3?h@N6B)rNcoXA3nhg~-?Cx5_+
zVAqDSCx-<t33mlso}~x~#&ZnD-|3gGkF|o0EWjW$*utnqJj)()Is?Z&l}`k))rz?Q
zFPICgFgG4TI^y9-v>L9-ew*P<CNiY%g8zd*?2be~g<MmuNQgW((IOsstsusE<`s~B
zkE#tjJbP4aAc8lC0KjWa@kP%VPAKfbI}cq3J|Vd9bO#)A2jj-zmky(z8zQbDWCLc@
zKcI)*s)pV1(VgX#m!{(B;!@Q`ejD93i;f1;#|uU{zQpZF5vSMe_(;WR>TzNiConz4
zfYB4ZnBuS3yf(Urye%Cx@^BWGq!C#S6t?SnC`T-qwi~JxE1_*Y7vf=MYc#U9KF3_5
zn-W~{z_Gnx3)e%yK;s;po<0K|paEgRouR4NXhi4N$;+?*E*WkB;%+|USyLLgbma_|
z?7S7PFTswG;g%oc;+YG*B3<;5GrM#PL#tzq&e@?xBCc2yy9Gn(6<R5CiU>FpNV((*
zF44DV3aUO6bthm@!Ay8=_*$*}kX9yW_v%hl-rNGeQqcrYz?`Ej<(oBtaw$BVN8L`n
zWcM;GU*j&~y0M7Vt1t$`t*eRjyP`Rz|Gc7?T2t~bT~ju(EN9pwRzyR%L^sj^&O;kW
z=~);&ZT?Ele~$S_*?jI7&SF9Ng(hHm)=}e54og;u)9nmR0dw@@t_FUk8sL$`3eU+4
z9^gcH1m<ROKawhzeMzAcn&JvgZAi;ZP~rT?XwVHR@XpU(j8eVs1PX7}q@8*8z}Joy
zDiKpz9w5Q8iT067^Q3NYsBK_+$6%VXl-q2~<lm|)I0pj;0%QOTVuNmqqOpeP&TQaU
zyzRJM)2z+weg{Sr+&~Wyz7Ovy?Zw-Fp@b?xx`J+PG$0~ift#;afG}8}#;X-*+4j{6
z8ZG@^77i*i<E0QE;KynvidW!HxA0j7kIQK}+*8QS3c20EF5IA^lx=w5atu5$sW@H(
zi#u37p4#lE9lZo?`z-4JQTP4vQB+son-E~ZXriVzDr&6MqGH8LEefqsSw#yP!5~(&
z^eJjeu~J9`E5CHJn(ew3TjGONTCr&9Q>?TFMN8U%JSHlwLDQOO(5R`-x~WD@C2gsB
zzu$B3ow>6+*&uJ<Ki*IBnVq>m&N=t|y666wJFlUIQiK|%i|llZh*E7M6Zokpbdn0m
z)e4F5KXoV+h!85n(H-z4oX@J5?(FUL({XVo9W5>r(d;WMI*Mw4$xI=4w_8kT8E1-3
z;ma{lYpA$f%V(Xn!_fbtTjx0%#lES!iOM@5Vwr^kLbGQcNS(se^cjj!aU|rN@g*wR
zH6pSXAA3eB-_F&1iF{zx#Yjh@l?&6{<}wdoN(eg_Dit-(Z<GkN7j_{_7V61)T={u`
z#g5k5YSU?h<#q%rrSWw6Y(`ARb`MibcL$IT%z|^bD8duRdT)|5v@i+P%eWbiK8<&*
zkmV)tQEm1${uU;qPa};sP7xIw^1ifEjvl3^V<;|1jz$}C*h@E}c!p5!{=r3X-H5js
zmVHgO>A;A3$kc8uKOroWds%TqGZcc4dprckOC2l_gW+?bqSAu$xxy&3r?Dr^GfkwO
z){5vIsAC{*R1igBUD2o&7qO|sR9s=Ca;SJ4tnm~-9Rh!Q@hK0wAC(||A|^$oV!INj
zz*M`3JfyF@=bC`U5ZA3bZP1qZZVo&Pxy<{Nj4~jWXF1YHOe>6^%dd~6?h#!rOiU?E
z%mUkb67W8F@!-Y93(tCSVZmA37tIqEm5@cq_dIiPnvdMzg<tVo_;p!wucD51)!C|s
z#YMGiwRQN|oVr6&Gud1en?v3KiaO|yJp(sbLaW4~JTQWN7phhj@NPaX&bKd82B~`y
zBc$OTMKy@uw7{iZK1yH+-rx>~B}M5yu~pS=p8k3y^WdT_uJFk%wOYOPn^ql5p)*x2
zHMj=E>Xe;YfX7|0C|-|qf+`5U>Ts!s3-GGHbZevRyej7n|6U(G`~4<Z!j7g&1y{2!
z)VhK#KJX}WC}-~Vfy8iw9%ruHl%Sj8hiBM(ec!-Ub4piQ-PTAC8k;ND1u*EO!qFRw
z@s4A0XvLENX#7U%Zw9-O#lO`%;V6@yv`RL%mPvW#|6en66R?3E=hJ2lsIcmGig)S-
z0?lV^Y1I+JSBNvh-el?`>0zhV>%6GebjWWxH+HwAhn>%<wHKrtT5Aoht`JYc4pkF3
zhMl;Aq=X>wN_3cO3;rBchxrU@Jfo2i$8Z7rL<rdkbPPm-;JvQ0tB%K9fmCXpD7z4?
zcPBN9p|By++FsMtbeR&|Zq+93Y_N$82GpPWzE%jm5$M8*775@Kn%D}ilaEpCbr8p$
zk;A>qkTK4NQ#TYnKT}XwQL>W5iNn1}Y1+R8d|C~BBzS65LPZ_8YwaY*03pI9YbF9(
zmW;fI5iG>k<^1NK0>;>Yo>ssJ01;Ua3q%!AyfyY7^zYg;KBXr?!sojKs=;tv5{N@h
zp$U$UR9n;zGaJdz&U2A4FrlT1)86+FO|@8#iTgfFvsgYtWGt5AhLvTC0y~l|O<zf^
z(b_zR@!iFU^042&0FA#)g?aS8@EH^a`tcGBJ}n76r--m6Fw+eE5Nqij;Mn-&Y=Rbo
z!*M|OJlFD+s~>z@4qv6}4%HTpPSXdXLzg~cVrB2b6L48Plpow=ykK(J>GY@=pgYaI
z)lfbLL`LzK8tC1ox3n^cm`w4FX49B6!X=Yq2gfC0@fS!3NmvX~JIWehM-D$t%3lc@
z6fC|Bi35+h{_WDz<48+Ir@9$J-C}v4u=A37(sV-Q-HKPKicDb?eX^3G6o8PBQfj5B
z$fH(OF$NE<fg+2}T%^Wu+GwkfY#LgK84NXc>it<U?#17w)kkhwrD`*sVSl+$FE(yy
zT*s=6Uk_c!ib9KQNaS03%%e064Phw_5z9XR!jXWP)-YKtJ<f%8goXx^v5}aI5%68<
z;&mko2T~=*^icu0hXH?8IpO|D!5t9f4_uI?evmG$07VJGxal_yCY_2SPi$|Bb{pnC
zuvq3?GRimM%O;lhwaTB032Ylazx=8^nV=tD<ExnMV0f%&7r#^RZiRDJr%(k0<J_sw
zNqzGxuK%Er*s@>xS{48q!=EmEn1D0*uf1j<GbXkj)5vVV8#4jRKv{iDf#imrRR&zI
zVRtDJ6;{Z{xSj82XN#)m(>as)9tVepQ2^B8NKb)8jn-PcE_ARegi&%gO66Z?FRRT5
zi@Ng=kuWI1a4-L)7Jds?yM25HQ_wu8ED{jjC4}I@i0dIVm@5KQ#3vG8V>D2VQT4mm
z(Jl07Z74-6NHJmeIyWlVe9^u!KacLW7o8(qBPRFiA|I|?_F<^H4A=1DqtNGk80{SL
zByAM$B)<`FQRUMYAb&)S9(g&(WJ642uiS?tYq(-foR_N-7~W_A))E+2uf_|3t<oK|
zSUn|=-fk4`^Q>CU=)E){cA;;{Di8MoRVeVL57h<#gn~HA!ND03o1~7gc7f_4z}j~p
zn0H*T51>fV<5#~U6t_74JWB+P3DC2is`)B}_6|k?5En3`=Wdzq{NijW0P8=Mx%lQ2
z7_Jt<NVN0}=pwo?r=^8^E()a8X1pHfn|_jYkz)bM0Zvfo;P$QS&cg3)=!4a1HokR*
z@I(v&t~Or-%eEuok)wIk<&0JBHayY@zXAqfi3KNvD8<_qSgMpQRAjwF3PIL83;!ru
zX$2&U!4XU2L~=&yX2@)`yl&T<*WxcFgI-f`w~9o-06G(d*HlrhMO##!BIE;Pe*pgn
zY4kcH6?kLSV`OxXNC6TLJEu)BqSQxUA{@i&W3+L;>{4@3tioBLIx?CpHhHR^VgWt+
zb|q)kHDM|U#pV1le*Z#cLC8u=ndv}7NK=n<zor&`0@&nS3zc!Tn~^Vcp2(H{>QZc`
zL^-}^DAl`O7OM4HiG)cel8_~1J(Cx9UQtnyX}g--RgnrpYq$kC3AlwqnY&jF+rWl7
zO2bvdRLmos*kCw8&k*g*2N3Bu+gRzhb|q_G5Jrp%1=ATVQVvk<ch}Zfh9M5joYCBd
zL}Y_-Y@<kMqw__Ba+4%%a85F6xH-CPbErl>M^bzc@SkDfPyLbO6v}vmbGxaqRT2uF
zv(MB*$Arpy2}?)e8eV~;<BKz0+WPd#$QyyJ#@yn(9`E(i>8!_&mSx2wYYy>J1r`ym
zcP>@y6F3$;5!q(GWh`_~Ae{-NbHd!zXAPZ&&d<JRbP*c<AXNB4r7jzt3zZo0{cd&`
z4~D9bf*+R>P>DjQ#71X#n_ndwSw9co$&G9j555tBcb)VD%de5fVqQ6;u@EMXy3a^t
zD9fbZX+QsFybU-@1n1QmICrMv^rd7M{23fWqiMkHiX&`5bXln=G`LynLOMJHQgiw|
z;qN3AGBB!K80cFAU_Aelp98y$&TVjhqxh#qQB+&b6${F0qqA2*<u=^P7BGvxd17RJ
z&7|nE^;jX2)0?-+b)$1b28LFFvCXMb>l`wGNnMUrbq^HTw^e!m%^LK=>v6a^mfrZN
zdkhj%`6VTNqW!E_f&ez=wYYRtIB);O-_ABo#e3F*K<ZCuVWM(<0$<dI#?Fo7fa=I5
zs4mJ@IFG85dSi9X7$jDSX1=dAkgVC}{6qtUOhc(<0ubu70TaO(sq;?yvF+adWw16V
z1{TaRNbFSYLCv$QmOW+NTTs~Ij=UDU4cLOOh5h5t{?=lF9Sr({hZN^Wxa`CsB2w4l
z))N`^9TYJB1ukh5S$~L<A3acIhkPo6ZsVtFwpVlaZuO*Oya2|KsN9-}xH6qCWF6}z
zDiXkr&CZz_B&fG)HaI2Psuj1#*$9dR!2sgxQOg6_;`_pQr9ukeYxXJvCqIQxT6|DI
zSA6E)6<@5?&+{H>oKi|vONq#0^Yn}=s$1@G#wqg(VEVnPy%|hDSrM(7K1w%%zQ+q^
zI9On4UM$}afU4qjeqp7%KM=k{chhs}aF04e+M{|iYCAXcesP>)mfC%blzAh}Skwl_
zEeHpJNZL;0FyHP3yflSe)oWH10?%*0VBtARRq|r%`MPP1`8vd@LJ4#wR!mDit1m@>
zwazl>DbcU&RIB|3@GKy{>fgk5fx;y|ZfDh}4@T05r>hn*{(TIw9Y0^b-l<S%@kxs4
zvPMAPu6$or8LNa86a;!;PAW<pM>+Oz&BCTe=W5KNV^Cv81dYg-{-hBh!*y%WQQ?Jh
z*im!UIKo??NI>87Bu`|z<3vI%h+TdNR`5GH&T8b43xl`MydYq)4F_er*XXXI>TCiz
zMYki;n4kJ9M9%?OqaO6Vvs>4LuZA7rjf0u2(x-(PX)H+nhE+gPBfdgMRF9h~tuju;
zXsrOdAr`ROcDGtMg?$Mjz9Q1dt&ym<(o}21NT(aSL(~@%E2@6Lns>N0^W<bDyKNVk
znjLJLY1%JXt-`IApBkCbv?5cjvz<*VNX{MIw`bJos;61;({9Cr6xZzR2L7c*^Q3E!
zuVN=FzIvKuMk9@3`JkoU#I>fPBTeL&k-^Y^vD(kwYI*6oN+%@q2uRZTzRsi}H98Y}
z1cR#~>G4{1Zc!OhZ#?Tw_tl%NvpMc-Tm@EbRl)mK+&+d;#MYwQZe-*JV;^bgao-_E
z`02eYaMb7Z-~y3m2_1@l#cldn)pi{ACJSfD3bpLZ{fIKk2J8xFom!-zp<<cEj3oa`
zmlNq#3slf}0UPEwTziwVaOFg?h!zl@Jw@=~i;9w4z+75th4X-FvCarfH3T%sx!sq8
zIZUM}$XV)#hOd(WSBX@*%&WvkVrU=Tf%&B{7KCT2ELE7BGEo3AYj^VE!%!^mSt!&D
z6ze}(NR@d3y>R6Y6X{p!OdnQD0Pdgxuwd+y@~S0-T}eqcpDJKf2zwnA86$~9SEzlr
zg;hxwxz;XnK8gSgPOB|?93yEc8XEfMNt$hu4<zpp&9tMH*dP!@xyZtxP$Y-bz^YGn
zlcJ4ixx7VNwU+q)u4*ZgxI_&#`XE`s1x+~v9Mi)>{}U`6wuyUKL=EC_OcuU_3eSR-
zA<7Dl&?0xdB3F*iLIH>j1qw9H*DIk(v@Cl!qK!rerrKFJ=Zf>ps82<eX5k(IEf)An
z6vfn098JwKvVvQzKZ=VK={Q^^FOD{1vZ)6{ZDD77TG*MP#~Xw6xWK2!+^QrH@{K^U
z^ternL}e&FRx0^>Uk;f9y%T8by&R^=IbSduQCgHJxD4vJV9dbkhyjAuJ3UH#0ZoCP
z6`AvPcNn>089*?;q38z(Xop<fqsr*o+$#r&eks#b{ZhUJ8|kFKv(>;z`BsfUqyzA%
zYovUgodw})DPzP1$<l^}9_kHO<snmSGa*4rruqf!QBH|ENI64@n1w+L_1SK{&i9QG
ztHoEYrT{@guTLo%s44gr&ncY%!LoA2Qs67@$z84$sF!i!OfdSpQJ_FEkx%u6+d=9S
zbtfFIN!jpN9g;<v395{eF&WQv${1V6?>tfJq=hcYQyYBJpXMt>04tL;Y@y!Gro$tp
zWu!}aZPlU?iUPq$%xX&y=v=N!DcyV1ENX~D`?G)9K>_A2AXOP)bmc;6<iozoYy6ez
zy|FqxU!`Wq=_xHIy~y~+7->0aRqMn`PKN79h5os6vG{IrN%2?7K(+1tw{01KtKc;o
z^F_rIEd!mdWf1<XEd%C>1M5wf7y-PY<{ZU+iU0_W@1Bd;DoaIXNHM$AxOz@Tnk|pi
zCB4i`-9j<6r_k(xbPvWWW>0b&&#~e<d0}Wd=3K<ePs4G=Hx%YY;rlSF%{Ss0q^}yS
z+UoC{9~aAkg=2qEu{d{tEQ#LG3y@w9ez%mu*-^bUSVM+r*;y2`gBz*1f$7<id|`|o
zO!_)$dHU-pi5koF6leu9t%|!9IbgQVA18LMI+#hPRUctLo?{9fWRSr3Xx$!@h>TL-
zAeL!HtaKvclNSHv1k>Ww>(r)*lNY_A8{r3Hw9uro>UY)M*^#d5HxV>|R^txUVJ05A
zj`N^tXHl${%%D$l6u-V)Q^Te;=H>BaT;80-5DB~E!4K%Tn#L?~j#I`Py`eNOeH?lk
ziT!(U3TpD=y!bTGbQmU;KpzWul;Py*?$GjKoTgdvETE>p;BN=1M{aj$#oMY9I_Hsm
zF1qV*GoNj|0Kyx{tZEm#?L$?AJS9b@&hKIV`$|4R`6Wfj*YdOTCpe$Kg6qE>(8Flo
znbn0~{vlXZU71?Ls0Kb4*s+hl!<jWp1ml~xyi>}U5?!hUUJH<yPoQdr^UiessAx*f
zkq`(Sc9*aj>$+_~WKeVw#os{*oS+YdI@S{?q=bIq2(wi<teMqQow%qM$a%`~v-(NE
z=0V>(oCgAcvMMW~7$=lFoRbXc(18|)&m0x2tS`*e3W-?&@3c`eNjTrb>hCBV((y`l
zv9)eG_8*i<b%GUdm)G*NuGw2Pfin5BQuw?G=CROBf%h4OGa6}yGiZUEY2~Q}x0OIQ
z@M2OL`iYYGUKs2D`!j;TmZ{N+In3WPaDFZG8v^qStGL<7xmiseYh5gL@+)Pp0QCYx
zMHp<4Q?6;XH^qKV2$byS4f|kw^4TuDvpUQ<Hv=x;sDbI(aP=!CN*T1fIm3gy*oMnE
z6#iG>b8t%s>HJ%*d$_b;kd31j&2be@<2cj9akw8xH~~q(RTy08+~*B(9?L-U+KjBG
z9FrT(MwKnv1Mop;hB}vKpjncQ<}oxdM{6R3qdC)Y)cT9dv_rGeTpEDpERSigs_Y!C
zsbbIMEYHC7^XXZ9`zw%VHps$MJvb(ssZ)}H>C4%eZpn>l<lvb05YzvtwHo1`Y}a&l
zUzXLXq5xc2+lEDp!TdyJ8~zn1#);AuCK$J7YX>UMoB>U&x|0MPBU(~s?_Vr+rYRb@
zBw0RI!A*p=cbdq1j5AgWpa;OgBq-1+H<QFucP1);zbg;EQhI7UkCjeT%_zw3MF1X(
zGgd>}9j^WJ#1z>KtY0Dej3l7%RrCGIsos65NVYEW3T9qj(b{I80pqNxAmdu-<{pBZ
z(l73G9;-Bh@9Vb0bGJC(JwsAffjQoU$cSUS)mG;cfrPjqT=iQ(qEnuvD`~`d|NLlR
z!yq9X&v%FYh}n1s6Lv3^;RPJ-b8X3M%)=q%`7GJZITXy8xUZm177v`hn3HU(Yrrm<
zaexaAMx=E-(>X6gIafHJb~E5pkP*g4tw=XwO-3{eeMjT)bvN{#7@0@*P0BML%671?
zq#t3!@TZ54!fqLLDuD?%5yYu))rYXgsU|gkyF)0^TT!vgNj)15Gz~2y6rcfxcoA?k
zo}5Qz0@mnB={goUD-vF=J>}^DtqN8=CBU6)wo_>I^ng-P^+qxJm#arfp1r$G^-s|D
zuyd)(HB28v5%@L)X1&<<q$0{M@KUhTG{vRr2t}0z8*!$JK76mtDh8D*xM1m7vgYi*
z9Mx5oVmoH5{EU~QIvtEfDPm^@e*Hv6k8+7(yAbc<Ws0K?$IENPSm^u~DCyq%@)v84
zUJDs_Mf;XjkHKZd@Mz!C>d&Q5jrJ|af_C4EniF*W^ijAu7J$-+;^s5F3FGEO++a9U
zz>{RK<+9Lu5Cn+!nMmAPl*Wh~S|Tcp0eUe+CZR1ix=b2l<_vx<`rm_VD19b3A#xW7
ze2~l&HHt3d@M>U@cGwZX_i#|}5DsL}aJqw@#f?4`CmE71V*wd`pDsm#rRcHA`M9|7
zpHxFLUnFo8;R7Nlp%EzC^EVG15yHPI7{<T@ZGU439htGgAAMT0r)E+{5lk&&qDB=g
zu5kXS2mm6Sl?7@&Smgy+2$v&?IavVHUHn5k5CdCterX#Fl}QNT!b$(<^NB$s_Ujkm
zSzZ+Z2=XUcn2+?N3^^eHNSRX$=ejM(d|y+H0lef#6Y?pu(enx_oa;qWVQnc;0D#83
zelXZVEOBF4cSP0FQaIbos>-2DRgdE090TzZbqONoUe3#*&M2H?rFmW=L{pa}PbOB(
zp)ArovZe5*BdYEv;JFI$HUi#xq`OVOqEs2FBFG(5bFf{gPP~&GGn}RY%?mkaHi-OG
zQ)LwGsRE9%1D#-Gse$Ix6rmc~Y8r^;Fek3PCvDa5gU|u8qr=#MujtDV5gYD$d^?Wr
zIl^b`fdCu>pnH#uI!%W)d{3J*)6~cGCSOTD4!Rq?wh&{^zT>&Y7xRYU_>0(RhEZ?f
z-nJ9)CNUDWzxYnPWkef{{3@Y-u*zwFWo%lrDl=j!lg1+gpsR!hog-uvp99$+A1O{u
zgF0d{yQ}D-9WQo%w7smlAim@D#`sh5zhEYURP}QDMM^x<^5Q$HM9b+f#M?(~k56kG
z@t1fF!i+X7GvoE!tF956KM7ht&>*ya!g8RE>bIzMTS31ZxP}=3oFt3?HW_kuI;S2c
zTDIrvo;{JC_IF=P?P>eoIqq%E_&t%%J&`s^9^>8DjKY2UUtjCo)ArdA76D;fLs2Xp
zMsj)xs%slm$~G7cNB#$C=p+qoHVq6g=qY72_mHh+xMei5FK_p?v|t=Ag+&OnmyS-u
zowLyu5w#o?aS-Gjv$dR+Phe$4iCBIqTE8PNuMrjEl`tQs#9p`=%{AbHaKobl_YK62
zH_ySj_e^;x=%~cBaC}-P-(Q+W1qD7Fq|<fKw9eQw20spS!YT16bahwJ#`e73X;g?`
z-G!9s>v{2J6py|hia#6QJz{(8nd%py+tHn)lmS^^^unoq;i!{$Jg%TenDaM7i1eOW
zd`M$5k4=m=_D5gnKR)6dk9%Q-=8xNOfQEOHQ?yjqrB=DhFu%C{jRNh8ScuU#y91p>
zTbaOjL?W%SdDA`O3Li5fC-ecgtiz7OeEbzI%diSL>c|n9tnA_Ub$B2IHnYLQ?IP3U
zEC|1WkBB%U*pyD3QJ}t{gXMHnX(vuhN=(}sZywPCS&fKdw2-=m!O+TOt)c2K!5!e_
z{za#uX0)@MD|3SDX?(+{4dp+Ld}|Nw-nM%cGR?`I6SS8=kB0`;MfR=4*$X!xRP_7E
zzJo)+k}lw_wk8(AlKehw5|cuIU?G%3A>2wKa*&#(<Kvr0p?dGV@uzS76QRZ5$DX9-
zemJz|_{-^`k{8_>wmcQ<0!1%S^oCIT52iM%XVzw(uQo;tH`9QCFZ!pDzc^{XS0hSu
z^F*?uAdZl$vM_mZL3~<a;xO#Y(QjAPbeeNu)l`s#(qsC>QJIhqt1NgauNbe(fyK}^
z2HjN-I$nIbPfco~faV+XWcZ1_^$LpWk8kbfHh)x)$0mb2>=k0=a>I|-;>Oy$(Ij7s
zgsa1+Kv+h7W~VV8n}rAc0gbA?BoTukd>oh6@nH?Zbxy|xeONpuL3RVL*r{<Dcalj`
zqMi`>>XAG)mCGv(>LFP%T73nCfet=e!pfL@XN$J*UZePhpe~L!kesr`hp4ZGsL!RO
z&rb-IfPl!N!nx~tO%6tm_{b%%p_=0oiU*33#U*59ub$i7fMzSq2(+Yi#Ddnbs&k48
z9~E09C_zi7BF9Prhv!I&TqPdHhd<>3pN!?NM8$glO<nA(QkX!@H(cC`HKW&!eVBs`
zFnKNt^lwoTAT9ESMv4cD7d<90FwQ8dy$?d;fCGb!rA4(n@RXAGMKJF862=`xF?!i`
zWjTRjOe~+Ci5I6Z!5LaNDtBr5NKCwbK1fQ`SMjQAt6%88`o>E<KmEORV{*c3Upqmd
z$W=p0N7jwbS!vH&L7E%&Dp!*WuH*YOC*$+CM1>db>&Z=;q?;rpGaJg6zSLJUzvdjb
z*g!P}9)in!w<Lpo!AEUYYI_sjLcxbrMXN%86eZ2n^RfH9WKyHm|9^TVSzdjzCQ3RF
z(oyRbGiTh|T?n%hW1riH#?jd4$PEn>H^$hzPH)85U73Sd5Mvv7qpp}dimkLB$HikC
z@%VJ?23-HQDOQUg=td|h2~9C>j^lGvY=V1Nr|<CXcidqfJ|4RhH%+lsZjnvy-DZ84
ztPi85zkA@*!^2xY4S?~N;;+WHfA~;BfFzgX#Ty7s4O{t@PUr?-rNSrZV8{Ji*aqiw
z#|w*6M`L=jzf)ITkQd*QUA40*wp63WIgMpWd8$YVk}I6ckp*v77yB-55|WqKq$tpg
zs+hpz9h0#oC{O`U#2>sqxP>jfV!Cr2-p)XLtOmS7<_wR_m1T;|>Q(ePWGTjD6JzAt
z;v=iJVw6?IjdE4<QKhN_7w4)%lEDJ7%tSqJVErVn?mT=!iO-7k_!3whAB}^pCxI%7
z3!$oLlER8lDUQlxX}m9(zp1Tod%=7Xj?Q$(Dwk~YDgJ)m_IQ#E&&8=c#VLG0{O`MR
zaBAjpic=TgH6W)B_jBrWn1gC1_dWezb83rlYQdnK`T<r$a&jvFqil_OS}A5OKIJPu
z&7AK15sRY(YSibCRebskUcie!LYkolLb_Zr^o?y5i3BR!Xg>?z9pSMse*hMWfa6mN
z67|%4qhH}fpt@x+G1@>{LN#*|Vm26bT&MsfD;#4ErDyF}q)p*um%4p4g$hs?eS|8G
z54kVFk2o0W8;+_FfNnxA-;wJ0m!UiAl%h+=2kw>H`dmzkFXgyI;SF<Tri-q~Me*5w
zihlyn=2A>TlYuTNb+MqLzeeCyfE`T;X7;w_i3FQstC3Dmn?4O;3honAN|KjB%Dm@J
z1u1|ULyW}pqLKvnV1b+{X^Xd|PDs#c=Wv0SeJCmwkF6mx?E;NbZId+Se7n)%mk-5}
zFm_W4W{FR}5GtOm>{Afm-NON`o;A%}{1CQLJeXV|4M+f6_0S}yD(R@c1fQ+((h5|X
zm4Z%gf)J+bsn13>N`Q0+Smy;u|Ba_qizF?tK3M`J#!QKN)=!=X&<YUS8FjFCDxRNO
z#{w~x!s)9DXVu>{i$dtS;`If%Ce#t{%E9J|fS4T5k8TggB{e;JAS~^n_M_5Y@uT>T
zLa}EpQE1=|q%A%?c?G1efj5QYl8SIg6f9VmQ>Yg#bM4Nrem`60+DYZ`D%zflYS$qs
zH5$?gTnW*gK{ezO*IYzHZp2E||34bScKS6$r6>*gPI@2>St~*ulAPfQ@u_fJQUf$Z
zV=)?HqnN5t_%uX0++oR?9`L8baY;2A66}JS&`agikcsc<2JIC2(tmgzezbw9GBV?+
zB`yIUzBCbIvKg8E9Sck{P-HY1ZIGC-Mk1uC@DDnWyGG55r>4VfE!Q{0qfPm{WJwHG
z38f>L<fwc*l+!vL*L$OfC?94~YuqC}>qMb(;ZHpT0ieF3L0K-5;07>_W@#U<p(Upz
zV!TmU79FFWe8kK0tN>2N$h@<pN!4HsMhk46^FpIA&I_ZBsqI4Uewtd9-_#27|9>(y
zw$pEFDn*&v5J&6P|D`k5Sd6LJC|+0F7Ja6+AI>;%?2?*|{?*qt|G(_*zZe~)xBsSb
zRP!<T)Ryv(j6fbAoQW~pj8UpxWvXM({&@e#sJVg4$oU+W+}?><Pc;Nh{c8C@BxpnJ
z)cb~G3p^4s#}efeuo5W+7K_Vx*mD`D94_)t9fziBGEll=GQI*Ulwb*sVQ@7bqS8s`
z4PduRSfYW~(2_$FGW^Bt?Zg;URtVMx59<~+t)KeEZN$0}jZbov#j=p6LaA6PjB!~g
zaGv+z+@RrnL*NX=M6EBfV2bc)4tdR$FO1>u$9)>)nlv<(Niw&<oBl0qxijTW;gXC?
z@tW2$1VtD^zvB_ob*L0bwcV<+!biAH`5B$nz$`P!$PsRQuLq!{9A-hJT(BifXE{(|
zp}Iz+nr@*|JtjZCB4e3&8+?I^)69V4VC4~$75o?yW?^#B_A2`^-3HZL_PBt1q7E3!
z{@DONCZUlhEBfN3AV1y)EVxzEJ%T8>N38)OODaUt0?1wxAjDdc65R8wCFmK>PQ76|
z)+Tk??dCldm&`=Hf=3v6Efb}LvCvl6LdQXj&ZqX#LJ4A`5V7cZj||L$F~jT)sEd6E
zPxyF}t5BTEVu@3vsw_*WLYRnPSp?VBS9uXOUp`7rKtRZ?56dLNJ{eC5iGh>nx)HYM
ztAWkUIqG#48OV$SSTHOvb<ly-ga<!TUNqBf$bm$n`5mvL5uCx!>OgXYQ|U$f3H>1j
z-Pd<0r3#J##X-#UjBn~8LS3pHZZxN67huHTNi9T$>mVOpK~mv5krJ$MdID_5Uo|tj
zq%IXM?)3-t3L>FU<ygk3-1~l&d+;ArITn~GWMrruGdz{M5l@*a#}cPVRjqO?1eN0t
zRj%4oIliHlYE~*&RQn(lP}J@*Dvyv5k2$R6GkcM(B}10*sbQjlYM3k;9;b)MPu*sL
z>$bp&VyhvZ1&$?r;D*SQX?tFKsaS_0tjC1}Gn;@1?SMGUJn1zp3tKT=yJ1ZqhQt;{
z@Gv!8q$3=lFeXZ1XUP(jRO86hLlR7r=kZu?4w7DaRY)@0?80XqKQV@T0mS$V8)AkV
zV$|&J0?!04!qgrNH1*|M1~Gv=L=v99iwX3BFfWNFun#FYO`zfp!*;w(Z6-kU9B{pY
zM;J7K5K0&WI0R?+shL~xx$8cn0kFWt7%OEM05d!TSbzeV2EY=hNL6hBECd7K4-KHo
zGk_Cm033wF=N8ps%2XM^U81ps6OR?(YUu+X{qpjZhgxXD?dvTNVLu2y`ayUi*B}^6
zr$$>K3I&A9Rna?kY-BrMSFKpyk0Ysc9FtpO6t<503mdgUNv-2tDpL}P$BMHE`S&YA
zNS0=^q@M(jQ&}YV3mXz#GgF%VeNVG*<P0G+`<qJ!(d^G54hU9S9Yo(}d<9Qt&`N7&
zaJZbxWIe{7V2YL^E!w~<&PX$%bK%4o%Nngd)z#|tj3l1>kXp?uYPOV$Sm7yR16Z8;
zm+0T}>g&Y||BYOi4ljAW?))V-C5-+pE1_%7F6C6<Wrw8N2QR)>6^C*io%$c*V*4y`
z%QQHwL!u9~eJAf#AQBIrqPr#&*6G^cg^XSZhz4qK@I;&vaf>J7JBKL|ue`|>ad5ym
z89i^Xh;=Nub&o)b$3}s5TEsdQ6tbDDMO<l$mLV<Lz^h-xENetO)h}Y_{g2h?fwi=R
zPB!pHBP|hQjwk<!Cx3P$skbN-1b>%`{M-1XdtR%9gJ>{mOmJ9rem=NNJIs|O&}Ba2
zmdNfV^V>9EEK%2soHTp|MHYFLD@cFC9iE6JRm{&WckfFAOG|qYC=#lrJyEX%bXs$L
zwJYl2fzOo~jOk^&KFn43*Toh>p#p_}g|l5brg&_O@SYJ_Uef?&>rL6QR$0|`1<N2d
z4h5qP1f5?k=iY7MeN`CCv0Uezm+##20$Wv<s8=vqfn6Ve7YPR@qO8`tpAJzR_|YPA
zfX1DeGS*)+uNl+#sH?K0jguzI<6<}<DPKN8C1k-qU&H<qV51u($D+=d#OfG)D4-E0
z=Nu;ZVe`=kn+aL4-^P3xCHKlg&|OcRu+{>E+QG(^w<F9?h%b)!3?kB*&b#e`4*PI~
zSP|*dfg+vh>@a1^t+HzUZ~&1`M!{$UK^u|s-WKVG7UG9U6--v3Nco$^nq7H{HI3i(
ziPWxnz#?6sVb2BZ93q_px-50!qfewv$fCPM!wv(s%%xI{&R<^CoVR?1TDi$F*3-kT
zV7Hxo4aA9uj^nhIoVGl}`MYv2*g_;t62U(eDEJx9Gp1~XRaOoC2N3+_C>U)ZXd`&u
z+k$`ePg?K_CM!_z{LNzEi<s7<O*Gx;6TDsXfCax;!~Qm4=MelX&}9jpk3PXOA&c&#
zHS8kN9c0UlO0`IX-Sd;^?e^O}f95Y*qh<@SIo<O|f7WH^SY>m%=eZ~tZ6IhPQr_Dl
z?bxM7s$jALMathS)`UJ*BJI7wCsMoS0gH6~zZL8?fSp66RiMifDIa|zWkMF+Q#9;J
zfbH4xSH+7J`y#U(Gb=eKPnyti?zj6styPP0zBDGM`yOJ-F0jhxbl=q|7;PYEBXZu`
zB2PW5MXq470!7Z>EY=;2sXtnA-h7|P?V1NH@?ZZ;!G7r5IYqt%bXg+jqfg{a$fCPa
z!@dZxGlmbUuV?)E`$n0-yH`7Ptn`g%*B$JryV^m<{yOTZ67*nBaH$ZV(@~e1vMa5!
zIURK^3Pu|U+K8C<wupy4qeZM>vI0fS-z-+0{7)r@W9RuqY}Y(s5&sF(cvPPq-^wZC
zI?!c_n2$aYGa-xag&OvCfF0<l)eys-&<}Rj2e$#WOkTzZkEQWJLpBHd5{2NL&iW!#
zc9m5&r?Xy-g3$(oHe%(yE!NYTv{)5PR-jn<o5h|PeTwxLR{6wg*F0dc?%k_kr?1Z`
z)-|BZ5-T5lVr4=W-S=tOcL8>=<vt!-BX(P$Ic)4Uc=O6wbg=vFnpaDJ0|DPJq~~<a
zRi^9%R@t1cc|8h78wlD6nD@4TFZo|BU<H#EC}93(F=`=Z2x(i_UFQ?9UGsnie1wKQ
z60mdh#v4GFC15`K1k8jix}W^JqWf3Z4rI4-PMT}C!S1*c9piqx;|2+GAl8jSa87r8
zw<){HDx1?CZ$`mr13??H^4=Ef;-|D&6--v3Soxd9p8I+gd+wU+6RTbGfW>-_hJ6NL
z=Md{w&}E60k3O+7A&c%eF||i^eCeB{dpwF*UF>qh)U0unTK))}PSf3Su-~pkueslT
zyFnrz$bXx(ET`YT+mvmz%I5UjJ5ey&K+s11y!Xj}yOzI#$qJM|f3x^_-v?U$|K*dv
zUGu=@uVJ47*g53i47x1&^U)`NCS=k5Cg=Sq|8IEm$E)1i<<rFh^Qbu{LABt6{rPNo
z{r&dmJDbUP2!59|DW^YQW6HKzWpn!TRuqgj5VR3I?`^>^|AQ91g2@ULJb$wo_+XD>
z;5~DEg12iPu;4Gyu+IkU9D;8HU6$ba=o35>vgm&2Jw^AcUv~v>dg!MNOS8=WK&MNt
zL8rUlZvW}0we&lrT{+$Uk4@Q5t87lU--UwF27)%y=e;fcl?__@3MMO1`uxq};`(<L
z7uQ_llfGT^fTcf0!=41#Ii&A^E=&4+^huuyS#)>*P0`(XwI_X?syU$94?e;U_V?GK
z2ib3b|HqwL@ZHj+oc?~DDcfU}&FSxZQ83y-&_?jQw*`O4@3i0*Oje-a`J2VSUv?`7
z{&coa@OI4u7W}0e_W6LFL-2i|%Mv^veS&8~7Tq7F72R)NWdzStGq46yC^0O2ZkEvx
z-q#1a{BNO4-fx$`Tb*u$g?edKPM80XDI5AHIiSksbom7+7;PYEBYWQ4vQIprWv^he
z0%gzNEFM1kj^g3ZzUGs?UGsotKSRU55U_K|J}fQg(uu64@X;rGCS=jQH>K!KU+KyI
z!29{&0KXc2$9{YIjz%&aI#(#o$?54gnX<)JS-+=OirUQe-x3sxH@jN~nIs=~Yak}0
z1H89&;Eu<&4k#3?Kpo(37B7G4X#1b#(*e8Y0qek}8us~sokIskfiBDb`RLODCS=k5
z;oI8&uK?ZkWRr^e`ChC{qXql%wdiN}+m8>G@Cjlq6Yx3xc>C|Q3XHbO+I~Eoke~xT
zYNm6@le%ynHn+y>@8lKRH_h%s2zd;kVC5TEBV^v&LVj?I7P3Of3KTMbvzYbtTZ&mv
z&h!b{u6e*ho~L171K2r)JQj3WLgu4S$V|wh`w$H~U+5;Y5{g;2bJxq<<KYNJ`1rLJ
z%X0?vccJs$Z_mDWn-<zQX-ZDd{+ua0-YOg5*?lsffU?mBLN_w!y)E-!{Z`9dfn^2C
zoWEJTd!b9o{OQYmGPi3Uu*`4Lu;&4G4w+8^U6#!G=#x1Uvgkfa!#+gl=3+Karjil8
zYumvtdpo+*{dU<WNsI*BE*Bzmy6k^HsU<(zDr>uJy{p3~%_%4wZ6I_bP2Stm?EJNs
zrUJ_flqP?(xKi+@l4jp@pET{72Q1AEIDwi&=lcOWhcu^xE=!tx^huKmS#(d;u**re
z8guvg<*Cdy-pAJg%;xuC-~Bpz&i(e?7fBoh`Bn(oIeqsrrtIZbS=)CPxTM21&qASi
zpHJ4ak%ZGaa5b{#y)EnBN42aK3Ra-3`J2VF($|$d3NQ1?+OB!PvfkFIU~j6(DeF0)
z%aS!8eX?dk7Tt3+?8^Zg$C{uBH%ZYi*O^W^IKU30pWSaayg-5*2zIW}n9~hUHf5`<
zvVJ#g#ai=8u|L*YfTU;xF&V+~-WKf9ztVzLC|H4l<!=^)&UsBS|BOq0g0*WNuwdVO
zRl$DglAMCA23?k5`REfY6SC;OL&LrWu<?cziWtH2gQmGwEkBPbi2XL%dnBTPWS0n$
zl&oyte{O&+CfAwrOTF^#=H)N5Ma~Pl?%hO50sJb4TlK4X^#@%m0SB*8;cBGKdt2J4
zZq(9NC|QBh=5H3)F59Cd5}D?cwq5gprTzB~1v@o0r?hK9mnCgJ`lQW-EV}R2u#<p|
zH&n@{OfwGl&*!2`-S7VQ7ZS=q8g)Wr&i;3qDSM|?*5Ch1*Mivk3g<UskN~_!#C$)m
zes8@BP@)aQYsAcZTg(^yj~25+$O;rQf3w&%?-eDAYrg6evt9Fm#e9f{oe$VKdgj%j
z%MvpmePU)p7Tv#jS<(IQ#iU!9rN!(Sb+Eg>65Zu~8})VxawrZVGG{+rZ_3_pm9_if
zuv(FYoM$-CiYWr{10v`3yn64}aiIJFphO#p*T|Xoww$lopyjL(vI6DI-z<LJ)~@(<
z(?vcx+cghZ&L?WvM*(&YIj;v@mYn(MlQR>t=zg|M(f#`=pu3*T+OJ@`8eM0g-&K;o
z!r>Xs;!ZaRRmNLqZH16+v3&Kgd4SV;Mh=KczZ|gKVA|+n%5%@4(coj7kY_d)%C@<<
zyf?cU$<}6AmcpSH4NMN<Wb9n;S}uGHtg2_pgh1ypA!?5=j>uhngf9z9L(q#ZG9;*Z
zX7$!5akeEF6sVI7nm8{>8K8R`fFphA*b*^f#?E-0<;M4Foi??2re1-Ky>|h%P+qw8
z&b|_m!8ZF4Kw9F=%Q`yhNaHrQNrRQ0W(kv-5M|#0o0QJU#8Pe!sM0S1{Pq!}G-9+H
zMH@wR&~c+Ze6D9|!1Qg7HJbr->sOn}N!bxSr9i#q2EPDyTBkFd46C3l&clIUyvYt|
z>hkrOG|`6DC@|!vKjswQSw5t(^{5ivuCe>^GE4CCCR-UZ@D6wJ4lw>@H~9z~i}Q{6
zLleNaNme)FNb7j45wf#Pfsca>xE5FdtvGonYf7Aq@95IeHX{LNL*R-<Wn2x$UAVU}
z^3lZ@tfn9T#%qF-H{V{2wXmkdY8qoJ5)v_9@k%hRMfIwUZMe5E^3lZ@%(Oc#jAnca
zj2)~gVS~oliG)OqSG*C5Ytj7*V;Al%jC^!428T&USr{#@I;?4PwHpbE7_Sp!%q;q$
z!q|g*3nL$0jKN&pz<yOLhUJ)gSyQ@9-Nrs7Bx1Z`u?W|qpDK*|aBpGcql+<^t7lpm
zEjfn%g_^b;3y^>}+;GL)h`1L0x5604y@ipFF2-Q4?qqbY+i1zLkTq>N79$}M<8@+;
znMFTQ82PCV3nL$0jKN%;Zeg_KSjw8V97iD`5#tq8@VFM;qcE1?-onU77h^D2JJ}It
z%W*Vo+HxF&ghY(ji7{pttyLJu;@-l@M;Bu-SHELnwB$IBHElVLM*{p8u6VTu*P<UO
zj1zEgVdSHWF_^3S*bhk??FsWe4<dDEG0*um&Ser|eP98XgnaEqXXUB!f!c(r4_-|D
z)B-MsAd%!s1w0<xB%RV`Uct_Ayh#QW-!R!*C3_pLi5TzCP!(cfao$WnBPNw&g-l6G
z`dZ%OgkqdHY$z`$<^QxOmjpw3u;~BFj#INm)LTe<dY!NZzFkP$$t#pSj6;68%<yxQ
z-7ML=aD|)3^$b-Z781&tenw0x#|ngUNngu*O}TcjlQVfP35N1u6*|SD+~awnA+1G7
zYvomV?!C;GdO$a>O^S5j`UGCaMcBiHL_HHG*0bi)PpRJ(Ve|%gUO4m#lnY_^PdqjS
zBxi*&OdLcHt2w;L(!)waQzy{G>$`Y`9hh@Bxc>YFQ^b)X-MDJ9nUJVw!bGXL5M&d=
zVvtREHrZ2y$Y!ETcCdyw{L&-a)03b4RI{=NXyWy~yo#Q9+`h#W>60S+aMffpAyLnS
ziBfX~$R>oPAe-<OTimV)BAbaW*}>{P%p%)UlDB`N$qxOSWEb$7p(Hy^k+2jg#8s2c
zghV|PCQ8l4Ae#^tf^5RG$-X>@Y$m#72kZ8woF~Xql5vKnVxWoFm++dQBnO)!rBY-R
zu9|EnB<h(kQEF1R34yvzcsE(xo)ttk6J4@{ee9ZFcw~D@a`Rfv?J}T=*N^5kLrG?u
zB4eb;SX?#POu(CxxK5Os)NMkbZWEqO_Us_Cndp)otlO`1w63}BDanreHQD2UCSE_D
z*9;~3sVOo+icG>)lg)%gJrgEMP3krwP`3$hk;UyfL1Z)0B|BKRPqxUGK2&`3L58Ms
zpo!N{<~2h}ocnakrbv;gxN5SQkf>+EM5#&LCIsp>;n`%*4I-O~F4@7lz3AtL+gN?$
zXaX;ut*t^mu6%5dH}i2m9@}H;$}E11qUgRx*^7~t9@!zokOf5jtkwHTg6Tto7543i
z18AxC)3QWpQCDUOEkACQ6aL#{8R?pqrJ1xyf}tf?3$F^IWu>MCfi(G2E3`1NJtp_h
z2sJvmtwXxiem=Ug2v(uD9|~yyov24yXq>AAo4PWq-G_5EQY@T&ba4(K{~(-eP|w17
zKk>wv*dCL6g;NKA4<Oyb$wwDwu$=qX2eflN>RC892sU+PmTsrUxe+NAPCmLggXNiU
zaoV$skE{XGop?L10_J2#gR4!(EM)A7sVfWFx}TM<^=%W$u_Hf8F!~lO`}EHYPr_;y
zQX;>D4H<JtpSWoi^Y#9>CcH}MQ&$$U?O{(WBVE(Cne^E)wImq&g7xI97JZ(3yTOpL
zfb@xDdkTcla4t6)ON2gV?}_o=udiE4$;*}`CBaY<tUcQqsAu&LZ{DLBvXYcY&!FP^
zXH7<((4ej?<fmj?rpzS4P!g<DU$Q9iI@l`>!d0Zil3BUQSR<4$dryq_e%)@&l#V1A
zN`kfL5yshB5z6!RnkNsC5=%OdnT!oWgSxVipOT%K(vbv1NwA)r;8IecX7S}jx>z$n
zK{5Kb@Wy#dX$LmUXJU{9gJA&qGxC<U7O1^eiD8&JGVpoh<SVnm(RGAxYq}&D_`y>B
zh6P{ZkHnC8tj)mZjWgcB?;w0ze<i`d50+J)1z)sA9gd9I)+zg_F8KN@wn>C=Oax8^
z$}xTX1Veev2cc7)&x<)|z<~h}4rZqLRZJIBFh_5+AgSTMo&+Eys0|@ug0AS%9WJ0?
z)}3epO3Kuv>~8ENm;5X4T}ZmMfme*+R@RJ;Hn32?I%@X{@2rjw|DcvN-aZX4RZE$W
zDpTc^d0v-!3T3iR@FR+Q_exEd_+Ytwi^00)r$xL202#!0BPrUzjBH}g)5M$^L<}oR
z)U<btfXyx7wzYu-^<)#&i=<l{colA*6K!Cj{+cs0CdHdLUdG5;v?^GH-y~A0p53<V
zey@b_wa*7In%Kc;q0UpdU{-(3s5qO|eE^Zc>U~IxHZUWboR=CDInSLMKn^QvRts2<
zq+q}GZHuHFR(ZS!C)k!wu;Apd$`Kx%U^%>UpU0vcHhH=SCz#bgvfwDK*1DaXwNH2r
z+oq9jfAJ0Y3G<R`Fpn<WZ&?4dU<LE(UqANRmzyqpfY7BYm{*Tx!4kI<+Go`1Db)!T
zAi;mW7mM_7VY>6i4?qz1jTjaLvvabAN~sB4bvza(D*A4G*h^Le3$swMNdFe5JDW35
z1#`RoUc(`KiuB2(A~UuL-F3WvGp=&37H|5uFwxnvN*CFRr>598T$S1LIZ@B&>~**J
zuy~KPpB8SvQBQYicM&Yc@qt8s$`IK|T=hF~6(V`lzlDj;U53bJJT=93;i`z_bE2Nl
z0YttZ&%;N}nr%XxGYJjWkp#PJaXEJUKmSh6sutp_Z^cyz<xT$<COS77Lfi1v6zjlM
z5z1#wPvROtXgdgPAB50g4SR#JktWpdh!*roG>MPI&niHKz?0+hnh$*$lH*DGIU<F-
zJ_*Q^wjcQ-KTc<Z4VL``3#{Ko&FYJ<E$#zj7;`FmdxYNjYekRt#s5<D==*se?|nU4
zctrf!geo~C&TkD!BZB!NalGb>V3YZkUw&T;u#<AA@8VSgU2n>>&J=N^NH?xnZ^QMA
zkmJgOVob(YUcQ)!v39hlpZlN)4!2y1$cjn6{<!LQW_*r)DJvZ$<xNp5G#RgpjzQ7>
zEiBr<g`oSlkbwRz#O-w8EIQd@5kivhLmjFE2|R)~r@(*0_&!V7SHv~1dVm$v!@MF+
zv}d(vn<9NuWFM}H7z-X0W2Jx=PJc`><AM{}LKf}c!lM0KSh;@-0XZk925MnaqQqP;
zW(Vuuw$)w>J#AQ9r&}2MSUAaRhBkc96bVa_LR=FuUbQwb8O{7ImMd|mwSnM_HeAsp
zZza$NG|8cz${SF2di!wTw@-5F_PakK6-0PYjJN{${LW^@=T}El=}0AJy>UhFC0AC%
z2b)9xab21Y+KeuVKaz=wGw#rwE(Tsqe)Ed{&(@`4Q>0XijKVb$W5I)BtQ643VY-d~
zJb`UwHB6D?ii1Jr%4%q1q4S^CrtkbPqmAy6EWqc+pFbWSTN^|7)_(l%cycW6unfy<
zJ@0MD8Qd53-yMi9xwtQRVV}6m#PGxw1@Y%c08yDB8UaM31reVU^}M$c1^di<f)R0J
zPj+7tfBtl!D;0F71KlV=$7e_(16^>$@;M8gGHi9lmasm?n&Cug0{f$yRadY*-WLDB
z{~6f$@HjskB)vee-S1>?tUcR)peTCe!xumP2%nK28vk(n$Hx()jU!k*b3QqacZs7Q
z{^98#Wugcc%)jsQn&G*xSEESf*5xuNI+kX575AlPvi@MQ$4K^ATye@NuJ{rswvX|-
ze+%=RRka#WW{-l#_u0WyUuN(WEZ9pday=h#nxSVLaAHY@SMdRAin7>bPmt_MxF%vO
zs>tPY{}$#svj!yhz=G1BGQJiifikg!;beU=BXR^z(x<k^_}Kn>JH8E;Bj%VH1gM07
zmJ}!#(H`Std#4L1SZxos04V~7w685CAamSsdyJ0=K9h4t_w5-q+PUC9aro_PXR!e>
zxgM>l4c6NYjJkERT_mIYNcd<W$y+lpl3>j}KL|;g9|<2VB)jez7)h|cy~?mWvn8Yb
zNcd<W*?aH6NP=Z@a}bg-ek6RfkbL342SySslM)Mw-(TSa9h?$t4{?p{)$Q(SkHKu;
zmB`?T(&OZeeaZ9pLA{5(nsOlo^Yr@`1S?uk&fJ&0fDneg`iu)9m|;^a2v%E?m+ecQ
zO9*+d{=<b3%#C3d1Xn}HlE>+Sc38wXKlho_9%EwrGukYSb(GzTN;``Kts|I&-{&wO
zQ>VszxF`5=Gp9Yq#BAIv2gV)D`$H_;u0xtc+*E+}wdJ^t?{Jqv+GEUX|Lbd=d)hu5
z$`4_8XLV_NjHTeRI_*ZM!*04cE;Lwp2}btPe0zQAk!8}9J!{M1hxf#IZGYW9t8&l|
zBUsSKSlGP&?Hq$`ieTflz0-$nFn=E`+D94F>$Ztn$r9A=rMhhuzyl-3C&F=qj~nCa
zIQ3%5KIHo|W)GI{=K~3-Fa*pp1k4r!_~_j6!)yYE@Vh<evI;;ZwqLhpcFw_){Wat4
zEXlrji*EfKgM6+a=c9A>-Py?hff<W`3^HR8EbMU>0iLj@8v?2f0rQ0bJ~|hz&L-f%
zWdGaSgIfRR@9EYrFvzO~IUk+*0j)o<xadp^x#d$ilh!AZ+n!LoXAivlp4`UyZp>>$
zk^zg}!;XnA6*vP<GvK6LIKh&5*n*Rbo@ZP*!3K4W1t%9h|8U_1+r<$U98WVQ+^mJO
z1k$hr+~Z8fN)gslxw26ImRh+o-TAChEE#gEBLW5!U$EsYX55)&IrlEn<kbP29nh{c
z8LNbtJLSqk{ac{UxH8?zH>zimH<)S%OS6puv?kBv-ai*>^40)b=Iq8EllcHLvAB$@
zzZ)ss6Jr*;k#yMH+g|X1=P*vTsBNGQ%RIqBilBIGGCD8co(M@WE2Y8e^U`gG0XmLX
zpB-Y4IfZ>;%)4^i!!2^q{|awm@UfqXmr4E4;h|9b(9!sExvnDnR~D7%r=eq*BWVi-
zgth*-NQ1Z@ATsus>e>yLpshuZ$N00k@H(8Dj+^#JcztE<6uD<sBF1}nlS;5czQw3U
zB%amasnTHY8rb0feNZ*{iNnxf2a!TdD!9#+r=ep9Zf>mxumk`ymQppW9L;^Lq1<XN
z?-TWt*=V!O8LZ~-Gn~?DF2RxYajAoAkjMQw8$_SIYhd%AUZ<M><e{O^o}uH=%snwy
zQL<fBqMr5)oiH#1q8h|vfXI-yhLwW>IpiJeXFpmoaMKT~)=l3eP4}*WO@9tn4MwH@
zP^=`sC&mh1!=?Jr@_`%veGOna0AxsB!^+X{K_wq--+Pyv<`?J>-eBGCUVK0iq{r*G
z;ffvjyvlvRDofrV@k+3jt+dcexTu!w8iA=Pwi8!1qs!++J)Z+G4;HEgtNO6zUV|-F
zr$eg{`}VGZQvT~tl$6^Kp+lQOX~v|AYvJ-Vbn3uzeo%wBhagnt0}-r!GLPKr%|5x-
zDuQj`gQWxV<Z|JOcMasp?zM_1|9i0Uc~ZgUh&&Cg7?>lgG=N$Hh^gWp0~bxwX$Qci
z^mR5ojL;7N2Hx@bC=}n)w-;*IB5M>la}E!9fs5CA-e>El+87lN{KmGPLkc#@xeTrb
zaK<ZdL>`@SGi+i{%)184<*fUaTuv>dGoA(ht16yP5&%Qz3@n+C)D&3ior3^E@Es5b
zvvoBoG4>~4b-IAD-2mMAukUE?v<P>+Yan-y)=euy)7Vq*iLrvm8>v3DYGB^H{A0!5
zKaC`BRB?}$izaD+2cU83>uh-cS6bU+Yi+M+Et3-UybsV?i5r7IS(bC=^H)oZTzp6P
zP|B~U`Ifb_;7hpfp<mC&geskjnf?tnhARdJ+Z3Aw;Or<~6Mbl3J6j<z?;p3vnBXD^
z?hig%Z0NSPc)av&(IgcH#p{X4AeloXJyt82;35fb#oZPXtJ6VvUg69)sARRizC=**
zKH9+h(9PjjPF(;c#Qfyixj>b%pR7H`L>GT>BM-Ikdjo?r6lT0@z$V#(VS)=XxJkdi
z$?#2Y0hO<xO5>Eg_pEIbE0pWnPcRY-ju<Yn@F^XYT|d;XOhwqUwo@?6)y6#75H*;2
ztqg#*$B|e?rna_xYXA+|v(^#pa<#GV&)imU|2*BIAX9x#HFONBK6}>o2w`%y2-}aa
zAy@@|$M9Gf<L)zV$M+BW1dCiPEb+m@wP3Md0UYW4bnXq4UqGQmY&KLO9;?MQp|0gP
zEKVNF@hNn5Q-)J;P$2a(yheI-`ZMXW^s(tt>7&x6=_Ar5>BG{+=|j?m>5=JhdRV%E
zh%swve|P*XHEWi78Q(%&1x4uJG8gci(bsEjSSl7e2Wdr*m**Ef-WZRqlq6p9E#19s
zc_Kj-Y%8+jQw)9TyKoD_iF(xx(i%UnOnr}40c^qPwEz`u9E~-+>6cYFzrI0GYf!=k
zU7lZoFRERQrlM&77V@Wm3rW*N_uDnOg^nc*r*J|hi<-w0<qFLsHW_fu&OB<iW*n0t
z?Ad@~PS=m5r^Ji7wZFt%dg^|B13IHonq|YlGHkoX_8-B{Z`T(l3o%Dw9xICDE&R;t
z_Rb;OoqV1Hvl$o!6>pr>TrG)BlI*sdkGkDIpRbFM$<YR0LpAuUpr=5oe}PIP1Y(Y#
zS0E^O?|k=KU7sxQl5aN2cOqGF22zUS{FHH$z`Cvs^@D1z`NlFSiB}XFt`_=u&UDrS
zL-3C(JS9cdz{y~|NmS^Ycm+CDNhvQ?3a=lhAl<;Q7?~`=^ne02N)-T|Bn?=MD6~2g
zZx1zZUZ}!(3)6#$Mm?C&p<2;)xt14T(d1Kr%p{VA-=fDR7l+eBx3b%=i!CD6n$l4d
z#Wc;wMn{FsSCTtQ@IBdEmhpSCw1=ldLlX78!SOw;Uw0me=d(U2X$j_S_}Ekq2vjqQ
zBUzzq3wxz>QUcH^#Zf6;DytLZfmV{MzbQh_8S^~JXq>AWR=rj8q@E-zi<=9e&LIYz
z*jRa(rtqAQ=V_hcgx~Zs>{7jPuI$(url8_8MZlq|Q|06f;s#oV<!Vz!1QYDk-$D$%
zD%!9L07KQMC1WtB{<C6ytUg|Jowv^QXG<%aB!g^Tl^(Jxowq6x>ALoep(RMD9_n0w
z^T++kYkRM{=Id8KRT=;5j9a@mv&9iOkIMly5y3W#3fx?~juqmO-qRbM(0|d1&qk^s
z<BjwBHv}0R5}ulbBA6%7Acw42;P1$Q9>!x;cuELxt*#Rzh1Hk(Qc$a+zoxKiALb~l
zRsu{ihTfyU!ui(ssLb%S#EBy^A;Dxlv#{N%=Le$bt5QG5Yw_YtNlO0~;)7$w#hH$K
zp#jbXPKDP{QSD7q9&}2Xj}4s*kc;E}aBV6_M?x)C4_amUkgOQ3QsWgR(Pf39>SGfz
z)>EDzO~5i59xI$ps_zkvV?~YZeuYdoo_#^}aYDK(LkZ}Tdli86F~Qk8RG4Tn22tx_
ziX+%Tc3o3!7C^BT=?D&^#C@_PrW!>8>86M>!CsD7A({gCmc&{XJ?W`<8+{6Qi{tDc
zCc&JoViP58@x#(Q#dYCj!`Fr1nXNulw}q<M>#1VLO>iGq?|X)N8106!7xveLog->Q
ztno-Ul`_(ksO(8Zy3zeadeg_@ZhPm@QzG5*?TH9hlk(z~_+TrJI%q_v!x}vkBfT~4
zD5jxOV<;8?K1KnSgDBkGW#Lfu5&bpARc(mob-~`nO0lHS%o)+{@<gPxF4Ec*!3I0*
zZj5xRpHB7D#UId$4~9dtZz_Yps$LOjqx);h9BdP$4vKS49R}5diNWzk!t!Bwz7rhj
zX^QkJAjOFg8bu>SiJoZZig=_MJd1Y15_cu0btdpwxy!#fY(&HvQP~}hbPh+A&#nZZ
zc%;!(+L@?qOibH}b1bl9w|Yc0(v_E@0zeWa$tlC0{Om<P935}o`$oL^q?X+ddT=Ly
zVx(&kwXUk$Ys8-rKAJ|PD^@OR4OM?B5$T*5DOq%y5LzC8N~3%_-ow*Asy~f<dHYzs
zLb12)UPWkP+NeatNmO=YUG=hptzbwfd2QcS*N8iU8jwBZ^F^42U@2XLv-pdG9-N9U
z>j~8ei$@(vftB{xlsMxo>QeUrU?Nh82Ee7DM2}OuP~@4YECi`}El<;1Fr&Yw+j)5l
zp5Udx<7K^}>cd3|dz?`UA)1uFhz7{QQvN)6OO%&m$f{2vm!^7jY`~sgW>S%RoVM{6
z&xQcCR=O#o*E>O@$O*W&K^XDKR?FokB0FJwk+wtx>d}>mV96WG)nzLeTE5jeQ(;uf
z^({EyXrvA5gKycQZ;foj!LyNVu#dXP3q_AbUWhs;MEi~}x}$+wSP&a^A~@LD6ln#=
zLc+?e$%s=ikEf$WTEV@p{+c$YZy%dcrdm8wVd@t(Zp|ZsBFY`W6R#*ptwcr;z;X-V
z&jSGdDg$6*+P3()1@X(msn1Ie+FuaZeu1Tp>swNE8;Zsw9Ziu=HY<H}BGMs#q9ak+
zmb^GGJ`Kz{tgaaLk{4apIpn6-Qqtv<#o-_nFaFCDV`|s|pcsDBYw2%iGbQBX@(%@z
zpUd}x{zN33%hD%Q-C^`@t253bF@2q<En>yW6^XWl?Q&mnRRy0tj=Z>X*^38NXI6OW
zpI+P32U964+v3Gyvx#Z&<OefGKu~emcR%hI?S`|wT-1BBsP`s%vdBhJ?+rfn-W&(8
z$fkItr76+~AWHu>i2ey@8litJ{WUwCB|?LrGe71~CDNEj7@~iX)+l^ZQSD^O*qEqn
zr2}n6Cno;mOQ%aa5H?3P#w#Y{nkb))Zc-e{8pFs9&fEX++MD{Kz-l%9rqqGKOOSml
z8VpNsiZqk<)OL<cB0I%MTQZDvgLAhH^))floiNg!^1<oIA672=!<=fNq}ik7YP$}H
zXM?fnGO6Ha(;^|uW)tjnCyXOe3C6YItj|a`wQu%WJUCq-w1Lrs;omLQ{P;f<Yq9Zn
z!sPO9I<l&3ECRiJWLNc}%~jVQh0(;R;HePS8BEy4HeqW7bcbjWg_)>q-u^~@a#S%i
z6dg}q3#?g0Kj}0j`XP8*Inotf))lJJPOMTubcsqML{3z8!h<zMc2T0~3kMeG4$RR)
z_R13$14uODiZd|{aCYTA8{HAc>4lM95c95yk+y}u9*liI6rg_gp{vQzayaWO^87Zt
z!8ySqFI_FPktMr0V5iQpW9X{8JREk(>s<KjXrvjWHcyPS7TtCR`V^FeZYY1S6vC0-
zVT053k=OKeY1KyL%nRW!-#L7`$^kn<iL2onj?u1RFLpP1LEZ#$4z1!GTEsc*66etD
za}KTS`#KYm7D%iq(m{a;0nOSy3{OTnRQJ^BTqz{^8F!9Sjy%FJ-P5kRiZHkUn+s1`
zP<>=oA2sk46jU16Obz_ycRub9!iVnA#h3a!8|ugRya=kpj}L>|!C<WofE5jf1#h+s
zGYrwrJcL$X9Srbf8}M+^)by$72s0@xNsk2FrgF$C531Hm8whakXM9_`_h|QjMu0X$
z*Yxf;L&Jl$dujlz0T_x{5DX3PCqqB{&>}JiLyI*-u~{G&L*Mw;f0&`RMO<jps(sy;
z11*9|h3HW1q3~4L!)1PZxDRq4jOFbgSe((=2CxS>*KAw1RUsJwYXI@lmJ{U#`zgNh
zHsBoM!z8oVLt$?5olx~37N5<8y7#jg`o}=0fbb(XKffFR>b5{o*j)>LhW3-4f9<hI
z%)!pEW+x_4a#=&`buK$O<5%@}>2Si%{A(r1g2U4|E=9jVef@gPXK*Kj!*IpCkTYSu
zZxA<>!?qLDz#q9s1>~x^PCX!7BAwD|>6BJUr*x-uN_D<YX>~lZJ`q`kh@&aOo*5CD
zIM$}fHucn~em3wY5m_%iR$a2vLBNPmzjDKLM6(snFW$3wr|so7=v$%^&^K_J1HUS!
zZH_K$MojxT=0@&BgoF45oiu{lWXb;$3y(07Am@q`3AC8;?Va%o3^4CZlut47?LO0g
z*Ez!lxei?l1+EXAs%V1T`ym%VMO!fW&=lE7l&PwrZ22IK-1%;HBiCX@KcJB<lGehI
zZ)Zm2T<2UNa5TNM4FD7dmj)%`oB$$94Gcf0a}x2w--Nj;-g^n#3Jk>q6EWNs_mfiD
zA1?gJz_5v^i>$*CeO<IKuc-ERFd8>2MnLsPrT&C*NVG4%s5TAn9PJxYRC_2=Qjg;@
zC=VtEpf3qRA4lg;tr;!TPf()KsqYPpz-!;j-Pw}<?T7$L*F_#2l-gtfu<L?=VP<4d
zVC4b8jtmCY!6CCmR?`Lrn@VRlcn2I@fNBFQI6B5~bc}kWgl|6z<0?)boqDv6t?Qg`
z3t+A53jlFYQmzRg<x9b&49>1Y1Ax6Ve4uviH@lvEC!1YA8W1elHP*0etgvgWu<KnK
z1laXuk6n`lux8h}fH(lVJXJj{fRu0$DFdsj2kebhcDsHzEP!1ACJh;9+BGiCMdGRo
zuPNUZSh^`U0SFguqLGalk!_q9X)e0$PE3IakkN1mpW>bP_;|&5NgW@LY?hlb$Ueo*
zhB33NC{$eqj;zF_Kf4En@Zj?VOgPHTSX4U0t2AY_q>jmxjv=e^B*~p5bC!TI4wWYc
zRNgMd#ts0aTyo20`g50fQPsDczCV3Sm6Of+b5SwC0CT$af4xmOn(H9}(1NZ`CT}rY
zR@Yy1Cl;Bil$<df#mt2}b+EfY<J-@!XtUt*_X0@+!|nwzA7*-&p#Jbeo93wkAb{r0
zibEOG9mg1aIcfGZJQP54JGz7{KHELlCDKKip6gf?m!9iE({mNT@1=$lN@R1gVpO~m
z^MIQMuv{-@s(CA0<d+1IqI<Cr<}nt_j9RT{Wd{imE$?C>0Sb(XqgG5D<+X50W)sHj
z5;kJuyVJS-VF`a2R3W1T*F<><f~sr0B2#3XEpeBx$k^zzx={5f(IvvFYV_#1=W2p2
zQ{hCN%&%=~D(5^>D0Qg&h^J60Ummv#qqc%kAOVxxu7+X?WM?w6zQS1-5b1ng>Y{~X
z#Di|41pFP&Kf5dgP&4}51l6`2sP+bguTKHCShPYlMWeEu^<6fq)l$4sP+@grAn|*e
zc$3ujThFBgk`*#jRCSzp35-uYh@%4_{u><6f>;;%8KSbENpMh9ufSs-T#11TOrj~{
z9uiGaOC*<O%04{G?c;xZl_mQ-fiR;dxc*H~B<UMhr3=*Z{idSFD%Wu>XOo(wl$)-2
z1*Y)4PU0!)B-X=isA;>Y9@=6XY-!bU<mhR;*<Voz!Of6wM!)<@Jto5jfm&vAEp~PG
z5D6=z@knhVGAbTfnK@i~K!!_L+`3bI{QUrfdAzdznw8!(|NY?Mw*Hz2oV(x1w()kl
ztjPU&5kOKyqQ<7kfMDRU*E<&nfcc>T<BqI$V)1~C5+8BDFp6Y3Z@=#GKXnzVMVB>V
z1XdydYO$0Go};Q+R_H91;`9);@rtRqCd#LpVOOgMc9jjbK!7#6%L=RmHIQY6lfiZL
zNm_qXtKg+_G+6j{rNH(Z$2#$DHs6{_8{A^Ea*N?(sFKp;-cGB@Rk;xghaIWlM>x(P
zbUC~$x@?zTsGaN~yTe8%+qr1MyEvX}afj2n1^lf5^uHEghxWSYTV>FSs8<CRYoK{K
z7%A;44gfqW3ozCdv+2X^8}(SgJo8$%9xJ!*(N`C_PbOoxy7r4{cW$6aRI)pllSwfh
z6WJPVgk5ziy-HMWP%9kb|2v&;9-)-aTG$YEw)C!4XwhBXoyskvH<|}4>~elTQ*=#$
zqZj1ziRuNrxO9ePjIEe%h%Vb2sxHJMyfv<({>a)T{UL7Fb5~oWP3&7wiYSi%VLv$j
zlUK7@^%m-h$-AN)l;c+ffca?#7;wBPvI&WyG~1Dw0y9Pcg6$)lvCj@J{yr|(Y(m7n
zX=0>fVTUc4FH$gEi&!7U1Pvx>CPo^IZkvmh=S1XziIHu}-LCYseBB<;q_9e|89CbB
z{%wNF$#S>5XV|MGQ^ecu6mQ!o6H;)ZC0RQJ7%XysK&M_@29bId-<@=7#iUbbg)?3#
z^4qK|e^K9B#r%wi<q}yQ)<;S?AN(BjU#*X{q7iVxP#LVC71h21PO_kyv2lC)t<FOo
zUfWY2h!nOZDxo-3qV1gwUMidohf5*)P3#(|z%@}`Vf>~ejFk22SvIhT1Q=mRJ=8E>
zvlq;hc`AaDrT;dR4W&;vk<!-wnhx+G8EL6-?y!dsdR}oFm%^iw4(NRwwg4<_0w*U%
zI+b8ckJa7xR;T$DuW=CUMaa>DE&0*_g6+G^o!k76OZ6Hd$1l}yNL)0aRL4@Pe|M#N
z9a`XQA^SwCZ-Z-rQhokqui>eWMG#7=#gwhy`m2`OcO7cW_HvQ!<wmwkJYFufLH?2;
zEl66zmm3KmHr<o(<%3ChZVm}U3$rD>(WC0EcCVq3@T;DLzW_JD;bNBQ9#QfCPQput
z9KVF`A6UXL%yXFwd!or<$l{vZ7mIDN%o4H8GGf{1G2pLl9s^RR3oy&%W*LFpibflg
zo8<{4^_b`e7T>X3sWW3bcdJup18;SUiXUrHE7Khea|fzF#jd}4fco4%*I^BlwxVZN
zroUWNPIFV6{$+mCFS-o@F}=NO{^O2w&HtH~Jl;S#{tG$U{6BTZ0Lt-?X$Ptt==OG@
zh3Km33cY}N7n%cS*5b?&YW%u!mBeAY^4Kw`fLW$3ifV^S2Gjz397=ih*=*?{wsOoC
z<(O@hW2MJ{=D&ChNWI6{$bzJ8cD7NGYcBCrWVTG$QsSZ1cTjJzw$%zEf7@0NA7Vw*
zwz|l37#2MTS#j;4BTLziwuwCtmC?&TXY~l%z{nP-PH~aMV`mdC{A8rrAyTMo2~MSy
z*?4~YXNxH>!(yVK2vjM3ZmV<mlnf}zdjx{NwRel@d978u0L82kx?l?%w(CCDh@pM;
zEL>!zpfuG5{$jqRda0}uJWOuy#)b0axCPzgX!5G7=#H0I64L>jJ>jNXt#+t=s;CBs
ziE3kXwV&x~JzllVb~T0tf(@KRwXsrd@giaxTjtu)t#%cT)TIi%6{?I=RnBLXDzC~V
zR+aP;X0G=#Pq#C#T9qEI2hLH1HZX5Ap%vy_bldH+v4zT_diD+v#JewgjfZI;a=dHW
zXRG}~*?#}ni(S)(JH_aDv&3tga&38QM0|-ks;0<Jv>MHB6rI@MEfVfTyw+Ob)CxI%
zjraleADelx*$A;HewBf@MVGa~@1G&ofsJo%aYX94n)h)e;QG=?X&$wFW4vOH?0=hM
z416patLSjve!*iy>KH-jL6X{u@;TtX3|5zc0n!I-M4}Afn%SxpJE%ch_@H3&w{RnM
zKD&h-Fs4Lh2dxt}=uUrafc>^6BaIc#!y<n_tU3Eb#4!Oxd@h)XP9Xx`6I67%<NvVB
z))wh*Tht7pjKeIpuG(#}^=a_PY~z|cD4)J3RsC(NrS4?&sf#4yt-8ux9Lhn|UD&*D
zwxD$`T+KaR@J$%6VV_r9(QUInW>1HCkXB_5b3HwHt;Hi4=J0@L4yTM&IpC6i!l>v%
zZ4RGg3n;W0_JFnJPJjyq*h44mVONDyE%f-g@HJx(*z9N7LrZj73+zG7XTlyJm@+WN
zi0stiuE<~sbHx(o8cS&QII!n=j{~Xqs1uPEcgh9|Ki62nVze7pV0MDu5~z2bdJh22
z8_ju0fcu-1$ke+|I(zJE<z{k(0J1d}wMFAM2WZ8``-AzE0L+I5V{TKtaW__ika?xf
z--asw$*e<1bXkX<<OzMobs`V`$zmNR1!M;{?6zQDA>)|o&WGn|&(Wbb>f#rE3xkP9
z^lj_`cHNY@t#PUaHT?}K*+HArRiFXx9>$iU+whW;((PSJw<mby4Y2{0RxLn|j^Zvo
zNf8cy_;ve?$@b_xT(#P(bF@`QZzq``y+Nz=1}y{capX2!&MIK^F2hxkvf1H?4MA;;
zTM_Fyi~mTnGPFh5iha3&q51*Y+FE@UxADkEN7L6Y7DjG0?QeF52skw<l)ixFIaa8G
zkldKJ*DL+!U7j%E2|jy*%dO+b48X0S=er%_7-53hi{BJsfD%fN1+GMSL9}mV&5?48
z&a;y@j5frYyV8g7IRqYwiv39z-^8s>1_gNM1F!5jXIZqR-jogyuT*rTmdY(q0B*N|
zD{m0>2s&UssOSy`cX$b6y}Se=Rz{%el@Y!f@_Ea~ifZ#vS}oap4|f5@e`5{Ci)#N2
z9a6==D#Z&F$pW2A2KsH1`>mmBQSHy%N=F3ac+J|)QB=FwE&ev{0!X_3Jx_6pYQO3h
zXDky?{H*uw;>Wqg<H5y0_n}?<LkLzi_-nz%U&nlz(c+@oCb#%0!Nu2qWEa2BExr$T
z0knV9f?mBy5yH?npy-wMM)|L*q70Q8R4(?EtK%6Gpyy6+NB*kxajVj!R;7<zl|Eus
z`tVih;#KK`SEWaK@usb^MX~Q8+SG51rD2v~O!Fry9W~1e#qKp4ft#@N9L^O3HnoDJ
zho&Xbh=YLyD&oBqXYn=(LA8(J%W_o<3PT}hc1Y;dFEG`JwX0X7<fXSyS<Oh#V;fnE
zGr+yhwsP%;dz;FuFzn@PvsLLUhQc3K-BmU$Ty+*M@Qr28`^!jP86&{nc*T5N6Xo-<
z^e;Q@N>&M%d!3ufMa?pgPFO3fs?eEC1n!$wHM)@(s9Z6OUZ+XDprY9DDGl~B7TEL=
zRd;$W=qD!#NRZ>A!~1+iwUsa*VI1D^sJ>FaT$diNk`k4@S_sG-m6-;d70$8!!kB2J
zSNM;0litN>IwUb!@<0AqGY%=(W><Zf<V}&hH>^CY1yz5|j~+UZh2BaN5I<EQ40?*c
zcky<?ft4cAx7@;kc~gxa^P$N5FDno8ZaNP$X~?_4%ERQ3&cmb*@=mt$F!tAZ7|kQ^
z5GxPEhUzNQrt?VDlsRaVJKn%cqg*AgK4E|?0od?wAA`$Bv4y{t7S53Z_p1Vug77Sp
zi*p0GXr&2=D>HDEd0a&BhE`3ma8Q|*6z5Cc@0KfjRIj8SqDo>{j_BDHw|0+**TR&1
zqB4wct1#B6ER5IlXp=-`alF0*H+3<dvBKriSgYKO!pHdJ1}}T>!i~LJ8e>(QU&Z_w
zYsX_HFqh0PY5-{{Sw9{*;<la`hv)c9AN~@bWkH?o4mTpmExvvg!`P%h`Vg<@B<lHN
zL{yNhSb)#7paufxSSfOvVuiQ@SSY;|U(c}0%1Hw(f~BDlKGTg#HPZ(!g8iw|T8z~O
z1cT^A7@=P@NO4bIR0zn6HW2raqT3haN3{e;THrplhuhkOKS?aw)RR$stugkI+{n+D
zp91|wcdTZ~f>^71w=u>OPuQ^jn$i7R$o6Dx3;<%+F!tn1F1`>zUgNtg$aO~Uq)YJ!
zTZ;ubA?0Zi5d=PJfonWA3fE{u0j@=h&rQ_x#&9}6xvVd*FS%+G(iHVL=Q5zgsg0nJ
zT_QO_0C}lyY)o6(Ko!cbDOKR}YKjz)sFSD8h*Bpa<1yM-RCLD^sG?HjU<EcOIVFP@
z!4watk|?X87RBCyUKw16C;=ww(XI4DjGE^lpUP_zgaWpzDTaAvVQ}jEG>LjX`kQ|$
z=Q<F|iSpo6g#ZH={cV>1&#CQ+1M3^+^QsT?E7(oDxxr49t)S*}_@WAkjy7WJPr*EB
z37;yQbIukQ<(b9+82DOMj#lS=!fK6*S?3mf!g||uy>L_{0#l+Sii&Q>n<o8etppFL
zN3hK;`iN+lR@tIEZsXQBCFUtm>TLZzm9U{RSE69kCpM@j8nX@RL_wL$pi<oh2ZC&B
z0J0|l35NoL4MEmh1}-&;uS6q5=^H<J1Ka+P-M~mroZ>MACr(wMXT~?;alI*;`UunX
zpPYi30TevN3I73GO$t)+145SieRgwa4vH*iqlO1L;#&joyvw+5fJW8D_Cmy|%_x!+
zS)kW12|#vh4rI#fr!G7oWIu1n=3vR7$Ub?a&I!OHQ>+7UP&aBJJo6_<_QJO8M#*cK
zxseS$AY|7DAbWuhFgLO_D3Y^f<w1(r_dBa)del-iFs9KkE$loHhgy&xqi(|K<8Uw%
zgB3=XRfVJVEK10E<p_bkN_pUk68sh2cIaLm;`#REZ9E;*P|Mu&QZTiI^G0wqQ#lv)
zC!$AJTQx2Kbf@zSbYF~Ki=DGSke<vOad8g1Id#wp$ADF*NhV;O5-9{W1hRO08E0qA
z3r%<K`+{T&oUjvCaIDc5YH{0aVIp+aj)hAZ4~LRdkWeD$o8Wb_?t;s(hk6=VVvYQc
zMRL__5Ggy*MmY<gl<ZX!)27d6%#ZPefWcuX{N+QKFoA#*+l6jIDIalIif?R;!gZ0}
zmCJfpR1d>-S<SHMvf@znVYpu|DNAckL`t683%5on!3=AO<2)ghs5t@7IS@t-_Inm0
z;NgpBD{5v4Kr3lkO*!G#93`dlS!#I=-nBJVme-Uae`(FdUj9-W<kISK(Pbr}YQC>l
z^^DLms;UjYRquO*{TC#Us8n%isNL8p(%68>M%kE&EkxKr)|iNt$%g&WnOlf>zz=pq
zsl!GbF2La#Q)Z3)#lbq5e(qaVJs+19Bcpvwt4mTFz?Ep<@@hP;sGgDH5f!3OW3Wh#
zNiELrCL>*#y4=Op)jwkn#6;6Yu^*u@RwWq0S9W3Tww0%F^k9hHGcnSA(=hx3c@AiI
zSkP*w4hm@%CN{Cw0bQv?({@s4w(-~*{5IlHA+0p&5!_=dob?&oIiL5|GdOdA^M4>g
z*{V>?vv{~4%YJJelbd}I7-oF-$xnCavwZ3)z>i_%O%@}6Z!_}h)T4NmV$RaU>=@|Y
zh40;AJ*QX_yTdco^f1lo(-s@dn~_Uc7S{4Hr<Bn^yvr#MyW+*^EA|uaANF~|GH}Z@
zTnuDAxOf0u6;k?mcF?KbJo!v)9BvVT^H@T70CF!jPHu207{^Y&5wPU&WW2d7q6+fF
zJe6L;HJ;T?u_?#|P`L3b_wI7{uG+nu<=!nZcad6Fd^+}JCOjSc3V(2r9DWiN<Md6r
z;8~-wa?}#J-#kR|-QUOq<_YuH7*`yesC<CC6|vYKN}KcZ&LK!mcL8<{ntN2=@PF9*
z8~CV->yID5gb-GUB-&^}QC1C_D9@q-1_VhIl!u5xQPDLd3yI{(?1qO5iiRjDVDnXM
zwZ#@IR#a44sr75IMMa<%6$KTQDqp3#G0{egf|g`|?=y4n-Fr8?d8oAi*Z=o3u=nhp
z&zv(eXU@!=dDwfmsRx;P$%uY(ms)JNuTgi<>bYyn)wNcYly@T_i`^+lmzl;3?FbBI
z{a*D|^&d?~);%*-ni8A#qjqOM7@#}$dn8aNCe!^%+-<8_#B~jske>bbauYhv%0q>U
zE?52Jw(94UrekH{e>dtZTu&CH*(ymaEvhH5g|0I*plYg{q*kjRIi?<%cE0+aa@)g%
z^YBcPQ&AAZd|Yl#DaWYQT3X!t>c#7gSh+ac%*DHTNMd_irFW}cL@oT;S9a{!aqz?E
zKTWKatw4EFrCQpMvWZ$spv&(OTZxTFv?5PBR3+FtHi4WAkn;3B7eJPA@<`n;zej9X
zeypo*w^`3Tl(^f*vivGFCKjr3HomG=#I))f$pKP?oUa~%H;)HQs%)t{%}^amBk?Zv
zlP?q9Nm^=AM82p+k+JGajgZlQCb5(|PR}J~V$J?c2Hkzz)Fb;O7qSGctZ8M=K66Fn
zdYI_FSD6p-``7OreS-OG<tHweWF=x3-B{VYk*&%NI(Hqd+4Jymlvkj)cw(6NRVwk+
zdP5S-+54ZbS+hP>&9X7gVwzOhf23YhZvW#HQDdZT>mMbcGj-$pZR@%@cG?lCn_qlo
z*3HK1#T#R`y5}~i81;o>gE<@j^L1mkt^ZEl^q(A6H)#@Jw%J^4LYy@j+3glIE%%07
zLW`B!^x|Pk%_mC842dlZcJf7c?&?;gbf&g%d{PwdUYJamX8qk;;^S&3k3RMpIqn~;
zkA3Y4UEA}fN^L*$pRer%-Sqw&we9X<nWl+npm(5-b@#W&UCKDOc&U+6)01yDwsHo2
zv~(2o%PaX|f%TofIOXY`_AMTRZ7r8y#zBx(jCA6DgdTDH(lVvyX{T)V{%|vX=n#T8
zB^`bJvP&FUSUwitN(J9YaP@Q2t8|&Kx>S$TN<&GH>xz6_*`}FknX@DWW5nLGUdO)0
z8C#ET)t`2eAA?wBT|O3{PFc9=Z^(BUSjEiiSJ{~|t*f^yQ#YE)^d_0=$0bu~)sL$p
zX!#s=WcIaLO+&2#OSQ#mEAJ8c_{4b!B&Sx(TWIShCTpJXth6M|)OSkI%6r5=0u!eR
zvG;u`VuvVeNU6z)6eDG6uZg06J^0!Kd2;>137zZ2fBsk`<3V$PojgfIw;o_OF@cej
z)oRd~r|QeC$P6Vcwf;3Rq3N3<uFSKIlqb_1&y=^C#bYK;k~R1?qmAvdtY#dnOP-VK
zEj)HbRkA!M`B&n_sOq)m#wj(+3DZ#*Gaoji1{b)ZEv_okQEsj}OGn}S>byKFjyZwO
zw(ixm`{t_QnrBhf#0ZbqilcZIRi#?@if55F=v<ejb$?VF^b=wrZIoQxD`th;a+aVX
zqoM!u=}RKYJh;d53`CP-6P9kSI;NVK%X5~PRkIV`wphfP#b1gib!A0zd~62GBXM&>
zkFz~4?CgQAxco9l4|In5fvDAdF1lE>6DN%}Te|jV&dOPWnbs;ZMJaPPH&$;>>!P{}
zyTed@PSyGLz3%9+2x<Owq;lv%wXVuoo!`%L#Q5x}X6MIY!dBfx$J_ejpF7(6(sM|m
z{*F#I=2sqW-I$jkBX(nM*PR&TJnmETv?{aotMS~4_PU3oRQ6KqH>mn;w|h9DL*2uL
zs(X-Y2fGJ}+D`W%Q99c_2+w!z9zqXE{iW9b<f8Vw2bZHj2N7SL(wWpZTxj|ZOaG5=
z^}ptzOJ}^lfXbQM`#W878Dp5(+`gl_+wmxrl$u%NMNnIoMMp?KXw<)qNpvRLo7T2&
z5ar5_|Bcb@5+y9P{)_CkYe%{kMz@Zc?|95+$#Zh;p!rJFcFb3zbk=-@=ewG3=7ZXN
zcS?P>W02N>#ZOspKa+il`cxKLu;~lPM_Z0ogUfOTjgwW&7)%}ScF(PsOj|D2M`Ohl
z&5r#$JJz{-Bj%S<v(hQMong$(fgYtgIw~D~fg|&_OKunEJNlwWha8Gp`oI{P<0q)U
zGtF_}0}*{#&gMR3#Og)1SZkx{*4n5?4rXuBvx=X%+^P+0L~d&Rl}grdOo-FR^86Z$
zR~}Tfg(WxV!-)8;0?X;kaIVZn*hyAG={&GLljjwwg}UWx6?WP3oMr4MF^|q!(J+4b
zbnaKEXZ%t_t;T%m$s$vOkxFltZ*wPlt1ex^qrX=e3;!TeWg$0Z>6N2VgQS6MUWbyv
zntjxSqvIxBpq?~in)K4<ENW^rw%3`Os{U2$nmSk6Z|jb8dwjv{tV?{yg5H@i1piIh
zZM5KJHQBJXKb9=pAIWM;&2Z6Un`4Pt%N(lQ9?O;rf2nP$r^=MJrEL501T4t2^&(HI
z6jP`ZQ{cX?gQhUZ@f@L)nx9ZH)unZqLY*=Nq$2IRR{m_I4y*E$&ZqLnVslz2)>8hX
zuI6*&{kq7#RlHoZZcV9z?m5lks=@XgM^CL=sk%^eZ#6d8pG?{&e#l%5aHsptYMt&H
zRcAWg1h-snr8Vh^F1gxjJYT<c6mr{jUT^$Rgj>xnGm@7$Yhi6EDA&yBL2ArafZ6id
zpFCc+)w;|6<OvP^WpnZeY))34=*aX7JiK1bCR7n#tkXj1kU6HAL-`oPgtRsAefg2I
zJU(>L0jB3%Ohe)^b-ZiwD6Lx7^~4CQ>qAr<zX$NP>H#u-5h;i@2)w7NC%Ola&Ccno
zm*=dNj(?|atlM3d`-h*4tknAJgkOF%y*i+`#Q04v_0zyk<j%8lRx@9gN1GC|tmY!E
zZXs@UcU%cw)gx~#B|Lc^O86V9?TivmQyF*r({G7g$MC1yQ^N1=(@MBX_`jnP+(XyR
zs-R{YTDs$03VL8<=L$MXWzJpD&yex&6!b6m>Vj4X{}C<dJ^Mtm)mikSMrmB%#YFbK
zF9IzSxrg@y*FQ^R>5PdOs<dv+J%x-|n&W5yKQX?yQmx4~xthqTpJ}C?uUPeXHiX|?
z&SNc2-Q|vjIoda(Yf5f7#fmY*@{EQopS)XpMu}!~x>z?SA^&c3+W0r8u1bcZt2?QI
z&gg3QPep`VS9c(zle#KWVp8i<6zhLaSMFBlQMO|m<5J(*=;LOZUT5^N<(}61n2(HD
z`q<MM!E<8>J~^J?_6O-5??&>OQnQ+(wsI&;cf{ou$N@5QAwGAdI?(`;h!9yohsXkY
zZs^T-oboSJ@+F?yua+-cja$qVWx-JD!OFA@2P0odx&6bTR;Kg|>gr!7pff5Pu_}@W
zYrJc~$iH)4d~kPb!FR<IY!yqXGv?;uSeLH)4zr3ap04SHDQ3BqFQ(o)To)7fM6#Pw
z^MX>V$Z^!g&CzwC9r+F?@$uWvB>Wvp!gM69>i&ALRc^Do|4u+>s(a#Hkvv${eOM{8
zwR_X4rq}d8tpz_APjLIyeVI#F7w}V_Bir<@ek+pQlp4{Zc6uGvy*RqMqw1n`kd-O3
zE@l$YnYwtcE|LeUE-I8&e8;*dj3M}k@dUSD7cadT$!AK<pY38FsiybpZl`>|k{{Ld
z7Dd-ZC!5|}R}!8MB@tEKw+@J^?g|1rQ{AuL87Zb!-M1>k`;OIJ6+>`FJi+Z(_glLn
z`An(#&@Oh|>TY+k>wI2IO3hE(l~{k<S)EgDU}YrBmTFH|mHZu5dqNDsuM8AJh#@#y
zwQ|JO_5?Tqb93mXHzN7uz%Qk=dNq3`K@7h-WUVu_tJ+ML#ETsgV-Jh<XPntN)%IQy
z$+D%|zp5IHp@Ggchd(cGEx0nC;Aqv#A!4U$7l*vg=MmIoQ%Xy<u@w<5vGsAKS9eA-
zm{M~nvptFRJ2E<_+UI^8Nx)KVg{r~tsM^99f`1rKaI_-in6^{3i$X6so{ExE^A)AE
zRQvB*ZNMe*5r@Rsl~sS^8J$z@tlHM9Jx<v~4Aq*Y>98Mn@~aWyDK%e^wN}1Edv5!A
zr&~%ieTUNt=uGRmby*}2mhB8zCK{`N?RFy{z7i3aQj@NVB-4$!eSRm$--aDd`7f)|
zM-B1qsjPedD3yJk9$#hhj@Ib4{V8`u@?fc~i!!~|DqE^gz;minX`#cW(bZMXkjio=
z%Xuor(#e{paZH=#9NVg#vu|%*&OWL}TbDCbJH4^9W$gFYi2RhA9<j>!U1v(0UUnw&
zxY9_J8e1h1<*vPdYLpsZA)s2Vawm4S!~<Q~NspDC_9hF{qO&v3&JM=}J7;9SR1Yn&
zmIHrrniMojJKxn`KHrtZm<}ZoRRIO3L{-2v323(`n&C?MWm|1Wswc|d?li3mB|l1e
z?e#<}yip~)Ndnp}+0Cw$58LXATe5Z~4sc1_(7wb@8rnJAoVvO~$?v4D3i?IqYMKN@
zm8`X+Jk6Ezhql6%XDqEnTYSV(?qtcX+3GCWG9|y0C0lWFRLO3VfObo^z?E`Z`z32v
z;^{7l+iis(DP0YI$*HR{CBKupDmW=hSJNaQs${Kw`bn;ozqJ+K(H7HM;<sCzWqG1~
ziJi2ot}gj`N`5DGHL7ovt}-PcN>{C&bgwJreYV2mT0y%KUwzT3t5xkw?4+*Ve!(e!
zl#<^`T^(~`l&%a3h$>m@ncV?b%3E!P$F-|YmaO@CXUR&G{7#l^)Co}~%ank2OLl^*
zWQT0^#4TC761Tg`vc7$Zoz&Iqo1MCvrsQ{0SI6{;(v=|rQ6+0V#(eHd`F&gAaa&9$
zOLp+j&XO%v@}o-D%8Bh{602NEoYA2qOubk;3UB`~N_kr)pk3wt)|K*8b`8W;Ub_-~
zE{Sv6m)J>N75&Ls9Y-tqN4Pq=xsuq>TQu8V5>eH0>G4t3F-iiWl-GJ(JJpqPmP+|Z
z&fm{^&Z)c)mCZzzti2gf@VKaw6-Yq4C7a+%xy-iKj`nD+b@lZoXIV~dUt%W>E$nzA
zN=nUkRiT~K)um}sx*8<`QMzjF1N3#3EYCKjxQ()tCF}1h*|(}fqe}K&C!Q~;r=3`H
z+xt6|L{t+x<_A&AGbEs0<$d5vIn%b*xXNo+;!2mqckMcjE3uQ+@zeix8Zu8wY2Dp?
z*XlUimBdLMN+PN{YL1Djj-UiYDX;bDoa;*YH+G#KDdk=Dj8l0NmHa4MZf_mniPWf)
z-7f)AC2QUP%yXsu#<7-=xIJ1Y&El3nI7?Qg<ae@UZ>Lz9GS?utN<dV}TK7MzT`9NN
z6@R4a?4hTfC3`^0?_|l0=#u@TSL>3so-w@OO8HDj$zpF<baqMaufKPe>=k8LQ6>AX
zzG9IpiP8=w5!IBp9vx*Czn6e0vuJJbHLjGuwrk)>8T_3aoyxmU$v?u%JIj^C$POhD
zrMwl%QOdhX0-}`Hx=l@RrTl_etL_hEkN60zgkAQOQ+a+R{|GDZ^WQm>=+>bmqLeqS
zr&VsVLmDRmQOaxGY<s#2cc*Q>N6PZjTqPT-<VPv5J-7I#9#JK`K?0&m)_Qmx>Pq=p
z+qRBWS3An_^pupEYnA*?mTc`&Q6;-u0-{RR+TgErrTnp7@kgp;*KcrIW37_k$&$U|
zi7MG935Y6LYinHWO8Hnv$&Sn*a=YUhC@D3+SB4c;vhV5-p5{todWVuQ^<phJ+}%A&
zdACVGl=4~|{8(4Y@7uO@q|9RC6Hc?ZRmnfX%KP|nXA-A$D2XWLU6mB2ya^HzrM%W7
za93C19<|N)NcDrsu98hw@{h3c9$D{H-e<~)+DjrzdHuRYDX*6Vw5z<Wu9WB5=6j@+
z_nPAwCn+_3VwJ4DnaG61sFIy00Z}Du-PJa_QvS7VTSux*ef6lb&T^Fes5<+uUhQ43
zB>t{yxV<Ez%%WG<DCIRLv{qj0-uy{d%4N1~9VxST<`Jjzj)_&W_I!);q#(*kv`!ht
zC|T>S_DxsHKeuh`NSVd^>zpMUt>j15*>@eMZgM5@H&w&!B@ty7%|?{+8VTTcS7XEE
zKI$>W!~dinKwJMZQR?cqsOz89^%-^jow}}9*Wak?8g>1-x~@{!JJofWy51(&hFj_y
z7S%N@tZSH8*AS>{sHkfwt!ucUu3=7HLt$M*eqF<Lbq&1FaYkLk^ty&=bq!PN8Ya~>
zOss3Th+qEJHH@um7+u#es;=R@x`yF(4MXc12Gup3Ro9SF*U-PN;nenD*t6t0DeJgk
zcl&Xm^7GmAb5^C?ww3{9`8_hE>&JJ>3#|1sJ?{w;$TJ)DlSI4J&%)&D>SwC!73!L+
zu9v85wz`f{*AePEOkD@4>*?z1Ro4^LRUQOhSKmurJ?fgEu7|rw_}A*%q^|PThPwLw
z>iWLA?orn_)OCltZdKRK>iVp@ZdBJN)ODS@{#sq-rHys<KULQ{b(Qxy)YUIl*PGRK
zfx61`!RzWv)OEJH%DWcp>gBypb@h4bIz?S4sOyF5nx(Gis_PJSJyTuN)%9d`?X9lz
z>e0ITWOYqaS3_ODRfcmwT|ZaXkh*@Tu6xz>Ep^?guK({cRqIi(yrrgQ0tP4zG&Jw0
z>KU)*BU*#U$S(l(!&hf&gw{M-Ot|WR|Lk*E+cbjRLbG`&^Gg4rYp%QY#p$(w=Rt=2
z*UtkFo&Q#|{G9iJHIH^Dlmsr>tpfCGZ>o8>Qt+(m#mPpnzdVn7Y@$4VoabJ9mh-4n
z2~banNS@bSJ)qir9<G^6ZytqA`n>s4YLLh1d5o&#i;9NuAoR?lTzP=`CN81Ox0`uT
zFrrfVsl17wsqsGvew2;#^oa9wJXO3WPGa-+4xVq`Fht+U!=rLML6d)o=HD*-f1!jH
z2hZa@puY2ny{b#)o4kKcJ$W3F$vk&2MZr9a%d>o1s(SUOXWLlTmFPDmb}Co(VtdWW
zcTfEnCMf(><5V=B<7^4#(On%ECH<(%02ys+IEu$(t0!hO=`V=?OzOL;DfEjL8E(i8
zPjBb3)>ht{bdJ^Q0QpWfbUyh`IT0q07Bs&Jqm)OIutO=hDWjcI+i%~J{CGkmaQw-S
zs=-B4!v(qq{w6hWG3KXi=wwwkWkWwuS##RZ{NsxhXQAdiB%DXX$wQ=<8_$PMmKPtJ
zQRe6<GY1jnQ|whm>5tWSM{Tz*ZaRn>=kt8*rsqRl%^IJ6p!$Wx<=H#2nGjmzrLrs2
zULu;PTOK7rcw@sEyjc+gmuIzyl!5c)@P^*p5M4baJwyvYK=tB~QMF55y;Mli0?Ek#
zy`dUTLoZcD$)Q7sRTY^Hsj;_eOGx(ErRh_&3{@3XlM7v-^&+Q_DiE>E0%5QRR^}d-
zeDa(61GNd3#0>LQbK7!c6sMW(*F-fsl?hL14W75Imp(<SC9$8`iK(htzpF!4V=~`s
zGppJuhZ)t&3wrl;$ArvSzp!KNl=4heN$@cK6M4}9Pwtnu=ZIO_bwBd?c_!y-oAZ!x
zrYQNTF5zqJC^>_P(umUS+P^>^I*=@_0gGYX${6bm=uf~QXFyNhBA^+}8q3p->ej`n
z%7D%jVPY+*(PosllY)fgY0ng7`hk^~B=WrZ+Pv+_^)Hf$Vr!Cy#f!ltPLti1np6*B
zwMNw@bt~<b!GNbstWiCkf4}N#Q!7oy{J}2uWm4*|UzbvwaRQm@t8_kT@=Y4BYU1*a
z&s2E@9uX<X{)Qdut8{&KM0yCasUr5&s6>3wY~3Ta<?JTqh-vN7cQOhSXqugj!`$r?
zVwznhp1oyu>%{E-2IlAy&Y=LRN9cjFtol_E-?t;?OG%S;#FY8nx8)>DH+<{jWT~8#
zJJzExm{rwKM<HG}-*7thu`)M<7s@`rud6&hemB3fN0XHJ2WC-tIXF*$+0*al-8`_d
zdhu@FOEpVL+QSPM7xyVrnUEe`=XRlF;*Oo7ZV_bGja2GxRkiya#;;hvvRPLN>m<c0
zvV)V!mfh#jXi|BB#z^(Pf@H}m1|zvX3w_7~(W{!ITTRn_h*Xj?X!SZq`g?h0hQzML
z(&dc@O2Pp(s;hTPjyt6K9@^wFGDJjp%~5GdE@dVuv42l(o!qH5i8*+dD=<@#<x8?b
zM!qmlkN8n&ZJnTEHHO``_Dky{pr@9tZ|m>X@+~8;UfgI@nW|0$(yD$&^wsw@QFWs-
z*u6X_O1(9fE;)d8@^)9ucy9wk^j`DrvGTfC{Vee}<#n+sOEXnU`&8>m4wz}2YNzp>
zr18wF7@rJV`$BmK&0$nH=$@)yNFBLTYGt3PQ))#ZROP6Zo4+-=V$_PnR<&YDaMa3U
zU;h_tWuK!~_DQV}VAhJhHJvqUAh*0UJ)Re#GOGb^lm>j6twS|#1Ye2KfK|k4c0|>H
zFD0T_Qk~2aZ0j2NLLe>TgVyn6L=v;!R-@i9`ojo(qYY!rR(26ZcWHZ=W{;#CO{%VX
zbI<C1ht$x2K&;1n%5EKv6YHYwQUAH2q)P2ei!)5KX$<kU8=aA+>cve)aLV%IvhGR6
z>JN0;`JnzrjmxmCMjGXJnI^DAT9OqYG5!$=P|ib0o(~&I`jZ>=s~U1bx<KL^n=cwV
zUbMucvOLxcIrPh4OsAU8O&8qkb=6>RcD}X;ptK?VYn55>*Ol^lKMl6I*O84xD;u;p
z+_JqXcig37Hfrz3bno}3+%E4pmli0Fn69UUl$z;QpfrDcKOBH9Vk>_qT({|6(%vTg
zRZIY0)1leF{J617t@}}{{?@qM?1T1;kJD)NNWz0?Fa7t`NFe*m4fQDAoV}{cR5n6K
z*%-?Gr`5EEs?JjTi&g3BMy1<@Zb{xYvp2#t>MO;xd^##2FZ3x2<4w(tq41ZMz;jj8
zF$FT#O2ZOY6M>QF|2WWE6i>|9&&#|;+9cibBk|YR;``bXKM<3lZ8jW*V@C?%26?p%
z<u{y`^LV+-a>Q8d{(H#`G@tV13(xMFJS$aReZdQM=-$-?UD=PU+!&@MjgX0n9yu5$
zJ=L4Lt0uFDk)>N9a+Ia)K`CytvWNYhA}jPT`K&$^t~!AhRkWMh552REuEBbX@++)l
zFl2{Wtdh5q%dE5Lki>e*8S7zUN&TuUsOBPXi6<oUh1#7eS50)kMUpFdjq$$FSDKqZ
z21*Iq8~RWOp+T#8cPmwzvbq(O!@fgF`#fjbXQ{OJS#Fd5f@1i>%jOf+7qkDA`P4qk
zHur5)gQF;c&}~a5kvaQjrg^h%i7b@Z!BRc4(qfK2qjh()Ek~)cp@Ii2QFz-&;I-)L
z1vHph;tjl%8FLC9-l~+V2VGRJIwEV(wOw8-pw+Nkz1<^5240=B6F+EYzngzd?#+QY
zBnhQSLZQ&zRzjg|V-sZ=L8e5JzAq#r3ITSKR)C$P6;QoBO_Ef%dT^BYJ?Uf`Lj$a2
z8Xdx!b<qhpgj)f&a5I2ti1Zw#`iuyV@{&}Pki7g!yx~T1&}Fu}PtA=9q-JF{H~J7|
zo6odNdO&^Cr|1AyQgkaoQI>pLCq{D{IfdOd{v2Rvu&k|ouGuaR=rskzQBL(<o{L{n
zmBy`Y!Usabbf9XHmQb^~*FUB8El<?WX{^6T-8I^F!F*L-j21GVtV!GD1<cr#ho{#M
zctIsqv-#%hB!**(D?K`Gx~X<Lxpp9GI_4IxVs@#$3>7&56_Lrpfm(s8a~gU2c_V{s
z$_k(K0qVu&@&+_~-ISk<AxJF=MHNlPW_gTbW5Znaimpbw-4~w!v|pE<uQOaX(L=lP
zETzI1P7UQfugYb%WtqRYBaTgMIHP*;0b?P4Vw0JIET1S9hA1$v8@qX>OW7$;cgtoN
z(yx68NcS~?+faQs<@r3AD;R;3B=B-^cebQHn8(cnf}r5u%a4<94+xi5{&~7RKOnJm
z1QlN-=m^K_2wPRcG(QGtbI_mW5=O6<Ol7{Hqg#beUw)iJo*Cztt~mPb?E0-#mgZ5p
zel?yE6t_pF6+b9awrVa_ctY>ZQTHZChT_<ND?SO!u=7qT@(i=zUD)q8DyC9o{Tb4g
z$!qp_*<PAabyCsrNW`xnaztzq3+BDqJG*Q)U&FLy@qPpUrZ<4;he~JH8xv4jYzi&7
zRq<P8KdER@ME1{}vVV;TT9!Eu90<LuEkz}8wKLI`yjl!Tj=qBT*<;$g&z=@aznUA`
zrIm;WlToxjlFl%lj>^%2(BUPK5;Y7Keo90;gfh)%Xy8kl>TLMZTXi;k>06tNvD$8{
zS_DE})ci?Bdm~A0TN@Exe;#_3ab3M{OuwR>oZ_%f*Y%_@F-}>--6@_kh4L&%zt5r!
z<KP#njmye}TJx&IVQgy1Qe3jWxBOU&Ef%JDmu?RBE=oPyuHn%-C-wh>BpMLit5gc^
zaMhnk@rLBk`?r`iqeG7?%8oD_nz`Xh;pF}3sK;IfvGS8whpt$o;A$_PG}Y!UQ}?Zk
z{HNJkF{s4g>3FfU@(VMHl-)9Vm!20yGU$8Iq33O?h%xm1nP0_HskN<VdMpajWb3)H
zVT$5H&yB70e5M{{u<4lP*kz@v7PT3V#L-uC<@GV+Kd9roIyJS(eo|5DaJxQBf9)vo
z$MH)1uR;~ebnY7FsbV$S#cFE6|JJsk^Df>#c8%^*O^Y(kNrk0>9;d$vI!&xsTbnZ4
zrqG7Prh*Sx#<fNdC~D@@IDd&^me=j2>u>PohJL3r=?M9@K*>>3J)x_$RCC;^W2@sb
zi90#D<}bmXE3=m!&fFIsp7`OvmQOy+qF#8XG8STNGsd#}@eE7Ywr}isPhsds|7Z@g
zl(a2p4-se+=28GnXm{wzCOxz_b)g-Zeff0Nyc9g<3v<}o!<v&3JeQ7YWzJqkG@9<7
z&~5*ta?k9><UEmr2p$?bQ6Z`%X8%ZQ_Md&6cw%hm-1Eogux09@cR!c>S#x2MxS<Q3
zyi7ZeapbP*LMvO1p@((2srz6i$==W<wB&S^sC2o~pB^Y0a%wlkG=-kjxnTxtra8i?
zo@-R{J4`Rush%C7I#fshq{i4P##qGhe@EzaD+4?6L5<+GN-uk~UUr7QTxsehI9})M
z<NjvOcFVdOhKQ4YD2Z3Fh`RRVhLXJsZ#d2hsF|Px66Hmobie+yyP2B1=2?g4)_fLE
zb8k~9JL99Rj5mf#b%89+rR)4%WaZCZ>}d-9w6D&BC~bC~^>6x>S6p7**mwEN^x?~c
z=~>H5(nl=MP9L%@JDtJSFlyebJy`p0%ChI=d$@K$dTlU0F=g3LxrHThd2)K~TeaEg
z$+a&L^EGa(dX0R0-n4@UhkjQ3d_#}fbt8ApOCS2#(7)7fUp^__Q~N2F-~Hg8>Nkvo
z?^bW=d(CyeYhSEe89d!cd9I=QtA14#BX?DLhW_RJMd``&cl@vFV_#Bu&0nf|D(f5i
z2E)noL*J-vg1%TAs{NbXH~ebl#?vLk2m7WU%uDxF=cOka2gzambR55x^O&Vek@y}~
zY1a>yVA6fY3sY@<?YEhsT_4pxzw6W5`lH_6^-1kNYoD)8OJAOsp1iA}wtm;g0v+{M
z?Yks9JiT^T?bd^zkkwO`lTqMLMs5ovj@%VIruK`WpVg-#yUxtd$|+$&S{To@#;0F7
z^fS@;0MwU_rY9j`ESjHy{$8k^iL^!Oo|I+3Cs#FZ)KbEfW%u!&7#@|@r1aF<rrMU;
z4{E|l@K7CTRX-T{#k?zPzeEpj)iw=%qv2@EJM!SXzKHkKep&OGL*oOK#=%pbd%OC}
zezmBos$}HBl-p$4bL2ZIx67V)?H<aV*05Fd6Qy^NPda-ft%kcqukTdvG7i31e~qb6
zbnfBDWT+X{Nev{|59hA->y?|%pd5x+!LwezWWJ1+caeeKB$itH&aO{Wo(4PWZFRdS
zJ+1cOt`7<RhYBWMD$4&??KZ07_1bsM;G<f0?W^5}0rsU{P(|&ogN5m-BdMO+*DI5%
zQmK~Yv$E4uPozAsZABw}QKKibsn1_UZtvRnk@wB6Q0+HIZKa}{YTvEjL0wTWGryUC
z?b9MkuKz?;VV%`pq^-<MA3|}4BXC5`*VLV-_T}0`Rij6~mU72Sl#uq)95LF1wJ+6f
zM|odiSbJ(;gT4s;Hqr>R{f>NfelX>^mg<B3QkLF}kUxs9YQL#{Df3_C^qpOwk=uPo
zeO~*HYISc)6{|2&Rp=;ICu%=E_;u}@wJ)NG<dJVyri$gj^YO^7f$k&Utm<0b&}C@Y
znexh~Nx>Kz9{Qd$)Uscy`XKRLc@?`D`D$hI(D%+K`II}Pg8wLOwf;=LSv`wo@4A1<
zLtm57SJ2eg8?}?Lb?FlRS(~MLm8!njY;Ns#4EbQ~&Y^Eun$h_i`DN|S`O{LK`&4>~
ztIwx-r`)!WBu6Hvr`-NFUqlm_PNL1G_1U@-#Dc%7-Oguc!+mv<p3OqJmJd(=vlnr-
z^_l;`w!W$TQgsP0pqsRGZayT4R7fcqtEsQuO0V%v?N0fA)E?~lOX(io+Vv6YPaOG{
zGK$x0U##?09W#;)26|$Ri6<h7KxB9_-|h1%{7ocPFA44X{HUFd49zn#zv=Uq^tqy{
z`rfV7tL!oK!#^~KZ+)>loiyD)UATAUQwK2DQ27RqSyVUiHFN9pEeSPW2m22VYkkUy
z8cZJ`pXuRMf0Q`Y+qy8qj67KNQT3K&tDpEM8;EpQtdBh{X*{?|CZnEfWLq)jUl$|6
z7&`2{K|}aA)CiOp%=HJo1(p8%U~zewcXobpiNA2rph3pv8VOVt6!-&y*;OSa3w1Ps
zkz7z-R^~5IO!JF_Mc!bM-y85(&hu9~gqV^1h2CJfBL)I;rcIkV&0AjKFDova<JH-)
z0?WL!ipvTKj|AkCi;AE#QGXzqKdYoTP~<N>#h4z*pW`28^tiITa;`T&;LRJKYh|Xi
zyb#1Nj+!^8#5X@bQ0l9!Dhn2u`n>}Kiv|wVS@uaR@4yNID#|N^-mF}%V~qJl{z|{_
z>U(dczoOC~@RtPxsxT^QuqZ$1onKy6Qs|xK_mZKYzl`#t%ltBmjaCZ%v-7J;g5KhQ
zcLaa#To#lRBhRaI86%JRWT~h;5cK627Ls<rn>B$u?>K!orgff=ii!}G=Q4kAzEYAY
zu6(vv#K+2P#7g3nUl-P^)X;_;Rp>zesESclqh^gNGIV-6{ZZcjfgXlP;9Fr2V`5ox
z&^xE3d{%ymx5%GgVcC-5s3#@B(ud+Tiu@%N)RU@S>L*ZM=@Zj(1z?M_i|51$@`?TW
z@`J%jA8~^D#by3VceIl7fZr%A4pfxnFZ30YMaNA=RnSN4DYS!TmsACcB6r0lCHBp{
z!dbrgmBqn`u+sbrLyXZk#~<{S28_Im^1PQ9msXYJ2g@ssKw$~8XID}*V{lP<sekZ-
zsvD}x2G1#$G%Lyn2Lf|^rNsr6<(5$oEL>QYPsqUhii*I%ipugEXrqC_^Ycq92N#rA
z`Ue+_js}}eVDP+B2^^@x<T9wp7-IAf82Ke7<pudczqiz1T3)%(u7!zZ^YTlI3%&jY
z{(>si_GyI$bG^l7v&(7I3#5_KjYzFZo+p+8)7V-`8s&|b!oR`O<G-UDOT~i<477q7
z6#5r<M~^mDgz3<&M3q^3D8H$^_(fK+BJ%XDCC-qFDDjogo*kf{Cb`*FWd#GrRODCY
zm--6)B_+PHs#5P+X0VQI1-o=9e2y+Yes(BBMpbcH@a$ok88*{Em4NUEGOb+5on35K
zT4n>*gGn1H+3A=J1I?zd)6jut3jVTrqIQh&!h9N|&!=yEv*b>x%naA+Q^DC+O&K?N
z;`qF&xxU=IX~yMw<HldgjsD`BJZ^^As5EDve?dj%z%f;W%p`T)W=XGHRpK8wrnppk
zD4#1sPTPiEMh#nA?G;?dN3OD=G1!nhAxn@hyZ7|dX>gK)#nCEfQ4D9<0^NX=*Veff
z>5~}Vfo1~gPHW!*n^oZRRmeb89BI@d?-UV0#sWT5OG+SF*5OfxiUALi@@TM<PR}w{
zv8o}+bLv&ArQHT}imn)y2^l60x%dk6gZU!VzVZ3X3Jt@oL<@D?DqO;S0sowVV@w0H
z+c}wwfMQ=}qa0*gkT1Bf!Y@fqoH8-bmop=GnlJCF+#KJ;vxoV{Pn~jko_EnA@4qSI
z;+#C+#gnF9IBpU;iY=p+`8w@Yl&<ds*K~ya+Cf%ft{69IdX8O?w(3XZ;&#m`6_2L8
ziqC9sWq#Qlo@K6ErP8bZ>Qt)}{r45?NTO3h9GZ<IqQi>q5Pw|F8iv&kFly4>NE=Z-
zc6%L!QB@YGs*nys9M1}WrSj!RdHrQ2`IU35L41&5R*5!j>uwg~R$;&z=*7<tsIgnc
zD)!T?-R)hKF)Gx`DRJpcog-F2J5qQJResex?Dj5whs75q&TOOZQ03b><OGU;B(8a^
zxW3uN3k*m9rG~BOa%dOE?{n+g^dU|E$i-u7FQ&f4iS?C~%qtaf1#@xKao_x2Ms8+P
zr#PWN{=7&ygW90{S=3ub|Kd!;zPnsxOl2lDyQF-+4V5tky9kr;&9H(DUqvMY^=!iz
zu)ma9-|$NVM5qcD6y;YMGF%pvR%lwWP|?!zc?_fgcov8VRu&WyQK&=|DiNV2c+x`4
zETBvwrOJmhd{WBt0u`gM3eMS;en0+tFwb9FG0h(wV&L1_-?f%z1?J~h_=<;~YpTY)
zKYN(rn^hbP6cx`7o;!R}K=Kp0zr3i#sYz4G&LB~);iEtWmBkgz!&Ip&79wMgq4cb;
zF8vx2y~gqo#$7mdTHbf{Jc4K<ySxf#FgI9fTC6c8e+r%HY-ut|%}jVjhlSXgqW((d
z_j`6FdQNEL^W|$1yoK+_?`;3mmc0KYw(0dqUfWA2^hTm*E@g4Xn}QykVY8y}J00>f
z;1}NG9bs1bB4;o&q!K@EWL!y!cbxg1{v=n;hV{L-s)8}i@Ac1<5v@J14oAF0{Nl*V
zY}0GcHobHGkvW#m7qhVbcq<*rk1bDgdYJ(FT@qy?-GOr1a@54znWgwTF_(u<F-#45
zvFLK+vMN85Mk}a2y%}-h+xdyDCv+1#ofv$rN+ddR^V`)MgWahMXPRyCv`R86zc#Nd
z5m9rpJXBVWmC1NKD5_|-n#CzIZt%~Zt;SV#DJh<1n8qyjqP6awoL|P0nDWFd{TG{)
zchjpDQ7q&sf7@;XcCP%)<?$v;^B3sMi4#!5s)Wn{W%(~2pOr{O{=$;-d<rt11wO@V
z+Jl{f71Ny^<mx4cO8<>j45Q*hq8(c5C{`IXl&{<(W3XzLgN+F+v@y-rjnrb(g&w3d
zGgy>jYNXOjX2emFLY#KmRMr|7(!%pAD~sp(M|tN^10}5H$fD$scJQHbaOF71V^-kM
zxM`be^NDveKxa*s#bU;H#?`B5t;<vCFYr?^T*1NtUMGW?+mP5gXp^UZ;h-M)n|N0&
zEMXvOF|RZ*$14TXxj15LRn+^y(m9o4+yhIMJ*)3N^Se*dW;KSTFtsu=1gC>;x<3oC
zR4Gfe<tleQjIwfOB`n6~R}_0$5}Q|C=r1%7>Jr4HudI+IxH;&WrIkwm99hb(^l7tV
z5-BE8Rar7BqkkZi8fg_r+h;NBz>Zik<7vl9HH81Du2j}t3ZiU!!C7jG<!oI>s!^BH
zESfV;AuHf9V^x(|09{t4DWK3#Lq%Lf14{6~F}lgh+<5%dak;*nD{`jf#n6q`eFdHp
z3;SC2MvfYM&EC;UlL|C&kVv?c`3gOqYU2F^ssWpQzyQexE0F`dX6n+CGK$Y0#{W#i
z$KsV4(HNg!rn+7xrIAIP^0H~V3o?w0=@q0yREwKlCI@QMLS`h4;cPFEh-#x(N(hD}
zRwnZ(G^{%@v;UU%HV)X%XP|=al!?&*I;CJ$KrMmmjA?}Uaq>pq?I=c!bT#O;6P9x8
zLd$Y9E8X<wvzTVYmM?jTif8r9roL5sm(KahahFe4Wu~N6GS^hqG03pP&*&dG!|HU=
zzs`hsz46N?Xh!CsIC@u-U3wRt>S<~LImj<AW8X#A<f*jc;2>4ig^VSY<qHj+FKY{k
zDOYi2d6^m}CDCG5w}0f?3A4vJyFAgusWOAvY@6x9h6Zq?)}yhcR{ftIE%ingIISC7
zW6B?tsk*sJJcgl5IXKqX9yjkuQ0^jz88@!P$uALgF4RhvIqe{}TyQG+i_0g&zgH<I
zpXS4kUcO@^p*=p8V^ON<E)3GG-E3)b(=3jxRp_LxiniQ=Hqy1c3zg*xng+d!vhqRk
z%cy3)t#&uCID1H%FHU^i{HlFd?f&WJW93sdzQ`U5{#mO!bnxofwyHXm-u!%41`5j=
zxTQbn9ItL&vu&nU<+J@&!{Pt6DuJbOhZVLNpK)BGnjSKGjrf*vWxKq~HsXt5#+X@t
z8Rl73VQ{Hp2|;`bEJ>?My6;$Nnx$or{1n~47b%Z4pq(Qbgk%j`#se9FuCx?Cm#x8o
zlt^23K<}nY8s14c7kXKpQ42s`cA?Ag-6{i;H8Yl1Eq{rr`Vb)7*KAbi<tp|Y+xm;<
zp{G}^hMgpHwDO7j<kKE8XA8u0vc@r7Dp3^Umo>1k`9{d#SkaWvu13ZfG5}5UarpJh
z&sQCi)}x-pm@c~=-86iwR=n<(qqlj*;bRxrP&LV{!C)E5S1@~yfrpaMC~(C5F1?@1
z9BgnI<HkJyVE+OZo&rph2J0-C#D^n`f@jlVqtl!zmrtFhy&#`5T^yrXMJ!jT!BZ`i
zX5fluTJDNHcx#!aXB2zvcK9vR9qYoHQ*A$p!&aJa?znf<w;9!;h-%cu`3{;Dpwcs<
zL-pvCS44y3zw8-EWhp;Wcn!0Z>bo*;bmuI2#CtJ}yb05C#$|iQbIr@~4q4ED$cP0!
zj4RHO#(ISI%mb{T`U?k2C36BGDB2rbQe0NGU@&#2`$DP}7p`Egnz(so01g%xN>F9c
zC@x&!&GKG2L3SK{d6O>pO_@H~D6I<m7l<9sEA^`HUe-|Onl|puVEh=}zcBNZ9ud5%
zEKZDoztk8aM`P4_k&i`aohP4eDEfE<%fjV`!b$>i*uehI3bFdmtgnhLW}e@tvO}jJ
z9-5&r9b&ss<jIUAIZ|aX?{yv(kL1S^BI&C8h=@p>K=GV18fgEk2KFx<$gHIQgi-w`
zkLrK9(c>EWnStK^Gp-%wHTnle>GiN9U#A>oC<#bas*Z%3RCM4NJe)$Au}qmhX_6Jj
z>5!7>Fe{$PCQ;A{^3--I&3KsTk$Zi{g9+w;stne)g&NW+NI`JHz%g^w2w}PiR&n&8
z4{o06G7XP>GENn6rb>nr6-n|w5nHf!h}2=Pit_RjZ$|%$0p9*qnI<pm0<Gei{t<0k
zN3L*0);e*_h5d!2tVD|P17&C6H2N9&Y`<JqtCSvPgTWpR^lp|nF2{H}A6ejW9q+NZ
z<2Z2qNbz!Wm9}^mE!B>1xh%zHv>R59=2XetAu#CZIPoP}Edl%2M~kG(lMb=GtYo2s
z&rSj>(aXa!@S6UhBR_V$_*u8}V#ih4E<}~lxn^$L$#TYyUs7H^x2nRq>MXzWj2$<g
z4w(-Y`RM~qO*w=`T!hvokTfE?<(Qb7!*LSNUp9whiP5vQ)&j`qc)M;Q{2gJ8@X=&+
z&I68h%GPO(i(w9hRizc9jJ*6g+6|0Ek>hov46o=xAY*{J#ug}I$8dmG?S+n#5s&fC
z!ti(EBj*lxVkIRGK5_Y+paYV#Kts=s1F}PzA4#$Q>_|@7$6~+BW^+Qb=sj$}oqs0j
zc)2!cuB%w3vzBV}7Y;D%7scRGKV8(#bKmT4p4a&#&gtekpHCH^^?d%$=Vb6{d~V}|
zS1sO|G7Lk!Xs=pF(t_Og1LRZ;Ub)7^kC#;<X_l%JlqFtYU|~R(Qihm&y#u^vfVY_5
zO!5|qGqeM7hQ*B|C+Z@y&W;-|5@&b^;+$j0p)U(uGlZd5GHq`~tF7jI*`k&ctp$3W
zY))nQe6y#Pm>kBkv=I3^H1d^AT`R)bk*~ueU(eyIGluou8O~0z9p@b3wIU52KE!qB
zWEwi$$u@L^ByaPL9O<|lHjE6ba_TMOsbzZI?P7{LSsgp0r0O(<c{hhW?Q*t6%v+J`
z59U->PANC8ad<3VHrVso*i{$3_GBJBkcm`DF^4QIV^qT*aU&~`k?kN>7u7VOEncfz
zRqJ2Y$qK!IA&Zko$meML{HVAZR-y1eu&Dwsr&r`$*Ojt1Y7P^2?r`wT5iYWR$`NZO
zyMCGR=9jkWzjdfO9f`wX$&Jn9@-2u>cII7Ee69Bs)2GvUip^_jQ%+aPvbai2l_7R~
zIuVv9)b2=yIEWeanyk2r28J5a$BkkRCtv7xM-`tt+~_~(yg8$06Q;iqA`t|Uz}e8)
zfB&6&G-owM#wi)9PdwdwcBXlDaD?~FOmr~M7c8%k$_<uqbW*J<s2R|pS>?fCd8xKn
zHT|{@akCCD2SvQIsaMORGS`Wv3uWFf6KK1}b!5}MlPw0RKFeI#g2IR5XbWSE!5IqH
zY1HgU7Fx_WsPDg{D_uy;-B2a-6$C1n@2T$t$8h6QM}}Dabl?NMLq&J4NJ?$4IECyu
z6mhsWUR>2D#MH6YhC_L?Dt+qYmaV|qdRnSijs}jgnxuKwQ*Be~GkUnI)>0H&=f@13
zk7s4QL~SnHN4W4U<vg@AG9ksxDsj)Gc9q1^;s6T|1x3`2SPV=ov|08s%IiMICQJN=
zdHz{vRyBU}Q0!SUVdiACJ}6ChtnYO?WW#L0tR=)lg3Kb6j8;7Qpk(C8q|dD@=ebHb
z++-fCY$ZmLHbu48P8E}0X1=IW7Rm?f17r054!sQU&MwJkH8LQBG96G`C(uNbb6Cf<
ztI7%}ESCLFS;qX4zp~u0`ZZi;%M)Tz&x|ZRP9h)qWvNBwXJhi=p*QLieJ}B>Pc)zK
zSiBO)N}QIg=1n;69Ga(amZya_WR?%lYeb)F7)$tg`MU3UE<(p?+BA+hAMo8r96mZ7
zaPxOh`^KB`OlmB-V61tz&s-c)-HYBwQLRwot6t2+Ws>QH6{hV~EkCK_nQEz2+bRB;
zV_O_25qYY8nk&$1JH(n)VCcH;oeRBYUl=RCyD!wg(P~RRE4pk6vFj$@wAu*I4-~O8
zW;Hbq<jPTHM{_hL$##tjwU(Hz%*IYUetfHzl`yejHE;j#^u?lOe<gh}%NYFT%Iqt$
zMtkMRMH^+b@@$n|2E9Qs;zyRfRc|_QjP!%{x$nGj7f#CY<xI+%tj|l2n{t)!qUlq{
zD=*nfUmufa%`?W&F|73u(<x$=uq0T_;TNwybsM=?Jv&=|W|`v1v`S^dQX#4?RNb}1
zV+{yquO_{FySym9yo4d#6m5&ZfnueI-xXNpYDX7Qa?C!owUmyO!_u>(Mx#m|sZ%A-
z&b7s9wF66=b_DH(T4k|=qxsrsKXG|lrKK8^8bzpuPUn*WK$pLxyjB?;T5FZph~AWS
znr#i=*U{G051=ezmLg*+M3qUqDADmPWmw^kOt~2%InthwGfPUo=@40h+RTtuuW@+V
z$W#<ZBv&dArZsme4{><f$U_uIR37x<_>T2KmLB5p*k%!Naa_OrP-Tw8t7|U~V>{`Z
zN{-9iR=TEg{w?0Qa9MsC4y#@vk^>R#<hPBwiqcM0U0Eise^%2Wvr%Pli*JDC9@{2h
zbr0s4XSQ2+nvslIWp(}H$DK86wrAFp-SexwwZUipTrheh)cI<IFJ6)2rxz)XiX(0u
z>WEil6-RC8**dejkM^2?&U<X$Hq64!5Xo&Dex;fTn+0*Y7lUlq+o~jXC(W_I^fzZ$
zmX}&3b8hcPXHW(rmb2y*7swB^akkW=Xd%b`<UA-o@Z7TU`RW(^a^A<BV`vSSDMd=6
z{NobkvUy`q;v*~n<rS)2{f7)&z*I=g)mP@9&sMAYT3%xN+on8gnMT%(6{l5OF-9M0
zyJ~>79AbVuWgT!;CdVF-9ARULpJ{-XUvu!24X*^sdEs(Sa976VXXjG>sTCbr*^w0<
zwbEn#l)8i;uy!PUJ*AJ%Mcj1b<=e|jipsHa?Ao5c>*Lmi955Tzs`!>&s7`d0Ig!>q
zsyR<pKmD@}&y45ldR-CGLErvKo*Vvu@Ok>QBv1GBB+pfRHt~7?iX_h;^O8KD^64`@
z$uot|Vm|BnyvL^p_((oQeD3Cx<=3CPW+r*8Pwurzo|6cV{ya(eM?U?@y<YQOl%M2z
zicfUh=zA-j=<sE;l04BLXPmFV|5Klr3z9tYIj=CuvzAX!%A98E!^-dXG-4zFU(m(Q
zc}bp6o=fsPT$<z=U!LUopaT00Bzd+F7X3LXnB?(PC3)UlkmMPBQ<CTT#Yvv3TarBe
zZfzYmnzwItlBa=Bboh^Il03KEPW!wg$@A-FNuF10-ErRkG5yR6+WVbJp1=Qu_RhWY
zBUr4@?*Ac=cPDv%yb8X1l00&6g-N)4#{MkHbIQF*p1k|0^PeYqs(+E>Id*lDC-HvL
z=-{WvuaZ3bJNQX`AjuQ!ll5!TkMSvb5WSe63)d!j{@qX6LrEU%^Vn~aJpb-z)Vd^3
zyieLA^d)gVV;@D=aXyP5qrZ;xNq#)Z^RfBa{6vyRK0kj_f8O4Z<dIL>@AT)gr;<GK
zIcuZ-bo)KFY<~LwA;}}3tDZ^n{Pcg5JQdF-c^>~`lIM<1Ngi=Q^sk*wcZ;!2hlyWp
zJ}AKz=E7|z#iJc)wiorUp3GZzKh&>okJKKA<BS_A3{=7g^GjO!_|zSXY86I>dh`fK
zUJSL%W#0}QQ{tZ;H0Bf(`*;$BoDKIW=OIJBvU9|Pu}iCDK|Nzmflp2pj5ssXD?x06
zNR)wN)Nl6H_DzgfS*;?SWrlEQt&;4hb9a)4I%HMFQ+Z1{n8aGdgvrx=7s(><H5ZTf
zsfSKo%d$;Lp&Tz#E~otbu1s8i^{WB-&e_Nk^&lrJ&uxh{GOQA@+b1PrTg+EJ>js^H
z)4k`ZT(AKuZmJv%R7$XTOf6)x$D?o-Dx<X#v!M2_+<BQs5anrRCBv1FGoBPuZDgQw
zIaB4c0@&A+{7@-TMc}knqyUxW<w2t)p9g^02_i@m=J26pnoSDMgUL7X71aZsD%hb7
z$}Txe&tk2kSc>LOmez?~HNb1up1vt6o>NqsUpZIbv2$EdCPy!-dKhz1Dtv6Ei<Hs*
zOJKFaM3@dKFDR(0DE1f1T@Mz3<@fErpe*A{NyP>^o>*Kq*GDZWdz3AE^=ox)Jv>VQ
z^Th;xvkUlbk|d?0M!xf)7?Fdv)b>EJvUKa*l65weU5(NT_A+M`m+;eWYd11tf1)CF
zGEya*!7)#^3x^IFHr!#Oda@!b_fl2jUC;F%vHi?8+xpzu1+tZCNPSy|Wi=z;l&RAu
zkDH_pvR*#%>Kw6U-N0HQS>78px2Z2>aq2-^a(0lw3G7Hr##YSJ+}7+&Su)#q!SZsi
zI&UEx?{VUC=8pqj)>AT=*U0a5`Nb9XW{1j-q#WQ>`}c9=sH%=ya8PFp;>1@~BAY3y
zT6E4`^3ClR*&8scpOcNmH?!!>l3lh~JUmW8ou*)0O#K8|{WRF2k61kM3S*T;b$T7h
znHAsq34CYDqT8O@Bkpkd&7;At_z^{^-8bvUfAZV6@~X-LzuvIpPXCOKBjSZRNS(Yj
zf3%=O0#&ojQ}arcc{Ey|a8)7dt50&lGp00;4&u-g&nR++kf1u)t@zmgl_NzQmgV#}
zPjKsUV%PI`_A-oj*r42bU30jR@Bi{Qhf`B{f7a~ga29mioaXRM=<Co$(D6mh;nmRl
zpqrpOZ)gthfi9fe96kiCC}|G&PBo0{N}IzYpf^HiK%a*$g65UM4;@?%KlJ#D=I~x<
zU+7`zd}!Ze3}Y2E3;J8=Olabb@I#+~u7Umyx(S*ZfFC*#dKg*;?RzZg1mTBPLuW$&
z09^z<uZr}cS3);IAA|0NhM|X{+4JE40naUhW<gg#XF?x<E`mM_T@C#Jx(PaHKK#(>
z(8JK`1@Nbl9yANO8#)vE8FUf!sD<!Dz0gh2&CtEjuYUwT^w!1A;f&)9<L}T3&{LK)
zhfAQ<&=t_X-r5{q4}Ge-IlKe96WR!Up{6;Ue7s@ox}!Nf0NQ6+b9fT;Txbc@R|`M1
z$B*HM{s_7QI{)tGa1->ZRn+?rsYmD#Xc(Fc&AO*KTmhX5t%KeM-2i<Ex)XZTPvM8&
z4o&S%`p_ZJTYm;WbQQD$`UtcRx)Hho`XY2E^i^mR^l#AAK8EoLbO^NHeegps`Z@g2
zTcCB&+kXi^H0f8(;oZ<d&;!sXplK%<#`$ZS!^5G+KhPY`gMJAOLNEDsb9fch58Vh&
zeGq==YUlyz@U`%th@C=*Lr;DPe&{M_5Ze1U@IxPfZiHq$3_o-u^Z>N`I{5n%4jm4C
z1A09)^^xZA66i4K8fY$bGjtwwAM_!paT4|QXmi*Lt%Ht*z5u-*+5}w!{n2CaLtle#
zhNiEFAG#1~oNO4AABP|M%O~K6u7h3={T*}(^z{w!L;L*}e&{zF;fK!rJ^cL)W6aa=
zL;LaY^=#-IXd(21P0it@(3_xZp)W(XKu_dN6d~x<ypzSlc>f$U1A6`z><;?B&=Tlw
z=nCjc-Y~NsdgC_i4*E2-5jtx-c6*9pJPaKGo&Fd2q1&PI8?~oih9CMabUpME-nX>_
z`aHA|I&la5ry9mf&;ii1Ux6Q50WE>nLRUb41zit)8oC4e9<&jf^(y?Qp$F&y=s$Vq
z<|OE>-S9)tc@uu9AG#ju-G|*mANi1ahrSF=OE-+Sp~ImEp?T0{A7MApm!YempMQ$p
zp%*oxcj!G(dH+}M&(J&cROndf0O<A5bD>M1S<p4mi=dmKxzK&k?w`ZYQ_9!#%=UEX
z*e2=?`V6!P`sx?W;bqW^zibY#gI)&R4!sf@g5C-B@D%NB&<yB(|AZg<2DA`*!2#+W
z+5lY(UGWw54*dgkKlC$bat8g$*XRv;26PhiVrU6854r;S8|ZrIiwDs=bl^AW9lHKo
z_?d0x{tJHSm(WR2<1qZtKF}4=RnYa&kDB3!4sC%SIvbjNCjB3D0Q3h&OL!9WHfRa-
z%7m8i3h1Ap>!I7BJD?|ZZ3%~<=R!SaQ9ft}G(WK=JOTP7v<RBottGq+`W$qf;7Kjv
z?a;m5;fFRuJp(Ae2Y%>yXf|{Sv=I6dbSd;R=vwIgN412vKtF-*hmP;j5>6b5T|(2L
zA49XDXZ3_1Y9y0Bv<|us`X+Qc^mAwkns_wnvy-<HDi6mvvsX)a2J{W6oPIbAy%%~(
zN=x_|=uYS!=qJ!a&=zR#!TfeHwIw_PIv+X%`Ydz-^qphihxR%ae&}7$J<$81hoI}B
zy@xPv`~ZIF-=Q<0#~lYh^rz5!q0P`|phdhMXb&{0H~i3<(B4B0V<~h5^e@mE&<Fa!
z5B&;yFZ6~J(Hrz7=zeHd-aL>vjC`Gh-k{5%+0eV8h0xv5rO>S>qj%_;{osfG1iByk
z0W|S!`VHQykPdwfnhl+Q3jENQpi7}Ao(ey7B6JJ%0qB0{SJ1@ahSBph_@Splv!Ulh
z3!&4XOQCb2YoW`bTcEE&_e1{<O+1HjA{~C{7-%-M5LyVWhAxFp<gE*9q4m%$(1B-A
z@6bO&J?9$6|3NdLqcX5tXrD~%7J4pp8T1M0I_TlS*gf>5AuZuX=nc^1^LU^<bO3Y<
zbP}}paM}$t@0^x!9ds^q1GM?vmhevKN4)>(0QB_{E#b5g+>dMt4~J%rY6<5-7ea&3
z!t-0gtDtqzjnF5cyP<#1f*)Ex8vc>^4P)SkW<v9z6QM!qNn_!Mj)rc8UJKm~t%4qa
zz5-1fML#eOe(1f>JZKooPf(267s3zS3Ec=CH6DKGTId1jnb|GjzULdprO+(sZs<&C
zW=>0Z5p*(iHFOqq6SM)k7uxlrmhfTdNzlGo_(RYvXaG7B`W$o-^lj*B=m{6Y4?P>Y
z7y2ahFm(I`_(x+m6XA#c209bE6}kv|#wGAWv!R=y4?*`r_dpLrKZ5ohLw^a)f;K~E
zLXW)^e&|r>YUnl4P0-cQz0keT!_YpHTEgB74C4xDHuM!}2{d~$dV_9<ZiG&ng5IDD
zp$8-!nl_e~Ohbo5ubxVKh29EX0DT^MFZ5&RGth6Kd!YZ!Z3!FW@W(DAUFiAHvC#R@
zBIxg-b<lm#XP};G@Ij|Q4?&Bdy)UF)T|qwqeLVyp^r{B>cj%MQ_0U(KJD^`e8==>K
z2H$wYxbSoMpx!UYFLcaT=m{GB8a+XC51}V$%D3nVdfmU!6Lc4}Z#MFH&qo%tuva*I
zJ#-W=<X8gjdu%wo20Ah=9Nr8~<9Yh~pr@S}4jVa~KRr1dPKTZf&4v!_7Y-LfZ$C90
zUJ4y_S~$EGdOvgvwA<<7@P26RkZ{;@5&g^1a5w|{Yv=^%PlkoVMbLkq9S$#po_S6<
zydL`cig0)j^f2@g^t_efaPN!hzkU)9kAUXXg~KzTKZ7oSesfnid@pqWPkDzO^zNU*
z4=ubGe&`Bl?+N&kKZhT>13Clx7IXph2fu_LS_FLtI{sJiL*IlRf<Ctf{)vY159kQ!
zCBKFr`nw0=hd#O%e&`1e!4Lfsx(9myZ{UX>!#g*7UqU;Aj)3N_gCDy25%{1>9wR<<
z!}@S|=B13&PoQ^b1$4k9>cP-|U4Asp=(5Pu<;3K~#ARLd$=tp`d#B=WCGn+~=b~Q8
zm!$LzCN3~8IN|&=hozsILGV~UA6>y51ZrgS29t|ZyCqZ^<5Rj;ElRqU`*AOgN2DRL
zO89(2+||f8#`W^lBwToOx32egd5H*uui#TKqdD9IYU39Piv19@p3h|PN++IBrXmQw
zgU_$PuW;eh6yBS#Mm}$XpO?TFD}BBSuZKJ}UELghgzq+%@Q^KAUdg`jn&$997yeHh
zp8%davpM{^3;)!{i@;C5wmJL*Cq7ldhL^Bq;KzXHI`Qo4t_c%fdePF~dg6>G&fU&9
z2|uyZ*a5x){5==`wv9J}&%LfW{D}+y$i|b=%P?PaSgPCB!G$`HqN4%ey}_?>;t5yU
z{FA^h2S3S)Ulrjm0ncp%UjaTD{BkFMf>x53u=U_ez#nzuqN87H9Z4PUBu>)x&0$=w
zNE!Gl`ELa419mogu*=tVux)?IT`6OJ{QM69&jcR_yUo8iQoc#xmw<ol#1lTW^-}_#
zIx8w~b0hpK!25yY_C(}YMDX?CXM-<s;t7jv`8&Yx2KPGgnGya*6VG$v3Ar|ZGVN>|
z{PFMs;Qs=r+l}NeVVuoB3EW!{Km8IDmwv<6UtuJFE5I}0KhB9?7Qxqpp9J2=iBFH<
zJHU?z@9)I(BX}eDiQrS6c*3PBg4joLH|h`k3@2U?;U55g8TcTV{hVpr&m?ePVf^|l
z0S|!3Yac7XE5PHGZ#{T1xa8H=-;7B9c7XfAf9S+7kKm2qGr`w5@r2cp^3(A5f}iUu
z-!N4^sj~s#U$Wl0oOWcVpL2WH>cp-~5?&m)Ra=5?Ycq&@SrKz%S6bJrw7i5Z0KW%3
z%PEVt+;w<@YRpo`)x>%HhUV}rmyGM|{B8pO2e|aTc7D2M+x4**{D&pX-(C2A8$S&G
zL23N@=-VBAfPd-Y|J>%!0)K*a*<+k#=z4U5WKi-y6Z}`KyI$nVzwS^4Uj+UVcszSp
z4gLanrYrsacKVyZ|617`e#|BRVOu|Y!LML_x59;&*mZCi{5Rmu9wJ!d;l<R!mma$g
zykNI1Y7T$slJUNs##r!ii{rQX>rMQ27yoTG{}S+r;m1{v<YA$LRiC{Ed<%H2aZ_}-
z8T=36XFK`JBmDcoUj{$TiTfhBaTLBVcq}^=`Cjm2Zf*`QcJe3a3<^FLybOG@3!iA0
z?|SfGfIs2FAGPr%;F-6?FW(yQzTolt#LeKxfcJFDzc^C9ec*>lKgEgbE>G##z}ad5
zkH_x?f2$4tvEVO(Ln8I(@Y${hcoKYs%Z7*BHoOFU8~K;l2irE-^)wq_1ODog<}g#)
z2woK_-)8Vnz`N78NBFxYN(?VS`-FdK)R;LApW#O@j*~c2hlv#aO!fmZ_-@N^j7#a@
z!@!p~amTou4SpB+N*7+MGAZ&4!NcJ3{IaFs&)&|yhKqlX&A%3W-W}`<x$rz2-va&w
z_=!$jyJf15_k%wI{+JU_i1ZVQ$*kuuWBt&DFSF(IGC^Yv_`NQCm5pbE_pWWD{NOd<
z*Sh$%V<`Gr3jPB4JQrSR%U>(<f6V%-3twX6Tfi5A*Shc;8{ZH9cknx0c(siu9?krH
zc^l;ie+E33Un=>}25$gA#VP+<CEgI5Dg<u?f7FRzbVt|Q6RW!=+%E&?Hrp2Kh<n3|
z<}gbS5nKF`mL+Lz0AB`vsuR~kqN?ki;6DaG*@<5r;cqhePj}+8B6w;q*1F+$`Ogj?
zbqM(V;6W#Uf_73Rf4SgafX{c~0hNH@72p$AHiubSjFeAL;Z*+Xz^?`$<iu}?<ZlCb
z5%`atc*5<r{GH%$fKPYf+KH6(o4~u@86TIu+^jb6A>cQH?{>-GX{VnH-v1}f;mch8
z*<`yvs{p^EE`EPm2R^n9d;|EI;Qd@a$BDMju@gM=uIBI*SN<-s^VbA^CHT9{1?;}A
z>swtVg6JnTmGR`K&EWzUzaB6J9|E2S9?Ku_g6D!C&z|J}Is4;_@95g~t;CnMnP~)x
zv+Ec5ZLT!3?L4jm{}=ck7rxuZH-bO48sE{0FHo?uq21uGflqbfrl0R6>;QNR_+`#K
zitjlw(e`_KAH&|l1I^(JT=jUqU5_KcWsfwLo+OPK;48szcJfOa^San+$o~8%4-$v?
zc3mXs#xA;E4W6?$e!sp6d@Q(nSFh#2b^X1a$Gzb1JjDK!Oa4AvkB7nUXMZ-wg{!Ve
z>9Oyz^vmGuUHCeiKMQ=y!}0lNf(O8#aPdccpGDwZ)-{I%E?hfrs{G)2;0-SP6FdD)
z;QbznKVRDmemZ!Ci(mV{BL6VB>?_CXtNP+}z5>3?#lO@}KMVYvM>(h9!nGla{F&hY
z177CBb!R5{BJdBu<N3a;!4HGSn-6XR{|fwgr+mHKrRr}lcmsI6`QTyj55fC8`SVrr
zbp5AcpWyjUJV6g^lK(95jK|{p{xePdXU=xk^={>xsq%yW>dEGCxwDOQoon0gYVglD
zG>3P&(tpj?|0eJUerv8hTK2E2*YLu#7yP&2f5Zp0+n4l38+xd|Na7ec))O}2J2?AO
ziF0#;-Cv~>=kY(q9^a)L+2BurGqgt1(Nh4W$3pO5fP0;|V_jyciT{riPgrS}b1iuC
zpPR!MI`NxzJ&Av@1$+>AI`cWZoO)i~r+d`AyotD{bGBfHOXqpE&Qmd_>$b)2JEg2c
zz*mA-JM)roi=Ee8@Fs9kxt$lse4qmS-8S$#@GWiN8^E6cXX+l2ucy>X*E_*iwZY#6
zesddmDvhNG{0~m~2~Vl=c?lZ=9tMBNsXwuopLenCC672u{=zv1my9}FMiBe}_yQ*`
z>zEa4Xi(+2mpBt%rfoaZ>3XbPPtSml`D=4{p;JbJo)}3z?E(K8c)WTz1b!=cJU#aA
z&6yVP^PKXv8>jL&0{mw1So1O<V+I#V{|zTU-z9HBu*o}O^9sHSd^UKglQ*H*wy}-i
zPl3l9mv)0+@Je&|0T=)MHva+e&ERJ_@i_`M(g{nW!~HAxxlUZQr@3}(l6+<n?;YZu
z<c#N7@16<%RvY*t@Lk|uC%>a#SZ(6*`jt)KQjTd({)8!ZIroBpDe1dxsE=(!hr$2x
zYIFDo7e3p@`<}pl-OlFlEiU{f8_xp2_jS&@xYA!^r#}<C?;FkGU%T*M+V~>yUxMS3
zN7}M>Rh6Br244YAHY2!Wy>}CM4fst?JYl{qe=qnx@Tso+Uux(7Fn9{*mg4!!eVI^?
z20zCs|3)QV<u40-8u$%PJYlw-{!H-I;NxBCUtp)d2>j2SlPY)d>&ceb*J|)yZ#9SC
zbn(A#^KSxw@$KgD92dV{uonKk;63)l?gMB7#$oUS@K1O0^Idp*a~TM4Jl&4~KOOw{
zPTqvy+GU>s{zve6E<7@)UjTm0JMndYFZc!E`7Zv5@9_-y67a`e_#<}ud%%x=H@<Bi
z0{<WIn_Rk`Z|k-<jk@u@_+$PE@Xx?wwN26O4DffsM>_Mzcak-NU<biQJ2A(a=PK~D
zz486(jo>4}W$d@dSjT$RZt!v78=QE;dRsRKz+VTy#D(iYTJo31;=#YbXS#5`(IEJ6
z@bmr_AI}31fM4w5A8)501phgBta*nQo>ky~27lAZFXQ7Yk@4{v;#9oP8CPeVgcWug
zd%*XB$4W!Wa0tBH2l4H@cR%Kc@Z&B-bZq+8GDeI5KLGApb5dhO!p+toA@Qy!-gMHr
z-zi7OyUU6v`B_H1mx;H|882b2U7mH|)Aluo&vfFtt5G(!9egHuyuM7%p8gm--a5R;
zi{A#0TM#L)WA7*f{F65D3E=O8k9YEGw@~G;2)xVxMUAPtJ5cyC@E?N5<6j3p3cR1I
zy`E^d*X`gVKaAg3hrp+RFE#kH<_ZasHAK%ToVfsJsWgH+*3mP-?+0i3B!WBE(I<ef
z0FT!n6@mBpDE=DbGVmJkAzd8uyAH6+w+{TC{mtQ9o#`hmw(Vm(_}Ad^#)1&|=)X6I
z=eqc{(<AohITafO|790v`Z%@bnoS0H(kHRcRtWzD@GS6neNqv4Hh8@DxD31)e2*)C
zku{%n;HQLQ?@ddZ+rg)US2^>q=Rh}fu^JljB(DdE`^)<H=NQsX!><D$<IIa=4R$#A
zLGYf=w7Pb;b(IJH;it{vA36CG=Gk=>1kY-SZ)>Z-&j26i<kwZL^1l&$0{E9sJmGU&
z{%-IS8sqP29RR-$-0$MgxB1iPxE=)0b>Wk2d^q?n@OXYt9{5S0#qVo^;ML&q`npx%
zJwK1%mu&<e34Vnuf4Xy)`rQp)4nD|<>tz>R|KN+kXE^bM$bL#%f6m!~=eh96If>!m
z_299_21!2;`~&cKeQ6N<E%120)hh7U+Th;^zO@bh-Qa%)_d4_Mm{%My@oXoaFxIZ$
zG&To5f<IpQhJ(KYKHkai=<D;q54XV|1pg8o66s4Fdl0Jt4uLadMeu7>_O$(j9|Yg(
z#1mey^S>MX{(r<i=ir6s0QgBwoZol0Us;>Yimc7{K7;=9i{|j1t~7pZr!fNjF>pjh
z^5`hT4DjEAU**IT^yEcsWC8f6;2*f~_iXw1f<N+Q{JG^b;J*Q1;NlM|elKBrz+1ql
zBynSncT&cSlI->8!^Fwp_XVdoWoQ>$>A5c*YbN+)C!U}ewxkSM;8%b%jfkY-*ms->
zei`@$PW&d7MJ0a`cm;S~R|kLBT(uYBC1^GH+QY2#N7obE$8so6^01jWo0{XdwSC}E
zf#2nn(e+N%S4$d3Ci^wvs54vQYrY@xHPean32{D`_?9jcKDFyA8~pc1OZZq<8oliC
zpb-4wE-i6wVJY}N@X=2Bj`_e^@MiFM>)>0!<@Xu`ocu)*J?{tK4UWqj$-iSyFcGKn
z4e(=J`9Ipue>(V!U0cFuy71F&JRAI#M9wQa<vaSD!glbb?ci%oe77t8op$<Lz;8{8
zpZ@-K@I)4ZgkR=ucKzz%K-p<J_(Je_<3%?3Z@~+l{0Z0F_E8A_75E$%9+{^v1<&dp
zA72Yz-3Gn|{AKVPT=FC95c|Q?_+3prJQ2gWE)LF6X{3X%1HauVU(aD~vRo@^i<5|#
zbW}^+{-gxFJ9w>APC{g#eg$|1xNAKkA+mS79{eG2$&+1ATFt7Sc7Q(uew-86><VuL
z|79ELCl4flJ>uKJ0PryUEE`4AzarAkCV_tgKFo<b_O?sFdm=wx{#SsffM4R|Pl(LR
z*MpA)kC*-q@Uy|=jmwSTSAfU!JCbpjrh+eWr61YP8UX$nc&v48RsZ1qdbY$J(@MbK
z2Vd%vADM%#0KbsmYk8fxqaRss;`vV8u^+Vqyc&L%HzM`pSdVQ4UjiPFKY1{}%K$&y
z$?rHzHUNA#cuyzpm?KUC|1)^JIbsR;6K(LX0KX4Bp8c)|zY{#3U$g^!B{<z(r2LLG
zf=2M4fsb?Ij(J7$5YD-Pk9FdUw0(OC8vwos+%--yRtEJ^DnsJr66cFH;)v}BiPMAM
z;mzl}-HvsCQeyQd5^pu}u4*Tq*xeT5ts`DMyV?()+$%nwI8@H1w1jCMk^JcG2HpRI
zF9x6L#2x2`v%%MclT3u)u@6}Yz6pGm6Bi%js>m6%WyJZGIJjgH8G49Nc~}SDB_(#<
zhz_=cp8}3+AK}lB^i3h~)4|#Djo?!?F1q&6Y4rjB)`{yn`G-{}lFks~H4u*}WJHcW
z9-{J@3;ubWd`LPK;Qs{Aa`LNmZnTn7docGBuX}2Xdk(JR1zhnq6YnJAF~mjkbD^9`
zF0kWCzC*<G5)XGU63?+_>Y>qRfM4Xq6ZFQS@MnNe0gu=BP5_?({;A8C{aE?33_C^<
z__1j%;al!<q(4!g0qa_>mIC!5FkmmAdx@X_8-AOZ;D~=Q{`=y{`RGl=d1+ls+<EX`
z@PC2F^ZO2ie*+%NW<*bYhckx&FYDsSgQ|nB1<`9N6No$Z(UzF!f<%8s;0celgx`0T
zr|Y{3Vu4=pW#F41C$EW)v}hw;kB^+mSx=m2f7=p%-kG1S&)I(94)AN9YKeRHsu6s}
z#+LA(UHpHv`IFD#%+J%ba~B@jFB$-T^&eWoRb<ibw-WS*kd$!}_><uMj&|T(PdwTx
zV+r^ZTUx@E-5j{o>6~u%e5Q^#hyT(Ne#@1IH|#ua0RP=z(X$JG-^O=>2VY?fbm_T|
z(zE2T3H-*_TEg$S?DTDAr-G-ROFzGhG0cVcRJa#>2>6L_F~&RPOFg|EvCBN-ytOC(
zI36_dc<X1Yz@LAI`I0LS)9pNN1pjs~zt<%{k$Q-%mG1_>?Qbn{_tg%7zYbpHEJN2q
z+ZNN<^zO5d@uG)AzU=WY)aOP-Pa}x4@Y9y?ZLU1%Lm7h40DlksXD<A1)!_=h0DM|Q
zOZYPvUT@>~g7<4=PT{KO>s38_;dutU;Io$Sc}`sFfuA$U+*sQ0UgFIAye0hbmE2hK
z)(PtO8uwjk_l|l^)H8x{J16Y!NA>cs>en;C4}+hNC|j1^YE}3I@E=~pZ!(?v>AKIh
z%OddiE)K_?LoNgV`-E`Zz3g=&e_}X1%T;IB*>=4h{HjaC;Rct@d}7;72t0jiIQ*nD
z{|S%T`u4C<_Z0Z+F8mc6&j2sX<u|5I+%bMk051VQ)|J0rcK(XMubUQ*yC%6z_`${G
zZ2fB2UyuLbSAdUpm2ae7zU|<F>EXC@rx5r$@b{eZ6W+GV=NW}PT@en;@MNc-aHoxD
zfWHYIa^d@Jd;<9WSBB%xeTu-J1i!{*A6MG;u?+mv8T@9~g%{fRI`Cmv^P5*!`UmXv
zw}bb%CLDJSBLv=WW;mw*Bkj?HVIK?rm`nb{w)_n6`@w@QJaX=N0{9o;TV41IHh&TL
z&#n!}?31$KSq9z&9yyCKu2=FMUB~rGy*+VUue9oJ<9iKBnBSvU+PD{crH<R$D|y_u
zUY>C;^-8>`ry=~?;rIH&;pc4qDgN;e{;@InvwIp#;P)V8&Gq5%scwFE`jcX$Ke1;*
zX^h~DdtMqNbYjn`F+y{gP)QzEkcUb6VaNF0S_kuD@L$}sBu40jo^xV^=JZTh79$uf
z;J@)nWpa}-EA05KLR226^zs(>O3&_<k=<*+xL!jh_wrucx>AsXteMElLY8z1-~WBD
zf$uf&y#~J5!1o&XUIX82;Cl^xuYvD1@Vy4U*TDb(YGA|96Fqf&qy#c;wm!1IE#Kc{
z;wMy|UzH49a(ALfmWJ~_;@v~greAjVoG3V-6Zjn9zOQ-DW7o>p-<s%=rDCHt(Idxr
znz)zsp+6ER^HrH+9>+)iWLd~q)7>L;O%FF|&|~=gkk5j;M2~#Wg&qr)HLM@-k&L&n
zB(dfvi9EF}TrM)2pquX0W#YC|e}~Dx#jusKzQyNbK40_sf4KYaFe!@d4;=35>6z`F
z?VX*j-Pv81Wtm-;oP&TUiVBEV^rB=1B`k<!0TB!Y6%@g+V#E;z0TB#HP_GdKaFwfK
zLQyd1h<eTG{d`V!kHdYx&-?!K`|H=wQ+>{<aL%byp{wh3h+XHnr3lRsx+3&N7=kb!
zVK%~Igc}gnAv}Pv6JamH#|S?n#I8qqgk}g`5&9wwK^TuP8(}fR4G8NH9zfWMuovND
zgdY)NH=sO1GlZ@PeG!Hrj7OM_uo&S6gmnlHAnZigi|{eRj|j0FQ68ZgLRW;o2tyFY
zBg{rvjBo?OI)n!hb|UOW_!!|wgxF0ekI)RED?(p{Aqe9UW+N;{xB+1u!UG695%wZ{
zjPN5u>}HflXok=gp)bM^gz*To5f&rdfUpkX0fe0hVOxaoQuMorYVZt0aNL=3-1`xl
z+-mZ6`#6>@GZTf51I_-+V>H5m9C|wF!8!B<X8Qkgj6nXvc2Rc<;2mwE?gGGN?W69U
zfE_wS-G2f8xCXid)~|KkeSp7%{seF+=>GzK2pIb$=FS4tfTyhfyPo~Njk*01u6osR
zi4Q_(_?p2-0{=0<&jSAPUK2kBc&pb9J{$PK0G|i^!Z%F(V&EnF41P86RRMk@@IM3m
zHsG_~G<og>zVI!B-v|7<{RV#!_|HL}?ZDk2{#oFk1o%sgKVb6j1Kual=RM$?gZNK?
z9}MvCf$O(T{=a~C2=JosV(yRtZw!1<fVT(!OMo8*eEK`4>?y!k2l!~<djfn8@YCKk
zdFBDXFTm@8JMaB%dp137o<V%r4M?y3ANs!kp||}Hz5Rda7ygHS<A3On{)hf=4sCxQ
zbMq05K0nVVU6`d0&S(68*5tXLB53#qrLW`P^@OQ-)a`>{rK0YGWl?tt!Ul%&sQYtu
z)U|7(u7^;HP>IkCf&4hM2>-9+#iBg-6@+JJL|x)<BYYO%p8?OGY2yD2yk&s@1^ka$
zCO)3ba~qv&@Dy-=w!y1`&k69hzy}9;4hQ~D5Z@R0rE^UFLBRW-XYet=HwE}~;P(V&
z=K=2-;LCtl1Z7tM-#XWnT?IV<e1rcBc<Ug37w~w1?*-l#c`|RJZ~RaAUmLYt7Ipg~
z)FCXpGU`5XRn(nu4dTjUZa;*7AoNE#8R2TgpH&}qPhTE&FS<VJetJ{X9ei`teFI?t
z(oaPggfIkQ7{X}?BM{C&xa^jw`yIk4;A0T#5XK|Cn2EZ*Zi~9dt&X~l)}lS{gnYzL
z48j-dqweDy&>!xOx>wu_xtqXabJXp&HR_f>5Ou$K5aD0Y<&miS@ncc<ohPF1TTe#a
zJx^nf+YxoQ?TWgWJR5b#?vA=gK99chV$_Yi6m`FN8F^lfx;<Wty0`6(y3yC8?hOb9
zZy-Oys|bDfMcs!GTD?hIM%~0)m_HG|L#W#yb@w9lI}ml(BAoel)NSw%cp_Z(Zqz;M
zy{P*G!rkvf_6Je7;=`!>62i!jqV8u1BR>X>(B~7(!3e`Yjk>=eT=H4eE&M#{-iT2B
z1!#m15RUsY>Mlii4Wa5Q)DdCw*U<5ssJjoL`e4*O8{vM0KM+p%HtJrFV0{;LCm|%i
zha7}4|AkEuydR?O`3UQNjJlWqggX6<`uqZYevP{KA~gC9bw&6P;rQR9?vDs-|A@L@
zBXs){_CQd7McwfTyAe8AF?SBa!wA149HoFGbhTsdzYv;7V(#?_r4Ih_h)@#6^#&mk
zLw`Y7iSRK(yS$kDJi=r*=2qm#+$jiW#AEKj0`x&I=AKlDf6pNtl|X+hin;G5aXs+y
z&#>Z{`xU~;CHVIvLg!S>U5xM}!t~OZ`yIlPGUP${2I1QvtiC1cK8H}4L0u4fqu*(S
z{~ag)Z>76-$#XAy3w8y38FR%bz;8j%0DN#iuBm`Gwu-vT0iOq42lzSQLx6d$(e{AN
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

literal 0
HcmV?d00001

diff --git 
a/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/wasm_runtime_wgl
 
b/scriptsrcs/wamr/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/wasm_runtime_wgl
new file mode 100755
index 
0000000000000000000000000000000000000000..01e34114f542d01cf9a721a8ee4d2bcd0fa0c2bd
GIT binary patch
literal 1066908
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
YzWPjKQ!TH)h_C;{{jxpkfr@td|Ac1<Jpcdz

literal 0
HcmV?d00001

diff --git a/scriptsrcs/wamr/test-tools/host-tool/CMakeLists.txt 
b/scriptsrcs/wamr/test-tools/host-tool/CMakeLists.txt
new file mode 100755
index 0000000..df1512a
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/host-tool/CMakeLists.txt
@@ -0,0 +1,70 @@
+# Copyright (C) 2019 Intel Corporation.  All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+cmake_minimum_required (VERSION 2.8.3)
+project (host-agent)
+
+if (NOT CMAKE_BUILD_TYPE)
+  SET(CMAKE_BUILD_TYPE Debug)
+endif (NOT CMAKE_BUILD_TYPE)
+
+if (NOT TARGET_PLATFORM)
+  set (TARGET_PLATFORM "linux")
+endif (NOT TARGET_PLATFORM)
+
+message ("TARGET_PLATFORM = " ${TARGET_PLATFORM})
+
+set(REPO_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
+set(WASM_DIR  ${REPO_ROOT_DIR}/core/iwasm)
+set(APP_MGR_DIR ${REPO_ROOT_DIR}/core/app-mgr)
+set(SHARED_DIR ${REPO_ROOT_DIR}/core/shared-lib)
+#TODO: use soft-plc/tools/iec-runtime/external/cJSON instead
+set(CJSON_DIR ${CMAKE_CURRENT_LIST_DIR}/external/cJSON)
+set(SSG_LIB_DIR ${REPO_ROOT_DIR}/../host-agent/lib)
+
+include (${WASM_DIR}/lib/native-interface/native_interface.cmake)
+include (${APP_MGR_DIR}/app-mgr-shared/app_mgr_shared.cmake)
+include (${SHARED_DIR}/platform/${TARGET_PLATFORM}/shared_platform.cmake)
+include (${SHARED_DIR}/utils/shared_utils.cmake)
+include (${SHARED_DIR}/mem-alloc/mem_alloc.cmake)
+include (${CJSON_DIR}/cjson.cmake)
+include (${SHARED_DIR}/coap/lib_coap.cmake)
+
+if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
+  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
+endif ()
+
+add_definitions(-Wall -Wno-pointer-sign -DMALLOC_MEMORY_FROM_SYSTEM)
+
+include_directories(
+    ${CMAKE_CURRENT_LIST_DIR}/src
+)
+
+file (GLOB_RECURSE HOST_TOOL_SRC src/*.c)
+
+
+SET(SOURCES
+    ${HOST_TOOL_SRC}
+    ${PLATFORM_SHARED_SOURCE}
+    ${UTILS_SHARED_SOURCE}
+    ${MEM_ALLOC_DIR}/bh_memory.c
+    ${NATIVE_INTERFACE_SOURCE}
+    ${CJSON_SOURCE}
+    ${LIB_HOST_AGENT_SOURCE}
+    )
+    
+add_executable(host_tool ${SOURCES})
+target_link_libraries(host_tool pthread)
diff --git a/scriptsrcs/wamr/test-tools/host-tool/external/cJSON/LICENSE 
b/scriptsrcs/wamr/test-tools/host-tool/external/cJSON/LICENSE
new file mode 100755
index 0000000..78deb04
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/host-tool/external/cJSON/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
+
+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.
+
diff --git a/scriptsrcs/wamr/test-tools/host-tool/external/cJSON/cJSON.c 
b/scriptsrcs/wamr/test-tools/host-tool/external/cJSON/cJSON.c
new file mode 100755
index 0000000..2776ce6
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/host-tool/external/cJSON/cJSON.c
@@ -0,0 +1,2750 @@
+/*
+ Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
+
+ 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.
+ */
+
+/* cJSON */
+/* JSON parser in C. */
+
+/* disable warnings about old C89 functions in MSVC */
+#if !defined(_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER)
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+#ifdef __GNUC__
+#pragma GCC visibility push(default)
+#endif
+#if defined(_MSC_VER)
+#pragma warning (push)
+/* disable warning about single line comments in system headers */
+#pragma warning (disable : 4001)
+#endif
+
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <ctype.h>
+
+#ifdef ENABLE_LOCALES
+#include <locale.h>
+#endif
+
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+#ifdef __GNUC__
+#pragma GCC visibility pop
+#endif
+
+#include "cJSON.h"
+
+/* define our own boolean type */
+#define true ((cJSON_bool)1)
+#define false ((cJSON_bool)0)
+
+typedef struct {
+    const unsigned char *json;
+    size_t position;
+} error;
+static error global_error = { NULL, 0 };
+
+CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void)
+{
+    return (const char*) (global_error.json + global_error.position);
+}
+
+CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item) {
+    if (!cJSON_IsString(item)) {
+        return NULL;
+    }
+
+    return item->valuestring;
+}
+
+/* This is a safeguard to prevent copy-pasters from using incompatible C and 
header files */
+#if (CJSON_VERSION_MAJOR != 1) || (CJSON_VERSION_MINOR != 7) || 
(CJSON_VERSION_PATCH != 10)
+#error cJSON.h and cJSON.c have different versions. Make sure that both have 
the same.
+#endif
+
+CJSON_PUBLIC(const char*) cJSON_Version(void)
+{
+    static char version[15];
+    sprintf(version, "%i.%i.%i", CJSON_VERSION_MAJOR, CJSON_VERSION_MINOR, 
CJSON_VERSION_PATCH);
+
+    return version;
+}
+
+/* Case insensitive string comparison, doesn't consider two NULL pointers 
equal though */
+static int case_insensitive_strcmp(const unsigned char *string1,
+        const unsigned char *string2)
+{
+    if ((string1 == NULL) || (string2 == NULL)) {
+        return 1;
+    }
+
+    if (string1 == string2) {
+        return 0;
+    }
+
+    for (; tolower(*string1) == tolower(*string2);
+            (void) string1++, string2++) {
+        if (*string1 == '\0') {
+            return 0;
+        }
+    }
+
+    return tolower(*string1) - tolower(*string2);
+}
+
+typedef struct internal_hooks {
+    void *(CJSON_CDECL *allocate)(size_t size);
+    void (CJSON_CDECL *deallocate)(void *pointer);
+    void *(CJSON_CDECL *reallocate)(void *pointer, size_t size);
+} internal_hooks;
+
+#if defined(_MSC_VER)
+/* work around MSVC error C2322: '...' address of dillimport '...' is not 
static */
+static void * CJSON_CDECL internal_malloc(size_t size)
+{
+    return malloc(size);
+}
+static void CJSON_CDECL internal_free(void *pointer)
+{
+    free(pointer);
+}
+static void * CJSON_CDECL internal_realloc(void *pointer, size_t size)
+{
+    return realloc(pointer, size);
+}
+#else
+#define internal_malloc malloc
+#define internal_free free
+#define internal_realloc realloc
+#endif
+
+static internal_hooks global_hooks = { internal_malloc, internal_free,
+internal_realloc };
+
+static unsigned char* cJSON_strdup(const unsigned char* string,
+        const internal_hooks * const hooks)
+{
+    size_t length = 0;
+    unsigned char *copy = NULL;
+
+    if (string == NULL) {
+        return NULL;
+    }
+
+    length = strlen((const char*) string) + sizeof("");
+    copy = (unsigned char*) hooks->allocate(length);
+    if (copy == NULL) {
+        return NULL;
+    }
+    memcpy(copy, string, length);
+
+    return copy;
+}
+
+CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks)
+{
+    if (hooks == NULL) {
+        /* Reset hooks */
+        global_hooks.allocate = malloc;
+        global_hooks.deallocate = free;
+        global_hooks.reallocate = realloc;
+        return;
+    }
+
+    global_hooks.allocate = malloc;
+    if (hooks->malloc_fn != NULL) {
+        global_hooks.allocate = hooks->malloc_fn;
+    }
+
+    global_hooks.deallocate = free;
+    if (hooks->free_fn != NULL) {
+        global_hooks.deallocate = hooks->free_fn;
+    }
+
+    /* use realloc only if both free and malloc are used */
+    global_hooks.reallocate = NULL;
+    if ((global_hooks.allocate == malloc)
+            && (global_hooks.deallocate == free)) {
+        global_hooks.reallocate = realloc;
+    }
+}
+
+/* Internal constructor. */
+static cJSON *cJSON_New_Item(const internal_hooks * const hooks)
+{
+    cJSON* node = (cJSON*) hooks->allocate(sizeof(cJSON));
+    if (node) {
+        memset(node, '\0', sizeof(cJSON));
+    }
+
+    return node;
+}
+
+/* Delete a cJSON structure. */
+CJSON_PUBLIC(void) cJSON_Delete(cJSON *item)
+{
+    cJSON *next = NULL;
+    while (item != NULL) {
+        next = item->next;
+        if (!(item->type & cJSON_IsReference) && (item->child != NULL)) {
+            cJSON_Delete(item->child);
+        }
+        if (!(item->type & cJSON_IsReference) && (item->valuestring != NULL)) {
+            global_hooks.deallocate(item->valuestring);
+        }
+        if (!(item->type & cJSON_StringIsConst) && (item->string != NULL)) {
+            global_hooks.deallocate(item->string);
+        }
+        global_hooks.deallocate(item);
+        item = next;
+    }
+}
+
+/* get the decimal point character of the current locale */
+static unsigned char get_decimal_point(void)
+{
+#ifdef ENABLE_LOCALES
+    struct lconv *lconv = localeconv();
+    return (unsigned char) lconv->decimal_point[0];
+#else
+    return '.';
+#endif
+}
+
+typedef struct {
+    const unsigned char *content;
+    size_t length;
+    size_t offset;
+    size_t depth; /* How deeply nested (in arrays/objects) is the input at the 
current offset. */
+    internal_hooks hooks;
+} parse_buffer;
+
+/* check if the given size is left to read in a given parse buffer (starting 
with 1) */
+#define can_read(buffer, size) ((buffer != NULL) && (((buffer)->offset + size) 
<= (buffer)->length))
+/* check if the buffer can be accessed at the given index (starting with 0) */
+#define can_access_at_index(buffer, index) ((buffer != NULL) && 
(((buffer)->offset + index) < (buffer)->length))
+#define cannot_access_at_index(buffer, index) (!can_access_at_index(buffer, 
index))
+/* get a pointer to the buffer at the position */
+#define buffer_at_offset(buffer) ((buffer)->content + (buffer)->offset)
+
+/* Parse the input text to generate a number, and populate the result into 
item. */
+static cJSON_bool parse_number(cJSON * const item,
+        parse_buffer * const input_buffer)
+{
+    double number = 0;
+    unsigned char *after_end = NULL;
+    unsigned char number_c_string[64];
+    unsigned char decimal_point = get_decimal_point();
+    size_t i = 0;
+
+    if ((input_buffer == NULL) || (input_buffer->content == NULL)) {
+        return false;
+    }
+
+    /* copy the number into a temporary buffer and replace '.' with the 
decimal point
+     * of the current locale (for strtod)
+     * This also takes care of '\0' not necessarily being available for 
marking the end of the input */
+    for (i = 0;
+            (i < (sizeof(number_c_string) - 1))
+                    && can_access_at_index(input_buffer, i); i++) {
+        switch (buffer_at_offset(input_buffer)[i]) {
+        case '0':
+        case '1':
+        case '2':
+        case '3':
+        case '4':
+        case '5':
+        case '6':
+        case '7':
+        case '8':
+        case '9':
+        case '+':
+        case '-':
+        case 'e':
+        case 'E':
+            number_c_string[i] = buffer_at_offset(input_buffer)[i];
+            break;
+
+        case '.':
+            number_c_string[i] = decimal_point;
+            break;
+
+        default:
+            goto loop_end;
+        }
+    }
+    loop_end: number_c_string[i] = '\0';
+
+    number = strtod((const char*) number_c_string, (char**) &after_end);
+    if (number_c_string == after_end) {
+        return false; /* parse_error */
+    }
+
+    item->valuedouble = number;
+
+    /* use saturation in case of overflow */
+    if (number >= INT_MAX) {
+        item->valueint = INT_MAX;
+    } else if (number <= (double) INT_MIN) {
+        item->valueint = INT_MIN;
+    } else {
+        item->valueint = (int) number;
+    }
+
+    item->type = cJSON_Number;
+
+    input_buffer->offset += (size_t)(after_end - number_c_string);
+    return true;
+}
+
+/* don't ask me, but the original cJSON_SetNumberValue returns an integer or 
double */
+CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number)
+{
+    if (number >= INT_MAX) {
+        object->valueint = INT_MAX;
+    } else if (number <= (double) INT_MIN) {
+        object->valueint = INT_MIN;
+    } else {
+        object->valueint = (int) number;
+    }
+
+    return object->valuedouble = number;
+}
+
+typedef struct {
+    unsigned char *buffer;
+    size_t length;
+    size_t offset;
+    size_t depth; /* current nesting depth (for formatted printing) */
+    cJSON_bool noalloc;
+    cJSON_bool format; /* is this print a formatted print */
+    internal_hooks hooks;
+} printbuffer;
+
+/* realloc printbuffer if necessary to have at least "needed" bytes more */
+static unsigned char* ensure(printbuffer * const p, size_t needed)
+{
+    unsigned char *newbuffer = NULL;
+    size_t newsize = 0;
+
+    if ((p == NULL) || (p->buffer == NULL)) {
+        return NULL;
+    }
+
+    if ((p->length > 0) && (p->offset >= p->length)) {
+        /* make sure that offset is valid */
+        return NULL;
+    }
+
+    if (needed > INT_MAX) {
+        /* sizes bigger than INT_MAX are currently not supported */
+        return NULL;
+    }
+
+    needed += p->offset + 1;
+    if (needed <= p->length) {
+        return p->buffer + p->offset;
+    }
+
+    if (p->noalloc) {
+        return NULL;
+    }
+
+    /* calculate new buffer size */
+    if (needed > (INT_MAX / 2)) {
+        /* overflow of int, use INT_MAX if possible */
+        if (needed <= INT_MAX) {
+            newsize = INT_MAX;
+        } else {
+            return NULL;
+        }
+    } else {
+        newsize = needed * 2;
+    }
+
+    if (p->hooks.reallocate != NULL) {
+        /* reallocate with realloc if available */
+        newbuffer = (unsigned char*) p->hooks.reallocate(p->buffer, newsize);
+        if (newbuffer == NULL) {
+            p->hooks.deallocate(p->buffer);
+            p->length = 0;
+            p->buffer = NULL;
+
+            return NULL;
+        }
+    } else {
+        /* otherwise reallocate manually */
+        newbuffer = (unsigned char*) p->hooks.allocate(newsize);
+        if (!newbuffer) {
+            p->hooks.deallocate(p->buffer);
+            p->length = 0;
+            p->buffer = NULL;
+
+            return NULL;
+        }
+        if (newbuffer) {
+            memcpy(newbuffer, p->buffer, p->offset + 1);
+        }
+        p->hooks.deallocate(p->buffer);
+    }
+    p->length = newsize;
+    p->buffer = newbuffer;
+
+    return newbuffer + p->offset;
+}
+
+/* calculate the new length of the string in a printbuffer and update the 
offset */
+static void update_offset(printbuffer * const buffer)
+{
+    const unsigned char *buffer_pointer = NULL;
+    if ((buffer == NULL) || (buffer->buffer == NULL)) {
+        return;
+    }
+    buffer_pointer = buffer->buffer + buffer->offset;
+
+    buffer->offset += strlen((const char*) buffer_pointer);
+}
+
+/* Render the number nicely from the given item into a string. */
+static cJSON_bool print_number(const cJSON * const item,
+        printbuffer * const output_buffer)
+{
+    unsigned char *output_pointer = NULL;
+    double d = item->valuedouble;
+    int length = 0;
+    size_t i = 0;
+    unsigned char number_buffer[26]; /* temporary buffer to print the number 
into */
+    unsigned char decimal_point = get_decimal_point();
+    double test;
+
+    if (output_buffer == NULL) {
+        return false;
+    }
+
+    /* This checks for NaN and Infinity */
+    if ((d * 0) != 0) {
+        length = sprintf((char*) number_buffer, "null");
+    } else {
+        /* Try 15 decimal places of precision to avoid nonsignificant nonzero 
digits */
+        length = sprintf((char*) number_buffer, "%1.15g", d);
+
+        /* Check whether the original double can be recovered */
+        if ((sscanf((char*) number_buffer, "%lg", &test) != 1)
+                || ((double) test != d)) {
+            /* If not, print with 17 decimal places of precision */
+            length = sprintf((char*) number_buffer, "%1.17g", d);
+        }
+    }
+
+    /* sprintf failed or buffer overrun occured */
+    if ((length < 0) || (length > (int) (sizeof(number_buffer) - 1))) {
+        return false;
+    }
+
+    /* reserve appropriate space in the output */
+    output_pointer = ensure(output_buffer, (size_t) length + sizeof(""));
+    if (output_pointer == NULL) {
+        return false;
+    }
+
+    /* copy the printed number to the output and replace locale
+     * dependent decimal point with '.' */
+    for (i = 0; i < ((size_t) length); i++) {
+        if (number_buffer[i] == decimal_point) {
+            output_pointer[i] = '.';
+            continue;
+        }
+
+        output_pointer[i] = number_buffer[i];
+    }
+    output_pointer[i] = '\0';
+
+    output_buffer->offset += (size_t) length;
+
+    return true;
+}
+
+/* parse 4 digit hexadecimal number */
+static unsigned parse_hex4(const unsigned char * const input)
+{
+    unsigned int h = 0;
+    size_t i = 0;
+
+    for (i = 0; i < 4; i++) {
+        /* parse digit */
+        if ((input[i] >= '0') && (input[i] <= '9')) {
+            h += (unsigned int) input[i] - '0';
+        } else if ((input[i] >= 'A') && (input[i] <= 'F')) {
+            h += (unsigned int) 10 + input[i] - 'A';
+        } else if ((input[i] >= 'a') && (input[i] <= 'f')) {
+            h += (unsigned int) 10 + input[i] - 'a';
+        } else /* invalid */
+        {
+            return 0;
+        }
+
+        if (i < 3) {
+            /* shift left to make place for the next nibble */
+            h = h << 4;
+        }
+    }
+
+    return h;
+}
+
+/* converts a UTF-16 literal to UTF-8
+ * A literal can be one or two sequences of the form \uXXXX */
+static unsigned char utf16_literal_to_utf8(
+        const unsigned char * const input_pointer,
+        const unsigned char * const input_end, unsigned char **output_pointer)
+{
+    long unsigned int codepoint = 0;
+    unsigned int first_code = 0;
+    const unsigned char *first_sequence = input_pointer;
+    unsigned char utf8_length = 0;
+    unsigned char utf8_position = 0;
+    unsigned char sequence_length = 0;
+    unsigned char first_byte_mark = 0;
+
+    if ((input_end - first_sequence) < 6) {
+        /* input ends unexpectedly */
+        goto fail;
+    }
+
+    /* get the first utf16 sequence */
+    first_code = parse_hex4(first_sequence + 2);
+
+    /* check that the code is valid */
+    if (((first_code >= 0xDC00) && (first_code <= 0xDFFF))) {
+        goto fail;
+    }
+
+    /* UTF16 surrogate pair */
+    if ((first_code >= 0xD800) && (first_code <= 0xDBFF)) {
+        const unsigned char *second_sequence = first_sequence + 6;
+        unsigned int second_code = 0;
+        sequence_length = 12; /* \uXXXX\uXXXX */
+
+        if ((input_end - second_sequence) < 6) {
+            /* input ends unexpectedly */
+            goto fail;
+        }
+
+        if ((second_sequence[0] != '\\') || (second_sequence[1] != 'u')) {
+            /* missing second half of the surrogate pair */
+            goto fail;
+        }
+
+        /* get the second utf16 sequence */
+        second_code = parse_hex4(second_sequence + 2);
+        /* check that the code is valid */
+        if ((second_code < 0xDC00) || (second_code > 0xDFFF)) {
+            /* invalid second half of the surrogate pair */
+            goto fail;
+        }
+
+        /* calculate the unicode codepoint from the surrogate pair */
+        codepoint = 0x10000
+                + (((first_code & 0x3FF) << 10) | (second_code & 0x3FF));
+    } else {
+        sequence_length = 6; /* \uXXXX */
+        codepoint = first_code;
+    }
+
+    /* encode as UTF-8
+     * takes at maximum 4 bytes to encode:
+     * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
+    if (codepoint < 0x80) {
+        /* normal ascii, encoding 0xxxxxxx */
+        utf8_length = 1;
+    } else if (codepoint < 0x800) {
+        /* two bytes, encoding 110xxxxx 10xxxxxx */
+        utf8_length = 2;
+        first_byte_mark = 0xC0; /* 11000000 */
+    } else if (codepoint < 0x10000) {
+        /* three bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx */
+        utf8_length = 3;
+        first_byte_mark = 0xE0; /* 11100000 */
+    } else if (codepoint <= 0x10FFFF) {
+        /* four bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx 10xxxxxx */
+        utf8_length = 4;
+        first_byte_mark = 0xF0; /* 11110000 */
+    } else {
+        /* invalid unicode codepoint */
+        goto fail;
+    }
+
+    /* encode as utf8 */
+    for (utf8_position = (unsigned char) (utf8_length - 1); utf8_position > 0;
+            utf8_position--) {
+        /* 10xxxxxx */
+        (*output_pointer)[utf8_position] = (unsigned char) ((codepoint | 0x80)
+                & 0xBF);
+        codepoint >>= 6;
+    }
+    /* encode first byte */
+    if (utf8_length > 1) {
+        (*output_pointer)[0] = (unsigned char) ((codepoint | first_byte_mark)
+                & 0xFF);
+    } else {
+        (*output_pointer)[0] = (unsigned char) (codepoint & 0x7F);
+    }
+
+    *output_pointer += utf8_length;
+
+    return sequence_length;
+
+    fail: return 0;
+}
+
+/* Parse the input text into an unescaped cinput, and populate item. */
+static cJSON_bool parse_string(cJSON * const item,
+        parse_buffer * const input_buffer)
+{
+    const unsigned char *input_pointer = buffer_at_offset(input_buffer) + 1;
+    const unsigned char *input_end = buffer_at_offset(input_buffer) + 1;
+    unsigned char *output_pointer = NULL;
+    unsigned char *output = NULL;
+
+    /* not a string */
+    if (buffer_at_offset(input_buffer)[0] != '\"') {
+        goto fail;
+    }
+
+    {
+        /* calculate approximate size of the output (overestimate) */
+        size_t allocation_length = 0;
+        size_t skipped_bytes = 0;
+        while (((size_t)(input_end - input_buffer->content)
+                < input_buffer->length) && (*input_end != '\"')) {
+            /* is escape sequence */
+            if (input_end[0] == '\\') {
+                if ((size_t)(input_end + 1 - input_buffer->content)
+                        >= input_buffer->length) {
+                    /* prevent buffer overflow when last input character is a 
backslash */
+                    goto fail;
+                }
+                skipped_bytes++;
+                input_end++;
+            }
+            input_end++;
+        }
+        if (((size_t)(input_end - input_buffer->content) >= 
input_buffer->length)
+                || (*input_end != '\"')) {
+            goto fail;
+            /* string ended unexpectedly */
+        }
+
+        /* This is at most how much we need for the output */
+        allocation_length = (size_t)(input_end - 
buffer_at_offset(input_buffer))
+                - skipped_bytes;
+        output = (unsigned char*) input_buffer->hooks.allocate(
+                allocation_length + sizeof(""));
+        if (output == NULL) {
+            goto fail;
+            /* allocation failure */
+        }
+    }
+
+    output_pointer = output;
+    /* loop through the string literal */
+    while (input_pointer < input_end) {
+        if (*input_pointer != '\\') {
+            *output_pointer++ = *input_pointer++;
+        }
+        /* escape sequence */
+        else {
+            unsigned char sequence_length = 2;
+            if ((input_end - input_pointer) < 1) {
+                goto fail;
+            }
+
+            switch (input_pointer[1]) {
+            case 'b':
+                *output_pointer++ = '\b';
+                break;
+            case 'f':
+                *output_pointer++ = '\f';
+                break;
+            case 'n':
+                *output_pointer++ = '\n';
+                break;
+            case 'r':
+                *output_pointer++ = '\r';
+                break;
+            case 't':
+                *output_pointer++ = '\t';
+                break;
+            case '\"':
+            case '\\':
+            case '/':
+                *output_pointer++ = input_pointer[1];
+                break;
+
+                /* UTF-16 literal */
+            case 'u':
+                sequence_length = utf16_literal_to_utf8(input_pointer,
+                        input_end, &output_pointer);
+                if (sequence_length == 0) {
+                    /* failed to convert UTF16-literal to UTF-8 */
+                    goto fail;
+                }
+                break;
+
+            default:
+                goto fail;
+            }
+            input_pointer += sequence_length;
+        }
+    }
+
+    /* zero terminate the output */
+    *output_pointer = '\0';
+
+    item->type = cJSON_String;
+    item->valuestring = (char*) output;
+
+    input_buffer->offset = (size_t)(input_end - input_buffer->content);
+    input_buffer->offset++;
+
+    return true;
+
+    fail: if (output != NULL) {
+        input_buffer->hooks.deallocate(output);
+    }
+
+    if (input_pointer != NULL) {
+        input_buffer->offset = (size_t)(input_pointer - input_buffer->content);
+    }
+
+    return false;
+}
+
+/* Render the cstring provided to an escaped version that can be printed. */
+static cJSON_bool print_string_ptr(const unsigned char * const input,
+        printbuffer * const output_buffer)
+{
+    const unsigned char *input_pointer = NULL;
+    unsigned char *output = NULL;
+    unsigned char *output_pointer = NULL;
+    size_t output_length = 0;
+    /* numbers of additional characters needed for escaping */
+    size_t escape_characters = 0;
+
+    if (output_buffer == NULL) {
+        return false;
+    }
+
+    /* empty string */
+    if (input == NULL) {
+        output = ensure(output_buffer, sizeof("\"\""));
+        if (output == NULL) {
+            return false;
+        }
+        strcpy((char*) output, "\"\"");
+
+        return true;
+    }
+
+    /* set "flag" to 1 if something needs to be escaped */
+    for (input_pointer = input; *input_pointer; input_pointer++) {
+        switch (*input_pointer) {
+        case '\"':
+        case '\\':
+        case '\b':
+        case '\f':
+        case '\n':
+        case '\r':
+        case '\t':
+            /* one character escape sequence */
+            escape_characters++;
+            break;
+        default:
+            if (*input_pointer < 32) {
+                /* UTF-16 escape sequence uXXXX */
+                escape_characters += 5;
+            }
+            break;
+        }
+    }
+    output_length = (size_t)(input_pointer - input) + escape_characters;
+
+    output = ensure(output_buffer, output_length + sizeof("\"\""));
+    if (output == NULL) {
+        return false;
+    }
+
+    /* no characters have to be escaped */
+    if (escape_characters == 0) {
+        output[0] = '\"';
+        memcpy(output + 1, input, output_length);
+        output[output_length + 1] = '\"';
+        output[output_length + 2] = '\0';
+
+        return true;
+    }
+
+    output[0] = '\"';
+    output_pointer = output + 1;
+    /* copy the string */
+    for (input_pointer = input; *input_pointer != '\0';
+            (void) input_pointer++, output_pointer++) {
+        if ((*input_pointer > 31) && (*input_pointer != '\"')
+                && (*input_pointer != '\\')) {
+            /* normal character, copy */
+            *output_pointer = *input_pointer;
+        } else {
+            /* character needs to be escaped */
+            *output_pointer++ = '\\';
+            switch (*input_pointer) {
+            case '\\':
+                *output_pointer = '\\';
+                break;
+            case '\"':
+                *output_pointer = '\"';
+                break;
+            case '\b':
+                *output_pointer = 'b';
+                break;
+            case '\f':
+                *output_pointer = 'f';
+                break;
+            case '\n':
+                *output_pointer = 'n';
+                break;
+            case '\r':
+                *output_pointer = 'r';
+                break;
+            case '\t':
+                *output_pointer = 't';
+                break;
+            default:
+                /* escape and print as unicode codepoint */
+                sprintf((char*) output_pointer, "u%04x", *input_pointer);
+                output_pointer += 4;
+                break;
+            }
+        }
+    }
+    output[output_length + 1] = '\"';
+    output[output_length + 2] = '\0';
+
+    return true;
+}
+
+/* Invoke print_string_ptr (which is useful) on an item. */
+static cJSON_bool print_string(const cJSON * const item, printbuffer * const p)
+{
+    return print_string_ptr((unsigned char*) item->valuestring, p);
+}
+
+/* Predeclare these prototypes. */
+static cJSON_bool parse_value(cJSON * const item,
+        parse_buffer * const input_buffer);
+static cJSON_bool print_value(const cJSON * const item,
+        printbuffer * const output_buffer);
+static cJSON_bool parse_array(cJSON * const item,
+        parse_buffer * const input_buffer);
+static cJSON_bool print_array(const cJSON * const item,
+        printbuffer * const output_buffer);
+static cJSON_bool parse_object(cJSON * const item,
+        parse_buffer * const input_buffer);
+static cJSON_bool print_object(const cJSON * const item,
+        printbuffer * const output_buffer);
+
+/* Utility to jump whitespace and cr/lf */
+static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer)
+{
+    if ((buffer == NULL) || (buffer->content == NULL)) {
+        return NULL;
+    }
+
+    while (can_access_at_index(buffer, 0) && (buffer_at_offset(buffer)[0] <= 
32)) {
+        buffer->offset++;
+    }
+
+    if (buffer->offset == buffer->length) {
+        buffer->offset--;
+    }
+
+    return buffer;
+}
+
+/* skip the UTF-8 BOM (byte order mark) if it is at the beginning of a buffer 
*/
+static parse_buffer *skip_utf8_bom(parse_buffer * const buffer)
+{
+    if ((buffer == NULL) || (buffer->content == NULL)
+            || (buffer->offset != 0)) {
+        return NULL;
+    }
+
+    if (can_access_at_index(buffer, 4)
+            && (strncmp((const char*) buffer_at_offset(buffer), "\xEF\xBB\xBF",
+                    3) == 0)) {
+        buffer->offset += 3;
+    }
+
+    return buffer;
+}
+
+/* Parse an object - create a new root, and populate. */
+CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char 
**return_parse_end, cJSON_bool require_null_terminated)
+{
+    parse_buffer buffer = {0, 0, 0, 0, {0, 0, 0}};
+    cJSON *item = NULL;
+
+    /* reset error position */
+    global_error.json = NULL;
+    global_error.position = 0;
+
+    if (value == NULL)
+    {
+        goto fail;
+    }
+
+    buffer.content = (const unsigned char*)value;
+    buffer.length = strlen((const char*)value) + sizeof("");
+    buffer.offset = 0;
+    buffer.hooks = global_hooks;
+
+    item = cJSON_New_Item(&global_hooks);
+    if (item == NULL) /* memory fail */
+    {
+        goto fail;
+    }
+
+    if (!parse_value(item, buffer_skip_whitespace(skip_utf8_bom(&buffer))))
+    {
+        /* parse failure. ep is set. */
+        goto fail;
+    }
+
+    /* if we require null-terminated JSON without appended garbage, skip and 
then check for a null terminator */
+    if (require_null_terminated)
+    {
+        buffer_skip_whitespace(&buffer);
+        if ((buffer.offset >= buffer.length) || buffer_at_offset(&buffer)[0] 
!= '\0')
+        {
+            goto fail;
+        }
+    }
+    if (return_parse_end)
+    {
+        *return_parse_end = (const char*)buffer_at_offset(&buffer);
+    }
+
+    return item;
+
+    fail:
+    if (item != NULL)
+    {
+        cJSON_Delete(item);
+    }
+
+    if (value != NULL)
+    {
+        error local_error;
+        local_error.json = (const unsigned char*)value;
+        local_error.position = 0;
+
+        if (buffer.offset < buffer.length)
+        {
+            local_error.position = buffer.offset;
+        }
+        else if (buffer.length > 0)
+        {
+            local_error.position = buffer.length - 1;
+        }
+
+        if (return_parse_end != NULL)
+        {
+            *return_parse_end = (const char*)local_error.json + 
local_error.position;
+        }
+
+        global_error = local_error;
+    }
+
+    return NULL;
+}
+
+/* Default options for cJSON_Parse */
+CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value)
+{
+    return cJSON_ParseWithOpts(value, 0, 0);
+}
+
+#define cjson_min(a, b) ((a < b) ? a : b)
+
+static unsigned char *print(const cJSON * const item, cJSON_bool format,
+        const internal_hooks * const hooks)
+{
+    static const size_t default_buffer_size = 256;
+    printbuffer buffer[1];
+    unsigned char *printed = NULL;
+
+    memset(buffer, 0, sizeof(buffer));
+
+    /* create buffer */
+    buffer->buffer = (unsigned char*) hooks->allocate(default_buffer_size);
+    buffer->length = default_buffer_size;
+    buffer->format = format;
+    buffer->hooks = *hooks;
+    if (buffer->buffer == NULL) {
+        goto fail;
+    }
+
+    /* print the value */
+    if (!print_value(item, buffer)) {
+        goto fail;
+    }
+    update_offset(buffer);
+
+    /* check if reallocate is available */
+    if (hooks->reallocate != NULL) {
+        printed = (unsigned char*) hooks->reallocate(buffer->buffer,
+                buffer->offset + 1);
+        if (printed == NULL) {
+            goto fail;
+        }
+        buffer->buffer = NULL;
+    } else /* otherwise copy the JSON over to a new buffer */
+    {
+        printed = (unsigned char*) hooks->allocate(buffer->offset + 1);
+        if (printed == NULL) {
+            goto fail;
+        }
+        memcpy(printed, buffer->buffer,
+                cjson_min(buffer->length, buffer->offset + 1));
+        printed[buffer->offset] = '\0'; /* just to be sure */
+
+        /* free the buffer */
+        hooks->deallocate(buffer->buffer);
+    }
+
+    return printed;
+
+    fail: if (buffer->buffer != NULL) {
+        hooks->deallocate(buffer->buffer);
+    }
+
+    if (printed != NULL) {
+        hooks->deallocate(printed);
+    }
+
+    return NULL;
+}
+
+/* Render a cJSON item/entity/structure to text. */
+CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item)
+{
+    return (char*)print(item, true, &global_hooks);
+}
+
+CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item)
+{
+    return (char*)print(item, false, &global_hooks);
+}
+
+CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, 
cJSON_bool fmt)
+{
+    printbuffer p = {0, 0, 0, 0, 0, 0, {0, 0, 0}};
+
+    if (prebuffer < 0)
+    {
+        return NULL;
+    }
+
+    p.buffer = (unsigned char*)global_hooks.allocate((size_t)prebuffer);
+    if (!p.buffer)
+    {
+        return NULL;
+    }
+
+    p.length = (size_t)prebuffer;
+    p.offset = 0;
+    p.noalloc = false;
+    p.format = fmt;
+    p.hooks = global_hooks;
+
+    if (!print_value(item, &p))
+    {
+        global_hooks.deallocate(p.buffer);
+        return NULL;
+    }
+
+    return (char*)p.buffer;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buf,
+        const int len, const cJSON_bool fmt)
+{
+    printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } };
+
+    if ((len < 0) || (buf == NULL)) {
+        return false;
+    }
+
+    p.buffer = (unsigned char*) buf;
+    p.length = (size_t) len;
+    p.offset = 0;
+    p.noalloc = true;
+    p.format = fmt;
+    p.hooks = global_hooks;
+
+    return print_value(item, &p);
+}
+
+/* Parser core - when encountering text, process appropriately. */
+static cJSON_bool parse_value(cJSON * const item,
+        parse_buffer * const input_buffer)
+{
+    if ((input_buffer == NULL) || (input_buffer->content == NULL)) {
+        return false; /* no input */
+    }
+
+    /* parse the different types of values */
+    /* null */
+    if (can_read(input_buffer, 4)
+            && (strncmp((const char*) buffer_at_offset(input_buffer), "null", 
4)
+                    == 0)) {
+        item->type = cJSON_NULL;
+        input_buffer->offset += 4;
+        return true;
+    }
+    /* false */
+    if (can_read(input_buffer, 5)
+            && (strncmp((const char*) buffer_at_offset(input_buffer), "false",
+                    5) == 0)) {
+        item->type = cJSON_False;
+        input_buffer->offset += 5;
+        return true;
+    }
+    /* true */
+    if (can_read(input_buffer, 4)
+            && (strncmp((const char*) buffer_at_offset(input_buffer), "true", 
4)
+                    == 0)) {
+        item->type = cJSON_True;
+        item->valueint = 1;
+        input_buffer->offset += 4;
+        return true;
+    }
+    /* string */
+    if (can_access_at_index(input_buffer, 0)
+            && (buffer_at_offset(input_buffer)[0] == '\"')) {
+        return parse_string(item, input_buffer);
+    }
+    /* number */
+    if (can_access_at_index(input_buffer, 0)
+            && ((buffer_at_offset(input_buffer)[0] == '-')
+                    || ((buffer_at_offset(input_buffer)[0] >= '0')
+                            && (buffer_at_offset(input_buffer)[0] <= '9')))) {
+        return parse_number(item, input_buffer);
+    }
+    /* array */
+    if (can_access_at_index(input_buffer, 0)
+            && (buffer_at_offset(input_buffer)[0] == '[')) {
+        return parse_array(item, input_buffer);
+    }
+    /* object */
+    if (can_access_at_index(input_buffer, 0)
+            && (buffer_at_offset(input_buffer)[0] == '{')) {
+        return parse_object(item, input_buffer);
+    }
+
+    return false;
+}
+
+/* Render a value to text. */
+static cJSON_bool print_value(const cJSON * const item,
+        printbuffer * const output_buffer)
+{
+    unsigned char *output = NULL;
+
+    if ((item == NULL) || (output_buffer == NULL)) {
+        return false;
+    }
+
+    switch ((item->type) & 0xFF) {
+    case cJSON_NULL:
+        output = ensure(output_buffer, 5);
+        if (output == NULL) {
+            return false;
+        }
+        strcpy((char*) output, "null");
+        return true;
+
+    case cJSON_False:
+        output = ensure(output_buffer, 6);
+        if (output == NULL) {
+            return false;
+        }
+        strcpy((char*) output, "false");
+        return true;
+
+    case cJSON_True:
+        output = ensure(output_buffer, 5);
+        if (output == NULL) {
+            return false;
+        }
+        strcpy((char*) output, "true");
+        return true;
+
+    case cJSON_Number:
+        return print_number(item, output_buffer);
+
+    case cJSON_Raw: {
+        size_t raw_length = 0;
+        if (item->valuestring == NULL) {
+            return false;
+        }
+
+        raw_length = strlen(item->valuestring) + sizeof("");
+        output = ensure(output_buffer, raw_length);
+        if (output == NULL) {
+            return false;
+        }
+        memcpy(output, item->valuestring, raw_length);
+        return true;
+    }
+
+    case cJSON_String:
+        return print_string(item, output_buffer);
+
+    case cJSON_Array:
+        return print_array(item, output_buffer);
+
+    case cJSON_Object:
+        return print_object(item, output_buffer);
+
+    default:
+        return false;
+    }
+}
+
+/* Build an array from input text. */
+static cJSON_bool parse_array(cJSON * const item,
+        parse_buffer * const input_buffer)
+{
+    cJSON *head = NULL; /* head of the linked list */
+    cJSON *current_item = NULL;
+
+    if (input_buffer->depth >= CJSON_NESTING_LIMIT) {
+        return false; /* to deeply nested */
+    }
+    input_buffer->depth++;
+
+    if (buffer_at_offset(input_buffer)[0] != '[') {
+        /* not an array */
+        goto fail;
+    }
+
+    input_buffer->offset++;
+    buffer_skip_whitespace(input_buffer);
+    if (can_access_at_index(input_buffer, 0)
+            && (buffer_at_offset(input_buffer)[0] == ']')) {
+        /* empty array */
+        goto success;
+    }
+
+    /* check if we skipped to the end of the buffer */
+    if (cannot_access_at_index(input_buffer, 0)) {
+        input_buffer->offset--;
+        goto fail;
+    }
+
+    /* step back to character in front of the first element */
+    input_buffer->offset--;
+    /* loop through the comma separated array elements */
+    do {
+        /* allocate next item */
+        cJSON *new_item = cJSON_New_Item(&(input_buffer->hooks));
+        if (new_item == NULL) {
+            goto fail;
+            /* allocation failure */
+        }
+
+        /* attach next item to list */
+        if (head == NULL) {
+            /* start the linked list */
+            current_item = head = new_item;
+        } else {
+            /* add to the end and advance */
+            current_item->next = new_item;
+            new_item->prev = current_item;
+            current_item = new_item;
+        }
+
+        /* parse next value */
+        input_buffer->offset++;
+        buffer_skip_whitespace(input_buffer);
+        if (!parse_value(current_item, input_buffer)) {
+            goto fail;
+            /* failed to parse value */
+        }
+        buffer_skip_whitespace(input_buffer);
+    } while (can_access_at_index(input_buffer, 0)
+            && (buffer_at_offset(input_buffer)[0] == ','));
+
+    if (cannot_access_at_index(input_buffer, 0)
+            || buffer_at_offset(input_buffer)[0] != ']') {
+        goto fail;
+        /* expected end of array */
+    }
+
+    success: input_buffer->depth--;
+
+    item->type = cJSON_Array;
+    item->child = head;
+
+    input_buffer->offset++;
+
+    return true;
+
+    fail: if (head != NULL) {
+        cJSON_Delete(head);
+    }
+
+    return false;
+}
+
+/* Render an array to text */
+static cJSON_bool print_array(const cJSON * const item,
+        printbuffer * const output_buffer)
+{
+    unsigned char *output_pointer = NULL;
+    size_t length = 0;
+    cJSON *current_element = item->child;
+
+    if (output_buffer == NULL) {
+        return false;
+    }
+
+    /* Compose the output array. */
+    /* opening square bracket */
+    output_pointer = ensure(output_buffer, 1);
+    if (output_pointer == NULL) {
+        return false;
+    }
+
+    *output_pointer = '[';
+    output_buffer->offset++;
+    output_buffer->depth++;
+
+    while (current_element != NULL) {
+        if (!print_value(current_element, output_buffer)) {
+            return false;
+        }
+        update_offset(output_buffer);
+        if (current_element->next) {
+            length = (size_t)(output_buffer->format ? 2 : 1);
+            output_pointer = ensure(output_buffer, length + 1);
+            if (output_pointer == NULL) {
+                return false;
+            }
+            *output_pointer++ = ',';
+            if (output_buffer->format) {
+                *output_pointer++ = ' ';
+            }
+            *output_pointer = '\0';
+            output_buffer->offset += length;
+        }
+        current_element = current_element->next;
+    }
+
+    output_pointer = ensure(output_buffer, 2);
+    if (output_pointer == NULL) {
+        return false;
+    }
+    *output_pointer++ = ']';
+    *output_pointer = '\0';
+    output_buffer->depth--;
+
+    return true;
+}
+
+/* Build an object from the text. */
+static cJSON_bool parse_object(cJSON * const item,
+        parse_buffer * const input_buffer)
+{
+    cJSON *head = NULL; /* linked list head */
+    cJSON *current_item = NULL;
+
+    if (input_buffer->depth >= CJSON_NESTING_LIMIT) {
+        return false; /* to deeply nested */
+    }
+    input_buffer->depth++;
+
+    if (cannot_access_at_index(input_buffer, 0)
+            || (buffer_at_offset(input_buffer)[0] != '{')) {
+        goto fail;
+        /* not an object */
+    }
+
+    input_buffer->offset++;
+    buffer_skip_whitespace(input_buffer);
+    if (can_access_at_index(input_buffer, 0)
+            && (buffer_at_offset(input_buffer)[0] == '}')) {
+        goto success;
+        /* empty object */
+    }
+
+    /* check if we skipped to the end of the buffer */
+    if (cannot_access_at_index(input_buffer, 0)) {
+        input_buffer->offset--;
+        goto fail;
+    }
+
+    /* step back to character in front of the first element */
+    input_buffer->offset--;
+    /* loop through the comma separated array elements */
+    do {
+        /* allocate next item */
+        cJSON *new_item = cJSON_New_Item(&(input_buffer->hooks));
+        if (new_item == NULL) {
+            goto fail;
+            /* allocation failure */
+        }
+
+        /* attach next item to list */
+        if (head == NULL) {
+            /* start the linked list */
+            current_item = head = new_item;
+        } else {
+            /* add to the end and advance */
+            current_item->next = new_item;
+            new_item->prev = current_item;
+            current_item = new_item;
+        }
+
+        /* parse the name of the child */
+        input_buffer->offset++;
+        buffer_skip_whitespace(input_buffer);
+        if (!parse_string(current_item, input_buffer)) {
+            goto fail;
+            /* faile to parse name */
+        }
+        buffer_skip_whitespace(input_buffer);
+
+        /* swap valuestring and string, because we parsed the name */
+        current_item->string = current_item->valuestring;
+        current_item->valuestring = NULL;
+
+        if (cannot_access_at_index(input_buffer, 0)
+                || (buffer_at_offset(input_buffer)[0] != ':')) {
+            goto fail;
+            /* invalid object */
+        }
+
+        /* parse the value */
+        input_buffer->offset++;
+        buffer_skip_whitespace(input_buffer);
+        if (!parse_value(current_item, input_buffer)) {
+            goto fail;
+            /* failed to parse value */
+        }
+        buffer_skip_whitespace(input_buffer);
+    } while (can_access_at_index(input_buffer, 0)
+            && (buffer_at_offset(input_buffer)[0] == ','));
+
+    if (cannot_access_at_index(input_buffer, 0)
+            || (buffer_at_offset(input_buffer)[0] != '}')) {
+        goto fail;
+        /* expected end of object */
+    }
+
+    success: input_buffer->depth--;
+
+    item->type = cJSON_Object;
+    item->child = head;
+
+    input_buffer->offset++;
+    return true;
+
+    fail: if (head != NULL) {
+        cJSON_Delete(head);
+    }
+
+    return false;
+}
+
+/* Render an object to text. */
+static cJSON_bool print_object(const cJSON * const item,
+        printbuffer * const output_buffer)
+{
+    unsigned char *output_pointer = NULL;
+    size_t length = 0;
+    cJSON *current_item = item->child;
+
+    if (output_buffer == NULL) {
+        return false;
+    }
+
+    /* Compose the output: */
+    length = (size_t)(output_buffer->format ? 2 : 1); /* fmt: {\n */
+    output_pointer = ensure(output_buffer, length + 1);
+    if (output_pointer == NULL) {
+        return false;
+    }
+
+    *output_pointer++ = '{';
+    output_buffer->depth++;
+    if (output_buffer->format) {
+        *output_pointer++ = '\n';
+    }
+    output_buffer->offset += length;
+
+    while (current_item) {
+        if (output_buffer->format) {
+            size_t i;
+            output_pointer = ensure(output_buffer, output_buffer->depth);
+            if (output_pointer == NULL) {
+                return false;
+            }
+            for (i = 0; i < output_buffer->depth; i++) {
+                *output_pointer++ = '\t';
+            }
+            output_buffer->offset += output_buffer->depth;
+        }
+
+        /* print key */
+        if (!print_string_ptr((unsigned char*) current_item->string,
+                output_buffer)) {
+            return false;
+        }
+        update_offset(output_buffer);
+
+        length = (size_t)(output_buffer->format ? 2 : 1);
+        output_pointer = ensure(output_buffer, length);
+        if (output_pointer == NULL) {
+            return false;
+        }
+        *output_pointer++ = ':';
+        if (output_buffer->format) {
+            *output_pointer++ = '\t';
+        }
+        output_buffer->offset += length;
+
+        /* print value */
+        if (!print_value(current_item, output_buffer)) {
+            return false;
+        }
+        update_offset(output_buffer);
+
+        /* print comma if not last */
+        length = ((size_t)(output_buffer->format ? 1 : 0)
+                + (size_t)(current_item->next ? 1 : 0));
+        output_pointer = ensure(output_buffer, length + 1);
+        if (output_pointer == NULL) {
+            return false;
+        }
+        if (current_item->next) {
+            *output_pointer++ = ',';
+        }
+
+        if (output_buffer->format) {
+            *output_pointer++ = '\n';
+        }
+        *output_pointer = '\0';
+        output_buffer->offset += length;
+
+        current_item = current_item->next;
+    }
+
+    output_pointer = ensure(output_buffer,
+            output_buffer->format ? (output_buffer->depth + 1) : 2);
+    if (output_pointer == NULL) {
+        return false;
+    }
+    if (output_buffer->format) {
+        size_t i;
+        for (i = 0; i < (output_buffer->depth - 1); i++) {
+            *output_pointer++ = '\t';
+        }
+    }
+    *output_pointer++ = '}';
+    *output_pointer = '\0';
+    output_buffer->depth--;
+
+    return true;
+}
+
+/* Get Array size/item / object item. */
+CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array)
+{
+    cJSON *child = NULL;
+    size_t size = 0;
+
+    if (array == NULL) {
+        return 0;
+    }
+
+    child = array->child;
+
+    while (child != NULL) {
+        size++;
+        child = child->next;
+    }
+
+    /* FIXME: Can overflow here. Cannot be fixed without breaking the API */
+
+    return (int) size;
+}
+
+static cJSON* get_array_item(const cJSON *array, size_t index)
+{
+    cJSON *current_child = NULL;
+
+    if (array == NULL) {
+        return NULL;
+    }
+
+    current_child = array->child;
+    while ((current_child != NULL) && (index > 0)) {
+        index--;
+        current_child = current_child->next;
+    }
+
+    return current_child;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index)
+{
+    if (index < 0)
+    {
+        return NULL;
+    }
+
+    return get_array_item(array, (size_t)index);
+}
+
+static cJSON *get_object_item(const cJSON * const object,
+        const char * const name, const cJSON_bool case_sensitive)
+{
+    cJSON *current_element = NULL;
+
+    if ((object == NULL) || (name == NULL)) {
+        return NULL;
+    }
+
+    current_element = object->child;
+    if (case_sensitive) {
+        while ((current_element != NULL) && (current_element->string != NULL)
+                && (strcmp(name, current_element->string) != 0)) {
+            current_element = current_element->next;
+        }
+    } else {
+        while ((current_element != NULL)
+                && (case_insensitive_strcmp((const unsigned char*) name,
+                        (const unsigned char*) (current_element->string)) != 
0)) {
+            current_element = current_element->next;
+        }
+    }
+
+    if ((current_element == NULL) || (current_element->string == NULL)) {
+        return NULL;
+    }
+
+    return current_element;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const 
char * const string)
+{
+    return get_object_item(object, string, false);
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const 
object, const char * const string)
+{
+    return get_object_item(object, string, true);
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object,
+        const char *string)
+{
+    return cJSON_GetObjectItem(object, string) ? 1 : 0;
+}
+
+/* Utility for array list handling. */
+static void suffix_object(cJSON *prev, cJSON *item)
+{
+    prev->next = item;
+    item->prev = prev;
+}
+
+/* Utility for handling references. */
+static cJSON *create_reference(const cJSON *item,
+        const internal_hooks * const hooks)
+{
+    cJSON *reference = NULL;
+    if (item == NULL) {
+        return NULL;
+    }
+
+    reference = cJSON_New_Item(hooks);
+    if (reference == NULL) {
+        return NULL;
+    }
+
+    memcpy(reference, item, sizeof(cJSON));
+    reference->string = NULL;
+    reference->type |= cJSON_IsReference;
+    reference->next = reference->prev = NULL;
+    return reference;
+}
+
+static cJSON_bool add_item_to_array(cJSON *array, cJSON *item)
+{
+    cJSON *child = NULL;
+
+    if ((item == NULL) || (array == NULL)) {
+        return false;
+    }
+
+    child = array->child;
+
+    if (child == NULL) {
+        /* list is empty, start new one */
+        array->child = item;
+    } else {
+        /* append to the end */
+        while (child->next) {
+            child = child->next;
+        }
+        suffix_object(child, item);
+    }
+
+    return true;
+}
+
+/* Add item to array/object. */
+CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item)
+{
+    add_item_to_array(array, item);
+}
+
+#if defined(__clang__) || (defined(__GNUC__)  && ((__GNUC__ > 4) || ((__GNUC__ 
== 4) && (__GNUC_MINOR__ > 5))))
+#pragma GCC diagnostic push
+#endif
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wcast-qual"
+#endif
+/* helper function to cast away const */
+static void* cast_away_const(const void* string)
+{
+    return (void*) string;
+}
+#if defined(__clang__) || (defined(__GNUC__)  && ((__GNUC__ > 4) || ((__GNUC__ 
== 4) && (__GNUC_MINOR__ > 5))))
+#pragma GCC diagnostic pop
+#endif
+
+static cJSON_bool add_item_to_object(cJSON * const object,
+        const char * const string, cJSON * const item,
+        const internal_hooks * const hooks, const cJSON_bool constant_key)
+{
+    char *new_key = NULL;
+    int new_type = cJSON_Invalid;
+
+    if ((object == NULL) || (string == NULL) || (item == NULL)) {
+        return false;
+    }
+
+    if (constant_key) {
+        new_key = (char*) cast_away_const(string);
+        new_type = item->type | cJSON_StringIsConst;
+    } else {
+        new_key = (char*) cJSON_strdup((const unsigned char*) string, hooks);
+        if (new_key == NULL) {
+            return false;
+        }
+
+        new_type = item->type & ~cJSON_StringIsConst;
+    }
+
+    if (!(item->type & cJSON_StringIsConst) && (item->string != NULL)) {
+        hooks->deallocate(item->string);
+    }
+
+    item->string = new_key;
+    item->type = new_type;
+
+    return add_item_to_array(object, item);
+}
+
+CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string,
+        cJSON *item)
+{
+    add_item_to_object(object, string, item, &global_hooks, false);
+}
+
+/* Add an item to an object with constant string as key */
+CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string,
+        cJSON *item)
+{
+    add_item_to_object(object, string, item, &global_hooks, true);
+}
+
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item)
+{
+    if (array == NULL) {
+        return;
+    }
+
+    add_item_to_array(array, create_reference(item, &global_hooks));
+}
+
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object,
+        const char *string, cJSON *item)
+{
+    if ((object == NULL) || (string == NULL)) {
+        return;
+    }
+
+    add_item_to_object(object, string, create_reference(item, &global_hooks),
+            &global_hooks, false);
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * 
const name)
+{
+    cJSON *null = cJSON_CreateNull();
+    if (add_item_to_object(object, name, null, &global_hooks, false))
+    {
+        return null;
+    }
+
+    cJSON_Delete(null);
+    return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * 
const name)
+{
+    cJSON *true_item = cJSON_CreateTrue();
+    if (add_item_to_object(object, name, true_item, &global_hooks, false))
+    {
+        return true_item;
+    }
+
+    cJSON_Delete(true_item);
+    return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * 
const name)
+{
+    cJSON *false_item = cJSON_CreateFalse();
+    if (add_item_to_object(object, name, false_item, &global_hooks, false))
+    {
+        return false_item;
+    }
+
+    cJSON_Delete(false_item);
+    return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * 
const name, const cJSON_bool boolean)
+{
+    cJSON *bool_item = cJSON_CreateBool(boolean);
+    if (add_item_to_object(object, name, bool_item, &global_hooks, false))
+    {
+        return bool_item;
+    }
+
+    cJSON_Delete(bool_item);
+    return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char 
* const name, const double number)
+{
+    cJSON *number_item = cJSON_CreateNumber(number);
+    if (add_item_to_object(object, name, number_item, &global_hooks, false))
+    {
+        return number_item;
+    }
+
+    cJSON_Delete(number_item);
+    return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char 
* const name, const char * const string)
+{
+    cJSON *string_item = cJSON_CreateString(string);
+    if (add_item_to_object(object, name, string_item, &global_hooks, false))
+    {
+        return string_item;
+    }
+
+    cJSON_Delete(string_item);
+    return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * 
const name, const char * const raw)
+{
+    cJSON *raw_item = cJSON_CreateRaw(raw);
+    if (add_item_to_object(object, name, raw_item, &global_hooks, false))
+    {
+        return raw_item;
+    }
+
+    cJSON_Delete(raw_item);
+    return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char 
* const name)
+{
+    cJSON *object_item = cJSON_CreateObject();
+    if (add_item_to_object(object, name, object_item, &global_hooks, false))
+    {
+        return object_item;
+    }
+
+    cJSON_Delete(object_item);
+    return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * 
const name)
+{
+    cJSON *array = cJSON_CreateArray();
+    if (add_item_to_object(object, name, array, &global_hooks, false))
+    {
+        return array;
+    }
+
+    cJSON_Delete(array);
+    return NULL;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const 
item)
+{
+    if ((parent == NULL) || (item == NULL))
+    {
+        return NULL;
+    }
+
+    if (item->prev != NULL)
+    {
+        /* not the first element */
+        item->prev->next = item->next;
+    }
+    if (item->next != NULL)
+    {
+        /* not the last element */
+        item->next->prev = item->prev;
+    }
+
+    if (item == parent->child)
+    {
+        /* first element */
+        parent->child = item->next;
+    }
+    /* make sure the detached item doesn't point anywhere anymore */
+    item->prev = NULL;
+    item->next = NULL;
+
+    return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which)
+{
+    if (which < 0)
+    {
+        return NULL;
+    }
+
+    return cJSON_DetachItemViaPointer(array, get_array_item(array, 
(size_t)which));
+}
+
+CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which)
+{
+    cJSON_Delete(cJSON_DetachItemFromArray(array, which));
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char 
*string)
+{
+    cJSON *to_detach = cJSON_GetObjectItem(object, string);
+
+    return cJSON_DetachItemViaPointer(object, to_detach);
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, 
const char *string)
+{
+    cJSON *to_detach = cJSON_GetObjectItemCaseSensitive(object, string);
+
+    return cJSON_DetachItemViaPointer(object, to_detach);
+}
+
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char 
*string)
+{
+    cJSON_Delete(cJSON_DetachItemFromObject(object, string));
+}
+
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object,
+        const char *string)
+{
+    cJSON_Delete(cJSON_DetachItemFromObjectCaseSensitive(object, string));
+}
+
+/* Replace array/object items with new ones. */
+CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which,
+        cJSON *newitem)
+{
+    cJSON *after_inserted = NULL;
+
+    if (which < 0) {
+        return;
+    }
+
+    after_inserted = get_array_item(array, (size_t) which);
+    if (after_inserted == NULL) {
+        add_item_to_array(array, newitem);
+        return;
+    }
+
+    newitem->next = after_inserted;
+    newitem->prev = after_inserted->prev;
+    after_inserted->prev = newitem;
+    if (after_inserted == array->child) {
+        array->child = newitem;
+    } else {
+        newitem->prev->next = newitem;
+    }
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent,
+        cJSON * const item, cJSON * replacement)
+{
+    if ((parent == NULL) || (replacement == NULL) || (item == NULL)) {
+        return false;
+    }
+
+    if (replacement == item) {
+        return true;
+    }
+
+    replacement->next = item->next;
+    replacement->prev = item->prev;
+
+    if (replacement->next != NULL) {
+        replacement->next->prev = replacement;
+    }
+    if (replacement->prev != NULL) {
+        replacement->prev->next = replacement;
+    }
+    if (parent->child == item) {
+        parent->child = replacement;
+    }
+
+    item->next = NULL;
+    item->prev = NULL;
+    cJSON_Delete(item);
+
+    return true;
+}
+
+CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which,
+        cJSON *newitem)
+{
+    if (which < 0) {
+        return;
+    }
+
+    cJSON_ReplaceItemViaPointer(array, get_array_item(array, (size_t) which),
+            newitem);
+}
+
+static cJSON_bool replace_item_in_object(cJSON *object, const char *string,
+        cJSON *replacement, cJSON_bool case_sensitive)
+{
+    if ((replacement == NULL) || (string == NULL)) {
+        return false;
+    }
+
+    /* replace the name in the replacement */
+    if (!(replacement->type & cJSON_StringIsConst)
+            && (replacement->string != NULL)) {
+        cJSON_free(replacement->string);
+    }
+    replacement->string = (char*) cJSON_strdup((const unsigned char*) string,
+            &global_hooks);
+    replacement->type &= ~cJSON_StringIsConst;
+
+    cJSON_ReplaceItemViaPointer(object,
+            get_object_item(object, string, case_sensitive), replacement);
+
+    return true;
+}
+
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object, const char *string,
+        cJSON *newitem)
+{
+    replace_item_in_object(object, string, newitem, false);
+}
+
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,
+        const char *string, cJSON *newitem)
+{
+    replace_item_in_object(object, string, newitem, true);
+}
+
+/* Create basic types: */
+CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void)
+{
+    cJSON *item = cJSON_New_Item(&global_hooks);
+    if(item)
+    {
+        item->type = cJSON_NULL;
+    }
+
+    return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void)
+{
+    cJSON *item = cJSON_New_Item(&global_hooks);
+    if(item)
+    {
+        item->type = cJSON_True;
+    }
+
+    return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void)
+{
+    cJSON *item = cJSON_New_Item(&global_hooks);
+    if(item)
+    {
+        item->type = cJSON_False;
+    }
+
+    return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool b)
+{
+    cJSON *item = cJSON_New_Item(&global_hooks);
+    if(item)
+    {
+        item->type = b ? cJSON_True : cJSON_False;
+    }
+
+    return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num)
+{
+    cJSON *item = cJSON_New_Item(&global_hooks);
+    if(item)
+    {
+        item->type = cJSON_Number;
+        item->valuedouble = num;
+
+        /* use saturation in case of overflow */
+        if (num >= INT_MAX)
+        {
+            item->valueint = INT_MAX;
+        }
+        else if (num <= (double)INT_MIN)
+        {
+            item->valueint = INT_MIN;
+        }
+        else
+        {
+            item->valueint = (int)num;
+        }
+    }
+
+    return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string)
+{
+    cJSON *item = cJSON_New_Item(&global_hooks);
+    if(item)
+    {
+        item->type = cJSON_String;
+        item->valuestring = (char*)cJSON_strdup((const unsigned char*)string, 
&global_hooks);
+        if(!item->valuestring)
+        {
+            cJSON_Delete(item);
+            return NULL;
+        }
+    }
+
+    return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string)
+{
+    cJSON *item = cJSON_New_Item(&global_hooks);
+    if (item != NULL)
+    {
+        item->type = cJSON_String | cJSON_IsReference;
+        item->valuestring = (char*)cast_away_const(string);
+    }
+
+    return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child)
+{
+    cJSON *item = cJSON_New_Item(&global_hooks);
+    if (item != NULL) {
+        item->type = cJSON_Object | cJSON_IsReference;
+        item->child = (cJSON*)cast_away_const(child);
+    }
+
+    return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child) {
+    cJSON *item = cJSON_New_Item(&global_hooks);
+    if (item != NULL) {
+        item->type = cJSON_Array | cJSON_IsReference;
+        item->child = (cJSON*)cast_away_const(child);
+    }
+
+    return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw)
+{
+    cJSON *item = cJSON_New_Item(&global_hooks);
+    if(item)
+    {
+        item->type = cJSON_Raw;
+        item->valuestring = (char*)cJSON_strdup((const unsigned char*)raw, 
&global_hooks);
+        if(!item->valuestring)
+        {
+            cJSON_Delete(item);
+            return NULL;
+        }
+    }
+
+    return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void)
+{
+    cJSON *item = cJSON_New_Item(&global_hooks);
+    if(item)
+    {
+        item->type=cJSON_Array;
+    }
+
+    return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void)
+{
+    cJSON *item = cJSON_New_Item(&global_hooks);
+    if (item)
+    {
+        item->type = cJSON_Object;
+    }
+
+    return item;
+}
+
+/* Create Arrays: */
+CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count)
+{
+    size_t i = 0;
+    cJSON *n = NULL;
+    cJSON *p = NULL;
+    cJSON *a = NULL;
+
+    if ((count < 0) || (numbers == NULL))
+    {
+        return NULL;
+    }
+
+    a = cJSON_CreateArray();
+    for(i = 0; a && (i < (size_t)count); i++)
+    {
+        n = cJSON_CreateNumber(numbers[i]);
+        if (!n)
+        {
+            cJSON_Delete(a);
+            return NULL;
+        }
+        if(!i)
+        {
+            a->child = n;
+        }
+        else
+        {
+            suffix_object(p, n);
+        }
+        p = n;
+    }
+
+    return a;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count)
+{
+    size_t i = 0;
+    cJSON *n = NULL;
+    cJSON *p = NULL;
+    cJSON *a = NULL;
+
+    if ((count < 0) || (numbers == NULL))
+    {
+        return NULL;
+    }
+
+    a = cJSON_CreateArray();
+
+    for(i = 0; a && (i < (size_t)count); i++)
+    {
+        n = cJSON_CreateNumber((double)numbers[i]);
+        if(!n)
+        {
+            cJSON_Delete(a);
+            return NULL;
+        }
+        if(!i)
+        {
+            a->child = n;
+        }
+        else
+        {
+            suffix_object(p, n);
+        }
+        p = n;
+    }
+
+    return a;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count)
+{
+    size_t i = 0;
+    cJSON *n = NULL;
+    cJSON *p = NULL;
+    cJSON *a = NULL;
+
+    if ((count < 0) || (numbers == NULL))
+    {
+        return NULL;
+    }
+
+    a = cJSON_CreateArray();
+
+    for(i = 0;a && (i < (size_t)count); i++)
+    {
+        n = cJSON_CreateNumber(numbers[i]);
+        if(!n)
+        {
+            cJSON_Delete(a);
+            return NULL;
+        }
+        if(!i)
+        {
+            a->child = n;
+        }
+        else
+        {
+            suffix_object(p, n);
+        }
+        p = n;
+    }
+
+    return a;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count)
+{
+    size_t i = 0;
+    cJSON *n = NULL;
+    cJSON *p = NULL;
+    cJSON *a = NULL;
+
+    if ((count < 0) || (strings == NULL))
+    {
+        return NULL;
+    }
+
+    a = cJSON_CreateArray();
+
+    for (i = 0; a && (i < (size_t)count); i++)
+    {
+        n = cJSON_CreateString(strings[i]);
+        if(!n)
+        {
+            cJSON_Delete(a);
+            return NULL;
+        }
+        if(!i)
+        {
+            a->child = n;
+        }
+        else
+        {
+            suffix_object(p,n);
+        }
+        p = n;
+    }
+
+    return a;
+}
+
+/* Duplication */
+CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse)
+{
+    cJSON *newitem = NULL;
+    cJSON *child = NULL;
+    cJSON *next = NULL;
+    cJSON *newchild = NULL;
+
+    /* Bail on bad ptr */
+    if (!item)
+    {
+        goto fail;
+    }
+    /* Create new item */
+    newitem = cJSON_New_Item(&global_hooks);
+    if (!newitem)
+    {
+        goto fail;
+    }
+    /* Copy over all vars */
+    newitem->type = item->type & (~cJSON_IsReference);
+    newitem->valueint = item->valueint;
+    newitem->valuedouble = item->valuedouble;
+    if (item->valuestring)
+    {
+        newitem->valuestring = (char*)cJSON_strdup((unsigned 
char*)item->valuestring, &global_hooks);
+        if (!newitem->valuestring)
+        {
+            goto fail;
+        }
+    }
+    if (item->string)
+    {
+        newitem->string = (item->type&cJSON_StringIsConst) ? item->string : 
(char*)cJSON_strdup((unsigned char*)item->string, &global_hooks);
+        if (!newitem->string)
+        {
+            goto fail;
+        }
+    }
+    /* If non-recursive, then we're done! */
+    if (!recurse)
+    {
+        return newitem;
+    }
+    /* Walk the ->next chain for the child. */
+    child = item->child;
+    while (child != NULL)
+    {
+        newchild = cJSON_Duplicate(child, true); /* Duplicate (with recurse) 
each item in the ->next chain */
+        if (!newchild)
+        {
+            goto fail;
+        }
+        if (next != NULL)
+        {
+            /* If newitem->child already set, then crosswire ->prev and ->next 
and move on */
+            next->next = newchild;
+            newchild->prev = next;
+            next = newchild;
+        }
+        else
+        {
+            /* Set newitem->child and move to it */
+            newitem->child = newchild;
+            next = newchild;
+        }
+        child = child->next;
+    }
+
+    return newitem;
+
+    fail:
+    if (newitem != NULL)
+    {
+        cJSON_Delete(newitem);
+    }
+
+    return NULL;
+}
+
+CJSON_PUBLIC(void) cJSON_Minify(char *json)
+{
+    unsigned char *into = (unsigned char*) json;
+
+    if (json == NULL) {
+        return;
+    }
+
+    while (*json) {
+        if (*json == ' ') {
+            json++;
+        } else if (*json == '\t') {
+            /* Whitespace characters. */
+            json++;
+        } else if (*json == '\r') {
+            json++;
+        } else if (*json == '\n') {
+            json++;
+        } else if ((*json == '/') && (json[1] == '/')) {
+            /* double-slash comments, to end of line. */
+            while (*json && (*json != '\n')) {
+                json++;
+            }
+        } else if ((*json == '/') && (json[1] == '*')) {
+            /* multiline comments. */
+            while (*json && !((*json == '*') && (json[1] == '/'))) {
+                json++;
+            }
+            json += 2;
+        } else if (*json == '\"') {
+            /* string literals, which are \" sensitive. */
+            *into++ = (unsigned char) *json++;
+            while (*json && (*json != '\"')) {
+                if (*json == '\\') {
+                    *into++ = (unsigned char) *json++;
+                }
+                *into++ = (unsigned char) *json++;
+            }
+            *into++ = (unsigned char) *json++;
+        } else {
+            /* All other characters. */
+            *into++ = (unsigned char) *json++;
+        }
+    }
+
+    /* and null-terminate. */
+    *into = '\0';
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item)
+{
+    if (item == NULL) {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_Invalid;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item)
+{
+    if (item == NULL) {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_False;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item)
+{
+    if (item == NULL) {
+        return false;
+    }
+
+    return (item->type & 0xff) == cJSON_True;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item)
+{
+    if (item == NULL) {
+        return false;
+    }
+
+    return (item->type & (cJSON_True | cJSON_False)) != 0;
+}
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item)
+{
+    if (item == NULL) {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_NULL;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item)
+{
+    if (item == NULL) {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_Number;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item)
+{
+    if (item == NULL) {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_String;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item)
+{
+    if (item == NULL) {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_Array;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item)
+{
+    if (item == NULL) {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_Object;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item)
+{
+    if (item == NULL) {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_Raw;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a,
+        const cJSON * const b, const cJSON_bool case_sensitive)
+{
+    if ((a == NULL) || (b == NULL) || ((a->type & 0xFF) != (b->type & 0xFF))
+            || cJSON_IsInvalid(a)) {
+        return false;
+    }
+
+    /* check if type is valid */
+    switch (a->type & 0xFF) {
+    case cJSON_False:
+    case cJSON_True:
+    case cJSON_NULL:
+    case cJSON_Number:
+    case cJSON_String:
+    case cJSON_Raw:
+    case cJSON_Array:
+    case cJSON_Object:
+        break;
+
+    default:
+        return false;
+    }
+
+    /* identical objects are equal */
+    if (a == b) {
+        return true;
+    }
+
+    switch (a->type & 0xFF) {
+    /* in these cases and equal type is enough */
+    case cJSON_False:
+    case cJSON_True:
+    case cJSON_NULL:
+        return true;
+
+    case cJSON_Number:
+        if (a->valuedouble == b->valuedouble) {
+            return true;
+        }
+        return false;
+
+    case cJSON_String:
+    case cJSON_Raw:
+        if ((a->valuestring == NULL) || (b->valuestring == NULL)) {
+            return false;
+        }
+        if (strcmp(a->valuestring, b->valuestring) == 0) {
+            return true;
+        }
+
+        return false;
+
+    case cJSON_Array: {
+        cJSON *a_element = a->child;
+        cJSON *b_element = b->child;
+
+        for (; (a_element != NULL) && (b_element != NULL);) {
+            if (!cJSON_Compare(a_element, b_element, case_sensitive)) {
+                return false;
+            }
+
+            a_element = a_element->next;
+            b_element = b_element->next;
+        }
+
+        /* one of the arrays is longer than the other */
+        if (a_element != b_element) {
+            return false;
+        }
+
+        return true;
+    }
+
+    case cJSON_Object: {
+        cJSON *a_element = NULL;
+        cJSON *b_element = NULL;
+        cJSON_ArrayForEach(a_element, a)
+        {
+            /* TODO This has O(n^2) runtime, which is horrible! */
+            b_element = get_object_item(b, a_element->string, case_sensitive);
+            if (b_element == NULL) {
+                return false;
+            }
+
+            if (!cJSON_Compare(a_element, b_element, case_sensitive)) {
+                return false;
+            }
+        }
+
+        /* doing this twice, once on a and b to prevent true comparison if a 
subset of b
+         * TODO: Do this the proper way, this is just a fix for now */
+        cJSON_ArrayForEach(b_element, b)
+        {
+            a_element = get_object_item(a, b_element->string, case_sensitive);
+            if (a_element == NULL) {
+                return false;
+            }
+
+            if (!cJSON_Compare(b_element, a_element, case_sensitive)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    default:
+        return false;
+    }
+}
+
+CJSON_PUBLIC(void *) cJSON_malloc(size_t size)
+{
+    return global_hooks.allocate(size);
+}
+
+CJSON_PUBLIC(void) cJSON_free(void *object)
+{
+    global_hooks.deallocate(object);
+}
diff --git a/scriptsrcs/wamr/test-tools/host-tool/external/cJSON/cJSON.h 
b/scriptsrcs/wamr/test-tools/host-tool/external/cJSON/cJSON.h
new file mode 100755
index 0000000..82e05af
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/host-tool/external/cJSON/cJSON.h
@@ -0,0 +1,281 @@
+/*
+ Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
+
+ 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.
+ */
+
+#ifndef cJSON__h
+#define cJSON__h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || 
defined(_MSC_VER) || defined(_WIN32))
+#define __WINDOWS__
+#endif
+
+#ifdef __WINDOWS__
+
+/* When compiling for windows, we specify a specific calling convention to 
avoid issues where we are being called from a project with a different default 
calling convention.  For windows you have 3 define options:
+
+ CJSON_HIDE_SYMBOLS - Define this in the case where you don't want to ever 
dllexport symbols
+ CJSON_EXPORT_SYMBOLS - Define this on library build when you want to 
dllexport symbols (default)
+ CJSON_IMPORT_SYMBOLS - Define this if you want to dllimport symbol
+
+ For *nix builds that support visibility attribute, you can define similar 
behavior by
+
+ setting default visibility to hidden by adding
+ -fvisibility=hidden (for gcc)
+ or
+ -xldscope=hidden (for sun cc)
+ to CFLAGS
+
+ then using the CJSON_API_VISIBILITY flag to "export" the same symbols the way 
CJSON_EXPORT_SYMBOLS does
+
+ */
+
+#define CJSON_CDECL __cdecl
+#define CJSON_STDCALL __stdcall
+
+/* export symbols by default, this is necessary for copy pasting the C and 
header file */
+#if !defined(CJSON_HIDE_SYMBOLS) && !defined(CJSON_IMPORT_SYMBOLS) && 
!defined(CJSON_EXPORT_SYMBOLS)
+#define CJSON_EXPORT_SYMBOLS
+#endif
+
+#if defined(CJSON_HIDE_SYMBOLS)
+#define CJSON_PUBLIC(type)   type CJSON_STDCALL
+#elif defined(CJSON_EXPORT_SYMBOLS)
+#define CJSON_PUBLIC(type)   __declspec(dllexport) type CJSON_STDCALL
+#elif defined(CJSON_IMPORT_SYMBOLS)
+#define CJSON_PUBLIC(type)   __declspec(dllimport) type CJSON_STDCALL
+#endif
+#else /* !__WINDOWS__ */
+#define CJSON_CDECL
+#define CJSON_STDCALL
+
+#if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && 
defined(CJSON_API_VISIBILITY)
+#define CJSON_PUBLIC(type)   __attribute__((visibility("default"))) type
+#else
+#define CJSON_PUBLIC(type) type
+#endif
+#endif
+
+/* project version */
+#define CJSON_VERSION_MAJOR 1
+#define CJSON_VERSION_MINOR 7
+#define CJSON_VERSION_PATCH 10
+
+#include <stddef.h>
+
+/* cJSON Types: */
+#define cJSON_Invalid (0)
+#define cJSON_False  (1 << 0)
+#define cJSON_True   (1 << 1)
+#define cJSON_NULL   (1 << 2)
+#define cJSON_Number (1 << 3)
+#define cJSON_String (1 << 4)
+#define cJSON_Array  (1 << 5)
+#define cJSON_Object (1 << 6)
+#define cJSON_Raw    (1 << 7) /* raw json */
+
+#define cJSON_IsReference 256
+#define cJSON_StringIsConst 512
+
+/* The cJSON structure: */
+typedef struct cJSON {
+    /* next/prev allow you to walk array/object chains. Alternatively, use 
GetArraySize/GetArrayItem/GetObjectItem */
+    struct cJSON *next;
+    struct cJSON *prev;
+    /* An array or object item will have a child pointer pointing to a chain 
of the items in the array/object. */
+    struct cJSON *child;
+
+    /* The type of the item, as above. */
+    int type;
+
+    /* The item's string, if type==cJSON_String  and type == cJSON_Raw */
+    char *valuestring;
+    /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */
+    int valueint;
+    /* The item's number, if type==cJSON_Number */
+    double valuedouble;
+
+    /* The item's name string, if this item is the child of, or is in the list 
of subitems of an object. */
+    char *string;
+} cJSON;
+
+typedef struct cJSON_Hooks {
+    /* malloc/free are CDECL on Windows regardless of the default calling 
convention of the compiler, so ensure the hooks allow passing those functions 
directly. */
+    void *(CJSON_CDECL *malloc_fn)(size_t sz);
+    void (CJSON_CDECL *free_fn)(void *ptr);
+} cJSON_Hooks;
+
+typedef int cJSON_bool;
+
+/* Limits how deeply nested arrays/objects can be before cJSON rejects to 
parse them.
+ * This is to prevent stack overflows. */
+#ifndef CJSON_NESTING_LIMIT
+#define CJSON_NESTING_LIMIT 1000
+#endif
+
+/* returns the version of cJSON as a string */
+CJSON_PUBLIC(const char*) cJSON_Version(void);
+
+/* Supply malloc, realloc and free functions to cJSON */
+CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks);
+
+/* Memory Management: the caller is always responsible to free the results 
from all variants of cJSON_Parse (with cJSON_Delete) and cJSON_Print (with 
stdlib free, cJSON_Hooks.free_fn, or cJSON_free as appropriate). The exception 
is cJSON_PrintPreallocated, where the caller has full responsibility of the 
buffer. */
+/* Supply a block of JSON, and this returns a cJSON object you can 
interrogate. */
+CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);
+/* ParseWithOpts allows you to require (and check) that the JSON is null 
terminated, and to retrieve the pointer to the final byte parsed. */
+/* If you supply a ptr in return_parse_end and parsing fails, then 
return_parse_end will contain a pointer to the error so will match 
cJSON_GetErrorPtr(). */
+CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char 
**return_parse_end, cJSON_bool require_null_terminated);
+
+/* Render a cJSON entity to text for transfer/storage. */
+CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
+/* Render a cJSON entity to text for transfer/storage without any formatting. 
*/
+CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);
+/* Render a cJSON entity to text using a buffered strategy. prebuffer is a 
guess at the final size. guessing well reduces reallocation. fmt=0 gives 
unformatted, =1 gives formatted */
+CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, 
cJSON_bool fmt);
+/* Render a cJSON entity to text using a buffer already allocated in memory 
with given length. Returns 1 on success and 0 on failure. */
+/* NOTE: cJSON is not always 100% accurate in estimating how much memory it 
will use, so to be safe allocate 5 bytes more than you actually need */
+CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, 
const int length, const cJSON_bool format);
+/* Delete a cJSON entity and all subentities. */
+CJSON_PUBLIC(void) cJSON_Delete(cJSON *c);
+
+/* Returns the number of items in an array (or object). */
+CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array);
+/* Retrieve item number "index" from array "array". Returns NULL if 
unsuccessful. */
+CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index);
+/* Get item "string" from object. Case insensitive. */
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const 
char * const string);
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const 
object, const char * const string);
+CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char 
*string);
+/* For analysing failed parses. This returns a pointer to the parse error. 
You'll probably need to look a few chars back to make sense of it. Defined when 
cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
+CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void);
+
+/* Check if the item is a string and return its valuestring */
+CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item);
+
+/* These functions check the type of an item */
+CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item);
+
+/* These calls create a cJSON item of the appropriate type. */
+CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean);
+CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num);
+CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string);
+/* raw json */
+CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw);
+CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);
+
+/* Create a string where valuestring references a string so
+ * it will not be freed by cJSON_Delete */
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string);
+/* Create an object/arrray that only references it's elements so
+ * they will not be freed by cJSON_Delete */
+CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child);
+CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child);
+
+/* These utilities create an Array of count items. */
+CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count);
+CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count);
+CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int 
count);
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count);
+
+/* Append item to the specified array/object. */
+CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item);
+CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, 
cJSON *item);
+/* Use this when string is definitely const (i.e. a literal, or as good as), 
and will definitely survive the cJSON object.
+ * WARNING: When this function was used, make sure to always check that 
(item->type & cJSON_StringIsConst) is zero before
+ * writing to `item->string` */
+CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, 
cJSON *item);
+/* Append reference to item to the specified array/object. Use this when you 
want to add an existing cJSON to a new cJSON, but don't want to corrupt your 
existing cJSON. */
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char 
*string, cJSON *item);
+
+/* Remove/Detatch items from Arrays/Objects. */
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const 
item);
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which);
+CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which);
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char 
*string);
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, 
const char *string);
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char 
*string);
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, 
const char *string);
+
+/* Update array items. */
+CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSON 
*newitem); /* Shifts pre-existing items to the right. */
+CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, 
cJSON * const item, cJSON * replacement);
+CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON 
*newitem);
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object,const char 
*string,cJSON *newitem);
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,const 
char *string,cJSON *newitem);
+
+/* Duplicate a cJSON item */
+CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse);
+/* Duplicate will create a new, identical cJSON item to the one you pass, in 
new memory that will
+ need to be released. With recurse!=0, it will duplicate any children 
connected to the item.
+ The item->next and ->prev pointers are always zero on return from Duplicate. 
*/
+/* Recursively compare two cJSON items for equality. If either a or b is NULL 
or invalid, they will be considered unequal.
+ * case_sensitive determines if object keys are treated case sensitive (1) or 
case insensitive (0) */
+CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * 
const b, const cJSON_bool case_sensitive);
+
+CJSON_PUBLIC(void) cJSON_Minify(char *json);
+
+/* Helper functions for creating and adding items to an object at the same 
time.
+ * They return the added item or NULL on failure. */
+CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * 
const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * 
const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * 
const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * 
const name, const cJSON_bool boolean);
+CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char 
* const name, const double number);
+CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char 
* const name, const char * const string);
+CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * 
const name, const char * const raw);
+CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char 
* const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * 
const name);
+
+/* When assigning an integer value, it needs to be propagated to valuedouble 
too. */
+#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = 
(object)->valuedouble = (number) : (number))
+/* helper for the cJSON_SetNumberValue macro */
+CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number);
+#define cJSON_SetNumberValue(object, number) ((object != NULL) ? 
cJSON_SetNumberHelper(object, (double)number) : (number))
+
+/* Macro for iterating over an array or object */
+#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? 
(array)->child : NULL; element != NULL; element = element->next)
+
+/* malloc/free objects using the malloc/free functions that have been set with 
cJSON_InitHooks */
+CJSON_PUBLIC(void *) cJSON_malloc(size_t size);
+CJSON_PUBLIC(void) cJSON_free(void *object);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/scriptsrcs/wamr/test-tools/host-tool/external/cJSON/cjson.cmake 
b/scriptsrcs/wamr/test-tools/host-tool/external/cJSON/cjson.cmake
new file mode 100755
index 0000000..af1a9d8
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/host-tool/external/cJSON/cjson.cmake
@@ -0,0 +1,10 @@
+
+set (CJSON_DIR ${CMAKE_CURRENT_LIST_DIR})
+
+include_directories(${CJSON_DIR})
+
+
+file (GLOB_RECURSE source_all ${CJSON_DIR}/*.c)
+
+set (CJSON_SOURCE ${source_all})
+
diff --git a/scriptsrcs/wamr/test-tools/host-tool/src/host_tool_utils.c 
b/scriptsrcs/wamr/test-tools/host-tool/src/host_tool_utils.c
new file mode 100755
index 0000000..564bc08
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/host-tool/src/host_tool_utils.c
@@ -0,0 +1,311 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "host_tool_utils.h"
+#include "shared_utils.h"
+
+#include <time.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+typedef union jvalue {
+    bool z;
+    int8_t b;
+    uint16_t c;
+    int16_t s;
+    int32_t i;
+    int64_t j;
+    float f;
+    double d;
+} jvalue;
+
+#define bh_memcpy_s(dest, dlen, src, slen) do {                         \
+    int _ret = slen == 0 ? 0 : b_memcpy_s (dest, dlen, src, slen);      \
+    (void)_ret;                                                         \
+  } while (0)
+
+static inline int16_t get_int16(const char *buf)
+{
+    int16_t ret;
+    bh_memcpy_s(&ret, sizeof(int16_t), buf, sizeof(int16_t));
+    return ret;
+}
+
+static inline uint16_t get_uint16(const char *buf)
+{
+    return get_int16(buf);
+}
+
+static inline int32_t get_int32(const char *buf)
+{
+    int32_t ret;
+    bh_memcpy_s(&ret, sizeof(int32_t), buf, sizeof(int32_t));
+    return ret;
+}
+
+static inline uint32_t get_uint32(const char *buf)
+{
+    return get_int32(buf);
+}
+
+char* attr_container_get_attr_begin(const attr_container_t *attr_cont,
+                                    uint32_t *p_total_length,
+                                    uint16_t *p_attr_num);
+
+cJSON *attr2json(const attr_container_t *attr_cont)
+{
+    uint32_t total_length;
+    uint16_t attr_num, i, j, type;
+    const char *p, *tag, *key;
+    jvalue value;
+    cJSON *root;
+
+    if (!attr_cont)
+        return NULL;
+
+    root = cJSON_CreateObject();
+    if (!root)
+        return NULL;
+
+    /* TODO: how to convert the tag? */
+    tag = attr_container_get_tag(attr_cont);
+    if (!tag)
+        goto fail;
+
+    p = attr_container_get_attr_begin(attr_cont, &total_length, &attr_num);
+    if (!p)
+        goto fail;
+
+    for (i = 0; i < attr_num; i++) {
+        cJSON *obj;
+
+        key = p + 2;
+        /* Skip key len and key */
+        p += 2 + get_uint16(p);
+        type = *p++;
+
+        switch (type) {
+        case ATTR_TYPE_SHORT:
+            bh_memcpy_s(&value.s, sizeof(int16_t), p, sizeof(int16_t));
+            if (NULL == (obj = cJSON_CreateNumber(value.s)))
+                goto fail;
+            cJSON_AddItemToObject(root, key, obj);
+            /* another approach: cJSON_AddNumberToObject(root, key, value.s) */
+            p += 2;
+            break;
+        case ATTR_TYPE_INT:
+            bh_memcpy_s(&value.i, sizeof(int32_t), p, sizeof(int32_t));
+            if (NULL == (obj = cJSON_CreateNumber(value.i)))
+                goto fail;
+            cJSON_AddItemToObject(root, key, obj);
+            p += 4;
+            break;
+        case ATTR_TYPE_INT64:
+            bh_memcpy_s(&value.j, sizeof(uint64_t), p, sizeof(uint64_t));
+            if (NULL == (obj = cJSON_CreateNumber(value.j)))
+                goto fail;
+            cJSON_AddItemToObject(root, key, obj);
+            p += 8;
+            break;
+        case ATTR_TYPE_BYTE:
+            bh_memcpy_s(&value.b, 1, p, 1);
+            if (NULL == (obj = cJSON_CreateNumber(value.b)))
+                goto fail;
+            cJSON_AddItemToObject(root, key, obj);
+            p++;
+            break;
+        case ATTR_TYPE_UINT16:
+            bh_memcpy_s(&value.c, sizeof(uint16_t), p, sizeof(uint16_t));
+            if (NULL == (obj = cJSON_CreateNumber(value.c)))
+                goto fail;
+            cJSON_AddItemToObject(root, key, obj);
+            p += 2;
+            break;
+        case ATTR_TYPE_FLOAT:
+            bh_memcpy_s(&value.f, sizeof(float), p, sizeof(float));
+            if (NULL == (obj = cJSON_CreateNumber(value.f)))
+                goto fail;
+            cJSON_AddItemToObject(root, key, obj);
+            p += 4;
+            break;
+        case ATTR_TYPE_DOUBLE:
+            bh_memcpy_s(&value.d, sizeof(double), p, sizeof(double));
+            if (NULL == (obj = cJSON_CreateNumber(value.d)))
+                goto fail;
+            cJSON_AddItemToObject(root, key, obj);
+            p += 8;
+            break;
+        case ATTR_TYPE_BOOLEAN:
+            bh_memcpy_s(&value.z, 1, p, 1);
+            if (NULL == (obj = cJSON_CreateBool(value.z)))
+                goto fail;
+            cJSON_AddItemToObject(root, key, obj);
+            p++;
+            break;
+        case ATTR_TYPE_STRING:
+            if (NULL == (obj = cJSON_CreateString(p + sizeof(uint16_t))))
+                goto fail;
+            cJSON_AddItemToObject(root, key, obj);
+            p += sizeof(uint16_t) + get_uint16(p);
+            break;
+        case ATTR_TYPE_BYTEARRAY:
+            if (NULL == (obj = cJSON_CreateArray()))
+                goto fail;
+            cJSON_AddItemToObject(root, key, obj);
+            for (j = 0; j < get_uint32(p); j++) {
+                cJSON *item = cJSON_CreateNumber(*(p + sizeof(uint32_t) + j));
+                if (item == NULL)
+                    goto fail;
+                cJSON_AddItemToArray(obj, item);
+            }
+            p += sizeof(uint32_t) + get_uint32(p);
+            break;
+        }
+    }
+
+    return root;
+
+    fail: cJSON_Delete(root);
+    return NULL;
+}
+
+attr_container_t *json2attr(const cJSON *json_obj)
+{
+    attr_container_t *attr_cont;
+    cJSON *item;
+
+    if (NULL == (attr_cont = attr_container_create("")))
+        return NULL;
+
+    if (!cJSON_IsObject(json_obj))
+        goto fail;
+
+    cJSON_ArrayForEach(item, json_obj)
+    {
+
+        if (cJSON_IsNumber(item)) {
+            attr_container_set_double(&attr_cont, item->string,
+                    item->valuedouble);
+        } else if (cJSON_IsTrue(item)) {
+            attr_container_set_bool(&attr_cont, item->string, true);
+        } else if (cJSON_IsFalse(item)) {
+            attr_container_set_bool(&attr_cont, item->string, false);
+        } else if (cJSON_IsString(item)) {
+            attr_container_set_string(&attr_cont, item->string,
+                    item->valuestring);
+        } else if (cJSON_IsArray(item)) {
+            int8_t *array;
+            int i = 0, len = sizeof(int8_t) * cJSON_GetArraySize(item);
+            cJSON *array_item;
+
+            if (0 == len || NULL == (array = (int8_t *) malloc(len)))
+                goto fail;
+            memset(array, 0, len);
+
+            cJSON_ArrayForEach(array_item, item)
+            {
+                /* must be number array */
+                if (!cJSON_IsNumber(array_item))
+                    break;
+                /* TODO: if array_item->valuedouble > 127 or < -128 */
+                array[i++] = (int8_t) array_item->valuedouble;
+            }
+            if (i > 0)
+                attr_container_set_bytearray(&attr_cont, item->string, array,
+                        i);
+            free(array);
+        }
+    }
+
+    return attr_cont;
+
+    fail: attr_container_destroy(attr_cont);
+    return NULL;
+}
+
+int g_mid = 0;
+
+int gen_random_id()
+{
+    static bool init = false;
+    int r;
+
+    if (!init) {
+        srand(time(NULL));
+        init = true;
+    }
+
+    r = rand();
+    g_mid = r;
+
+    return r;
+}
+
+char *
+read_file_to_buffer(const char *filename, int *ret_size)
+{
+    char *buffer;
+    int file;
+    int file_size, read_size;
+    struct stat stat_buf;
+
+    if (!filename || !ret_size) {
+        return NULL;
+    }
+
+    if ((file = open(filename, O_RDONLY, 0)) == -1) {
+        return NULL;
+    }
+
+    if (fstat(file, &stat_buf) != 0) {
+        close(file);
+        return NULL;
+    }
+
+    file_size = stat_buf.st_size;
+
+    if (!(buffer = malloc(file_size))) {
+        close(file);
+        return NULL;
+    }
+
+    read_size = read(file, buffer, file_size);
+    close(file);
+
+    if (read_size < file_size) {
+        free(buffer);
+        return NULL;
+    }
+
+    *ret_size = file_size;
+    return buffer;
+}
+
+int wirte_buffer_to_file(const char *filename, const char *buffer, int size)
+{
+    int file, ret;
+
+    if ((file = open(filename, O_RDWR | O_CREAT | O_APPEND, 0644)) == -1)
+        return -1;
+
+    ret = write(file, buffer, size);
+
+    close(file);
+
+    return ret;
+}
diff --git a/scriptsrcs/wamr/test-tools/host-tool/src/host_tool_utils.h 
b/scriptsrcs/wamr/test-tools/host-tool/src/host_tool_utils.h
new file mode 100755
index 0000000..33dafb6
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/host-tool/src/host_tool_utils.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _HOST_TOOL_UTILS_H_
+#define _HOST_TOOL_UTILS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "attr_container.h"
+#include "cJSON.h"
+
+/**
+ * @brief Convert attribute container object to cJSON object.
+ *
+ * @param attr the attribute container object to be converted
+ *
+ * @return the created cJSON object if not NULL, NULL means fail
+ *
+ * @warning the return object should be deleted with cJSON_Delete by caller
+ */
+cJSON *attr2json(const attr_container_t *attr);
+
+/**
+ * @brief Convert cJSON object to attribute container object.
+ *
+ * @param json the cJSON object to be converted
+ *
+ * @return the created attribute container object if not NULL, NULL means fail
+ *
+ * @warning the return object should be deleted with attr_container_destroy
+ */
+attr_container_t *json2attr(const cJSON *json);
+
+/**
+ * @brief Generate a random 32 bit integer.
+ *
+ * @return the generated random integer
+ */
+int gen_random_id();
+
+/**
+ * @brief Read file content to buffer.
+ *
+ * @param filename the file name to read
+ * @param ret_size pointer of integer to save file size once return success
+ *
+ * @return the created buffer which contains file content if not NULL, NULL 
means fail
+ *
+ * @warning the return buffer should be deleted with free by caller
+ */
+char *read_file_to_buffer(const char *filename, int *ret_size);
+
+/**
+ * @brief Write buffer content to file.
+ *
+ * @param filename name the file name to be written
+ * @param buffer the buffer
+ * @param size size of the buffer to be written
+ *
+ * @return < 0 means fail, > 0 means the number of bytes actually written
+ */
+int wirte_buffer_to_file(const char *filename, const char *buffer, int size);
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif
diff --git a/scriptsrcs/wamr/test-tools/host-tool/src/main.c 
b/scriptsrcs/wamr/test-tools/host-tool/src/main.c
new file mode 100755
index 0000000..ead6a9b
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/host-tool/src/main.c
@@ -0,0 +1,930 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <getopt.h>
+#include <termios.h>
+#include <unistd.h>
+
+#include "host_tool_utils.h"
+#include "shared_utils.h"
+#include "attr_container.h"
+#include "coap_ext.h"
+#include "cJSON.h"
+#include "app_manager_export.h" /* for Module_WASM_App */
+#include "host_link.h" /* for REQUEST_PACKET */
+#include "transport.h"
+
+#define BUF_SIZE 1024
+#define TIMEOUT_EXIT_CODE 2
+#define URL_MAX_LEN 256
+#define DEFAULT_TIMEOUT_MS 5000
+#define DEFAULT_ALIVE_TIME_MS 0
+
+#define CONNECTION_MODE_TCP 1
+#define CONNECTION_MODE_UART 2
+
+typedef enum {
+    INSTALL, UNINSTALL, QUERY, REQUEST, REGISTER, UNREGISTER
+} op_type;
+
+typedef struct {
+    const char *file;
+    const char *name;
+    const char *module_type;
+    int heap_size;
+    /* max timers number */
+    int timers;
+    int watchdog_interval;
+} inst_info;
+
+typedef struct {
+    const char *name;
+    const char *module_type;
+} uninst_info;
+
+typedef struct {
+    const char *name;
+} query_info;
+
+typedef struct {
+    const char *url;
+    int action;
+    const char *json_payload_file;
+} req_info;
+
+typedef struct {
+    const char *urls;
+} reg_info;
+
+typedef struct {
+    const char *urls;
+} unreg_info;
+
+typedef union operation_info {
+    inst_info inst;
+    uninst_info uinst;
+    query_info query;
+    req_info req;
+    reg_info reg;
+    unreg_info unreg;
+} operation_info;
+
+typedef struct {
+    op_type type;
+    operation_info info;
+} operation;
+
+typedef enum REPLY_PACKET_TYPE {
+    REPLY_TYPE_EVENT = 0, REPLY_TYPE_RESPONSE = 1
+} REPLY_PACKET_TYPE;
+
+/* Package Type */
+typedef enum {
+    Wasm_Module_Bytecode = 0, Wasm_Module_AoT, Package_Type_Unknown = 0xFFFF
+} PackageType;
+
+static uint32_t g_timeout_ms = DEFAULT_TIMEOUT_MS;
+static uint32_t g_alive_time_ms = DEFAULT_ALIVE_TIME_MS;
+static char *g_redirect_file_name = NULL;
+static int g_redirect_udp_port = -1;
+static int g_conn_fd; /* may be tcp or uart */
+static char *g_server_addr = "127.0.0.1";
+static int g_server_port = 8888;
+static char *g_uart_dev = "/dev/ttyS2";
+static int g_baudrate = B115200;
+static int g_connection_mode = CONNECTION_MODE_TCP;
+
+extern int g_mid;
+extern unsigned char leading[2];
+
+/* -1 fail, 0 success */
+static int send_request(request_t *request, bool is_install_wasm_bytecode_app)
+{
+    char *req_p;
+    int req_size, req_size_n, ret = -1;
+    uint16_t msg_type = REQUEST_PACKET;
+
+    if (is_install_wasm_bytecode_app)
+        msg_type = INSTALL_WASM_BYTECODE_APP;
+
+    if ((req_p = pack_request(request, &req_size)) == NULL)
+        return -1;
+
+    /* leanding bytes */
+    if (!host_tool_send_data(g_conn_fd, leading, sizeof(leading)))
+        goto ret;
+
+    /* message type */
+    msg_type = htons(msg_type);
+    if (!host_tool_send_data(g_conn_fd, (char *) &msg_type, sizeof(msg_type)))
+        goto ret;
+
+    /* payload length */
+    req_size_n = htonl(req_size);
+    if (!host_tool_send_data(g_conn_fd, (char *) &req_size_n,
+            sizeof(req_size_n)))
+        goto ret;
+
+    /* payload */
+    if (!host_tool_send_data(g_conn_fd, req_p, req_size))
+        goto ret;
+
+    ret = 0;
+
+    ret: free_req_resp_packet(req_p);
+
+    return ret;
+}
+
+static PackageType get_package_type(const char *buf, int size)
+{
+    if (buf && size > 4) {
+        if (buf[0] == '\0' && buf[1] == 'a' && buf[2] == 's' && buf[3] == 'm')
+            return Wasm_Module_Bytecode;
+        if (buf[0] == '\0' && buf[1] == 'a' && buf[2] == 'o' && buf[3] == 't')
+            return Wasm_Module_AoT;
+    }
+    return Package_Type_Unknown;
+}
+
+#define url_remain_space (sizeof(url) - strlen(url))
+
+/*return:
+ 0: success
+ others: fail*/
+static int install(inst_info *info)
+{
+    request_t request[1] = { 0 };
+    char *app_file_buf;
+    char url[URL_MAX_LEN] = { 0 };
+    int ret = -1, app_size;
+    bool is_wasm_bytecode_app;
+
+    snprintf(url, sizeof(url) - 1, "/applet?name=%s", info->name);
+
+    if (info->module_type != NULL && url_remain_space > 0)
+        snprintf(url + strlen(url), url_remain_space, "&type=%s",
+                info->module_type);
+
+    if (info->heap_size > 0 && url_remain_space > 0)
+        snprintf(url + strlen(url), url_remain_space, "&heap=%d",
+                info->heap_size);
+
+    if (info->timers > 0 && url_remain_space > 0)
+        snprintf(url + strlen(url), url_remain_space, "&timers=%d",
+                info->timers);
+
+    if (info->watchdog_interval > 0 && url_remain_space > 0)
+        snprintf(url + strlen(url), url_remain_space, "&wd=%d",
+                info->watchdog_interval);
+
+    /*TODO: permissions to access JLF resource: AUDIO LOCATION SENSOR VISION 
platform.SERVICE */
+
+    if ((app_file_buf = read_file_to_buffer(info->file, &app_size)) == NULL)
+        return -1;
+
+    init_request(request, url, COAP_PUT,
+    FMT_APP_RAW_BINARY, app_file_buf, app_size);
+    request->mid = gen_random_id();
+
+    if ((info->module_type == NULL || strcmp(info->module_type, "wasm") == 0)
+            && get_package_type(app_file_buf, app_size) == 
Wasm_Module_Bytecode)
+        is_wasm_bytecode_app = true;
+    else
+        is_wasm_bytecode_app = false;
+
+    ret = send_request(request, is_wasm_bytecode_app);
+
+    free(app_file_buf);
+
+    return ret;
+}
+
+static int uninstall(uninst_info *info)
+{
+    request_t request[1] = { 0 };
+    char url[URL_MAX_LEN] = { 0 };
+
+    snprintf(url, sizeof(url) - 1, "/applet?name=%s", info->name);
+
+    if (info->module_type != NULL && url_remain_space > 0)
+        snprintf(url + strlen(url), url_remain_space, "&type=%s",
+                info->module_type);
+
+    init_request(request, url, COAP_DELETE,
+    FMT_ATTR_CONTAINER,
+    NULL, 0);
+    request->mid = gen_random_id();
+
+    return send_request(request, false);
+}
+
+static int query(query_info *info)
+{
+    request_t request[1] = { 0 };
+    int ret = -1;
+    char url[URL_MAX_LEN] = { 0 };
+
+    if (info->name != NULL)
+        snprintf(url, sizeof(url) - 1, "/applet?name=%s", info->name);
+    else
+        snprintf(url, sizeof(url) - 1, "/applet");
+
+    init_request(request, url, COAP_GET,
+    FMT_ATTR_CONTAINER,
+    NULL, 0);
+    request->mid = gen_random_id();
+
+    ret = send_request(request, false);
+
+    return ret;
+}
+
+static int request(req_info *info)
+{
+    request_t request[1] = { 0 };
+    attr_container_t *payload = NULL;
+    int ret = -1, payload_len = 0;
+
+    if (info->json_payload_file != NULL) {
+        char *payload_file;
+        cJSON *json;
+        int payload_file_size;
+
+        if ((payload_file = read_file_to_buffer(info->json_payload_file,
+                &payload_file_size)) == NULL)
+            return -1;
+
+        if (NULL == (json = cJSON_Parse(payload_file))) {
+            free(payload_file);
+            goto fail;
+        }
+
+        if (NULL == (payload = json2attr(json))) {
+            cJSON_Delete(json);
+            free(payload_file);
+            goto fail;
+        }
+        payload_len = attr_container_get_serialize_length(payload);
+
+        cJSON_Delete(json);
+        free(payload_file);
+    }
+
+    init_request(request, (char *)info->url, info->action,
+    FMT_ATTR_CONTAINER, payload, payload_len);
+    request->mid = gen_random_id();
+
+    ret = send_request(request, false);
+
+    if (info->json_payload_file != NULL && payload != NULL)
+        attr_container_destroy(payload);
+
+    fail: return ret;
+}
+
+/*
+ TODO: currently only support 1 url.
+ how to handle multiple responses and set process's exit code?
+ */
+static int subscribe(reg_info *info)
+{
+    request_t request[1] = { 0 };
+    int ret = -1;
+#if 0
+    char *p;
+
+    p = strtok(info->urls, ",");
+    while(p != NULL) {
+        char url[URL_MAX_LEN] = {0};
+        sprintf(url, "%s%s", "/event/", p);
+        init_request(request,
+                url,
+                COAP_PUT,
+                FMT_ATTR_CONTAINER,
+                NULL,
+                0);
+        request->mid = gen_random_id();
+        ret = send_request(request, false);
+        p = strtok (NULL, ",");
+    }
+#else
+    char url[URL_MAX_LEN] = { 0 };
+    char *prefix = info->urls[0] == '/' ? "/event" : "/event/";
+    sprintf(url, "%s%s", prefix, info->urls);
+    init_request(request, url, COAP_PUT,
+    FMT_ATTR_CONTAINER,
+    NULL, 0);
+    request->mid = gen_random_id();
+    ret = send_request(request, false);
+#endif
+    return ret;
+}
+
+static int unsubscribe(unreg_info *info)
+{
+    request_t request[1] = { 0 };
+    int ret = -1;
+#if 0
+    char *p;
+
+    p = strtok(info->urls, ",");
+    while(p != NULL) {
+        char url[URL_MAX_LEN] = {0};
+        sprintf(url, "%s%s", "/event/", p);
+        init_request(request,
+                url,
+                COAP_DELETE,
+                FMT_ATTR_CONTAINER,
+                NULL,
+                0);
+        request->mid = gen_random_id();
+        ret = send_request(request, false);
+        p = strtok (NULL, ",");
+    }
+#else
+    char url[URL_MAX_LEN] = { 0 };
+    sprintf(url, "%s%s", "/event/", info->urls);
+    init_request(request, url, COAP_DELETE,
+    FMT_ATTR_CONTAINER,
+    NULL, 0);
+    request->mid = gen_random_id();
+    ret = send_request(request, false);
+#endif
+    return ret;
+}
+
+static int init()
+{
+    if (g_connection_mode == CONNECTION_MODE_TCP) {
+        int fd;
+        if (!tcp_init(g_server_addr, g_server_port, &fd))
+            return -1;
+        g_conn_fd = fd;
+        return 0;
+    } else if (g_connection_mode == CONNECTION_MODE_UART) {
+        int fd;
+        if (!uart_init(g_uart_dev, g_baudrate, &fd))
+            return -1;
+        g_conn_fd = fd;
+        return 0;
+    }
+
+    return -1;
+}
+
+static void deinit()
+{
+    close(g_conn_fd);
+}
+
+static int parse_action(const char *str)
+{
+    if (strcasecmp(str, "PUT") == 0)
+        return COAP_PUT;
+    if (strcasecmp(str, "GET") == 0)
+        return COAP_GET;
+    if (strcasecmp(str, "DELETE") == 0)
+        return COAP_DELETE;
+    if (strcasecmp(str, "POST") == 0)
+        return COAP_POST;
+    return -1;
+}
+
+static void showUsage()
+{
+    printf("\n");
+    /*printf("Usage: host_tool 
[-i|--install]|[-u|--uninstall]|[-q|--query]|[-r|--request]|[-s|--register]|[-d|--deregister]
 ...\n");*/
+    printf("Usage:\n\thost_tool -i|-u|-q|-r|-s|-d ...\n\n");
+
+    printf("\thost_tool -i <App Name> -f <App File>\n"
+            "\t\t [--type=<App Type>]\n"
+            "\t\t [--heap=<Heap Size>]\n"
+            "\t\t [--timers=<Timers Number>]\n"
+            "\t\t [--watchdog=<Watchdog Interval>]\n"
+            "\t\t [<Control Options> ...] \n");
+    printf("\thost_tool -u <App Name> [<Control Options> ...]\n");
+    printf("\thost_tool -q[<App Name>][<Control Options> ...]\n");
+    printf(
+            "\thost_tool -r <Resource URL> -A <Action> [-p <Payload File>] 
[<Control Options> ...]\n");
+    printf("\thost_tool -s <Event URLs> [<Control Options> ...]\n");
+    printf("\thost_tool -d <Event URLs> [<Control Options> ...]\n\n");
+
+    printf(
+            "\t-i, --install                           Install an 
application\n");
+    printf(
+            "\t-u, --uninstall                         Uninstall an 
application\n");
+    printf(
+            "\t-q, --query                             Query all 
applications\n");
+    printf("\t-r, --request                           Send a request\n");
+    printf("\t-s, --register                          Register event(s)\n");
+    printf("\t-d, --deregister                        De-register event(s)\n");
+    printf(
+            "\t-f, --file                              Specify app binary file 
path\n");
+    printf(
+            "\t-A, --action                            Specify action of the 
request\n");
+    printf(
+            "\t-p, --payload                           Specify payload of the 
request\n");
+    printf("\n");
+
+    printf("\n\tControl Options:\n");
+    printf(" \t-S <Address>|--address=<Address>          Set server address, 
default to 127.0.0.1\n");
+    printf(" \t-P <Port>|--port=<Port>                   Set server port, 
default to 8888\n");
+    printf(" \t-D <Device>|--uart=<Device>               Set uart device, 
default to /dev/ttyS2\n");
+    printf(" \t-B <Baudrate>|--baudrate=<Baudrate>       Set uart device 
baudrate, default to 115200\n");
+
+    printf(
+            "\t-t <timeout>|--timeout=<timeout>          Operation timeout in 
ms, default to 5000\n");
+    printf(
+            "\t-a <alive_time>|--alive=<alive_time>      Alive time in ms 
after last operation done, default to 0\n");
+    printf(
+            "\t-o <output_file>|--output=<output_file>   Redirect the output 
to output a file\n");
+    printf(
+            "\t-U <udp_port>|--udp=<udp_port>            Redirect the output 
to an UDP port in local machine\n");
+
+    printf("\nNotes:\n");
+    printf("\t<App Name>=name of the application\n");
+    printf("\t<App File>=path of the application binary file in wasm 
format\n");
+    printf(
+            "\t<Resource URL>=resource descriptor, such as /app/<App 
Name>/res1 or /res1\n");
+    printf(
+            "\t<Event URLs>=event url list separated by ',', such as 
/event1,/event2,/event3\n");
+    printf(
+            "\t<Action>=action of the request, can be PUT, GET, DELETE or POST 
(case insensitive)\n");
+    printf("\t<Payload File>=path of the payload file in json format\n");
+    printf("\t<App Type>=Type of app. Can be 'wasm'(default) or 'jeff'\n");
+    printf("\t<Heap Size>=Heap size of app.\n");
+    printf("\t<Timers Number>=Max timers number app can use.\n");
+    printf("\t<Watchdog Interval>=Watchdog interval in ms.\n");
+}
+
+#define CHECK_DUPLICATE_OPERATION do{ \
+  if (operation_parsed)               \
+  {                                   \
+    showUsage();                      \
+    return false;                     \
+  }                                   \
+}while(0)
+
+#define ERROR_RETURN do{   \
+  showUsage();             \
+  return false;            \
+}while(0)
+
+#define CHECK_ARGS_UNMATCH_OPERATION(op_type) do{ \
+  if (!operation_parsed || op->type != op_type)   \
+  {                                    \
+    showUsage();                       \
+    return false;                      \
+  }                                    \
+}while(0)
+
+static bool parse_args(int argc, char *argv[], operation *op)
+{
+    int c;
+    bool operation_parsed = false;
+    bool conn_mode_parsed = false;
+
+    while (1) {
+        int optIndex = 0;
+        static struct option longOpts[] = {
+            { "install",    required_argument, NULL, 'i' },
+            { "uninstall",  required_argument, NULL, 'u' },
+            { "query",      optional_argument, NULL, 'q' },
+            { "request",    required_argument, NULL, 'r' },
+            { "register",   required_argument, NULL, 's' },
+            { "deregister", required_argument, NULL, 'd' },
+            { "timeout",    required_argument, NULL, 't' },
+            { "alive",      required_argument, NULL, 'a' },
+            { "output",     required_argument, NULL, 'o' },
+            { "udp",        required_argument, NULL, 'U' },
+            { "action",     required_argument, NULL, 'A' },
+            { "file",       required_argument, NULL, 'f' },
+            { "payload",    required_argument, NULL, 'p' },
+            { "type",       required_argument, NULL, 0 },
+            { "heap",       required_argument, NULL, 1 },
+            { "timers",     required_argument, NULL, 2 },
+            { "watchdog",   required_argument, NULL, 3 },
+            { "address",    required_argument, NULL, 'S' },
+            { "port",       required_argument, NULL, 'P' },
+            { "uart_device",required_argument, NULL, 'D' },
+            { "baudrate",   required_argument, NULL, 'B' },
+            { "help",       required_argument, NULL, 'h' },
+            { 0, 0, 0, 0 }
+        };
+
+        c = getopt_long(argc, argv, "i:u:q::r:s:d:t:a:o:U:A:f:p:S:P:D:B:h",
+                longOpts, &optIndex);
+        if (c == -1)
+            break;
+
+        switch (c) {
+        case 'i':
+            CHECK_DUPLICATE_OPERATION;
+            op->type = INSTALL;
+            op->info.inst.name = optarg;
+            operation_parsed = true;
+            break;
+        case 'u':
+            CHECK_DUPLICATE_OPERATION;
+            op->type = UNINSTALL;
+            op->info.uinst.name = optarg;
+            operation_parsed = true;
+            break;
+        case 'q':
+            CHECK_DUPLICATE_OPERATION;
+            op->type = QUERY;
+            op->info.query.name = optarg;
+            break;
+        case 'r':
+            CHECK_DUPLICATE_OPERATION;
+            op->type = REQUEST;
+            op->info.req.url = optarg;
+            operation_parsed = true;
+            break;
+        case 's':
+            CHECK_DUPLICATE_OPERATION;
+            op->type = REGISTER;
+            op->info.reg.urls = optarg;
+            operation_parsed = true;
+            break;
+        case 'd':
+            CHECK_DUPLICATE_OPERATION;
+            op->type = UNREGISTER;
+            op->info.unreg.urls = optarg;
+            operation_parsed = true;
+            break;
+        case 't':
+            g_timeout_ms = atoi(optarg);
+            break;
+        case 'a':
+            g_alive_time_ms = atoi(optarg);
+            break;
+        case 'o':
+            g_redirect_file_name = optarg;
+            break;
+        case 'U':
+            g_redirect_udp_port = atoi(optarg);
+            break;
+        case 'A':
+            CHECK_ARGS_UNMATCH_OPERATION(REQUEST);
+            op->info.req.action = parse_action(optarg);
+            break;
+        case 'f':
+            CHECK_ARGS_UNMATCH_OPERATION(INSTALL);
+            op->info.inst.file = optarg;
+            break;
+        case 'p':
+            CHECK_ARGS_UNMATCH_OPERATION(REQUEST);
+            op->info.req.json_payload_file = optarg;
+            break;
+            /* module type */
+        case 0:
+            /* TODO: use bit mask */
+            /* CHECK_ARGS_UNMATCH_OPERATION(INSTALL | UNINSTALL); */
+            if (op->type == INSTALL)
+                op->info.inst.module_type = optarg;
+            else if (op->type == UNINSTALL)
+                op->info.uinst.module_type = optarg;
+            break;
+            /* heap */
+        case 1:
+            CHECK_ARGS_UNMATCH_OPERATION(INSTALL);
+            op->info.inst.heap_size = atoi(optarg);
+            break;
+            /* timers */
+        case 2:
+            CHECK_ARGS_UNMATCH_OPERATION(INSTALL);
+            op->info.inst.timers = atoi(optarg);
+            break;
+            /* watchdog */
+        case 3:
+            CHECK_ARGS_UNMATCH_OPERATION(INSTALL);
+            op->info.inst.watchdog_interval = atoi(optarg);
+            break;
+        case 'S':
+            if (conn_mode_parsed) {
+                showUsage();
+                return false;
+            }
+            g_connection_mode = CONNECTION_MODE_TCP;
+            g_server_addr = optarg;
+            conn_mode_parsed = true;
+            break;
+        case 'P':
+            g_server_port = atoi(optarg);
+            break;
+        case 'D':
+            if (conn_mode_parsed) {
+                showUsage();
+                return false;
+            }
+            g_connection_mode = CONNECTION_MODE_UART;
+            g_uart_dev = optarg;
+            conn_mode_parsed = true;
+            break;
+        case 'B':
+            g_baudrate = parse_baudrate(atoi(optarg));
+            break;
+        case 'h':
+            showUsage();
+            return false;
+        default:
+            showUsage();
+            return false;
+        }
+    }
+
+    /* check mandatory options for the operation */
+    switch (op->type) {
+    case INSTALL:
+        if (NULL == op->info.inst.file || NULL == op->info.inst.name)
+            ERROR_RETURN;
+        break;
+    case UNINSTALL:
+        if (NULL == op->info.uinst.name)
+            ERROR_RETURN;
+        break;
+    case QUERY:
+        break;
+    case REQUEST:
+        if (NULL == op->info.req.url || op->info.req.action <= 0)
+            ERROR_RETURN;
+        break;
+    case REGISTER:
+        if (NULL == op->info.reg.urls)
+            ERROR_RETURN;
+        break;
+    case UNREGISTER:
+        if (NULL == op->info.unreg.urls)
+            ERROR_RETURN;
+        break;
+    default:
+        return false;
+    }
+
+    return true;
+}
+
+/*
+ return value:
+ < 0: not complete message
+ REPLY_TYPE_EVENT: event(request)
+ REPLY_TYPE_RESPONSE: response
+ */
+static int preocess_reply_data(const char *buf, int len,
+        imrt_link_recv_context_t *ctx)
+{
+    int result = -1;
+    const char *pos = buf;
+
+#if DEBUG
+    int i = 0;
+    for (; i < len; i++) {
+        printf(" 0x%02x", buf[i]);
+    }
+    printf("\n");
+#endif
+
+    while (len-- > 0) {
+        result = on_imrt_link_byte_arrive((unsigned char) *pos++, ctx);
+        switch (result) {
+        case 0: {
+            imrt_link_message_t *message = &ctx->message;
+            if (message->message_type == RESPONSE_PACKET)
+                return REPLY_TYPE_RESPONSE;
+            if (message->message_type == REQUEST_PACKET)
+                return REPLY_TYPE_EVENT;
+            break;
+        }
+        default:
+            break;
+        }
+    }
+    return -1;
+}
+
+static response_t *
+parse_response_from_imrtlink(imrt_link_message_t *message, response_t 
*response)
+{
+    if (!unpack_response(message->payload, message->payload_size, response))
+        return NULL;
+
+    return response;
+}
+
+static request_t *
+parse_event_from_imrtlink(imrt_link_message_t *message, request_t *request)
+{
+    if (!unpack_request(message->payload, message->payload_size, request))
+        return NULL;
+
+    return request;
+}
+
+static void output(const char *header, attr_container_t *payload, int foramt,
+        int payload_len)
+{
+    cJSON *json = NULL;
+    char *json_str = NULL;
+
+    /* output the header */
+    printf("%s", header);
+    if (g_redirect_file_name != NULL)
+        wirte_buffer_to_file(g_redirect_file_name, header, strlen(header));
+    if (g_redirect_udp_port > 0 && g_redirect_udp_port < 65535)
+        udp_send("127.0.0.1", g_redirect_udp_port, header, strlen(header));
+
+    if (foramt != FMT_ATTR_CONTAINER || payload == NULL || payload_len <= 0)
+        return;
+
+    if ((json = attr2json(payload)) == NULL)
+        return;
+
+    if ((json_str = cJSON_Print(json)) == NULL) {
+        cJSON_Delete(json);
+        return;
+    }
+
+    /* output the payload as json format */
+    printf("%s", json_str);
+    if (g_redirect_file_name != NULL)
+        wirte_buffer_to_file(g_redirect_file_name, json_str, strlen(json_str));
+    if (g_redirect_udp_port > 0 && g_redirect_udp_port < 65535)
+        udp_send("127.0.0.1", g_redirect_udp_port, json_str, strlen(json_str));
+
+    free(json_str);
+    cJSON_Delete(json);
+}
+
+static void output_response(response_t *obj)
+{
+    char header[32] = { 0 };
+    snprintf(header, sizeof(header), "\nresponse status %d\n", obj->status);
+    output(header, obj->payload, obj->fmt, obj->payload_len);
+}
+
+static void output_event(request_t *obj)
+{
+    char header[256] = { 0 };
+    snprintf(header, sizeof(header), "\nreceived an event %s\n", obj->url);
+    output(header, obj->payload, obj->fmt, obj->payload_len);
+}
+
+int main(int argc, char *argv[])
+{
+    int ret;
+    imrt_link_recv_context_t recv_ctx = { 0 };
+    char buffer[BUF_SIZE] = { 0 };
+    uint32_t last_check, total_elpased_ms = 0;
+    bool is_responsed = false;
+    operation op;
+
+    memset(&op, 0, sizeof(op));
+
+    if (!parse_args(argc, argv, &op))
+        return -1;
+
+    //TODO: reconnect 3 times
+    if (init() != 0)
+        return -1;
+
+    switch (op.type) {
+    case INSTALL:
+        ret = install((inst_info *) &op.info.inst);
+        break;
+    case UNINSTALL:
+        ret = uninstall((uninst_info *) &op.info.uinst);
+        break;
+    case QUERY:
+        ret = query((query_info *) &op.info.query);
+        break;
+    case REQUEST:
+        ret = request((req_info *) &op.info.req);
+        break;
+    case REGISTER:
+        ret = subscribe((reg_info *) &op.info.reg);
+        break;
+    case UNREGISTER:
+        ret = unsubscribe((unreg_info *) &op.info.unreg);
+        break;
+    default:
+        goto ret;
+    }
+
+    if (ret != 0)
+        goto ret;
+
+    bh_get_elpased_ms(&last_check);
+
+    while (1) {
+        int result = 0;
+        fd_set readfds;
+        struct timeval tv;
+
+        total_elpased_ms += bh_get_elpased_ms(&last_check);
+
+        if (!is_responsed) {
+            if (total_elpased_ms >= g_timeout_ms) {
+                output("operation timeout\n", NULL, 0, 0);
+                ret = TIMEOUT_EXIT_CODE;
+                goto ret;
+            }
+        } else {
+            if (total_elpased_ms >= g_alive_time_ms) {
+                /*ret = 0;*/
+                goto ret;
+            }
+        }
+
+        if (g_conn_fd == -1) {
+            if (init() != 0) {
+                sleep(1);
+                continue;
+            }
+        }
+
+        FD_ZERO(&readfds);
+        FD_SET(g_conn_fd, &readfds);
+
+        tv.tv_sec = 1;
+        tv.tv_usec = 0;
+
+        result = select(FD_SETSIZE, &readfds, NULL, NULL, &tv);
+
+        if (result < 0) {
+            if (errno != EINTR) {
+                printf("Error in select, errno: 0x%x\n", errno);
+                ret = -1;
+                goto ret;
+            }
+        } else if (result == 0) { /* select timeout */
+        } else if (result > 0) {
+            int n;
+            if (FD_ISSET(g_conn_fd, &readfds)) {
+                int reply_type = -1;
+
+                n = read(g_conn_fd, buffer, BUF_SIZE);
+                if (n <= 0) {
+                    g_conn_fd = -1;
+                    continue;
+                }
+
+                reply_type = preocess_reply_data((char *) buffer, n, 
&recv_ctx);
+
+                if (reply_type == REPLY_TYPE_RESPONSE) {
+                    response_t response[1] = { 0 };
+
+                    parse_response_from_imrtlink(&recv_ctx.message, response);
+
+                    if (response->mid != g_mid) {
+                        /* ignore invalid response */
+                        continue;
+                    }
+
+                    is_responsed = true;
+                    ret = response->status;
+                    output_response(response);
+
+                    if (op.type == REGISTER || op.type == UNREGISTER) {
+                        /* alive time start */
+                        total_elpased_ms = 0;
+                        bh_get_elpased_ms(&last_check);
+                    }
+                } else if (reply_type == REPLY_TYPE_EVENT) {
+                    request_t event[1] = { 0 };
+
+                    parse_event_from_imrtlink(&recv_ctx.message, event);
+
+                    if (op.type == REGISTER || op.type == UNREGISTER) {
+                        output_event(event);
+                    }
+                }
+            }
+        }
+    } /* end of while(1) */
+
+    ret: if (recv_ctx.message.payload != NULL)
+        free(recv_ctx.message.payload);
+
+    deinit();
+
+    return ret;
+}
diff --git a/scriptsrcs/wamr/test-tools/host-tool/src/transport.c 
b/scriptsrcs/wamr/test-tools/host-tool/src/transport.c
new file mode 100755
index 0000000..0ccb627
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/host-tool/src/transport.c
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdbool.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <string.h>
+#include <unistd.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <termios.h>
+#include <fcntl.h>
+
+#include "transport.h"
+
+#define SA struct sockaddr
+
+unsigned char leading[2] = { 0x12, 0x34 };
+
+bool tcp_init(const char *address, uint16_t port, int *fd)
+{
+    int sock;
+    struct sockaddr_in servaddr;
+
+    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
+        return false;
+
+    bzero(&servaddr, sizeof(servaddr));
+    servaddr.sin_family = AF_INET;
+    servaddr.sin_addr.s_addr = inet_addr(address);
+    servaddr.sin_port = htons(port);
+
+    if (connect(sock, (SA*) &servaddr, sizeof(servaddr)) != 0)
+        return false;
+
+    *fd = sock;
+    return true;
+}
+
+int parse_baudrate(int baud)
+{
+    switch (baud) {
+        case 9600:
+            return B9600;
+        case 19200:
+            return B19200;
+        case 38400:
+            return B38400;
+        case 57600:
+            return B57600;
+        case 115200:
+            return B115200;
+        case 230400:
+            return B230400;
+        case 460800:
+            return B460800;
+        case 500000:
+            return B500000;
+        case 576000:
+            return B576000;
+        case 921600:
+            return B921600;
+        case 1000000:
+            return B1000000;
+        case 1152000:
+            return B1152000;
+        case 1500000:
+            return B1500000;
+        case 2000000:
+            return B2000000;
+        case 2500000:
+            return B2500000;
+        case 3000000:
+            return B3000000;
+        case 3500000:
+            return B3500000;
+        case 4000000:
+            return B4000000;
+        default:
+            return -1;
+    }
+}
+
+bool uart_init(const char *device, int baudrate, int *fd)
+{
+    int uart_fd;
+    struct termios uart_term;
+
+    uart_fd = open(device, O_RDWR | O_NOCTTY);
+
+    if (uart_fd <= 0)
+        return false;
+
+    memset(&uart_term, 0, sizeof(uart_term));
+    uart_term.c_cflag = baudrate | CS8 | CLOCAL | CREAD;
+    uart_term.c_iflag = IGNPAR;
+    uart_term.c_oflag = 0;
+
+    /* set noncanonical mode */
+    uart_term.c_lflag = 0;
+    uart_term.c_cc[VTIME] = 30;
+    uart_term.c_cc[VMIN] = 1;
+    tcflush(uart_fd, TCIFLUSH);
+
+    if (tcsetattr(uart_fd, TCSANOW, &uart_term) != 0) {
+        close(uart_fd);
+        return false;
+    }
+
+    *fd = uart_fd;
+
+    return true;
+}
+
+bool udp_send(const char *address, int port, const char *buf, int len)
+{
+    int sockfd;
+    struct sockaddr_in servaddr;
+
+    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 )
+        return false;
+
+    memset(&servaddr, 0, sizeof(servaddr));
+
+    servaddr.sin_family = AF_INET;
+    servaddr.sin_port = htons(port);
+    servaddr.sin_addr.s_addr = INADDR_ANY;
+
+    sendto(sockfd, buf, len, MSG_CONFIRM, (const struct sockaddr *) &servaddr,
+        sizeof(servaddr));
+
+    close(sockfd);
+
+    return true;
+}
+
+bool host_tool_send_data(int fd, const char *buf, unsigned int len)
+{
+    int cnt = 0;
+    ssize_t ret;
+
+    if (fd == -1 || buf == NULL || len <= 0) {
+        return false;
+    }
+
+    resend: ret = write(fd, buf, len);
+
+    if (ret == -1) {
+        if (errno == ECONNRESET) {
+            close(fd);
+        }
+
+        // repeat sending if the outbuffer is full
+        if (errno == EAGAIN || errno == EWOULDBLOCK) {
+            if (++cnt > 10) {
+                close(fd);
+                return false;
+            }
+            sleep(1);
+            goto resend;
+        }
+    }
+
+    return (ret == len);
+}
+
+#define SET_RECV_PHASE(ctx, new_phase) {ctx->phase = new_phase; 
ctx->size_in_phase = 0;}
+
+/*
+ * input:    1 byte from remote
+ * output:   parse result
+ * return:   -1 invalid sync byte
+ *           1 byte added to buffer, waiting more for complete packet
+ *           0 completed packet
+ *           2 in receiving payload
+ */
+int on_imrt_link_byte_arrive(unsigned char ch, imrt_link_recv_context_t *ctx)
+{
+    if (ctx->phase == Phase_Non_Start) {
+        if (ctx->message.payload) {
+            free(ctx->message.payload);
+            ctx->message.payload = NULL;
+            ctx->message.payload_size = 0;
+        }
+
+        if (leading[0] == ch) {
+            ctx->phase = Phase_Leading;
+        } else {
+            return -1;
+        }
+    } else if (ctx->phase == Phase_Leading) {
+        if (leading[1] == ch) {
+            SET_RECV_PHASE(ctx, Phase_Type);
+        } else {
+            ctx->phase = Phase_Non_Start;
+            return -1;
+        }
+    } else if (ctx->phase == Phase_Type) {
+        unsigned char *p = (unsigned char *) &ctx->message.message_type;
+        p[ctx->size_in_phase++] = ch;
+
+        if (ctx->size_in_phase == sizeof(ctx->message.message_type)) {
+            ctx->message.message_type = ntohs(ctx->message.message_type);
+            SET_RECV_PHASE(ctx, Phase_Size);
+        }
+    } else if (ctx->phase == Phase_Size) {
+        unsigned char * p = (unsigned char *) &ctx->message.payload_size;
+        p[ctx->size_in_phase++] = ch;
+
+        if (ctx->size_in_phase == sizeof(ctx->message.payload_size)) {
+            ctx->message.payload_size = ntohl(ctx->message.payload_size);
+            SET_RECV_PHASE(ctx, Phase_Payload);
+
+            if (ctx->message.payload) {
+                free(ctx->message.payload);
+                ctx->message.payload = NULL;
+            }
+
+            /* no payload */
+            if (ctx->message.payload_size == 0) {
+                SET_RECV_PHASE(ctx, Phase_Non_Start);
+                return 0;
+            }
+
+            if (ctx->message.payload_size > 1024 * 1024) {
+                SET_RECV_PHASE(ctx, Phase_Non_Start);
+                return -1;
+            }
+
+            ctx->message.payload = (char *) malloc(ctx->message.payload_size);
+            SET_RECV_PHASE(ctx, Phase_Payload);
+        }
+    } else if (ctx->phase == Phase_Payload) {
+        ctx->message.payload[ctx->size_in_phase++] = ch;
+
+        if (ctx->size_in_phase == ctx->message.payload_size) {
+            SET_RECV_PHASE(ctx, Phase_Non_Start);
+            return 0;
+        }
+
+        return 2;
+    }
+
+    return 1;
+}
diff --git a/scriptsrcs/wamr/test-tools/host-tool/src/transport.h 
b/scriptsrcs/wamr/test-tools/host-tool/src/transport.h
new file mode 100755
index 0000000..6d978d7
--- /dev/null
+++ b/scriptsrcs/wamr/test-tools/host-tool/src/transport.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2019 Intel Corporation.  All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef DEPS_APP_MGR_HOST_TOOL_SRC_TRANSPORT_H_
+#define DEPS_APP_MGR_HOST_TOOL_SRC_TRANSPORT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* IMRT link message between host and WAMR */
+typedef struct {
+    unsigned short message_type;
+    unsigned long payload_size;
+    char *payload;
+} imrt_link_message_t;
+
+/* The receive phase of IMRT link message */
+typedef enum {
+    Phase_Non_Start, Phase_Leading, Phase_Type, Phase_Size, Phase_Payload
+} recv_phase_t;
+
+/* The receive context of IMRT link message */
+typedef struct {
+    recv_phase_t phase;
+    int size_in_phase;
+    imrt_link_message_t message;
+} imrt_link_recv_context_t;
+
+/**
+ * @brief Send data to WAMR.
+ *
+ * @param fd the connection fd to WAMR
+ * @param buf the buffer that contains content to be sent
+ * @param len size of the buffer to be sent
+ *
+ * @return true if success, false if fail
+ */
+bool host_tool_send_data(int fd, const char *buf, unsigned int len);
+
+/**
+ * @brief Handle one byte of IMRT link message
+ *
+ * @param ch the one byte from WAMR to be handled
+ * @param ctx the receive context
+ *
+ * @return -1 invalid sync byte
+ *          1 byte added to buffer, waiting more for complete packet
+ *          0 completed packet
+ *          2 in receiving payload
+ */
+int on_imrt_link_byte_arrive(unsigned char ch, imrt_link_recv_context_t *ctx);
+
+/**
+ * @brief Initialize TCP connection with remote server.
+ *
+ * @param address the network address of peer
+ * @param port the network port of peer
+ * @param fd pointer of integer to save the socket fd once return success
+ *
+ * @return true if success, false if fail
+ */
+bool tcp_init(const char *address, uint16_t port, int *fd);
+
+/**
+ * @brief Initialize UART connection with remote.
+ *
+ * @param device name of the UART device
+ * @param baudrate baudrate of the device
+ * @param fd pointer of integer to save the uart fd once return success
+ *
+ * @return true if success, false if fail
+ */
+bool uart_init(const char *device, int baudrate, int *fd);
+
+/**
+ * @brief Parse UART baudrate from an integer
+ *
+ * @param the baudrate interger to be parsed
+ *
+ * @return true if success, false if fail
+ *
+ * @par
+ * @code
+ * int baudrate = parse_baudrate(9600);
+ * ...
+ * uart_term.c_cflag = baudrate;
+ * ...
+ * @endcode
+ */
+int parse_baudrate(int baud);
+
+/**
+ * @brief Send data over UDP.
+ *
+ * @param address network address of the remote
+ * @param port network port of the remote
+ * @param buf the buffer that contains content to be sent
+ * @param len size of the buffer to be sent
+ *
+ * @return true if success, false if fail
+ */
+bool udp_send(const char *address, int port, const char *buf, int len);
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif /* DEPS_APP_MGR_HOST_TOOL_SRC_TRANSPORT_H_ */
-- 
2.17.1


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.