diff --git a/CLAUDE.md b/CLAUDE.md index 5034d2d..536bb0a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,20 +10,19 @@ This file is for future Claude Code sessions to bootstrap quickly. Read this fir - Touch: **CST9220** via I2C (SDA=15, SCL=14, INT=11, addr=0x5A) - PMU: **AXP2101** on same I2C bus (addr=0x34) — battery, USB VBUS, PWR button IRQ - IMU: **QMI8658** on same I2C bus (addr=0x6B) — accelerometer for auto-rotation -- Buttons: GPIO 0 (left/back), GPIO 18 (right/forward), AXP PKEY (middle/PWR) +- Buttons: GPIO 0 (left → Space/voice-mode), GPIO 18 (right → Shift+Tab/mode-toggle), AXP PKEY (middle → cycle screens; on splash → cycle animations) ## Architecture ``` -main.cpp — setup(), loop(), button polling, rotation flash, USB-state screen switching +main.cpp — setup(), loop(), button polling (left→Space, right→Shift+Tab, mid→cycle), rotation flash display_cfg.h — pin defines, extern object decls -ui.{h,cpp} — 4-screen UI (splash, usage, controller, bluetooth), screen cycling +ui.{h,cpp} — 3-screen UI (splash, usage, bluetooth); splash is touch-toggled, usage↔bluetooth via mid button splash.{h,cpp} — 20×20 pixel-art animation engine, 24× upscale to 480×480 imu.{h,cpp} — accelerometer-driven rotation tracker (returns 0..3) power.{h,cpp} — AXP2101 wrapper (battery %, charging, VBUS, PWR button) -touch.{h,cpp} — gesture state machine (zone taps, swipes, holds) on controller screen +touch.{h,cpp} — minimal tap detector → ui_toggle_splash() (Usage/Splash) or ble_clear_bonds() (BT reset zone) ble.{h,cpp} — NimBLE peripheral: custom data service + HID keyboard -hid.{h,cpp} — gesture → HID keycode mapping data.h — UsageData struct icons.h — icon arrays. Battery (5×) are RGB565A8 with alpha; rest are raw RGB565. logo.h — 80×80 RGB565 logo @@ -54,7 +53,7 @@ The boot screen is `SCREEN_SPLASH` and only advances on a physical button press, 2. **OPI PSRAM** required: `board_build.arduino.memory_type = qio_opi` in platformio.ini. Without this, `MALLOC_CAP_SPIRAM` returns NULL and the screen is black. 3. **pioarduino platform required.** GFX Library for Arduino needs Arduino Core 3.x (`esp32-hal-periman.h`), not the 2.x that standard `espressif32` ships. We pin `pioarduino/platform-espressif32` 55.03.38-1. 4. **LVGL 9 font patching.** `lv_font_conv` outputs LVGL 8 format. Must remove `#if LVGL_VERSION_MAJOR >= 8` guards, drop `.cache` field, add `.release_glyph`, `.kerning`, `.static_bitmap`, `.fallback`, `.user_data`. Without patching, fonts render invisible. -5. **Touch reading must be centralized.** CST9220's `getPoint()` does a full I2C transaction. Calling it from both LVGL `my_touch_cb` and `touch.cpp:get_touch()` consumed each other's data, causing key-spam and broken swipes. Now `touch_read()` is called once per loop in main.cpp; both LVGL and gesture engine read from `touch_pressed/touch_x/touch_y` shared state. +5. **Touch reading must be centralized.** CST9220's `getPoint()` does a full I2C transaction. Calling it from multiple places consumed each other's data and broke input. `touch_read()` is called once per loop in main.cpp; both LVGL `my_touch_cb` and `touch.cpp` read from shared `touch_pressed/touch_x/touch_y` state. 6. **CO5300 needs even-aligned flush regions.** `rounder_cb` enforces this. 7. **Touch `setSwapXY(true)` and `setMirrorXY(true, false)`** are the empirically-correct values for default rotation 0. IMU rotation logic doesn't change touch mapping (it does CPU-side rotation of the rendered pixels, so LVGL still thinks the display is portrait at 0°). 8. **LVGL RGB565A8 is planar.** `w*h` RGB565 pixels followed by `w*h` alpha bytes; `data_size = w*h*3`, `stride = w*2`. Use `init_icon_dsc_rgb565a8()` for icons that overlap non-uniform backgrounds (e.g. battery over splash). Lucide source PNGs are black-on-transparent — converter must tint to white or icons render invisible. See `tools/png_to_lvgl.js`. diff --git a/README.md b/README.md index 5b9e3b9..88b030e 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,10 @@ splash screen of pixel-art creatures. - **Splash screen** — 13 looping 20×20 pixel-art creature animations scaled 24× to fill the display. Default boot screen. - **Usage dashboard** — Live 5-hour session and 7-day weekly utilization bars with color-coded thresholds -- **Touch controller** — Gesture-based Claude Code navigation (swipe, tap, hold) sent as BLE HID keyboard input +- **Physical button shortcuts** — Left button → Space (voice mode), right button → Shift+Tab (mode toggle); both sent over BLE HID - **Bluetooth screen** — Connection status, device name, MAC address, bond management - **Auto-rotation** — QMI8658 accelerometer drives 90° rotation snaps with a quick AMOLED brightness flash transition - **Battery indicator** — Lucide battery icons in the upper-right corner, AXP2101-driven -- **USB-aware screen switching** — Plug in USB → usage screen, unplug → controller screen (suppressed while on splash) - **Wireless** — All data communication over Bluetooth Low Energy (USB only for flashing and charging) ## Hardware @@ -73,52 +72,30 @@ View logs: `journalctl --user -u claude-usage-daemon -f` 3. Extracts usage data from the response headers (`anthropic-ratelimit-unified-5h-utilization`, etc.) 4. Connects to the ESP32 over BLE and writes a JSON payload to the GATT RX characteristic 5. The ESP32 parses it and updates the LVGL dashboard -6. Touch gestures on the Controller screen are sent as BLE HID keyboard input to the host +6. The left/right physical buttons send Space and Shift+Tab as BLE HID keyboard input to the paired host (no host-side daemon involvement) ## Screens -Press the **middle physical button (PWR)** to cycle through screens. The order is: -Splash → Usage → Controller → Bluetooth → Splash. Tapping the Claude logo also cycles screens (legacy gesture, still works on the non-splash screens). +Two persistent screens, **Usage** and **Bluetooth**, are cycled by the **middle physical button (PWR)**. The **splash** is a touch-toggled welcome animation: tap anywhere on the display (outside the Reset zone on the Bluetooth screen) to show it; tap again to dismiss. -| Splash | Usage | Controller | Bluetooth | -| :-----------------------------: | :-----------------------------: | :---------------------------------------: | :-------------------------------------: | -| Pixel-art creature animations | ![Usage](screenshots/usage.png) | ![Controller](screenshots/controller.png) | ![Bluetooth](screenshots/bluetooth.png) | -| Looping 20×20 creature loop | Session and weekly utilization | Touch zones and swipe gestures | Connection status and reset | +| Usage | Bluetooth | Splash | +| :-----------------------------: | :-------------------------------------: | :---------------------------------: | +| ![Usage](screenshots/usage.png) | ![Bluetooth](screenshots/bluetooth.png) | Looping 20×20 pixel-art creatures | +| Session and weekly utilization | Connection status and reset | Boot screen; touch-toggle anytime | -The splash screen is also shown automatically on boot. It overrides the USB-state-based default screen until you press the middle button to navigate elsewhere. +The splash screen is also the default boot screen. ## Physical buttons -The board has three physical buttons in a row. Functions: +The board has three physical buttons in a row. Functions are global (screen-independent) for the left and right buttons; the middle button is screen-aware. -| Button | GPIO | Function | -| ------------------------ | ------------ | ------------------------------------- | -| **Left** (back) | GPIO 0 | Previous splash animation | -| **Middle** (PWR) | AXP2101 PKEY | Cycle screens | -| **Right** (forward) | GPIO 18 | Next splash animation | +| Button | GPIO | Function | +| ------------------- | ------------ | ----------------------------------------------------------------------------- | +| **Left** | GPIO 0 | Hold to send Space (Claude Code voice-mode push-to-talk) | +| **Middle** (PWR) | AXP2101 PKEY | Cycle screens (Usage ↔ Bluetooth); on splash, cycle animations | +| **Right** | GPIO 18 | Press to send Shift+Tab (Claude Code mode toggle) | -The left/right animation buttons only have effect on the splash screen. The middle button works from any screen. - -## Gesture controls - -On the **Controller** screen: - -| Gesture | Action | -| ------------- | ----------------------- | -| Swipe up | Arrow Up | -| Swipe down | Arrow Down | -| Swipe left | Shift+Tab (toggle mode) | -| Swipe right | Enter | -| Hold (center) | Space (voice dictation) | - -Touch zones (tap): - -| Zone | Action | -| ------------ | ----------- | -| Top-left | Escape | -| Bottom-left | Arrow Left | -| Top-right | Delete | -| Bottom-right | Arrow Right | +Space and Shift+Tab are delivered as standard BLE HID keyboard reports — they work in any focused window on the paired host, not just Claude Code. ## BLE protocol diff --git a/firmware/src/hid.cpp b/firmware/src/hid.cpp deleted file mode 100644 index 33b3281..0000000 --- a/firmware/src/hid.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include "hid.h" -#include "ble.h" - -// HID usage codes (same for USB and BLE HID) -#define HID_KEY_ARROW_UP 0x52 -#define HID_KEY_ARROW_DOWN 0x51 -#define HID_KEY_ARROW_LEFT 0x50 -#define HID_KEY_ARROW_RIGHT 0x4F -#define HID_KEY_ENTER 0x28 -#define HID_KEY_ESCAPE 0x29 -#define HID_KEY_BACKSPACE 0x2A -#define HID_KEY_TAB 0x2B -#define HID_KEY_SPACE 0x2C - -// Modifier bits -#define MOD_LEFT_CTRL 0x01 -#define MOD_LEFT_SHIFT 0x02 - -struct gesture_mapping_t { - gesture_t gesture; - uint8_t key; - uint8_t modifier; -}; - -static const gesture_mapping_t mappings[] = { - { GESTURE_SWIPE_UP, HID_KEY_ARROW_UP, 0 }, - { GESTURE_SWIPE_DOWN, HID_KEY_ARROW_DOWN, 0 }, - { GESTURE_SWIPE_LEFT, HID_KEY_TAB, MOD_LEFT_SHIFT }, - { GESTURE_SWIPE_RIGHT, HID_KEY_ENTER, 0 }, - { GESTURE_TAP_ESCAPE, HID_KEY_ESCAPE, 0 }, - { GESTURE_TAP_BACKSPACE, HID_KEY_BACKSPACE, 0 }, - { GESTURE_TAP_CTRL_SPACE, HID_KEY_SPACE, MOD_LEFT_CTRL }, - { GESTURE_TAP_ARROW_LEFT, HID_KEY_ARROW_LEFT, 0 }, - { GESTURE_TAP_ARROW_RIGHT, HID_KEY_ARROW_RIGHT, 0 }, -}; -#define MAPPING_COUNT (sizeof(mappings) / sizeof(mappings[0])) - -void hid_init(void) { - // BLE HID is initialized in ble_init() -} - -void hid_on_gesture(gesture_t gesture) { - if (!ble_is_connected()) return; - - if (gesture == GESTURE_HOLD_START) { - ble_keyboard_press(HID_KEY_SPACE, 0); - return; - } - if (gesture == GESTURE_HOLD_END) { - ble_keyboard_release(); - return; - } - if (gesture == GESTURE_TOGGLE_SCREEN) { - return; - } - - for (int i = 0; i < (int)MAPPING_COUNT; i++) { - if (mappings[i].gesture == gesture) { - ble_keyboard_press(mappings[i].key, mappings[i].modifier); - delay(20); - ble_keyboard_release(); - return; - } - } -} diff --git a/firmware/src/hid.h b/firmware/src/hid.h deleted file mode 100644 index 51c0909..0000000 --- a/firmware/src/hid.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once -#include - -enum gesture_t { - GESTURE_NONE, - GESTURE_SWIPE_UP, - GESTURE_SWIPE_DOWN, - GESTURE_SWIPE_LEFT, - GESTURE_SWIPE_RIGHT, - GESTURE_HOLD_START, - GESTURE_HOLD_END, - GESTURE_TAP_ESCAPE, - GESTURE_TAP_BACKSPACE, - GESTURE_TAP_CTRL_SPACE, - GESTURE_TAP_ARROW_LEFT, - GESTURE_TAP_ARROW_RIGHT, - GESTURE_TOGGLE_SCREEN, -}; - -void hid_init(void); -void hid_on_gesture(gesture_t gesture); diff --git a/firmware/src/icons.h b/firmware/src/icons.h index d9b78e2..33b3612 100644 --- a/firmware/src/icons.h +++ b/firmware/src/icons.h @@ -1,263 +1,6 @@ #pragma once #include -#define ICON_ESCAPE_W 48 -#define ICON_ESCAPE_H 48 -static const uint16_t icon_escape_data[2304] = { - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x2124, 0x31A6, 0x5289, 0x5ACA, 0x5289, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4207, 0x3185, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x3185, 0x4228, 0x4A48, 0x4A48, 0x4228, 0x39E7, 0x31A6, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x31A6, 0x5AEA, 0x9470, 0x9CB1, 0x9491, 0x8C30, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x738D, 0x5289, 0x2944, 0x18E3, 0x2103, 0x2124, 0x4A69, 0x73AE, 0x83EF, 0x7BEE, 0x73AE, 0x6B6C, 0x5AEB, 0x4A48, 0x39C7, 0x3185, 0x2945, 0x2124, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x5289, 0x9470, 0xA533, 0xAD54, 0xAD33, 0xAD33, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0x9CF2, 0x840F, 0x3186, 0x18E3, 0x2124, 0x39C6, 0x738D, 0xA513, 0xA513, 0xA513, 0xA513, 0xA513, 0x9CF2, 0x9CD2, 0x9470, 0x7BAE, 0x5ACA, 0x39C6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x5AAA, 0x9CB1, 0xAD54, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xAD74, 0xAD74, 0xA4F2, 0x7BEE, 0x3186, 0x18E3, 0x2104, 0x31A6, 0x6B6D, 0xA533, 0xAD54, 0xB574, 0xB574, 0xB574, 0xB574, 0xAD74, 0xAD54, 0x9CD2, 0x8C50, 0x73AD, 0x5ACA, 0x4207, 0x2944, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x5289, 0x9491, 0xAD33, 0xB574, 0xB574, 0xB574, 0xAD74, 0xAD54, 0xA513, 0x9CD2, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x94B1, 0x83EF, 0x5AEA, 0x2945, 0x18E3, 0x2103, 0x2124, 0x52AA, 0x8C30, 0x9491, 0x9CD2, 0x9CD2, 0x9CF2, 0xA4F2, 0xA533, 0xAD54, 0xAD74, 0xAD74, 0xAD54, 0x9491, 0x736D, 0x4228, 0x2965, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x4A69, 0x8C30, 0xAD33, 0xB574, 0xB574, 0xB574, 0xAD74, 0xA513, 0x738D, 0x5269, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x3186, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x2103, 0x2945, 0x31A6, 0x39C6, 0x4207, 0x4A48, 0x52AA, 0x6B4C, 0x7BEE, 0x9CD2, 0xAD33, 0xAD74, 0xAD74, 0xAD53, 0xA4F2, 0x8C50, 0x5AEB, 0x3185, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x4A69, 0x842F, 0xA533, 0xB574, 0xAD74, 0xAD74, 0xAD74, 0xAD33, 0x8C50, 0x62EB, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2124, 0x2944, 0x3186, 0x39E7, 0x4A48, 0x5ACA, 0x738D, 0x8C2F, 0xA4F2, 0xAD54, 0xAD74, 0xA533, 0x8C50, 0x632C, 0x39C7, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x4A69, 0x842F, 0xA533, 0xB574, 0xAD54, 0xA513, 0xA533, 0xAD74, 0xAD74, 0x8C50, 0x5AEB, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x31A6, 0x5289, 0x83EF, 0x9CB1, 0xAD33, 0xAD74, 0xAD54, 0x9CD2, 0x630B, 0x39C6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x4A69, 0x842F, 0xA533, 0xB574, 0xA513, 0x738D, 0x8C30, 0xAD74, 0xAD74, 0xAD33, 0x9491, 0x5AEB, 0x39A6, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2945, 0x31A6, 0x630B, 0x8C70, 0xAD33, 0xAD74, 0xAD54, 0x9CD2, 0x632C, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x4A69, 0x842F, 0xA533, 0xB574, 0x9CD2, 0x4A69, 0x5AEB, 0x8C50, 0xA533, 0xAD74, 0xAD33, 0x8C50, 0x62EB, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x39C6, 0x5ACA, 0x840F, 0xA4F2, 0xAD74, 0xAD54, 0x8C50, 0x5AEB, 0x2965, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x4A69, 0x842F, 0xA533, 0xB574, 0x9CB1, 0x31A6, 0x31A6, 0x5ACA, 0x9491, 0xA533, 0xAD74, 0xAD74, 0x8C50, 0x5AEB, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x52AA, 0x840F, 0xAD33, 0xAD74, 0xA533, 0x8C50, 0x4228, 0x2944, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x4A69, 0x842F, 0xA533, 0xB574, 0x9CB1, 0x31A6, 0x2104, 0x3186, 0x5ACA, 0x8C30, 0xAD74, 0xAD74, 0xAD33, 0x9491, 0x5AEB, 0x39A6, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2945, 0x5ACA, 0x8C50, 0xAD33, 0xAD54, 0xA4F2, 0x738D, 0x4207, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x4A69, 0x842F, 0xA533, 0xB574, 0x9CB1, 0x31A6, 0x18E3, 0x2104, 0x31A6, 0x5AEB, 0x8C50, 0xA533, 0xAD74, 0xAD33, 0x8C50, 0x62EB, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39C6, 0x630B, 0x9CB1, 0xAD54, 0xAD53, 0x9491, 0x5ACA, 0x2124, 0x2103, 0x18E3, 0x18E3, - 0x18E3, 0x4A69, 0x842F, 0xA533, 0xAD74, 0x94B1, 0x31A6, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x5ACA, 0x9491, 0xA533, 0xAD74, 0xAD74, 0x8C50, 0x5AEB, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x39A6, 0x83EF, 0xA4F2, 0xAD74, 0xAD54, 0x738D, 0x31A6, 0x2104, 0x18E3, 0x18E3, - 0x18E3, 0x4A69, 0x842F, 0xA533, 0xAD74, 0x94B1, 0x31A6, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3186, 0x5ACA, 0x8C30, 0xAD74, 0xAD74, 0xAD33, 0x9491, 0x5AEB, 0x39A6, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x52AA, 0x8C30, 0xAD74, 0xAD74, 0x8C50, 0x5ACA, 0x2945, 0x18E3, 0x18E3, - 0x18E3, 0x4207, 0x736D, 0xA4F2, 0xA4F2, 0x83EF, 0x3186, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x5AEB, 0x8C50, 0xA533, 0xAD74, 0xAD33, 0x8C50, 0x62EB, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x736D, 0xAD33, 0xAD74, 0x9CD2, 0x7BAE, 0x3185, 0x18E3, 0x18E3, - 0x18E3, 0x3185, 0x5289, 0x840F, 0x7BEE, 0x5AEA, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x5ACA, 0x9491, 0xA533, 0xAD74, 0xAD74, 0x8C50, 0x5AEB, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x5ACA, 0x9CD2, 0xAD54, 0xAD33, 0x8C70, 0x39C7, 0x2104, 0x18E3, - 0x18E3, 0x2104, 0x2944, 0x3186, 0x3186, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3186, 0x5ACA, 0x8C30, 0xAD74, 0xAD74, 0xAD33, 0x9491, 0x5AEB, 0x31A6, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x4A48, 0x83EF, 0xA513, 0xAD74, 0x9CD2, 0x4A69, 0x2945, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x5AEB, 0x8C50, 0xA533, 0xAD74, 0xAD33, 0x8C50, 0x62EB, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39E7, 0x6B4C, 0xA4F2, 0xB574, 0x9CF2, 0x5AEB, 0x31A6, 0x18E3, - 0x18E3, 0x18E3, 0x2103, 0x2124, 0x2104, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x5ACA, 0x9491, 0xA533, 0xAD74, 0xAD74, 0x8C50, 0x5AEB, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x3185, 0x52AA, 0x9CD2, 0xB574, 0xA513, 0x6B4C, 0x39E7, 0x18E3, - 0x18E3, 0x18E3, 0x2124, 0x39C7, 0x31A6, 0x2124, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3186, 0x5ACA, 0x8C30, 0xAD74, 0xAD74, 0xAD33, 0x9491, 0x5AEB, 0x31A6, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x4A28, 0x9CD2, 0xB574, 0xA513, 0x7BAE, 0x4228, 0x18E3, - 0x18E3, 0x3185, 0x4A69, 0x738D, 0x6B6D, 0x52AA, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x5AEB, 0x8C50, 0xA533, 0xAD74, 0xAD33, 0x8C50, 0x5AAA, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x4207, 0x9CB1, 0xB574, 0xA513, 0x7BEE, 0x4A48, 0x18E3, - 0x18E3, 0x4228, 0x73AD, 0xA513, 0xA533, 0x8C30, 0x31A6, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x5ACA, 0x9491, 0xAD33, 0xAD74, 0xAD74, 0x738D, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x39C7, 0x94B1, 0xB574, 0xA533, 0x840F, 0x4A48, 0x18E3, - 0x18E3, 0x4A48, 0x83EF, 0xA513, 0xAD54, 0x9491, 0x39C6, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3186, 0x5ACA, 0x8C50, 0xAD74, 0xAD74, 0x738D, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x39C6, 0x94B1, 0xB574, 0xA533, 0x840F, 0x4A49, 0x18E3, - 0x18E3, 0x4A48, 0x7BEE, 0xA513, 0xB574, 0x9CD2, 0x4207, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x52AA, 0x738D, 0x738D, 0x5269, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x39E7, 0x9CB1, 0xB574, 0xA513, 0x7BEE, 0x4A48, 0x18E3, - 0x18E3, 0x4228, 0x73AE, 0xA513, 0xB574, 0x9CD2, 0x4A48, 0x2944, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x31A6, 0x31A6, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x4A48, 0x9CD2, 0xB574, 0xA513, 0x73AE, 0x4228, 0x18E3, - 0x18E3, 0x39E7, 0x6B6C, 0xA513, 0xB574, 0x9CF2, 0x52AA, 0x3186, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2104, 0x2104, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x3185, 0x52AA, 0x9CD2, 0xB574, 0xA513, 0x6B6C, 0x39E7, 0x18E3, - 0x18E3, 0x31A6, 0x5AEB, 0x9CF2, 0xB574, 0xA4F2, 0x6B4C, 0x39E7, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39E7, 0x6B2C, 0xA4F2, 0xB574, 0x9CF2, 0x5AEB, 0x31A6, 0x18E3, - 0x18E3, 0x2945, 0x4A48, 0x9CD2, 0xAD74, 0xA513, 0x7BEE, 0x4A48, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x4A48, 0x83EF, 0xA513, 0xAD74, 0x9CD2, 0x4A49, 0x2945, 0x18E3, - 0x18E3, 0x2104, 0x39C7, 0x9470, 0xAD54, 0xAD54, 0x9CD2, 0x5ACA, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x5ACA, 0x9CD2, 0xAD54, 0xAD54, 0x9470, 0x39C6, 0x2104, 0x18E3, - 0x18E3, 0x18E3, 0x3185, 0x73AE, 0x9CD2, 0xAD74, 0xAD33, 0x738D, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x736D, 0xAD33, 0xAD74, 0x9CD2, 0x7BAE, 0x3185, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x2945, 0x5ACA, 0x8C50, 0xAD74, 0xAD74, 0x8C2F, 0x5289, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x52AA, 0x842F, 0xAD74, 0xAD74, 0x8C50, 0x5ACA, 0x2945, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x2124, 0x39C6, 0x738D, 0xAD54, 0xAD74, 0xA4F2, 0x83EF, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x39A6, 0x83EF, 0xA4F2, 0xAD74, 0xAD74, 0x73AD, 0x31A6, 0x2104, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x2103, 0x2124, 0x5ACA, 0x9491, 0xAD53, 0xAD54, 0x9CB1, 0x630B, 0x39C6, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39C6, 0x630B, 0x9CD2, 0xAD54, 0xAD53, 0x9491, 0x5ACA, 0x2124, 0x2103, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x4207, 0x736D, 0xA4F2, 0xAD74, 0xAD33, 0x8C70, 0x5ACA, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2945, 0x5ACA, 0x8C70, 0xAD33, 0xAD74, 0xA4F2, 0x736D, 0x4207, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2944, 0x4228, 0x8C50, 0xA533, 0xAD74, 0xAD33, 0x840F, 0x52AA, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x52AA, 0x840F, 0xAD33, 0xAD74, 0xAD33, 0x8C70, 0x4228, 0x2944, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2965, 0x5AEB, 0x8C50, 0xAD54, 0xAD74, 0xA4F2, 0x840F, 0x5ACA, 0x39C6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x39C6, 0x5ACA, 0x840F, 0xA4F2, 0xAD74, 0xAD54, 0x8C50, 0x5AEB, 0x2965, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3185, 0x632C, 0x9CD2, 0xAD54, 0xAD74, 0xAD33, 0x8C70, 0x630B, 0x39A6, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2945, 0x39A6, 0x630B, 0x8C70, 0xAD33, 0xAD74, 0xAD54, 0x9CD2, 0x632B, 0x3165, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x39C7, 0x630B, 0x9CD2, 0xAD54, 0xAD74, 0xAD33, 0x9CB1, 0x83EF, 0x52AA, 0x31A6, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x31A6, 0x52AA, 0x83EF, 0x9CD2, 0xAD33, 0xAD74, 0xAD54, 0x9CD2, 0x630B, 0x39C7, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x39C6, 0x632C, 0x8C50, 0xA533, 0xAD54, 0xAD54, 0xA4F2, 0x8C30, 0x738D, 0x5ACA, 0x4A48, 0x39E7, 0x3185, 0x2945, 0x2124, 0x2104, 0x2103, 0x2124, 0x2945, 0x3185, 0x39E7, 0x4A48, 0x5ACA, 0x736D, 0x842F, 0xA4F2, 0xAD54, 0xAD74, 0xAD33, 0x8C50, 0x632B, 0x39C7, 0x2924, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3186, 0x5AEB, 0x8C50, 0xA4F2, 0xAD53, 0xAD74, 0xAD74, 0xAD33, 0x9CD2, 0x83EF, 0x6B4C, 0x52AA, 0x4A28, 0x4207, 0x39E7, 0x39C6, 0x39E7, 0x4A48, 0x52AA, 0x6B2C, 0x83EF, 0x9CD2, 0xAD33, 0xAD74, 0xAD74, 0xAD53, 0xA4F2, 0x8C70, 0x5AEB, 0x3165, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x4228, 0x738D, 0x9491, 0xAD54, 0xAD74, 0xAD74, 0xAD54, 0xA513, 0xA4F2, 0x9CD2, 0x9CD2, 0x9CB1, 0x9CB1, 0x94B1, 0x9CB1, 0x9CD2, 0x9CD2, 0xA4F2, 0xA513, 0xAD54, 0xAD74, 0xAD74, 0xAD74, 0x9491, 0x6B6D, 0x4228, 0x2965, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2944, 0x4207, 0x5ACA, 0x738D, 0x8C50, 0x9CD2, 0xAD33, 0xAD74, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xAD74, 0xAD54, 0x9CD2, 0x8C50, 0x73AD, 0x5ACA, 0x4207, 0x2944, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x31A6, 0x5ACA, 0x7BAE, 0x8C70, 0x9CD2, 0x9CF2, 0xA513, 0xA513, 0xA513, 0xA533, 0xA533, 0xA533, 0xA513, 0xA513, 0x9CF2, 0x9CD2, 0x9470, 0x73AE, 0x5ACA, 0x31A6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2104, 0x2945, 0x3185, 0x39C6, 0x4A69, 0x5AEB, 0x6B4C, 0x7BAE, 0x7BEE, 0x83EF, 0x840F, 0x7BEE, 0x73AE, 0x6B6C, 0x5AEB, 0x4A49, 0x39C6, 0x3185, 0x2945, 0x2104, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x31A6, 0x39E7, 0x4228, 0x4A48, 0x4A48, 0x4A49, 0x4A48, 0x4228, 0x39E7, 0x31A6, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, -}; - -#define ICON_DELETE_W 48 -#define ICON_DELETE_H 48 -static const uint16_t icon_delete_data[2304] = { - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x2965, 0x39E7, 0x4A28, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4228, 0x39E7, 0x2965, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2924, 0x39C6, 0x5289, 0x6B6C, 0x7BEE, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x7BCE, 0x6B4C, 0x5289, 0x39C6, 0x2124, 0x2103, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2924, 0x4A69, 0x73AE, 0x9CD2, 0xA4F2, 0xA513, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA533, 0xA513, 0xA4F2, 0x9CD2, 0x738D, 0x4228, 0x2124, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x3186, 0x5289, 0x7BEE, 0x9CD2, 0xAD74, 0xAD74, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xAD74, 0xAD74, 0x9CB1, 0x738D, 0x39C6, 0x2124, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x52AA, 0x842F, 0xA533, 0xAD74, 0xAD54, 0xA513, 0x9CD2, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CB1, 0x9CD2, 0xA513, 0xAD54, 0xAD74, 0x9CD2, 0x5289, 0x2965, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2965, 0x630B, 0x8C50, 0xA533, 0xAD54, 0xAD54, 0x9CF2, 0x6B6C, 0x4A69, 0x39C6, 0x39A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x39A6, 0x39C6, 0x4A69, 0x738D, 0xA513, 0xAD74, 0xA4F2, 0x6B4C, 0x39E7, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x39C7, 0x62EB, 0x8C50, 0xA513, 0xAD74, 0xAD54, 0x9471, 0x6B4C, 0x4207, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2965, 0x4A69, 0x9CD2, 0xB574, 0xA513, 0x7BCE, 0x4228, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x31A6, 0x630B, 0x94B1, 0xAD53, 0xAD74, 0xAD33, 0x9CB1, 0x6B2C, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2104, 0x2104, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2104, 0x2104, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x39A6, 0x738D, 0x9491, 0xAD53, 0xAD74, 0xAD33, 0x9491, 0x5ACA, 0x39C6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x31A6, 0x31A6, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x31A6, 0x31A6, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2124, 0x4228, 0x6B4C, 0x94B1, 0xAD33, 0xAD54, 0xA533, 0x842F, 0x5AEB, 0x31A6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2945, 0x4A69, 0x738D, 0x738D, 0x52AA, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x52AA, 0x738D, 0x738D, 0x4A69, 0x2945, 0x2104, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2924, 0x39E7, 0x736D, 0xA4F2, 0xAD54, 0xAD54, 0xA513, 0x8C50, 0x5ACA, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x738D, 0xAD74, 0xAD74, 0x8C50, 0x5ACA, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x2104, 0x3185, 0x5ACA, 0x8C50, 0xAD74, 0xAD74, 0x738D, 0x31A6, 0x2104, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2944, 0x4207, 0x7BEE, 0x9CD2, 0xAD54, 0xAD74, 0xA513, 0x8C2F, 0x4A69, 0x3165, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x738D, 0xAD74, 0xAD74, 0xA533, 0x9491, 0x5ACA, 0x31A6, 0x18E3, 0x18E3, 0x31A6, 0x5ACA, 0x9471, 0xA533, 0xAD74, 0xAD74, 0x738D, 0x31A6, 0x2104, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x18E3, 0x2104, 0x2965, 0x4A69, 0x7BAE, 0x9CF2, 0xAD54, 0xAD54, 0xA4F2, 0x7BEE, 0x5289, 0x2965, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2945, 0x52AA, 0x8C50, 0xA533, 0xAD74, 0xAD33, 0x8C50, 0x5AEB, 0x39C7, 0x39C6, 0x5AEB, 0x8C30, 0xA533, 0xAD74, 0xAD33, 0x8C50, 0x5ACA, 0x2945, 0x2104, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x2103, 0x2945, 0x4A48, 0x7BEE, 0xAD53, 0xAD74, 0xAD54, 0x9CF2, 0x83EF, 0x4A69, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x5ACA, 0x9491, 0xAD33, 0xAD74, 0xAD74, 0x8C50, 0x632C, 0x632B, 0x8C50, 0xAD74, 0xAD74, 0xAD33, 0x9491, 0x5AEB, 0x31A6, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x2944, 0x4208, 0x842F, 0xA513, 0xAD74, 0xAD74, 0x9CD2, 0x73AD, 0x4207, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3186, 0x5ACA, 0x8C50, 0xAD74, 0xAD74, 0xAD33, 0xA4F2, 0xA4F2, 0xA533, 0xAD74, 0xAD74, 0x8C50, 0x5AEB, 0x3186, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x39C6, 0x630B, 0x9CF2, 0xAD74, 0xAD53, 0x94B1, 0x6B6D, 0x4228, 0x2924, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x5AEB, 0x8C50, 0xA533, 0xAD74, 0xAD74, 0xAD74, 0xAD74, 0xAD33, 0x8C50, 0x630B, 0x31A6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x4228, 0x7BCE, 0xA513, 0xB574, 0xA513, 0x7BCE, 0x4A48, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39C6, 0x630B, 0xA4F2, 0xAD74, 0xB574, 0xB574, 0xAD74, 0xA4F2, 0x6B2C, 0x39E7, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x4228, 0x7BCE, 0xA513, 0xB574, 0xA513, 0x7BCE, 0x4A48, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39C6, 0x630B, 0xA4F2, 0xAD74, 0xB574, 0xB574, 0xAD74, 0xA4F2, 0x6B2C, 0x39E7, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x39C6, 0x630B, 0x9CF2, 0xAD74, 0xAD53, 0x94B1, 0x6B6D, 0x4228, 0x2924, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x5AEB, 0x8C50, 0xA533, 0xAD74, 0xAD74, 0xAD74, 0xAD74, 0xAD33, 0x8C50, 0x630B, 0x31A6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x2944, 0x4207, 0x8C2F, 0xA513, 0xAD74, 0xAD74, 0x9CD2, 0x73AD, 0x4207, 0x2944, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3185, 0x5ACA, 0x8C50, 0xAD74, 0xAD74, 0xAD33, 0xA4F2, 0xA4F2, 0xAD33, 0xAD74, 0xAD74, 0x8C50, 0x5AEB, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x2103, 0x2945, 0x4A49, 0x7BEE, 0xAD53, 0xAD74, 0xAD54, 0x9CF2, 0x7BEF, 0x4A69, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x5ACA, 0x9471, 0xA533, 0xAD74, 0xAD74, 0x8C50, 0x6B2C, 0x632C, 0x8C50, 0xAD74, 0xAD74, 0xAD33, 0x9491, 0x5AEB, 0x31A6, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x18E3, 0x2104, 0x2965, 0x4A69, 0x7BCE, 0x9CF2, 0xAD54, 0xAD54, 0x9CF2, 0x7BCE, 0x5289, 0x2965, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2945, 0x52AA, 0x8C50, 0xA533, 0xAD74, 0xAD33, 0x8C50, 0x5AEB, 0x39C7, 0x39C6, 0x5AEB, 0x8C50, 0xA533, 0xAD74, 0xAD33, 0x8C50, 0x5AAA, 0x2945, 0x2104, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2944, 0x4207, 0x7BEE, 0x9CD2, 0xAD54, 0xAD74, 0xA513, 0x842F, 0x4A48, 0x2965, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x738D, 0xAD74, 0xAD74, 0xAD33, 0x9491, 0x5ACA, 0x31A6, 0x18E3, 0x18E3, 0x31A6, 0x5ACA, 0x9491, 0xAD33, 0xAD74, 0xAD74, 0x738D, 0x31A6, 0x2104, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2944, 0x39E7, 0x736D, 0xA4F2, 0xAD54, 0xAD54, 0xA513, 0x8C50, 0x5ACA, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x738D, 0xAD74, 0xAD74, 0x8C50, 0x5ACA, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x2104, 0x3186, 0x5ACA, 0x8C50, 0xAD74, 0xAD74, 0x738D, 0x31A6, 0x2104, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2124, 0x4228, 0x6B6C, 0x94B1, 0xAD33, 0xAD54, 0xA533, 0x842F, 0x5AEB, 0x31A6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2945, 0x5269, 0x738D, 0x738D, 0x52AA, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x52AA, 0x738D, 0x738D, 0x5269, 0x2945, 0x2104, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x39A6, 0x738D, 0x9491, 0xAD54, 0xAD74, 0xAD33, 0x9491, 0x5ACA, 0x39A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x31A6, 0x31A6, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x31A6, 0x31A6, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x31A6, 0x630B, 0x94B1, 0xAD53, 0xAD74, 0xAD33, 0x94B1, 0x632C, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2104, 0x2104, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2104, 0x2104, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x31A6, 0x94B1, 0xB574, 0xA533, 0x842F, 0x4A69, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x39E7, 0x630B, 0x8C50, 0xA513, 0xAD74, 0xAD54, 0x9470, 0x6B4C, 0x4207, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2965, 0x4A69, 0x9CD2, 0xB574, 0xA513, 0x7BCE, 0x4228, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2965, 0x630B, 0x8C50, 0xA533, 0xAD74, 0xAD54, 0x9CF2, 0x6B4C, 0x4A49, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x31A6, 0x4A69, 0x738D, 0xA513, 0xAD74, 0xA4F2, 0x6B4C, 0x39E7, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x52AA, 0x842F, 0xA533, 0xAD74, 0xAD54, 0xA4F2, 0x9CD2, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x94B1, 0x9CD2, 0xA513, 0xAD54, 0xAD74, 0x9CD2, 0x5289, 0x2965, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x3186, 0x5289, 0x7BEE, 0x9CD2, 0xAD74, 0xAD74, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xAD74, 0xAD74, 0x9CB1, 0x738D, 0x39C6, 0x2124, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2924, 0x4A69, 0x7BAE, 0x9CD2, 0xA513, 0xA513, 0xA533, 0xA533, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xAD33, 0xA533, 0xA533, 0xA513, 0xA4F2, 0x9CD2, 0x738D, 0x4228, 0x2124, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2944, 0x39C6, 0x5289, 0x6B6C, 0x7BEE, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x842F, 0x7BCE, 0x6B4C, 0x5289, 0x39C6, 0x2124, 0x2103, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x2965, 0x39E7, 0x4A48, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A28, 0x39E7, 0x2965, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, -}; - -#define ICON_ARROW_LEFT_W 48 -#define ICON_ARROW_LEFT_H 48 -static const uint16_t icon_arrow_left_data[2304] = { - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x3185, 0x4207, 0x4207, 0x3185, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x5289, 0x73AD, 0x73AD, 0x4A69, 0x2124, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2965, 0x630B, 0x8C50, 0xA513, 0xA513, 0x738D, 0x39C6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x39C6, 0x5AEB, 0x8C50, 0xA513, 0xAD74, 0xAD33, 0x736D, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x5AEB, 0x9470, 0xAD33, 0xAD74, 0xAD33, 0x9491, 0x5ACA, 0x2924, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2965, 0x630B, 0x8C50, 0xAD33, 0xAD74, 0xAD53, 0x94B1, 0x5AAA, 0x31A6, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x39C6, 0x5AEA, 0x8C50, 0xA513, 0xAD74, 0xAD53, 0x8C50, 0x630B, 0x31A6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x5AEA, 0x9470, 0xAD33, 0xAD74, 0xAD33, 0x94B1, 0x630B, 0x2965, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2965, 0x630B, 0x8C50, 0xAD33, 0xAD74, 0xAD53, 0x94B1, 0x5ACA, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x39C6, 0x5AEA, 0x8C50, 0xA513, 0xAD74, 0xAD53, 0x8C50, 0x630B, 0x31A6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x5AEA, 0x9470, 0xAD33, 0xAD74, 0xAD33, 0x94B1, 0x630B, 0x2965, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2965, 0x630B, 0x8C50, 0xAD33, 0xAD74, 0xAD53, 0x94B1, 0x5ACA, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x39C6, 0x5AEA, 0x8C50, 0xA513, 0xAD74, 0xAD53, 0x8C50, 0x630B, 0x31A6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3185, 0x5AEB, 0x9470, 0xAD33, 0xAD74, 0xAD53, 0x9CD2, 0x6B4C, 0x31A6, 0x2945, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3185, 0x6B6C, 0x9491, 0xAD33, 0xAD74, 0xAD54, 0x9CF2, 0x73AD, 0x5ACA, 0x4A48, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4208, 0x39C7, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39C7, 0x630B, 0x9491, 0xA533, 0xB574, 0xB574, 0xAD54, 0xA513, 0x8C50, 0x840F, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEE, 0x738D, 0x4A69, 0x3185, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x52AA, 0x9491, 0xAD33, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xA513, 0x738D, 0x4208, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x52AA, 0x9491, 0xAD33, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xA513, 0x738D, 0x4208, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39C6, 0x630B, 0x9491, 0xA533, 0xB574, 0xB574, 0xAD54, 0xA513, 0x8C50, 0x840F, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEE, 0x738D, 0x4A69, 0x3185, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x3185, 0x6B6C, 0x9491, 0xAD33, 0xAD74, 0xAD54, 0x9CF2, 0x738D, 0x5ACA, 0x4A48, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x39E7, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3185, 0x5AEB, 0x9470, 0xAD33, 0xAD74, 0xAD53, 0x9CD2, 0x6B4C, 0x31A6, 0x2945, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x39C6, 0x5AEB, 0x8C50, 0xA513, 0xAD74, 0xAD53, 0x8C50, 0x630B, 0x31A6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2965, 0x630B, 0x8C50, 0xAD33, 0xAD74, 0xAD53, 0x94B1, 0x5AAA, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x5AEB, 0x9470, 0xAD33, 0xAD74, 0xAD33, 0x9491, 0x630B, 0x2965, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x39C6, 0x5AEB, 0x8C50, 0xA513, 0xAD74, 0xAD53, 0x8C50, 0x630B, 0x31A6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2965, 0x630B, 0x8C50, 0xAD33, 0xAD74, 0xAD53, 0x94B1, 0x5AAA, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x5AEB, 0x9470, 0xAD33, 0xAD74, 0xAD33, 0x9491, 0x630B, 0x2965, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x39C6, 0x5AEB, 0x8C50, 0xA513, 0xAD74, 0xAD53, 0x8C50, 0x630B, 0x31A6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2965, 0x630B, 0x8C50, 0xAD33, 0xAD74, 0xAD53, 0x94B1, 0x52AA, 0x31A6, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x5AEB, 0x9471, 0xAD33, 0xAD74, 0xAD33, 0x9491, 0x5ACA, 0x2124, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x39C6, 0x5AEB, 0x8C50, 0xA513, 0xAD74, 0xAD33, 0x736D, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2965, 0x632B, 0x8C50, 0xA513, 0xA513, 0x738D, 0x39C6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x5289, 0x73AD, 0x73AD, 0x4A69, 0x2124, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x3186, 0x4228, 0x4228, 0x3186, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, -}; - -#define ICON_ARROW_RIGHT_W 48 -#define ICON_ARROW_RIGHT_H 48 -static const uint16_t icon_arrow_right_data[2304] = { - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x3185, 0x4207, 0x4207, 0x3185, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2124, 0x4A69, 0x73AD, 0x73AD, 0x5289, 0x2965, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x39C6, 0x738D, 0xA513, 0xA513, 0x8C50, 0x632B, 0x2965, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x736D, 0xAD33, 0xAD74, 0xA513, 0x8C50, 0x5AEB, 0x39C6, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2124, 0x5ACA, 0x9491, 0xAD33, 0xAD74, 0xAD33, 0x9471, 0x5AEB, 0x2965, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x3186, 0x52AA, 0x9491, 0xAD33, 0xAD74, 0xAD33, 0x8C70, 0x632C, 0x3165, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x3186, 0x5AEB, 0x8C30, 0xAD33, 0xAD74, 0xA513, 0x8C70, 0x5AEB, 0x39C6, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x5AEB, 0x9491, 0xAD33, 0xAD74, 0xAD33, 0x9491, 0x5AEB, 0x3165, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x52AA, 0x9491, 0xAD33, 0xAD74, 0xAD33, 0x8C70, 0x632C, 0x3165, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x3186, 0x5AEB, 0x8C30, 0xAD33, 0xAD74, 0xA513, 0x8C70, 0x5AEB, 0x39C6, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x5AEB, 0x9491, 0xAD33, 0xAD74, 0xAD33, 0x9491, 0x5AEB, 0x3165, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x52AA, 0x9491, 0xAD33, 0xAD74, 0xAD33, 0x8C70, 0x632C, 0x3165, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x3186, 0x5AEB, 0x8C30, 0xAD33, 0xAD74, 0xA513, 0x8C70, 0x5AEB, 0x39C6, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2945, 0x31A6, 0x632C, 0x9CB1, 0xAD33, 0xAD74, 0xAD33, 0x9491, 0x630B, 0x3185, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x39C7, 0x4208, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4A48, 0x5ACA, 0x738D, 0x9CD2, 0xAD54, 0xAD74, 0xAD33, 0x9491, 0x736D, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x3185, 0x4A69, 0x738D, 0x7BEE, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x840F, 0x8C50, 0xA513, 0xAD54, 0xB574, 0xB574, 0xAD33, 0x9491, 0x632B, 0x39C7, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x4207, 0x738D, 0xA513, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xAD33, 0x9491, 0x52AA, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x4207, 0x738D, 0xA513, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xB574, 0xAD33, 0x9491, 0x52AA, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x3185, 0x4A69, 0x738D, 0x7BEE, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x840F, 0x8C50, 0xA513, 0xAD54, 0xB574, 0xB574, 0xAD33, 0x9491, 0x632B, 0x39C7, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x39C7, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4A48, 0x5ACA, 0x738D, 0x9CD2, 0xAD54, 0xAD74, 0xAD33, 0x9491, 0x736D, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2124, 0x2945, 0x31A6, 0x632C, 0x9CB1, 0xAD33, 0xAD74, 0xAD33, 0x9491, 0x630B, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x3186, 0x5AEB, 0x8C30, 0xAD33, 0xAD74, 0xA513, 0x8C70, 0x62EB, 0x39C6, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3186, 0x52AA, 0x9491, 0xAD33, 0xAD74, 0xAD33, 0x8C70, 0x632C, 0x3185, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x5AEB, 0x9491, 0xAD33, 0xAD74, 0xAD33, 0x9491, 0x62EB, 0x3185, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x3186, 0x5AEB, 0x8C30, 0xAD33, 0xAD74, 0xA513, 0x8C70, 0x62EB, 0x39C6, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x3186, 0x52AA, 0x9491, 0xAD33, 0xAD74, 0xAD33, 0x8C70, 0x632C, 0x3185, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x5AEB, 0x9491, 0xAD33, 0xAD74, 0xAD33, 0x9491, 0x62EB, 0x3185, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x3186, 0x5AEB, 0x8C30, 0xAD33, 0xAD74, 0xA513, 0x8C70, 0x62EB, 0x39C6, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x3186, 0x52AA, 0x9491, 0xAD33, 0xAD74, 0xAD33, 0x8C70, 0x632C, 0x3185, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2124, 0x5ACA, 0x9491, 0xAD33, 0xAD74, 0xAD33, 0x9471, 0x5AEB, 0x3165, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x31A6, 0x736D, 0xAD33, 0xAD74, 0xA513, 0x8C70, 0x5AEB, 0x39C6, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x39C6, 0x738D, 0xA513, 0xA513, 0x8C50, 0x632C, 0x2965, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2124, 0x4A69, 0x73AD, 0x73AD, 0x5289, 0x2965, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x3186, 0x4228, 0x4228, 0x3186, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, -}; - -#define ICON_HAND_W 40 -#define ICON_HAND_H 40 -static const uint16_t icon_hand_data[1600] = { - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2945, 0x39E7, 0x4A48, 0x5289, 0x5289, 0x4A48, 0x39E7, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x4207, 0x6B4C, 0x8C50, 0xA4F2, 0xA4F2, 0x8C50, 0x6B4C, 0x39E7, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2924, 0x4228, 0x6B4C, 0x9491, 0xA4F2, 0xAD33, 0xAD33, 0xA4F2, 0x9491, 0x6B4C, 0x4228, 0x2924, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2945, 0x3186, 0x39A6, 0x39A6, 0x4228, 0x6B4C, 0x8C70, 0xAD74, 0xA513, 0x9CD2, 0x9CD2, 0xA513, 0xB574, 0x8C70, 0x6B4C, 0x4228, 0x39A6, 0x39A6, 0x3186, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2965, 0x5289, 0x6B6C, 0x842F, 0x842F, 0x8C50, 0x9CB1, 0xA513, 0xAD74, 0x7BCE, 0x52AA, 0x52AA, 0x7BCE, 0xB574, 0xA513, 0x9CB1, 0x8C50, 0x842F, 0x842F, 0x6B6C, 0x5289, 0x2965, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x3186, 0x4A69, 0x7BCE, 0x9491, 0xA533, 0xA533, 0xAD33, 0xAD54, 0xAD54, 0xAD74, 0x632B, 0x3186, 0x3186, 0x630B, 0xB574, 0xAD54, 0xAD54, 0xAD33, 0xA533, 0xA533, 0x9491, 0x7BCE, 0x4A69, 0x3186, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x4A49, 0x7BCE, 0xA4F2, 0xAD74, 0xAD74, 0xAD74, 0xAD74, 0xAD74, 0xAD74, 0xAD74, 0x5ACA, 0x18E3, 0x18E3, 0x5AAA, 0xB574, 0xAD74, 0xAD74, 0xAD74, 0xAD74, 0xAD74, 0xAD74, 0xA4F2, 0x7BCE, 0x4A69, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x5AEB, 0x9491, 0xAD33, 0x9491, 0x6B6C, 0x6B6C, 0x7BCE, 0xA513, 0xB574, 0xB574, 0x5ACA, 0x18E3, 0x18E3, 0x5AAA, 0xB574, 0xB574, 0xA513, 0x7BCE, 0x6B6C, 0x6B6C, 0x9491, 0xAD33, 0x94B1, 0x840F, 0x6B6D, 0x6B6D, 0x6B2C, 0x52AA, 0x39E7, 0x2104, 0x2103, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x6B6C, 0xA533, 0xAD54, 0x83EF, 0x39C6, 0x39C6, 0x5289, 0x9CB1, 0xB574, 0xB574, 0x5ACA, 0x18E3, 0x18E3, 0x5AAA, 0xB574, 0xB574, 0x9CB1, 0x5289, 0x39C6, 0x39C6, 0x83EF, 0xAD74, 0xAD54, 0xAD33, 0xA533, 0xA533, 0x9CF2, 0x842F, 0x5AEB, 0x3186, 0x2124, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x738D, 0xAD54, 0xAD74, 0x7BAE, 0x2124, 0x2124, 0x4207, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, 0x18E3, 0x5AAA, 0xB574, 0xB574, 0x9491, 0x4207, 0x2124, 0x2124, 0x73AE, 0xAD74, 0xAD74, 0xAD74, 0xAD54, 0xAD54, 0xAD54, 0xA513, 0x8C30, 0x630B, 0x39C6, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, 0x18E3, 0x5AAA, 0xB574, 0xB574, 0x9491, 0x39C7, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x9CD2, 0x840F, 0x840F, 0x8C50, 0xA533, 0x9CF2, 0x840F, 0x4228, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, 0x18E3, 0x5AAA, 0xB574, 0xB574, 0x9491, 0x39C7, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x840F, 0x39E7, 0x39E7, 0x5289, 0x9CB1, 0xAD33, 0xA4F2, 0x5289, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, 0x18E3, 0x5AAA, 0xB574, 0xB574, 0x9491, 0x39C7, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x7BCE, 0x2945, 0x2945, 0x4228, 0x9491, 0xAD54, 0xAD33, 0x52AA, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, 0x18E3, 0x5AAA, 0xB574, 0xB574, 0x9491, 0x39C7, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, 0x18E3, 0x5AAA, 0xB574, 0xB574, 0x9491, 0x39C7, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x39C6, 0x9470, 0xAD54, 0xAD54, 0x5ACA, 0x18E3, 0x18E3, 0x5289, 0xA513, 0xA513, 0x8C2F, 0x39C6, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x39C6, 0x8C70, 0xAD54, 0xAD54, 0x52AA, 0x18E3, 0x18E3, 0x4A48, 0x8C70, 0x8C70, 0x7BAE, 0x31A6, 0x18E3, 0x18E3, 0x738D, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2124, 0x2965, 0x3185, 0x2965, 0x7BCE, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x2965, 0x5AEB, 0x736D, 0x736D, 0x39E7, 0x18E3, 0x18E3, 0x3185, 0x4A48, 0x4A48, 0x4207, 0x2924, 0x18E3, 0x18E3, 0x6B2C, 0x9CD2, 0x9CD2, 0x6B4C, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, - 0x18E3, 0x2103, 0x2104, 0x3185, 0x39E7, 0x5289, 0x5289, 0x5289, 0x8C30, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x2124, 0x39C6, 0x39E7, 0x39E7, 0x2945, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x5289, 0x73AE, 0x73AE, 0x5289, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, - 0x18E3, 0x2124, 0x3185, 0x630B, 0x8C2F, 0x9491, 0x9CB1, 0x9CB1, 0xA533, 0xB574, 0xB574, 0x73AD, 0x18E3, 0x18E3, 0x2103, 0x2124, 0x2124, 0x2124, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x31A6, 0x31A6, 0x2945, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, - 0x18E3, 0x31A6, 0x5ACA, 0x842F, 0xA513, 0xA513, 0xA533, 0xAD33, 0xAD54, 0xB574, 0xB574, 0x73AE, 0x2124, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, - 0x18E3, 0x4A69, 0x9491, 0xA513, 0xAD54, 0x9CD2, 0x9CD2, 0xA4F2, 0xAD33, 0xB574, 0xB574, 0x7BCE, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39C6, 0x9491, 0xB574, 0xB574, 0x5ACA, 0x18E3, - 0x2124, 0x52AA, 0xA513, 0xA533, 0x9CB1, 0x630B, 0x52AA, 0x5ACA, 0x8C50, 0xAD54, 0xAD74, 0x9491, 0x6B2C, 0x39E7, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x39E7, 0x9491, 0xAD54, 0xAD54, 0x52AA, 0x18E3, - 0x2924, 0x5AEB, 0xAD54, 0xAD53, 0x8C70, 0x4208, 0x2945, 0x2944, 0x632C, 0x94B1, 0xA513, 0xA4F2, 0x9470, 0x4A69, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x4228, 0x9491, 0xAD54, 0xA513, 0x52AA, 0x18E3, - 0x2104, 0x5ACA, 0xAD33, 0xAD54, 0x9CB1, 0x52AA, 0x31A6, 0x2104, 0x31A6, 0x52AA, 0x842F, 0x9491, 0x8C70, 0x4A48, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2965, 0x4A69, 0x94B1, 0xA533, 0x9CD2, 0x5289, 0x18E3, - 0x2103, 0x4A48, 0x8C50, 0xA4F2, 0xA513, 0x7BEE, 0x52AA, 0x3165, 0x2945, 0x3186, 0x52AA, 0x630B, 0x630B, 0x39C6, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39C6, 0x5AEB, 0x9CD2, 0xA4F2, 0x8C50, 0x4A48, 0x18E3, - 0x18E3, 0x39C6, 0x62EB, 0x8C70, 0xAD74, 0xAD54, 0x840F, 0x4A48, 0x3165, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x4A48, 0x73AD, 0xA4F2, 0x9CB1, 0x73AD, 0x4207, 0x18E3, - 0x18E3, 0x2944, 0x39C6, 0x6B4C, 0x9470, 0xA533, 0x9CD2, 0x840F, 0x52AA, 0x3186, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2124, 0x630B, 0x9491, 0xAD33, 0x8C50, 0x52AA, 0x31A6, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x4228, 0x6B6C, 0x94B1, 0xA533, 0xAD54, 0x7BCE, 0x5289, 0x3185, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2944, 0x39C6, 0x7BCE, 0xA533, 0xAD33, 0x7BEE, 0x39E7, 0x2945, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x2944, 0x39E7, 0x6B4C, 0x9470, 0xAD74, 0xA4F2, 0x842F, 0x5289, 0x3186, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39E7, 0x6B6D, 0x9491, 0xAD33, 0x94B1, 0x632C, 0x2124, 0x2104, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2924, 0x4228, 0x6B4C, 0x94B1, 0xA513, 0xA4F2, 0x7BCE, 0x5ACA, 0x31A6, 0x2924, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2103, 0x2944, 0x39E7, 0x632B, 0x9491, 0xA4F2, 0x9CF2, 0x738D, 0x4A48, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x39E7, 0x6B6D, 0x94B1, 0xAD74, 0xAD54, 0x8C50, 0x5AAA, 0x31A6, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x39C6, 0x6B6D, 0x9491, 0xB574, 0xAD33, 0x8C70, 0x4A48, 0x2945, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2945, 0x39E7, 0x6B4C, 0x8C70, 0xA533, 0xA4F2, 0x8C50, 0x738D, 0x5ACA, 0x4228, 0x31A6, 0x2945, 0x2124, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2124, 0x2965, 0x39C6, 0x4A48, 0x630B, 0x7BCE, 0x9491, 0xA513, 0xAD33, 0x840F, 0x5ACA, 0x31A6, 0x2104, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x4207, 0x6B2C, 0x9470, 0xA513, 0xAD54, 0x9CF2, 0x8C50, 0x6B6D, 0x5ACA, 0x4A48, 0x4208, 0x39E7, 0x39C7, 0x39C6, 0x39C6, 0x39E7, 0x4228, 0x4A69, 0x5AEB, 0x738D, 0x9491, 0xA533, 0xAD33, 0x9CF2, 0x8C70, 0x5ACA, 0x31A6, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2924, 0x39C6, 0x5ACA, 0x7BEE, 0xA513, 0xA533, 0xA533, 0x9CF2, 0x9CD2, 0x94B1, 0x9491, 0x9491, 0x9491, 0x9491, 0x9491, 0x9491, 0x9491, 0x94B1, 0x9CD2, 0xA4F2, 0xAD33, 0xAD33, 0x94B1, 0x73AD, 0x4A48, 0x31A6, 0x2124, 0x2103, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2124, 0x31A6, 0x5289, 0x736D, 0x840F, 0x9470, 0x9CD2, 0xA513, 0xAD33, 0xAD54, 0xAD54, 0xAD74, 0xB574, 0xB574, 0xAD74, 0xAD54, 0xAD33, 0xA4F2, 0x9CB1, 0x8C50, 0x7BEE, 0x632C, 0x4A48, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2124, 0x4228, 0x630B, 0x7BCE, 0x8C70, 0x9CF2, 0xA513, 0xAD54, 0xAD74, 0xB574, 0xB574, 0xAD54, 0xA513, 0x9CD2, 0x8C50, 0x73AD, 0x5AAA, 0x39E7, 0x2124, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x2104, 0x2965, 0x39C6, 0x4228, 0x4A49, 0x5289, 0x52AA, 0x52AA, 0x5ACA, 0x5ACA, 0x5ACA, 0x52AA, 0x52AA, 0x5289, 0x4A48, 0x4207, 0x31A6, 0x2945, 0x2104, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, - 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, 0x18E3, -}; - #define ICON_BLUETOOTH_W 48 #define ICON_BLUETOOTH_H 48 static const uint16_t icon_bluetooth_data[2304] = { diff --git a/firmware/src/main.cpp b/firmware/src/main.cpp index e1d6884..10bcff9 100644 --- a/firmware/src/main.cpp +++ b/firmware/src/main.cpp @@ -4,17 +4,15 @@ #include "display_cfg.h" #include "data.h" #include "ui.h" -#include "hid.h" -#include "touch.h" #include "ble.h" #include "power.h" #include "imu.h" #include "splash.h" -// Physical buttons: -// BTN_BACK (GPIO 0) — left, previous animation on splash -// BTN_FWD (GPIO 18) — right, next animation on splash -// AXP PWR (PMU) — middle, cycle screens +// Physical buttons (global, screen-independent): +// BTN_BACK (GPIO 0) — left, send Space (Claude Code voice mode push-to-talk) +// BTN_FWD (GPIO 18) — right, send Shift+Tab (Claude Code mode toggle) +// AXP PWR (PMU) — middle, cycle screens; on splash, cycle animations #define BTN_BACK 0 #define BTN_FWD 18 @@ -290,15 +288,9 @@ void setup() { lv_indev_set_type(indev, LV_INDEV_TYPE_POINTER); lv_indev_set_read_cb(indev, my_touch_cb); - // Init USB HID keyboard (BLE-based) - hid_init(); - // Init BLE data channel ble_init(); - // Init touch gesture detection - touch_init(); - // Physical buttons: back (GPIO 0) and forward (GPIO 18) pinMode(BTN_BACK, INPUT_PULLUP); pinMode(BTN_FWD, INPUT_PULLUP); @@ -327,32 +319,34 @@ void loop() { touch_read(); lv_timer_handler(); ui_tick_anim(); - touch_tick(); ble_tick(); power_tick(); imu_tick(); splash_tick(); - // Three-button input (edge-detected on press): - // BACK (GPIO 0) → previous animation on splash screen - // FWD (GPIO 18) → next animation on splash screen - // PWR (AXP) → cycle screens + // Three-button input (global, screen-independent): + // LEFT (GPIO 0) → Space (voice-mode push-to-talk; press & release tracked) + // RIGHT (GPIO 18) → Shift+Tab (Claude Code mode toggle) + // PWR (AXP) → cycle screens; on splash, cycle animations { static bool back_was = false, fwd_was = false; bool back_now = (digitalRead(BTN_BACK) == LOW); bool fwd_now = (digitalRead(BTN_FWD) == LOW); - if (back_now && !back_was && ui_get_current_screen() == SCREEN_SPLASH) { - splash_prev(); + if (back_now != back_was) { + if (back_now) ble_keyboard_press(0x2C, 0); // HID Space, no mods + else ble_keyboard_release(); + back_was = back_now; } - if (fwd_now && !fwd_was && ui_get_current_screen() == SCREEN_SPLASH) { - splash_next(); + if (fwd_now != fwd_was) { + if (fwd_now) ble_keyboard_press(0x2B, 0x02); // HID Tab + LEFT_SHIFT + else ble_keyboard_release(); + fwd_was = fwd_now; } - back_was = back_now; - fwd_was = fwd_now; if (power_pwr_pressed()) { - ui_cycle_screen(); + if (ui_get_current_screen() == SCREEN_SPLASH) splash_next(); + else ui_cycle_screen(); } } @@ -391,15 +385,6 @@ void loop() { ui_update_ble_status(bs, ble_get_device_name(), ble_get_mac_address()); } - // Auto-switch screen on USB cable connect/disconnect — but never away from splash - if (power_usb_changed() && ui_get_current_screen() != SCREEN_SPLASH) { - if (power_is_usb_connected()) { - ui_show_screen(SCREEN_USAGE); - } else { - ui_show_screen(SCREEN_CONTROLLER); - } - } - // Update battery indicator static int last_pct = -2; static bool last_charging = false; diff --git a/firmware/src/splash.cpp b/firmware/src/splash.cpp index b9f647b..7ad6a58 100644 --- a/firmware/src/splash.cpp +++ b/firmware/src/splash.cpp @@ -135,6 +135,10 @@ void splash_hide(void) { active = false; } +lv_obj_t* splash_get_root(void) { + return splash_container; +} + const char *splash_current_name(void) { if (SPLASH_ANIM_COUNT == 0) return "(none)"; return splash_anims[cur_anim].name; diff --git a/firmware/src/splash.h b/firmware/src/splash.h index 28f6ea1..1612f92 100644 --- a/firmware/src/splash.h +++ b/firmware/src/splash.h @@ -22,6 +22,9 @@ void splash_set_active(bool active); void splash_show(void); void splash_hide(void); +// Root container (so ui.cpp can attach a click event). +lv_obj_t* splash_get_root(void); + // Current animation name (for debug/UI). const char *splash_current_name(void); diff --git a/firmware/src/touch.cpp b/firmware/src/touch.cpp deleted file mode 100644 index 9a3d82c..0000000 --- a/firmware/src/touch.cpp +++ /dev/null @@ -1,179 +0,0 @@ -#include "touch.h" -#include "ui.h" -#include "ble.h" -#include -#include "display_cfg.h" - -// Thresholds -#define SWIPE_MIN_PX 50 -#define SWIPE_MAX_CROSS_PX 30 -#define HOLD_TIME_MS 500 -#define LOGO_HOLD_TIME_MS 800 -#define TAP_MAX_MOVE_PX 15 -#define LOGO_X_MAX 100 -#define LOGO_Y_MAX 100 -#define MARGIN 20 - -enum touch_state_t { - TS_IDLE, - TS_DOWN, - TS_HOLDING, - TS_SWIPING, - TS_LOGO_HOLD, -}; - -static touch_state_t state = TS_IDLE; -static uint16_t start_x, start_y; -static uint16_t last_x, last_y; -static uint32_t down_time; - -// Shared touch state (read once per loop in main.cpp) -extern volatile bool touch_pressed; -extern volatile uint16_t touch_x; -extern volatile uint16_t touch_y; - -static bool get_touch(uint16_t* x, uint16_t* y) { - if (touch_pressed) { - *x = touch_x; - *y = touch_y; - return true; - } - return false; -} - -static gesture_t classify_swipe(int dx, int dy) { - int ax = abs(dx); - int ay = abs(dy); - if (ax > ay && ax >= SWIPE_MIN_PX && ay <= SWIPE_MAX_CROSS_PX) - return dx > 0 ? GESTURE_SWIPE_RIGHT : GESTURE_SWIPE_LEFT; - if (ay > ax && ay >= SWIPE_MIN_PX && ax <= SWIPE_MAX_CROSS_PX) - return dy > 0 ? GESTURE_SWIPE_DOWN : GESTURE_SWIPE_UP; - return GESTURE_NONE; -} - -static bool in_logo(uint16_t x, uint16_t y) { - return x < LOGO_X_MAX && y < LOGO_Y_MAX; -} - -// Controller zone coordinates for 480x480 layout (scaled, MARGIN=20, CONTENT_Y=100) -// Side zones: 110x138, starting at y=100 -#define ZONE_LEFT_X_MAX 130 -#define ZONE_RIGHT_X_MIN 350 -#define ZONE_TOP_Y_MIN 100 -#define ZONE_TOP_Y_MAX 238 -#define ZONE_BOT_Y_MIN 248 -#define ZONE_BOT_Y_MAX 386 - -static gesture_t classify_zone_tap(uint16_t x, uint16_t y) { - if (x < ZONE_LEFT_X_MAX) { - if (y >= ZONE_TOP_Y_MIN && y < ZONE_TOP_Y_MAX) return GESTURE_TAP_ESCAPE; - if (y >= ZONE_BOT_Y_MIN && y < ZONE_BOT_Y_MAX) return GESTURE_TAP_ARROW_LEFT; - } - if (x > ZONE_RIGHT_X_MIN) { - if (y >= ZONE_TOP_Y_MIN && y < ZONE_TOP_Y_MAX) return GESTURE_TAP_BACKSPACE; - if (y >= ZONE_BOT_Y_MIN && y < ZONE_BOT_Y_MAX) return GESTURE_TAP_ARROW_RIGHT; - } - return GESTURE_NONE; -} - -static bool is_in_tap_zone(uint16_t x, uint16_t y) { - return classify_zone_tap(x, y) != GESTURE_NONE; -} - -// BLE clear zone on Bluetooth screen (scaled layout) -#define BLE_CLEAR_Y_MIN 276 -#define BLE_CLEAR_Y_MAX 346 - -static bool in_ble_clear_zone(uint16_t x, uint16_t y) { - return x >= MARGIN && x <= (480 - MARGIN) && y >= BLE_CLEAR_Y_MIN && y < BLE_CLEAR_Y_MAX; -} - -void touch_init(void) { - state = TS_IDLE; -} - -void touch_tick(void) { - uint16_t x, y; - bool touching = get_touch(&x, &y); - uint32_t now = millis(); - - switch (state) { - case TS_IDLE: - if (touching) { - start_x = x; - start_y = y; - last_x = x; - last_y = y; - down_time = now; - state = TS_DOWN; - } - break; - - case TS_DOWN: - if (!touching) { - bool is_tap = abs((int)last_x - (int)start_x) < TAP_MAX_MOVE_PX && - abs((int)last_y - (int)start_y) < TAP_MAX_MOVE_PX; - - if (is_tap && in_logo(start_x, start_y)) { - ui_cycle_screen(); - } else if (is_tap && ui_get_current_screen() == SCREEN_CONTROLLER) { - gesture_t zone = classify_zone_tap(start_x, start_y); - if (zone != GESTURE_NONE) { - hid_on_gesture(zone); - } - } else if (is_tap && ui_get_current_screen() == SCREEN_BLUETOOTH) { - if (in_ble_clear_zone(start_x, start_y)) { - ble_clear_bonds(); - } - } - state = TS_IDLE; - } else { - last_x = x; - last_y = y; - int dx = (int)x - (int)start_x; - int dy = (int)y - (int)start_y; - - if (in_logo(start_x, start_y) && ui_get_current_screen() == SCREEN_CONTROLLER && (now - down_time) >= LOGO_HOLD_TIME_MS) { - hid_on_gesture(GESTURE_TAP_CTRL_SPACE); - state = TS_LOGO_HOLD; - } - else if (ui_get_current_screen() == SCREEN_CONTROLLER) { - if (abs(dx) >= SWIPE_MIN_PX || abs(dy) >= SWIPE_MIN_PX) { - state = TS_SWIPING; - } else if (!in_logo(start_x, start_y) && !is_in_tap_zone(start_x, start_y) && (now - down_time) >= HOLD_TIME_MS) { - hid_on_gesture(GESTURE_HOLD_START); - state = TS_HOLDING; - } - } - } - break; - - case TS_HOLDING: - if (!touching) { - hid_on_gesture(GESTURE_HOLD_END); - state = TS_IDLE; - } - break; - - case TS_SWIPING: - if (touching) { - last_x = x; - last_y = y; - } else { - int dx = (int)last_x - (int)start_x; - int dy = (int)last_y - (int)start_y; - gesture_t g = classify_swipe(dx, dy); - if (g != GESTURE_NONE) { - hid_on_gesture(g); - } - state = TS_IDLE; - } - break; - - case TS_LOGO_HOLD: - if (!touching) { - state = TS_IDLE; - } - break; - } -} diff --git a/firmware/src/touch.h b/firmware/src/touch.h deleted file mode 100644 index 32fd4a6..0000000 --- a/firmware/src/touch.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once -#include "hid.h" - -void touch_init(void); -void touch_tick(void); diff --git a/firmware/src/ui.cpp b/firmware/src/ui.cpp index 7f54484..5c6357e 100644 --- a/firmware/src/ui.cpp +++ b/firmware/src/ui.cpp @@ -47,12 +47,6 @@ static lv_obj_t* lbl_weekly_label; static lv_obj_t* lbl_weekly_reset; static lv_obj_t* lbl_anim; -// ---- Controller screen widgets ---- -static lv_obj_t* ctrl_container; -static lv_obj_t* ctrl_session_bar; -static lv_obj_t* ctrl_session_lbl; -static lv_obj_t* ctrl_reset_lbl; - // ---- Bluetooth screen widgets ---- static lv_obj_t* ble_container; static lv_obj_t* lbl_ble_status; @@ -143,6 +137,10 @@ static void format_reset_time(int mins, char* buf, size_t len) { } } +// Forward decls — callbacks defined near ui_show_screen below +static void global_click_cb(lv_event_t* e); +static void ble_reset_click_cb(lv_event_t* e); + static lv_obj_t* make_panel(lv_obj_t* parent, int x, int y, int w, int h) { lv_obj_t* panel = lv_obj_create(parent); lv_obj_set_pos(panel, x, y); @@ -156,6 +154,9 @@ static lv_obj_t* make_panel(lv_obj_t* parent, int x, int y, int w, int h) { lv_obj_set_style_pad_top(panel, 12, 0); lv_obj_set_style_pad_bottom(panel, 12, 0); lv_obj_clear_flag(panel, LV_OBJ_FLAG_SCROLLABLE); + // Bubble click events up to the screen / usage_container so a tap anywhere + // on the panel fires the global click handler. + lv_obj_add_flag(panel, LV_OBJ_FLAG_EVENT_BUBBLE); return panel; } @@ -174,31 +175,6 @@ static lv_obj_t* make_bar(lv_obj_t* parent, int x, int y, int w, int h) { return bar; } -static lv_obj_t* make_zone(lv_obj_t* parent, int x, int y, int w, int h, const char* text) { - lv_obj_t* zone = lv_obj_create(parent); - lv_obj_set_pos(zone, x, y); - lv_obj_set_size(zone, w, h); - lv_obj_set_style_bg_color(zone, COL_PANEL, 0); - lv_obj_set_style_bg_opa(zone, LV_OPA_COVER, 0); - lv_obj_set_style_radius(zone, 8, 0); - lv_obj_set_style_border_width(zone, 0, 0); - lv_obj_clear_flag(zone, LV_OBJ_FLAG_SCROLLABLE); - - lv_obj_t* lbl = lv_label_create(zone); - lv_label_set_text(lbl, text); - lv_obj_set_style_text_font(lbl, &font_styrene_24, 0); - lv_obj_set_style_text_color(lbl, COL_DIM, 0); - lv_obj_center(lbl); - - return zone; -} - -// Icon image descriptors -static lv_image_dsc_t icon_escape_dsc; -static lv_image_dsc_t icon_delete_dsc; -static lv_image_dsc_t icon_arrow_left_dsc; -static lv_image_dsc_t icon_arrow_right_dsc; - static void init_icon_dsc(lv_image_dsc_t* dsc, int w, int h, const uint16_t* data) { dsc->header.w = w; dsc->header.h = h; @@ -219,52 +195,6 @@ static void init_icon_dsc_rgb565a8(lv_image_dsc_t* dsc, int w, int h, const uint dsc->data_size = w * h * 3; } -static lv_obj_t* make_zone_icon(lv_obj_t* parent, int x, int y, int w, int h, lv_image_dsc_t* icon) { - lv_obj_t* zone = lv_obj_create(parent); - lv_obj_set_pos(zone, x, y); - lv_obj_set_size(zone, w, h); - lv_obj_set_style_bg_color(zone, COL_PANEL, 0); - lv_obj_set_style_bg_opa(zone, LV_OPA_COVER, 0); - lv_obj_set_style_radius(zone, 8, 0); - lv_obj_set_style_border_width(zone, 0, 0); - lv_obj_clear_flag(zone, LV_OBJ_FLAG_SCROLLABLE); - - lv_obj_t* img = lv_image_create(zone); - lv_image_set_src(img, icon); - lv_obj_center(img); - - return zone; -} - -static void make_hint_pair(lv_obj_t* parent, const char* gesture, const char* action) { - lv_obj_t* pair = lv_obj_create(parent); - lv_obj_set_width(pair, lv_pct(100)); - lv_obj_set_height(pair, LV_SIZE_CONTENT); - lv_obj_set_style_bg_opa(pair, LV_OPA_TRANSP, 0); - lv_obj_set_style_border_width(pair, 0, 0); - lv_obj_set_style_pad_all(pair, 0, 0); - lv_obj_set_style_pad_row(pair, 0, 0); - lv_obj_set_flex_flow(pair, LV_FLEX_FLOW_COLUMN); - lv_obj_set_flex_align(pair, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); - lv_obj_clear_flag(pair, LV_OBJ_FLAG_SCROLLABLE); - - lv_obj_t* g = lv_label_create(pair); - lv_label_set_text(g, gesture); - lv_obj_set_style_text_font(g, &font_styrene_20, 0); - lv_obj_set_style_text_color(g, COL_TEXT, 0); - lv_obj_set_style_text_align(g, LV_TEXT_ALIGN_CENTER, 0); - lv_obj_set_width(g, lv_pct(100)); - lv_label_set_long_mode(g, LV_LABEL_LONG_WRAP); - - lv_obj_t* a = lv_label_create(pair); - lv_label_set_text(a, action); - lv_obj_set_style_text_font(a, &font_styrene_20, 0); - lv_obj_set_style_text_color(a, COL_DIM, 0); - lv_obj_set_style_text_align(a, LV_TEXT_ALIGN_CENTER, 0); - lv_obj_set_width(a, lv_pct(100)); - lv_label_set_long_mode(a, LV_LABEL_LONG_WRAP); -} - static lv_obj_t* make_pill(lv_obj_t* parent, const char* text) { lv_obj_t* lbl = lv_label_create(parent); lv_label_set_text(lbl, text); @@ -302,6 +232,7 @@ static void init_usage_screen(lv_obj_t* scr) { lv_obj_set_style_border_width(usage_container, 0, 0); lv_obj_set_style_pad_all(usage_container, 0, 0); lv_obj_clear_flag(usage_container, LV_OBJ_FLAG_SCROLLABLE); + lv_obj_add_event_cb(usage_container, global_click_cb, LV_EVENT_CLICKED, NULL); // Title lbl_title = lv_label_create(usage_container); @@ -361,114 +292,6 @@ static void init_usage_screen(lv_obj_t* scr) { lv_obj_align(lbl_anim, LV_ALIGN_BOTTOM_MID, 0, -15); } -// ======== Controller Screen (480x480) ======== - -#define CTRL_SIDE_W 110 -#define CTRL_SIDE_H 138 -#define CTRL_GAP 10 -#define CTRL_CONTENT_H (2 * CTRL_SIDE_H + CTRL_GAP) // 306 - -static void init_controller_screen(lv_obj_t* scr) { - ctrl_container = lv_obj_create(scr); - lv_obj_set_size(ctrl_container, SCR_W, SCR_H); - lv_obj_set_pos(ctrl_container, 0, 0); - lv_obj_set_style_bg_opa(ctrl_container, LV_OPA_TRANSP, 0); - lv_obj_set_style_border_width(ctrl_container, 0, 0); - lv_obj_set_style_pad_all(ctrl_container, 0, 0); - lv_obj_clear_flag(ctrl_container, LV_OBJ_FLAG_SCROLLABLE); - - // Title - lv_obj_t* lbl_ctrl_title = lv_label_create(ctrl_container); - lv_label_set_text(lbl_ctrl_title, "Controller"); - lv_obj_set_style_text_font(lbl_ctrl_title, &font_tiempos_56, 0); - lv_obj_set_style_text_color(lbl_ctrl_title, COL_TEXT, 0); - lv_obj_align(lbl_ctrl_title, LV_ALIGN_TOP_MID, 16, TITLE_Y); - - // Initialize icon descriptors - init_icon_dsc(&icon_escape_dsc, ICON_ESCAPE_W, ICON_ESCAPE_H, icon_escape_data); - init_icon_dsc(&icon_delete_dsc, ICON_DELETE_W, ICON_DELETE_H, icon_delete_data); - init_icon_dsc(&icon_arrow_left_dsc, ICON_ARROW_LEFT_W, ICON_ARROW_LEFT_H, icon_arrow_left_data); - init_icon_dsc(&icon_arrow_right_dsc, ICON_ARROW_RIGHT_W, ICON_ARROW_RIGHT_H, icon_arrow_right_data); - - // Left column: ESC (top), < (bottom) - make_zone_icon(ctrl_container, MARGIN, CONTENT_Y, CTRL_SIDE_W, CTRL_SIDE_H, &icon_escape_dsc); - make_zone_icon(ctrl_container, MARGIN, CONTENT_Y + CTRL_SIDE_H + CTRL_GAP, CTRL_SIDE_W, CTRL_SIDE_H, &icon_arrow_left_dsc); - - // Right column: DEL (top), > (bottom) - int right_x = SCR_W - MARGIN - CTRL_SIDE_W; - make_zone_icon(ctrl_container, right_x, CONTENT_Y, CTRL_SIDE_W, CTRL_SIDE_H, &icon_delete_dsc); - make_zone_icon(ctrl_container, right_x, CONTENT_Y + CTRL_SIDE_H + CTRL_GAP, CTRL_SIDE_W, CTRL_SIDE_H, &icon_arrow_right_dsc); - - // Center hints box - int cx = MARGIN + CTRL_SIDE_W + CTRL_GAP; - int cw = CONTENT_W - 2 * (CTRL_SIDE_W + CTRL_GAP); - lv_obj_t* center = make_zone(ctrl_container, cx, CONTENT_Y, cw, CTRL_CONTENT_H, ""); - - // Vertically centered hint list - lv_obj_t* hint_list = lv_obj_create(center); - lv_obj_set_size(hint_list, cw - 24, LV_SIZE_CONTENT); - lv_obj_center(hint_list); - lv_obj_set_style_bg_opa(hint_list, LV_OPA_TRANSP, 0); - lv_obj_set_style_border_width(hint_list, 0, 0); - lv_obj_set_style_pad_all(hint_list, 0, 0); - lv_obj_set_style_pad_row(hint_list, 6, 0); - lv_obj_set_flex_flow(hint_list, LV_FLEX_FLOW_COLUMN); - lv_obj_set_flex_align(hint_list, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); - lv_obj_clear_flag(hint_list, LV_OBJ_FLAG_SCROLLABLE); - - // Hand icon + "Gestures" header row - static lv_image_dsc_t icon_hand_dsc; - init_icon_dsc(&icon_hand_dsc, ICON_HAND_W, ICON_HAND_H, icon_hand_data); - - lv_obj_t* header_row = lv_obj_create(hint_list); - lv_obj_set_width(header_row, lv_pct(100)); - lv_obj_set_height(header_row, LV_SIZE_CONTENT); - lv_obj_set_style_bg_opa(header_row, LV_OPA_TRANSP, 0); - lv_obj_set_style_border_width(header_row, 0, 0); - lv_obj_set_style_pad_all(header_row, 0, 0); - lv_obj_set_style_pad_column(header_row, 8, 0); - lv_obj_set_flex_flow(header_row, LV_FLEX_FLOW_ROW); - lv_obj_set_flex_align(header_row, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); - lv_obj_set_style_pad_bottom(header_row, 8, 0); - lv_obj_clear_flag(header_row, LV_OBJ_FLAG_SCROLLABLE); - - lv_obj_t* hand_img = lv_image_create(header_row); - lv_image_set_src(hand_img, &icon_hand_dsc); - - lv_obj_t* gestures_lbl = lv_label_create(header_row); - lv_label_set_text(gestures_lbl, "Gestures"); - lv_obj_set_style_text_font(gestures_lbl, &font_styrene_28, 0); - lv_obj_set_style_text_color(gestures_lbl, COL_TEXT, 0); - - // Hint entries: gesture (white) + action (dim) on separate lines - lv_obj_set_style_pad_row(hint_list, 12, 0); - make_hint_pair(hint_list, "Swipe up/down", "Arrow keys"); - make_hint_pair(hint_list, "Swipe left", "Toggle mode"); - make_hint_pair(hint_list, "Swipe right", "Enter key"); - make_hint_pair(hint_list, "Hold", "Voice dictation"); - - // Usage info below content area - int info_y = CONTENT_Y + CTRL_CONTENT_H + CTRL_GAP + 4; - - ctrl_session_lbl = lv_label_create(ctrl_container); - lv_label_set_text(ctrl_session_lbl, "---%"); - lv_obj_set_style_text_font(ctrl_session_lbl, &font_styrene_24, 0); - lv_obj_set_style_text_color(ctrl_session_lbl, COL_DIM, 0); - lv_obj_set_pos(ctrl_session_lbl, MARGIN, info_y); - - ctrl_reset_lbl = lv_label_create(ctrl_container); - lv_label_set_text(ctrl_reset_lbl, "---"); - lv_obj_set_style_text_font(ctrl_reset_lbl, &font_styrene_24, 0); - lv_obj_set_style_text_color(ctrl_reset_lbl, COL_DIM, 0); - lv_obj_align(ctrl_reset_lbl, LV_ALIGN_TOP_RIGHT, -MARGIN, info_y); - - int bar_y = info_y + 28; - ctrl_session_bar = make_bar(ctrl_container, MARGIN, bar_y, CONTENT_W, 16); - - // Start hidden - lv_obj_add_flag(ctrl_container, LV_OBJ_FLAG_HIDDEN); -} - // ======== Bluetooth Screen (480x480) ======== static void init_bluetooth_screen(lv_obj_t* scr) { @@ -529,6 +352,7 @@ static void init_bluetooth_screen(lv_obj_t* scr) { lv_obj_set_flex_flow(reset_zone, LV_FLEX_FLOW_ROW); lv_obj_set_flex_align(reset_zone, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); lv_obj_clear_flag(reset_zone, LV_OBJ_FLAG_SCROLLABLE); + lv_obj_add_event_cb(reset_zone, ble_reset_click_cb, LV_EVENT_CLICKED, NULL); static lv_image_dsc_t icon_trash_dsc; init_icon_dsc(&icon_trash_dsc, ICON_TRASH2_W, ICON_TRASH2_H, icon_trash2_data); @@ -576,10 +400,14 @@ void ui_init(void) { init_battery_icons(); init_usage_screen(scr); - init_controller_screen(scr); init_bluetooth_screen(scr); splash_init(scr); + // Splash is touch-toggled — tap anywhere on the splash dismisses it + if (splash_get_root()) { + lv_obj_add_event_cb(splash_get_root(), global_click_cb, LV_EVENT_CLICKED, NULL); + } + // Logo on top of all containers (inset for rounded corners) logo_img = lv_image_create(scr); lv_image_set_src(logo_img, &logo_dsc); @@ -612,15 +440,6 @@ void ui_update(const UsageData* data) { format_reset_time(data->weekly_reset_mins, buf, sizeof(buf)); lv_label_set_text(lbl_weekly_reset, buf); - - // Controller screen session info - lv_bar_set_value(ctrl_session_bar, s_pct, LV_ANIM_ON); - lv_obj_set_style_bg_color(ctrl_session_bar, pct_color(data->session_pct), LV_PART_INDICATOR); - lv_label_set_text_fmt(ctrl_session_lbl, "%d%%", s_pct); - - char rbuf[48]; - format_reset_time(data->session_reset_mins, rbuf, sizeof(rbuf)); - lv_label_set_text(ctrl_reset_lbl, rbuf); } void ui_tick_anim(void) { @@ -647,16 +466,41 @@ void ui_tick_anim(void) { } } +static screen_t prev_non_splash_screen = SCREEN_USAGE; +static int last_battery_idx = 0; + +// Hide the battery indicator on the splash screen when it's in the low state — +// the small icon is visually noisy over the pixel-art creature animations. +static void apply_battery_visibility(void) { + if (!battery_img) return; + bool hide = (current_screen == SCREEN_SPLASH && last_battery_idx == 1); + if (hide) lv_obj_add_flag(battery_img, LV_OBJ_FLAG_HIDDEN); + else lv_obj_clear_flag(battery_img, LV_OBJ_FLAG_HIDDEN); +} + +// LVGL handles click debouncing internally. Screen-level handler fires when +// no child consumed the event (children only consume if they have their own +// event callback, e.g. the Reset Bluetooth zone). On BT screen we skip the +// splash toggle so only the reset zone is interactive there. +static void global_click_cb(lv_event_t* e) { + (void)e; + if (ui_get_current_screen() == SCREEN_BLUETOOTH) return; + ui_toggle_splash(); +} + +static void ble_reset_click_cb(lv_event_t* e) { + (void)e; + ble_clear_bonds(); +} + void ui_show_screen(screen_t screen) { lv_obj_add_flag(usage_container, LV_OBJ_FLAG_HIDDEN); - lv_obj_add_flag(ctrl_container, LV_OBJ_FLAG_HIDDEN); lv_obj_add_flag(ble_container, LV_OBJ_FLAG_HIDDEN); splash_hide(); switch (screen) { case SCREEN_SPLASH: splash_show(); break; case SCREEN_USAGE: lv_obj_clear_flag(usage_container, LV_OBJ_FLAG_HIDDEN); break; - case SCREEN_CONTROLLER: lv_obj_clear_flag(ctrl_container, LV_OBJ_FLAG_HIDDEN); break; case SCREEN_BLUETOOTH: lv_obj_clear_flag(ble_container, LV_OBJ_FLAG_HIDDEN); break; default: break; } @@ -667,11 +511,19 @@ void ui_show_screen(screen_t screen) { else lv_obj_clear_flag(logo_img, LV_OBJ_FLAG_HIDDEN); } + if (screen != SCREEN_SPLASH) prev_non_splash_screen = screen; current_screen = screen; + apply_battery_visibility(); } void ui_cycle_screen(void) { - ui_show_screen((screen_t)((current_screen + 1) % SCREEN_COUNT)); + screen_t next = (current_screen == SCREEN_USAGE) ? SCREEN_BLUETOOTH : SCREEN_USAGE; + ui_show_screen(next); +} + +void ui_toggle_splash(void) { + if (current_screen == SCREEN_SPLASH) ui_show_screen(prev_non_splash_screen); + else ui_show_screen(SCREEN_SPLASH); } screen_t ui_get_current_screen(void) { @@ -726,4 +578,6 @@ void ui_update_battery(int percent, bool charging) { idx = 3; // full } lv_image_set_src(battery_img, &battery_dscs[idx]); + last_battery_idx = idx; + apply_battery_visibility(); } diff --git a/firmware/src/ui.h b/firmware/src/ui.h index b1dc296..b18068c 100644 --- a/firmware/src/ui.h +++ b/firmware/src/ui.h @@ -5,7 +5,6 @@ enum screen_t { SCREEN_SPLASH, SCREEN_USAGE, - SCREEN_CONTROLLER, SCREEN_BLUETOOTH, SCREEN_COUNT, }; @@ -15,6 +14,7 @@ void ui_update(const UsageData* data); void ui_tick_anim(void); void ui_show_screen(screen_t screen); void ui_cycle_screen(void); +void ui_toggle_splash(void); screen_t ui_get_current_screen(void); void ui_update_ble_status(ble_state_t state, const char* name, const char* mac); void ui_update_battery(int percent, bool charging);