Remove Controller screen, global button shortcuts, touch-toggled splash

UX overhaul:
- Drop the Controller screen entirely (touch zones, swipe gestures, HID
  gesture engine, four icon arrays, hand icon)
- Two persistent screens (Usage, Bluetooth) cycled by the middle PWR
  button; splash becomes a touch-toggled welcome animation
- Left button (GPIO 0): hold to send Space (Claude Code voice-mode PTT)
- Right button (GPIO 18): press to send Shift+Tab (mode toggle)
- Middle button on splash cycles animations instead of screens
- Remove USB plug/unplug auto-switch (Controller was the unplug target)
- Hide battery indicator on splash when in LOW state — it's noisy over
  the pixel-art animations

Implementation:
- Delete firmware/src/hid.{cpp,h} and touch.{cpp,h}; their roles fold
  into main.cpp button handlers and LVGL CLICKED events respectively
- splash_get_root() exposes the splash container so ui.cpp can attach
  a click handler for the dismiss-on-tap behavior
- Tap detection uses LVGL's built-in LV_EVENT_CLICKED with event
  bubbling on the inner panels — debouncing is handled by LVGL
- On Bluetooth screen, only the Reset Bluetooth zone is clickable;
  taps elsewhere are no-ops (no conflict with splash toggle)

Docs:
- README: drop Controller from screens table, rewrite Physical buttons
  table, remove Gesture controls section
- CLAUDE.md: update file map, button assignments, drop gesture refs
This commit is contained in:
Hermann Björgvin Haraldsson
2026-05-11 00:51:07 +00:00
parent 90eaeec35b
commit 7fc8ed721a
12 changed files with 98 additions and 803 deletions
+5 -6
View File
@@ -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`.
+15 -38
View File
@@ -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
-65
View File
@@ -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;
}
}
}
-21
View File
@@ -1,21 +0,0 @@
#pragma once
#include <Arduino.h>
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);
-257
View File
@@ -1,263 +1,6 @@
#pragma once
#include <stdint.h>
#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] = {
+18 -33
View File
@@ -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;
+4
View File
@@ -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;
+3
View File
@@ -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);
-179
View File
@@ -1,179 +0,0 @@
#include "touch.h"
#include "ui.h"
#include "ble.h"
#include <Arduino.h>
#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;
}
}
-5
View File
@@ -1,5 +0,0 @@
#pragma once
#include "hid.h"
void touch_init(void);
void touch_tick(void);
+52 -198
View File
@@ -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();
}
+1 -1
View File
@@ -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);