From 14e46c20161c10ad3ae1d5f1e7d0b9ac29149a50 Mon Sep 17 00:00:00 2001 From: srg74 <28492985+srg74@users.noreply.github.com> Date: Sun, 1 Jun 2025 22:38:04 -0400 Subject: [PATCH 01/11] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 51d321d922..dc0469a6b6 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ wled-update.sh /wled00/Release /wled00/wled00.ino.cpp /wled00/html_*.h +WLED.code-workspace From b099eda90297f0b0ce7b5afc1ec5ac759b9727bb Mon Sep 17 00:00:00 2001 From: srg74 <28492985+srg74@users.noreply.github.com> Date: Thu, 25 Sep 2025 12:07:20 -0400 Subject: [PATCH 02/11] Update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 31b2727234..6e04dde612 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,7 @@ wled-update.sh /build_output/ /node_modules/ /logs/ - +/tools/organize_firmware.py /wled00/extLibs /wled00/LittleFS /wled00/my_config.h From 719fe49305b1bb6659686bf21357adb3c0dbac9e Mon Sep 17 00:00:00 2001 From: srg74 <28492985+srg74@users.noreply.github.com> Date: Mon, 6 Oct 2025 12:16:10 -0400 Subject: [PATCH 03/11] Add GC9A01 round TFT display usermod - Complete usermod for GC9A01 240x240 round displays - Circular UI optimized for round displays with blue bezel theming - Real-time status display: WiFi signal, power state, brightness, effects - Clock mode with 12/24-hour format support - Power management with configurable sleep and clock modes (5-300s timeout) - Brightness arc visualization (semicircular display) - Color preview buttons (FX, BG, CS) with automatic color synchronization - Effect and palette name display - Startup logo display (2-second duration) - Web UI configuration for all settings (timeout, backlight, rotation, etc.) - Non-blocking updates with state-based change detection - Compatible with rotary encoder usermod for enhanced interaction - Follows Four Line Display ALT pattern for consistency --- .../usermod_v2_gc9a01_display/library.json | 8 + .../usermod_v2_gc9a01_display/logo_data.h | 125 ++ usermods/usermod_v2_gc9a01_display/readme.md | 123 ++ .../usermod_v2_gc9a01_display.cpp | 1057 +++++++++++++++++ .../usermod_v2_gc9a01_display.h | 128 ++ 5 files changed, 1441 insertions(+) create mode 100644 usermods/usermod_v2_gc9a01_display/library.json create mode 100644 usermods/usermod_v2_gc9a01_display/logo_data.h create mode 100644 usermods/usermod_v2_gc9a01_display/readme.md create mode 100644 usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp create mode 100644 usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.h diff --git a/usermods/usermod_v2_gc9a01_display/library.json b/usermods/usermod_v2_gc9a01_display/library.json new file mode 100644 index 0000000000..e934142504 --- /dev/null +++ b/usermods/usermod_v2_gc9a01_display/library.json @@ -0,0 +1,8 @@ +{ + "name": "gc9a01_display", + "build": { "libArchive": false }, + "dependencies": { + "bodmer/TFT_eSPI": "^2.5.43", + "Wire": "" + } +} \ No newline at end of file diff --git a/usermods/usermod_v2_gc9a01_display/logo_data.h b/usermods/usermod_v2_gc9a01_display/logo_data.h new file mode 100644 index 0000000000..7b12d4726e --- /dev/null +++ b/usermods/usermod_v2_gc9a01_display/logo_data.h @@ -0,0 +1,125 @@ +#include + +const unsigned long epd_bitmap_ [] PROGMEM = { + // '015_rgb, 120x120px + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d30893, 0x00d10895, 0x00d10895, 0x00d10895, 0x00e908c3, 0x00f108d1, 0x00f108d1, 0x00f108d1, 0x00f754f7, 0x00f754f7, 0x00f754f7, 0x00f754f7, 0x00f754f7, 0x00f754f7, 0x00f754f7, 0x00f754f7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d10895, 0x00d20795, 0x00d20795, 0x00d20795, 0x00ea08c3, 0x00f208d1, 0x00f208d1, 0x00f208d1, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f754f7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d10895, 0x00d20795, 0x00d20795, 0x00d20795, 0x00ea08c3, 0x00f208d1, 0x00f208d1, 0x00f208d1, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f754f7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d10895, 0x00d20795, 0x00d20795, 0x00d20795, 0x00ea08c3, 0x00f208d1, 0x00f208d1, 0x00f208d1, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f753f7, 0x00f754f7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d00755, 0x00d00755, 0x00d00755, 0x00d0075d, 0x00d10776, 0x00d10776, 0x00d10776, 0x00df0793, 0x00ea07aa, 0x00ea07aa, 0x00ea07aa, 0x00f008c7, 0x00f208cf, 0x00f208cf, 0x00f208cf, 0x00f41aeb, 0x00f41aeb, 0x00f41aeb, 0x00f31aed, 0x00f11af4, 0x00f11af4, 0x00f11af4, 0x00f132f5, 0x00f152f6, 0x00f152f6, 0x00f152f6, 0x00e552f6, 0x00e052f6, 0x00e052f6, 0x00e052f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d00655, 0x00d00655, 0x00d00655, 0x00d0065d, 0x00d10675, 0x00d10675, 0x00d10675, 0x00e10793, 0x00f107b1, 0x00f107b1, 0x00f107b1, 0x00f208c8, 0x00f208cf, 0x00f208cf, 0x00f208cf, 0x00f309e7, 0x00f309e7, 0x00f309e7, 0x00f209ea, 0x00ef08f3, 0x00ef08f3, 0x00ef08f3, 0x00f02df4, 0x00f152f6, 0x00f152f6, 0x00f152f6, 0x00e452f6, 0x00e052f6, 0x00e052f6, 0x00e052f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d00655, 0x00d00655, 0x00d00655, 0x00d0065d, 0x00d10675, 0x00d10675, 0x00d10675, 0x00e10793, 0x00f107b1, 0x00f107b1, 0x00f107b1, 0x00f208c8, 0x00f208cf, 0x00f208cf, 0x00f208cf, 0x00f309e7, 0x00f309e7, 0x00f309e7, 0x00f209ea, 0x00ef08f3, 0x00ef08f3, 0x00ef08f3, 0x00f02df4, 0x00f152f6, 0x00f152f6, 0x00f152f6, 0x00e452f6, 0x00e052f6, 0x00e052f6, 0x00e052f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d00655, 0x00d00655, 0x00d00655, 0x00d0065d, 0x00d10675, 0x00d10675, 0x00d10675, 0x00e10793, 0x00f107b1, 0x00f107b1, 0x00f107b1, 0x00f208c8, 0x00f208cf, 0x00f208cf, 0x00f208cf, 0x00f309e7, 0x00f309e7, 0x00f309e7, 0x00f209ea, 0x00ef08f3, 0x00ef08f3, 0x00ef08f3, 0x00f02df4, 0x00f152f6, 0x00f152f6, 0x00f152f6, 0x00e452f6, 0x00e052f6, 0x00e052f6, 0x00e052f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d1072c, 0x00d1062c, 0x00d1062c, 0x00d1062c, 0x00f00769, 0x00f00769, 0x00f00769, 0x00f00771, 0x00f1078d, 0x00f1078d, 0x00f1078d, 0x00f1089d, 0x00f108ae, 0x00f108ae, 0x00f108ae, 0x00f308c8, 0x00f308d0, 0x00f308d0, 0x00f308d0, 0x00f308e9, 0x00f308e9, 0x00f308e9, 0x00f108eb, 0x00e908f2, 0x00e908f2, 0x00e908f2, 0x00dd08f1, 0x00d208f1, 0x00d208f1, 0x00d208f1, 0x00bd07f0, 0x00b707f0, 0x00b707f0, 0x00b707f0, 0x00c252f6, 0x00c252f6, 0x00c252f6, 0x00c352f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d1072c, 0x00d1062c, 0x00d1062c, 0x00d1062c, 0x00f00769, 0x00f00769, 0x00f00769, 0x00f00771, 0x00f1078d, 0x00f1078d, 0x00f1078d, 0x00f1089d, 0x00f108ae, 0x00f108ae, 0x00f108ae, 0x00f308c8, 0x00f308d0, 0x00f308d0, 0x00f308d0, 0x00f308e9, 0x00f308e9, 0x00f308e9, 0x00f108eb, 0x00e908f2, 0x00e908f2, 0x00e908f2, 0x00dd08f1, 0x00d208f1, 0x00d208f1, 0x00d208f1, 0x00bd07f0, 0x00b707f0, 0x00b707f0, 0x00b707f0, 0x00c252f6, 0x00c252f6, 0x00c252f6, 0x00c352f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d1072c, 0x00d1062c, 0x00d1062c, 0x00d1062c, 0x00f00769, 0x00f00769, 0x00f00769, 0x00f00771, 0x00f1078d, 0x00f1078d, 0x00f1078d, 0x00f1089d, 0x00f108ae, 0x00f108ae, 0x00f108ae, 0x00f308c8, 0x00f308d0, 0x00f308d0, 0x00f308d0, 0x00f308e9, 0x00f308e9, 0x00f308e9, 0x00f108eb, 0x00e908f2, 0x00e908f2, 0x00e908f2, 0x00dd08f1, 0x00d208f1, 0x00d208f1, 0x00d208f1, 0x00bd07f0, 0x00b707f0, 0x00b707f0, 0x00b707f0, 0x00c252f6, 0x00c252f6, 0x00c252f6, 0x00c352f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00cc0808, 0x00d00404, 0x00d00404, 0x00d00404, 0x00d8062d, 0x00d80630, 0x00d80630, 0x00d80630, 0x00f00766, 0x00f00766, 0x00f00766, 0x00f1076f, 0x00f1078a, 0x00f1078a, 0x00f1078a, 0x00f1079c, 0x00f108ad, 0x00f108ad, 0x00f108ad, 0x00f208c8, 0x00f308d0, 0x00f308d0, 0x00f308d0, 0x00f308ea, 0x00f308ea, 0x00f308ea, 0x00f008ec, 0x00e708f2, 0x00e708f2, 0x00e708f2, 0x00db08f2, 0x00cf08f1, 0x00cf08f1, 0x00cf08f1, 0x00b907f0, 0x00b307f0, 0x00b307f0, 0x00b307f0, 0x00b440f4, 0x00b440f4, 0x00b440f4, 0x00b341f4, 0x009d51f2, 0x009d51f2, 0x009d51f2, 0x00a155f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00cf0606, 0x00d00505, 0x00d00505, 0x00d00505, 0x00e80730, 0x00f0073d, 0x00f0073d, 0x00f0073d, 0x00f2075c, 0x00f2075c, 0x00f2075c, 0x00f20765, 0x00f10782, 0x00f10782, 0x00f10782, 0x00f10796, 0x00f107ab, 0x00f107ab, 0x00f107ab, 0x00f208c7, 0x00f208d0, 0x00f208d0, 0x00f208d0, 0x00f308ec, 0x00f308ec, 0x00f308ec, 0x00ef08ed, 0x00e208f2, 0x00e208f2, 0x00e208f2, 0x00d308f2, 0x00c407f2, 0x00c407f2, 0x00c407f2, 0x00ac06f0, 0x00a506f0, 0x00a506f0, 0x00a506f0, 0x008705ef, 0x008705ef, 0x008705ef, 0x008c17f0, 0x009e51f4, 0x009e51f4, 0x009e51f4, 0x009d52f3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00cf0606, 0x00d00505, 0x00d00505, 0x00d00505, 0x00e80730, 0x00f0073d, 0x00f0073d, 0x00f0073d, 0x00f2075c, 0x00f2075c, 0x00f2075c, 0x00f20765, 0x00f10782, 0x00f10782, 0x00f10782, 0x00f10796, 0x00f107ab, 0x00f107ab, 0x00f107ab, 0x00f208c7, 0x00f208d0, 0x00f208d0, 0x00f208d0, 0x00f308ec, 0x00f308ec, 0x00f308ec, 0x00ef08ed, 0x00e208f2, 0x00e208f2, 0x00e208f2, 0x00d308f2, 0x00c407f2, 0x00c407f2, 0x00c407f2, 0x00ac06f0, 0x00a506f0, 0x00a506f0, 0x00a506f0, 0x008705ef, 0x008705ef, 0x008705ef, 0x008c17f0, 0x009e51f4, 0x009e51f4, 0x009e51f4, 0x009d52f3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00cf0606, 0x00d00505, 0x00d00505, 0x00d00505, 0x00e80730, 0x00f0073d, 0x00f0073d, 0x00f0073d, 0x00f2075c, 0x00f2075c, 0x00f2075c, 0x00f20765, 0x00f10782, 0x00f10782, 0x00f10782, 0x00f10796, 0x00f107ab, 0x00f107ab, 0x00f107ab, 0x00f208c7, 0x00f208d0, 0x00f208d0, 0x00f208d0, 0x00f308ec, 0x00f308ec, 0x00f308ec, 0x00ef08ed, 0x00e208f2, 0x00e208f2, 0x00e208f2, 0x00d308f2, 0x00c407f2, 0x00c407f2, 0x00c407f2, 0x00ac06f0, 0x00a506f0, 0x00a506f0, 0x00a506f0, 0x008705ef, 0x008705ef, 0x008705ef, 0x008c17f0, 0x009e51f4, 0x009e51f4, 0x009e51f4, 0x009d52f3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00cf0606, 0x00d00505, 0x00d00505, 0x00d00505, 0x00e80628, 0x00f00733, 0x00f00733, 0x00f00733, 0x00f10753, 0x00f10753, 0x00f10753, 0x00f1075c, 0x00f1077b, 0x00f1077b, 0x00f1077b, 0x00f10790, 0x00f107a6, 0x00f107a6, 0x00f107a6, 0x00f208c6, 0x00f208d0, 0x00f208d0, 0x00f208d0, 0x00f309ee, 0x00f309ee, 0x00f309ee, 0x00ee08ef, 0x00dc08f2, 0x00dc08f2, 0x00dc08f2, 0x00cc08f1, 0x00bb07f0, 0x00bb07f0, 0x00bb07f0, 0x00a106f0, 0x009906f0, 0x009906f0, 0x009906f0, 0x007a05ee, 0x007a05ee, 0x007a05ee, 0x008017f0, 0x009451f4, 0x009451f4, 0x009451f4, 0x009350f3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00cf0606, 0x00d00505, 0x00d00505, 0x00d00505, 0x00e80621, 0x00f00629, 0x00f00629, 0x00f00629, 0x00f1074a, 0x00f1074a, 0x00f1074a, 0x00f10754, 0x00f10773, 0x00f10773, 0x00f10773, 0x00f1078a, 0x00f207a2, 0x00f207a2, 0x00f207a2, 0x00f208c5, 0x00f208d0, 0x00f208d0, 0x00f208d0, 0x00f309f0, 0x00f309f0, 0x00f309f0, 0x00ec09f0, 0x00d708f2, 0x00d708f2, 0x00d708f2, 0x00c408f0, 0x00b207ef, 0x00b207ef, 0x00b207ef, 0x009606f0, 0x008e06f0, 0x008e06f0, 0x008e06f0, 0x006d05ee, 0x006d05ee, 0x006d05ee, 0x007417ef, 0x008b50f4, 0x008b50f4, 0x008b50f4, 0x008b50f3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00cf0606, 0x00d00505, 0x00d00505, 0x00d00505, 0x00e80621, 0x00f00629, 0x00f00629, 0x00f00629, 0x00f1074a, 0x00f1074a, 0x00f1074a, 0x00f10754, 0x00f10773, 0x00f10773, 0x00f10773, 0x00f1078a, 0x00f207a2, 0x00f207a2, 0x00f207a2, 0x00f208c5, 0x00f208d0, 0x00f208d0, 0x00f208d0, 0x00f309f0, 0x00f309f0, 0x00f309f0, 0x00ec09f0, 0x00d708f2, 0x00d708f2, 0x00d708f2, 0x00c408f0, 0x00b207ef, 0x00b207ef, 0x00b207ef, 0x009606f0, 0x008e06f0, 0x008e06f0, 0x008e06f0, 0x006d05ee, 0x006d05ee, 0x006d05ee, 0x007417ef, 0x008b50f4, 0x008b50f4, 0x008b50f4, 0x008b50f3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00cf0606, 0x00d00505, 0x00d00505, 0x00d00505, 0x00e80621, 0x00f00629, 0x00f00629, 0x00f00629, 0x00f1074a, 0x00f1074a, 0x00f1074a, 0x00f10754, 0x00f10773, 0x00f10773, 0x00f10773, 0x00f1078a, 0x00f207a2, 0x00f207a2, 0x00f207a2, 0x00f208c5, 0x00f208d0, 0x00f208d0, 0x00f208d0, 0x00f309f0, 0x00f309f0, 0x00f309f0, 0x00ec09f0, 0x00d708f2, 0x00d708f2, 0x00d708f2, 0x00c408f0, 0x00b207ef, 0x00b207ef, 0x00b207ef, 0x009606f0, 0x008e06f0, 0x008e06f0, 0x008e06f0, 0x006d05ee, 0x006d05ee, 0x006d05ee, 0x007417ef, 0x008b50f4, 0x008b50f4, 0x008b50f4, 0x008b50f3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00cd0606, 0x00d00505, 0x00d00505, 0x00d00505, 0x00de0606, 0x00e80606, 0x00e80606, 0x00e80606, 0x00ef0616, 0x00f1061a, 0x00f1061a, 0x00f1061a, 0x00fcc5d5, 0x00fcc5d5, 0x00fcc5d5, 0x00fcc5d7, 0x00fcc5de, 0x00fcc5de, 0x00fcc5de, 0x00f766bd, 0x00f2079b, 0x00f2079b, 0x00f2079b, 0x00f208c4, 0x00f208d1, 0x00f208d1, 0x00f208d1, 0x00f008f2, 0x00f008f2, 0x00f008f2, 0x00e708f2, 0x00ca08f2, 0x00ca08f2, 0x00ca08f2, 0x00db66f7, 0x00edc5fb, 0x00edc5fb, 0x00edc5fb, 0x00e6c5fb, 0x00e4c5fb, 0x00e4c5fb, 0x00e4c5fb, 0x005504ee, 0x005504ee, 0x005504ee, 0x005308ee, 0x004a15ee, 0x004a15ee, 0x004a15ee, 0x00572ef0, 0x006950f3, 0x006950f3, 0x006950f3, 0x00694ef4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d00404, 0x00d00505, 0x00d00505, 0x00d00505, 0x00e00606, 0x00f00606, 0x00f00606, 0x00f00606, 0x00f10612, 0x00f10616, 0x00f10616, 0x00f10616, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00f883cc, 0x00f20799, 0x00f20799, 0x00f20799, 0x00f208c4, 0x00f208d1, 0x00f208d1, 0x00f208d1, 0x00ef08f3, 0x00ef08f3, 0x00ef08f3, 0x00e508f3, 0x00c608f2, 0x00c608f2, 0x00c608f2, 0x00e283f8, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x004e04ee, 0x004e04ee, 0x004e04ee, 0x004804ee, 0x003603ec, 0x003603ec, 0x003603ec, 0x005029ef, 0x00694ff3, 0x00694ff3, 0x00694ff3, 0x006a51f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d00404, 0x00d00505, 0x00d00505, 0x00d00505, 0x00e00606, 0x00f00606, 0x00f00606, 0x00f00606, 0x00f10612, 0x00f10616, 0x00f10616, 0x00f10616, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00f883cc, 0x00f20799, 0x00f20799, 0x00f20799, 0x00f208c4, 0x00f208d1, 0x00f208d1, 0x00f208d1, 0x00ef08f3, 0x00ef08f3, 0x00ef08f3, 0x00e508f3, 0x00c608f2, 0x00c608f2, 0x00c608f2, 0x00e283f8, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x004e04ee, 0x004e04ee, 0x004e04ee, 0x004804ee, 0x003603ec, 0x003603ec, 0x003603ec, 0x005029ef, 0x00694ff3, 0x00694ff3, 0x00694ff3, 0x006a51f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d00404, 0x00d00505, 0x00d00505, 0x00d00505, 0x00e00606, 0x00f00606, 0x00f00606, 0x00f00606, 0x00f10612, 0x00f10616, 0x00f10616, 0x00f10616, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00f883cc, 0x00f20799, 0x00f20799, 0x00f20799, 0x00f208c4, 0x00f208d1, 0x00f208d1, 0x00f208d1, 0x00ef08f3, 0x00ef08f3, 0x00ef08f3, 0x00e508f3, 0x00c608f2, 0x00c608f2, 0x00c608f2, 0x00e283f8, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x004e04ee, 0x004e04ee, 0x004e04ee, 0x004804ee, 0x003603ec, 0x003603ec, 0x003603ec, 0x005029ef, 0x00694ff3, 0x00694ff3, 0x00694ff3, 0x006a51f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d00404, 0x00d00605, 0x00d00605, 0x00d00605, 0x00e10f06, 0x00f21807, 0x00f21807, 0x00f21807, 0x00dda9a5, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00f642dd, 0x00f308d2, 0x00f308d2, 0x00f308d2, 0x00e308f1, 0x00e308f1, 0x00e308f1, 0x00e038eb, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00eaeaea, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00cac4fb, 0x001b03ed, 0x001b03ed, 0x001b03ed, 0x003a29ef, 0x00584ff2, 0x00584ff2, 0x00584ff2, 0x005951f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d00404, 0x00d00605, 0x00d00605, 0x00d00605, 0x00e10f06, 0x00f21807, 0x00f21807, 0x00f21807, 0x00dda9a5, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00f642dd, 0x00f308d2, 0x00f308d2, 0x00f308d2, 0x00e308f1, 0x00e308f1, 0x00e308f1, 0x00e038eb, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00eaeaea, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00cac4fb, 0x001b03ed, 0x001b03ed, 0x001b03ed, 0x003a29ef, 0x00584ff2, 0x00584ff2, 0x00584ff2, 0x005951f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d00404, 0x00d00605, 0x00d00605, 0x00d00605, 0x00e10f06, 0x00f21807, 0x00f21807, 0x00f21807, 0x00dda9a5, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00f642dd, 0x00f308d2, 0x00f308d2, 0x00f308d2, 0x00e308f1, 0x00e308f1, 0x00e308f1, 0x00e038eb, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00eaeaea, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00cac4fb, 0x001b03ed, 0x001b03ed, 0x001b03ed, 0x003a29ef, 0x00584ff2, 0x00584ff2, 0x00584ff2, 0x005951f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d00d04, 0x00d00e06, 0x00d00e06, 0x00d00e06, 0x00e11706, 0x00f22007, 0x00f22007, 0x00f22007, 0x00ddaba6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00f542dd, 0x00f308d2, 0x00f308d2, 0x00f308d2, 0x00dd08f1, 0x00dd08f1, 0x00dd08f1, 0x00db38ea, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00eaeaea, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00c8c4fb, 0x001603ed, 0x001603ed, 0x001603ed, 0x003629ef, 0x00564ff2, 0x00564ff2, 0x00564ff2, 0x005551f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d02a08, 0x00d12907, 0x00d12907, 0x00d12907, 0x00e13108, 0x00f23908, 0x00f23908, 0x00f23908, 0x00ddb1a6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00f442de, 0x00f108d4, 0x00f108d4, 0x00f108d4, 0x00ca08f0, 0x00ca08f0, 0x00ca08f0, 0x00cd38ea, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00eaeaea, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00c4c4fb, 0x000503ec, 0x000503ec, 0x000503ec, 0x002a2aef, 0x004f50f2, 0x004f50f2, 0x004f50f2, 0x005151f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d02a08, 0x00d12907, 0x00d12907, 0x00d12907, 0x00e13108, 0x00f23908, 0x00f23908, 0x00f23908, 0x00ddb1a6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00f442de, 0x00f108d4, 0x00f108d4, 0x00f108d4, 0x00ca08f0, 0x00ca08f0, 0x00ca08f0, 0x00cd38ea, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00eaeaea, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00c4c4fb, 0x000503ec, 0x000503ec, 0x000503ec, 0x002a2aef, 0x004f50f2, 0x004f50f2, 0x004f50f2, 0x005151f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d02a08, 0x00d12907, 0x00d12907, 0x00d12907, 0x00e13108, 0x00f23908, 0x00f23908, 0x00f23908, 0x00ddb1a6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00f442de, 0x00f108d4, 0x00f108d4, 0x00f108d4, 0x00ca08f0, 0x00ca08f0, 0x00ca08f0, 0x00cd38ea, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00eaeaea, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00c4c4fb, 0x000503ec, 0x000503ec, 0x000503ec, 0x002a2aef, 0x004f50f2, 0x004f50f2, 0x004f50f2, 0x005151f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d04008, 0x00d23e08, 0x00d23e08, 0x00d23e08, 0x00e24809, 0x00f3520a, 0x00f3520a, 0x00f3520a, 0x00e88758, 0x00e59770, 0x00e59770, 0x00e59770, 0x00eaeaea, 0x00eaeaea, 0x00eaeaea, 0x00eaeaea, 0x00eaeaea, 0x00eaeaea, 0x00eaeaea, 0x00f1b6c1, 0x00f78297, 0x00f78297, 0x00f78297, 0x00f325c7, 0x00f108d6, 0x00f108d6, 0x00f108d6, 0x00a807f0, 0x00a807f0, 0x00a807f0, 0x009f1fed, 0x00806de1, 0x00806de1, 0x00806de1, 0x00b5abe6, 0x00eaeaea, 0x00eaeaea, 0x00eaeaea, 0x00eaeaea, 0x00eaeaea, 0x00eaeaea, 0x00eaeaea, 0x008186f6, 0x008186f6, 0x008186f6, 0x00646af4, 0x00040dec, 0x00040dec, 0x00040dec, 0x002a33ef, 0x004f59f2, 0x004f59f2, 0x004f59f2, 0x005159f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d05108, 0x00d35309, 0x00d35309, 0x00d35309, 0x00e35f0a, 0x00f46a0b, 0x00f46a0b, 0x00f46a0b, 0x00f45d0a, 0x00f4590a, 0x00f4590a, 0x00f4590a, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00e36e82, 0x00f0062f, 0x00f0062f, 0x00f0062f, 0x00f208b0, 0x00f208d8, 0x00f208d8, 0x00f208d8, 0x008706f0, 0x008706f0, 0x008706f0, 0x007105ef, 0x002a03ed, 0x002a03ed, 0x002a03ed, 0x00806de1, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00030eed, 0x00030eed, 0x00030eed, 0x000310ed, 0x000316ed, 0x000316ed, 0x000316ed, 0x00293cf0, 0x004f61f3, 0x004f61f3, 0x004f61f3, 0x005162f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d05108, 0x00d35309, 0x00d35309, 0x00d35309, 0x00e35f0a, 0x00f46a0b, 0x00f46a0b, 0x00f46a0b, 0x00f45d0a, 0x00f4590a, 0x00f4590a, 0x00f4590a, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00e36e82, 0x00f0062f, 0x00f0062f, 0x00f0062f, 0x00f208b0, 0x00f208d8, 0x00f208d8, 0x00f208d8, 0x008706f0, 0x008706f0, 0x008706f0, 0x007105ef, 0x002a03ed, 0x002a03ed, 0x002a03ed, 0x00806de1, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00030eed, 0x00030eed, 0x00030eed, 0x000310ed, 0x000316ed, 0x000316ed, 0x000316ed, 0x00293cf0, 0x004f61f3, 0x004f61f3, 0x004f61f3, 0x005162f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d05108, 0x00d35309, 0x00d35309, 0x00d35309, 0x00e35f0a, 0x00f46a0b, 0x00f46a0b, 0x00f46a0b, 0x00f45d0a, 0x00f4590a, 0x00f4590a, 0x00f4590a, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00e36e82, 0x00f0062f, 0x00f0062f, 0x00f0062f, 0x00f208b0, 0x00f208d8, 0x00f208d8, 0x00f208d8, 0x008706f0, 0x008706f0, 0x008706f0, 0x007105ef, 0x002a03ed, 0x002a03ed, 0x002a03ed, 0x00806de1, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00d6d6d6, 0x00030eed, 0x00030eed, 0x00030eed, 0x000310ed, 0x000316ed, 0x000316ed, 0x000316ed, 0x00293cf0, 0x004f61f3, 0x004f61f3, 0x004f61f3, 0x005162f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d4770d, 0x00d5790b, 0x00d5790b, 0x00d5790b, 0x00e6870c, 0x00f6950d, 0x00f6950d, 0x00f6950d, 0x00f68f0d, 0x00f68d0c, 0x00f68d0c, 0x00f68d0c, 0x00efa53c, 0x00efa53c, 0x00efa53c, 0x00efa23c, 0x00ee983c, 0x00ee983c, 0x00ee983c, 0x00f06e27, 0x00f24313, 0x00f24313, 0x00f24313, 0x00ef16b5, 0x00ed08e7, 0x00ed08e7, 0x00ed08e7, 0x002208ed, 0x002208ed, 0x002208ed, 0x001d0ced, 0x000d1bed, 0x000d1bed, 0x000d1bed, 0x002138eb, 0x003655e8, 0x003655e8, 0x003655e8, 0x003659e8, 0x00365be8, 0x00365be8, 0x00365be8, 0x00052dee, 0x00052dee, 0x00052dee, 0x00052eee, 0x000532ef, 0x000532ef, 0x000532ef, 0x002b53f2, 0x005174f5, 0x005174f5, 0x005174f5, 0x005173f2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d4840d, 0x00d6840c, 0x00d6840c, 0x00d6840c, 0x00e6930d, 0x00f7a20e, 0x00f7a20e, 0x00f7a20e, 0x00f79e0d, 0x00f79d0d, 0x00f79d0d, 0x00f79d0d, 0x00f7960d, 0x00f7960d, 0x00f7960d, 0x00f7920d, 0x00f6850d, 0x00f6850d, 0x00f6850d, 0x00f46e0c, 0x00f3560a, 0x00f3560a, 0x00f3560a, 0x00ee1ab7, 0x00ec08ec, 0x00ec08ec, 0x00ec08ec, 0x000308ec, 0x000308ec, 0x000308ec, 0x00030eec, 0x000422ed, 0x000422ed, 0x000422ed, 0x000528ed, 0x00052dee, 0x00052dee, 0x00052dee, 0x000533ee, 0x000535ee, 0x000535ee, 0x000535ee, 0x000537ee, 0x000537ee, 0x000537ee, 0x000538ee, 0x00053aef, 0x00053aef, 0x00053aef, 0x002b5af2, 0x00517af5, 0x00517af5, 0x00517af5, 0x00517bf2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d4840d, 0x00d6840c, 0x00d6840c, 0x00d6840c, 0x00e6930d, 0x00f7a20e, 0x00f7a20e, 0x00f7a20e, 0x00f79e0d, 0x00f79d0d, 0x00f79d0d, 0x00f79d0d, 0x00f7960d, 0x00f7960d, 0x00f7960d, 0x00f7920d, 0x00f6850d, 0x00f6850d, 0x00f6850d, 0x00f46e0c, 0x00f3560a, 0x00f3560a, 0x00f3560a, 0x00ee1ab7, 0x00ec08ec, 0x00ec08ec, 0x00ec08ec, 0x000308ec, 0x000308ec, 0x000308ec, 0x00030eec, 0x000422ed, 0x000422ed, 0x000422ed, 0x000528ed, 0x00052dee, 0x00052dee, 0x00052dee, 0x000533ee, 0x000535ee, 0x000535ee, 0x000535ee, 0x000537ee, 0x000537ee, 0x000537ee, 0x000538ee, 0x00053aef, 0x00053aef, 0x00053aef, 0x002b5af2, 0x00517af5, 0x00517af5, 0x00517af5, 0x00517bf2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d4840d, 0x00d6840c, 0x00d6840c, 0x00d6840c, 0x00e6930d, 0x00f7a20e, 0x00f7a20e, 0x00f7a20e, 0x00f79e0d, 0x00f79d0d, 0x00f79d0d, 0x00f79d0d, 0x00f7960d, 0x00f7960d, 0x00f7960d, 0x00f7920d, 0x00f6850d, 0x00f6850d, 0x00f6850d, 0x00f46e0c, 0x00f3560a, 0x00f3560a, 0x00f3560a, 0x00ee1ab7, 0x00ec08ec, 0x00ec08ec, 0x00ec08ec, 0x000308ec, 0x000308ec, 0x000308ec, 0x00030eec, 0x000422ed, 0x000422ed, 0x000422ed, 0x000528ed, 0x00052dee, 0x00052dee, 0x00052dee, 0x000533ee, 0x000535ee, 0x000535ee, 0x000535ee, 0x000537ee, 0x000537ee, 0x000537ee, 0x000538ee, 0x00053aef, 0x00053aef, 0x00053aef, 0x002b5af2, 0x00517af5, 0x00517af5, 0x00517af5, 0x00517bf2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d9ae0d, 0x00d8af0d, 0x00d8af0d, 0x00d8af0d, 0x00e8c20f, 0x00f9d610, 0x00f9d610, 0x00f9d610, 0x00fadb10, 0x00fadc10, 0x00fadc10, 0x00fadc10, 0x00fbe811, 0x00fbe811, 0x00fbe811, 0x00fbec11, 0x00fbf912, 0x00fbf912, 0x00fbf912, 0x00dff911, 0x00c3fa10, 0x00c3fa10, 0x00c3fa10, 0x0038f73a, 0x000df647, 0x000df647, 0x000df647, 0x000ddff6, 0x000ddff6, 0x000ddff6, 0x000cd0f5, 0x000aa1f3, 0x000aa1f3, 0x000aa1f3, 0x000a93f3, 0x000986f4, 0x000986f4, 0x000986f4, 0x00087af2, 0x000876f2, 0x000876f2, 0x000876f2, 0x00086ef1, 0x00086ef1, 0x00086ef1, 0x00086cf1, 0x000766f0, 0x000766f0, 0x000766f0, 0x002d7ef3, 0x005296f6, 0x005296f6, 0x005296f6, 0x005195f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d9ae0d, 0x00d8af0d, 0x00d8af0d, 0x00d8af0d, 0x00e8c20f, 0x00f9d610, 0x00f9d610, 0x00f9d610, 0x00fadb10, 0x00fadc10, 0x00fadc10, 0x00fadc10, 0x00fbe811, 0x00fbe811, 0x00fbe811, 0x00fbec11, 0x00fbf912, 0x00fbf912, 0x00fbf912, 0x00dff911, 0x00c3fa10, 0x00c3fa10, 0x00c3fa10, 0x0038f73a, 0x000df647, 0x000df647, 0x000df647, 0x000ddff6, 0x000ddff6, 0x000ddff6, 0x000cd0f5, 0x000aa1f3, 0x000aa1f3, 0x000aa1f3, 0x000a93f3, 0x000986f4, 0x000986f4, 0x000986f4, 0x00087af2, 0x000876f2, 0x000876f2, 0x000876f2, 0x00086ef1, 0x00086ef1, 0x00086ef1, 0x00086cf1, 0x000766f0, 0x000766f0, 0x000766f0, 0x002d7ef3, 0x005296f6, 0x005296f6, 0x005296f6, 0x005195f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d9ae0d, 0x00d8af0d, 0x00d8af0d, 0x00d8af0d, 0x00e8c20f, 0x00f9d610, 0x00f9d610, 0x00f9d610, 0x00fadb10, 0x00fadc10, 0x00fadc10, 0x00fadc10, 0x00fbe811, 0x00fbe811, 0x00fbe811, 0x00fbec11, 0x00fbf912, 0x00fbf912, 0x00fbf912, 0x00dff911, 0x00c3fa10, 0x00c3fa10, 0x00c3fa10, 0x0038f73a, 0x000df647, 0x000df647, 0x000df647, 0x000ddff6, 0x000ddff6, 0x000ddff6, 0x000cd0f5, 0x000aa1f3, 0x000aa1f3, 0x000aa1f3, 0x000a93f3, 0x000986f4, 0x000986f4, 0x000986f4, 0x00087af2, 0x000876f2, 0x000876f2, 0x000876f2, 0x00086ef1, 0x00086ef1, 0x00086ef1, 0x00086cf1, 0x000766f0, 0x000766f0, 0x000766f0, 0x002d7ef3, 0x005296f6, 0x005296f6, 0x005296f6, 0x005195f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d9b70d, 0x00d8b60e, 0x00d8b60e, 0x00d8b60e, 0x00e9ca0f, 0x00f9de11, 0x00f9de11, 0x00f9de11, 0x00f9e211, 0x00f8e311, 0x00f8e311, 0x00f8e311, 0x00f4ec11, 0x00f4ec11, 0x00f4ec11, 0x00f2ef11, 0x00e8f912, 0x00e8f912, 0x00e8f912, 0x00c7f910, 0x00a5f90f, 0x00a5f90f, 0x00a5f90f, 0x005cf85b, 0x0046f872, 0x0046f872, 0x0046f872, 0x0046e6f8, 0x0046e6f8, 0x0046e6f8, 0x0038dbf7, 0x000bb4f4, 0x000bb4f4, 0x000bb4f4, 0x000ba6f4, 0x000a98f4, 0x000a98f4, 0x000a98f4, 0x000989f3, 0x000985f2, 0x000985f2, 0x000985f2, 0x00097af2, 0x00097af2, 0x00097af2, 0x000878f1, 0x000871f1, 0x000871f1, 0x000871f1, 0x002d87f3, 0x00539df6, 0x00539df6, 0x00539df6, 0x00519df6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d9d011, 0x00d9cf0f, 0x00d9cf0f, 0x00d9cf0f, 0x00eae411, 0x00fbf912, 0x00fbf912, 0x00fbf912, 0x00f5fb12, 0x00f3fb12, 0x00f3fb12, 0x00f3fb12, 0x00dffb11, 0x00dffb11, 0x00dffb11, 0x00d3fb11, 0x00acfb10, 0x00acfb10, 0x00acfb10, 0x0079f90f, 0x0045f70d, 0x0045f70d, 0x0045f70d, 0x00d3fdc6, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00c7fcfd, 0x000ff2f8, 0x000ff2f8, 0x000ff2f8, 0x000ee1f7, 0x000dd1f6, 0x000dd1f6, 0x000dd1f6, 0x000cbcf4, 0x000bb6f4, 0x000bb6f4, 0x000bb6f4, 0x000aa2f4, 0x000aa2f4, 0x000aa2f4, 0x000a9ff4, 0x000995f3, 0x000995f3, 0x000995f3, 0x002fa5f5, 0x0054b5f7, 0x0054b5f7, 0x0054b5f7, 0x0055b2f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d9d011, 0x00d9cf0f, 0x00d9cf0f, 0x00d9cf0f, 0x00eae411, 0x00fbf912, 0x00fbf912, 0x00fbf912, 0x00f5fb12, 0x00f3fb12, 0x00f3fb12, 0x00f3fb12, 0x00dffb11, 0x00dffb11, 0x00dffb11, 0x00d3fb11, 0x00acfb10, 0x00acfb10, 0x00acfb10, 0x0079f90f, 0x0045f70d, 0x0045f70d, 0x0045f70d, 0x00d3fdc6, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00c7fcfd, 0x000ff2f8, 0x000ff2f8, 0x000ff2f8, 0x000ee1f7, 0x000dd1f6, 0x000dd1f6, 0x000dd1f6, 0x000cbcf4, 0x000bb6f4, 0x000bb6f4, 0x000bb6f4, 0x000aa2f4, 0x000aa2f4, 0x000aa2f4, 0x000a9ff4, 0x000995f3, 0x000995f3, 0x000995f3, 0x002fa5f5, 0x0054b5f7, 0x0054b5f7, 0x0054b5f7, 0x0055b2f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d9d011, 0x00d9cf0f, 0x00d9cf0f, 0x00d9cf0f, 0x00eae411, 0x00fbf912, 0x00fbf912, 0x00fbf912, 0x00f5fb12, 0x00f3fb12, 0x00f3fb12, 0x00f3fb12, 0x00dffb11, 0x00dffb11, 0x00dffb11, 0x00d3fb11, 0x00acfb10, 0x00acfb10, 0x00acfb10, 0x0079f90f, 0x0045f70d, 0x0045f70d, 0x0045f70d, 0x00d3fdc6, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00c7fcfd, 0x000ff2f8, 0x000ff2f8, 0x000ff2f8, 0x000ee1f7, 0x000dd1f6, 0x000dd1f6, 0x000dd1f6, 0x000cbcf4, 0x000bb6f4, 0x000bb6f4, 0x000bb6f4, 0x000aa2f4, 0x000aa2f4, 0x000aa2f4, 0x000a9ff4, 0x000995f3, 0x000995f3, 0x000995f3, 0x002fa5f5, 0x0054b5f7, 0x0054b5f7, 0x0054b5f7, 0x0055b2f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d4d411, 0x00d4d40f, 0x00d4d40f, 0x00d4d40f, 0x00e2e711, 0x00effa13, 0x00effa13, 0x00effa13, 0x00e3fa11, 0x00dffa11, 0x00dffa11, 0x00dffa11, 0x00c1fa10, 0x00c1fa10, 0x00c1fa10, 0x00b4fa10, 0x0089f90f, 0x0089f90f, 0x0089f90f, 0x005df80e, 0x0031f60d, 0x0031f60d, 0x0031f60d, 0x0072fa78, 0x0086fa99, 0x0086fa99, 0x0086fa99, 0x0086fbc8, 0x0086fbc8, 0x0086fbc8, 0x006afad0, 0x000ff5e8, 0x000ff5e8, 0x000ff5e8, 0x000eecef, 0x000ee4f7, 0x000ee4f7, 0x000ee4f7, 0x000dd2f6, 0x000dccf6, 0x000dccf6, 0x000dccf6, 0x000bb7f5, 0x000bb7f5, 0x000bb7f5, 0x000bb4f5, 0x000aa8f4, 0x000aa8f4, 0x000aa8f4, 0x002fb5f6, 0x0055c2f7, 0x0055c2f7, 0x0055c2f7, 0x0055c3f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d0d911, 0x00d0da0f, 0x00d0da0f, 0x00d0da0f, 0x00daeb11, 0x00e4fc13, 0x00e4fc13, 0x00e4fc13, 0x00d2fa11, 0x00ccfa10, 0x00ccfa10, 0x00ccfa10, 0x00a4f90f, 0x00a4f90f, 0x00a4f90f, 0x0096f90f, 0x0067f80e, 0x0067f80e, 0x0067f80e, 0x0042f70d, 0x001df60c, 0x001df60c, 0x001df60c, 0x0011f62b, 0x000df634, 0x000df634, 0x000df634, 0x000ef792, 0x000ef792, 0x000ef792, 0x000ef7a2, 0x000ef8d8, 0x000ef8d8, 0x000ef8d8, 0x000ff7e8, 0x000ff7f8, 0x000ff7f8, 0x000ff7f8, 0x000ee8f8, 0x000ee3f8, 0x000ee3f8, 0x000ee3f8, 0x000ccdf6, 0x000ccdf6, 0x000ccdf6, 0x000cc9f6, 0x000bbbf5, 0x000bbbf5, 0x000bbbf5, 0x0030c5f6, 0x0055cff8, 0x0055cff8, 0x0055cff8, 0x0055d0f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d0d911, 0x00d0da0f, 0x00d0da0f, 0x00d0da0f, 0x00daeb11, 0x00e4fc13, 0x00e4fc13, 0x00e4fc13, 0x00d2fa11, 0x00ccfa10, 0x00ccfa10, 0x00ccfa10, 0x00a4f90f, 0x00a4f90f, 0x00a4f90f, 0x0096f90f, 0x0067f80e, 0x0067f80e, 0x0067f80e, 0x0042f70d, 0x001df60c, 0x001df60c, 0x001df60c, 0x0011f62b, 0x000df634, 0x000df634, 0x000df634, 0x000ef792, 0x000ef792, 0x000ef792, 0x000ef7a2, 0x000ef8d8, 0x000ef8d8, 0x000ef8d8, 0x000ff7e8, 0x000ff7f8, 0x000ff7f8, 0x000ff7f8, 0x000ee8f8, 0x000ee3f8, 0x000ee3f8, 0x000ee3f8, 0x000ccdf6, 0x000ccdf6, 0x000ccdf6, 0x000cc9f6, 0x000bbbf5, 0x000bbbf5, 0x000bbbf5, 0x0030c5f6, 0x0055cff8, 0x0055cff8, 0x0055cff8, 0x0055d0f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00d0d911, 0x00d0da0f, 0x00d0da0f, 0x00d0da0f, 0x00daeb11, 0x00e4fc13, 0x00e4fc13, 0x00e4fc13, 0x00d2fa11, 0x00ccfa10, 0x00ccfa10, 0x00ccfa10, 0x00a4f90f, 0x00a4f90f, 0x00a4f90f, 0x0096f90f, 0x0067f80e, 0x0067f80e, 0x0067f80e, 0x0042f70d, 0x001df60c, 0x001df60c, 0x001df60c, 0x0011f62b, 0x000df634, 0x000df634, 0x000df634, 0x000ef792, 0x000ef792, 0x000ef792, 0x000ef7a2, 0x000ef8d8, 0x000ef8d8, 0x000ef8d8, 0x000ff7e8, 0x000ff7f8, 0x000ff7f8, 0x000ff7f8, 0x000ee8f8, 0x000ee3f8, 0x000ee3f8, 0x000ee3f8, 0x000ccdf6, 0x000ccdf6, 0x000ccdf6, 0x000cc9f6, 0x000bbbf5, 0x000bbbf5, 0x000bbbf5, 0x0030c5f6, 0x0055cff8, 0x0055cff8, 0x0055cff8, 0x0055d0f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00bbd911, 0x00bad90f, 0x00bad90f, 0x00bad90f, 0x00c1ea10, 0x00c8fa11, 0x00c8fa11, 0x00c8fa11, 0x00b2f910, 0x00abf910, 0x00abf910, 0x00abf910, 0x0082f90f, 0x0082f90f, 0x0082f90f, 0x0074f90f, 0x0048f70d, 0x0048f70d, 0x0048f70d, 0x002ef70d, 0x0013f70c, 0x0013f70c, 0x0013f70c, 0x000ff72b, 0x000ef734, 0x000ef734, 0x000ef734, 0x000ff67f, 0x000ff67f, 0x000ff67f, 0x000ff68e, 0x000ff7bf, 0x000ff7bf, 0x000ff7bf, 0x000ff7d2, 0x000ff7e5, 0x000ff7e5, 0x000ff7e5, 0x000ff5f2, 0x000ff4f6, 0x000ff4f6, 0x000ff4f6, 0x000ee5f8, 0x000ee5f8, 0x000ee5f8, 0x000ee1f7, 0x000dd3f6, 0x000dd3f6, 0x000dd3f6, 0x0031daf8, 0x0056e1fa, 0x0056e1fa, 0x0056e1fa, 0x0055e1fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, + 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00b2d911, 0x00b3d90f, 0x00b3d90f, 0x00b3d90f, 0x00b9e910, 0x00c0fa10, 0x00c0fa10, 0x00c0fa10, 0x00a8f910, 0x00a1f910, 0x00a1f910, 0x00a1f910, 0x0077f90f, 0x0077f90f, 0x0077f90f, 0x006af90f, 0x003ff70d, 0x003ff70d, 0x003ff70d, 0x0028f70d, 0x0010f70c, 0x0010f70c, 0x0010f70c, 0x000ff72b, 0x000ef734, 0x000ef734, 0x000ef734, 0x000ff679, 0x000ff679, 0x000ff679, 0x000ff688, 0x000ff7b8, 0x000ff7b8, 0x000ff7b8, 0x000ff7cb, 0x000ff7df, 0x000ff7df, 0x000ff7df, 0x000ff9f0, 0x000ff9f5, 0x000ff9f5, 0x000ff9f5, 0x000fecf8, 0x000fecf8, 0x000fecf8, 0x000fe8f8, 0x000ddbf6, 0x000ddbf6, 0x000ddbf6, 0x0032e0f8, 0x0056e6fa, 0x0056e6fa, 0x0056e6fa, 0x0055e6fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, + 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00b2d911, 0x00b3d90f, 0x00b3d90f, 0x00b3d90f, 0x00b9e910, 0x00c0fa10, 0x00c0fa10, 0x00c0fa10, 0x00a8f910, 0x00a1f910, 0x00a1f910, 0x00a1f910, 0x0077f90f, 0x0077f90f, 0x0077f90f, 0x006af90f, 0x003ff70d, 0x003ff70d, 0x003ff70d, 0x0028f70d, 0x0010f70c, 0x0010f70c, 0x0010f70c, 0x000ff72b, 0x000ef734, 0x000ef734, 0x000ef734, 0x000ff679, 0x000ff679, 0x000ff679, 0x000ff688, 0x000ff7b8, 0x000ff7b8, 0x000ff7b8, 0x000ff7cb, 0x000ff7df, 0x000ff7df, 0x000ff7df, 0x000ff9f0, 0x000ff9f5, 0x000ff9f5, 0x000ff9f5, 0x000fecf8, 0x000fecf8, 0x000fecf8, 0x000fe8f8, 0x000ddbf6, 0x000ddbf6, 0x000ddbf6, 0x0032e0f8, 0x0056e6fa, 0x0056e6fa, 0x0056e6fa, 0x0055e6fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, + 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00b2d911, 0x00b3d90f, 0x00b3d90f, 0x00b3d90f, 0x00b9e910, 0x00c0fa10, 0x00c0fa10, 0x00c0fa10, 0x00a8f910, 0x00a1f910, 0x00a1f910, 0x00a1f910, 0x0077f90f, 0x0077f90f, 0x0077f90f, 0x006af90f, 0x003ff70d, 0x003ff70d, 0x003ff70d, 0x0028f70d, 0x0010f70c, 0x0010f70c, 0x0010f70c, 0x000ff72b, 0x000ef734, 0x000ef734, 0x000ef734, 0x000ff679, 0x000ff679, 0x000ff679, 0x000ff688, 0x000ff7b8, 0x000ff7b8, 0x000ff7b8, 0x000ff7cb, 0x000ff7df, 0x000ff7df, 0x000ff7df, 0x000ff9f0, 0x000ff9f5, 0x000ff9f5, 0x000ff9f5, 0x000fecf8, 0x000fecf8, 0x000fecf8, 0x000fe8f8, 0x000ddbf6, 0x000ddbf6, 0x000ddbf6, 0x0032e0f8, 0x0056e6fa, 0x0056e6fa, 0x0056e6fa, 0x0055e6fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, + 0x00000000, 0x00000000, 0x00000000, 0x007f7f7f, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0095d90d, 0x0097d80e, 0x0097d80e, 0x0097d80e, 0x009ae90f, 0x009efa0f, 0x009efa0f, 0x009efa0f, 0x0085f80f, 0x007ef80f, 0x007ef80f, 0x007ef80f, 0x0055f90e, 0x0055f90e, 0x0055f90e, 0x004bf90e, 0x002bf70d, 0x002bf70d, 0x002bf70d, 0x001cf60e, 0x000df60e, 0x000df60e, 0x000df60e, 0x000df62a, 0x000df632, 0x000df632, 0x000df632, 0x000df766, 0x000df766, 0x000df766, 0x000ef772, 0x000ff79b, 0x000ff79b, 0x000ff79b, 0x000ff7b0, 0x000ef7c5, 0x000ef7c5, 0x000ef7c5, 0x000ff9dc, 0x000ff9e3, 0x000ff9e3, 0x000ff9e3, 0x000ff8f5, 0x000ff8f5, 0x000ff8f5, 0x000ff6f6, 0x000eeff8, 0x000eeff8, 0x000eeff8, 0x0033f3f9, 0x0058f7fb, 0x0058f7fb, 0x0058f7fb, 0x0059f6fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x007f7f7f, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0095d90d, 0x0097d80e, 0x0097d80e, 0x0097d80e, 0x009ae90f, 0x009efa0f, 0x009efa0f, 0x009efa0f, 0x0085f80f, 0x007ef80f, 0x007ef80f, 0x007ef80f, 0x0055f90e, 0x0055f90e, 0x0055f90e, 0x004bf90e, 0x002bf70d, 0x002bf70d, 0x002bf70d, 0x001cf60e, 0x000df60e, 0x000df60e, 0x000df60e, 0x000df62a, 0x000df632, 0x000df632, 0x000df632, 0x000df766, 0x000df766, 0x000df766, 0x000ef772, 0x000ff79b, 0x000ff79b, 0x000ff79b, 0x000ff7b0, 0x000ef7c5, 0x000ef7c5, 0x000ef7c5, 0x000ff9dc, 0x000ff9e3, 0x000ff9e3, 0x000ff9e3, 0x000ff8f5, 0x000ff8f5, 0x000ff8f5, 0x000ff6f6, 0x000eeff8, 0x000eeff8, 0x000eeff8, 0x0033f3f9, 0x0058f7fb, 0x0058f7fb, 0x0058f7fb, 0x0059f6fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x007f7f7f, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0095d90d, 0x0097d80e, 0x0097d80e, 0x0097d80e, 0x009ae90f, 0x009efa0f, 0x009efa0f, 0x009efa0f, 0x0085f80f, 0x007ef80f, 0x007ef80f, 0x007ef80f, 0x0055f90e, 0x0055f90e, 0x0055f90e, 0x004bf90e, 0x002bf70d, 0x002bf70d, 0x002bf70d, 0x001cf60e, 0x000df60e, 0x000df60e, 0x000df60e, 0x000df62a, 0x000df632, 0x000df632, 0x000df632, 0x000df766, 0x000df766, 0x000df766, 0x000ef772, 0x000ff79b, 0x000ff79b, 0x000ff79b, 0x000ff7b0, 0x000ef7c5, 0x000ef7c5, 0x000ef7c5, 0x000ff9dc, 0x000ff9e3, 0x000ff9e3, 0x000ff9e3, 0x000ff8f5, 0x000ff8f5, 0x000ff8f5, 0x000ff6f6, 0x000eeff8, 0x000eeff8, 0x000eeff8, 0x0033f3f9, 0x0058f7fb, 0x0058f7fb, 0x0058f7fb, 0x0059f6fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x007c7c7c, 0x007a7a7a, 0x007a7a7a, 0x007a7a7a, 0x007f7f7f, 0x007f7f7f, 0x007f7f7f, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0090d90d, 0x0090d90d, 0x0090d90d, 0x009adb18, 0x00a1e01f, 0x00a1e01f, 0x00a1e01f, 0x00a2ed20, 0x00a2fa20, 0x00a2fa20, 0x00a2fa20, 0x008bf920, 0x0084f920, 0x0084f920, 0x0084f920, 0x005ef91f, 0x005ef91f, 0x005ef91f, 0x0055f91f, 0x0038f81e, 0x0038f81e, 0x0038f81e, 0x002bf71f, 0x001ef720, 0x001ef720, 0x001ef720, 0x001ef739, 0x001ef741, 0x001ef741, 0x001ef741, 0x001ef870, 0x001ef870, 0x001ef870, 0x001ff87c, 0x0020f8a1, 0x0020f8a1, 0x0020f8a1, 0x0020f8b4, 0x001ff8c8, 0x001ff8c8, 0x001ff8c8, 0x0020f9de, 0x0020f9e4, 0x0020f9e4, 0x0020f9e4, 0x0020f9f6, 0x0020f9f6, 0x0020f9f6, 0x0020f7f6, 0x001ff2f8, 0x001ff2f8, 0x001ff2f8, 0x003bf5fa, 0x0058f8fb, 0x0058f8fb, 0x0058f8fb, 0x0057f8fa, 0x0055fbfb, 0x0055fbfb, 0x0055fbfb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x007f7f7f, 0x007f7f7f, 0x007f7f7f, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00686868, 0x00686868, 0x00686868, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0092d80e, 0x0092d80e, 0x0092d80e, 0x009de01f, 0x00c3fc58, 0x00c3fc58, 0x00c3fc58, 0x00b8fb58, 0x00aefb58, 0x00aefb58, 0x00aefb58, 0x009cfb57, 0x0096fb57, 0x0096fb57, 0x0096fb57, 0x007bfa56, 0x007bfa56, 0x007bfa56, 0x0075fa56, 0x0063fa56, 0x0063fa56, 0x0063fa56, 0x005df958, 0x0056f959, 0x0056f959, 0x0056f959, 0x0056f96c, 0x0056f972, 0x0056f972, 0x0056f972, 0x0057fa92, 0x0057fa92, 0x0057fa92, 0x0057fa9a, 0x0057fab5, 0x0057fab5, 0x0057fab5, 0x0057fac3, 0x0057fad1, 0x0057fad1, 0x0057fad1, 0x0058fbe3, 0x0058fbe9, 0x0058fbe9, 0x0058fbe9, 0x0058fbf9, 0x0058fbf9, 0x0058fbf9, 0x0058fbf9, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00686868, 0x00686868, 0x00686868, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0092d80e, 0x0092d80e, 0x0092d80e, 0x009de01f, 0x00c3fc58, 0x00c3fc58, 0x00c3fc58, 0x00b8fb58, 0x00aefb58, 0x00aefb58, 0x00aefb58, 0x009cfb57, 0x0096fb57, 0x0096fb57, 0x0096fb57, 0x007bfa56, 0x007bfa56, 0x007bfa56, 0x0075fa56, 0x0063fa56, 0x0063fa56, 0x0063fa56, 0x005df958, 0x0056f959, 0x0056f959, 0x0056f959, 0x0056f96c, 0x0056f972, 0x0056f972, 0x0056f972, 0x0057fa92, 0x0057fa92, 0x0057fa92, 0x0057fa9a, 0x0057fab5, 0x0057fab5, 0x0057fab5, 0x0057fac3, 0x0057fad1, 0x0057fad1, 0x0057fad1, 0x0058fbe3, 0x0058fbe9, 0x0058fbe9, 0x0058fbe9, 0x0058fbf9, 0x0058fbf9, 0x0058fbf9, 0x0058fbf9, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00686868, 0x00686868, 0x00686868, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0092d80e, 0x0092d80e, 0x0092d80e, 0x009de01f, 0x00c3fc58, 0x00c3fc58, 0x00c3fc58, 0x00b8fb58, 0x00aefb58, 0x00aefb58, 0x00aefb58, 0x009cfb57, 0x0096fb57, 0x0096fb57, 0x0096fb57, 0x007bfa56, 0x007bfa56, 0x007bfa56, 0x0075fa56, 0x0063fa56, 0x0063fa56, 0x0063fa56, 0x005df958, 0x0056f959, 0x0056f959, 0x0056f959, 0x0056f96c, 0x0056f972, 0x0056f972, 0x0056f972, 0x0057fa92, 0x0057fa92, 0x0057fa92, 0x0057fa9a, 0x0057fab5, 0x0057fab5, 0x0057fab5, 0x0057fac3, 0x0057fad1, 0x0057fad1, 0x0057fad1, 0x0058fbe3, 0x0058fbe9, 0x0058fbe9, 0x0058fbe9, 0x0058fbf9, 0x0058fbf9, 0x0058fbf9, 0x0058fbf9, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00686868, 0x00686868, 0x00686868, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0087d80e, 0x0087d80e, 0x0087d80e, 0x008ee016, 0x00a4fa34, 0x00a4fa34, 0x00a4fa34, 0x0098fa33, 0x008cf933, 0x008cf933, 0x008cf933, 0x0077f932, 0x0071f932, 0x0071f932, 0x0071f932, 0x0055f832, 0x0055f832, 0x0055f832, 0x004ff831, 0x003df831, 0x003df831, 0x003df831, 0x0037f834, 0x0032f737, 0x0032f737, 0x0032f737, 0x0032f74b, 0x0032f752, 0x0032f752, 0x0032f752, 0x0033f974, 0x0033f974, 0x0033f974, 0x0033f97c, 0x0033f898, 0x0033f898, 0x0033f898, 0x0033f8a8, 0x0033f9b8, 0x0033f9b8, 0x0033f9b8, 0x0033facd, 0x0034fad4, 0x0034fad4, 0x0034fad4, 0x0034f9e7, 0x0034f9e7, 0x0034f9e7, 0x0033f9ea, 0x0033f9f1, 0x0033f9f1, 0x0033f9f1, 0x0033f9f4, 0x0033f9f6, 0x0033f9f6, 0x0033f9f6, 0x004ffaf9, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00747474, 0x00747474, 0x00747474, 0x00747474, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00686868, 0x00686868, 0x00686868, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007cd90d, 0x007cd90d, 0x007cd90d, 0x007ee00e, 0x0086f90f, 0x0086f90f, 0x0086f90f, 0x0079f80f, 0x006bf80e, 0x006bf80e, 0x006bf80e, 0x0053f70d, 0x004cf70d, 0x004cf70d, 0x004cf70d, 0x002ef70d, 0x002ef70d, 0x002ef70d, 0x0028f70d, 0x0016f60c, 0x0016f60c, 0x0016f60c, 0x0012f611, 0x000df615, 0x000df615, 0x000df615, 0x000ef62a, 0x000ef631, 0x000ef631, 0x000ef631, 0x000ef855, 0x000ef855, 0x000ef855, 0x000ef85e, 0x000ef67c, 0x000ef67c, 0x000ef67c, 0x000ef78d, 0x000ef89f, 0x000ef89f, 0x000ef89f, 0x000ff9b7, 0x000ff9bf, 0x000ff9bf, 0x000ff9bf, 0x000ff7d6, 0x000ff7d6, 0x000ff7d6, 0x000ff7da, 0x000ff8e9, 0x000ff8e9, 0x000ff8e9, 0x000ff8ee, 0x000ff9f3, 0x000ff9f3, 0x000ff9f3, 0x0046faf8, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00686868, 0x00686868, 0x00686868, 0x00696969, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00686868, 0x00686868, 0x00686868, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007cd90d, 0x007cd90d, 0x007cd90d, 0x007ee00e, 0x0086f90f, 0x0086f90f, 0x0086f90f, 0x0079f80f, 0x006bf80e, 0x006bf80e, 0x006bf80e, 0x0053f70d, 0x004cf70d, 0x004cf70d, 0x004cf70d, 0x002ef70d, 0x002ef70d, 0x002ef70d, 0x0028f70d, 0x0016f60c, 0x0016f60c, 0x0016f60c, 0x0012f611, 0x000df615, 0x000df615, 0x000df615, 0x000ef62a, 0x000ef631, 0x000ef631, 0x000ef631, 0x000ef855, 0x000ef855, 0x000ef855, 0x000ef85e, 0x000ef67c, 0x000ef67c, 0x000ef67c, 0x000ef78d, 0x000ef89f, 0x000ef89f, 0x000ef89f, 0x000ff9b7, 0x000ff9bf, 0x000ff9bf, 0x000ff9bf, 0x000ff7d6, 0x000ff7d6, 0x000ff7d6, 0x000ff7da, 0x000ff8e9, 0x000ff8e9, 0x000ff8e9, 0x000ff8ee, 0x000ff9f3, 0x000ff9f3, 0x000ff9f3, 0x0046faf8, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00686868, 0x00686868, 0x00686868, 0x00696969, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00686868, 0x00686868, 0x00686868, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007cd90d, 0x007cd90d, 0x007cd90d, 0x007ee00e, 0x0086f90f, 0x0086f90f, 0x0086f90f, 0x0079f80f, 0x006bf80e, 0x006bf80e, 0x006bf80e, 0x0053f70d, 0x004cf70d, 0x004cf70d, 0x004cf70d, 0x002ef70d, 0x002ef70d, 0x002ef70d, 0x0028f70d, 0x0016f60c, 0x0016f60c, 0x0016f60c, 0x0012f611, 0x000df615, 0x000df615, 0x000df615, 0x000ef62a, 0x000ef631, 0x000ef631, 0x000ef631, 0x000ef855, 0x000ef855, 0x000ef855, 0x000ef85e, 0x000ef67c, 0x000ef67c, 0x000ef67c, 0x000ef78d, 0x000ef89f, 0x000ef89f, 0x000ef89f, 0x000ff9b7, 0x000ff9bf, 0x000ff9bf, 0x000ff9bf, 0x000ff7d6, 0x000ff7d6, 0x000ff7d6, 0x000ff7da, 0x000ff8e9, 0x000ff8e9, 0x000ff8e9, 0x000ff8ee, 0x000ff9f3, 0x000ff9f3, 0x000ff9f3, 0x0046faf8, 0x0057fafa, 0x0057fafa, 0x0057fafa, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00686868, 0x00686868, 0x00686868, 0x00696969, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00666666, 0x00666666, 0x00666666, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x00717171, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007bd90d, 0x007bd90d, 0x007bd90d, 0x007fe10d, 0x0084f611, 0x0084f611, 0x0084f611, 0x006e9f46, 0x00698a53, 0x00698a53, 0x00698a53, 0x00638a53, 0x00618953, 0x00618953, 0x00618953, 0x002ff60d, 0x002ff60d, 0x002ff60d, 0x0043b935, 0x00558952, 0x00558952, 0x00558952, 0x00548954, 0x00538955, 0x00538955, 0x00538955, 0x0035b746, 0x000df633, 0x000df633, 0x000df633, 0x000df655, 0x000df655, 0x000df655, 0x0035b963, 0x0053896d, 0x0053896d, 0x0053896d, 0x00538971, 0x00538a75, 0x00538a75, 0x00538a75, 0x0035b995, 0x0011f6bf, 0x0011f6bf, 0x0011f6bf, 0x00538982, 0x00538982, 0x00538982, 0x00538a83, 0x00538a86, 0x00538a86, 0x00538a86, 0x00469f9c, 0x0011f6f2, 0x0011f6f2, 0x0011f6f2, 0x0044fbf6, 0x0055fbfb, 0x0055fbfb, 0x0055fbfb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00666666, 0x00666666, 0x00666666, 0x00696969, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x006e6e6e, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x006e6e6e, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x006e6e6e, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x006e6e6e, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x007a7a7a, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x006e6e6e, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x006e6e6e, 0x00686868, 0x00686868, 0x00686868, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x006e6e6e, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x007a7a7a, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x006e6e6e, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x006e6e6e, 0x00686868, 0x00686868, 0x00686868, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x006e6e6e, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x007a7a7a, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x006e6e6e, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x006e6e6e, 0x00686868, 0x00686868, 0x00686868, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00696969, 0x00696969, 0x006e6e6e, 0x007a7a7a, 0x007a7a7a, 0x007a7a7a, 0x007b7b7b, 0x007f7f7f, 0x007f7f7f, 0x007f7f7f, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006d6d6d, 0x00666666, 0x00666666, 0x00666666, 0x006d6d6d, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x007b7b7b, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00696969, 0x00696969, 0x006e6e6e, 0x007a7a7a, 0x007a7a7a, 0x007a7a7a, 0x007b7b7b, 0x007f7f7f, 0x007f7f7f, 0x007f7f7f, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00808080, 0x007f7f7f, 0x007f7f7f, 0x007f7f7f, 0x007b7b7b, 0x007a7a7a, 0x007a7a7a, 0x007a7a7a, 0x006e6e6e, 0x00696969, 0x00696969, 0x00696969, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007f7f7f, 0x00808080, 0x00808080, 0x00808080, 0x00747474, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007f7f7f, 0x00808080, 0x00808080, 0x00808080, 0x00747474, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007f7f7f, 0x00808080, 0x00808080, 0x00808080, 0x00747474, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x007b7b7b, 0x00747474, 0x00747474, 0x00747474, 0x00787878, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00707070, 0x00747474, 0x00747474, 0x00747474, 0x007b7b7b, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00747474, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x007a7a7a, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00747474, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x007a7a7a, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00747474, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x007a7a7a, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00808080, 0x00747474, 0x00686868, 0x00686868, 0x00686868, 0x00666666, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006d6d6d, 0x00666666, 0x00666666, 0x00666666, 0x006d6d6d, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006f6f6f, 0x007f7f7f, 0x007f7f7f, 0x007f7f7f, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00666666, 0x00666666, 0x00666666, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006e6e6e, 0x006d6d6d, 0x00666666, 0x00666666, 0x00666666, 0x006d6d6d, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00696969, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00696969, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00696969, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00696969, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00686868, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00666666, 0x00686868, 0x00686868, 0x00686868, 0x00747474, 0x00808080, 0x00808080, 0x00808080, 0x007f7f7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 +}; \ No newline at end of file diff --git a/usermods/usermod_v2_gc9a01_display/readme.md b/usermods/usermod_v2_gc9a01_display/readme.md new file mode 100644 index 0000000000..95ed880b88 --- /dev/null +++ b/usermods/usermod_v2_gc9a01_display/readme.md @@ -0,0 +1,123 @@ +# GC9A01 Display Usermod + +A fully-featured WLED usermod providing comprehensive visual interface on GC9A01 240x240 round TFT displays with complete rotary encoder integration. + +Written by copilot AI with user interaction. + +## Features + +### Visual Interface + +- **Circular Design**: Optimized for 240x240 round displays with blue bezel theming +- **Real-time Clock**: Large digital clock display (12/24-hour formats) +- **WiFi Signal Strength**: Visual signal strength indicator with 4-level bars (25%, 50%, 75%, 100%) +- **Power Status**: Dynamic "OFF [switch] ON" layout with contextual text +- **Brightness Arc**: Semicircular brightness visualization +- **Color Controls**: Three color buttons (FX, BG, CS) with live color preview and automatic updates +- **Effect Display**: Current effect name +- **Palette Display**: Current palette name +- **Startup Logo**: WLED logo display during initialization + +### Modes + +- **Sleep Mode**: Automatic display sleep after configurable timeout (5-300 seconds) +- **Clock Mode**: Alternative to sleep - shows clock instead of turning off display +- **Wake on Interaction**: Automatic wake on rotary encoder use or button press +- **Unified Timeout**: Single configurable timeout controls both sleep and clock modes +- **Backlight Control**: PWM-based brightness control (0-100%) + +### Performance Features + +- **State Caching**: Minimal redraws using comprehensive change detection +- **Smart Updates**: Automatic color button updates when colors change from any source (web UI, API, etc.) +- **Non-blocking Updates**: Asynchronous display updates following Four Line Display ALT pattern +- **Memory Optimized**: Efficient memory usage with proper cleanup +- **Debug Support**: Comprehensive debug logging with WLED macros + +## Hardware Requirements + +- ESP32 development board +- GC9A01 240x240 TFT display (round) +- Optional: Rotary encoder (usermod_v2_rotary_encoder_ui_ALT) + +## Wiring + +### GC9A01 Display + +| GC9A01 Pin | ESP32 Pin | Function | Description | +|------------|-----------|-------------|-------------| +| VCC | 3.3V | Power | 3.3V power supply | +| GND | GND | Ground | Common ground | +| SCL/SCLK | GPIO18 | SPI Clock | SPI clock signal | +| SDA/MOSI | GPIO23 | SPI MOSI | SPI data out | +| RES/RST | GPIO17 | Reset | Display reset | +| DC | GPIO16 | Data/Command| Data/Command control | +| CS | GPIO5 | Chip Select | SPI chip select | +| BL | GPIO4 | Backlight | Backlight control | + +**Note**: Pin assignments can be customized via build flags (see Configuration section). + +### Basic Setup + +Add to your `platformio_override.ini`: + +```ini +[env:esp32_gc9a01] +extends = env:esp32dev +upload_speed = 460800 +monitor_speed = 115200 +custom_usermods = + usermod_v2_gc9a01_display + usermod_v2_rotary_encoder_ui_ALT +build_flags = ${common.build_flags} ${esp32_idf_V4.build_flags} + -D FLD_SPI_DEFAULT + -D HW_PIN_SCLKSPI=18 + -D HW_PIN_MOSISPI=23 + -D FLD_PIN_DC=5 + -D FLD_PIN_CS=15 + -D FLD_PIN_RESET=17 + -D WLED_DEBUG + -D WLED_DISABLE_BROWNOUT_DET + -D USERMOD_GC9A01_DISPLAY + -DUSER_SETUP_LOADED=1 + -DGC9A01_DRIVER=1 + -DTFT_WIDTH=240 + -DTFT_HEIGHT=240 + -DTFT_MOSI=23 + -DTFT_SCLK=18 + -DTFT_CS=5 + -DTFT_DC=15 + -DTFT_RST=17 + -DTFT_BL=26 + -DTOUCH_CS=-1 + -DLOAD_GLCD=1 + -DLOAD_FONT2=1 + -DLOAD_FONT4=1 + -DLOAD_FONT6=1 + -DLOAD_FONT7=1 + -DLOAD_FONT8=1 + -DLOAD_GFXFF=1 + -DSMOOTH_FONT=1 + -DSPI_FREQUENCY=27000000 +# Rotary encoder settings + -D ENCODER_DT_PIN=25 + -D ENCODER_CLK_PIN=32 + -D ENCODER_SW_PIN=27 +``` + +### Debug Information + +Enable debug output with `-D WLED_DEBUG` to see detailed logging: + +- Display initialization status and TFT_eSPI configuration +- Update timing information and redraw triggers +- State change detection (brightness, effect, colors, etc.) +- Sleep/wake events and timeout tracking +- Error conditions and recovery attempts + +Debug output appears in Serial Monitor at 115200 baud. + +## Change log + +- **v1** (2025-10-06): + - First public release diff --git a/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp b/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp new file mode 100644 index 0000000000..6d5a0cdab4 --- /dev/null +++ b/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp @@ -0,0 +1,1057 @@ +// WLED usermod for GC9A01 240x240 TFT display +// Designed to work with TFT_eSPI library and compatible displays +// Inspired by 4-line display usermod and rotary encoder usermod +// Written by AI copilot based on user request + +#include "usermod_v2_gc9a01_display.h" +#include "logo_data.h" + +#ifdef USERMOD_GC9A01_DISPLAY + +// Static instance definition for singleton pattern +UsermodGC9A01Display* UsermodGC9A01Display::instance = nullptr; + +// Private method implementations +void UsermodGC9A01Display::initDisplay() { + if (!displayEnabled) return; + + DEBUG_PRINTLN(F("[GC9A01] Initializing TFT display...")); + + // Configure backlight pin + #ifdef TFT_BL + pinMode(TFT_BL, OUTPUT); + digitalWrite(TFT_BL, HIGH); + DEBUG_PRINTF("[GC9A01] Backlight pin %d set to HIGH\n", TFT_BL); + #endif + + // Initialize TFT + tft.init(); + DEBUG_PRINTLN(F("[GC9A01] TFT init() completed")); + + tft.setRotation(flip ? 2 : 0); // Apply flip setting (0 or 180 degrees) + tft.fillScreen(TFT_BLACK); + setBacklight(backlight); // Apply backlight brightness + + DEBUG_PRINTLN(F("[GC9A01] Display initialization complete")); + + // Set up welcome screen + showingWelcomeScreen = true; + welcomeScreenStartTime = millis(); + drawWLEDLogo(); +} + +void UsermodGC9A01Display::redraw(bool forceRedraw) { + if (!displayEnabled) return; + + bool needRedraw = false; + unsigned long now = millis(); + + // Handle welcome screen transition + if (showingWelcomeScreen) { + if (now - welcomeScreenStartTime > 2000) { // Show logo for 2 seconds + showingWelcomeScreen = false; + forceRedraw = true; + DEBUG_PRINTLN(F("[GC9A01] Transitioning from logo to main interface")); + } else { + // Still showing welcome screen - don't redraw + return; + } + } + + // Handle active overlay mode (always takes priority) + if (activeOverlayMode >= 0) { + if (now >= overlayUntil) { + // Overlay has expired - return to main/clock interface + DEBUG_PRINTF("[GC9A01] Overlay mode %d expired - returning to main interface\n", activeOverlayMode); + activeOverlayMode = -1; + overlayUntil = 0; + forceRedraw = true; + needRedraw = true; // Force redraw to show main screen + lastRedraw = now; // Reset sleep timer when returning to main screen + } else { + // Overlay is still active - check if state changed + if (knownBrightness != bri) { + if (displayTurnedOff) needRedraw = true; + else { knownBrightness = bri; drawMainInterface(activeOverlayMode); lastRedraw = now; return; } + } else if (knownMode != effectCurrent) { + if (displayTurnedOff) needRedraw = true; + else { knownMode = effectCurrent; drawMainInterface(activeOverlayMode); lastRedraw = now; return; } + } else if (knownPalette != effectPalette) { + if (displayTurnedOff) needRedraw = true; + else { knownPalette = effectPalette; drawMainInterface(activeOverlayMode); lastRedraw = now; return; } + } else if (knownEffectSpeed != effectSpeed) { + if (displayTurnedOff) needRedraw = true; + else { knownEffectSpeed = effectSpeed; drawMainInterface(activeOverlayMode); lastRedraw = now; return; } + } else if (knownEffectIntensity != effectIntensity) { + if (displayTurnedOff) needRedraw = true; + else { knownEffectIntensity = effectIntensity; drawMainInterface(activeOverlayMode); lastRedraw = now; return; } + } + + if (!needRedraw) return; // Overlay active, no changes, nothing to do + } + } + + // Get current segment colors (same as web UI csl0, csl1, csl2) + uint32_t currentColor = strip.getMainSegment().colors[0]; // csl0 - Primary/FX + uint32_t currentBgColor = strip.getMainSegment().colors[1]; // csl1 - Secondary/BG + uint32_t currentCustomColor = strip.getMainSegment().colors[2]; // csl2 - Tertiary/CS + + // Check for state changes (Four Line Display ALT pattern) + if (forceRedraw) { + needRedraw = true; + } else if (knownMode != effectCurrent || knownPalette != effectPalette) { + if (displayTurnedOff) needRedraw = true; + else { + knownMode = effectCurrent; + knownPalette = effectPalette; + drawMainInterface(-1); + lastRedraw = now; + return; + } + } else if (knownColor != currentColor || knownBgColor != currentBgColor || knownCustomColor != currentCustomColor) { + if (displayTurnedOff) needRedraw = true; + else { + knownColor = currentColor; + knownBgColor = currentBgColor; + knownCustomColor = currentCustomColor; + drawMainInterface(-1); + lastRedraw = now; + return; + } + } else if (knownBrightness != bri) { + if (displayTurnedOff) needRedraw = true; + else { + knownBrightness = bri; + drawMainInterface(-1); + lastRedraw = now; + return; + } + } else if (knownEffectSpeed != effectSpeed) { + if (displayTurnedOff) needRedraw = true; + else { + knownEffectSpeed = effectSpeed; + drawMainInterface(-1); + lastRedraw = now; + return; + } + } else if (knownEffectIntensity != effectIntensity) { + if (displayTurnedOff) needRedraw = true; + else { + knownEffectIntensity = effectIntensity; + drawMainInterface(-1); + lastRedraw = now; + return; + } + } + + // Nothing changed - check what to do + if (!needRedraw) { + // Turn off display after configured timeout (or show clock if enabled) + if (sleepMode && displayTimeout > 0 && !displayTurnedOff && lastRedraw != ULONG_MAX && (now - lastRedraw > displayTimeout)) { + sleepOrClock(true); + } else if (displayTurnedOff && clockMode) { + // Keep updating clock while display is "off" (showing clock) + static unsigned long lastClockUpdate = 0; + if (now - lastClockUpdate > 30000) { + drawClockScreen(); + lastClockUpdate = now; + } + } + return; + } + + // State changed or need to redraw - wake up if sleeping and redraw main screen + lastRedraw = now; + wakeDisplayFromSleep(); + + // Update all known values + knownBrightness = bri; + knownMode = effectCurrent; + knownPalette = effectPalette; + knownEffectSpeed = effectSpeed; + knownEffectIntensity = effectIntensity; + knownColor = currentColor; + knownBgColor = currentBgColor; + knownCustomColor = currentCustomColor; + + // Do full redraw of main screen (not overlay) + drawMainInterface(-1); +} + +void UsermodGC9A01Display::drawMainInterface(int overlayMode) { + tft.fillScreen(TFT_BLACK); + + showingClock = false; // Clear clock flag - we're showing main interface + + // Determine bezel color based on mode + uint16_t bezelColor = TFT_BLUE; // Default blue bezel for normal mode + bool showBrightnessRing = true; + bool showAllElements = true; + String overlayTitle = ""; + uint16_t overlayColor = TFT_WHITE; + + // Modify display for overlay modes (>= 0) + if (overlayMode >= 0) { + showAllElements = false; + + // Use the stored overlayText if available, otherwise use default titles + overlayTitle = (overlayText.length() > 0) ? overlayText : "Mode"; + + switch (overlayMode) { + case 0: // Brightness mode + bezelColor = TFT_WHITE; + overlayColor = TFT_WHITE; + showBrightnessRing = true; + break; + case 1: // Effect mode + bezelColor = TFT_CYAN; + overlayColor = TFT_CYAN; + showBrightnessRing = false; + break; + case 2: // Speed mode + bezelColor = TFT_GREEN; + overlayColor = TFT_GREEN; + showBrightnessRing = false; + break; + case 3: // Intensity mode + bezelColor = TFT_ORANGE; + overlayColor = TFT_ORANGE; + showBrightnessRing = false; + break; + case 4: // Palette mode + bezelColor = TFT_MAGENTA; + overlayColor = TFT_MAGENTA; + showBrightnessRing = false; + break; + case 99: // Network info mode + bezelColor = TFT_GREEN; + overlayColor = TFT_GREEN; + showBrightnessRing = false; + showAllElements = false; + break; + } + } + + // Get static segment colors + uint32_t fxColor = strip.getMainSegment().colors[0]; // Primary color + uint8_t fx_r = (fxColor >> 16) & 0xFF; + uint8_t fx_g = (fxColor >> 8) & 0xFF; + uint8_t fx_b = fxColor & 0xFF; + uint16_t fxColor565 = tft.color565(fx_r, fx_g, fx_b); + + uint32_t bgColor = strip.getMainSegment().colors[1]; // Secondary color + uint8_t bg_r = (bgColor >> 16) & 0xFF; + uint8_t bg_g = (bgColor >> 8) & 0xFF; + uint8_t bg_b = bgColor & 0xFF; + uint16_t bgColor565 = tft.color565(bg_r, bg_g, bg_b); + + // Draw outer circle border + tft.drawCircle(120, 120, 115, bezelColor); + tft.drawCircle(120, 120, 114, bezelColor); + + // Special handling for network info + if (overlayMode == 99) { + tft.setTextDatum(MC_DATUM); + bool wifiConnected = (WiFi.status() == WL_CONNECTED); + int wifiRSSI = wifiConnected ? WiFi.RSSI() : -100; + + tft.fillCircle(120, 40, 12, TFT_BLUE); + drawWiFiIcon(120, 36, wifiConnected, wifiRSSI); + + tft.setTextColor(TFT_WHITE, TFT_BLACK); + tft.setTextDatum(MC_DATUM); + + if (wifiConnected) { + String ipStr = WiFi.localIP().toString(); + tft.drawString(ipStr, 120, 110, 4); + String macStr = WiFi.macAddress(); + tft.drawString(macStr, 120, 140, 2); + } else { + tft.drawString("NOT CONNECTED", 120, 110, 4); + String macStr = WiFi.macAddress(); + tft.drawString(macStr, 120, 140, 2); + } + return; + } + + // Draw brightness ring from 8 o'clock to 4 o'clock (only on main screen or brightness overlay) + int brightnessPercent = (bri > 0) ? map(bri, 0, 255, 0, 100) : 0; + + if (showBrightnessRing && (overlayMode == -1 || overlayMode == 0) && brightnessPercent >= 0 && brightnessPercent <= 100) { + float startAngle = 240; // 8 o'clock + float arcLength = 240; + float progressAngle = (brightnessPercent > 0) ? map(brightnessPercent, 0, 100, 0, arcLength) : 0; + + // Draw background arc + for (float angle = 0; angle < arcLength; angle += 6) { + float currentAngle = startAngle + angle; + float rad = radians(currentAngle - 90); + + for (int ringWidth = 0; ringWidth < 3; ringWidth++) { + int radius = 108 - ringWidth; + int x = 120 + radius * cos(rad); + int y = 120 + radius * sin(rad); + + if (x >= 0 && x < 240 && y >= 0 && y < 240) { + tft.drawPixel(x, y, TFT_DARKGREY); + } + } + } + + // Draw progress arc + if (brightnessPercent > 0 && progressAngle > 0) { + for (float angle = 0; angle < progressAngle; angle += 3) { + float currentAngle = startAngle + angle; + float rad = radians(currentAngle - 90); + + for (int ringWidth = 0; ringWidth < 3; ringWidth++) { + int radius = 108 - ringWidth; + int x = 120 + radius * cos(rad); + int y = 120 + radius * sin(rad); + + if (x >= 0 && x < 240 && y >= 0 && y < 240) { + tft.drawPixel(x, y, TFT_WHITE); + } + } + } + } + } + + // Show overlay-specific content if in overlay mode + if (overlayMode >= 0 && overlayTitle.length() > 0) { + // Draw overlay title at top (white color, moved down 20px total) + tft.setTextColor(TFT_WHITE, TFT_BLACK); + tft.setTextDatum(MC_DATUM); + tft.drawString(overlayTitle, 120, 70, 4); + + // Get current value and calculate percentage based on overlay mode + int currentValue = 0; + int maxValue = 255; + String valueText = ""; + + switch (overlayMode) { + case 1: // Effect mode + currentValue = effectCurrent; + maxValue = strip.getModeCount() - 1; + if (currentValue < strip.getModeCount()) { + char lineBuffer[64]; + extractModeName(currentValue, JSON_mode_names, lineBuffer, 63); + // Remove note symbol from effect names (special character prefix) + String modeName = String(lineBuffer); + if (modeName.length() > 0 && modeName.charAt(0) == ' ' && modeName.charAt(1) > 127) { + modeName = modeName.substring(5); // Remove 5-byte UTF-8 note symbol + } + if (modeName.length() > 12) modeName = modeName.substring(0, 10) + ".."; + valueText = modeName; + } + break; + case 2: // Speed mode + currentValue = effectSpeed; + valueText = String(map(effectSpeed, 0, 255, 0, 100)) + "%"; + break; + case 3: // Intensity mode + currentValue = effectIntensity; + valueText = String(map(effectIntensity, 0, 255, 0, 100)) + "%"; + break; + case 4: // Palette mode + currentValue = effectPalette; + maxValue = getPaletteCount() - 1; + if (currentValue < getPaletteCount()) { + char lineBuffer[64]; + extractModeName(currentValue, JSON_palette_names, lineBuffer, 63); + // Remove "* " prefix from dynamic palettes + String paletteName = String(lineBuffer); + if (paletteName.startsWith("* ")) { + paletteName = paletteName.substring(2); + } + if (paletteName.length() > 12) paletteName = paletteName.substring(0, 10) + ".."; + valueText = paletteName; + } else { + valueText = "Palette " + String(effectPalette); + } + break; + default: // Fallback + currentValue = bri; + valueText = String(map(bri, 0, 255, 0, 100)) + "%"; + break; + } + + // Draw value arc from 8 o'clock to 4 o'clock (only for percentage-based overlays) + // Effect (1) and Palette (4) overlays don't need arcs as they show names + bool showArc = (overlayMode != 1 && overlayMode != 4); + + if (showArc) { + int valuePercent = map(currentValue, 0, maxValue, 0, 100); + float startAngle = 240; // 8 o'clock + float arcLength = 240; + float progressAngle = (valuePercent > 0) ? map(valuePercent, 0, 100, 0, arcLength) : 0; + + // Draw background arc (darkgrey) + for (float angle = 0; angle < arcLength; angle += 6) { + float currentAngle = startAngle + angle; + float rad = radians(currentAngle - 90); + + for (int ringWidth = 0; ringWidth < 3; ringWidth++) { + int radius = 108 - ringWidth; + int x = 120 + radius * cos(rad); + int y = 120 + radius * sin(rad); + + if (x >= 0 && x < 240 && y >= 0 && y < 240) { + tft.drawPixel(x, y, TFT_DARKGREY); + } + } + } + + // Draw progress arc (white progress) + if (valuePercent > 0 && progressAngle > 0) { + for (float angle = 0; angle < progressAngle; angle += 3) { + float currentAngle = startAngle + angle; + float rad = radians(currentAngle - 90); + + for (int ringWidth = 0; ringWidth < 3; ringWidth++) { + int radius = 108 - ringWidth; + int x = 120 + radius * cos(rad); + int y = 120 + radius * sin(rad); + + if (x >= 0 && x < 240 && y >= 0 && y < 240) { + tft.drawPixel(x, y, TFT_WHITE); + } + } + } + } + } + + // Draw value text in center + // Use smaller font (4) for Effect and Palette names, large font (6) for percentages + int fontSize = (overlayMode == 1 || overlayMode == 4) ? 4 : 6; + int yOffset = (overlayMode == 1 || overlayMode == 4) ? 120 : 130; // Slightly higher for smaller font + tft.setTextColor(TFT_WHITE, TFT_BLACK); + tft.setTextDatum(MC_DATUM); + tft.drawString(valueText, 120, yOffset, fontSize); + + // Don't draw main screen elements - return early + return; + } + + // === Main screen elements (only drawn when NOT in overlay mode) === + + // WiFi icon + tft.setTextDatum(MC_DATUM); + bool wifiConnected = (WiFi.status() == WL_CONNECTED); + int wifiRSSI = wifiConnected ? WiFi.RSSI() : -100; + + tft.fillCircle(120, 40, 12, TFT_BLUE); + drawWiFiIcon(120, 36, wifiConnected, wifiRSSI); + + // Time display + tft.setTextColor(TFT_WHITE, TFT_BLACK); + tft.setTextDatum(MC_DATUM); + + String timeStr = "--:--"; + if (localTime != 0) { + uint8_t currentHour = hour(localTime); + uint8_t currentMinute = minute(localTime); + + timeStr = ""; + if (currentHour < 10) timeStr += "0"; + timeStr += String(currentHour); + timeStr += ":"; + if (currentMinute < 10) timeStr += "0"; + timeStr += String(currentMinute); + } + tft.drawString(timeStr, 120, 95, 6); + + // Power switch + bool powerState = (bri > 0); + tft.setTextColor(TFT_WHITE, TFT_BLACK); + tft.setTextDatum(MC_DATUM); + + if (powerState) { + tft.fillRoundRect(105, 123, 30, 15, 7, TFT_GREEN); + tft.fillCircle(125, 130, 6, TFT_WHITE); + tft.drawString("ON", 150, 130, 2); + } else { + tft.fillRoundRect(105, 123, 30, 15, 7, TFT_RED); + tft.fillCircle(115, 130, 6, TFT_WHITE); + tft.drawString("OFF", 90, 130, 2); + } + + // CSL2 button (tertiary color) + uint32_t csl2Color = strip.getMainSegment().colors[2]; + uint8_t csl2_r = (csl2Color >> 16) & 0xFF; + uint8_t csl2_g = (csl2Color >> 8) & 0xFF; + uint8_t csl2_b = csl2Color & 0xFF; + uint16_t csl2Color565 = tft.color565(csl2_r, csl2_g, csl2_b); + + tft.setTextDatum(TL_DATUM); + tft.drawString("CS", 94, 154, 2); + tft.setTextDatum(MC_DATUM); + tft.fillCircle(120, 162, 8, csl2Color565); + tft.drawCircle(120, 162, 8, TFT_WHITE); + + // Effect name + tft.setTextColor(TFT_CYAN, TFT_BLACK); + String effectName = ""; + if (currentPlaylist >= 0) { + effectName = "Playlist"; + } else if (knownMode < strip.getModeCount() && knownMode >= 0) { + char modeBuffer[64]; + strncpy_P(modeBuffer, strip.getModeData(knownMode), sizeof(modeBuffer)-1); + modeBuffer[sizeof(modeBuffer)-1] = '\0'; + + char* sepPtr = strpbrk(modeBuffer, "@;,|="); + if (sepPtr) *sepPtr = '\0'; + + effectName = String(modeBuffer); + + String cleanName = ""; + for (int i = 0; i < effectName.length(); i++) { + char c = effectName.charAt(i); + if (c >= 32 && c <= 126 && c != '@') { + cleanName += c; + } + } + effectName = cleanName; + + if (effectName.length() == 0) { + effectName = "Effect " + String(knownMode); + } + } else { + effectName = "Unknown"; + } + + if (effectName.length() > 12) { + effectName = effectName.substring(0, 9) + "..."; + } + tft.drawString(effectName, 120, 190, 2); + + // Color indicators + tft.setTextColor(TFT_WHITE, TFT_BLACK); + + // FX indicator at 7:30 position + int fx_x = 120 + 90 * cos(radians(225 - 90)); + int fx_y = 120 + 90 * sin(radians(225 - 90)); + tft.drawString("FX", fx_x, fx_y - 15, 2); + tft.fillCircle(fx_x, fx_y, 8, fxColor565); + tft.drawCircle(fx_x, fx_y, 8, TFT_WHITE); + + // BG indicator at 4:30 position + int bg_x = 120 + 90 * cos(radians(135 - 90)); + int bg_y = 120 + 90 * sin(radians(135 - 90)); + tft.drawString("BG", bg_x, bg_y - 15, 2); + tft.fillCircle(bg_x, bg_y, 8, bgColor565); + tft.drawCircle(bg_x, bg_y, 8, TFT_WHITE); + + // Brightness percentage + tft.setTextColor(TFT_WHITE, TFT_BLACK); + String brightStr = String(brightnessPercent) + "%"; + tft.drawString(brightStr, 120, 210, 2); +} + +// ===== WiFi Icon Drawing ===== + +void UsermodGC9A01Display::drawMainScreen() { + tft.fillScreen(TFT_BLACK); + + // Set text datum to middle center for all text + tft.setTextDatum(MC_DATUM); + + // Draw outer circle border + tft.drawCircle(120, 120, 110, TFT_DARKGREY); + + // Status ring at top (12 o'clock position) + drawStatusBar(); + + // Power state in center-top area + if (knownPowerState) { + tft.setTextColor(TFT_GREEN, TFT_BLACK); + tft.fillCircle(120, 80, 15, TFT_DARKGREEN); + tft.drawString("ON", 120, 80, 2); + } else { + tft.setTextColor(TFT_RED, TFT_BLACK); + tft.fillCircle(120, 80, 15, TFT_MAROON); + tft.drawString("OFF", 120, 80, 2); + } + + // Main effect name in center + tft.setTextColor(TFT_CYAN, TFT_BLACK); + String effectName = ""; + if (knownMode < strip.getModeCount()) { + effectName = JSON_mode_names[knownMode]; + } else { + effectName = "Unknown"; + } + if (effectName.length() > 12) { + effectName = effectName.substring(0, 9) + "..."; + } + tft.drawString(effectName, 120, 120, 2); + + // Brightness arc/circle at bottom + tft.setTextColor(TFT_YELLOW, TFT_BLACK); + tft.drawString("Bright", 120, 150, 1); + + // Convert brightness from 0-255 to 0-100% for display + int brightnessPercent = map(knownBrightness, 0, 255, 0, 100); + tft.drawString(String(brightnessPercent) + "%", 120, 165, 2); + + // Draw brightness indicator arc (bottom semicircle) - simplified for performance + int brightness_angle = (knownBrightness > 0) ? map(knownBrightness, 0, 255, 180, 360) : 180; + + // Simplified arc drawing with bounds checking + for (int angle = 180; angle <= brightness_angle && angle <= 360; angle += 10) { // Less dense: angle += 10 + float rad = radians(angle); + int x = 120 + 95 * cos(rad); + int y = 120 + 95 * sin(rad); + + // Bounds checking to prevent crashes + if (x >= 2 && x < 238 && y >= 2 && y < 238) { // Safe margins + tft.fillCircle(x, y, 2, TFT_YELLOW); + } + } + + // Color preview in center (small circle) + if (knownPowerState) { + uint32_t color = strip.getPixelColor(0); + uint8_t r = (color >> 16) & 0xFF; + uint8_t g = (color >> 8) & 0xFF; + uint8_t b = color & 0xFF; + uint16_t color565 = tft.color565(r, g, b); + tft.fillCircle(120, 200, 12, color565); + tft.drawCircle(120, 200, 12, TFT_WHITE); + } +} + +void UsermodGC9A01Display::drawStatusBar() { + // WiFi status (top left arc position) + tft.setTextDatum(TL_DATUM); // Top Left datum for status items + bool wifiConnected = (WiFi.status() == WL_CONNECTED); + int wifiRSSI = wifiConnected ? WiFi.RSSI() : -100; + + // Use blue background to match the screen bezel + tft.fillCircle(50, 50, 8, TFT_BLUE); + + drawWiFiIcon(50, 46, wifiConnected, wifiRSSI); // Moved up 2px (was 48) + + // Time display (top right arc position) + tft.setTextDatum(TR_DATUM); // Top Right datum + tft.setTextColor(TFT_WHITE, TFT_BLACK); + tft.drawString("Time", 190, 45, 1); + tft.fillCircle(190, 50, 6, TFT_BLUE); +} + +void UsermodGC9A01Display::drawWiFiIcon(int x, int y, bool connected, int rssi) { + // Draw WiFi icon as signal strength bars (like mobile phone signal) + // More recognizable than arcs on small displays + + uint16_t strongColor, weakColor; + int signalStrength = 0; + + if (connected) { + strongColor = TFT_WHITE; + weakColor = TFT_DARKGREY; + + // Convert RSSI to signal strength (0-4 bars) + if (rssi >= -50) signalStrength = 4; // Excellent (100%) + else if (rssi >= -60) signalStrength = 3; // Good (75%) + else if (rssi >= -70) signalStrength = 2; // Fair (50%) + else if (rssi >= -80) signalStrength = 1; // Poor (25%) + else signalStrength = 0; // Very poor + } else { + strongColor = TFT_DARKGREY; + weakColor = TFT_DARKGREY; + signalStrength = 0; + } + + // Draw 4 signal bars of increasing height (like phone signal indicator) + // Bar 1 (shortest, leftmost) + uint16_t bar1Color = (signalStrength >= 1) ? strongColor : weakColor; + tft.fillRect(x - 6, y + 6, 2, 2, bar1Color); + + // Bar 2 + uint16_t bar2Color = (signalStrength >= 2) ? strongColor : weakColor; + tft.fillRect(x - 3, y + 4, 2, 4, bar2Color); + + // Bar 3 + uint16_t bar3Color = (signalStrength >= 3) ? strongColor : weakColor; + tft.fillRect(x, y + 2, 2, 6, bar3Color); + + // Bar 4 (tallest, rightmost) + uint16_t bar4Color = (signalStrength >= 4) ? strongColor : weakColor; + tft.fillRect(x + 3, y, 2, 8, bar4Color); + + // Draw X if disconnected + if (!connected) { + tft.drawLine(x - 6, y, x + 6, y + 8, TFT_RED); + tft.drawLine(x + 6, y, x - 6, y + 8, TFT_RED); + } +} + +void UsermodGC9A01Display::drawWLEDLogo() { + // Display the WLED logo bitmap centered on the display + // The bitmap is 120x120 pixels, centered on 240x240 display (60px offset on each side) + + DEBUG_PRINTLN(F("[GC9A01] Drawing WLED logo bitmap...")); + + // Clear screen with black background + tft.fillScreen(TFT_BLACK); + + // Calculate center position for 120x120 logo on 240x240 display + const int LOGO_SIZE = 120; + const int OFFSET_X = (240 - LOGO_SIZE) / 2; // 60px offset + const int OFFSET_Y = (240 - LOGO_SIZE) / 2; // 60px offset + + // Set drawing window to the logo area (centered) + tft.setAddrWindow(OFFSET_X, OFFSET_Y, LOGO_SIZE, LOGO_SIZE); + + // Start data transmission + tft.startWrite(); + + // Process each pixel in the bitmap + for (int i = 0; i < 14400; i++) { // 120 * 120 = 14,400 pixels + uint32_t pixel = pgm_read_dword(&epd_bitmap_[i]); + + // Extract RGB components from 32-bit ARGB (format: 0x00RRGGBB) + uint8_t r = (pixel >> 16) & 0xFF; + uint8_t g = (pixel >> 8) & 0xFF; + uint8_t b = pixel & 0xFF; + + // Convert to 16-bit RGB565 format + uint16_t color = tft.color565(r, g, b); + + // Write pixel to display + tft.pushColor(color); + } + + // End data transmission + tft.endWrite(); + + DEBUG_PRINTLN(F("[GC9A01] WLED logo bitmap rendered successfully - 120x120 centered")); +} + +void UsermodGC9A01Display::setBrightness(uint8_t bri) { + // Legacy method - map 0-255 brightness to 0-100% backlight + uint8_t percent = map(bri, 0, 255, 0, 100); + setBacklight(percent); +} + +void UsermodGC9A01Display::setBacklight(uint8_t percent) { + backlight = min(percent, (uint8_t)100); // Clamp to 0-100% range + uint8_t pwm = map(backlight, 0, 100, 0, 255); // Map to PWM range (0-255) + analogWrite(TFT_BL, pwm); + DEBUG_PRINTF("[GC9A01] Backlight set to %d%% (PWM: %d)\n", backlight, pwm); +} + +void UsermodGC9A01Display::drawClockScreen() { + // Minimalist clock-only display for idle mode + tft.fillScreen(TFT_BLACK); + + showingClock = true; // Mark that we're showing clock (for rotary encoder state reset) + + // Draw blue bezel circle (same as main screen) + tft.drawCircle(120, 120, 119, TFT_BLUE); + tft.drawCircle(120, 120, 118, TFT_BLUE); + + // Get current time + updateLocalTime(); + int hrs = hour(localTime); + int mins = minute(localTime); + bool isPmTime = isPM(localTime); + + // Convert to 12-hour format if needed + if (clock12hour) { + if (hrs == 0) { + hrs = 12; // Midnight = 12 AM + } else if (hrs > 12) { + hrs = hrs - 12; // Convert to 12-hour + } + } + + // Draw time in large font at center + tft.setTextDatum(MC_DATUM); // Middle center + tft.setTextColor(TFT_WHITE, TFT_BLACK); + + // Format time string + char timeStr[10]; + sprintf(timeStr, "%02d:%02d", hrs, mins); + + tft.drawString(timeStr, 120, 120, 7); // Large font + + // Draw AM/PM indicator if 12-hour format + if (clock12hour) { + tft.setTextColor(TFT_CYAN, TFT_BLACK); + tft.drawString(isPmTime ? "PM" : "AM", 120, 160, 4); + } + + // Draw WiFi icon at top + bool wifiConnected = (WiFi.status() == WL_CONNECTED); + int wifiRSSI = wifiConnected ? WiFi.RSSI() : -100; + drawWiFiIcon(120, 30, wifiConnected, wifiRSSI); + + DEBUG_PRINTLN(F("[GC9A01] Clock screen drawn")); +} + +void UsermodGC9A01Display::sleepOrClock(bool enabled) { + if (enabled) { + displayTurnedOff = true; + lastRedraw = ULONG_MAX; // Reset sleep timer + if (clockMode) { + // Show clock instead of turning off + showingClock = true; + drawClockScreen(); + DEBUG_PRINTLN(F("[GC9A01] Timeout reached - showing clock")); + } else { + // Turn off backlight (sleep) + showingClock = false; + analogWrite(TFT_BL, 0); + DEBUG_PRINTLN(F("[GC9A01] Timeout reached - sleeping (backlight off)")); + } + } else { + // Wake up display + displayTurnedOff = false; + showingClock = false; + setBacklight(backlight); + DEBUG_PRINTF("[GC9A01] Display waking - restoring backlight to %d%%\n", backlight); + } +} + +void UsermodGC9A01Display::sleepDisplay() { + analogWrite(TFT_BL, 0); // Turn off backlight completely + displayTurnedOff = true; + lastRedraw = ULONG_MAX; // Reset sleep timer - will start again after next interaction + DEBUG_PRINTLN(F("[GC9A01] Display sleeping - backlight off, sleep timer reset")); +} + +// Rotary encoder integration methods - removed unused methods + +bool UsermodGC9A01Display::wakeDisplayFromSleep() { + if (displayTurnedOff) { + setBacklight(backlight); // Restore configured backlight level + displayTurnedOff = false; + needsRedraw = true; + lastRedraw = millis(); // Reset sleep timeout to prevent immediate sleep + + // Force update of all known values to ensure display shows current state + knownBrightness = 255; // Force brightness update + knownMode = 255; // Force effect update + knownPowerState = !knownPowerState; // Force power state update + + DEBUG_PRINTF("[GC9A01] Display waking from sleep - restoring backlight to %d%%\n", backlight); + return true; // Was sleeping + } + return false; // Was already awake +} + +// Interface methods for rotary encoder usermod (matching 4-line display pattern) +bool UsermodGC9A01Display::wakeDisplay() { + return wakeDisplayFromSleep(); // Return true if was sleeping +} + +void UsermodGC9A01Display::updateRedrawTime() { + // Called when encoder is rotated - extend overlay timeout + if (activeOverlayMode >= 0) { + // We're in overlay mode - extend the timeout + overlayUntil = millis() + overlayInactivityTimeout; + DEBUG_PRINTF("[GC9A01] Overlay timeout extended to %lu (encoder activity detected)\n", overlayUntil); + needsRedraw = true; // Trigger redraw to show updated values + } + lastRedraw = millis(); // Prevent display sleep timeout +} + +void UsermodGC9A01Display::overlay(const char* line1, long showHowLong, byte glyphType) { + if (!displayEnabled) { + DEBUG_PRINTLN(F("[GC9A01] Overlay called but display disabled")); + return; + } + + DEBUG_PRINTF("[GC9A01] *** OVERLAY CALLED *** : '%s' for %ld ms (glyph: %d)\n", line1 ? line1 : "NULL", showHowLong, glyphType); + + // Wake display if sleeping (like 4-line display) + if (displayTurnedOff) { + wakeDisplayFromSleep(); + DEBUG_PRINTLN(F("[GC9A01] Display was sleeping - woken up for overlay")); + } + + // Map glyph type to overlay mode + // Rotary encoder states: 0=Brightness, 1=Speed, 2=Intensity, 3=Palette, 4=Effect, 5=Hue, 6=Sat, 7=CCT, 8=Preset, 9-11=Custom + int overlayMode = 0; // Default to brightness + + // Map glyphType to overlay modes based on rotary encoder glyph assignments + // Rotary encoder calls changeState() with these glyph types for each state + switch (glyphType) { + case 1: overlayMode = 0; break; // Sun glyph → Brightness (encoder state 0) + case 2: overlayMode = 2; break; // Skip forward glyph → Speed (encoder state 1) + case 3: overlayMode = 3; break; // Fire glyph → Intensity (encoder state 2) + case 4: overlayMode = 4; break; // Custom palette glyph → Palette (encoder state 3) + case 5: overlayMode = 1; break; // Puzzle piece glyph → Effect (encoder state 4) + case 7: overlayMode = 0; break; // Brush glyph → Hue (encoder state 5) - show as brightness + case 8: overlayMode = 0; break; // Contrast glyph → Saturation (encoder state 6) - show as brightness + case 10: overlayMode = 0; break; // Star glyph → CCT/custom (encoder states 7,9-11) - show as brightness + case 11: overlayMode = 0; break; // Heart glyph → Preset (encoder state 8) - show as brightness + case 12: overlayMode = 99; break; // Network glyph → Network info + default: overlayMode = 0; break; // Fallback to brightness + } + + // Activate overlay mode and store the text + activeOverlayMode = overlayMode; + overlayText = String(line1 ? line1 : ""); // Store the text for display + overlayUntil = millis() + overlayInactivityTimeout; // Use longer timeout for user interaction + lastRedraw = millis(); // Start/reset sleep timer on user interaction + + // Draw the overlay interface immediately + drawMainInterface(overlayMode); + + DEBUG_PRINTF("[GC9A01] Overlay mode %d activated with text '%s' - will expire at %lu\n", overlayMode, overlayText.c_str(), overlayUntil); +} + +// Public method implementations (Usermod interface) +void UsermodGC9A01Display::setup() { + DEBUG_PRINTLN(F("")); + DEBUG_PRINTLN(F("=== GC9A01 Display Usermod ===")); + DEBUG_PRINTLN(F("[GC9A01] Usermod successfully registered and setup() called")); + DEBUG_PRINTF("[GC9A01] Usermod ID: %d\n", getId()); + DEBUG_PRINTF("[GC9A01] Instance pointer: %p\n", this); + DEBUG_PRINTF("[GC9A01] Static instance: %p\n", instance); + DEBUG_PRINT(F("[GC9A01] TFT_eSPI library version: ")); + DEBUG_PRINTLN(TFT_ESPI_VERSION); + + initDisplay(); + + DEBUG_PRINTLN(F("[GC9A01] Display initialization complete")); + needsRedraw = true; + lastRedraw = millis(); // Initialize timeout tracking + + // Initialize known values to force initial update + knownMode = 255; // Force initial effect name update + knownBrightness = 255; // Force initial brightness update +} + +void UsermodGC9A01Display::loop() { + // Follow the proven pattern from Four Line Display ALT + if (!displayEnabled || strip.isUpdating()) return; + + unsigned long now = millis(); + if (now < nextUpdate) return; + + nextUpdate = now + refreshRate; + + redraw(false); +} + +void UsermodGC9A01Display::addToJsonInfo(JsonObject& root) { + JsonObject user = root["u"]; + if (user.isNull()) user = root.createNestedObject("u"); + + JsonArray temp = user.createNestedArray(F("GC9A01 Display")); + temp.add(displayEnabled ? F("Enabled") : F("Disabled")); + temp.add(F(" ")); +} + +void UsermodGC9A01Display::readFromJsonState(JsonObject& root) { + if (root[F("gc9a01")] != nullptr) { + if (root[F("gc9a01")][F("on")] != nullptr) { + bool newState = root[F("gc9a01")][F("on")]; + if (newState != displayEnabled) { + displayEnabled = newState; + if (displayEnabled) { + wakeDisplay(); + } else { + sleepDisplay(); + } + } + } + } +} + +void UsermodGC9A01Display::addToJsonState(JsonObject& root) { + JsonObject gc9a01 = root.createNestedObject(F("gc9a01")); + gc9a01[F("on")] = displayEnabled; +} + +bool UsermodGC9A01Display::readFromConfig(JsonObject& root) { + JsonObject top = root[FPSTR("GC9A01")]; + if (top.isNull()) { + return false; + } + + displayEnabled = top[FPSTR("enabled")] | displayEnabled; + sleepMode = top[FPSTR("sleepMode")] | sleepMode; + clockMode = top[FPSTR("clockMode")] | clockMode; + clock12hour = top[FPSTR("clock12hour")] | clock12hour; + flip = top[FPSTR("flip")] | flip; + + // Convert seconds from UI to milliseconds for internal use + // Clamp to 5-300 seconds range (5 sec min, 5 min max) + uint16_t timeoutSeconds = top[FPSTR("screenTimeOutSec")] | (displayTimeout / 1000); + timeoutSeconds = max((uint16_t)5, min((uint16_t)300, timeoutSeconds)); + displayTimeout = timeoutSeconds * 1000; + + // Load backlight setting (0-100% range) + uint8_t newBacklight = top[FPSTR("backlight")] | backlight; + if (newBacklight != backlight) { + setBacklight(newBacklight); + } + + return true; +} + +void UsermodGC9A01Display::addToConfig(JsonObject& root) { + JsonObject top = root.createNestedObject(FPSTR("GC9A01")); + top[FPSTR("enabled")] = displayEnabled; + top[FPSTR("sleepMode")] = sleepMode; + // Convert milliseconds to seconds for UI display + top[FPSTR("screenTimeOutSec")] = displayTimeout / 1000; + top[FPSTR("clockMode")] = clockMode; + top[FPSTR("clock12hour")] = clock12hour; + top[FPSTR("flip")] = flip; + top[FPSTR("backlight")] = backlight; +} + +void UsermodGC9A01Display::appendConfigData() { + oappend(SET_F("addInfo('GC9A01:enabled', 1, 'Enable/disable display');")); + oappend(SET_F("addInfo('GC9A01:sleepMode', 1, 'Enable sleep mode after timeout');")); + oappend(SET_F("addInfo('GC9A01:screenTimeOutSec', 1, 'Screen timeout in seconds (5-300 range, clamped on save)');")); + oappend(SET_F("addInfo('GC9A01:clockMode', 1, 'Show clock only when idle (bypasses sleep)');")); + oappend(SET_F("addInfo('GC9A01:clock12hour', 1, 'Checked=12H format (9:01 PM), Unchecked=24H format (21:01)');")); + oappend(SET_F("addInfo('GC9A01:flip', 1, 'Rotate display 180 degrees (requires reboot)');")); + oappend(SET_F("addInfo('GC9A01:backlight', 1, 'Backlight brightness (0-100%, default 75%)');")); +} + +const char* UsermodGC9A01Display::getEncoderModeName(uint8_t mode) { + // For rotary encoder integration - just provide names for overlay display + const char* modeNames[] = {"Brightness", "Effect", "Speed", "Intensity", "Palette"}; + if (mode < 5) return modeNames[mode]; + return "Unknown"; +} + +void UsermodGC9A01Display::drawCurrentModeIndicator() { + // No longer needed - overlay handles mode display +} + +void UsermodGC9A01Display::drawModeOverlay() { + // No longer needed - overlay handles mode display +} + +bool UsermodGC9A01Display::isOverlayActive() { + return (activeOverlayMode >= 0 && millis() < overlayUntil); +} + +int UsermodGC9A01Display::getActiveOverlayMode() { + if (millis() >= overlayUntil) { + return -1; // Overlay has expired + } + return activeOverlayMode; +} + +bool UsermodGC9A01Display::isDisplayAsleep() { + return displayTurnedOff || showingClock; // Consider clock mode as "asleep" for rotary encoder state reset +} + +uint16_t UsermodGC9A01Display::getId() { + return USERMOD_ID_GC9A01_DISPLAY; +} + +// Registration +UsermodGC9A01Display gc9a01DisplayUsermod; +REGISTER_USERMOD(gc9a01DisplayUsermod); + +#endif // USERMOD_GC9A01_DISPLAY \ No newline at end of file diff --git a/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.h b/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.h new file mode 100644 index 0000000000..bcd4b82508 --- /dev/null +++ b/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.h @@ -0,0 +1,128 @@ +#pragma once +#include "wled.h" + +#ifdef USERMOD_GC9A01_DISPLAY + +#include +#include + +// Pin definitions - use TFT_eSPI definitions when available +#ifndef TFT_CS + #define TFT_CS 5 // Default fallback +#endif +#define GC9A01_CS_PIN TFT_CS + +#ifndef TFT_DC + #define TFT_DC 16 // Default fallback +#endif +#define GC9A01_DC_PIN TFT_DC + +#ifndef TFT_RST + #define TFT_RST 17 // Default fallback +#endif +#define GC9A01_RST_PIN TFT_RST + +// Use TFT_eSPI's backlight pin definition +#ifndef TFT_BL + #define TFT_BL 4 // Default fallback if not defined by TFT_eSPI +#endif + +#ifndef USERMOD_ID_GC9A01_DISPLAY + #define USERMOD_ID_GC9A01_DISPLAY 59 // Use the official ID from const.h +#endif + +class UsermodGC9A01Display : public Usermod { + private: + // Singleton pattern - allows rotary encoder usermod to find us + static UsermodGC9A01Display* instance; + + public: + UsermodGC9A01Display() { if (!instance) instance = this; } + static UsermodGC9A01Display* getInstance(void) { return instance; } + + private: + TFT_eSPI tft = TFT_eSPI(); + + bool displayEnabled = true; + bool needsRedraw = true; + bool displayTurnedOff = false; + bool showingWelcomeScreen = true; + bool showingClock = false; // Track if currently showing clock (for rotary encoder state reset) + unsigned long welcomeScreenStartTime = 0; + uint8_t backlight = 75; // Backlight brightness percentage (0-100%, default 75%) + uint16_t displayTimeout = 60000; // 60 seconds default + bool sleepMode = true; // Enable sleep mode by default + bool clockMode = false; // Show clock only when idle + bool flip = false; // Display rotation (0 or 2) + bool clock12hour = false; // false = 24h format, true = 12h format with AM/PM + + // Proper state tracking like 4-line display usermod + uint8_t knownBrightness = 255; + uint8_t knownMode = 255; + uint8_t knownPalette = 255; + uint8_t knownEffectSpeed = 255; + uint8_t knownEffectIntensity = 255; + uint32_t knownColor = 0; // colors[0] - Primary/FX + uint32_t knownBgColor = 0; // colors[1] - Secondary/BG + uint32_t knownCustomColor = 0; // colors[2] - Tertiary/CS + bool knownPowerState = true; + unsigned long nextUpdate = 0; + unsigned long lastRedraw = ULONG_MAX; // Initialize to max value - sleep timer starts after first interaction + uint16_t refreshRate = 1000; // Match 4-line display usermod (1 second) for better performance + + // Time tracking for display updates + uint8_t knownMinute = 99; + uint8_t knownHour = 99; + + // Integration with rotary encoder usermod (no direct pin handling) + unsigned long overlayUntil = 0; // When overlay should expire (millis) + int activeOverlayMode = -1; // Which overlay mode is active (-1 = none, 0-4 = overlay modes) + unsigned long overlayInactivityTimeout = 3000; // 3 seconds of inactivity before returning to main screen + String overlayText = ""; + + // Private method declarations + void initDisplay(); + void drawMainInterface(int overlayMode = -1); // -1 = normal, 0+ = overlay mode + void drawMainScreen(); + void drawStatusBar(); + void drawWLEDLogo(); + void drawWiFiIcon(int x, int y, bool connected, int rssi = 0); + void setBrightness(uint8_t bri); + void setBacklight(uint8_t percent); // Set backlight brightness (0-100%) + void sleepOrClock(bool enabled); // Sleep display or show clock based on settings + void sleepDisplay(); + bool wakeDisplayFromSleep(); // Return true if display was sleeping + void drawClockScreen(); // Clock-only display mode + + // Mode-specific drawing methods + void drawModeOverlay(); + void drawCurrentModeIndicator(); + + // Get encoder state from rotary encoder usermod + const char* getEncoderModeName(uint8_t mode); + + public: + + // Public interface methods for rotary encoder usermod (like 4-line display) + bool wakeDisplay(); // Return true if was sleeping + void updateRedrawTime(); // Prevent display timeout + void overlay(const char* line1, long showHowLong, byte glyphType = 0); // Match 4-line interface + void redraw(bool forceRedraw); // Force display update + bool isOverlayActive(); // Check if overlay is currently showing + int getActiveOverlayMode(); // Get current overlay mode (-1 = none) + bool isDisplayAsleep(); // Check if display is sleeping + + // Usermod API + // Public method declarations (Usermod interface) + void setup() override; + void loop() override; + void addToJsonInfo(JsonObject& root) override; + void readFromJsonState(JsonObject& root) override; + void addToJsonState(JsonObject& root) override; + bool readFromConfig(JsonObject& root) override; + void addToConfig(JsonObject& root) override; + void appendConfigData() override; + uint16_t getId() override; +}; + +#endif // USERMOD_GC9A01_DISPLAY \ No newline at end of file From 8d5a6cc84a1008ee70cb26807efcc02b780679ca Mon Sep 17 00:00:00 2001 From: srg74 <28492985+srg74@users.noreply.github.com> Date: Mon, 6 Oct 2025 12:17:12 -0400 Subject: [PATCH 04/11] Fix palette navigation wraparound in rotary encoder ALT Changed cast from (unsigned) to (int) in changePalette() function to prevent wraparound when decrementing palette index from 0. Previously, when decrementing from the first palette (index 0), the expression (unsigned)(-1) would wrap around to 4294967295, causing the palette selection to jump to the end of the palette list instead of staying at the first palette. This fix ensures palette navigation stays at boundaries, matching the behavior of effect navigation. --- .../usermod_v2_rotary_encoder_ui_ALT.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp index 02bb08c9b9..48c45eaf8a 100644 --- a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp +++ b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp @@ -892,7 +892,7 @@ void RotaryEncoderUIUsermod::changePalette(bool increase) { } display->updateRedrawTime(); #endif - effectPaletteIndex = max(min((unsigned)(increase ? effectPaletteIndex+1 : effectPaletteIndex-1), getPaletteCount()+customPalettes.size()-1), 0U); + effectPaletteIndex = max(min((int)(increase ? effectPaletteIndex+1 : effectPaletteIndex-1), (int)(getPaletteCount()+customPalettes.size()-1)), 0); effectPalette = palettes_alpha_indexes[effectPaletteIndex]; stateChanged = true; if (applyToAll) { From fd0e9df58dc0881702ae41ec29cd4de38d03ba9c Mon Sep 17 00:00:00 2001 From: srg74 <28492985+srg74@users.noreply.github.com> Date: Mon, 6 Oct 2025 13:03:28 -0400 Subject: [PATCH 05/11] Address PR feedback: fix documentation and palette handling - readme.md: Remove AI attribution line, fix GPIO pin assignments - Standardize DC=GPIO15, CS=GPIO5, BL=GPIO26 in both wiring table and build flags - Remove unnecessary FLD_* build flags (not used by TFT_eSPI) - usermod_v2_gc9a01_display.cpp: Improve palette and effect name handling - Fix palette mode to use FIXED_PALETTE_COUNT and check extractModeName return value - Add custom palette labeling ("Custom 1", "Custom 2", etc.) - Fix effect name display to use extractModeName() instead of direct JSON indexing - usermod_v2_rotary_encoder_ui_ALT.cpp: Fix palette double-counting - Remove +customPalettes.size() from getPaletteCount() calls - getPaletteCount() already includes custom palettes - Fixed in both changePalette() and findCurrentEffectAndPalette() --- usermods/usermod_v2_gc9a01_display/readme.md | 12 +----- .../usermod_v2_gc9a01_display.cpp | 38 ++++++++++--------- .../usermod_v2_rotary_encoder_ui_ALT.cpp | 4 +- 3 files changed, 25 insertions(+), 29 deletions(-) diff --git a/usermods/usermod_v2_gc9a01_display/readme.md b/usermods/usermod_v2_gc9a01_display/readme.md index 95ed880b88..4c04e446cd 100644 --- a/usermods/usermod_v2_gc9a01_display/readme.md +++ b/usermods/usermod_v2_gc9a01_display/readme.md @@ -2,8 +2,6 @@ A fully-featured WLED usermod providing comprehensive visual interface on GC9A01 240x240 round TFT displays with complete rotary encoder integration. -Written by copilot AI with user interaction. - ## Features ### Visual Interface @@ -51,9 +49,9 @@ Written by copilot AI with user interaction. | SCL/SCLK | GPIO18 | SPI Clock | SPI clock signal | | SDA/MOSI | GPIO23 | SPI MOSI | SPI data out | | RES/RST | GPIO17 | Reset | Display reset | -| DC | GPIO16 | Data/Command| Data/Command control | +| DC | GPIO15 | Data/Command| Data/Command control | | CS | GPIO5 | Chip Select | SPI chip select | -| BL | GPIO4 | Backlight | Backlight control | +| BL | GPIO26 | Backlight | Backlight control | **Note**: Pin assignments can be customized via build flags (see Configuration section). @@ -70,12 +68,6 @@ custom_usermods = usermod_v2_gc9a01_display usermod_v2_rotary_encoder_ui_ALT build_flags = ${common.build_flags} ${esp32_idf_V4.build_flags} - -D FLD_SPI_DEFAULT - -D HW_PIN_SCLKSPI=18 - -D HW_PIN_MOSISPI=23 - -D FLD_PIN_DC=5 - -D FLD_PIN_CS=15 - -D FLD_PIN_RESET=17 -D WLED_DEBUG -D WLED_DISABLE_BROWNOUT_DET -D USERMOD_GC9A01_DISPLAY diff --git a/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp b/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp index 6d5a0cdab4..b68ec2fd55 100644 --- a/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp +++ b/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp @@ -353,23 +353,26 @@ void UsermodGC9A01Display::drawMainInterface(int overlayMode) { currentValue = effectIntensity; valueText = String(map(effectIntensity, 0, 255, 0, 100)) + "%"; break; - case 4: // Palette mode + case 4: { // Palette mode currentValue = effectPalette; maxValue = getPaletteCount() - 1; - if (currentValue < getPaletteCount()) { + const uint16_t fixedCount = FIXED_PALETTE_COUNT; + if (currentValue < fixedCount) { char lineBuffer[64]; - extractModeName(currentValue, JSON_palette_names, lineBuffer, 63); - // Remove "* " prefix from dynamic palettes - String paletteName = String(lineBuffer); - if (paletteName.startsWith("* ")) { - paletteName = paletteName.substring(2); + if (extractModeName(currentValue, JSON_palette_names, lineBuffer, 63)) { + String paletteName = String(lineBuffer); + if (paletteName.startsWith("* ")) paletteName = paletteName.substring(2); + if (paletteName.length() > 12) paletteName = paletteName.substring(0, 10) + ".."; + valueText = paletteName; + } else { + valueText = "Palette " + String(currentValue); } - if (paletteName.length() > 12) paletteName = paletteName.substring(0, 10) + ".."; - valueText = paletteName; } else { - valueText = "Palette " + String(effectPalette); + // Custom palette + valueText = "Custom " + String(currentValue - fixedCount + 1); } break; + } default: // Fallback currentValue = bri; valueText = String(map(bri, 0, 255, 0, 100)) + "%"; @@ -575,16 +578,17 @@ void UsermodGC9A01Display::drawMainScreen() { // Main effect name in center tft.setTextColor(TFT_CYAN, TFT_BLACK); - String effectName = ""; + char effectName[64]; if (knownMode < strip.getModeCount()) { - effectName = JSON_mode_names[knownMode]; + extractModeName(knownMode, JSON_mode_names, effectName, 63); + String modeName = String(effectName); + if (modeName.length() > 12) { + modeName = modeName.substring(0, 9) + "..."; + } + tft.drawString(modeName, 120, 120, 2); } else { - effectName = "Unknown"; - } - if (effectName.length() > 12) { - effectName = effectName.substring(0, 9) + "..."; + tft.drawString("Unknown", 120, 120, 2); } - tft.drawString(effectName, 120, 120, 2); // Brightness arc/circle at bottom tft.setTextColor(TFT_YELLOW, TFT_BLACK); diff --git a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp index 48c45eaf8a..fbbdc32c2c 100644 --- a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp +++ b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp @@ -702,7 +702,7 @@ void RotaryEncoderUIUsermod::findCurrentEffectAndPalette() { effectPaletteIndex = 0; DEBUG_PRINTLN(effectPalette); - for (unsigned i = 0; i < getPaletteCount()+customPalettes.size(); i++) { + for (unsigned i = 0; i < getPaletteCount(); i++) { if (palettes_alpha_indexes[i] == effectPalette) { effectPaletteIndex = i; DEBUG_PRINTLN(F("Found palette.")); @@ -892,7 +892,7 @@ void RotaryEncoderUIUsermod::changePalette(bool increase) { } display->updateRedrawTime(); #endif - effectPaletteIndex = max(min((int)(increase ? effectPaletteIndex+1 : effectPaletteIndex-1), (int)(getPaletteCount()+customPalettes.size()-1)), 0); + effectPaletteIndex = max(min((int)(increase ? effectPaletteIndex+1 : effectPaletteIndex-1), (int)(getPaletteCount()-1)), 0); effectPalette = palettes_alpha_indexes[effectPaletteIndex]; stateChanged = true; if (applyToAll) { From 406d281cca51f25a23a47b0d04d6abaf82acc957 Mon Sep 17 00:00:00 2001 From: srg74 <28492985+srg74@users.noreply.github.com> Date: Mon, 6 Oct 2025 13:05:50 -0400 Subject: [PATCH 06/11] Remove Wire library dependency from library.json Wire is already included in the Arduino/ESP32 core and doesn't need to be explicitly declared as a dependency. --- usermods/usermod_v2_gc9a01_display/library.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/usermods/usermod_v2_gc9a01_display/library.json b/usermods/usermod_v2_gc9a01_display/library.json index e934142504..9d967d9451 100644 --- a/usermods/usermod_v2_gc9a01_display/library.json +++ b/usermods/usermod_v2_gc9a01_display/library.json @@ -2,7 +2,6 @@ "name": "gc9a01_display", "build": { "libArchive": false }, "dependencies": { - "bodmer/TFT_eSPI": "^2.5.43", - "Wire": "" + "bodmer/TFT_eSPI": "^2.5.43" } } \ No newline at end of file From 2d7d57f5b2bbff57bca348acb67269be4a15125f Mon Sep 17 00:00:00 2001 From: srg74 <28492985+srg74@users.noreply.github.com> Date: Mon, 6 Oct 2025 13:23:09 -0400 Subject: [PATCH 07/11] Address PR feedback for GC9A01 usermod - Add extractModeName return value check in effect mode (line ~338) - Mirrors palette mode error handling pattern - Falls back to 'Effect N' if extraction fails - Remove unused dead code functions: - drawMainScreen() - replaced by drawMainInterface() - drawStatusBar() - only called from removed drawMainScreen() - Add TFT_BL compile-time guards for backlight control: - setBacklight() now compiles without TFT_BL defined - sleepDisplay() guards analogWrite(TFT_BL, 0) - sleepOrClock() uses setBacklight(0) instead of direct analogWrite - Functions maintain state management even without backlight pin All changes preserve existing behavior and ensure compilation safety. --- .../usermod_v2_gc9a01_display.cpp | 115 +++--------------- .../usermod_v2_gc9a01_display.h | 2 - 2 files changed, 17 insertions(+), 100 deletions(-) diff --git a/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp b/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp index b68ec2fd55..51a0d67373 100644 --- a/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp +++ b/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp @@ -335,14 +335,17 @@ void UsermodGC9A01Display::drawMainInterface(int overlayMode) { maxValue = strip.getModeCount() - 1; if (currentValue < strip.getModeCount()) { char lineBuffer[64]; - extractModeName(currentValue, JSON_mode_names, lineBuffer, 63); - // Remove note symbol from effect names (special character prefix) - String modeName = String(lineBuffer); - if (modeName.length() > 0 && modeName.charAt(0) == ' ' && modeName.charAt(1) > 127) { - modeName = modeName.substring(5); // Remove 5-byte UTF-8 note symbol + if (extractModeName(currentValue, JSON_mode_names, lineBuffer, 63)) { + // Remove note symbol from effect names (special character prefix) + String modeName = String(lineBuffer); + if (modeName.length() > 0 && modeName.charAt(0) == ' ' && modeName.charAt(1) > 127) { + modeName = modeName.substring(5); // Remove 5-byte UTF-8 note symbol + } + if (modeName.length() > 12) modeName = modeName.substring(0, 10) + ".."; + valueText = modeName; + } else { + valueText = "Effect " + String(currentValue); } - if (modeName.length() > 12) modeName = modeName.substring(0, 10) + ".."; - valueText = modeName; } break; case 2: // Speed mode @@ -553,96 +556,6 @@ void UsermodGC9A01Display::drawMainInterface(int overlayMode) { // ===== WiFi Icon Drawing ===== -void UsermodGC9A01Display::drawMainScreen() { - tft.fillScreen(TFT_BLACK); - - // Set text datum to middle center for all text - tft.setTextDatum(MC_DATUM); - - // Draw outer circle border - tft.drawCircle(120, 120, 110, TFT_DARKGREY); - - // Status ring at top (12 o'clock position) - drawStatusBar(); - - // Power state in center-top area - if (knownPowerState) { - tft.setTextColor(TFT_GREEN, TFT_BLACK); - tft.fillCircle(120, 80, 15, TFT_DARKGREEN); - tft.drawString("ON", 120, 80, 2); - } else { - tft.setTextColor(TFT_RED, TFT_BLACK); - tft.fillCircle(120, 80, 15, TFT_MAROON); - tft.drawString("OFF", 120, 80, 2); - } - - // Main effect name in center - tft.setTextColor(TFT_CYAN, TFT_BLACK); - char effectName[64]; - if (knownMode < strip.getModeCount()) { - extractModeName(knownMode, JSON_mode_names, effectName, 63); - String modeName = String(effectName); - if (modeName.length() > 12) { - modeName = modeName.substring(0, 9) + "..."; - } - tft.drawString(modeName, 120, 120, 2); - } else { - tft.drawString("Unknown", 120, 120, 2); - } - - // Brightness arc/circle at bottom - tft.setTextColor(TFT_YELLOW, TFT_BLACK); - tft.drawString("Bright", 120, 150, 1); - - // Convert brightness from 0-255 to 0-100% for display - int brightnessPercent = map(knownBrightness, 0, 255, 0, 100); - tft.drawString(String(brightnessPercent) + "%", 120, 165, 2); - - // Draw brightness indicator arc (bottom semicircle) - simplified for performance - int brightness_angle = (knownBrightness > 0) ? map(knownBrightness, 0, 255, 180, 360) : 180; - - // Simplified arc drawing with bounds checking - for (int angle = 180; angle <= brightness_angle && angle <= 360; angle += 10) { // Less dense: angle += 10 - float rad = radians(angle); - int x = 120 + 95 * cos(rad); - int y = 120 + 95 * sin(rad); - - // Bounds checking to prevent crashes - if (x >= 2 && x < 238 && y >= 2 && y < 238) { // Safe margins - tft.fillCircle(x, y, 2, TFT_YELLOW); - } - } - - // Color preview in center (small circle) - if (knownPowerState) { - uint32_t color = strip.getPixelColor(0); - uint8_t r = (color >> 16) & 0xFF; - uint8_t g = (color >> 8) & 0xFF; - uint8_t b = color & 0xFF; - uint16_t color565 = tft.color565(r, g, b); - tft.fillCircle(120, 200, 12, color565); - tft.drawCircle(120, 200, 12, TFT_WHITE); - } -} - -void UsermodGC9A01Display::drawStatusBar() { - // WiFi status (top left arc position) - tft.setTextDatum(TL_DATUM); // Top Left datum for status items - bool wifiConnected = (WiFi.status() == WL_CONNECTED); - int wifiRSSI = wifiConnected ? WiFi.RSSI() : -100; - - // Use blue background to match the screen bezel - tft.fillCircle(50, 50, 8, TFT_BLUE); - - drawWiFiIcon(50, 46, wifiConnected, wifiRSSI); // Moved up 2px (was 48) - - // Time display (top right arc position) - tft.setTextDatum(TR_DATUM); // Top Right datum - tft.setTextColor(TFT_WHITE, TFT_BLACK); - tft.drawString("Time", 190, 45, 1); - tft.fillCircle(190, 50, 6, TFT_BLUE); -} - void UsermodGC9A01Display::drawWiFiIcon(int x, int y, bool connected, int rssi) { // Draw WiFi icon as signal strength bars (like mobile phone signal) // More recognizable than arcs on small displays @@ -741,8 +654,12 @@ void UsermodGC9A01Display::setBrightness(uint8_t bri) { void UsermodGC9A01Display::setBacklight(uint8_t percent) { backlight = min(percent, (uint8_t)100); // Clamp to 0-100% range uint8_t pwm = map(backlight, 0, 100, 0, 255); // Map to PWM range (0-255) +#ifdef TFT_BL analogWrite(TFT_BL, pwm); DEBUG_PRINTF("[GC9A01] Backlight set to %d%% (PWM: %d)\n", backlight, pwm); +#else + DEBUG_PRINTF("[GC9A01] Backlight setting to %d%% (PWM control not available)\n", backlight); +#endif } void UsermodGC9A01Display::drawClockScreen() { @@ -806,7 +723,7 @@ void UsermodGC9A01Display::sleepOrClock(bool enabled) { } else { // Turn off backlight (sleep) showingClock = false; - analogWrite(TFT_BL, 0); + setBacklight(0); DEBUG_PRINTLN(F("[GC9A01] Timeout reached - sleeping (backlight off)")); } } else { @@ -819,7 +736,9 @@ void UsermodGC9A01Display::sleepOrClock(bool enabled) { } void UsermodGC9A01Display::sleepDisplay() { +#ifdef TFT_BL analogWrite(TFT_BL, 0); // Turn off backlight completely +#endif displayTurnedOff = true; lastRedraw = ULONG_MAX; // Reset sleep timer - will start again after next interaction DEBUG_PRINTLN(F("[GC9A01] Display sleeping - backlight off, sleep timer reset")); diff --git a/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.h b/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.h index bcd4b82508..e4ab88bd9c 100644 --- a/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.h +++ b/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.h @@ -83,8 +83,6 @@ class UsermodGC9A01Display : public Usermod { // Private method declarations void initDisplay(); void drawMainInterface(int overlayMode = -1); // -1 = normal, 0+ = overlay mode - void drawMainScreen(); - void drawStatusBar(); void drawWLEDLogo(); void drawWiFiIcon(int x, int y, bool connected, int rssi = 0); void setBrightness(uint8_t bri); From 7170b4058d8eaf0160171e76801242834a109977 Mon Sep 17 00:00:00 2001 From: srg74 <28492985+srg74@users.noreply.github.com> Date: Tue, 7 Oct 2025 12:05:20 -0400 Subject: [PATCH 08/11] Address PR feedback for GC9A01 usermod Documentation improvements: - Remove AI attribution from readme - Fix GPIO pin numbers in wiring table (DC=GPIO15, BL=GPIO26) - Remove incorrect FLD_* build flags documentation Code improvements: - Add extractModeName() return value checks in 3 locations - Remove unused drawMainScreen() and drawStatusBar() functions - Add #ifdef TFT_BL guards around all backlight control code - Fix palette double-counting in rotary encoder navigation - Remove Wire dependency from library.json (part of core) - Adjust overlay text X coordinate to 124 for better centering All changes tested on hardware and verified working. --- .../usermod_v2_gc9a01_display.cpp | 30 +- .../usermod_v2_rotary_encoder_ui_ALT.cpp | 277 +++++++++++++++++- 2 files changed, 278 insertions(+), 29 deletions(-) diff --git a/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp b/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp index 51a0d67373..3cda3b4fe3 100644 --- a/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp +++ b/usermods/usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.cpp @@ -356,26 +356,26 @@ void UsermodGC9A01Display::drawMainInterface(int overlayMode) { currentValue = effectIntensity; valueText = String(map(effectIntensity, 0, 255, 0, 100)) + "%"; break; - case 4: { // Palette mode + case 4: // Palette mode currentValue = effectPalette; maxValue = getPaletteCount() - 1; - const uint16_t fixedCount = FIXED_PALETTE_COUNT; - if (currentValue < fixedCount) { + if (currentValue < getPaletteCount()) { char lineBuffer[64]; if (extractModeName(currentValue, JSON_palette_names, lineBuffer, 63)) { + // Remove "* " prefix from dynamic palettes String paletteName = String(lineBuffer); - if (paletteName.startsWith("* ")) paletteName = paletteName.substring(2); + if (paletteName.startsWith("* ")) { + paletteName = paletteName.substring(2); + } if (paletteName.length() > 12) paletteName = paletteName.substring(0, 10) + ".."; valueText = paletteName; } else { valueText = "Palette " + String(currentValue); } } else { - // Custom palette - valueText = "Custom " + String(currentValue - fixedCount + 1); + valueText = "Palette " + String(effectPalette); } break; - } default: // Fallback currentValue = bri; valueText = String(map(bri, 0, 255, 0, 100)) + "%"; @@ -433,7 +433,7 @@ void UsermodGC9A01Display::drawMainInterface(int overlayMode) { int yOffset = (overlayMode == 1 || overlayMode == 4) ? 120 : 130; // Slightly higher for smaller font tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextDatum(MC_DATUM); - tft.drawString(valueText, 120, yOffset, fontSize); + tft.drawString(valueText, 126, yOffset, fontSize); // Don't draw main screen elements - return early return; @@ -654,12 +654,10 @@ void UsermodGC9A01Display::setBrightness(uint8_t bri) { void UsermodGC9A01Display::setBacklight(uint8_t percent) { backlight = min(percent, (uint8_t)100); // Clamp to 0-100% range uint8_t pwm = map(backlight, 0, 100, 0, 255); // Map to PWM range (0-255) -#ifdef TFT_BL + #ifdef TFT_BL analogWrite(TFT_BL, pwm); + #endif DEBUG_PRINTF("[GC9A01] Backlight set to %d%% (PWM: %d)\n", backlight, pwm); -#else - DEBUG_PRINTF("[GC9A01] Backlight setting to %d%% (PWM control not available)\n", backlight); -#endif } void UsermodGC9A01Display::drawClockScreen() { @@ -723,7 +721,9 @@ void UsermodGC9A01Display::sleepOrClock(bool enabled) { } else { // Turn off backlight (sleep) showingClock = false; - setBacklight(0); + #ifdef TFT_BL + analogWrite(TFT_BL, 0); + #endif DEBUG_PRINTLN(F("[GC9A01] Timeout reached - sleeping (backlight off)")); } } else { @@ -736,9 +736,9 @@ void UsermodGC9A01Display::sleepOrClock(bool enabled) { } void UsermodGC9A01Display::sleepDisplay() { -#ifdef TFT_BL + #ifdef TFT_BL analogWrite(TFT_BL, 0); // Turn off backlight completely -#endif + #endif displayTurnedOff = true; lastRedraw = ULONG_MAX; // Reset sleep timer - will start again after next interaction DEBUG_PRINTLN(F("[GC9A01] Display sleeping - backlight off, sleep timer reset")); diff --git a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp index fbbdc32c2c..922b00c3a7 100644 --- a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp +++ b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp @@ -31,6 +31,10 @@ #include "usermod_v2_four_line_display.h" #endif +#ifdef USERMOD_GC9A01_DISPLAY +#include "../usermod_v2_gc9a01_display/usermod_v2_gc9a01_display.h" +#endif + #ifdef USERMOD_MODE_SORT #error "Usermod Mode Sort is no longer required. Remove -D USERMOD_MODE_SORT from platformio.ini" #endif @@ -178,6 +182,12 @@ class RotaryEncoderUIUsermod : public Usermod { void* display; #endif + #ifdef USERMOD_GC9A01_DISPLAY + UsermodGC9A01Display *gc9a01Display; + #else + void* gc9a01Display; + #endif + // Pointers the start of the mode names within JSON_mode_names const char **modes_qstrings; @@ -265,6 +275,7 @@ class RotaryEncoderUIUsermod : public Usermod { , currentSat1(255) , currentCCT(128) , display(nullptr) + , gc9a01Display(nullptr) , modes_qstrings(nullptr) , modes_alpha_indexes(nullptr) , palettes_qstrings(nullptr) @@ -533,6 +544,18 @@ void RotaryEncoderUIUsermod::setup() } #endif +#ifdef USERMOD_GC9A01_DISPLAY + // This Usermod also works with GC9A01DisplayUsermod for round TFT displays. + gc9a01Display = (UsermodGC9A01Display*) UsermodManager::lookup(USERMOD_ID_GC9A01_DISPLAY); + if (gc9a01Display != nullptr) { + DEBUG_PRINTLN(F("[RotaryEncoder] GC9A01 display integration enabled")); + Serial.println(F("[RotaryEncoder] GC9A01 display integration enabled")); + } else { + DEBUG_PRINTLN(F("[RotaryEncoder] GC9A01 display NOT FOUND")); + Serial.println(F("[RotaryEncoder] GC9A01 display NOT FOUND")); + } +#endif + initDone = true; Enc_A = readPin(pinA); // Read encoder pins Enc_B = readPin(pinB); @@ -618,25 +641,59 @@ void RotaryEncoderUIUsermod::loop() } if (newState > LAST_UI_STATE) newState = 0; } while (!changedState); - if (display != nullptr) { - switch (newState) { - case 0: changedState = changeState(lineBuffer, 1, 0, 1); break; //1 = sun - case 1: changedState = changeState(lineBuffer, 1, 4, 2); break; //2 = skip forward - case 2: changedState = changeState(lineBuffer, 1, 8, 3); break; //3 = fire - case 3: changedState = changeState(lineBuffer, 2, 0, 4); break; //4 = custom palette - case 4: changedState = changeState(lineBuffer, 3, 0, 5); break; //5 = puzzle piece - case 5: changedState = changeState(lineBuffer, 255, 255, 7); break; //7 = brush - case 6: changedState = changeState(lineBuffer, 255, 255, 8); break; //8 = contrast - case 7: changedState = changeState(lineBuffer, 255, 255, 10); break; //10 = star - case 8: changedState = changeState(lineBuffer, 255, 255, 11); break; //11 = heart - case 9: changedState = changeState(lineBuffer, 255, 255, 10); break; //10 = star - case 10: changedState = changeState(lineBuffer, 255, 255, 10); break; //10 = star - case 11: changedState = changeState(lineBuffer, 255, 255, 10); break; //10 = star + // Support both Four Line Display and GC9A01 display + if (display != nullptr || gc9a01Display != nullptr) { + // Special handling for state 0 (Brightness) with GC9A01 - no overlay needed + if (newState == 0 && gc9a01Display != nullptr && display == nullptr) { + // For GC9A01 only (no four line display), just update main screen for brightness + if (gc9a01Display->wakeDisplay()) { + gc9a01Display->redraw(true); + changedState = false; // Throw away wake up input + } else { + gc9a01Display->redraw(false); // Update main screen directly + changedState = true; + } + } else { + // Normal overlay handling for all other states and for Four Line Display + switch (newState) { + case 0: changedState = changeState(lineBuffer, 1, 0, 1); break; //1 = sun + case 1: changedState = changeState(lineBuffer, 1, 4, 2); break; //2 = skip forward + case 2: changedState = changeState(lineBuffer, 1, 8, 3); break; //3 = fire + case 3: changedState = changeState(lineBuffer, 2, 0, 4); break; //4 = custom palette + case 4: changedState = changeState(lineBuffer, 3, 0, 5); break; //5 = puzzle piece + case 5: changedState = changeState(lineBuffer, 255, 255, 7); break; //7 = brush + case 6: changedState = changeState(lineBuffer, 255, 255, 8); break; //8 = contrast + case 7: changedState = changeState(lineBuffer, 255, 255, 10); break; //10 = star + case 8: changedState = changeState(lineBuffer, 255, 255, 11); break; //11 = heart + case 9: changedState = changeState(lineBuffer, 255, 255, 10); break; //10 = star + case 10: changedState = changeState(lineBuffer, 255, 255, 10); break; //10 = star + case 11: changedState = changeState(lineBuffer, 255, 255, 10); break; //10 = star + } } } if (changedState) select_state = newState; } + // Check if GC9A01 overlay has expired or display is asleep and reset to brightness mode (state 0) + #ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display != nullptr && select_state > 0) { + if (!gc9a01Display->isOverlayActive() || gc9a01Display->isDisplayAsleep()) { + // Overlay has expired or display is asleep, return to brightness mode + select_state = 0; + } + } + #endif + + // Check if current state is valid for current effect (for states 1=speed, 2=intensity, 9-11=custom) + if (select_state == 1 || select_state == 2 || (select_state >= 9 && select_state <= 11)) { + char tempBuffer[64]; + int sliderIndex = (select_state <= 2) ? (select_state - 1) : (select_state - 7); + if (!extractModeSlider(effectCurrent, sliderIndex, tempBuffer, 63)) { + // Current effect doesn't have this slider, reset to brightness + select_state = 0; + } + } + Enc_A = readPin(pinA); // Read encoder pins Enc_B = readPin(pinB); if ((Enc_A) && (!Enc_A_prev)) @@ -685,6 +742,12 @@ void RotaryEncoderUIUsermod::displayNetworkInfo() { #ifdef USERMOD_FOUR_LINE_DISPLAY display->networkOverlay(PSTR("NETWORK INFO"), 10000); #endif + + #ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display != nullptr) { + gc9a01Display->overlay(PSTR("NETWORK INFO"), 10000, 12); // Use network glyph + } + #endif } void RotaryEncoderUIUsermod::findCurrentEffectAndPalette() { @@ -723,6 +786,20 @@ bool RotaryEncoderUIUsermod::changeState(const char *stateName, byte markedLine, display->setMarkLine(markedLine, markedCol); } #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display != nullptr) { + Serial.printf("[RotaryEncoder] Calling GC9A01 overlay: '%s' glyph=%d\n", stateName, glyph); + if (gc9a01Display->wakeDisplay()) { + // Throw away wake up input + gc9a01Display->redraw(true); + return false; + } + gc9a01Display->overlay(stateName, 750, glyph); + } else { + Serial.println("[RotaryEncoder] gc9a01Display is NULL!"); + } +#endif return true; } @@ -743,6 +820,16 @@ void RotaryEncoderUIUsermod::changeBrightness(bool increase) { } display->updateRedrawTime(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display && gc9a01Display->wakeDisplay()) { + gc9a01Display->redraw(true); + // Throw away wake up input + return; + } + gc9a01Display->updateRedrawTime(); +#endif + //bri = max(min((increase ? bri+fadeAmount : bri-fadeAmount), 255), 0); if (bri < 40) bri = max(min((increase ? bri+fadeAmount/2 : bri-fadeAmount/2), 255), 0); // slower steps when brightness < 16% else bri = max(min((increase ? bri+fadeAmount : bri-fadeAmount), 255), 0); @@ -750,6 +837,21 @@ void RotaryEncoderUIUsermod::changeBrightness(bool increase) { #ifdef USERMOD_FOUR_LINE_DISPLAY display->updateBrightness(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display) { + // Only show overlay if we're NOT in default state (state 0) + // In state 0, brightness changes should update the main screen directly + if (select_state == 0) { + gc9a01Display->redraw(false); // Update main interface directly (no overlay) + } else { + // Show brightness overlay like other modes (when in overlay mode) + char brightnessStr[16]; + sprintf(brightnessStr, "Brightness %d%%", (bri * 100) / 255); + gc9a01Display->overlay(brightnessStr, 500, 10); + } + } +#endif } @@ -762,6 +864,15 @@ void RotaryEncoderUIUsermod::changeEffect(bool increase) { } display->updateRedrawTime(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display && gc9a01Display->wakeDisplay()) { + gc9a01Display->redraw(true); + // Throw away wake up input + return; + } + gc9a01Display->updateRedrawTime(); +#endif effectCurrentIndex = max(min((increase ? effectCurrentIndex+1 : effectCurrentIndex-1), strip.getModeCount()-1), 0); effectCurrent = modes_alpha_indexes[effectCurrentIndex]; stateChanged = true; @@ -791,6 +902,16 @@ void RotaryEncoderUIUsermod::changeEffectSpeed(bool increase) { } display->updateRedrawTime(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display && gc9a01Display->wakeDisplay()) { + gc9a01Display->redraw(true); + // Throw away wake up input + return; + } + gc9a01Display->updateRedrawTime(); +#endif + effectSpeed = max(min((increase ? effectSpeed+fadeAmount : effectSpeed-fadeAmount), 255), 0); stateChanged = true; if (applyToAll) { @@ -807,6 +928,12 @@ void RotaryEncoderUIUsermod::changeEffectSpeed(bool increase) { #ifdef USERMOD_FOUR_LINE_DISPLAY display->updateSpeed(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display) { + gc9a01Display->redraw(false); // Update speed display + } +#endif } @@ -819,6 +946,16 @@ void RotaryEncoderUIUsermod::changeEffectIntensity(bool increase) { } display->updateRedrawTime(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display && gc9a01Display->wakeDisplay()) { + gc9a01Display->redraw(true); + // Throw away wake up input + return; + } + gc9a01Display->updateRedrawTime(); +#endif + effectIntensity = max(min((increase ? effectIntensity+fadeAmount : effectIntensity-fadeAmount), 255), 0); stateChanged = true; if (applyToAll) { @@ -835,6 +972,12 @@ void RotaryEncoderUIUsermod::changeEffectIntensity(bool increase) { #ifdef USERMOD_FOUR_LINE_DISPLAY display->updateIntensity(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display) { + gc9a01Display->redraw(false); // Update intensity display + } +#endif } @@ -848,6 +991,16 @@ void RotaryEncoderUIUsermod::changeCustom(uint8_t par, bool increase) { } display->updateRedrawTime(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display && gc9a01Display->wakeDisplay()) { + gc9a01Display->redraw(true); + // Throw away wake up input + return; + } + gc9a01Display->updateRedrawTime(); +#endif + stateChanged = true; if (applyToAll) { uint8_t id = strip.getFirstSelectedSegId(); @@ -880,6 +1033,14 @@ void RotaryEncoderUIUsermod::changeCustom(uint8_t par, bool increase) { sprintf(lineBuffer, "%d", val); display->overlay(lineBuffer, 500, 10); // use star #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display) { + char lineBuffer[64]; + sprintf(lineBuffer, "Custom%d: %d", par, val); + gc9a01Display->overlay(lineBuffer, 500, 10); // use star glyph + } +#endif } @@ -892,6 +1053,16 @@ void RotaryEncoderUIUsermod::changePalette(bool increase) { } display->updateRedrawTime(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display && gc9a01Display->wakeDisplay()) { + gc9a01Display->redraw(true); + // Throw away wake up input + return; + } + gc9a01Display->updateRedrawTime(); +#endif + effectPaletteIndex = max(min((int)(increase ? effectPaletteIndex+1 : effectPaletteIndex-1), (int)(getPaletteCount()-1)), 0); effectPalette = palettes_alpha_indexes[effectPaletteIndex]; stateChanged = true; @@ -909,6 +1080,12 @@ void RotaryEncoderUIUsermod::changePalette(bool increase) { #ifdef USERMOD_FOUR_LINE_DISPLAY display->showCurrentEffectOrPalette(effectPalette, JSON_palette_names, 2); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display) { + gc9a01Display->redraw(false); // Update palette display + } +#endif } @@ -921,6 +1098,16 @@ void RotaryEncoderUIUsermod::changeHue(bool increase){ } display->updateRedrawTime(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display && gc9a01Display->wakeDisplay()) { + gc9a01Display->redraw(true); + // Throw away wake up input + return; + } + gc9a01Display->updateRedrawTime(); +#endif + currentHue1 = max(min((increase ? currentHue1+fadeAmount : currentHue1-fadeAmount), 255), 0); colorHStoRGB(currentHue1*256, currentSat1, colPri); stateChanged = true; @@ -940,6 +1127,14 @@ void RotaryEncoderUIUsermod::changeHue(bool increase){ sprintf(lineBuffer, "%d", currentHue1); display->overlay(lineBuffer, 500, 7); // use brush #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display) { + char lineBuffer[64]; + sprintf(lineBuffer, "Hue: %d", currentHue1); + gc9a01Display->overlay(lineBuffer, 500, 7); // use brush glyph + } +#endif } void RotaryEncoderUIUsermod::changeSat(bool increase){ @@ -951,6 +1146,16 @@ void RotaryEncoderUIUsermod::changeSat(bool increase){ } display->updateRedrawTime(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display && gc9a01Display->wakeDisplay()) { + gc9a01Display->redraw(true); + // Throw away wake up input + return; + } + gc9a01Display->updateRedrawTime(); +#endif + currentSat1 = max(min((increase ? currentSat1+fadeAmount : currentSat1-fadeAmount), 255), 0); colorHStoRGB(currentHue1*256, currentSat1, colPri); if (applyToAll) { @@ -969,6 +1174,14 @@ void RotaryEncoderUIUsermod::changeSat(bool increase){ sprintf(lineBuffer, "%d", currentSat1); display->overlay(lineBuffer, 500, 8); // use contrast #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display) { + char lineBuffer[64]; + sprintf(lineBuffer, "Sat: %d", currentSat1); + gc9a01Display->overlay(lineBuffer, 500, 8); // use contrast glyph + } +#endif } void RotaryEncoderUIUsermod::changePreset(bool increase) { @@ -980,6 +1193,16 @@ void RotaryEncoderUIUsermod::changePreset(bool increase) { } display->updateRedrawTime(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display && gc9a01Display->wakeDisplay()) { + gc9a01Display->redraw(true); + // Throw away wake up input + return; + } + gc9a01Display->updateRedrawTime(); +#endif + if (presetHigh && presetLow && presetHigh > presetLow) { StaticJsonDocument<64> root; char str[64]; @@ -1000,6 +1223,14 @@ void RotaryEncoderUIUsermod::changePreset(bool increase) { sprintf(str, "%d", currentPreset); display->overlay(str, 500, 11); // use heart #endif + + #ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display) { + char lineBuffer[64]; + sprintf(lineBuffer, "Preset: %d", currentPreset); + gc9a01Display->overlay(lineBuffer, 500, 11); // use heart glyph + } + #endif } } @@ -1012,6 +1243,16 @@ void RotaryEncoderUIUsermod::changeCCT(bool increase){ } display->updateRedrawTime(); #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display && gc9a01Display->wakeDisplay()) { + gc9a01Display->redraw(true); + // Throw away wake up input + return; + } + gc9a01Display->updateRedrawTime(); +#endif + currentCCT = max(min((increase ? currentCCT+fadeAmount : currentCCT-fadeAmount), 255), 0); // if (applyToAll) { for (unsigned i=0; ioverlay(lineBuffer, 500, 10); // use star #endif + +#ifdef USERMOD_GC9A01_DISPLAY + if (gc9a01Display) { + char lineBuffer[64]; + sprintf(lineBuffer, "CCT: %d", currentCCT); + gc9a01Display->overlay(lineBuffer, 500, 10); // use star glyph + } +#endif } /* From cafa73e8d2d6eae93a2d8cbac7ab4d0aba3d498c Mon Sep 17 00:00:00 2001 From: srg74 <28492985+srg74@users.noreply.github.com> Date: Tue, 7 Oct 2025 12:39:22 -0400 Subject: [PATCH 09/11] Use DEBUG_PRINTF/DEBUG_PRINTLN macros for consistency Replace Serial.printf and Serial.println with WLED debug macros in rotary encoder usermod for consistency with codebase standards. --- .../usermod_v2_rotary_encoder_ui_ALT.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp index 922b00c3a7..ddd9a488a8 100644 --- a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp +++ b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp @@ -789,7 +789,7 @@ bool RotaryEncoderUIUsermod::changeState(const char *stateName, byte markedLine, #ifdef USERMOD_GC9A01_DISPLAY if (gc9a01Display != nullptr) { - Serial.printf("[RotaryEncoder] Calling GC9A01 overlay: '%s' glyph=%d\n", stateName, glyph); + DEBUG_PRINTF("[RotaryEncoder] Calling GC9A01 overlay: '%s' glyph=%d\n", stateName, glyph); if (gc9a01Display->wakeDisplay()) { // Throw away wake up input gc9a01Display->redraw(true); @@ -797,7 +797,7 @@ bool RotaryEncoderUIUsermod::changeState(const char *stateName, byte markedLine, } gc9a01Display->overlay(stateName, 750, glyph); } else { - Serial.println("[RotaryEncoder] gc9a01Display is NULL!"); + DEBUG_PRINTLN(F("[RotaryEncoder] gc9a01Display is NULL!")); } #endif return true; From dbdbcf5d83ff54862654923ee16ac792fb726ad7 Mon Sep 17 00:00:00 2001 From: srg74 <28492985+srg74@users.noreply.github.com> Date: Tue, 7 Oct 2025 12:48:48 -0400 Subject: [PATCH 10/11] Remove redundant Serial.println calls in rotary encoder usermod DEBUG_PRINTLN already handles the logging, so the duplicate Serial.println calls are unnecessary and would create redundant output. --- .../usermod_v2_rotary_encoder_ui_ALT.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp index ddd9a488a8..da350facb3 100644 --- a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp +++ b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp @@ -549,10 +549,8 @@ void RotaryEncoderUIUsermod::setup() gc9a01Display = (UsermodGC9A01Display*) UsermodManager::lookup(USERMOD_ID_GC9A01_DISPLAY); if (gc9a01Display != nullptr) { DEBUG_PRINTLN(F("[RotaryEncoder] GC9A01 display integration enabled")); - Serial.println(F("[RotaryEncoder] GC9A01 display integration enabled")); } else { DEBUG_PRINTLN(F("[RotaryEncoder] GC9A01 display NOT FOUND")); - Serial.println(F("[RotaryEncoder] GC9A01 display NOT FOUND")); } #endif From c3bc3f049d80cdad32f3e74593bc36e38b66b3f5 Mon Sep 17 00:00:00 2001 From: srg74 <28492985+srg74@users.noreply.github.com> Date: Tue, 7 Oct 2025 13:49:04 -0400 Subject: [PATCH 11/11] Add null pointer checks for gc9a01Display->updateRedrawTime() calls Prevent potential null pointer dereference crashes when GC9A01 display usermod is not found or fails to initialize. The gc9a01Display pointer can be null (as shown in setup() where it logs 'GC9A01 display NOT FOUND'), so all calls to updateRedrawTime() must be guarded with null checks. Fixed 10 locations where updateRedrawTime() was called without checking if gc9a01Display is non-null. --- .../usermod_v2_rotary_encoder_ui_ALT.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp index da350facb3..ae72fb9a25 100644 --- a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp +++ b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp @@ -825,7 +825,7 @@ void RotaryEncoderUIUsermod::changeBrightness(bool increase) { // Throw away wake up input return; } - gc9a01Display->updateRedrawTime(); + if (gc9a01Display) gc9a01Display->updateRedrawTime(); #endif //bri = max(min((increase ? bri+fadeAmount : bri-fadeAmount), 255), 0); @@ -869,7 +869,7 @@ void RotaryEncoderUIUsermod::changeEffect(bool increase) { // Throw away wake up input return; } - gc9a01Display->updateRedrawTime(); + if (gc9a01Display) gc9a01Display->updateRedrawTime(); #endif effectCurrentIndex = max(min((increase ? effectCurrentIndex+1 : effectCurrentIndex-1), strip.getModeCount()-1), 0); effectCurrent = modes_alpha_indexes[effectCurrentIndex]; @@ -907,7 +907,7 @@ void RotaryEncoderUIUsermod::changeEffectSpeed(bool increase) { // Throw away wake up input return; } - gc9a01Display->updateRedrawTime(); + if (gc9a01Display) gc9a01Display->updateRedrawTime(); #endif effectSpeed = max(min((increase ? effectSpeed+fadeAmount : effectSpeed-fadeAmount), 255), 0); @@ -951,7 +951,7 @@ void RotaryEncoderUIUsermod::changeEffectIntensity(bool increase) { // Throw away wake up input return; } - gc9a01Display->updateRedrawTime(); + if (gc9a01Display) gc9a01Display->updateRedrawTime(); #endif effectIntensity = max(min((increase ? effectIntensity+fadeAmount : effectIntensity-fadeAmount), 255), 0); @@ -996,7 +996,7 @@ void RotaryEncoderUIUsermod::changeCustom(uint8_t par, bool increase) { // Throw away wake up input return; } - gc9a01Display->updateRedrawTime(); + if (gc9a01Display) gc9a01Display->updateRedrawTime(); #endif stateChanged = true; @@ -1058,7 +1058,7 @@ void RotaryEncoderUIUsermod::changePalette(bool increase) { // Throw away wake up input return; } - gc9a01Display->updateRedrawTime(); + if (gc9a01Display) gc9a01Display->updateRedrawTime(); #endif effectPaletteIndex = max(min((int)(increase ? effectPaletteIndex+1 : effectPaletteIndex-1), (int)(getPaletteCount()-1)), 0); @@ -1103,7 +1103,7 @@ void RotaryEncoderUIUsermod::changeHue(bool increase){ // Throw away wake up input return; } - gc9a01Display->updateRedrawTime(); + if (gc9a01Display) gc9a01Display->updateRedrawTime(); #endif currentHue1 = max(min((increase ? currentHue1+fadeAmount : currentHue1-fadeAmount), 255), 0); @@ -1151,7 +1151,7 @@ void RotaryEncoderUIUsermod::changeSat(bool increase){ // Throw away wake up input return; } - gc9a01Display->updateRedrawTime(); + if (gc9a01Display) gc9a01Display->updateRedrawTime(); #endif currentSat1 = max(min((increase ? currentSat1+fadeAmount : currentSat1-fadeAmount), 255), 0); @@ -1198,7 +1198,7 @@ void RotaryEncoderUIUsermod::changePreset(bool increase) { // Throw away wake up input return; } - gc9a01Display->updateRedrawTime(); + if (gc9a01Display) gc9a01Display->updateRedrawTime(); #endif if (presetHigh && presetLow && presetHigh > presetLow) { @@ -1248,7 +1248,7 @@ void RotaryEncoderUIUsermod::changeCCT(bool increase){ // Throw away wake up input return; } - gc9a01Display->updateRedrawTime(); + if (gc9a01Display) gc9a01Display->updateRedrawTime(); #endif currentCCT = max(min((increase ? currentCCT+fadeAmount : currentCCT-fadeAmount), 255), 0);