From dfc427e60226e6ef6abf7929c7cf4630f28fddca Mon Sep 17 00:00:00 2001 From: Felix Biego <45796740+fbiego@users.noreply.github.com> Date: Thu, 15 Aug 2024 12:18:08 +0300 Subject: [PATCH] v4.0.1 - add IMU app for waveshare boards - add flag to enable/disable custom watchface support --- README.md | 2 +- hal/esp32/app_hal.cpp | 168 +++++++---- hal/esp32/app_hal.h | 5 + hal/sdl2/app_hal.cpp | 4 + hal/sdl2/app_hal.h | 1 + include/lv_conf.h | 5 +- include/splash.h | 1 - platformio.ini | 62 +++- src/apps/qmi8658c/assets/ui_img_gyro_l_png.c | 88 ++++++ src/apps/qmi8658c/qmi8658c.c | 281 +++++++++++++++++++ src/apps/qmi8658c/qmi8658c.h | 56 ++++ src/ui/custom_face.c | 211 ++++++++------ src/ui/custom_face.h | 4 + src/ui/ui.c | 19 +- src/ui/ui.h | 1 + 15 files changed, 760 insertions(+), 148 deletions(-) create mode 100644 src/apps/qmi8658c/assets/ui_img_gyro_l_png.c create mode 100644 src/apps/qmi8658c/qmi8658c.c create mode 100644 src/apps/qmi8658c/qmi8658c.h diff --git a/README.md b/README.md index 3d3af6e..fb354ab 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,6 @@ This is needed for additional functions on esp32 hardware as listed below. - Install additional watchfaces - Send notifications and call alerts - Sync weather info -- Sync QR Links (Incomplete) +- Sync QR Links - Music control, find phone & Camera diff --git a/hal/esp32/app_hal.cpp b/hal/esp32/app_hal.cpp index 5d596b6..1cc8560 100644 --- a/hal/esp32/app_hal.cpp +++ b/hal/esp32/app_hal.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include "app_hal.h" #include @@ -52,6 +53,12 @@ #include "FS.h" #include "FFat.h" +#ifdef ENABLE_APP_QMI8658C +#include "Qmi8658c.h" // Include the library for QMI8658C sensor +#define QMI_ADDRESS 0x6B // Define QMI8658C I2C address +#define QMI8658C_I2C_FREQUENCY 40000 // Define I2C frequency as 80kHz (in Hz) +#endif + #define FLASH FFat #define F_NAME "FATFS" #define buf_size 10 @@ -137,7 +144,7 @@ class LGFX : public lgfx::LGFX_Device cfg.y_max = HEIGHT; // タッチスクリーンから得られる最大のY値(生の値) cfg.pin_int = TP_INT; // INTが接続されているピン番号 // cfg.pin_rst = TP_RST; - cfg.bus_shared = false; // 画面と共通のバスを使用している場合 trueを設定 + cfg.bus_shared = false; // 画面と共通のバスを使用している場合 trueを設定 cfg.offset_rotation = 0; // 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定 cfg.i2c_port = 0; // 使用するI2Cを選択 (0 or 1) cfg.i2c_addr = 0x15; // I2Cデバイスアドレス番号 @@ -160,9 +167,25 @@ ChronosESP32 watch("Chronos C3", CS_CONFIG); #else ChronosESP32 watch("Chronos C3"); #endif - Preferences prefs; +#ifdef ENABLE_APP_QMI8658C +// Declare an instance of Qmi8658c +Qmi8658c qmi8658c(QMI_ADDRESS, QMI8658C_I2C_FREQUENCY); + +/* QMI8658C configuration */ +qmi8658_cfg_t qmi8658_cfg = { + .qmi8658_mode = qmi8658_mode_dual, // Set the QMI8658C mode to dual mode + .acc_scale = acc_scale_2g, // Set the accelerometer scale to ±2g + .acc_odr = acc_odr_8000, // Set the accelerometer output data rate (ODR) to 8000Hz + .gyro_scale = gyro_scale_16dps, // Set the gyroscope scale to ±16 dps + .gyro_odr = gyro_odr_8000, // Set the gyroscope output data rate (ODR) to 8000Hz +}; + +qmi8658_result_t qmi8658_result; +qmi_data_t data; // Declare a variable to store sensor data +#endif + static const uint32_t screenWidth = WIDTH; static const uint32_t screenHeight = HEIGHT; @@ -180,10 +203,12 @@ lv_obj_t *lastActScr; bool circular = false; bool alertSwitch = false; bool gameActive = false; +bool readIMU = false; String customFacePaths[15]; int customFaceIndex; - +static bool transfer = false; +#ifdef ENABLE_CUSTOM_FACE // watchface transfer int cSize, pos, recv; uint32_t total, currentRecv; @@ -191,10 +216,11 @@ bool last; String fName; uint8_t buf1[1024]; uint8_t buf2[1024]; -static bool writeFile = false, transfer = false, wSwitch = true; +static bool writeFile = false, wSwitch = true; static int wLen1 = 0, wLen2 = 0; bool start = false; int lastCustom; +#endif TaskHandle_t gameHandle = NULL; @@ -239,22 +265,23 @@ void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color /*Read the touchpad*/ void my_touchpad_read(lv_indev_drv_t *indev_driver, lv_indev_data_t *data) { - bool touched; uint8_t gesture; uint16_t touchX, touchY; - RemoteTouch rt = watch.getTouch(); // remote touch - if (rt.state) - { - // use remote touch when active - touched = rt.state; - touchX = rt.x; - touchY = rt.y; - } - else - { - touched = tft.getTouch(&touchX, &touchY); - } + // RemoteTouch rt = watch.getTouch(); // remote touch + // if (rt.state) + // { + // // use remote touch when active + // touched = rt.state; + // touchX = rt.x; + // touchY = rt.y; + // } + // else + // { + // touched = tft.getTouch(&touchX, &touchY); + // } + + touched = tft.getTouch(&touchX, &touchY); if (!touched) { @@ -274,16 +301,15 @@ void my_touchpad_read(lv_indev_drv_t *indev_driver, lv_indev_data_t *data) String heapUsage() { - String usage; - uint32_t total = ESP.getHeapSize(); - uint32_t free = ESP.getFreeHeap(); - usage += "Total: " + String(total); - usage += "\tFree: " + String(free); - usage += "\t" + String(((total - free) * 1.0) / total * 100, 2) + "%"; - return usage; + String usage; + uint32_t total = ESP.getHeapSize(); + uint32_t free = ESP.getFreeHeap(); + usage += "Total: " + String(total); + usage += "\tFree: " + String(free); + usage += "\t" + String(((total - free) * 1.0) / total * 100, 2) + "%"; + return usage; } - void *sd_open_cb(struct _lv_fs_drv_t *drv, const char *path, lv_fs_mode_t mode) { char buf[256]; @@ -374,16 +400,16 @@ lv_fs_res_t sd_tell_cb(struct _lv_fs_drv_t *drv, void *file_p, uint32_t *pos_p) return res; } -lv_fs_res_t sd_close_cb(struct _lv_fs_drv_t *drv, void *file_p) { - File *fp = (File *)file_p; +lv_fs_res_t sd_close_cb(struct _lv_fs_drv_t *drv, void *file_p) +{ + File *fp = (File *)file_p; - fp->close(); - // delete fp; // Free the allocated memory + fp->close(); + // delete fp; // Free the allocated memory - return LV_FS_RES_OK; + return LV_FS_RES_OK; } - void checkLocal() { @@ -407,6 +433,7 @@ void checkLocal() } else { +#ifdef ENABLE_CUSTOM_FACE // addListFile(file.name(), file.size()); String nm = String(file.name()); if (nm.endsWith(".jsn")) @@ -415,6 +442,7 @@ void checkLocal() nm = "/" + nm; registerCustomFace(nm.c_str(), &ui_img_custom_preview_png, &face_custom_root, nm); } +#endif } file = root.openNextFile(); } @@ -455,6 +483,10 @@ void deleteFile(const char *path) bool setupFS() { +#ifndef ENABLE_CUSTOM_FACE + return false; +#endif + if (!FLASH.begin(true, "/ffat", MAX_FILE_OPEN)) { FLASH.format(); @@ -622,13 +654,13 @@ bool deleteCustomFace(String file) { return false; } - + JsonArray assets = face["assets"].as(); int sz = assets.size(); for (int j = 0; j < sz; j++) { - deleteFile(assets[j].as()); + deleteFile(assets[j].as()); } deleteFile(path.c_str()); @@ -672,13 +704,15 @@ void onCustomDelete(lv_event_t *e) Serial.println("Delete custom watchface"); Serial.println(customFacePaths[index]); showError("Delete", "The watchface will be deleted from storage, ESP32 will restart after deletion"); - if (deleteCustomFace(customFacePaths[index])){ + if (deleteCustomFace(customFacePaths[index])) + { lv_scr_load_anim(ui_appListScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, false); ESP.restart(); - } else { + } + else + { showError("Error", "Failed to delete watchface"); } - } void addFaceList(lv_obj_t *parent, Face face) @@ -746,8 +780,9 @@ void addFaceList(lv_obj_t *parent, Face face) if (!face.custom) { lv_obj_add_flag(ui_faceItemDelete, LV_OBJ_FLAG_HIDDEN); - - } else { + } + else + { lv_obj_add_event_cb(ui_faceItemDelete, onCustomDelete, LV_EVENT_CLICKED, (void *)face.customIndex); } } @@ -1026,24 +1061,27 @@ void onFaceSelected(lv_event_t *e) void onCustomFaceSelected(int pathIndex) { +#ifdef ENABLE_CUSTOM_FACE if (pathIndex < 0) { prefs.putString("custom", ""); return; } - if (lv_obj_get_child_cnt(face_custom_root) > 0 && lastCustom == pathIndex){ + if (lv_obj_get_child_cnt(face_custom_root) > 0 && lastCustom == pathIndex) + { ui_home = face_custom_root; - } else if (loadCustomFace(customFacePaths[pathIndex])) + } + else if (loadCustomFace(customFacePaths[pathIndex])) { lastCustom = pathIndex; ui_home = face_custom_root; - } lv_scr_load_anim(ui_home, LV_SCR_LOAD_ANIM_FADE_ON, 500, 0, false); prefs.putString("custom", customFacePaths[pathIndex]); +#endif } void onBatteryChange(lv_event_t *e) @@ -1143,11 +1181,17 @@ void onVolumeDown(lv_event_t *e) void updateQrLinks() { +#if LV_USE_QRCODE == 1 lv_obj_clean(ui_qrPanel); for (int i = 0; i < 9; i++) { addQrList(i, watch.getQrAt(i).c_str()); } +#endif +} + +void onRTWState(bool state) +{ } void gameLoop(void *pvParameters) @@ -1228,6 +1272,8 @@ void showAlert() void rawDataCallback(uint8_t *data, int len) { + +#ifdef ENABLE_CUSTOM_FACE if (data[0] == 0xB0) { // this is a chunk header data command @@ -1288,9 +1334,9 @@ void rawDataCallback(uint8_t *data, int len) if (last) { - } } +#endif } void dataCallback(uint8_t *data, int length) @@ -1400,7 +1446,7 @@ void hal_setup() wf = 0; // default } currentIndex = wf; - if (custom != "" && loadCustomFace(custom)) + if (custom != "" && fsState && loadCustomFace(custom)) { ui_home = face_custom_root; } @@ -1481,6 +1527,10 @@ void hal_setup() setTimeout(tm); + // if (!fsState){ + // showError(F_NAME, "Failed to mount the partition"); + // } + if (lv_fs_is_ready('S')) { Serial.println("Drive S is ready"); @@ -1490,9 +1540,15 @@ void hal_setup() Serial.println("Drive S is not ready"); } - if (!fsState){ - showError(F_NAME, "Failed to mount the partition, installing custom watchfaces will not work"); - } +#ifdef ENABLE_APP_QMI8658C + + qmi8658_result = qmi8658c.open(&qmi8658_cfg); + delay(100); // Delay for sensor initialization + ui_imu_set_info(qmi8658_result == qmi8658_result_open_success, qmi8658c.deviceID, qmi8658c.deviceRevisionID); + + // showError("IMU State", qmi8658c.resultToString(qmi8658_result)); + +#endif Timber.i("Setup done"); Timber.i(about); @@ -1503,6 +1559,18 @@ void hal_loop() if (!transfer) { + +#ifdef ENABLE_APP_QMI8658C + if (qmi8658c_active) + { + delay(10); + qmi8658c.read(&data); // Read sensor data from QMI8658C sensor + ui_imu_update_acc(data.acc_xyz.x, data.acc_xyz.y, data.acc_xyz.z); + ui_imu_update_gyro(data.gyro_xyz.x, data.gyro_xyz.y, data.gyro_xyz.z); + ui_imu_update_temp(data.temperature); + } +#endif + lv_timer_handler(); /* let the GUI do its work */ delay(5); watch.loop(); @@ -1574,6 +1642,7 @@ void hal_loop() } } +#ifdef ENABLE_CUSTOM_FACE if (writeFile && transfer) { if (start) @@ -1645,6 +1714,8 @@ void hal_loop() ESP.restart(); } } + +#endif } bool isDay() @@ -1759,6 +1830,7 @@ String longHexString(unsigned long l) void parseDial(const char *path) { +#ifdef ENABLE_CUSTOM_FACE String name = longHexString(watch.getEpoch()); Serial.print("Parsing dial:"); @@ -2148,11 +2220,11 @@ void parseDial(const char *path) Serial.println("Watchface parsed successfully"); prefs.putString("custom", jsnFile); - - } delay(500); ESP.restart(); + +#endif } bool lvImgHeader(uint8_t *byteArray, uint8_t cf, uint16_t w, uint16_t h) diff --git a/hal/esp32/app_hal.h b/hal/esp32/app_hal.h index ade7c6b..8ad3ebd 100644 --- a/hal/esp32/app_hal.h +++ b/hal/esp32/app_hal.h @@ -34,6 +34,11 @@ #endif +#if defined(ESPS3_1_69) || defined(ESPS3_1_28) +#define ENABLE_APP_QMI8658C +#endif + + // #define ENABLE_GAME_RACING #ifdef __cplusplus diff --git a/hal/sdl2/app_hal.cpp b/hal/sdl2/app_hal.cpp index b3a1d4f..7fb0c77 100644 --- a/hal/sdl2/app_hal.cpp +++ b/hal/sdl2/app_hal.cpp @@ -139,6 +139,10 @@ void onWatchfaceChange(lv_event_t *e) {} void onFaceSelected(lv_event_t *e) {} void onCustomFaceSelected(int pathIndex) {} +void onRTWState(bool state) +{ + +} void onGameOpened(){} diff --git a/hal/sdl2/app_hal.h b/hal/sdl2/app_hal.h index aa826a3..b680155 100644 --- a/hal/sdl2/app_hal.h +++ b/hal/sdl2/app_hal.h @@ -32,6 +32,7 @@ #endif #define ENABLE_GAME_RACING +#define ENABLE_APP_QMI8658C #ifdef __cplusplus extern "C" { diff --git a/include/lv_conf.h b/include/lv_conf.h index fd305db..b354ce8 100644 --- a/include/lv_conf.h +++ b/include/lv_conf.h @@ -50,7 +50,6 @@ #if LV_MEM_CUSTOM == 0 /*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/ //#define LV_MEM_SIZE (192U*1024U) /*[bytes]*/ - #define LV_MEM_SIZE (120U*1024U) /*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/ #define LV_MEM_ADR 0 /*0: unused*/ @@ -291,7 +290,7 @@ #define lv_snprintf snprintf #define lv_vsnprintf vsnprintf #else /*LV_SPRINTF_CUSTOM*/ - #define LV_SPRINTF_USE_FLOAT 0 + #define LV_SPRINTF_USE_FLOAT 1 #endif /*LV_SPRINTF_CUSTOM*/ #define LV_USE_USER_DATA 1 @@ -643,7 +642,7 @@ #define LV_USE_GIF 0 /*QR code library*/ -#define LV_USE_QRCODE 1 +// #define LV_USE_QRCODE 1 /*FreeType library*/ #define LV_USE_FREETYPE 0 diff --git a/include/splash.h b/include/splash.h index 935bc32..b22e783 100644 --- a/include/splash.h +++ b/include/splash.h @@ -166,4 +166,3 @@ const uint8_t splash[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0x10, 0x62, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x62, 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; - diff --git a/platformio.ini b/platformio.ini index 725aed3..6dd04da 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,14 +9,21 @@ ; https://docs.platformio.org/page/projectconf.html [platformio] -default_envs = emulator_64bits +; uncomment only one +; default_envs = windows_64 +; default_envs = mac_64 +; default_envs = lolin_c3_mini ; ESP32-C3 LVGL 1.28 Inch 240x240 +default_envs = lolin_s3_mini_1_28 ; Waveshare ESP32-S3-Touch-LCD-1.28 +; default_envs = lolin_s3_mini_1_69 ; Waveshare ESP32-S3-Touch-LCD-1.69 +; default_envs = esp32doit-devkit-v1 + [env] lib_deps = lvgl/lvgl@^8.3.1 build_flags = ; -D LV_LVGL_H_INCLUDE_SIMPLE -[env:emulator_64bits] +[emulator_64] platform = native@^1.1.3 extra_scripts = support/sdl2_build_extra.py build_flags = @@ -25,23 +32,18 @@ build_flags = ; -D LV_LOG_PRINTF=1 ; Add recursive dirs for hal headers search !python -c "import os; print(' '.join(['-I {}'.format(i[0].replace('\x5C','/')) for i in os.walk('hal/sdl2')]))" - ; -arch arm64 ; MACOS with apple silicon (eg M1) - -L C:/msys64/mingw64/lib/ ; Windows -lSDL2 ; SDL drivers options -D LV_LVGL_H_INCLUDE_SIMPLE ; -D LV_CONF_INCLUDE_SIMPLE -D LV_CONF_PATH="${PROJECT_DIR}/include/lv_conf.h" -D LV_MEM_CUSTOM=1 + -D LV_USE_QRCODE=1 -D LV_DRV_NO_CONF -D USE_SDL -D SDL_HOR_RES=240 -D SDL_VER_RES=240 -D SDL_ZOOM=1 - -D SDL_INCLUDE_PATH="\"C:/msys64/mingw64/include/SDL2/SDL.h\"" ; Windows - ; -D SDL_INCLUDE_PATH="\"SDL2/SDL.h"\" ;MACOS - ; !find /opt/homebrew/Cellar/sdl2 -name "include" | sed "s/^/-I /" ;MACOS - ; !find /opt/homebrew/Cellar/sdl2 -name "libSDL2.a" | xargs dirname | sed "s/^/-L /" ;MACOS lib_deps = @@ -53,14 +55,33 @@ build_src_filter = +<*> +<../hal/sdl2> -[env:emulator_32bits] -extends = env:emulator_64bits +[emulator_32] +extends = emulator_64 build_flags = - ${env:emulator_64bits.build_flags} + ${emulator_64.build_flags} -m32 build_src_filter = - ${env:emulator_64bits.build_src_filter} + ${emulator_64.build_src_filter} +[env:windows_64] +extends = emulator_64 +build_flags = + ${emulator_64.build_flags} + -L C:/msys64/mingw64/lib/ ; Windows + -D SDL_INCLUDE_PATH="\"C:/msys64/mingw64/include/SDL2/SDL.h\"" ; Windows +build_src_filter = + ${emulator_64.build_src_filter} + +[env:mac_64] +extends = emulator_64 +build_flags = + ${emulator_64.build_flags} + ; -arch arm64 ; MACOS with apple silicon (eg M1) + -D SDL_INCLUDE_PATH="\"SDL2/SDL.h"\" ;MACOS + !find /opt/homebrew/Cellar/sdl2 -name "include" | sed "s/^/-I /" ;MACOS + !find /opt/homebrew/Cellar/sdl2 -name "libSDL2.a" | xargs dirname | sed "s/^/-L /" ;MACOS +build_src_filter = + ${emulator_64.build_src_filter} [esp32] lib_deps = @@ -91,7 +112,11 @@ lib_deps = build_flags = ${esp32.build_flags} -D ESPC3=1 + -D LV_MEM_SIZE=(120U*1024U) + -D LV_USE_QRCODE=1 ; -D NO_WATCHFACES + -D ENABLE_CUSTOM_FACE=1 + -D LV_MEM_ADR=0 build_src_filter = ${esp32.build_src_filter} @@ -106,9 +131,13 @@ board_build.f_flash = 80000000L board_build.partitions = app3M_fat9M_16MB.csv ;partitions.csv lib_deps = ${esp32.lib_deps} + Qmi8658c=https://github.com/fbiego/Qmi8658c/archive/refs/tags/1.0.1.zip build_flags = ${esp32.build_flags} -D ESPS3_1_28=1 + -D LV_MEM_SIZE=(120U*1024U) + -D ENABLE_CUSTOM_FACE=1 + -D LV_USE_QRCODE=1 build_src_filter = ${esp32.build_src_filter} @@ -125,11 +154,13 @@ board_build.partitions = app3M_fat9M_16MB.csv ;partitions.csv ; board_build.arduino.memory_type = opi_qspi lib_deps = ${esp32.lib_deps} + Qmi8658c=https://github.com/fbiego/Qmi8658c/archive/refs/tags/1.0.1.zip build_flags = ${esp32.build_flags} -D ESPS3_1_69=1 - ; -DBOARD_HAS_PSRAM - ; -mfix-esp32-psram-cache-issue + -D LV_MEM_SIZE=(120U*1024U) + ; -D ENABLE_CUSTOM_FACE=1 ; custom watchface crashes firmware, disable it + -D LV_USE_QRCODE=1 build_src_filter = ${esp32.build_src_filter} @@ -142,5 +173,8 @@ lib_deps = ${esp32.lib_deps} build_flags = ${esp32.build_flags} + -D LV_MEM_SIZE=(60U*1024U) + -D LV_MEM_ADR=0 + ; -D NO_WATCHFACES build_src_filter = ${esp32.build_src_filter} \ No newline at end of file diff --git a/src/apps/qmi8658c/assets/ui_img_gyro_l_png.c b/src/apps/qmi8658c/assets/ui_img_gyro_l_png.c new file mode 100644 index 0000000..6512665 --- /dev/null +++ b/src/apps/qmi8658c/assets/ui_img_gyro_l_png.c @@ -0,0 +1,88 @@ +// This file was generated by SquareLine Studio +// SquareLine Studio version: SquareLine Studio 1.4.1 +// LVGL version: 8.3.11 +// Project name: Test + +#include "../qmi8658c.h" + +#ifndef LV_ATTRIBUTE_MEM_ALIGN + #define LV_ATTRIBUTE_MEM_ALIGN +#endif + +// IMAGE DATA: assets/gyro_l.png +const LV_ATTRIBUTE_MEM_ALIGN uint8_t ui_img_gyro_l_png_data[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0x16,0xAB,0xFF,0x53,0xAB,0xFF,0x83,0xAB,0xFF,0xA7,0xAC,0x1F,0xCC,0xAB,0xFF,0xE1,0xAC,0x1F,0xEE,0xAC,0x1F,0xFC,0xAC,0x1F,0xFC,0xAC,0x1F,0xEE,0xAC,0x1F,0xE2,0xAC,0x1F,0xCC,0xAC,0x1F,0xA8,0xAB,0xFF,0x83,0xAB,0xFF,0x53,0xAC,0x1F,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x9F,0x2C,0xDF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0x34,0xAC,0x1F,0x8E,0xAC,0x1F,0xD6,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAC,0x1F,0xD6,0xAB,0xFF,0x8D,0xAC,0x1F,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x9F,0x37,0xDF,0x9F,0xF0,0xD7,0x9F,0xB4,0xB7,0xFF,0x07,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xBF,0x0D,0xAC,0x1F,0x74,0xAB,0xFF,0xD9,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xD9,0xAB,0xFF,0x73,0xB3,0xBF,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x9F,0x33,0xDF,0x9F,0xEE,0xDF,0x9F,0xFF,0xB7,0x3F,0xCD,0x9E,0xFE,0xB7,0x9E,0xFF,0x08, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xDF,0x11,0xAC,0x1F,0x86,0xAB,0xFF,0xEF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAC,0x1F,0xFF,0xB4,0x7F,0xFF,0xBC,0xBF,0xFF,0xBC,0xDF,0xFF,0xBC,0xDF,0xFF,0xBC,0xBF,0xFF,0xB4,0x7F,0xFF,0xAC,0x1F,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xEF,0xAB,0xFF,0x85,0xAC,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x9F,0x33,0xDF,0x9F,0xEE,0xDF,0x9F,0xFF,0xB7,0x3F,0xDB,0x9E,0xFE,0xFF,0x9E,0xFE,0xF1,0x9E,0xFE,0x2D, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x1F,0x02,0xAB,0xFF,0x65,0xAB,0xFF,0xEB,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAC,0x1F,0xFF,0xBC,0xDF,0xFF,0xCD,0xBF,0xFF,0xE6,0x9F,0xFF,0xEF,0x3F,0xFF,0xF7,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xEF,0x3F,0xFF,0xE6,0x9F,0xFF,0xCD,0xBF,0xFF,0xBC,0xDF,0xFF,0xAC,0x1F,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAC,0x1F,0xEA,0xAB,0xFF,0x63,0x84,0x1F,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x9F,0x33,0xDF,0x9F,0xEE,0xDF,0x9F,0xFF,0xBF,0x3F,0xE9,0x9E,0xFE,0xFF,0x9E,0xFE,0xF1,0x9E,0xFE,0x38,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0x24,0xAC,0x1F,0xC8,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xDF,0xFF,0xDE,0x3F,0xFF,0xF7,0x7F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x7F,0xFF,0xDE,0x3F,0xFF,0xBC,0xDF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xC7,0xAB,0xFF,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x9F,0x33,0xDF,0x9F,0xEE,0xDF,0x9F,0xFF,0xBF,0x5F,0xF2,0x9E,0xFE,0xFF,0x9E,0xFE,0xF1,0x9E,0xFE,0x38,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0xFF,0x53,0xAB,0xFF,0xEF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xC4,0xFF,0xFF,0xE6,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xE6,0xFF,0xFF,0xC5,0x1F,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAC,0x1F,0xF2,0xAB,0xFF,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x9F,0x33,0xDF,0x9F,0xEE,0xDF,0x9F,0xFF,0xBF,0x5F,0xF9,0x9E,0xFE,0xFF,0x9E,0xFE,0xF1,0x9E,0xFE,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x1F,0x02,0xAB,0xFF,0x8F,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xDF,0xFF,0xEE,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xEE,0xFF,0xFF,0xBC,0xBF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAC,0x1F,0x8E,0xD7,0x7F,0x35,0xDF,0x9F,0xEE,0xDF,0x9F,0xFF,0xBF,0x5F,0xFE,0x9E,0xFE,0xFF,0x9E,0xFE,0xF1,0x9E,0xFE,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0x06,0xAC,0x1F,0xA6,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xB4,0x3F,0xFF,0xDE,0x3F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xDE,0x3F,0xFF,0xB4,0x3F,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xB4,0xBF,0xFF,0xD7,0x7F,0xF9,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xFE,0xF1,0x9E,0xFE,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0x06,0xAB,0xFF,0xB7,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xBF,0xFF,0xEF,0x3F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xEF,0x3F,0xFF,0xBC,0x9F,0xFF,0xAB,0xFF,0xFF,0xB4,0xBF,0xFF,0xD7,0x5F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xFE,0xF1,0x9E,0xFE,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x1F,0x02,0xAB,0xFF,0xA7,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xC5,0x1F,0xFF,0xF7,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x9F,0xFF,0xC5,0x9F,0xFF,0xD7,0x5F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xDE,0xFA,0x9E,0xFE,0x3A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0x90,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xCD,0x7F,0xFF,0xFF,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xDE,0xFF,0x93,0x7F,0xFF,0x92,0x7F,0x8F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0x5A,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xCD,0x7F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xBD,0xFF,0xF7,0x76,0xFF,0xF7,0x31,0xFF,0xF7,0x0F,0xFF,0xF7,0x0E,0xFF,0xF7,0x10,0xFF,0xF7,0x32,0xFF,0xF7,0x76,0xFF,0xFF,0xBC,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xDD,0xFF,0xE7,0x98,0xFF,0xDF,0x74,0xFF,0xD7,0x72,0xFF,0xCF,0x50,0xFF,0xCF,0x71,0xFF,0xD7,0x73,0xFF,0xE7,0x97,0xFF,0xF7,0xDD,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xDE,0xFF,0x93,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0xFF,0x23,0xAB,0xFF,0xF1,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xC5,0x1F,0xFF,0xFF,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xBD,0xFF,0xF7,0x30,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xEB,0xFF,0xF7,0x53,0xFF,0xFF,0xBB,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xDD,0xFF,0xDF,0x95,0xFF,0xC7,0x4E,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2C,0xFF,0xD7,0x75,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xA4,0xBF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xF3,0x92,0x9F,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x1F,0x02,0xAB,0xFF,0xC9,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xBF,0xFF,0xF7,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0x9B,0xFF,0xF6,0xCA,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF7,0x0F,0xFF,0xF7,0x99,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xEF,0xBA,0xFF,0xD7,0x72,0xFF,0xBF,0x2C,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xC7,0x4F,0xFF,0xD7,0x9E,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xD7,0x5F,0xFF,0x9B,0x5F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xC6,0x84,0x1F,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0x66,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xB4,0x1F,0xFF,0xEF,0x1F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xBD,0xFF,0xF6,0xCA,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF7,0x0E,0xFF,0xD7,0x50,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xC7,0x4F,0xFF,0xD7,0x9E,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9F,0x1E,0xFF,0xCF,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xCE,0xBF,0xFF,0x92,0xBF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xDF,0x11,0xAB,0xFF,0xEB,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xDE,0x3F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x31,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF7,0x31,0xFF,0xFF,0x99,0xFF,0xFF,0xBD,0xFF,0xFF,0xBD,0xFF,0xFF,0xBB,0xFF,0xFF,0x99,0xFF,0xF7,0x54,0xFF,0xF7,0x0D,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xDE,0xEA,0xFF,0xC7,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xCF,0x50,0xFF,0xDF,0x95,0xFF,0xEF,0xB9,0xFF,0xF7,0xBC,0xFF,0xF7,0xDE,0xFF,0xF7,0xBD,0xFF,0xE7,0x9B,0xFF,0xDF,0x9E,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xFE,0xFF,0x66,0xD7,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBD,0x5F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xE9,0x8A,0x9F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0xFF,0x87,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xBD,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xFF,0x78,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xBC,0xFF,0xF7,0x53,0xFF,0xF6,0xCA,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xEE,0xC8,0xFF,0xCF,0x2C,0xFF,0xD7,0x73,0xFF,0xF7,0xBC,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xFE,0xFF,0x36,0x92,0xFF,0x06,0x6E,0xFF,0xC7,0x7D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x7F,0xFF,0x9B,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xA4,0x1F,0x0E,0xAB,0xFF,0xEF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xEE,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x76,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF7,0x31,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xDF,0x96,0xFF,0xC7,0x2C,0xFF,0xDF,0x0A,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC9,0xFF,0xF7,0x55,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xFE,0xFF,0x26,0x72,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x87,0x18,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xCE,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xEE,0x8A,0x7F,0x0D,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0x74,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xC5,0x1F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x31,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF7,0x99,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBD,0xFF,0xCF,0x71,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xC7,0x2B,0xFF,0xE6,0xE9,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF7,0x0F,0xFF,0xFF,0xBD,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xA7,0x3C,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x5E,0xD5,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xA3,0xDF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x71,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0xFF,0xD9,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xE6,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x0F,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xFF,0xBD,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xDD,0xFF,0xCF,0x4F,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xC7,0x4D,0xFF,0xEF,0xB9,0xFF,0xFF,0x98,0xFF,0xF6,0xCA,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xEC,0xFF,0xFF,0xBC,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xC7,0x7E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x46,0xB3,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xC6,0x5F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xD8,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAB,0xFF,0x35,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x0E,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xFF,0xDE,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBC,0xFF,0xC7,0x4E,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xCF,0x50,0xFF,0xF7,0xDD,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xBD,0xFF,0xF7,0x0E,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xEF,0x0F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xDF,0x9F,0xFF,0xCF,0x7E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x46,0xB3,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x9B,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x8A,0x7F,0x32,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAC,0x1F,0x8E,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xDE,0x3F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x10,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xFF,0xBC,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xEF,0xBB,0xFF,0xC7,0x4D,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xDF,0x95,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x32,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xEE,0xED,0xFF,0xDF,0x7D,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xB7,0x5C,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x4E,0xD4,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBD,0x3F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x8A,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAC,0x1F,0xD6,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAC,0x1F,0xFF,0xF7,0x7F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x32,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xFF,0x99,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBC,0xFF,0xC7,0x4D,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2C,0xFF,0xE7,0x97,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x55,0xFF,0xEE,0xED,0xFF,0xDF,0x7D,0xFF,0xDF,0x9F,0xFF,0xBF,0x5E,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x9F,0x3A,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x66,0xF6,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x1F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xD3,0x00,0x00,0x00, + 0xAB,0xDF,0x15,0xAB,0xFF,0xFE,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x76,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF7,0x54,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xDD,0xFF,0xC7,0x4E,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xC7,0x4C,0xFF,0xE7,0x98,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xDF,0x9E,0xFF,0xDF,0x9F,0xFF,0xBF,0x3E,0xFF,0x9E,0xFE,0xFF,0xA6,0xFD,0xFF,0xDE,0x4D,0xFF,0xDF,0x5C,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x6E,0xF6,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x97,0x39,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x9B,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFE,0x8A,0x7F,0x14, + 0xAB,0xFF,0x53,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xCD,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xBC,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF7,0x0D,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBD,0xFF,0xCF,0x4F,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xC7,0x4C,0xFF,0xEF,0xBA,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x3E,0xFF,0x9E,0xFE,0xFF,0xA6,0xFD,0xFF,0xDE,0x2B,0xFF,0xED,0xE5,0xFF,0xEE,0x2A,0xFF,0xDF,0x7D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x2E,0x92,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0xC7,0x7D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xB4,0xBF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x8A,0x7F,0x50, + 0xAC,0x1F,0x82,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xE6,0x9F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF6,0xEB,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xFF,0xBC,0xFF,0xFF,0xDF,0xFF,0xD7,0x71,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2C,0xFF,0xE7,0x99,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xDF,0xFF,0xD7,0x9F,0xFF,0xC7,0x7F,0xFF,0xCF,0x7F,0xFF,0xD7,0x9F,0xFF,0xEF,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA6,0xFE,0xFF,0xDE,0x2B,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0x6D,0xFF,0xDF,0x9F,0xFF,0xB7,0x5C,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x26,0x91,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xC5,0xFF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x7F, + 0xAB,0xFF,0xA7,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xEF,0x3F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x53,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF7,0x33,0xFF,0xDF,0x96,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xE7,0x97,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xD7,0x9F,0xFF,0xAF,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xAF,0x5F,0xFF,0xC7,0x7F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xDE,0xF6,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0xD3,0xFF,0x5E,0xD5,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x6E,0xF6,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xCE,0xBF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xA3, + 0xAC,0x1F,0xCC,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAC,0x1F,0xFF,0xF7,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xBB,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC9,0xFF,0xC7,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xDF,0x95,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xD7,0x9F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0x9F,0x1F,0xFF,0x96,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xE6,0xB2,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xDD,0xE6,0xFF,0x0E,0x6F,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0xBF,0x7D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x7F,0xFF,0x92,0x9F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xC8, + 0xAC,0x1F,0xE2,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xB4,0x7F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x0F,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xDE,0xEA,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xCF,0x51,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xDF,0xFF,0xAF,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0x96,0xFF,0xFF,0x7E,0xBE,0xFF,0x86,0xBE,0xFF,0xC7,0x5F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xE6,0x4C,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0x76,0x2A,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x46,0xB3,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x9B,0x1F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xDF, + 0xAB,0xFF,0xEF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x99,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xC7,0x2B,0xFF,0xC7,0x4D,0xFF,0xF7,0xDD,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xD7,0x9F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0x9F,0x3F,0xFF,0x86,0xDE,0xFF,0x86,0xDE,0xFF,0x8E,0xBF,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0xB7,0x3F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x7D,0xFF,0xEE,0x08,0xFF,0xD5,0xE6,0xFF,0x0E,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0xA7,0x5B,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x9B,0x5F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xEB, + 0xAC,0x1F,0xFA,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0x0E,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xE6,0xE9,0xFF,0xEF,0xBA,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xC7,0x7F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0x86,0xDE,0xFF,0x7E,0xBE,0xFF,0x65,0xBF,0xFF,0x55,0x1F,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0xA7,0x1E,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x18,0xFF,0x4E,0x2B,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x3E,0xB2,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xA3,0x9F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xF7, + 0xAC,0x1F,0xFA,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xD7,0x50,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xFF,0x98,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xC7,0x7F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0x86,0xDE,0xFF,0x65,0xBF,0xFF,0x44,0x9F,0xFF,0x55,0x1F,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0xA7,0x1E,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x9F,0x3A,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0xC6,0x6D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x9B,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xF8, + 0xAB,0xFF,0xEF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xEF,0xBA,0xFF,0xBF,0x2B,0xFF,0xDE,0xEA,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xCA,0xFF,0xFF,0xBD,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xD7,0x9F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0xA7,0x5F,0xFF,0x8E,0xBF,0xFF,0x55,0x1F,0xFF,0x55,0x1F,0xFF,0x76,0x5E,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0xB7,0x3F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xC7,0x7D,0xFF,0x16,0x70,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x6E,0x2A,0xFF,0xED,0xE5,0xFF,0xDF,0x39,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x9B,0x3F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xEB, + 0xAB,0xFF,0xE3,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xB4,0x7F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xD7,0x72,0xFF,0xBF,0x2B,0xFF,0xC7,0x2B,0xFF,0xEE,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF7,0x0F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xEF,0xBF,0xFF,0xAF,0x5F,0xFF,0xA7,0x5F,0xFF,0x96,0xFF,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x86,0xBE,0xFF,0xD7,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x9F,0xFF,0x3E,0xB3,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x26,0x4D,0xFF,0xE5,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0x6D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x92,0xDF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xDE, + 0xAC,0x1F,0xCC,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAC,0x1F,0xFF,0xF7,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xDD,0xFF,0xBF,0x2C,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xCF,0x2B,0xFF,0xF6,0xC9,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF7,0x53,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xC7,0x7F,0xFF,0x9F,0x1F,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0xB7,0x3F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x6E,0xF6,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x6E,0xFF,0xB6,0x29,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xDF,0x5B,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x7F,0xFF,0x92,0x9F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xC7, + 0xAB,0xFF,0xA7,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xEF,0x3F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xDF,0x95,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xD7,0x74,0xFF,0xF7,0x55,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF7,0x77,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x96,0xDE,0xFF,0x86,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x7E,0xBE,0xFF,0x86,0xBE,0xFF,0xB7,0x3F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x87,0x18,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x77,0x17,0xFF,0xE6,0xB1,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0xB2,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xCE,0xBF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xA2, + 0xAC,0x1F,0x82,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xE6,0x9F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xC7,0x4E,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xF7,0xBC,0xFF,0xFF,0xDF,0xFF,0xF7,0x0F,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xF6,0xC8,0xFF,0xEE,0xED,0xFF,0xDF,0x9E,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xC7,0x5F,0xFF,0xB7,0x3F,0xFF,0xA7,0x1E,0xFF,0xA7,0x1E,0xFF,0xB7,0x3F,0xFF,0xD7,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x97,0x3A,0xFF,0x06,0x6E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x46,0xB3,0xFF,0xD7,0x9F,0xFF,0xDF,0x5C,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xEE,0x29,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBD,0xBF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x7D, + 0xAB,0xFF,0x53,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xCD,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xDD,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xCF,0x50,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xBD,0xFF,0xF6,0xEC,0xFF,0xF6,0xC8,0xFF,0xEE,0xED,0xFF,0xDF,0x7D,0xFF,0xDF,0x9F,0xFF,0xBF,0x5E,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xA7,0x5B,0xFF,0x06,0x6F,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x2E,0x91,0xFF,0xCF,0x7E,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xE6,0x4B,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xDF,0x7D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xB4,0xDF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x4F, + 0xAB,0xDF,0x15,0xAB,0xFF,0xFE,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xE7,0x98,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xDF,0x95,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xBC,0xFF,0xEF,0x0F,0xFF,0xDF,0x7D,0xFF,0xDF,0x9F,0xFF,0xBF,0x3D,0xFF,0x9E,0xFE,0xFF,0xA6,0xFE,0xFF,0xCF,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x97,0x3A,0xFF,0x0E,0x6F,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x16,0x90,0xFF,0xBF,0x7D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xE6,0xB2,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xDF,0x16,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xA3,0x9F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFD,0x8A,0xBF,0x12, + 0x00,0x00,0x00,0xAC,0x1F,0xD6,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAC,0x1F,0xFF,0xF7,0x7F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xDF,0x74,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xEF,0xB9,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x3E,0xFF,0x9E,0xFE,0xFF,0xA6,0xFD,0xFF,0xDE,0x2B,0xFF,0xDE,0xF6,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x87,0x18,0xFF,0x06,0x6E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x16,0x70,0xFF,0xB7,0x5C,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x18,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0xB1,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xCE,0xFF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xD1,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAC,0x1F,0x8C,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xDE,0x1F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xD7,0x72,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xF7,0xBC,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5E,0xFF,0x9E,0xFE,0xFF,0xA6,0xFD,0xFF,0xDE,0x4B,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0xB1,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x9F,0xFF,0x6E,0xF6,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x16,0x70,0xFF,0xB7,0x5C,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x5B,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0x8F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBD,0x3F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x88,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAB,0xFF,0x33,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xCF,0x71,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xF7,0xDE,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xDE,0x4D,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0x4C,0xFF,0xDF,0x5C,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xC7,0x7D,0xFF,0x36,0xB2,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x1E,0x70,0xFF,0xB7,0x5C,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x7E,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0x6D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0x9B,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x8A,0x9F,0x30,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0xD8,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xE6,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xD7,0x71,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xF7,0xBD,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xDF,0x5C,0xFF,0xEE,0x29,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xEE,0x07,0xFF,0xE6,0xF5,0xFF,0x9F,0x3A,0xFF,0x16,0x70,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x26,0x91,0xFF,0xC7,0x7D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x5C,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0x6D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xC6,0x3F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xD7,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0x72,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xC5,0x1F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xD7,0x73,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xE7,0x9B,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x7E,0xFF,0xE6,0x6D,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xD5,0xE6,0xFF,0x4E,0x2B,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x46,0xB3,0xFF,0xCF,0x7E,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x38,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0x90,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xA3,0xDF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x70,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xBF,0x0D,0xAC,0x1F,0xEE,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xE6,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xE7,0x97,0xFF,0xBF,0x2B,0xFF,0xBF,0x2B,0xFF,0xC7,0x4F,0xFF,0xDF,0x9E,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xE6,0xD2,0xFF,0xDD,0xE6,0xFF,0x76,0x2A,0xFF,0x0E,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x6E,0xFF,0x6E,0xF7,0xFF,0xD7,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xE6,0x8F,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0xF5,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xCE,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xEC,0x92,0xBF,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0xFF,0x85,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0xBF,0xFF,0xFF,0xBF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xDD,0xFF,0xBF,0x2C,0xFF,0xC7,0x4F,0xFF,0xD7,0x9E,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xB7,0x5C,0xFF,0x5E,0xD5,0xFF,0x0E,0x6F,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x26,0x4D,0xFF,0xB6,0x08,0xFF,0xE6,0x90,0xFF,0xDF,0x5B,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x17,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xDF,0x7D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x7F,0xFF,0x9B,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0x10,0xAB,0xFF,0xE9,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xDE,0x3F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xD7,0x75,0xFF,0xD7,0x9E,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xFE,0xFF,0xA7,0x3C,0xFF,0xC7,0x7E,0xFF,0xCF,0x7E,0xFF,0xB7,0x5C,0xFF,0x9F,0x3A,0xFF,0x6E,0xF6,0xFF,0x2E,0x92,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x6E,0x2A,0xFF,0xE5,0xE6,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xEE,0x2A,0xFF,0xE6,0xB2,0xFF,0xDF,0x38,0xFF,0xDF,0x7C,0xFF,0xDF,0x7D,0xFF,0xDF,0x7E,0xFF,0xDF,0x39,0xFF,0xE6,0x8F,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xE6,0x8F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xB5,0x3F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xE8,0x9A,0xBF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0xFF,0x63,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xB4,0x1F,0xFF,0xEF,0x1F,0xFF,0xFF,0xDF,0xFF,0xFF,0xDF,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xFD,0xFF,0x26,0x72,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x3E,0x91,0xFF,0xBE,0x4D,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xEE,0x08,0xFF,0xDF,0x7D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xCE,0xBF,0xFF,0x92,0xBF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x1F,0x02,0xAC,0x1F,0xC6,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xBC,0x9F,0xFF,0xF7,0x9F,0xFF,0xF7,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xFE,0xFF,0x36,0x91,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x3E,0xB3,0xFF,0xA7,0x5B,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x39,0xFF,0xE6,0x4C,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xEE,0x28,0xFF,0xDF,0x5B,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x3F,0xFF,0x9B,0x3F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xC5,0xF8,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0x1F,0x22,0xAC,0x1F,0xF0,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xC5,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0x66,0xD7,0xFF,0x06,0x6E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x06,0x4E,0xFF,0x1E,0x91,0xFF,0x66,0xF6,0xFF,0xBF,0x7D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x5B,0xFF,0xE6,0xB1,0xFF,0xEE,0x08,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE5,0xFF,0xED,0xE6,0xFF,0xE6,0x90,0xFF,0xDF,0x7E,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x7F,0xFF,0xA3,0xFF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xF0,0x92,0x7E,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0xFF,0x57,0xAB,0xFF,0xFF,0xAB,0xFF,0xFF,0xB4,0xBF,0xFF,0xD7,0x5F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xDF,0x9F,0xFF,0xC7,0x7E,0xFF,0x87,0x19,0xFF,0x5E,0xD5,0xFF,0x46,0xB3,0xFF,0x46,0xD4,0xFF,0x4E,0xD4,0xFF,0x66,0xF6,0xFF,0x8F,0x19,0xFF,0xBF,0x7D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x5C,0xFF,0xE6,0xF5,0xFF,0xE6,0xB1,0xFF,0xE6,0x8F,0xFF,0xE6,0x6C,0xFF,0xE6,0x6E,0xFF,0xE6,0xB0,0xFF,0xDE,0xF5,0xFF,0xDF,0x7D,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x7F,0xFF,0xAC,0x5F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0xFF,0x8D,0xB4,0xBF,0xFF,0xD7,0x5F,0xFF,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0xA7,0x1E,0xFF,0xCF,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x7F,0xFF,0xA4,0x1F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x8B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x5F,0x34,0xD7,0x7F,0xF9,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xBE,0xFF,0xA4,0x9F,0xFF,0xD7,0x5F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x3F,0xFF,0xA3,0xDF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xA5,0xF8,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x9F,0x33,0xDF,0x9F,0xEE,0xDF,0x9F,0xFF,0xBF,0x5F,0xFF,0x9E,0xFE,0xFF,0x9E,0xBE,0xFF,0x93,0x7F,0xFF,0x92,0x7F,0xFF,0x9B,0x5F,0xFF,0xCE,0xBF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xCE,0x7F,0xFF,0x9B,0x1F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xB7,0x82,0xBF,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x9F,0x33,0xDF,0x9F,0xEE,0xDF,0x9F,0xFF,0xBF,0x5F,0xFC,0x9E,0xFE,0xFF,0x9E,0xDE,0xFA,0x93,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0xBF,0xFF,0xBD,0x5F,0xFF,0xD7,0x7F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x7F,0xFF,0xB5,0x3F,0xFF,0x92,0x9F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xA5,0x82,0xBF,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x9F,0x33,0xDF,0x9F,0xEE,0xDF,0x9F,0xFF,0xBF,0x3F,0xF9,0x9E,0xFE,0xFF,0x9E,0xFE,0xF0,0x9E,0xFE,0x3A,0x92,0x7F,0x8F,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x9B,0x7F,0xFF,0xCE,0x5F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xC6,0x1F,0xFF,0x9B,0x3F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0x8B,0xF8,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x9F,0x33,0xDF,0x9F,0xEE,0xDF,0x9F,0xFF,0xBF,0x3F,0xF3,0x9E,0xFE,0xFF,0x9E,0xFE,0xF0,0x9E,0xFE,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x7F,0x58,0x92,0x7F,0xF1,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0xA3,0xDF,0xFF,0xC6,0x5F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x9F,0xFF,0xC6,0x1F,0xFF,0xA3,0xDF,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xF0,0x92,0x7F,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x9F,0x33,0xDF,0x9F,0xEE,0xDF,0x9F,0xFF,0xBF,0x3F,0xEA,0x9E,0xFE,0xFF,0x9E,0xFE,0xF0,0x9E,0xFE,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x5F,0x22,0x92,0x7F,0xC6,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x9B,0x7F,0xFF,0xB5,0x3F,0xFF,0xCE,0xFF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xCE,0xDF,0xFF,0xBD,0x3F,0xFF,0x9B,0x3F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xC5,0x92,0x7E,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xD7,0x9F,0x33,0xDF,0x9F,0xEE,0xDF,0x9F,0xFF,0xB7,0x3E,0xE3,0x9E,0xFE,0xFF,0x9E,0xFE,0xF0,0x9E,0xFE,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x1F,0x02,0x92,0x7F,0x62,0x92,0x7F,0xE9,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0xA3,0x9F,0xFF,0xB4,0xBF,0xFF,0xBD,0xDF,0xFF,0xCE,0xDF,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xDF,0x9F,0xFF,0xD7,0x7F,0xFF,0xCE,0xBF,0xFF,0xBD,0xDF,0xFF,0xB4,0xDF,0xFF,0x9B,0x5F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xE7,0x92,0x7F,0x60,0xF8,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xD7,0x9F,0x2C,0xDF,0x9F,0xF0,0xDF,0x9F,0xFF,0xB7,0x3F,0xD5,0x9E,0xFE,0xFF,0x9E,0xFE,0xF0,0x9E,0xFE,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x9F,0x10,0x92,0x7F,0x84,0x92,0x7F,0xEE,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x9F,0xFF,0x92,0xFF,0xFF,0x9B,0x5F,0xFF,0xA3,0xBF,0xFF,0x9B,0x7F,0xFF,0x9B,0x5F,0xFF,0x9A,0xFF,0xFF,0x92,0x9F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xEC,0x92,0x7F,0x81,0x9A,0xBF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xD7,0xFF,0x06,0xDF,0x9F,0xB1,0xB7,0x3E,0xC9,0x9E,0xFE,0xFF,0x9E,0xFE,0xF0,0x9E,0xFE,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x92,0xBF,0x0C,0x92,0x7F,0x71,0x92,0x7F,0xD8,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xD6,0x92,0x7F,0x70,0x92,0xBF,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xB7,0xFF,0x07,0x9E,0xFE,0xB4,0x9E,0xFE,0xF0,0x9E,0xFE,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x7F,0x32,0x92,0x7F,0x8A,0x92,0x7F,0xD3,0x92,0x7F,0xFE,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFF,0x92,0x7F,0xFD,0x92,0x7F,0xD2,0x92,0x7F,0x88,0x92,0x7F,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x96,0xDF,0x07,0x9E,0xFE,0x2C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x9F,0x13,0x92,0x7F,0x4F,0x92,0x7F,0x7F,0x92,0x7F,0xA4,0x92,0x7F,0xC8,0x92,0x7F,0xDD,0x92,0x7F,0xEE,0x92,0x7F,0xF8,0x92,0x7F,0xF8,0x92,0x7F,0xEC,0x92,0x7F,0xDD,0x92,0x7F,0xC7,0x92,0x7F,0xA2,0x92,0x7F,0x7D,0x92,0x7F,0x4F,0x8A,0xBF,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + +}; +const lv_img_dsc_t ui_img_gyro_l_png = { + .header.always_zero = 0, + .header.w = 64, + .header.h = 64, + .data_size = sizeof(ui_img_gyro_l_png_data), + .header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA, + .data = ui_img_gyro_l_png_data +}; + diff --git a/src/apps/qmi8658c/qmi8658c.c b/src/apps/qmi8658c/qmi8658c.c new file mode 100644 index 0000000..ce598bd --- /dev/null +++ b/src/apps/qmi8658c/qmi8658c.c @@ -0,0 +1,281 @@ + + +#include "qmi8658c.h" + +#ifdef ENABLE_APP_QMI8658C +lv_obj_t *ui_imuScreen; +lv_obj_t *ui_imuPanel; +lv_obj_t *ui_imuTitle; +lv_obj_t *ui_imuInfo; +lv_obj_t *ui_accTitle; +lv_obj_t *ui_accXText; +lv_obj_t *ui_accXBar; +lv_obj_t *ui_accYText; +lv_obj_t *ui_accYBar; +lv_obj_t *ui_accZText; +lv_obj_t *ui_accZBar; +lv_obj_t *ui_gyroTitle; +lv_obj_t *ui_gyroXText; +lv_obj_t *ui_gyroXBar; +lv_obj_t *ui_gyroYText; +lv_obj_t *ui_gyroYBar; +lv_obj_t *ui_gyroZText; +lv_obj_t *ui_gyroZBar; +lv_obj_t *ui_tempLabel; +lv_obj_t *ui_rtwPanel; +lv_obj_t *ui_rtwText; +lv_obj_t *ui_rtwSwitch; + +bool qmi8658c_active; + +void ui_event_appScreen(lv_event_t *e) +{ + lv_event_code_t event_code = lv_event_get_code(e); + lv_obj_t *target = lv_event_get_target(e); + if (event_code == LV_EVENT_SCREEN_LOAD_START) + { + } + if (event_code == LV_EVENT_SCREEN_LOADED) + { + qmi8658c_active = true; + } + if (event_code == LV_EVENT_SCREEN_UNLOAD_START) + { + qmi8658c_active = false; + } + if (event_code == LV_EVENT_SCREEN_UNLOADED) + { + } + + if (event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_get_act()) == LV_DIR_RIGHT) + { + ui_gameExit(); + } +} + +// void ui_event_rtwSwitch(lv_event_t * e) +// { +// lv_event_code_t event_code = lv_event_get_code(e); +// lv_obj_t * target = lv_event_get_target(e); +// if(event_code == LV_EVENT_VALUE_CHANGED) { +// onRTWState(lv_obj_has_state(target, LV_STATE_CHECKED)); +// } +// } + +#endif + +void ui_imuScreen_screen_init(void (*callback)(const char *, const lv_img_dsc_t *, lv_obj_t **)) +{ +#ifdef ENABLE_APP_QMI8658C + ui_imuScreen = lv_obj_create(NULL); + lv_obj_clear_flag(ui_imuScreen, LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_set_style_bg_color(ui_imuScreen, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_bg_opa(ui_imuScreen, 255, LV_PART_MAIN | LV_STATE_DEFAULT); + + ui_imuPanel = lv_obj_create(ui_imuScreen); + lv_obj_set_width(ui_imuPanel, lv_pct(100)); + lv_obj_set_height(ui_imuPanel, lv_pct(100)); + lv_obj_set_align(ui_imuPanel, LV_ALIGN_CENTER); + lv_obj_set_flex_flow(ui_imuPanel, LV_FLEX_FLOW_COLUMN); + lv_obj_set_flex_align(ui_imuPanel, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); + lv_obj_set_scrollbar_mode(ui_imuPanel, LV_SCROLLBAR_MODE_OFF); + lv_obj_set_scroll_dir(ui_imuPanel, LV_DIR_VER); + lv_obj_add_flag(ui_imuPanel, LV_OBJ_FLAG_EVENT_BUBBLE); + lv_obj_set_style_radius(ui_imuPanel, 0, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_bg_color(ui_imuPanel, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_bg_opa(ui_imuPanel, 255, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_border_width(ui_imuPanel, 0, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_pad_left(ui_imuPanel, 0, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_pad_right(ui_imuPanel, 0, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_pad_top(ui_imuPanel, 20, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_pad_bottom(ui_imuPanel, 50, LV_PART_MAIN | LV_STATE_DEFAULT); + + ui_imuTitle = lv_label_create(ui_imuPanel); + lv_obj_set_width(ui_imuTitle, LV_SIZE_CONTENT); /// 1 + lv_obj_set_height(ui_imuTitle, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(ui_imuTitle, LV_ALIGN_CENTER); + lv_label_set_text(ui_imuTitle, "QMI8658C"); + lv_obj_set_style_text_font(ui_imuTitle, &lv_font_montserrat_20, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_border_color(ui_imuTitle, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_border_opa(ui_imuTitle, 255, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_border_width(ui_imuTitle, 1, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_border_side(ui_imuTitle, LV_BORDER_SIDE_BOTTOM, LV_PART_MAIN | LV_STATE_DEFAULT); + + ui_imuInfo = lv_label_create(ui_imuPanel); + lv_obj_set_width(ui_imuInfo, 200); + lv_obj_set_height(ui_imuInfo, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(ui_imuInfo, LV_ALIGN_CENTER); + + ui_accTitle = lv_label_create(ui_imuPanel); + lv_obj_set_width(ui_accTitle, LV_SIZE_CONTENT); /// 1 + lv_obj_set_height(ui_accTitle, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(ui_accTitle, LV_ALIGN_CENTER); + lv_label_set_text(ui_accTitle, "Raw Accelerometer"); + + ui_accXText = lv_label_create(ui_imuPanel); + lv_obj_set_width(ui_accXText, 200); + lv_obj_set_height(ui_accXText, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(ui_accXText, LV_ALIGN_CENTER); + + ui_accXBar = lv_bar_create(ui_imuPanel); + lv_bar_set_value(ui_accXBar, 25, LV_ANIM_OFF); + lv_bar_set_start_value(ui_accXBar, 0, LV_ANIM_OFF); + lv_obj_set_width(ui_accXBar, 200); + lv_obj_set_height(ui_accXBar, 10); + lv_obj_set_align(ui_accXBar, LV_ALIGN_CENTER); + + ui_accYText = lv_label_create(ui_imuPanel); + lv_obj_set_width(ui_accYText, 200); + lv_obj_set_height(ui_accYText, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(ui_accYText, LV_ALIGN_CENTER); + + ui_accYBar = lv_bar_create(ui_imuPanel); + lv_bar_set_value(ui_accYBar, 25, LV_ANIM_OFF); + lv_bar_set_start_value(ui_accYBar, 0, LV_ANIM_OFF); + lv_obj_set_width(ui_accYBar, 200); + lv_obj_set_height(ui_accYBar, 10); + lv_obj_set_align(ui_accYBar, LV_ALIGN_CENTER); + + ui_accZText = lv_label_create(ui_imuPanel); + lv_obj_set_width(ui_accZText, 200); + lv_obj_set_height(ui_accZText, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(ui_accZText, LV_ALIGN_CENTER); + + ui_accZBar = lv_bar_create(ui_imuPanel); + lv_bar_set_value(ui_accZBar, 25, LV_ANIM_OFF); + lv_bar_set_start_value(ui_accZBar, 0, LV_ANIM_OFF); + lv_obj_set_width(ui_accZBar, 200); + lv_obj_set_height(ui_accZBar, 10); + lv_obj_set_align(ui_accZBar, LV_ALIGN_CENTER); + + ui_gyroTitle = lv_label_create(ui_imuPanel); + lv_obj_set_width(ui_gyroTitle, LV_SIZE_CONTENT); /// 1 + lv_obj_set_height(ui_gyroTitle, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(ui_gyroTitle, LV_ALIGN_CENTER); + lv_label_set_text(ui_gyroTitle, "Raw Gyroscope"); + + ui_gyroXText = lv_label_create(ui_imuPanel); + lv_obj_set_width(ui_gyroXText, 200); + lv_obj_set_height(ui_gyroXText, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(ui_gyroXText, LV_ALIGN_CENTER); + + ui_gyroXBar = lv_bar_create(ui_imuPanel); + lv_bar_set_value(ui_gyroXBar, 50, LV_ANIM_OFF); + lv_bar_set_start_value(ui_gyroXBar, 0, LV_ANIM_OFF); + lv_obj_set_width(ui_gyroXBar, 200); + lv_obj_set_height(ui_gyroXBar, 10); + lv_obj_set_align(ui_gyroXBar, LV_ALIGN_CENTER); + + ui_gyroYText = lv_label_create(ui_imuPanel); + lv_obj_set_width(ui_gyroYText, 200); + lv_obj_set_height(ui_gyroYText, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(ui_gyroYText, LV_ALIGN_CENTER); + + ui_gyroYBar = lv_bar_create(ui_imuPanel); + lv_bar_set_value(ui_gyroYBar, 50, LV_ANIM_OFF); + lv_bar_set_start_value(ui_gyroYBar, 0, LV_ANIM_OFF); + lv_obj_set_width(ui_gyroYBar, 200); + lv_obj_set_height(ui_gyroYBar, 10); + lv_obj_set_align(ui_gyroYBar, LV_ALIGN_CENTER); + + ui_gyroZText = lv_label_create(ui_imuPanel); + lv_obj_set_width(ui_gyroZText, 200); + lv_obj_set_height(ui_gyroZText, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(ui_gyroZText, LV_ALIGN_CENTER); + + ui_gyroZBar = lv_bar_create(ui_imuPanel); + lv_bar_set_value(ui_gyroZBar, 50, LV_ANIM_OFF); + lv_bar_set_start_value(ui_gyroZBar, 0, LV_ANIM_OFF); + lv_obj_set_width(ui_gyroZBar, 200); + lv_obj_set_height(ui_gyroZBar, 10); + lv_obj_set_align(ui_gyroZBar, LV_ALIGN_CENTER); + + ui_tempLabel = lv_label_create(ui_imuPanel); + lv_obj_set_width(ui_tempLabel, 200); + lv_obj_set_height(ui_tempLabel, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(ui_tempLabel, LV_ALIGN_CENTER); + lv_label_set_text(ui_tempLabel, "Temp: 35C"); + + // ui_rtwPanel = lv_obj_create(ui_imuPanel); + // lv_obj_set_width(ui_rtwPanel, 220); + // lv_obj_set_height(ui_rtwPanel, LV_SIZE_CONTENT); /// 50 + // lv_obj_set_align(ui_rtwPanel, LV_ALIGN_CENTER); + // lv_obj_set_flex_flow(ui_rtwPanel, LV_FLEX_FLOW_ROW); + // lv_obj_set_flex_align(ui_rtwPanel, LV_FLEX_ALIGN_SPACE_BETWEEN, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); + // lv_obj_clear_flag(ui_rtwPanel, LV_OBJ_FLAG_SCROLLABLE); /// Flags + // lv_obj_set_style_radius(ui_rtwPanel, 0, LV_PART_MAIN | LV_STATE_DEFAULT); + // lv_obj_set_style_bg_color(ui_rtwPanel, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + // lv_obj_set_style_bg_opa(ui_rtwPanel, 0, LV_PART_MAIN | LV_STATE_DEFAULT); + // lv_obj_set_style_border_color(ui_rtwPanel, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT); + // lv_obj_set_style_border_opa(ui_rtwPanel, 255, LV_PART_MAIN | LV_STATE_DEFAULT); + // lv_obj_set_style_border_width(ui_rtwPanel, 1, LV_PART_MAIN | LV_STATE_DEFAULT); + // lv_obj_set_style_border_side(ui_rtwPanel, LV_BORDER_SIDE_TOP, LV_PART_MAIN | LV_STATE_DEFAULT); + + // ui_rtwText = lv_label_create(ui_rtwPanel); + // lv_obj_set_width(ui_rtwText, LV_SIZE_CONTENT); /// 1 + // lv_obj_set_height(ui_rtwText, LV_SIZE_CONTENT); /// 1 + // lv_obj_set_align(ui_rtwText, LV_ALIGN_CENTER); + // lv_label_set_text(ui_rtwText, "Raise to Wake"); + // lv_obj_set_style_text_font(ui_rtwText, &lv_font_montserrat_14, LV_PART_MAIN | LV_STATE_DEFAULT); + + // ui_rtwSwitch = lv_switch_create(ui_rtwPanel); + // lv_obj_set_width(ui_rtwSwitch, 50); + // lv_obj_set_height(ui_rtwSwitch, 25); + // lv_obj_set_align(ui_rtwSwitch, LV_ALIGN_CENTER); + + lv_obj_add_event_cb(ui_imuScreen, ui_event_appScreen, LV_EVENT_ALL, NULL); + // lv_obj_add_event_cb(ui_rtwSwitch, ui_event_rtwSwitch, LV_EVENT_ALL, NULL); + + callback("QMI8658C", &ui_img_gyro_l_png, &ui_imuScreen); + +#endif +} + +void ui_imu_set_info(bool status, uint8_t id, uint8_t rev) +{ +#ifdef ENABLE_APP_QMI8658C + if (status) + { + lv_label_set_text_fmt(ui_imuInfo, "ID: 0x%02X\nRevision: 0x%02X", id, rev); + } + else + { + lv_label_set_text(ui_imuInfo, "Failed to init IMU"); + lv_obj_add_flag(ui_imuPanel, LV_OBJ_FLAG_HIDDEN); + } + +#endif +} + +void ui_imu_update_acc(float x, float y, float z) +{ +#ifdef ENABLE_APP_QMI8658C + lv_label_set_text_fmt(ui_accXText, "X: %.3f", x); + lv_label_set_text_fmt(ui_accYText, "Y: %.3f", y); + lv_label_set_text_fmt(ui_accZText, "Z: %.3f", z); + + lv_bar_set_value(ui_accXBar, lv_map((x * 100), -100, 100, 0, 100), LV_ANIM_OFF); + lv_bar_set_value(ui_accYBar, lv_map((y * 100), -100, 100, 0, 100), LV_ANIM_OFF); + lv_bar_set_value(ui_accZBar, lv_map((z * 100), -100, 100, 0, 100), LV_ANIM_OFF); +#endif +} + +void ui_imu_update_gyro(float x, float y, float z) +{ +#ifdef ENABLE_APP_QMI8658C + lv_label_set_text_fmt(ui_gyroXText, "X: %.3f", x); + lv_label_set_text_fmt(ui_gyroYText, "Y: %.3f", y); + lv_label_set_text_fmt(ui_gyroZText, "Z: %.3f", z); + + // lv_bar_set_value(ui_gyroXBar, lv_map((x * 100), -100, 100, 0, 100), LV_ANIM_OFF); + // lv_bar_set_value(ui_gyroYBar, lv_map((y * 100), -100, 100, 0, 100), LV_ANIM_OFF); + // lv_bar_set_value(ui_gyroZBar, lv_map((z * 100), -100, 100, 0, 100), LV_ANIM_OFF); +#endif +} + +void ui_imu_update_temp(float t) +{ +#ifdef ENABLE_APP_QMI8658C + lv_label_set_text_fmt(ui_tempLabel, "Temp: %.2f°C", t); +#endif +} \ No newline at end of file diff --git a/src/apps/qmi8658c/qmi8658c.h b/src/apps/qmi8658c/qmi8658c.h new file mode 100644 index 0000000..59b73e1 --- /dev/null +++ b/src/apps/qmi8658c/qmi8658c.h @@ -0,0 +1,56 @@ + + +#ifndef _QMI8658C_APP_H +#define _QMI8658C_APP_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "lvgl.h" +#include "app_hal.h" + +#ifdef ENABLE_APP_QMI8658C + // extern lv_obj_t *ui_imuScreen; + // extern lv_obj_t *ui_imuPanel; + // extern lv_obj_t *ui_imuTitle; + // extern lv_obj_t *ui_accTitle; + // extern lv_obj_t *ui_accXText; + // extern lv_obj_t *ui_accXBar; + // extern lv_obj_t *ui_accYText; + // extern lv_obj_t *ui_accYBar; + // extern lv_obj_t *ui_accZText; + // extern lv_obj_t *ui_accZBar; + // extern lv_obj_t *ui_gyroTitle; + // extern lv_obj_t *ui_gyroXText; + // extern lv_obj_t *ui_gyroXBar; + // extern lv_obj_t *ui_gyroYText; + // extern lv_obj_t *ui_gyroYBar; + // extern lv_obj_t *ui_gyroZText; + // extern lv_obj_t *ui_gyroZBar; + // extern lv_obj_t *ui_tempLabel; + // extern lv_obj_t *ui_rtwPanel; + // extern lv_obj_t *ui_rtwText; + // extern lv_obj_t *ui_rtwSwitch; + + extern bool qmi8658c_active; + + LV_IMG_DECLARE(ui_img_gyro_l_png); // assets/gyro_l.png + +#endif + + void ui_imuScreen_screen_init(void (*callback)(const char *, const lv_img_dsc_t *, lv_obj_t **)); + void ui_imu_set_info(bool status, uint8_t id, uint8_t rev); + void ui_imu_update_acc(float x, float y, float z); + void ui_imu_update_gyro(float x, float y, float z); + void ui_imu_update_temp(float t); + + void ui_gameExit(void); + void onRTWState(bool state); + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif \ No newline at end of file diff --git a/src/ui/custom_face.c b/src/ui/custom_face.c index 3cf7aa4..af534f6 100644 --- a/src/ui/custom_face.c +++ b/src/ui/custom_face.c @@ -1,5 +1,6 @@ #include "custom_face.h" +#ifdef ENABLE_CUSTOM_FACE // Global instances lvs_obj2 c_hour; // 2 [10] // digital lvs_obj2 c_minute; // 2 [10] @@ -39,6 +40,8 @@ int b_month; int b_year; int b_weekday; +#endif + // Function to delete an object and set its pointer to NULL void delete_lvc(lv_obj_t **obj_ptr) { @@ -52,6 +55,7 @@ void delete_lvc(lv_obj_t **obj_ptr) // Function to invalidate and delete all objects void invalidate_all(void) { +#ifdef ENABLE_CUSTOM_FACE // Digital delete_lvc(&c_hour.obj0.element); delete_lvc(&c_hour.obj1.element); @@ -129,6 +133,7 @@ void invalidate_all(void) b_month = -1; b_year = -1; b_weekday = -1; +#endif } bool is_obj_valid(lv_obj_t *obj) @@ -138,215 +143,257 @@ bool is_obj_valid(lv_obj_t *obj) void add_item(lv_obj_t *root, int id, int x, int y, int pvX, int pvY, const char *image, const char *group[], int group_size) { - if (id == 0){ - if (!is_obj_valid(c_hour.obj0.element)){ +#ifdef ENABLE_CUSTOM_FACE + if (id == 0) + { + if (!is_obj_valid(c_hour.obj0.element)) + { c_hour.obj0.element = lv_img_create(root); lv_img_set_src(c_hour.obj0.element, image); lv_obj_set_width(c_hour.obj0.element, LV_SIZE_CONTENT); lv_obj_set_height(c_hour.obj0.element, LV_SIZE_CONTENT); lv_obj_set_x(c_hour.obj0.element, x); lv_obj_set_y(c_hour.obj0.element, y); - lv_obj_add_flag(c_hour.obj0.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_hour.obj0.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_hour.obj0.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_hour.obj0.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_hour.obj0.path[i] = strdup(group[i]); } - - } else if (!is_obj_valid(c_hour.obj1.element)){ + } + else if (!is_obj_valid(c_hour.obj1.element)) + { c_hour.obj1.element = lv_img_create(root); lv_img_set_src(c_hour.obj1.element, image); lv_obj_set_width(c_hour.obj1.element, LV_SIZE_CONTENT); lv_obj_set_height(c_hour.obj1.element, LV_SIZE_CONTENT); lv_obj_set_x(c_hour.obj1.element, x); lv_obj_set_y(c_hour.obj1.element, y); - lv_obj_add_flag(c_hour.obj1.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_hour.obj1.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_hour.obj1.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_hour.obj1.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_hour.obj1.path[i] = strdup(group[i]); } } - } else if (id == 1){ - if (!is_obj_valid(c_minute.obj0.element)){ + } + else if (id == 1) + { + if (!is_obj_valid(c_minute.obj0.element)) + { c_minute.obj0.element = lv_img_create(root); lv_img_set_src(c_minute.obj0.element, image); lv_obj_set_width(c_minute.obj0.element, LV_SIZE_CONTENT); lv_obj_set_height(c_minute.obj0.element, LV_SIZE_CONTENT); lv_obj_set_x(c_minute.obj0.element, x); lv_obj_set_y(c_minute.obj0.element, y); - lv_obj_add_flag(c_minute.obj0.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_minute.obj0.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_minute.obj0.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_minute.obj0.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_minute.obj0.path[i] = strdup(group[i]); } - - } else if (!is_obj_valid(c_minute.obj1.element)){ + } + else if (!is_obj_valid(c_minute.obj1.element)) + { c_minute.obj1.element = lv_img_create(root); lv_img_set_src(c_minute.obj1.element, image); lv_obj_set_width(c_minute.obj1.element, LV_SIZE_CONTENT); lv_obj_set_height(c_minute.obj1.element, LV_SIZE_CONTENT); lv_obj_set_x(c_minute.obj1.element, x); lv_obj_set_y(c_minute.obj1.element, y); - lv_obj_add_flag(c_minute.obj1.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_minute.obj1.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_minute.obj1.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_minute.obj1.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_minute.obj1.path[i] = strdup(group[i]); } } - } else if (id == 2){ - if (!is_obj_valid(c_date.obj0.element)){ + } + else if (id == 2) + { + if (!is_obj_valid(c_date.obj0.element)) + { c_date.obj0.element = lv_img_create(root); lv_img_set_src(c_date.obj0.element, image); lv_obj_set_width(c_date.obj0.element, LV_SIZE_CONTENT); lv_obj_set_height(c_date.obj0.element, LV_SIZE_CONTENT); lv_obj_set_x(c_date.obj0.element, x); lv_obj_set_y(c_date.obj0.element, y); - lv_obj_add_flag(c_date.obj0.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_date.obj0.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_date.obj0.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_date.obj0.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_date.obj0.path[i] = strdup(group[i]); } - - } else if (!is_obj_valid(c_date.obj1.element)){ + } + else if (!is_obj_valid(c_date.obj1.element)) + { c_date.obj1.element = lv_img_create(root); lv_img_set_src(c_date.obj1.element, image); lv_obj_set_width(c_date.obj1.element, LV_SIZE_CONTENT); lv_obj_set_height(c_date.obj1.element, LV_SIZE_CONTENT); lv_obj_set_x(c_date.obj1.element, x); lv_obj_set_y(c_date.obj1.element, y); - lv_obj_add_flag(c_date.obj1.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_date.obj1.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_date.obj1.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_date.obj1.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_date.obj1.path[i] = strdup(group[i]); } } - } else if (id == 3){ - if (group_size == 12){ - if (!is_obj_valid(c_month.obj0.element)){ + } + else if (id == 3) + { + if (group_size == 12) + { + if (!is_obj_valid(c_month.obj0.element)) + { c_month.obj0.element = lv_img_create(root); lv_img_set_src(c_month.obj0.element, image); lv_obj_set_width(c_month.obj0.element, LV_SIZE_CONTENT); lv_obj_set_height(c_month.obj0.element, LV_SIZE_CONTENT); lv_obj_set_x(c_month.obj0.element, x); lv_obj_set_y(c_month.obj0.element, y); - lv_obj_add_flag(c_month.obj0.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_month.obj0.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_month.obj0.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_month.obj0.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_month.obj0.path[i] = strdup(group[i]); } - - } - } else { - if (!is_obj_valid(c_month_digit.obj0.element)){ + } + } + else + { + if (!is_obj_valid(c_month_digit.obj0.element)) + { c_month_digit.obj0.element = lv_img_create(root); lv_img_set_src(c_month_digit.obj0.element, image); lv_obj_set_width(c_month_digit.obj0.element, LV_SIZE_CONTENT); lv_obj_set_height(c_month_digit.obj0.element, LV_SIZE_CONTENT); lv_obj_set_x(c_month_digit.obj0.element, x); lv_obj_set_y(c_month_digit.obj0.element, y); - lv_obj_add_flag(c_month_digit.obj0.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_month_digit.obj0.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_month_digit.obj0.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_month_digit.obj0.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_month_digit.obj0.path[i] = strdup(group[i]); } - - } else if (!is_obj_valid(c_month_digit.obj1.element)){ + } + else if (!is_obj_valid(c_month_digit.obj1.element)) + { c_month_digit.obj1.element = lv_img_create(root); lv_img_set_src(c_month_digit.obj1.element, image); lv_obj_set_width(c_month_digit.obj1.element, LV_SIZE_CONTENT); lv_obj_set_height(c_month_digit.obj1.element, LV_SIZE_CONTENT); lv_obj_set_x(c_month_digit.obj1.element, x); lv_obj_set_y(c_month_digit.obj1.element, y); - lv_obj_add_flag(c_month_digit.obj1.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_month_digit.obj1.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_month_digit.obj1.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_month_digit.obj1.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_month_digit.obj1.path[i] = strdup(group[i]); } } } - } else if (id == 6){ - if (!is_obj_valid(c_weekday.obj0.element)){ + } + else if (id == 6) + { + if (!is_obj_valid(c_weekday.obj0.element)) + { c_weekday.obj0.element = lv_img_create(root); lv_img_set_src(c_weekday.obj0.element, image); lv_obj_set_width(c_weekday.obj0.element, LV_SIZE_CONTENT); lv_obj_set_height(c_weekday.obj0.element, LV_SIZE_CONTENT); lv_obj_set_x(c_weekday.obj0.element, x); lv_obj_set_y(c_weekday.obj0.element, y); - lv_obj_add_flag(c_weekday.obj0.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_weekday.obj0.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_weekday.obj0.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_weekday.obj0.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_weekday.obj0.path[i] = strdup(group[i]); } - } - } else if (id == 7){ - if (!is_obj_valid(c_year.obj0.element)){ + } + else if (id == 7) + { + if (!is_obj_valid(c_year.obj0.element)) + { c_year.obj0.element = lv_img_create(root); lv_img_set_src(c_year.obj0.element, image); lv_obj_set_width(c_year.obj0.element, LV_SIZE_CONTENT); lv_obj_set_height(c_year.obj0.element, LV_SIZE_CONTENT); lv_obj_set_x(c_year.obj0.element, x); lv_obj_set_y(c_year.obj0.element, y); - lv_obj_add_flag(c_year.obj0.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_year.obj0.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_year.obj0.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_year.obj0.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_year.obj0.path[i] = strdup(group[i]); } - - } else if (!is_obj_valid(c_year.obj1.element)){ + } + else if (!is_obj_valid(c_year.obj1.element)) + { c_year.obj1.element = lv_img_create(root); lv_img_set_src(c_year.obj1.element, image); lv_obj_set_width(c_year.obj1.element, LV_SIZE_CONTENT); lv_obj_set_height(c_year.obj1.element, LV_SIZE_CONTENT); lv_obj_set_x(c_year.obj1.element, x); lv_obj_set_y(c_year.obj1.element, y); - lv_obj_add_flag(c_year.obj1.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_year.obj1.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_year.obj1.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_year.obj1.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_year.obj1.path[i] = strdup(group[i]); } - - } else if (!is_obj_valid(c_year.obj2.element)){ + } + else if (!is_obj_valid(c_year.obj2.element)) + { c_year.obj2.element = lv_img_create(root); lv_img_set_src(c_year.obj2.element, image); lv_obj_set_width(c_year.obj2.element, LV_SIZE_CONTENT); lv_obj_set_height(c_year.obj2.element, LV_SIZE_CONTENT); lv_obj_set_x(c_year.obj2.element, x); lv_obj_set_y(c_year.obj2.element, y); - lv_obj_add_flag(c_year.obj2.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_year.obj2.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_year.obj2.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_year.obj2.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_year.obj2.path[i] = strdup(group[i]); } - - } else if (!is_obj_valid(c_year.obj3.element)){ + } + else if (!is_obj_valid(c_year.obj3.element)) + { c_year.obj3.element = lv_img_create(root); lv_img_set_src(c_year.obj3.element, image); lv_obj_set_width(c_year.obj3.element, LV_SIZE_CONTENT); lv_obj_set_height(c_year.obj3.element, LV_SIZE_CONTENT); lv_obj_set_x(c_year.obj3.element, x); lv_obj_set_y(c_year.obj3.element, y); - lv_obj_add_flag(c_year.obj3.element, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(c_year.obj3.element, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(c_year.obj3.element, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(c_year.obj3.element, LV_OBJ_FLAG_SCROLLABLE); - for (int i = 0; i < group_size && i < 20; i++) { + for (int i = 0; i < group_size && i < 20; i++) + { c_year.obj3.path[i] = strdup(group[i]); } - } - } else if (id == 13){ + } + else if (id == 13) + { // analog hands // if (!is_obj_valid(c_hourA.obj0.element)){ // c_hourA.obj0.element = lv_img_create(root); @@ -392,16 +439,19 @@ void add_item(lv_obj_t *root, int id, int x, int y, int pvX, int pvY, const char // c_secondA.obj0.path[i] = strdup(group[i]); // } // } - } else { + } + else + { lv_obj_t *elem = lv_img_create(root); lv_img_set_src(elem, image); lv_obj_set_width(elem, LV_SIZE_CONTENT); lv_obj_set_height(elem, LV_SIZE_CONTENT); lv_obj_set_x(elem, x); lv_obj_set_y(elem, y); - lv_obj_add_flag(elem, LV_OBJ_FLAG_ADV_HITTEST ); - lv_obj_clear_flag(elem, LV_OBJ_FLAG_SCROLLABLE ); + lv_obj_add_flag(elem, LV_OBJ_FLAG_ADV_HITTEST); + lv_obj_clear_flag(elem, LV_OBJ_FLAG_SCROLLABLE); } +#endif } void set_obj_src(lv_obj_t *obj, const char *path) @@ -440,6 +490,7 @@ void init_face_custom(void (*callback)(const char *, const lv_img_dsc_t *, lv_ob } void update_time_custom(int second, int minute, int hour, bool mode, bool am, int day, int month, int year, int weekday) { +#ifdef ENABLE_CUSTOM_FACE if (b_second != second) { set_obj_src(c_second.obj0.element, c_second.obj0.path[(second / 1) % 10]); @@ -492,6 +543,8 @@ void update_time_custom(int second, int minute, int hour, bool mode, bool am, in set_obj_src(c_weekday.obj0.element, c_weekday.obj0.path[((weekday + 6) / 1) % 7]); b_weekday = weekday; } + +#endif } void update_weather_custom(int temp, int icon) { diff --git a/src/ui/custom_face.h b/src/ui/custom_face.h index 8b377e3..8d97e35 100644 --- a/src/ui/custom_face.h +++ b/src/ui/custom_face.h @@ -45,6 +45,8 @@ typedef struct { lvs_elem obj4; } lvs_obj5; +#ifdef ENABLE_CUSTOM_FACE + // Global instances extern lvs_obj2 c_hour; // 2 [10] // digital extern lvs_obj2 c_minute; // 2 [10] @@ -77,6 +79,8 @@ extern lvs_obj3 c_sp02; // 3 [10] LV_IMG_DECLARE(ui_img_custom_preview_png); // assets/custom_preview.png +#endif + // Function declarations void delete_lvc(lv_obj_t **obj_ptr); void invalidate_all(void); diff --git a/src/ui/ui.c b/src/ui/ui.c index 65ac9fd..6246620 100644 --- a/src/ui/ui.c +++ b/src/ui/ui.c @@ -1487,6 +1487,7 @@ void addNotificationList(int appId, const char *message, int index) void addQrList(uint8_t id, const char *link) { +#if LV_USE_QRCODE == 1 ui_qrItem = lv_obj_create(ui_qrPanel); lv_obj_set_width(ui_qrItem, 200); lv_obj_set_height(ui_qrItem, 240); @@ -1524,6 +1525,7 @@ void addQrList(uint8_t id, const char *link) lv_obj_set_align(ui_qrLabel, LV_ALIGN_CENTER); lv_label_set_text(ui_qrLabel, qrNames[getQRIndex(id)]); lv_obj_set_style_text_font(ui_qrLabel, &lv_font_montserrat_14, LV_PART_MAIN | LV_STATE_DEFAULT); +#endif } void addAppInfo(const void *src, const char *txt) @@ -2103,7 +2105,7 @@ void ui_appListScreen_screen_init(void) #ifdef USE_SDL add_appList("Files", 8, &ui_img_file_manager_png); #endif - add_appList("Games", 7, &ui_img_game_icon_png); + add_appList("Apps", 7, &ui_img_game_icon_png); add_appList("Watchfaces", 5, &ui_img_smartwatch_png); add_appList("QR Codes", 4, &ui_img_qr_icon_png); add_appList("Find Phone", 6, &ui_img_search_png); @@ -3057,6 +3059,8 @@ void ui_qrScreen_screen_init(void) lv_obj_set_style_pad_top(ui_qrPanel, 0, LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_pad_bottom(ui_qrPanel, 0, LV_PART_MAIN | LV_STATE_DEFAULT); +#ifdef LV_USE_QRCODE + addQrList(0, "https://chronos.ke/"); addQrList(1, "https://www.youtube.com/c/fbiego"); addQrList(2, "https://play.google.com/store/apps/details?id=com.fbiego.chronos"); @@ -3067,6 +3071,15 @@ void ui_qrScreen_screen_init(void) addQrList(7, "https://ko-fi.com/fbiego"); addQrList(8, "https://www.paypal.com/paypalme/biego"); +#else + lv_obj_t *info = lv_label_create(ui_qrPanel); + lv_obj_set_width(info, 180); + lv_obj_set_height(info, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(info, LV_ALIGN_CENTER); + lv_label_set_text(info, "QR feature has been disabled. (LV_USE_QRCODE) definition not found"); + +#endif + lv_obj_add_event_cb(ui_qrScreen, ui_event_qrScreen, LV_EVENT_ALL, NULL); } @@ -3242,6 +3255,7 @@ void ui_games_init(void) { numGames = 0; ui_raceScreen_screen_init(registerGame_cb); + ui_imuScreen_screen_init(registerGame_cb); if (numGames == 0) { @@ -3249,10 +3263,11 @@ void ui_games_init(void) lv_obj_set_width(info, 180); lv_obj_set_height(info, LV_SIZE_CONTENT); /// 1 lv_obj_set_align(info, LV_ALIGN_CENTER); - lv_label_set_text(info, "No games available currently. Check whether it was enabled in the code"); + lv_label_set_text(info, "No apps or games available currently. Check whether it was enabled in the code"); } } + void ui_games_update(void) { ui_raceScreen_screen_loop(); diff --git a/src/ui/ui.h b/src/ui/ui.h index b0d66f8..9e887bc 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -19,6 +19,7 @@ extern "C" #include "ui_events.h" #include "games/racing/racing.h" +#include "apps/qmi8658c/qmi8658c.h" void pulseCall_Animation(lv_obj_t *TargetObject, int delay); void ui_event_clockScreen(lv_event_t *e);