Scott Bezek 4 tahun lalu
induk
melakukan
0b5785ecf3

+ 5 - 5
firmware/platformio.ini

@@ -18,19 +18,19 @@ monitor_flags =
 	--echo
 	--filter=esp32_exception_decoder
 lib_deps =
-    TFT_eSPI@2.3.59
+    TFT_eSPI@2.3.70
     fastled/FastLED @ ^3.4.0
     askuric/Simple FOC @ ^2.2
     infineon/TLV493D-Magnetic-Sensor @ ^1.0.3
     bxparks/AceButton @ ^1.9.1
 
 build_flags =
-  -Os
   -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
+
   -DUSER_SETUP_LOADED=1
-  -DST7789_DRIVER=1
+  -DGC9A01_DRIVER=1
   -DCGRAM_OFFSET=1
-  -DTFT_WIDTH=135
+  -DTFT_WIDTH=240
   -DTFT_HEIGHT=240
   -DTFT_MISO=-1
   -DTFT_MOSI=19
@@ -41,4 +41,4 @@ build_flags =
   -DTFT_BL=4
   -DLOAD_GLCD=1
   -DLOAD_GFXFF=1
-  -DSPI_FREQUENCY=40000000
+  -DSPI_FREQUENCY=50000000

+ 50 - 29
firmware/src/display_task.cpp

@@ -1,6 +1,8 @@
 #include "display_task.h"
 #include "semaphore_guard.h"
 
+#include "font/roboto_light_60.h"
+
 DisplayTask::DisplayTask(const uint8_t task_core) : Task{"Display", 8192, 1, task_core} {
     semaphore_ = xSemaphoreCreateMutex();
     assert(semaphore_ != NULL);
@@ -77,51 +79,70 @@ void DisplayTask::run() {
 
     spr_.setColorDepth(16);
     spr_.createSprite(TFT_WIDTH, TFT_HEIGHT);
-    spr_.setFreeFont(&Roboto_Thin_24);
+    spr_.setFreeFont(&Roboto_Light_60);
     spr_.setTextColor(0xFFFF, TFT_BLACK);
     
-    float angle;
+    KnobState state;
+
+    const int RADIUS = TFT_WIDTH / 2;
 
     int32_t pointer_center_x = TFT_WIDTH / 2;
-    int32_t pointer_center_y = TFT_HEIGHT * 2 / 3;
+    int32_t pointer_center_y = TFT_HEIGHT / 2;
     int32_t pointer_length_short = 10;
-    int32_t pointer_length_long = TFT_WIDTH / 2;
+    int32_t pointer_length_long = TFT_WIDTH / 2 - 5;
+
+    spr_.setTextDatum(CC_DATUM);
+    spr_.setTextColor(TFT_WHITE);
     while(1) {
 
         {
             SemaphoreGuard lock(semaphore_);
-            angle = angle_;// < 0 ? angle_ + 2 * PI : angle_;
+            state = state_;
+        }
+        // float degrees = angle * 360 / 2 / PI;
+
+        // uint8_t r, g, b;
+        // HSV_to_RGB(degrees, 80, 80, &r, &g, &b);
+
+        // spr_.fillSprite(tft_.color565(r, g, b));
+        spr_.fillSprite(TFT_BLACK);
+
+        spr_.drawString(String() + state.current_position, TFT_WIDTH / 2, TFT_HEIGHT / 2, 1);
+        // spr_.setCursor(60, 40);
+        // spr_.printf("%.1f", degrees);
+
+        // float pointer_angle = - angle;
+        // spr_.fillTriangle(
+        //     pointer_center_x + pointer_length_short * cos(pointer_angle - PI * 3 /4),
+        //     pointer_center_y + pointer_length_short * sin(pointer_angle - PI * 3 /4),
+        //     pointer_center_x + pointer_length_short * cos(pointer_angle + PI * 3 /4),
+        //     pointer_center_y + pointer_length_short * sin(pointer_angle + PI * 3 /4),
+        //     pointer_center_x + pointer_length_long * cos(pointer_angle),
+        //     pointer_center_y + pointer_length_long * sin(pointer_angle),
+        //     TFT_WHITE
+        // );
+
+        // spr_.fillCircle(pointer_center_x, pointer_center_y, 3, TFT_RED);
+        float left_bound = PI / 2;
+
+        if (state.num_positions > 0) {
+          float range_radians = (state.num_positions - 1) * state.position_width_radians;
+          left_bound = PI / 2 + range_radians / 2;
+          float right_bound = PI / 2 - range_radians / 2;
+          spr_.drawLine(TFT_WIDTH/2 + RADIUS * cosf(left_bound), TFT_HEIGHT/2 - RADIUS * sinf(left_bound), TFT_WIDTH/2 + (RADIUS - 10) * cosf(left_bound), TFT_HEIGHT/2 - (RADIUS - 10) * sinf(left_bound), TFT_WHITE);
+          spr_.drawLine(TFT_WIDTH/2 + RADIUS * cosf(right_bound), TFT_HEIGHT/2 - RADIUS * sinf(right_bound), TFT_WIDTH/2 + (RADIUS - 10) * cosf(right_bound), TFT_HEIGHT/2 - (RADIUS - 10) * sinf(right_bound), TFT_WHITE);
         }
-        float degrees = angle * 360 / 2 / PI;
-
-        uint8_t r, g, b;
-        HSV_to_RGB(degrees, 80, 80, &r, &g, &b);
-
-        spr_.fillSprite(tft_.color565(r, g, b));
-        spr_.setCursor(40, 40);
-
-        spr_.printf("%.1f", degrees);
-
-        float pointer_angle = - angle;
-        spr_.fillTriangle(
-            pointer_center_x + pointer_length_short * cos(pointer_angle - PI * 3 /4),
-            pointer_center_y + pointer_length_short * sin(pointer_angle - PI * 3 /4),
-            pointer_center_x + pointer_length_short * cos(pointer_angle + PI * 3 /4),
-            pointer_center_y + pointer_length_short * sin(pointer_angle + PI * 3 /4),
-            pointer_center_x + pointer_length_long * cos(pointer_angle),
-            pointer_center_y + pointer_length_long * sin(pointer_angle),
-            TFT_WHITE
-        );
 
-        spr_.fillCircle(pointer_center_x, pointer_center_y, 3, TFT_RED);
+        float angle = left_bound - (state.sub_position_unit + state.current_position) * state.position_width_radians;
+        spr_.fillCircle(TFT_WIDTH/2 + (RADIUS - 10) * cosf(angle), TFT_HEIGHT/2 - (RADIUS - 10) * sinf(angle), 5, TFT_BLUE);
 
 
         spr_.pushSprite(0, 0);
-        delay(10);
+        delay(2);
     }
 }
 
-void DisplayTask::set_angle(float angle) {
+void DisplayTask::setData(KnobState state) {
     SemaphoreGuard lock(semaphore_);
-    angle_ = angle;
+    state_ = state;
 }

+ 3 - 2
firmware/src/display_task.h

@@ -3,6 +3,7 @@
 #include <Arduino.h>
 #include <TFT_eSPI.h>
 
+#include "knob_data.h"
 #include "task.h"
 
 class DisplayTask : public Task<DisplayTask> {
@@ -12,7 +13,7 @@ class DisplayTask : public Task<DisplayTask> {
         DisplayTask(const uint8_t task_core);
         ~DisplayTask();
 
-        void set_angle(float angle);
+        void setData(KnobState state);
 
     protected:
         void run();
@@ -25,5 +26,5 @@ class DisplayTask : public Task<DisplayTask> {
 
         SemaphoreHandle_t semaphore_;
 
-        float angle_ = 0;
+        KnobState state_;
 };

+ 199 - 0
firmware/src/font/roboto_light_60.h

@@ -0,0 +1,199 @@
+// Created by http://oleddisplay.squix.ch/ Consider a donation
+// In case of problems make sure that you are using the font file with the correct version!
+const uint8_t Roboto_Light_60Bitmaps[] PROGMEM = {
+
+	// Bitmap Data:
+	0x00, // ' '
+	0xF3,0xCF,0x3C,0xF3,0xCF,0x3C,0xF3,0xCF,0x3C,0xF3,0xCF,0x3C,0xF3,0xCF,0x3C,0xF3,0xCF,0x3C,0xF3,0xCF,0x3C,0xF3,0xCF,0x00,0x00,0x00,0x00,0x00,0x07,0x3C,0xFB,0xC7,0x00, // '!'
+	0xE1,0xDC,0x3B,0x87,0x70,0xEE,0x1D,0xC3,0xB8,0x77,0x0E,0xE1,0xDC,0x3B,0x87,0x70,0xEE,0x1C, // '"'
+	0x00,0x03,0x80,0x38,0x00,0x01,0xC0,0x0E,0x00,0x00,0x70,0x07,0x00,0x00,0x1C,0x01,0xC0,0x00,0x07,0x00,0x70,0x00,0x01,0xC0,0x1C,0x00,0x00,0xE0,0x07,0x00,0x00,0x38,0x03,0x80,0x00,0x0E,0x00,0xE0,0x00,0x03,0x80,0x38,0x00,0x00,0xE0,0x0E,0x00,0x00,0x30,0x03,0x80,0x1F,0xFF,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xE1,0xFF,0xFF,0xFF,0xF8,0x00,0x70,0x07,0x00,0x00,0x1C,0x01,0xC0,0x00,0x0E,0x00,0x60,0x00,0x03,0x80,0x38,0x00,0x00,0xE0,0x0E,0x00,0x00,0x38,0x03,0x80,0x00,0x0E,0x00,0xE0,0x00,0x07,0x00,0x38,0x00,0x01,0xC0,0x1C,0x00,0x00,0x70,0x07,0x00,0x00,0x1C,0x01,0xC0,0x00,0x07,0x00,0x70,0x00,0x01,0x80,0x1C,0x00,0xFF,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xE0,0x03,0x80,0x38,0x00,0x00,0xE0,0x0E,0x00,0x00,0x70,0x03,0x80,0x00,0x1C,0x01,0xC0,0x00,0x07,0x00,0x70,0x00,0x01,0xC0,0x1C,0x00,0x00,0x70,0x07,0x00,0x00,0x18,0x01,0xC0,0x00,0x0E,0x00,0xE0,0x00,0x03,0x80,0x38,0x00,0x00,0xE0,0x0E,0x00,0x00,0x38,0x03,0x80,0x00, // '#'
+	0x00,0x07,0x00,0x00,0x00,0x70,0x00,0x00,0x07,0x00,0x00,0x00,0x70,0x00,0x00,0x07,0x00,0x00,0x00,0x70,0x00,0x00,0x3F,0xC0,0x00,0x1F,0xFF,0x80,0x03,0xFF,0xFC,0x00,0x7E,0x07,0xE0,0x0F,0x80,0x1F,0x01,0xE0,0x00,0xF8,0x1E,0x00,0x07,0x83,0xC0,0x00,0x3C,0x3C,0x00,0x03,0xC3,0x80,0x00,0x1C,0x38,0x00,0x01,0xC3,0x80,0x00,0x1C,0x38,0x00,0x01,0xC3,0x80,0x00,0x00,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x1E,0x00,0x00,0x01,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x7F,0x00,0x00,0x01,0xFC,0x00,0x00,0x0F,0xF8,0x00,0x00,0x1F,0xE0,0x00,0x00,0x7F,0x80,0x00,0x00,0xFE,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0x80,0x00,0x00,0x78,0x00,0x00,0x03,0xC0,0x00,0x00,0x1C,0x00,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0x70,0x00,0x01,0xE7,0x00,0x00,0x1E,0x78,0x00,0x03,0xC7,0xC0,0x00,0x3C,0x3E,0x00,0x07,0x81,0xF0,0x00,0xF8,0x0F,0xC0,0x7F,0x00,0x7F,0xFF,0xE0,0x03,0xFF,0xF8,0x00,0x07,0xFE,0x00,0x00,0x07,0x00,0x00,0x00,0x70,0x00,0x00,0x07,0x00,0x00,0x00,0x70,0x00,0x00,0x07,0x00,0x00, // '$'
+	0x03,0xE0,0x00,0x00,0x00,0x1F,0xF0,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x01,0xE0,0xF0,0x00,0x00,0x07,0x80,0xF0,0x00,0x00,0x0E,0x00,0xE0,0x01,0x00,0x38,0x00,0xE0,0x07,0x80,0x70,0x01,0xC0,0x0E,0x00,0xE0,0x03,0x80,0x38,0x01,0xC0,0x07,0x00,0xF0,0x03,0x80,0x0E,0x01,0xC0,0x07,0x00,0x1C,0x07,0x00,0x0E,0x00,0x38,0x0E,0x00,0x1C,0x00,0x70,0x38,0x00,0x1C,0x01,0xC0,0xE0,0x00,0x3C,0x07,0x81,0xC0,0x00,0x3C,0x1E,0x07,0x00,0x00,0x3F,0xFC,0x1C,0x00,0x00,0x3F,0xE0,0x38,0x00,0x00,0x1F,0x80,0xE0,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0xE0,0x1F,0x80,0x00,0x03,0x80,0xFF,0xC0,0x00,0x07,0x03,0xFF,0xC0,0x00,0x1C,0x0F,0x87,0xC0,0x00,0x70,0x1C,0x03,0x80,0x00,0xE0,0x70,0x03,0x80,0x03,0x80,0xE0,0x07,0x00,0x0F,0x01,0xC0,0x0E,0x00,0x1C,0x03,0x80,0x0C,0x00,0x70,0x06,0x00,0x18,0x01,0xE0,0x0C,0x00,0x30,0x03,0x80,0x18,0x00,0xE0,0x0E,0x00,0x38,0x01,0xC0,0x1C,0x00,0x70,0x03,0x80,0x10,0x00,0xE0,0x07,0x00,0x00,0x00,0xE0,0x1C,0x00,0x00,0x01,0xF0,0xF8,0x00,0x00,0x01,0xFF,0xE0,0x00,0x00,0x01,0xFF,0x80,0x00,0x00,0x00,0xFC,0x00, // '%'
+	0x00,0x3F,0x80,0x00,0x00,0x3F,0xF8,0x00,0x00,0x1F,0xFF,0x80,0x00,0x0F,0x83,0xE0,0x00,0x07,0xC0,0x3C,0x00,0x01,0xE0,0x07,0x00,0x00,0xF0,0x01,0xE0,0x00,0x3C,0x00,0x38,0x00,0x0F,0x00,0x0E,0x00,0x03,0xC0,0x07,0x80,0x00,0xF0,0x01,0xE0,0x00,0x3C,0x00,0x70,0x00,0x0F,0x00,0x3C,0x00,0x01,0xE0,0x1E,0x00,0x00,0x78,0x0F,0x00,0x00,0x0F,0x07,0x80,0x00,0x03,0xC7,0xC0,0x00,0x00,0x7B,0xE0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x3D,0xE0,0x00,0x00,0x1E,0x3C,0x00,0x00,0x0F,0x07,0x80,0x0E,0x07,0x80,0xF0,0x03,0x83,0xC0,0x1E,0x00,0xE1,0xE0,0x07,0xC0,0x78,0x78,0x00,0xF8,0x1E,0x1C,0x00,0x1E,0x07,0x0F,0x00,0x03,0xC1,0xC3,0xC0,0x00,0x78,0xF0,0xF0,0x00,0x0F,0x38,0x3C,0x00,0x03,0xFE,0x0F,0x00,0x00,0x7F,0x01,0xC0,0x00,0x0F,0xC0,0x78,0x00,0x01,0xF0,0x1E,0x00,0x00,0xFC,0x03,0xC0,0x00,0x7F,0x80,0xF8,0x00,0x7C,0xF0,0x1F,0xC0,0x7E,0x1E,0x01,0xFF,0xFF,0x03,0xC0,0x3F,0xFF,0x00,0xF8,0x01,0xFE,0x00,0x00, // '&'
+	0x73,0x9C,0xE7,0x39,0xCC,0x63,0x19,0xCE,0x00, // '''
+	0x00,0x08,0x00,0x38,0x00,0xF0,0x03,0xC0,0x0F,0x00,0x1C,0x00,0x70,0x01,0xE0,0x03,0x80,0x0E,0x00,0x1C,0x00,0x70,0x00,0xE0,0x03,0xC0,0x07,0x00,0x0E,0x00,0x3C,0x00,0x70,0x00,0xE0,0x03,0xC0,0x07,0x80,0x0E,0x00,0x1C,0x00,0x38,0x00,0xF0,0x01,0xE0,0x03,0xC0,0x07,0x80,0x0F,0x00,0x1E,0x00,0x3C,0x00,0x78,0x00,0xF0,0x01,0xE0,0x03,0xC0,0x07,0x80,0x0F,0x00,0x1E,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xF0,0x01,0xE0,0x01,0xC0,0x03,0x80,0x07,0x80,0x0F,0x00,0x0E,0x00,0x1E,0x00,0x1C,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0x70,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x01,0xE0,0x01,0xE0,0x01,0xE0,0x01,0xC0,0x01,0x00, // '('
+	0x40,0x01,0xC0,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x03,0xC0,0x03,0x80,0x03,0x80,0x07,0x80,0x07,0x00,0x0F,0x00,0x0E,0x00,0x1E,0x00,0x1C,0x00,0x38,0x00,0x78,0x00,0x70,0x00,0xE0,0x01,0xE0,0x03,0xC0,0x03,0x80,0x07,0x00,0x0F,0x00,0x1E,0x00,0x3C,0x00,0x78,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x03,0xC0,0x07,0x80,0x0F,0x00,0x1E,0x00,0x38,0x00,0x70,0x01,0xE0,0x03,0xC0,0x07,0x00,0x0E,0x00,0x3C,0x00,0x70,0x00,0xE0,0x03,0xC0,0x07,0x00,0x1E,0x00,0x38,0x00,0xF0,0x01,0xC0,0x07,0x00,0x1E,0x00,0x38,0x00,0xE0,0x07,0x80,0x0E,0x00,0x08,0x00,0x00, // ')'
+	0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x00,0xE0,0x01,0x00,0x70,0x04,0xF0,0x38,0x1E,0x7F,0x0C,0x3F,0x3F,0xE6,0xFF,0xC1,0xFF,0xFE,0x00,0x1F,0xF8,0x00,0x01,0xE0,0x00,0x01,0xF8,0x00,0x01,0xDC,0x00,0x01,0xE7,0x00,0x00,0xE3,0xC0,0x00,0xE0,0xF0,0x00,0xF0,0x38,0x00,0xF0,0x0E,0x00,0x70,0x07,0x80,0x78,0x01,0xC0,0x08,0x00,0x40, // '*'
+	0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x0F,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xF8,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00, // '+'
+	0x1C,0x38,0x70,0xE1,0xC7,0x8F,0x1C,0x38,0xF1,0xC7,0x8E,0x00, // ','
+	0xFF,0xFD,0xFF,0xFB,0xFF,0xF0, // '-'
+	0x73,0xEF,0xBE,0x70, // '.'
+	0x00,0x00,0x78,0x00,0x01,0xC0,0x00,0x07,0x00,0x00,0x3C,0x00,0x00,0xE0,0x00,0x03,0x80,0x00,0x1C,0x00,0x00,0x70,0x00,0x03,0xC0,0x00,0x0E,0x00,0x00,0x38,0x00,0x01,0xE0,0x00,0x07,0x00,0x00,0x1C,0x00,0x00,0xE0,0x00,0x03,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x01,0xC0,0x00,0x0E,0x00,0x00,0x38,0x00,0x00,0xE0,0x00,0x07,0x00,0x00,0x1C,0x00,0x00,0xF0,0x00,0x03,0x80,0x00,0x0E,0x00,0x00,0x70,0x00,0x01,0xC0,0x00,0x0F,0x00,0x00,0x38,0x00,0x00,0xE0,0x00,0x07,0x80,0x00,0x1C,0x00,0x00,0x70,0x00,0x03,0x80,0x00,0x0E,0x00,0x00,0x78,0x00,0x01,0xC0,0x00,0x07,0x00,0x00,0x3C,0x00,0x00,0xE0,0x00,0x03,0x80,0x00,0x1C,0x00,0x00,0x70,0x00,0x03,0xC0,0x00,0x0E,0x00,0x00,0x00, // '/'
+	0x00,0x3F,0x80,0x00,0x1F,0xFF,0x00,0x03,0xFF,0xF8,0x00,0x7C,0x07,0xC0,0x0F,0x00,0x1E,0x01,0xE0,0x00,0xF0,0x1C,0x00,0x07,0x03,0xC0,0x00,0x78,0x38,0x00,0x03,0x87,0x80,0x00,0x3C,0x78,0x00,0x03,0xC7,0x00,0x00,0x3C,0x70,0x00,0x01,0xC7,0x00,0x00,0x1C,0x70,0x00,0x01,0xCF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xC7,0x00,0x00,0x1C,0x70,0x00,0x01,0xC7,0x00,0x00,0x1C,0x78,0x00,0x03,0xC7,0x80,0x00,0x3C,0x78,0x00,0x03,0xC3,0x80,0x00,0x38,0x3C,0x00,0x07,0x81,0xE0,0x00,0xF0,0x1E,0x00,0x0F,0x00,0xF8,0x01,0xE0,0x07,0xC0,0x7C,0x00,0x3F,0xFF,0x80,0x01,0xFF,0xF0,0x00,0x03,0xF8,0x00, // '0'
+	0x00,0x06,0x00,0x3E,0x01,0xFE,0x07,0xFE,0x3F,0xCE,0xFF,0x0E,0xF8,0x0E,0xC0,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E, // '1'
+	0x00,0x7F,0x80,0x00,0x0F,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x1F,0x81,0xFC,0x01,0xF0,0x01,0xE0,0x1E,0x00,0x07,0x81,0xE0,0x00,0x1E,0x0F,0x00,0x00,0xF0,0x70,0x00,0x07,0x87,0x80,0x00,0x1C,0x3C,0x00,0x00,0xE1,0xE0,0x00,0x07,0x8E,0x00,0x00,0x38,0x00,0x00,0x01,0xC0,0x00,0x00,0x0E,0x00,0x00,0x00,0xF0,0x00,0x00,0x07,0x00,0x00,0x00,0x78,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x3C,0x00,0x00,0x01,0xE0,0x00,0x00,0x1E,0x00,0x00,0x01,0xE0,0x00,0x00,0x1E,0x00,0x00,0x01,0xE0,0x00,0x00,0x1E,0x00,0x00,0x01,0xE0,0x00,0x00,0x1F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF8,0x00,0x00,0x07,0x80,0x00,0x00,0x7F,0xFF,0xFF,0xF3,0xFF,0xFF,0xFF,0x9F,0xFF,0xFF,0xFC, // '2'
+	0x00,0x7F,0x80,0x00,0x1F,0xFF,0x00,0x07,0xFF,0xFC,0x00,0xFC,0x07,0xE0,0x1F,0x00,0x1F,0x03,0xC0,0x00,0xF0,0x3C,0x00,0x07,0x87,0x80,0x00,0x78,0x70,0x00,0x03,0x87,0x00,0x00,0x3C,0xF0,0x00,0x03,0xCF,0x00,0x00,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x3C,0x00,0x00,0x03,0x80,0x00,0x00,0x78,0x00,0x00,0x07,0x00,0x00,0x00,0xF0,0x00,0x00,0x3E,0x00,0x00,0x0F,0xC0,0x00,0x7F,0xF0,0x00,0x07,0xFE,0x00,0x00,0x7F,0xF8,0x00,0x00,0x0F,0xE0,0x00,0x00,0x1F,0x00,0x00,0x00,0xF8,0x00,0x00,0x07,0x80,0x00,0x00,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x1C,0x00,0x00,0x01,0xC0,0x00,0x00,0x1E,0xE0,0x00,0x01,0xEE,0x00,0x00,0x1C,0xF0,0x00,0x01,0xCF,0x00,0x00,0x3C,0x70,0x00,0x03,0xC7,0x80,0x00,0x78,0x3C,0x00,0x07,0x83,0xF0,0x01,0xF0,0x1F,0xC0,0x7E,0x00,0x7F,0xFF,0xC0,0x03,0xFF,0xF0,0x00,0x07,0xFC,0x00, // '3'
+	0x00,0x00,0x1F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF8,0x00,0x00,0x07,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x7B,0xC0,0x00,0x00,0xE7,0x80,0x00,0x03,0xCF,0x00,0x00,0x0F,0x1E,0x00,0x00,0x1C,0x3C,0x00,0x00,0x78,0x78,0x00,0x01,0xE0,0xF0,0x00,0x03,0x81,0xE0,0x00,0x0F,0x03,0xC0,0x00,0x3C,0x07,0x80,0x00,0x70,0x0F,0x00,0x01,0xE0,0x1E,0x00,0x03,0x80,0x3C,0x00,0x0F,0x00,0x78,0x00,0x3C,0x00,0xF0,0x00,0x70,0x01,0xE0,0x01,0xE0,0x03,0xC0,0x07,0x80,0x07,0x80,0x0E,0x00,0x0F,0x00,0x3C,0x00,0x1E,0x00,0xF0,0x00,0x3C,0x01,0xC0,0x00,0x78,0x07,0x80,0x00,0xF0,0x1F,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x0F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x3C,0x00, // '4'
+	0x1F,0xFF,0xFF,0x83,0xFF,0xFF,0xF0,0x7F,0xFF,0xFE,0x0E,0x00,0x00,0x01,0xC0,0x00,0x00,0x38,0x00,0x00,0x07,0x00,0x00,0x00,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0x80,0x00,0x00,0x70,0x00,0x00,0x0E,0x00,0x00,0x01,0xC0,0x00,0x00,0x38,0x7F,0x80,0x07,0x7F,0xFC,0x01,0xFF,0xFF,0xE0,0x3F,0x80,0x7E,0x07,0xC0,0x03,0xE0,0x70,0x00,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x0E,0x00,0x00,0x01,0xC0,0x00,0x00,0x38,0x00,0x00,0x07,0x00,0x00,0x00,0xF0,0x00,0x00,0x1C,0xE0,0x00,0x03,0x9C,0x00,0x00,0x73,0xC0,0x00,0x1E,0x78,0x00,0x03,0xC7,0x00,0x00,0x70,0xF0,0x00,0x1E,0x0F,0x00,0x07,0x81,0xF0,0x01,0xF0,0x1F,0x80,0xFC,0x01,0xFF,0xFF,0x00,0x0F,0xFF,0x80,0x00,0x3F,0xC0,0x00, // '5'
+	0x00,0x01,0xF8,0x00,0x01,0xFF,0x00,0x00,0xFF,0xE0,0x00,0x7F,0x80,0x00,0x1F,0x80,0x00,0x07,0xC0,0x00,0x01,0xE0,0x00,0x00,0x78,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x1C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1C,0x00,0x00,0x03,0x81,0xFC,0x00,0xF1,0xFF,0xF0,0x1E,0x7F,0xFF,0x03,0x9F,0x03,0xF0,0x77,0x80,0x1F,0x0F,0xC0,0x00,0xF1,0xF0,0x00,0x1E,0x3E,0x00,0x01,0xE7,0x80,0x00,0x1C,0xE0,0x00,0x03,0xDC,0x00,0x00,0x7B,0x80,0x00,0x0F,0x70,0x00,0x00,0xEE,0x00,0x00,0x1D,0xC0,0x00,0x03,0xB8,0x00,0x00,0x77,0x00,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x79,0xC0,0x00,0x0E,0x3C,0x00,0x03,0xC7,0x80,0x00,0x78,0x78,0x00,0x1E,0x07,0x80,0x07,0xC0,0x78,0x01,0xF0,0x0F,0xC0,0xFC,0x00,0x7F,0xFF,0x00,0x07,0xFF,0x80,0x00,0x1F,0xC0,0x00, // '6'
+	0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFC,0x00,0x00,0x01,0xE0,0x00,0x00,0x0E,0x00,0x00,0x00,0xF0,0x00,0x00,0x07,0x00,0x00,0x00,0x78,0x00,0x00,0x03,0x80,0x00,0x00,0x1C,0x00,0x00,0x01,0xE0,0x00,0x00,0x0E,0x00,0x00,0x00,0xF0,0x00,0x00,0x07,0x00,0x00,0x00,0x78,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x01,0xC0,0x00,0x00,0x1E,0x00,0x00,0x00,0xF0,0x00,0x00,0x07,0x00,0x00,0x00,0x78,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x01,0xC0,0x00,0x00,0x1E,0x00,0x00,0x00,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0x78,0x00,0x00,0x07,0x80,0x00,0x00,0x3C,0x00,0x00,0x01,0xC0,0x00,0x00,0x1E,0x00,0x00,0x00,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0x70,0x00,0x00,0x07,0x80,0x00,0x00,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x1E,0x00,0x00,0x00,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00, // '7'
+	0x00,0x7F,0xC0,0x00,0x1F,0xFF,0x00,0x07,0xFF,0xFC,0x00,0xFC,0x07,0xE0,0x1F,0x00,0x1F,0x01,0xE0,0x00,0xF0,0x3C,0x00,0x07,0x83,0x80,0x00,0x78,0x78,0x00,0x03,0xC7,0x80,0x00,0x3C,0x78,0x00,0x03,0xC7,0x80,0x00,0x1C,0x78,0x00,0x03,0xC7,0x80,0x00,0x3C,0x78,0x00,0x03,0xC3,0x80,0x00,0x38,0x3C,0x00,0x07,0x81,0xE0,0x00,0xF0,0x0F,0x00,0x1E,0x00,0x7C,0x07,0xC0,0x03,0xFF,0xF8,0x00,0x0F,0xFE,0x00,0x03,0xFF,0xF8,0x00,0xFC,0x07,0xE0,0x1F,0x00,0x1F,0x03,0xC0,0x00,0x78,0x78,0x00,0x03,0xC7,0x80,0x00,0x3C,0x70,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEE,0x00,0x00,0x0E,0xE0,0x00,0x00,0xEF,0x00,0x00,0x0E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0x70,0x00,0x01,0xC7,0x80,0x00,0x3C,0x3C,0x00,0x07,0x83,0xE0,0x00,0xF8,0x1F,0xC0,0x7F,0x00,0x7F,0xFF,0xE0,0x03,0xFF,0xF8,0x00,0x07,0xFC,0x00, // '8'
+	0x00,0x7F,0x80,0x00,0x3F,0xFC,0x00,0x1F,0xFF,0xE0,0x07,0xE0,0x7E,0x01,0xF0,0x03,0xE0,0x7C,0x00,0x3C,0x0F,0x00,0x03,0xC3,0xC0,0x00,0x3C,0x78,0x00,0x07,0x8E,0x00,0x00,0x73,0xC0,0x00,0x0F,0x78,0x00,0x01,0xEE,0x00,0x00,0x3D,0xC0,0x00,0x03,0xB8,0x00,0x00,0x77,0x00,0x00,0x0E,0xE0,0x00,0x01,0xDE,0x00,0x00,0x3B,0xC0,0x00,0x07,0x78,0x00,0x01,0xE7,0x00,0x00,0x3C,0xF0,0x00,0x0F,0x8F,0x00,0x03,0xF1,0xE0,0x00,0xFE,0x1F,0x00,0x3D,0xC1,0xF0,0x1F,0x38,0x1F,0xFF,0xCF,0x01,0xFF,0xE1,0xE0,0x07,0xF0,0x38,0x00,0x00,0x07,0x00,0x00,0x00,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x00,0x00,0x01,0xE0,0x00,0x00,0x38,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x01,0xF0,0x00,0x00,0x7C,0x00,0x00,0xFF,0x00,0x03,0xFF,0x80,0x00,0x7F,0xC0,0x00,0x0F,0xC0,0x00,0x00, // '9'
+	0x38,0xF9,0xF3,0xE3,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x8F,0x9F,0x3E,0x38, // ':'
+	0x38,0xF9,0xF3,0xE3,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0xC3,0x87,0x0E,0x3C,0x78,0xE1,0xC7,0x8E,0x3C,0x70, // ';'
+	0x00,0x00,0x01,0x80,0x00,0x01,0xE0,0x00,0x01,0xF8,0x00,0x01,0xF8,0x00,0x01,0xF8,0x00,0x03,0xF8,0x00,0x03,0xF8,0x00,0x03,0xF8,0x00,0x03,0xF8,0x00,0x03,0xF8,0x00,0x03,0xF8,0x00,0x03,0xF0,0x00,0x00,0xF0,0x00,0x00,0x3F,0x00,0x00,0x03,0xF0,0x00,0x00,0x3F,0x80,0x00,0x03,0xF8,0x00,0x00,0x3F,0x80,0x00,0x03,0xF8,0x00,0x00,0x1F,0x80,0x00,0x01,0xF8,0x00,0x00,0x1F,0x80,0x00,0x01,0xF8,0x00,0x00,0x1E,0x00,0x00,0x01,0x80, // '<'
+	0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xEF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xEF,0xFF,0xFF,0xF8, // '='
+	0x80,0x00,0x00,0x70,0x00,0x00,0x3E,0x00,0x00,0x0F,0xC0,0x00,0x01,0xFC,0x00,0x00,0x3F,0x80,0x00,0x07,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,0xE0,0x00,0x01,0xFC,0x00,0x00,0x3F,0x80,0x00,0x07,0xE0,0x00,0x00,0xF0,0x00,0x01,0xF8,0x00,0x03,0xF8,0x00,0x07,0xF0,0x00,0x0F,0xE0,0x00,0x3F,0x80,0x00,0x7F,0x00,0x00,0xFE,0x00,0x01,0xFC,0x00,0x03,0xF0,0x00,0x03,0xE0,0x00,0x01,0xC0,0x00,0x00,0x80,0x00,0x00,0x00, // '>'
+	0x00,0xFE,0x00,0x07,0xFF,0xC0,0x0F,0xFF,0xE0,0x1F,0x81,0xF0,0x3E,0x00,0xF8,0x7C,0x00,0x78,0x78,0x00,0x3C,0x70,0x00,0x1C,0xF0,0x00,0x1C,0xF0,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0xF0,0x00,0x01,0xE0,0x00,0x03,0xC0,0x00,0x07,0x80,0x00,0x0F,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x78,0x00,0x00,0xF8,0x00,0x00,0x78,0x00,0x00,0x70,0x00, // '?'
+	0x00,0x00,0x07,0xFE,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF8,0x00,0x00,0x00,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x1F,0xE0,0x07,0xF8,0x00,0x00,0x0F,0xC0,0x00,0x1F,0x80,0x00,0x0F,0xC0,0x00,0x01,0xF0,0x00,0x07,0xC0,0x00,0x00,0x3E,0x00,0x03,0xE0,0x00,0x00,0x03,0x80,0x01,0xF0,0x00,0x00,0x00,0x70,0x00,0x78,0x00,0x00,0x00,0x0E,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x1E,0x00,0x00,0x00,0x00,0x70,0x07,0x00,0x00,0x00,0x00,0x1C,0x03,0xC0,0x00,0x7F,0x00,0x03,0x80,0xE0,0x00,0x7F,0xF0,0x00,0xE0,0x78,0x00,0x3F,0xFE,0x00,0x18,0x1C,0x00,0x1F,0x07,0xC0,0x07,0x07,0x00,0x0F,0x00,0x70,0x01,0xC3,0x80,0x07,0x80,0x1C,0x00,0x70,0xE0,0x01,0xC0,0x07,0x00,0x1C,0x38,0x00,0xF0,0x01,0xC0,0x03,0x1C,0x00,0x38,0x00,0x70,0x00,0xC7,0x00,0x1E,0x00,0x1C,0x00,0x31,0xC0,0x07,0x00,0x07,0x00,0x0C,0x70,0x01,0xC0,0x01,0xC0,0x03,0x9C,0x00,0xF0,0x00,0x70,0x00,0xE7,0x00,0x38,0x00,0x38,0x00,0x31,0xC0,0x0E,0x00,0x0E,0x00,0x0C,0x70,0x03,0x80,0x03,0x80,0x03,0x1C,0x00,0xE0,0x00,0xE0,0x00,0xC7,0x00,0x38,0x00,0x38,0x00,0x71,0xC0,0x0E,0x00,0x0E,0x00,0x1C,0x70,0x03,0x80,0x03,0x80,0x07,0x1C,0x00,0xE0,0x00,0xE0,0x01,0x87,0x00,0x38,0x00,0x78,0x00,0xE1,0xC0,0x0E,0x00,0x1E,0x00,0x38,0x70,0x03,0x80,0x0F,0x80,0x1C,0x0E,0x00,0xF0,0x07,0xE0,0x07,0x03,0x80,0x1E,0x03,0xBC,0x03,0x80,0xE0,0x07,0xC1,0xE7,0x81,0xC0,0x3C,0x00,0xFF,0xF1,0xFF,0xF0,0x07,0x00,0x1F,0xF0,0x3F,0xF0,0x01,0xE0,0x03,0xF0,0x03,0xF0,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x0C,0x00,0x00,0x00,0x7F,0x80,0x3F,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x03,0xFF,0x00,0x00,0x00, // '@'
+	0x00,0x00,0xE0,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x3F,0x80,0x00,0x00,0x03,0xB8,0x00,0x00,0x00,0x3B,0x80,0x00,0x00,0x07,0xBC,0x00,0x00,0x00,0x71,0xC0,0x00,0x00,0x07,0x1C,0x00,0x00,0x00,0xF1,0xE0,0x00,0x00,0x0E,0x0E,0x00,0x00,0x01,0xE0,0xF0,0x00,0x00,0x1E,0x0F,0x00,0x00,0x01,0xC0,0x70,0x00,0x00,0x3C,0x07,0x80,0x00,0x03,0x80,0x78,0x00,0x00,0x38,0x03,0x80,0x00,0x07,0x80,0x3C,0x00,0x00,0x70,0x01,0xC0,0x00,0x0F,0x00,0x1E,0x00,0x00,0xF0,0x01,0xE0,0x00,0x0E,0x00,0x0E,0x00,0x01,0xE0,0x00,0xF0,0x00,0x1E,0x00,0x0F,0x00,0x01,0xC0,0x00,0x70,0x00,0x3C,0x00,0x07,0x80,0x03,0xC0,0x00,0x78,0x00,0x78,0x00,0x03,0xC0,0x07,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0xFE,0x00,0xF0,0x00,0x01,0xE0,0x0E,0x00,0x00,0x0E,0x01,0xE0,0x00,0x00,0xF0,0x1E,0x00,0x00,0x0F,0x03,0xC0,0x00,0x00,0x78,0x3C,0x00,0x00,0x07,0x83,0x80,0x00,0x00,0x38,0x78,0x00,0x00,0x03,0xC7,0x80,0x00,0x00,0x3C,0x70,0x00,0x00,0x01,0xCF,0x00,0x00,0x00,0x1E,0xF0,0x00,0x00,0x01,0xE0, // 'A'
+	0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x3F,0xFF,0xFF,0x01,0xC0,0x00,0xFC,0x0E,0x00,0x01,0xF0,0x70,0x00,0x07,0xC3,0x80,0x00,0x1E,0x1C,0x00,0x00,0x78,0xE0,0x00,0x03,0xC7,0x00,0x00,0x1E,0x38,0x00,0x00,0xF1,0xC0,0x00,0x07,0x8E,0x00,0x00,0x3C,0x70,0x00,0x01,0xE3,0x80,0x00,0x0E,0x1C,0x00,0x00,0xF0,0xE0,0x00,0x0F,0x07,0x00,0x00,0xF8,0x38,0x00,0x1F,0x81,0xFF,0xFF,0xF0,0x0F,0xFF,0xFF,0x00,0x7F,0xFF,0xFE,0x03,0x80,0x00,0xFC,0x1C,0x00,0x01,0xF0,0xE0,0x00,0x07,0xC7,0x00,0x00,0x1E,0x38,0x00,0x00,0x79,0xC0,0x00,0x03,0xCE,0x00,0x00,0x0E,0x70,0x00,0x00,0x73,0x80,0x00,0x03,0xDC,0x00,0x00,0x1E,0xE0,0x00,0x00,0xE7,0x00,0x00,0x07,0x38,0x00,0x00,0x79,0xC0,0x00,0x03,0xCE,0x00,0x00,0x3C,0x70,0x00,0x03,0xE3,0x80,0x00,0x3E,0x1C,0x00,0x07,0xE0,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xC0,0x3F,0xFF,0xF0,0x00, // 'B'
+	0x00,0x0F,0xF8,0x00,0x00,0x3F,0xFF,0x80,0x00,0x7F,0xFF,0xE0,0x00,0x7F,0x01,0xFC,0x00,0x7C,0x00,0x1F,0x00,0x7C,0x00,0x07,0xC0,0x7C,0x00,0x01,0xE0,0x3C,0x00,0x00,0x78,0x3C,0x00,0x00,0x3C,0x1E,0x00,0x00,0x0F,0x1E,0x00,0x00,0x07,0x8F,0x00,0x00,0x01,0xC7,0x00,0x00,0x00,0xE7,0x80,0x00,0x00,0x7B,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x3C,0xE0,0x00,0x00,0x1C,0x78,0x00,0x00,0x0E,0x3C,0x00,0x00,0x0F,0x0F,0x00,0x00,0x07,0x87,0x80,0x00,0x07,0x81,0xE0,0x00,0x03,0xC0,0xF8,0x00,0x03,0xC0,0x3E,0x00,0x03,0xE0,0x0F,0x80,0x03,0xE0,0x03,0xF0,0x0F,0xE0,0x00,0xFF,0xFF,0xC0,0x00,0x1F,0xFF,0xC0,0x00,0x01,0xFF,0x00,0x00, // 'C'
+	0xFF,0xFF,0x80,0x01,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xF0,0x07,0x80,0x07,0xF0,0x0F,0x00,0x01,0xF0,0x1E,0x00,0x00,0xF0,0x3C,0x00,0x00,0xF0,0x78,0x00,0x00,0xF0,0xF0,0x00,0x00,0xF1,0xE0,0x00,0x01,0xE3,0xC0,0x00,0x01,0xE7,0x80,0x00,0x03,0xCF,0x00,0x00,0x03,0x9E,0x00,0x00,0x07,0xBC,0x00,0x00,0x0F,0x78,0x00,0x00,0x1E,0xF0,0x00,0x00,0x1D,0xE0,0x00,0x00,0x3B,0xC0,0x00,0x00,0x77,0x80,0x00,0x00,0xEF,0x00,0x00,0x01,0xDE,0x00,0x00,0x03,0xBC,0x00,0x00,0x07,0x78,0x00,0x00,0x0E,0xF0,0x00,0x00,0x1D,0xE0,0x00,0x00,0x3B,0xC0,0x00,0x00,0x77,0x80,0x00,0x01,0xEF,0x00,0x00,0x03,0xDE,0x00,0x00,0x07,0xBC,0x00,0x00,0x0E,0x78,0x00,0x00,0x3C,0xF0,0x00,0x00,0x79,0xE0,0x00,0x01,0xE3,0xC0,0x00,0x03,0xC7,0x80,0x00,0x0F,0x0F,0x00,0x00,0x3C,0x1E,0x00,0x01,0xF0,0x3C,0x00,0x07,0xC0,0x78,0x00,0x7F,0x00,0xFF,0xFF,0xFC,0x01,0xFF,0xFF,0xE0,0x03,0xFF,0xFE,0x00,0x00, // 'D'
+	0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xEF,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xF0,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xE0, // 'E'
+	0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xEF,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xF0,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x00, // 'F'
+	0x00,0x0F,0xF8,0x00,0x00,0x1F,0xFF,0x80,0x00,0x3F,0xFF,0xF0,0x00,0x7F,0x00,0xFE,0x00,0x7E,0x00,0x1F,0x80,0x7C,0x00,0x03,0xC0,0x3C,0x00,0x00,0xF0,0x3C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x1E,0x1E,0x00,0x00,0x07,0x0E,0x00,0x00,0x03,0xCF,0x00,0x00,0x01,0xE7,0x80,0x00,0x00,0x73,0x80,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xE0,0x00,0xFF,0xFE,0xF0,0x00,0x7F,0xFF,0x78,0x00,0x3F,0xFF,0xBC,0x00,0x00,0x01,0xDE,0x00,0x00,0x00,0xE7,0x00,0x00,0x00,0x73,0x80,0x00,0x00,0x39,0xE0,0x00,0x00,0x1C,0xF0,0x00,0x00,0x0E,0x78,0x00,0x00,0x07,0x1E,0x00,0x00,0x03,0x8F,0x00,0x00,0x01,0xC3,0xC0,0x00,0x00,0xE1,0xF0,0x00,0x00,0x70,0x78,0x00,0x00,0x78,0x1F,0x00,0x00,0x7C,0x07,0xC0,0x00,0xFC,0x01,0xFC,0x03,0xFC,0x00,0x7F,0xFF,0xFC,0x00,0x0F,0xFF,0xF0,0x00,0x00,0xFF,0xC0,0x00, // 'G'
+	0xF0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xBC,0x00,0x00,0x03,0xDE,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0xF7,0x80,0x00,0x00,0x7B,0xC0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xBC,0x00,0x00,0x03,0xDE,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0xF7,0x80,0x00,0x00,0x7B,0xC0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xBC,0x00,0x00,0x03,0xDF,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xFB,0xC0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xBC,0x00,0x00,0x03,0xDE,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0xF7,0x80,0x00,0x00,0x7B,0xC0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xBC,0x00,0x00,0x03,0xDE,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0xF7,0x80,0x00,0x00,0x7B,0xC0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xBC,0x00,0x00,0x03,0xC0, // 'H'
+	0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBC, // 'I'
+	0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0E,0x78,0x00,0x03,0xC7,0x80,0x00,0x78,0xF0,0x00,0x1E,0x0F,0x00,0x07,0xC1,0xF0,0x01,0xF0,0x1F,0x80,0xFC,0x01,0xFF,0xFF,0x00,0x0F,0xFF,0xC0,0x00,0x3F,0xC0,0x00, // 'J'
+	0xF0,0x00,0x00,0x7C,0x78,0x00,0x00,0x7C,0x3C,0x00,0x00,0x3C,0x1E,0x00,0x00,0x3C,0x0F,0x00,0x00,0x3C,0x07,0x80,0x00,0x3C,0x03,0xC0,0x00,0x3C,0x01,0xE0,0x00,0x3C,0x00,0xF0,0x00,0x3E,0x00,0x78,0x00,0x3E,0x00,0x3C,0x00,0x3E,0x00,0x1E,0x00,0x3E,0x00,0x0F,0x00,0x3E,0x00,0x07,0x80,0x3E,0x00,0x03,0xC0,0x3E,0x00,0x01,0xE0,0x3E,0x00,0x00,0xF0,0x3E,0x00,0x00,0x78,0x3E,0x00,0x00,0x3C,0x3E,0x00,0x00,0x1E,0x1F,0x00,0x00,0x0F,0x1F,0xC0,0x00,0x07,0x9F,0xF0,0x00,0x03,0xDE,0x78,0x00,0x01,0xFE,0x1E,0x00,0x00,0xFE,0x0F,0x80,0x00,0x7E,0x03,0xE0,0x00,0x3E,0x00,0xF8,0x00,0x1E,0x00,0x3C,0x00,0x0F,0x00,0x0F,0x00,0x07,0x80,0x07,0xC0,0x03,0xC0,0x01,0xF0,0x01,0xE0,0x00,0x7C,0x00,0xF0,0x00,0x1E,0x00,0x78,0x00,0x07,0x80,0x3C,0x00,0x01,0xE0,0x1E,0x00,0x00,0xF8,0x0F,0x00,0x00,0x3E,0x07,0x80,0x00,0x0F,0x03,0xC0,0x00,0x03,0xC1,0xE0,0x00,0x00,0xF0,0xF0,0x00,0x00,0x7C,0x78,0x00,0x00,0x1F,0x3C,0x00,0x00,0x07,0xC0, // 'K'
+	0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xEF,0xFF,0xFF,0xF8, // 'L'
+	0xF8,0x00,0x00,0x00,0x0F,0xDF,0x80,0x00,0x00,0x01,0xFB,0xF0,0x00,0x00,0x00,0x3F,0x7F,0x00,0x00,0x00,0x0F,0xEF,0xE0,0x00,0x00,0x01,0xFD,0xFC,0x00,0x00,0x00,0x7F,0xBF,0xC0,0x00,0x00,0x0F,0xF7,0xB8,0x00,0x00,0x01,0xDE,0xF7,0x80,0x00,0x00,0x7B,0xDE,0xF0,0x00,0x00,0x0E,0x7B,0xCF,0x00,0x00,0x03,0xCF,0x79,0xE0,0x00,0x00,0x79,0xEF,0x1C,0x00,0x00,0x1E,0x3D,0xE3,0xC0,0x00,0x03,0xC7,0xBC,0x38,0x00,0x00,0x70,0xF7,0x87,0x80,0x00,0x1E,0x1E,0xF0,0xF0,0x00,0x03,0x83,0xDE,0x0E,0x00,0x00,0xF0,0x7B,0xC1,0xE0,0x00,0x1E,0x0F,0x78,0x1C,0x00,0x03,0x81,0xEF,0x03,0xC0,0x00,0xF0,0x3D,0xE0,0x38,0x00,0x1C,0x07,0xBC,0x07,0x00,0x07,0x80,0xF7,0x80,0xF0,0x00,0xE0,0x1E,0xF0,0x0E,0x00,0x3C,0x03,0xDE,0x01,0xE0,0x07,0x80,0x7B,0xC0,0x1C,0x00,0xE0,0x0F,0x78,0x03,0xC0,0x3C,0x01,0xEF,0x00,0x78,0x07,0x00,0x3D,0xE0,0x07,0x01,0xE0,0x07,0xBC,0x00,0xF0,0x3C,0x00,0xF7,0x80,0x0E,0x07,0x00,0x1E,0xF0,0x01,0xE1,0xE0,0x03,0xDE,0x00,0x1C,0x38,0x00,0x7B,0xC0,0x03,0x8F,0x00,0x0F,0x78,0x00,0x79,0xC0,0x01,0xEF,0x00,0x07,0x78,0x00,0x3D,0xE0,0x00,0xFF,0x00,0x07,0xBC,0x00,0x0F,0xC0,0x00,0xF7,0x80,0x01,0xF8,0x00,0x1E,0xF0,0x00,0x3E,0x00,0x03,0xDE,0x00,0x03,0xC0,0x00,0x7B,0xC0,0x00,0x78,0x00,0x0F,0x00, // 'M'
+	0xF0,0x00,0x00,0x0E,0xF0,0x00,0x00,0x0E,0xF8,0x00,0x00,0x0E,0xFC,0x00,0x00,0x0E,0xFC,0x00,0x00,0x0E,0xFE,0x00,0x00,0x0E,0xEF,0x00,0x00,0x0E,0xEF,0x00,0x00,0x0E,0xE7,0x80,0x00,0x0E,0xE3,0xC0,0x00,0x0E,0xE3,0xC0,0x00,0x0E,0xE1,0xE0,0x00,0x0E,0xE0,0xF0,0x00,0x0E,0xE0,0xF0,0x00,0x0E,0xE0,0x78,0x00,0x0E,0xE0,0x3C,0x00,0x0E,0xE0,0x3C,0x00,0x0E,0xE0,0x1E,0x00,0x0E,0xE0,0x0F,0x00,0x0E,0xE0,0x0F,0x00,0x0E,0xE0,0x07,0x80,0x0E,0xE0,0x03,0xC0,0x0E,0xE0,0x03,0xC0,0x0E,0xE0,0x01,0xE0,0x0E,0xE0,0x00,0xF0,0x0E,0xE0,0x00,0xF0,0x0E,0xE0,0x00,0x78,0x0E,0xE0,0x00,0x3C,0x0E,0xE0,0x00,0x3C,0x0E,0xE0,0x00,0x1E,0x0E,0xE0,0x00,0x0F,0x0E,0xE0,0x00,0x0F,0x0E,0xE0,0x00,0x07,0x8E,0xE0,0x00,0x03,0xCE,0xE0,0x00,0x03,0xCE,0xE0,0x00,0x01,0xEE,0xE0,0x00,0x00,0xFE,0xE0,0x00,0x00,0xFE,0xE0,0x00,0x00,0x7E,0xE0,0x00,0x00,0x3E,0xE0,0x00,0x00,0x3E,0xE0,0x00,0x00,0x1E,0xE0,0x00,0x00,0x0E, // 'N'
+	0x00,0x0F,0xF8,0x00,0x00,0x1F,0xFF,0x80,0x00,0x0F,0xFF,0xF8,0x00,0x0F,0xE0,0x3F,0x80,0x07,0xC0,0x01,0xF0,0x03,0xE0,0x00,0x3E,0x00,0xF0,0x00,0x07,0x80,0x78,0x00,0x00,0xF0,0x3C,0x00,0x00,0x1E,0x0F,0x00,0x00,0x07,0x87,0x80,0x00,0x00,0xF1,0xE0,0x00,0x00,0x3C,0x70,0x00,0x00,0x07,0x1C,0x00,0x00,0x01,0xCF,0x00,0x00,0x00,0x7B,0xC0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x07,0xBC,0x00,0x00,0x01,0xEE,0x00,0x00,0x00,0x7B,0x80,0x00,0x00,0x1E,0xE0,0x00,0x00,0x07,0xB8,0x00,0x00,0x01,0xEE,0x00,0x00,0x00,0x7B,0x80,0x00,0x00,0x1E,0xE0,0x00,0x00,0x07,0xB8,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0x7B,0xC0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x07,0xBC,0x00,0x00,0x01,0xE7,0x00,0x00,0x00,0x71,0xC0,0x00,0x00,0x1C,0x78,0x00,0x00,0x0F,0x1E,0x00,0x00,0x03,0xC3,0xC0,0x00,0x01,0xE0,0xF0,0x00,0x00,0x78,0x1E,0x00,0x00,0x3C,0x03,0xC0,0x00,0x1F,0x00,0xF8,0x00,0x0F,0x80,0x1F,0x00,0x07,0xC0,0x03,0xF8,0x0F,0xE0,0x00,0x3F,0xFF,0xE0,0x00,0x07,0xFF,0xF0,0x00,0x00,0x3F,0xE0,0x00, // 'O'
+	0xFF,0xFF,0xF0,0x03,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF0,0x3C,0x00,0x07,0xF0,0xF0,0x00,0x07,0xE3,0xC0,0x00,0x07,0x8F,0x00,0x00,0x0F,0x3C,0x00,0x00,0x3C,0xF0,0x00,0x00,0x7B,0xC0,0x00,0x01,0xEF,0x00,0x00,0x03,0xBC,0x00,0x00,0x0E,0xF0,0x00,0x00,0x3B,0xC0,0x00,0x00,0xEF,0x00,0x00,0x03,0xBC,0x00,0x00,0x1E,0xF0,0x00,0x00,0x7B,0xC0,0x00,0x01,0xEF,0x00,0x00,0x0F,0x3C,0x00,0x00,0x7C,0xF0,0x00,0x03,0xE3,0xC0,0x00,0x7F,0x0F,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0x80,0xFF,0xFF,0xF0,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x00, // 'P'
+	0x00,0x0F,0xF0,0x00,0x00,0x1F,0xFF,0x80,0x00,0x0F,0xFF,0xF8,0x00,0x0F,0xE0,0x3F,0x80,0x07,0xC0,0x03,0xF0,0x03,0xE0,0x00,0x3E,0x01,0xF0,0x00,0x07,0x80,0x78,0x00,0x00,0xF0,0x3C,0x00,0x00,0x1C,0x0F,0x00,0x00,0x07,0x87,0x80,0x00,0x00,0xE1,0xE0,0x00,0x00,0x3C,0x70,0x00,0x00,0x0F,0x3C,0x00,0x00,0x01,0xCF,0x00,0x00,0x00,0x7B,0xC0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x07,0xB8,0x00,0x00,0x01,0xEE,0x00,0x00,0x00,0x7B,0x80,0x00,0x00,0x1E,0xE0,0x00,0x00,0x07,0xB8,0x00,0x00,0x01,0xEE,0x00,0x00,0x00,0x7B,0x80,0x00,0x00,0x1E,0xE0,0x00,0x00,0x07,0xB8,0x00,0x00,0x01,0xEE,0x00,0x00,0x00,0x7B,0x80,0x00,0x00,0x1E,0xF0,0x00,0x00,0x07,0xBC,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0x71,0xC0,0x00,0x00,0x3C,0x78,0x00,0x00,0x0F,0x1E,0x00,0x00,0x03,0x83,0xC0,0x00,0x01,0xE0,0xF0,0x00,0x00,0x78,0x1E,0x00,0x00,0x3C,0x07,0xC0,0x00,0x1E,0x00,0xF8,0x00,0x0F,0x80,0x1F,0x00,0x07,0xC0,0x03,0xF8,0x0F,0xE0,0x00,0x3F,0xFF,0xE0,0x00,0x07,0xFF,0xF8,0x00,0x00,0x3F,0xFF,0x80,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x40, // 'Q'
+	0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xF8,0x03,0xFF,0xFF,0xFC,0x07,0x80,0x01,0xFC,0x0F,0x00,0x00,0x7C,0x1E,0x00,0x00,0x7C,0x3C,0x00,0x00,0x78,0x78,0x00,0x00,0x78,0xF0,0x00,0x00,0xF1,0xE0,0x00,0x00,0xE3,0xC0,0x00,0x01,0xC7,0x80,0x00,0x03,0xCF,0x00,0x00,0x07,0x9E,0x00,0x00,0x0F,0x3C,0x00,0x00,0x1E,0x78,0x00,0x00,0x38,0xF0,0x00,0x00,0xF1,0xE0,0x00,0x01,0xE3,0xC0,0x00,0x07,0x87,0x80,0x00,0x1F,0x0F,0x00,0x00,0x7C,0x1E,0x00,0x07,0xF0,0x3F,0xFF,0xFF,0xC0,0x7F,0xFF,0xFE,0x00,0xFF,0xFF,0xF0,0x01,0xE0,0x00,0xF0,0x03,0xC0,0x01,0xE0,0x07,0x80,0x01,0xE0,0x0F,0x00,0x03,0xC0,0x1E,0x00,0x03,0xC0,0x3C,0x00,0x07,0x80,0x78,0x00,0x07,0x80,0xF0,0x00,0x07,0x81,0xE0,0x00,0x0F,0x03,0xC0,0x00,0x0F,0x07,0x80,0x00,0x1E,0x0F,0x00,0x00,0x1E,0x1E,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3C,0x78,0x00,0x00,0x3C,0xF0,0x00,0x00,0x79,0xE0,0x00,0x00,0x7B,0xC0,0x00,0x00,0xF0, // 'R'
+	0x00,0x1F,0xF0,0x00,0x01,0xFF,0xFC,0x00,0x0F,0xFF,0xFE,0x00,0x3F,0x00,0xFE,0x00,0xF8,0x00,0x3E,0x03,0xC0,0x00,0x3E,0x0F,0x00,0x00,0x3C,0x1E,0x00,0x00,0x3C,0x78,0x00,0x00,0x38,0xF0,0x00,0x00,0x79,0xE0,0x00,0x00,0xF3,0xC0,0x00,0x01,0xE7,0x80,0x00,0x03,0xCF,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x07,0xFC,0x00,0x00,0x03,0xFF,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x1F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x70,0x00,0x00,0x0E,0xE0,0x00,0x00,0x1D,0xE0,0x00,0x00,0x3B,0xC0,0x00,0x00,0x73,0x80,0x00,0x01,0xE7,0x80,0x00,0x03,0xCF,0x80,0x00,0x0F,0x0F,0x80,0x00,0x3E,0x0F,0xC0,0x00,0xF8,0x0F,0xE0,0x0F,0xE0,0x07,0xFF,0xFF,0x80,0x03,0xFF,0xFC,0x00,0x00,0xFF,0xC0,0x00, // 'S'
+	0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0xC0,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00, // 'T'
+	0xE0,0x00,0x00,0x3D,0xC0,0x00,0x00,0x7B,0x80,0x00,0x00,0xF7,0x00,0x00,0x01,0xEE,0x00,0x00,0x03,0xDC,0x00,0x00,0x07,0xB8,0x00,0x00,0x0F,0x70,0x00,0x00,0x1E,0xE0,0x00,0x00,0x3D,0xC0,0x00,0x00,0x7B,0x80,0x00,0x00,0xF7,0x00,0x00,0x01,0xEE,0x00,0x00,0x03,0xDC,0x00,0x00,0x07,0xB8,0x00,0x00,0x0F,0x70,0x00,0x00,0x1E,0xE0,0x00,0x00,0x3D,0xC0,0x00,0x00,0x7B,0x80,0x00,0x00,0xF7,0x00,0x00,0x01,0xEE,0x00,0x00,0x03,0xDC,0x00,0x00,0x07,0xB8,0x00,0x00,0x0F,0x70,0x00,0x00,0x1E,0xE0,0x00,0x00,0x3D,0xC0,0x00,0x00,0x7B,0x80,0x00,0x00,0xF7,0x00,0x00,0x01,0xEE,0x00,0x00,0x03,0xDC,0x00,0x00,0x07,0xB8,0x00,0x00,0x0F,0x70,0x00,0x00,0x1C,0xE0,0x00,0x00,0x39,0xE0,0x00,0x00,0xF3,0xC0,0x00,0x01,0xE3,0x80,0x00,0x03,0xC7,0x80,0x00,0x0F,0x0F,0x80,0x00,0x3E,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x03,0xE0,0x0F,0xE0,0x3F,0x80,0x0F,0xFF,0xFE,0x00,0x07,0xFF,0xF0,0x00,0x01,0xFF,0x00,0x00, // 'U'
+	0xF0,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0x1E,0x78,0x00,0x00,0x03,0xC7,0x80,0x00,0x00,0x3C,0x38,0x00,0x00,0x03,0x83,0xC0,0x00,0x00,0x78,0x3C,0x00,0x00,0x07,0x81,0xC0,0x00,0x00,0xF0,0x1E,0x00,0x00,0x0F,0x01,0xE0,0x00,0x00,0xF0,0x0F,0x00,0x00,0x1E,0x00,0xF0,0x00,0x01,0xE0,0x07,0x00,0x00,0x1E,0x00,0x78,0x00,0x03,0xC0,0x07,0x80,0x00,0x3C,0x00,0x38,0x00,0x03,0x80,0x03,0xC0,0x00,0x78,0x00,0x3C,0x00,0x07,0x80,0x01,0xC0,0x00,0x70,0x00,0x1E,0x00,0x0F,0x00,0x01,0xE0,0x00,0xF0,0x00,0x0E,0x00,0x1E,0x00,0x00,0xF0,0x01,0xE0,0x00,0x07,0x00,0x1C,0x00,0x00,0x78,0x03,0xC0,0x00,0x07,0x80,0x3C,0x00,0x00,0x38,0x03,0x80,0x00,0x03,0xC0,0x78,0x00,0x00,0x3C,0x07,0x80,0x00,0x01,0xC0,0x70,0x00,0x00,0x1E,0x0F,0x00,0x00,0x00,0xE0,0xF0,0x00,0x00,0x0E,0x0E,0x00,0x00,0x00,0xF1,0xE0,0x00,0x00,0x07,0x1C,0x00,0x00,0x00,0x71,0xC0,0x00,0x00,0x07,0xBC,0x00,0x00,0x00,0x3B,0x80,0x00,0x00,0x03,0xB8,0x00,0x00,0x00,0x3F,0x80,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0xE0,0x00,0x00, // 'V'
+	0xF0,0x00,0x01,0xE0,0x00,0x03,0xDE,0x00,0x00,0x3C,0x00,0x00,0x7B,0xC0,0x00,0x07,0x80,0x00,0x0F,0x38,0x00,0x01,0xF8,0x00,0x01,0xC7,0x80,0x00,0x3F,0x00,0x00,0x78,0xF0,0x00,0x07,0xE0,0x00,0x0F,0x1E,0x00,0x00,0xFE,0x00,0x01,0xE1,0xC0,0x00,0x3D,0xC0,0x00,0x38,0x3C,0x00,0x07,0x38,0x00,0x0F,0x07,0x80,0x00,0xE7,0x00,0x01,0xE0,0xF0,0x00,0x3C,0x70,0x00,0x3C,0x0E,0x00,0x07,0x0E,0x00,0x07,0x01,0xE0,0x00,0xE1,0xC0,0x01,0xE0,0x3C,0x00,0x1C,0x3C,0x00,0x3C,0x07,0x80,0x07,0x83,0x80,0x07,0x80,0x70,0x00,0xE0,0x70,0x00,0xE0,0x0F,0x00,0x1C,0x0E,0x00,0x3C,0x01,0xE0,0x07,0x80,0xE0,0x07,0x80,0x3C,0x00,0xE0,0x1C,0x00,0xF0,0x03,0x80,0x1C,0x03,0x80,0x1C,0x00,0x78,0x07,0x80,0x78,0x03,0x80,0x0F,0x00,0xE0,0x07,0x00,0xF0,0x01,0xE0,0x1C,0x00,0xE0,0x1E,0x00,0x1C,0x03,0x80,0x1C,0x03,0x80,0x03,0xC0,0xF0,0x01,0xC0,0x70,0x00,0x78,0x1C,0x00,0x38,0x1E,0x00,0x07,0x03,0x80,0x07,0x03,0xC0,0x00,0xE0,0xF0,0x00,0xF0,0x70,0x00,0x1E,0x1C,0x00,0x0E,0x0E,0x00,0x03,0xC3,0x80,0x01,0xC3,0xC0,0x00,0x38,0x70,0x00,0x3C,0x78,0x00,0x07,0x1E,0x00,0x03,0x8E,0x00,0x00,0xE3,0x80,0x00,0x71,0xC0,0x00,0x1E,0x70,0x00,0x0E,0x78,0x00,0x01,0xDE,0x00,0x01,0xEE,0x00,0x00,0x3B,0x80,0x00,0x1D,0xC0,0x00,0x07,0x70,0x00,0x03,0xB8,0x00,0x00,0xEE,0x00,0x00,0x77,0x00,0x00,0x0F,0x80,0x00,0x07,0xC0,0x00,0x01,0xF0,0x00,0x00,0xF8,0x00,0x00,0x3E,0x00,0x00,0x1F,0x00,0x00,0x07,0xC0,0x00,0x03,0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00, // 'W'
+	0xF8,0x00,0x00,0x0F,0x9E,0x00,0x00,0x07,0xC3,0xC0,0x00,0x01,0xE0,0xF8,0x00,0x00,0xF0,0x1E,0x00,0x00,0x7C,0x03,0xC0,0x00,0x1E,0x00,0xF8,0x00,0x0F,0x00,0x1E,0x00,0x07,0xC0,0x03,0xC0,0x01,0xE0,0x00,0xF8,0x00,0xF0,0x00,0x1E,0x00,0x7C,0x00,0x03,0xC0,0x1E,0x00,0x00,0xF8,0x0F,0x00,0x00,0x1E,0x07,0xC0,0x00,0x03,0xC1,0xE0,0x00,0x00,0xF8,0xF0,0x00,0x00,0x1E,0x7C,0x00,0x00,0x03,0xDE,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x03,0xE0,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xDE,0x00,0x00,0x01,0xE3,0xC0,0x00,0x00,0xF0,0x78,0x00,0x00,0x7C,0x1E,0x00,0x00,0x1E,0x03,0xC0,0x00,0x0F,0x00,0x78,0x00,0x07,0xC0,0x1E,0x00,0x01,0xE0,0x03,0xC0,0x00,0xF0,0x00,0x78,0x00,0x7C,0x00,0x1E,0x00,0x1E,0x00,0x03,0xC0,0x0F,0x00,0x00,0x78,0x07,0xC0,0x00,0x1E,0x01,0xE0,0x00,0x03,0xC0,0xF0,0x00,0x00,0xF8,0x7C,0x00,0x00,0x1E,0x1E,0x00,0x00,0x03,0xCF,0x00,0x00,0x00,0xF8, // 'X'
+	0xF0,0x00,0x00,0x03,0xCF,0x00,0x00,0x00,0xF1,0xE0,0x00,0x00,0x1E,0x1E,0x00,0x00,0x07,0x83,0xC0,0x00,0x01,0xF0,0x3C,0x00,0x00,0x3C,0x07,0xC0,0x00,0x0F,0x00,0x78,0x00,0x01,0xE0,0x07,0x80,0x00,0x78,0x00,0xF0,0x00,0x0F,0x00,0x0F,0x00,0x03,0xC0,0x01,0xE0,0x00,0x78,0x00,0x1E,0x00,0x1E,0x00,0x03,0xC0,0x07,0x80,0x00,0x3C,0x00,0xF0,0x00,0x03,0xC0,0x3C,0x00,0x00,0x78,0x07,0x80,0x00,0x07,0x81,0xE0,0x00,0x00,0xF0,0x38,0x00,0x00,0x0F,0x0F,0x00,0x00,0x01,0xE1,0xC0,0x00,0x00,0x1E,0x78,0x00,0x00,0x01,0xDE,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x03,0xF0,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x07,0x80,0x00,0x00, // 'Y'
+	0xFF,0xFF,0xFF,0xF9,0xFF,0xFF,0xFF,0xF3,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0xF0, // 'Z'
+	0xFF,0xBF,0xEF,0xFB,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0xFE,0xFF,0xBF,0xE0, // '['
+	0xF0,0x00,0x00,0xE0,0x00,0x01,0xE0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0F,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x3C,0x00,0x00,0x38,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x01,0xE0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0F,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x3C,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0xF0,0x00,0x00,0xE0,0x00,0x01,0xE0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0F,0x00,0x00,0x1E,0x00,0x00,0x1C,0x00,0x00,0x3C,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0xF0,0x00,0x00,0xE0,0x00,0x01,0xE0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0F,0x00, // '\'
+	0xFF,0xDF,0xFB,0xFF,0x01,0xE0,0x3C,0x07,0x80,0xF0,0x1E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x3C,0x07,0x80,0xF0,0x1E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x3C,0x07,0x80,0xF0,0x1E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x3C,0x07,0x80,0xF0,0x1E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x3C,0x07,0x80,0xF0,0x1E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x3C,0x07,0x80,0xF0,0x1E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x3C,0x07,0x80,0xF7,0xFE,0xFF,0xDF,0xF8, // ']'
+	0x00,0x70,0x00,0x07,0x80,0x00,0x3E,0x00,0x01,0xF0,0x00,0x1F,0xC0,0x00,0xEE,0x00,0x0F,0x70,0x00,0x71,0xC0,0x07,0x8E,0x00,0x38,0x78,0x01,0xC1,0xC0,0x1E,0x0E,0x00,0xE0,0x38,0x0F,0x01,0xC0,0x70,0x0F,0x03,0x80,0x38,0x3C,0x01,0xE1,0xC0,0x07,0x1E,0x00,0x38,0xE0,0x01,0xEF,0x00,0x07,0x00, // '^'
+	0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0x00, // '_'
+	0xF8,0x0F,0x00,0xF0,0x0F,0x00,0xF0,0x0E,0x01,0xE0,0x1E, // '`'
+	0x00,0x7F,0x80,0x00,0xFF,0xFC,0x00,0xFF,0xFF,0x80,0x7E,0x03,0xF0,0x3E,0x00,0x3E,0x0F,0x00,0x07,0x87,0x80,0x00,0xF1,0xC0,0x00,0x3C,0x70,0x00,0x07,0x00,0x00,0x01,0xC0,0x00,0x00,0x70,0x00,0x00,0x1C,0x00,0x00,0x07,0x00,0x00,0x01,0xC0,0x07,0xFF,0xF0,0x0F,0xFF,0xFC,0x0F,0xFF,0xFF,0x07,0xF0,0x01,0xC3,0xE0,0x00,0x71,0xF0,0x00,0x1C,0x78,0x00,0x07,0x3C,0x00,0x01,0xCF,0x00,0x00,0x73,0x80,0x00,0x1C,0xE0,0x00,0x0F,0x3C,0x00,0x03,0xCF,0x00,0x01,0xF1,0xE0,0x00,0xFC,0x7C,0x00,0xF7,0x0F,0x80,0xF9,0xE1,0xFF,0xFC,0x78,0x3F,0xFC,0x1E,0x03,0xFC,0x00,0x00, // 'a'
+	0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x7F,0x00,0x3C,0x3F,0xFC,0x07,0x9F,0xFF,0xC0,0xF7,0xC0,0xFC,0x1F,0xE0,0x07,0xC3,0xF0,0x00,0x78,0x7E,0x00,0x07,0x8F,0x80,0x00,0x71,0xE0,0x00,0x0F,0x3C,0x00,0x00,0xE7,0x80,0x00,0x1C,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0F,0x78,0x00,0x01,0xEF,0x00,0x00,0x3D,0xE0,0x00,0x07,0xBC,0x00,0x00,0xF7,0x80,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0F,0x78,0x00,0x01,0xCF,0x00,0x00,0x79,0xE0,0x00,0x0F,0x3E,0x00,0x01,0xC7,0xC0,0x00,0x78,0xFC,0x00,0x1E,0x1F,0xE0,0x07,0xC3,0xDF,0x03,0xF0,0x79,0xFF,0xFC,0x0F,0x0F,0xFF,0x00,0x00,0x7F,0x00,0x00, // 'b'
+	0x00,0x7F,0x80,0x00,0x3F,0xFE,0x00,0x1F,0xFF,0xE0,0x07,0xE0,0x7E,0x01,0xF0,0x03,0xE0,0x3C,0x00,0x1E,0x0F,0x00,0x01,0xC3,0xC0,0x00,0x3C,0x78,0x00,0x03,0x8E,0x00,0x00,0x73,0xC0,0x00,0x0E,0x78,0x00,0x00,0x2F,0x00,0x00,0x01,0xC0,0x00,0x00,0x38,0x00,0x00,0x07,0x00,0x00,0x00,0xE0,0x00,0x00,0x1C,0x00,0x00,0x03,0x80,0x00,0x00,0x70,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x03,0x80,0x00,0x1E,0x78,0x00,0x03,0x8F,0x00,0x00,0xF0,0xF0,0x00,0x1E,0x0F,0x00,0x07,0x81,0xF0,0x01,0xE0,0x1F,0x80,0xF8,0x01,0xFF,0xFE,0x00,0x0F,0xFF,0x80,0x00,0x7F,0x80,0x00, // 'c'
+	0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0xFE,0x07,0x80,0xFF,0xF0,0xF0,0x3F,0xFF,0x9E,0x0F,0xC0,0xFB,0xC3,0xE0,0x07,0xF8,0x78,0x00,0x7F,0x1E,0x00,0x07,0xE3,0x80,0x00,0x7C,0xF0,0x00,0x07,0x9E,0x00,0x00,0xF3,0x80,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0F,0x78,0x00,0x01,0xEF,0x00,0x00,0x3D,0xE0,0x00,0x07,0xBC,0x00,0x00,0xF7,0x80,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0F,0x38,0x00,0x01,0xE7,0x00,0x00,0x3C,0xF0,0x00,0x07,0x8E,0x00,0x01,0xF1,0xE0,0x00,0x3E,0x1E,0x00,0x0F,0xC3,0xE0,0x07,0xF8,0x3F,0x03,0xEF,0x03,0xFF,0xF9,0xE0,0x3F,0xFC,0x3C,0x00,0xFE,0x00,0x00, // 'd'
+	0x00,0x3F,0x80,0x00,0x3F,0xFC,0x00,0x0F,0xFF,0xE0,0x03,0xE0,0x7E,0x00,0xF0,0x03,0xE0,0x3C,0x00,0x3C,0x0F,0x00,0x03,0xC1,0xC0,0x00,0x38,0x78,0x00,0x07,0x8E,0x00,0x00,0x73,0xC0,0x00,0x0E,0x78,0x00,0x01,0xCE,0x00,0x00,0x3D,0xC0,0x00,0x07,0xBF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xDC,0x00,0x00,0x03,0x80,0x00,0x00,0x70,0x00,0x00,0x0E,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x03,0x80,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x0C,0x0F,0x00,0x03,0xC0,0xF8,0x00,0xF0,0x1F,0xC0,0x7C,0x00,0xFF,0xFF,0x00,0x0F,0xFF,0xC0,0x00,0x3F,0xC0,0x00, // 'e'
+	0x00,0x1F,0xC0,0x0F,0xF8,0x03,0xFF,0x00,0xF8,0x00,0x3E,0x00,0x07,0x80,0x00,0xE0,0x00,0x3C,0x00,0x07,0x80,0x00,0xF0,0x00,0x1E,0x00,0x03,0xC0,0x00,0x78,0x00,0x0F,0x00,0x3F,0xFF,0xC7,0xFF,0xF8,0xFF,0xFF,0x00,0xF0,0x00,0x1E,0x00,0x03,0xC0,0x00,0x78,0x00,0x0F,0x00,0x01,0xE0,0x00,0x3C,0x00,0x07,0x80,0x00,0xF0,0x00,0x1E,0x00,0x03,0xC0,0x00,0x78,0x00,0x0F,0x00,0x01,0xE0,0x00,0x3C,0x00,0x07,0x80,0x00,0xF0,0x00,0x1E,0x00,0x03,0xC0,0x00,0x78,0x00,0x0F,0x00,0x01,0xE0,0x00,0x3C,0x00,0x07,0x80,0x00,0xF0,0x00,0x1E,0x00,0x03,0xC0,0x00,0x78,0x00,0x0F,0x00,0x00, // 'f'
+	0x00,0x7F,0x03,0xC0,0x7F,0xF8,0x78,0x1F,0xFF,0xCF,0x07,0xE0,0x7D,0xE1,0xF0,0x03,0xFC,0x3C,0x00,0x1F,0x8F,0x00,0x03,0xF1,0xC0,0x00,0x3E,0x78,0x00,0x03,0xCF,0x00,0x00,0x79,0xC0,0x00,0x0F,0x78,0x00,0x01,0xEF,0x00,0x00,0x3D,0xE0,0x00,0x07,0xBC,0x00,0x00,0xF7,0x80,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0F,0x78,0x00,0x01,0xEF,0x00,0x00,0x3D,0xE0,0x00,0x07,0x9C,0x00,0x00,0xF3,0xC0,0x00,0x1E,0x78,0x00,0x03,0xC7,0x00,0x00,0xF8,0xF0,0x00,0x1F,0x0F,0x00,0x07,0xE1,0xF0,0x03,0xFC,0x1F,0x81,0xF7,0x81,0xFF,0xFC,0xF0,0x1F,0xFF,0x1E,0x00,0x7F,0x03,0xC0,0x00,0x00,0x70,0x00,0x00,0x0E,0x00,0x00,0x01,0xC0,0x00,0x00,0x78,0x20,0x00,0x0F,0x06,0x00,0x03,0xC1,0xE0,0x00,0xF8,0x3E,0x00,0x3E,0x03,0xF0,0x1F,0x80,0x1F,0xFF,0xE0,0x01,0xFF,0xF0,0x00,0x07,0xF8,0x00, // 'g'
+	0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x07,0x01,0xFC,0x03,0x83,0xFF,0x81,0xC7,0xFF,0xF0,0xE7,0xC0,0xF8,0x77,0x80,0x1E,0x3F,0x00,0x07,0x9F,0x00,0x03,0xCF,0x80,0x00,0xE7,0x80,0x00,0x73,0x80,0x00,0x39,0xC0,0x00,0x1C,0xE0,0x00,0x0F,0x70,0x00,0x07,0xB8,0x00,0x03,0xDC,0x00,0x01,0xEE,0x00,0x00,0xF7,0x00,0x00,0x7B,0x80,0x00,0x3D,0xC0,0x00,0x1E,0xE0,0x00,0x0F,0x70,0x00,0x07,0xB8,0x00,0x03,0xDC,0x00,0x01,0xEE,0x00,0x00,0xF7,0x00,0x00,0x7B,0x80,0x00,0x3D,0xC0,0x00,0x1E,0xE0,0x00,0x0F,0x70,0x00,0x07,0xB8,0x00,0x03,0xDC,0x00,0x01,0xEE,0x00,0x00,0xF0, // 'h'
+	0x73,0xEF,0xBE,0x70,0x00,0x00,0x00,0x00,0x00,0x71,0xC7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1C, // 'i'
+	0x00,0xE0,0x07,0x80,0x7C,0x01,0xE0,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x78,0x03,0xC0,0x1E,0x00,0xF0,0x07,0x80,0x3C,0x01,0xE0,0x0F,0x00,0x78,0x03,0xC0,0x1E,0x00,0xF0,0x07,0x80,0x3C,0x01,0xE0,0x0F,0x00,0x78,0x03,0xC0,0x1E,0x00,0xF0,0x07,0x80,0x3C,0x01,0xE0,0x0F,0x00,0x78,0x03,0xC0,0x1E,0x00,0xF0,0x07,0x80,0x3C,0x01,0xE0,0x0F,0x00,0x78,0x03,0xC0,0x1E,0x00,0xF0,0x07,0x00,0x38,0x03,0xC0,0x1E,0x03,0xE3,0xFF,0x1F,0xE0,0xFC,0x00, // 'j'
+	0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x01,0xF3,0x80,0x01,0xE1,0xC0,0x01,0xE0,0xE0,0x01,0xE0,0x70,0x01,0xE0,0x38,0x01,0xE0,0x1C,0x01,0xE0,0x0E,0x01,0xE0,0x07,0x01,0xE0,0x03,0x81,0xE0,0x01,0xC1,0xE0,0x00,0xE1,0xE0,0x00,0x71,0xE0,0x00,0x39,0xF0,0x00,0x1D,0xF8,0x00,0x0F,0xFE,0x00,0x07,0xE7,0x80,0x03,0xE3,0xE0,0x01,0xE0,0xF0,0x00,0xE0,0x3C,0x00,0x70,0x0F,0x00,0x38,0x03,0xC0,0x1C,0x01,0xF0,0x0E,0x00,0x78,0x07,0x00,0x1E,0x03,0x80,0x07,0x81,0xC0,0x01,0xE0,0xE0,0x00,0xF8,0x70,0x00,0x3C,0x38,0x00,0x0F,0x1C,0x00,0x03,0xCE,0x00,0x00,0xF0, // 'k'
+	0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x00, // 'l'
+	0xF0,0x3F,0xC0,0x01,0xFC,0x03,0xC3,0xFF,0xC0,0x3F,0xFC,0x0F,0x1F,0xFF,0x81,0xFF,0xFC,0x3D,0xF0,0x3F,0x0F,0x81,0xF8,0xF7,0x00,0x3E,0x70,0x01,0xE3,0xF8,0x00,0x7B,0x80,0x03,0xCF,0xC0,0x00,0xFC,0x00,0x0F,0x3E,0x00,0x03,0xE0,0x00,0x1C,0xF8,0x00,0x0F,0x80,0x00,0x7B,0xC0,0x00,0x1E,0x00,0x01,0xEF,0x00,0x00,0x70,0x00,0x07,0xBC,0x00,0x01,0xC0,0x00,0x1E,0xF0,0x00,0x07,0x00,0x00,0x7B,0xC0,0x00,0x1C,0x00,0x01,0xEF,0x00,0x00,0x70,0x00,0x07,0xBC,0x00,0x01,0xC0,0x00,0x1E,0xF0,0x00,0x07,0x00,0x00,0x7B,0xC0,0x00,0x1C,0x00,0x01,0xEF,0x00,0x00,0x70,0x00,0x07,0xBC,0x00,0x01,0xC0,0x00,0x1E,0xF0,0x00,0x07,0x00,0x00,0x7B,0xC0,0x00,0x1C,0x00,0x01,0xEF,0x00,0x00,0x70,0x00,0x07,0xBC,0x00,0x01,0xC0,0x00,0x1E,0xF0,0x00,0x07,0x00,0x00,0x7B,0xC0,0x00,0x1C,0x00,0x01,0xEF,0x00,0x00,0x70,0x00,0x07,0xBC,0x00,0x01,0xC0,0x00,0x1E,0xF0,0x00,0x07,0x00,0x00,0x7B,0xC0,0x00,0x1C,0x00,0x01,0xEF,0x00,0x00,0x70,0x00,0x07,0xBC,0x00,0x01,0xC0,0x00,0x1E, // 'm'
+	0xE0,0x3F,0x80,0x70,0x7F,0xF0,0x38,0xFF,0xFE,0x1C,0xF8,0x1F,0x0E,0xF0,0x03,0xC7,0xE0,0x00,0xF3,0xE0,0x00,0x79,0xF0,0x00,0x3C,0xF0,0x00,0x0E,0x70,0x00,0x07,0x38,0x00,0x03,0x9C,0x00,0x01,0xEE,0x00,0x00,0xF7,0x00,0x00,0x7B,0x80,0x00,0x3D,0xC0,0x00,0x1E,0xE0,0x00,0x0F,0x70,0x00,0x07,0xB8,0x00,0x03,0xDC,0x00,0x01,0xEE,0x00,0x00,0xF7,0x00,0x00,0x7B,0x80,0x00,0x3D,0xC0,0x00,0x1E,0xE0,0x00,0x0F,0x70,0x00,0x07,0xB8,0x00,0x03,0xDC,0x00,0x01,0xEE,0x00,0x00,0xF7,0x00,0x00,0x7B,0x80,0x00,0x3D,0xC0,0x00,0x1E, // 'n'
+	0x00,0x3F,0xC0,0x00,0x07,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x0F,0xC0,0xFC,0x00,0xF8,0x01,0xF0,0x0F,0x00,0x03,0xC0,0xF0,0x00,0x0F,0x07,0x80,0x00,0x78,0x78,0x00,0x01,0xE3,0xC0,0x00,0x0F,0x1C,0x00,0x00,0x39,0xE0,0x00,0x01,0xEF,0x00,0x00,0x0F,0x78,0x00,0x00,0x7B,0x80,0x00,0x01,0xDC,0x00,0x00,0x0E,0xE0,0x00,0x00,0x77,0x00,0x00,0x03,0xB8,0x00,0x00,0x1D,0xC0,0x00,0x01,0xEF,0x00,0x00,0x0F,0x78,0x00,0x00,0x79,0xC0,0x00,0x03,0x8F,0x00,0x00,0x3C,0x78,0x00,0x01,0xE1,0xE0,0x00,0x1E,0x0F,0x00,0x00,0xF0,0x3C,0x00,0x0F,0x00,0xF8,0x01,0xF0,0x03,0xF0,0x3F,0x00,0x0F,0xFF,0xF0,0x00,0x3F,0xFE,0x00,0x00,0x3F,0xC0,0x00, // 'o'
+	0xF0,0x3F,0x80,0x1E,0x1F,0xFE,0x03,0xCF,0xFF,0xE0,0x7B,0xE0,0x7E,0x0F,0xF0,0x03,0xE1,0xF8,0x00,0x3C,0x3E,0x00,0x03,0xC7,0xC0,0x00,0x38,0xF0,0x00,0x07,0x9E,0x00,0x00,0xF3,0xC0,0x00,0x0E,0x78,0x00,0x01,0xEF,0x00,0x00,0x3D,0xE0,0x00,0x07,0xBC,0x00,0x00,0xF7,0x80,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0F,0x78,0x00,0x01,0xEF,0x00,0x00,0x3D,0xE0,0x00,0x07,0xBC,0x00,0x00,0xE7,0x80,0x00,0x3C,0xF0,0x00,0x07,0x9E,0x00,0x00,0xE3,0xE0,0x00,0x3C,0x7E,0x00,0x0F,0x0F,0xE0,0x03,0xE1,0xEF,0x81,0xF8,0x3C,0xFF,0xFE,0x07,0x8F,0xFF,0x80,0xF0,0x3F,0x80,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x00, // 'p'
+	0x00,0x7F,0x03,0x80,0xFF,0xF0,0xE0,0x7F,0xFF,0x38,0x3F,0x03,0xEE,0x1F,0x00,0x3F,0x8F,0x80,0x07,0xE3,0xC0,0x00,0xF9,0xE0,0x00,0x1E,0x78,0x00,0x03,0x9C,0x00,0x00,0xE7,0x00,0x00,0x3B,0xC0,0x00,0x0E,0xF0,0x00,0x03,0xBC,0x00,0x00,0xEF,0x00,0x00,0x3B,0xC0,0x00,0x0E,0xE0,0x00,0x03,0xB8,0x00,0x00,0xEF,0x00,0x00,0x3B,0xC0,0x00,0x0E,0xF0,0x00,0x03,0xBC,0x00,0x00,0xE7,0x00,0x00,0x39,0xC0,0x00,0x0E,0x78,0x00,0x03,0x9E,0x00,0x01,0xE3,0xC0,0x00,0x78,0x78,0x00,0x3E,0x1F,0x00,0x3F,0x83,0xF0,0x3E,0xE0,0x7F,0xFF,0x38,0x0F,0xFF,0x8E,0x00,0x7F,0x03,0x80,0x00,0x00,0xE0,0x00,0x00,0x38,0x00,0x00,0x0E,0x00,0x00,0x03,0x80,0x00,0x00,0xE0,0x00,0x00,0x38,0x00,0x00,0x0E,0x00,0x00,0x03,0x80,0x00,0x00,0xE0,0x00,0x00,0x38,0x00,0x00,0x0E, // 'q'
+	0xF0,0x3E,0xF1,0xFE,0xF3,0xFE,0xF7,0xC0,0xF7,0x00,0xFC,0x00,0xFC,0x00,0xF8,0x00,0xF8,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00, // 'r'
+	0x00,0xFF,0x00,0x03,0xFF,0xF0,0x03,0xFF,0xFC,0x03,0xF0,0x3F,0x03,0xC0,0x07,0xC3,0xC0,0x00,0xF1,0xE0,0x00,0x78,0xE0,0x00,0x1E,0x70,0x00,0x0F,0x38,0x00,0x07,0x9E,0x00,0x00,0x0F,0x00,0x00,0x03,0xE0,0x00,0x00,0xFC,0x00,0x00,0x3F,0xE0,0x00,0x0F,0xFE,0x00,0x00,0xFF,0xE0,0x00,0x0F,0xF8,0x00,0x00,0x7F,0x00,0x00,0x0F,0xC0,0x00,0x01,0xE0,0x00,0x00,0x78,0x00,0x00,0x3D,0xC0,0x00,0x1E,0xE0,0x00,0x0F,0x78,0x00,0x07,0xBC,0x00,0x03,0xCF,0x00,0x03,0xC7,0xC0,0x03,0xE1,0xF8,0x07,0xE0,0x7F,0xFF,0xE0,0x0F,0xFF,0xC0,0x00,0xFF,0x00,0x00, // 's'
+	0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0xF0,0x00,0x78,0x00,0x3C,0x00,0x1E,0x00,0x0F,0x00,0xFF,0xFE,0x7F,0xFF,0x3F,0xFF,0x80,0xF0,0x00,0x78,0x00,0x3C,0x00,0x1E,0x00,0x0F,0x00,0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0xF0,0x00,0x78,0x00,0x3C,0x00,0x1E,0x00,0x0F,0x00,0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0xF0,0x00,0x78,0x00,0x3C,0x00,0x1E,0x00,0x0F,0x00,0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0x70,0x00,0x3C,0x00,0x1F,0x00,0x07,0xFC,0x01,0xFE,0x00,0x7F,0x00, // 't'
+	0xF0,0x00,0x07,0x78,0x00,0x03,0xBC,0x00,0x01,0xDE,0x00,0x00,0xEF,0x00,0x00,0x77,0x80,0x00,0x3B,0xC0,0x00,0x1D,0xE0,0x00,0x0E,0xF0,0x00,0x07,0x78,0x00,0x03,0xBC,0x00,0x01,0xDE,0x00,0x00,0xEF,0x00,0x00,0x77,0x80,0x00,0x3B,0xC0,0x00,0x1D,0xE0,0x00,0x0E,0xF0,0x00,0x07,0x78,0x00,0x03,0xBC,0x00,0x01,0xDE,0x00,0x00,0xEF,0x00,0x00,0x77,0x80,0x00,0x39,0xC0,0x00,0x1C,0xE0,0x00,0x0E,0x70,0x00,0x07,0x3C,0x00,0x07,0x9E,0x00,0x07,0xC7,0x80,0x03,0xE3,0xE0,0x07,0xF0,0xF8,0x0F,0xB8,0x3F,0xFF,0x9C,0x0F,0xFF,0x0E,0x01,0xFE,0x00,0x00, // 'u'
+	0xF0,0x00,0x01,0xE7,0x00,0x00,0x1C,0x78,0x00,0x03,0xC7,0x80,0x00,0x38,0x38,0x00,0x03,0x83,0xC0,0x00,0x78,0x1C,0x00,0x07,0x01,0xC0,0x00,0xF0,0x1E,0x00,0x0F,0x00,0xE0,0x00,0xE0,0x0F,0x00,0x1E,0x00,0xF0,0x01,0xE0,0x07,0x00,0x1C,0x00,0x78,0x03,0xC0,0x03,0x80,0x38,0x00,0x38,0x03,0x80,0x03,0xC0,0x78,0x00,0x1C,0x07,0x00,0x01,0xC0,0x70,0x00,0x1E,0x0F,0x00,0x00,0xE0,0xE0,0x00,0x0E,0x1E,0x00,0x00,0x71,0xC0,0x00,0x07,0x1C,0x00,0x00,0x7B,0xC0,0x00,0x03,0xB8,0x00,0x00,0x3B,0x80,0x00,0x03,0xF8,0x00,0x00,0x1F,0x00,0x00,0x01,0xF0,0x00,0x00,0x0E,0x00,0x00,0x00,0xE0,0x00, // 'v'
+	0xF0,0x00,0x1C,0x00,0x07,0xBC,0x00,0x07,0x00,0x01,0xE7,0x00,0x03,0xE0,0x00,0x71,0xC0,0x00,0xF8,0x00,0x1C,0x78,0x00,0x3E,0x00,0x0F,0x1E,0x00,0x1D,0xC0,0x03,0xC3,0x80,0x07,0x70,0x00,0xE0,0xE0,0x01,0xDC,0x00,0x38,0x3C,0x00,0xE7,0x80,0x1E,0x07,0x00,0x38,0xE0,0x07,0x01,0xC0,0x0E,0x38,0x01,0xC0,0x78,0x07,0x8F,0x00,0xF0,0x1E,0x01,0xC1,0xC0,0x3C,0x03,0x80,0x70,0x70,0x0E,0x00,0xE0,0x3C,0x1C,0x03,0x80,0x3C,0x0E,0x03,0x81,0xE0,0x07,0x03,0x80,0xE0,0x70,0x01,0xC0,0xE0,0x38,0x1C,0x00,0x70,0x70,0x07,0x07,0x00,0x1E,0x1C,0x01,0xC3,0xC0,0x03,0x87,0x00,0x70,0xE0,0x00,0xE3,0x80,0x0E,0x38,0x00,0x3C,0xE0,0x03,0x8E,0x00,0x07,0x38,0x00,0xE7,0x00,0x01,0xDC,0x00,0x1D,0xC0,0x00,0x77,0x00,0x07,0x70,0x00,0x1F,0xC0,0x01,0xDC,0x00,0x03,0xE0,0x00,0x7E,0x00,0x00,0xF8,0x00,0x0F,0x80,0x00,0x3E,0x00,0x03,0xE0,0x00,0x07,0x80,0x00,0xF0,0x00,0x01,0xC0,0x00,0x1C,0x00, // 'w'
+	0x78,0x00,0x03,0xC3,0xC0,0x00,0x78,0x1E,0x00,0x0F,0x81,0xE0,0x00,0xF0,0x0F,0x00,0x1E,0x00,0x78,0x03,0xC0,0x07,0x80,0x3C,0x00,0x3C,0x07,0x80,0x01,0xE0,0xF0,0x00,0x1E,0x0F,0x00,0x00,0xF1,0xE0,0x00,0x07,0xBC,0x00,0x00,0x7B,0xC0,0x00,0x03,0xF8,0x00,0x00,0x1F,0x00,0x00,0x01,0xF0,0x00,0x00,0x1F,0x00,0x00,0x03,0xF8,0x00,0x00,0x3F,0x80,0x00,0x07,0xBC,0x00,0x00,0xF1,0xE0,0x00,0x0F,0x0E,0x00,0x01,0xE0,0xF0,0x00,0x3C,0x07,0x80,0x03,0xC0,0x3C,0x00,0x78,0x03,0xC0,0x0F,0x00,0x1E,0x01,0xF0,0x00,0xF0,0x1E,0x00,0x0F,0x03,0xC0,0x00,0x78,0x7C,0x00,0x03,0xCF,0x80,0x00,0x3E, // 'x'
+	0xF0,0x00,0x01,0xE7,0x80,0x00,0x1C,0x78,0x00,0x03,0xC7,0x80,0x00,0x3C,0x3C,0x00,0x03,0x83,0xC0,0x00,0x78,0x1C,0x00,0x07,0x81,0xE0,0x00,0x70,0x1E,0x00,0x0F,0x00,0xE0,0x00,0xE0,0x0F,0x00,0x1E,0x00,0xF0,0x01,0xE0,0x07,0x80,0x1C,0x00,0x78,0x03,0xC0,0x03,0x80,0x3C,0x00,0x3C,0x03,0x80,0x03,0xC0,0x78,0x00,0x1C,0x07,0x80,0x01,0xE0,0x70,0x00,0x1E,0x0F,0x00,0x00,0xF0,0xF0,0x00,0x0F,0x0E,0x00,0x00,0x71,0xE0,0x00,0x07,0x9C,0x00,0x00,0x79,0xC0,0x00,0x03,0xBC,0x00,0x00,0x3F,0x80,0x00,0x03,0xF8,0x00,0x00,0x1F,0x80,0x00,0x01,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0E,0x00,0x00,0x00,0xE0,0x00,0x00,0x1C,0x00,0x00,0x01,0xC0,0x00,0x00,0x3C,0x00,0x00,0x03,0x80,0x00,0x00,0x38,0x00,0x00,0x07,0x00,0x00,0x00,0xF0,0x00,0x00,0x3E,0x00,0x00,0x3F,0xE0,0x00,0x03,0xF8,0x00,0x00,0x3F,0x00,0x00,0x00, // 'y'
+	0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0x3F,0xFF,0xFF,0x80,0x00,0x07,0xC0,0x00,0x03,0xC0,0x00,0x03,0xC0,0x00,0x03,0xC0,0x00,0x03,0xE0,0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0xF8,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x7C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x0F,0x00,0x00,0x0F,0x00,0x00,0x0F,0x00,0x00,0x07,0xFF,0xFF,0xFB,0xFF,0xFF,0xFD,0xFF,0xFF,0xFE, // 'z'
+	0x00,0x01,0x80,0x00,0xF0,0x00,0x3F,0x00,0x1F,0x00,0x03,0xC0,0x00,0xF0,0x00,0x3C,0x00,0x07,0x80,0x00,0xE0,0x00,0x3C,0x00,0x07,0x80,0x00,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0x70,0x00,0x0E,0x00,0x01,0xC0,0x00,0x38,0x00,0x07,0x00,0x00,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0x70,0x00,0x1E,0x00,0x03,0xC0,0x00,0x70,0x00,0x1E,0x00,0x0F,0x80,0x0F,0xE0,0x01,0xF0,0x00,0x3F,0x80,0x00,0xF8,0x00,0x07,0x80,0x00,0x70,0x00,0x0F,0x00,0x01,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0x70,0x00,0x0E,0x00,0x01,0xC0,0x00,0x38,0x00,0x07,0x00,0x00,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0x70,0x00,0x0E,0x00,0x01,0xE0,0x00,0x3C,0x00,0x07,0x80,0x00,0x78,0x00,0x0F,0x00,0x00,0xF0,0x00,0x0F,0x00,0x01,0xF0,0x00,0x0F,0x80,0x00,0xF8,0x00,0x06,0x00, // '{'
+	0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xE0, // '|'
+	0x60,0x00,0x0F,0x00,0x03,0xF0,0x00,0x0F,0x00,0x00,0xF0,0x00,0x0F,0x00,0x00,0xF0,0x00,0x1E,0x00,0x01,0xC0,0x00,0x3C,0x00,0x07,0x80,0x00,0xF0,0x00,0x0E,0x00,0x01,0xC0,0x00,0x38,0x00,0x07,0x00,0x00,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0x70,0x00,0x0E,0x00,0x01,0xC0,0x00,0x38,0x00,0x07,0x00,0x00,0xF0,0x00,0x0E,0x00,0x01,0xE0,0x00,0x1F,0x00,0x01,0xFC,0x00,0x0F,0x80,0x07,0xF0,0x01,0xF0,0x00,0x78,0x00,0x0E,0x00,0x03,0xC0,0x00,0x78,0x00,0x0E,0x00,0x01,0xC0,0x00,0x38,0x00,0x07,0x00,0x00,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0x70,0x00,0x0E,0x00,0x01,0xC0,0x00,0x38,0x00,0x0F,0x00,0x01,0xE0,0x00,0x3C,0x00,0x07,0x00,0x01,0xE0,0x00,0x3C,0x00,0x0F,0x00,0x03,0xC0,0x00,0xF0,0x00,0x7C,0x00,0x1F,0x00,0x01,0x80,0x00,0x00 // '}'
+};
+const GFXglyph Roboto_Light_60Glyphs[] PROGMEM = {
+// bitmapOffset, width, height, xAdvance, xOffset, yOffset
+	  {     0,   1,   1,  16,    0,    0 }, // ' '
+	  {     1,   6,  43,  15,    5,  -43 }, // '!'
+	  {    34,  11,  13,  18,    4,  -45 }, // '"'
+	  {    52,  34,  43,  36,    2,  -43 }, // '#'
+	  {   235,  28,  55,  34,    3,  -49 }, // '$'
+	  {   428,  39,  44,  45,    3,  -43 }, // '%'
+	  {   643,  34,  44,  38,    3,  -43 }, // '&'
+	  {   830,   5,  13,  11,    3,  -45 }, // '''
+	  {   839,  15,  62,  20,    4,  -48 }, // '('
+	  {   956,  15,  62,  21,    1,  -48 }, // ')'
+	  {  1073,  25,  24,  26,    1,  -43 }, // '*'
+	  {  1148,  30,  31,  35,    2,  -36 }, // '+'
+	  {  1265,   7,  13,  12,    2,   -5 }, // ','
+	  {  1277,  15,   3,  18,    1,  -20 }, // '-'
+	  {  1283,   6,   5,  15,    4,   -5 }, // '.'
+	  {  1287,  22,  47,  25,    1,  -43 }, // '/'
+	  {  1417,  28,  44,  34,    3,  -43 }, // '0'
+	  {  1571,  16,  43,  34,    5,  -43 }, // '1'
+	  {  1657,  29,  43,  34,    3,  -43 }, // '2'
+	  {  1813,  28,  44,  34,    3,  -43 }, // '3'
+	  {  1967,  31,  43,  34,    2,  -43 }, // '4'
+	  {  2134,  27,  44,  34,    5,  -43 }, // '5'
+	  {  2283,  27,  44,  34,    4,  -43 }, // '6'
+	  {  2432,  29,  43,  34,    2,  -43 }, // '7'
+	  {  2588,  28,  44,  34,    3,  -43 }, // '8'
+	  {  2742,  27,  43,  34,    3,  -43 }, // '9'
+	  {  2888,   7,  32,  14,    3,  -32 }, // ':'
+	  {  2916,   7,  40,  13,    2,  -32 }, // ';'
+	  {  2951,  26,  25,  32,    2,  -32 }, // '<'
+	  {  3033,  26,  15,  34,    4,  -27 }, // '='
+	  {  3082,  25,  25,  32,    4,  -32 }, // '>'
+	  {  3161,  24,  43,  28,    2,  -43 }, // '?'
+	  {  3290,  50,  55,  56,    3,  -42 }, // '@'
+	  {  3634,  36,  43,  38,    1,  -43 }, // 'A'
+	  {  3828,  29,  43,  38,    6,  -43 }, // 'B'
+	  {  3984,  33,  44,  40,    4,  -43 }, // 'C'
+	  {  4166,  31,  43,  40,    5,  -43 }, // 'D'
+	  {  4333,  28,  43,  35,    5,  -43 }, // 'E'
+	  {  4484,  28,  43,  35,    5,  -43 }, // 'F'
+	  {  4635,  33,  44,  42,    4,  -43 }, // 'G'
+	  {  4817,  33,  43,  43,    5,  -43 }, // 'H'
+	  {  4995,   5,  43,  17,    6,  -43 }, // 'I'
+	  {  5022,  27,  44,  34,    2,  -43 }, // 'J'
+	  {  5171,  33,  43,  39,    5,  -43 }, // 'K'
+	  {  5349,  26,  43,  33,    5,  -43 }, // 'L'
+	  {  5489,  43,  43,  53,    5,  -43 }, // 'M'
+	  {  5721,  32,  43,  44,    6,  -43 }, // 'N'
+	  {  5893,  34,  44,  42,    4,  -43 }, // 'O'
+	  {  6080,  30,  43,  38,    5,  -43 }, // 'P'
+	  {  6242,  34,  51,  42,    4,  -43 }, // 'Q'
+	  {  6459,  31,  43,  39,    5,  -43 }, // 'R'
+	  {  6626,  31,  44,  37,    3,  -43 }, // 'S'
+	  {  6797,  33,  43,  37,    2,  -43 }, // 'T'
+	  {  6975,  31,  44,  40,    5,  -43 }, // 'U'
+	  {  7146,  36,  43,  38,    1,  -43 }, // 'V'
+	  {  7340,  51,  43,  55,    2,  -43 }, // 'W'
+	  {  7615,  34,  43,  38,    2,  -43 }, // 'X'
+	  {  7798,  35,  43,  37,    1,  -43 }, // 'Y'
+	  {  7987,  31,  43,  37,    3,  -43 }, // 'Z'
+	  {  8154,  10,  58,  15,    5,  -49 }, // '['
+	  {  8227,  23,  47,  25,    1,  -43 }, // '\'
+	  {  8363,  11,  58,  15,    0,  -49 }, // ']'
+	  {  8443,  21,  21,  26,    2,  -43 }, // '^'
+	  {  8499,  27,   3,  27,    0,    0 }, // '_'
+	  {  8510,  11,   8,  18,    3,  -45 }, // '`'
+	  {  8521,  26,  33,  33,    3,  -32 }, // 'a'
+	  {  8629,  27,  46,  34,    4,  -45 }, // 'b'
+	  {  8785,  27,  33,  32,    3,  -32 }, // 'c'
+	  {  8897,  27,  46,  34,    3,  -45 }, // 'd'
+	  {  9053,  27,  33,  32,    3,  -32 }, // 'e'
+	  {  9165,  19,  46,  21,    2,  -46 }, // 'f'
+	  {  9275,  27,  45,  34,    3,  -32 }, // 'g'
+	  {  9427,  25,  45,  34,    5,  -45 }, // 'h'
+	  {  9568,   6,  44,  14,    4,  -44 }, // 'i'
+	  {  9601,  13,  57,  15,   -3,  -44 }, // 'j'
+	  {  9694,  25,  45,  30,    5,  -45 }, // 'k'
+	  {  9835,   5,  45,  14,    5,  -45 }, // 'l'
+	  {  9864,  46,  32,  54,    4,  -32 }, // 'm'
+	  { 10048,  25,  32,  34,    5,  -32 }, // 'n'
+	  { 10148,  29,  33,  35,    3,  -32 }, // 'o'
+	  { 10268,  27,  44,  34,    4,  -32 }, // 'p'
+	  { 10417,  26,  44,  34,    3,  -32 }, // 'q'
+	  { 10560,  16,  32,  21,    4,  -32 }, // 'r'
+	  { 10624,  25,  33,  31,    3,  -32 }, // 's'
+	  { 10728,  17,  41,  20,    1,  -40 }, // 't'
+	  { 10816,  25,  33,  34,    4,  -32 }, // 'u'
+	  { 10920,  28,  32,  30,    1,  -32 }, // 'v'
+	  { 11032,  42,  32,  46,    2,  -32 }, // 'w'
+	  { 11200,  28,  32,  30,    1,  -32 }, // 'x'
+	  { 11312,  28,  45,  30,    1,  -32 }, // 'y'
+	  { 11470,  25,  32,  30,    3,  -32 }, // 'z'
+	  { 11570,  19,  59,  21,    2,  -47 }, // '{'
+	  { 11711,   4,  51,  14,    5,  -43 }, // '|'
+	  { 11737,  19,  59,  21,    0,  -47 } // '}'
+};
+const GFXfont Roboto_Light_60 PROGMEM = {
+(uint8_t  *)Roboto_Light_60Bitmaps,(GFXglyph *)Roboto_Light_60Glyphs,0x20, 0x7E, 71};

+ 70 - 0
firmware/src/interface_task.cpp

@@ -0,0 +1,70 @@
+#include "interface_task.h"
+
+#define COUNT_OF(A) (sizeof(A) / sizeof(A[0]))
+
+InterfaceTask::InterfaceTask(const uint8_t task_core, MotorTask& motor_task) : Task{"Interface", 8192, 1, task_core}, motor_task_(motor_task) {
+}
+
+InterfaceTask::~InterfaceTask() {}
+
+void InterfaceTask::run() {
+    KnobConfig configs[] = {
+        {
+            .num_positions = 0,
+            .position = 0,
+            .position_width_radians = 10 * PI / 180,
+            .detent_strength_unit = 0,
+        },
+        {
+            .num_positions = 11,
+            .position = 0,
+            .position_width_radians = 10 * PI / 180,
+            .detent_strength_unit = 0,
+        },
+        {
+            .num_positions = 2,
+            .position = 0,
+            .position_width_radians = 60 * PI / 180,
+            .detent_strength_unit = 1,
+        },
+        {
+            .num_positions = 256,
+            .position = 127,
+            .position_width_radians = 1 * PI / 180,
+            .detent_strength_unit = 0,
+        },
+        {
+            .num_positions = 256,
+            .position = 127,
+            .position_width_radians = 1 * PI / 180,
+            .detent_strength_unit = 1,
+        },
+        {
+            .num_positions = 32,
+            .position = 0,
+            .position_width_radians = 8.225806452 * PI / 180,
+            .detent_strength_unit = 1,
+        },
+        {
+            .num_positions = 32,
+            .position = 0,
+            .position_width_radians = 8.225806452 * PI / 180,
+            .detent_strength_unit = 0.1,
+        },
+    };
+
+    int current_config = 0;
+
+    motor_task_.setConfig(configs[current_config]);
+    while (1) {
+        if (Serial.available()) {
+            int v = Serial.read();
+            if (v == ' ') {
+                current_config = (current_config + 1) % COUNT_OF(configs);
+                Serial.printf("Chaning config to %d\n", current_config);
+                motor_task_.setConfig(configs[current_config]);
+            }
+        }
+        delay(10);
+    }
+}

+ 20 - 0
firmware/src/interface_task.h

@@ -0,0 +1,20 @@
+#pragma once
+
+#include <Arduino.h>
+
+#include "motor_task.h"
+#include "task.h"
+
+class InterfaceTask : public Task<InterfaceTask> {
+    friend class Task<InterfaceTask>; // Allow base Task to invoke protected run()
+
+    public:
+        InterfaceTask(const uint8_t task_core, MotorTask& motor_task);
+        ~InterfaceTask();
+
+    protected:
+        void run();
+
+    private:
+        MotorTask& motor_task_;
+};

+ 17 - 0
firmware/src/knob_data.h

@@ -0,0 +1,17 @@
+#pragma once
+
+#include <Arduino.h>
+
+struct KnobConfig {
+    int32_t num_positions;
+    int32_t position;
+    float position_width_radians;
+    float detent_strength_unit;
+};
+
+struct KnobState {
+    int32_t num_positions;
+    int32_t current_position;
+    float sub_position_unit;
+    float position_width_radians;
+};

+ 3 - 0
firmware/src/main.cpp

@@ -5,6 +5,7 @@
 #include <TFT_eSPI.h>
 
 #include "display_task.h"
+#include "interface_task.h"
 #include "motor_task.h"
 #include "tlv_sensor.h"
 
@@ -12,6 +13,7 @@ using namespace ace_button;
 
 DisplayTask display_task = DisplayTask(1);
 MotorTask motor_task = MotorTask(0, display_task);
+InterfaceTask interface_task = InterfaceTask(1, motor_task);
 
 CRGB leds[1];
 
@@ -21,6 +23,7 @@ void setup() {
 
   display_task.begin();
   motor_task.begin();
+  interface_task.begin();
 
   vTaskDelete(nullptr);
 }

+ 63 - 47
firmware/src/motor_task.cpp

@@ -20,6 +20,8 @@ static const float IDLE_CORRECTION_RATE_ALPHA = 0.0005;
 
 
 MotorTask::MotorTask(const uint8_t task_core, DisplayTask& display_task) : Task{"Motor", 8192, 1, task_core}, display_task_(display_task) {
+    queue_ = xQueueCreate(1, sizeof(KnobConfig));
+    assert(queue_ != NULL);
 }
 
 MotorTask::~MotorTask() {}
@@ -35,10 +37,7 @@ TlvSensor tlv = TlvSensor();
 Commander command = Commander(Serial);
 
 
-float detents = 36;
-
 void doMotor(char* cmd) { command.motor(&motor, cmd); }
-void doDetents(char* cmd) { command.scalar(&detents, cmd); }
 
 void MotorTask::run() {
     driver.voltage_power_supply = 5;
@@ -63,32 +62,42 @@ void MotorTask::run() {
     motor.PID_velocity.limit = 10;
 
 
+    // motor.useMonitoring(Serial);
+
     motor.init();
 
+    tlv.update();
+    delay(10);
 
-    motor.initFOC(-0.2, Direction::CW);
+    motor.initFOC(6, Direction::CW);
+    Serial.println(motor.zero_electric_angle);
 
     command.add('M', &doMotor, "foo");
-    command.add('D', &doDetents, "Detents");
-    motor.useMonitoring(Serial);
+    // command.add('D', &doDetents, "Detents");
     motor.monitor_downsample = 0; // disable monitor at first - optional
 
     // disableCore0WDT();
 
     float current_detent_center = motor.shaft_angle;
-
-    int min = 0;
-    int max = 255;
-    int value = 0;
+    KnobConfig config = {
+        .num_positions = 2,
+        .position = 0,
+        .position_width_radians = 60 * _PI / 180,
+        .detent_strength_unit = 0,
+    };
 
     float idle_check_velocity_ewma = 0;
     uint32_t last_idle_start = 0;
     uint32_t last_debug = 0;
 
     while (1) {
-
         motor.loopFOC();
 
+        if (xQueueReceive(queue_, &config, 0) == pdTRUE) {
+            Serial.println("Got new config");
+            current_detent_center = motor.shaft_angle;
+        }
+
         idle_check_velocity_ewma = motor.shaft_velocity * IDLE_VELOCITY_EWMA_ALPHA + idle_check_velocity_ewma * (1 - IDLE_VELOCITY_EWMA_ALPHA);
         if (fabsf(idle_check_velocity_ewma) > IDLE_VELOCITY_RAD_PER_SEC) {
             last_idle_start = 0;
@@ -101,48 +110,55 @@ void MotorTask::run() {
         // If we are not moving and we're close to the center (but not exactly there), slowly adjust the centerpoint to match the current position
         if (last_idle_start > 0 && millis() - last_idle_start > IDLE_CORRECTION_DELAY_MILLIS && fabsf(motor.shaft_angle - current_detent_center) < IDLE_CORRECTION_MAX_ANGLE_RAD) {
             current_detent_center = motor.shaft_angle * IDLE_CORRECTION_RATE_ALPHA + current_detent_center * (1 - IDLE_CORRECTION_RATE_ALPHA);
-            if (millis() - last_debug > 100) {
-                last_debug = millis();
-                Serial.print("Moving detent center. ");
-                Serial.print(current_detent_center);
-                Serial.print(" ");
-                Serial.println(motor.shaft_angle);
-            }
+            // if (millis() - last_debug > 100) {
+            //     last_debug = millis();
+            //     Serial.print("Moving detent center. ");
+            //     Serial.print(current_detent_center);
+            //     Serial.print(" ");
+            //     Serial.println(motor.shaft_angle);
+            // }
+        }
+
+        float angle_to_detent_center = motor.shaft_angle - current_detent_center;
+        if (angle_to_detent_center > config.position_width_radians * 1.05 && (config.num_positions <= 0 || config.position > 0)) {
+            current_detent_center += config.position_width_radians;
+            angle_to_detent_center -= config.position_width_radians;
+            config.position--;
+        } else if (angle_to_detent_center < -config.position_width_radians * 1.05 && (config.num_positions <= 0 || config.position < config.num_positions - 1)) {
+            current_detent_center -= config.position_width_radians;
+            angle_to_detent_center += config.position_width_radians;
+            config.position++;
         }
 
-        if (fabs(detents) < 0.01) {
+        float dead_zone_adjustment = CLAMP(
+            angle_to_detent_center,
+            fmaxf(-config.position_width_radians*DEAD_ZONE_DETENT_PERCENT, -DEAD_ZONE_RAD),
+            fminf(config.position_width_radians*DEAD_ZONE_DETENT_PERCENT, DEAD_ZONE_RAD));
+
+        bool out_of_bounds = config.num_positions > 0 && ((angle_to_detent_center > 0 && config.position == 0) || (angle_to_detent_center < 0 && config.position == config.num_positions - 1));
+        motor.PID_velocity.limit = out_of_bounds ? 10 : 3;
+        motor.PID_velocity.P = out_of_bounds ? 4 : config.detent_strength_unit * 4;
+        motor.PID_velocity.D = config.detent_strength_unit * 0.04;
+
+        if (fabsf(motor.shaft_velocity) > 20) {
+            // Don't apply torque if velocity is too high (helps avoid feedback loop)
             motor.move(0);
-            display_task_.set_angle(motor.shaft_angle);
-            current_detent_center = motor.shaft_angle;
         } else {
-            float detent_width = 2*PI/detents;
-
-            float angle_to_detent_center = motor.shaft_angle - current_detent_center;
-            if (angle_to_detent_center > detent_width * 1.2 && value > min) {
-                current_detent_center += detent_width;
-                angle_to_detent_center -= detent_width;
-                value--;
-            } else if (angle_to_detent_center < -detent_width * 1.2 && value < max) {
-                current_detent_center -= detent_width;
-                angle_to_detent_center += detent_width;
-                value++;
-            }
+            motor.move(motor.PID_velocity(-angle_to_detent_center + dead_zone_adjustment));
+        }
 
-            float dead_zone_adjustment = CLAMP(
-                angle_to_detent_center,
-                fmaxf(-detent_width*DEAD_ZONE_DETENT_PERCENT, -DEAD_ZONE_RAD),
-                fminf(detent_width*DEAD_ZONE_DETENT_PERCENT, DEAD_ZONE_RAD));
-            
-            if (fabsf(motor.shaft_velocity) > 20) {
-                // Don't apply torque if velocity is too high (helps avoid feedback loop)
-                motor.move(0);
-            } else {
-                motor.move(motor.PID_velocity(-angle_to_detent_center + dead_zone_adjustment));
-            }
+        display_task_.setData({
+            .num_positions = config.num_positions,
+            .current_position = config.position,
+            .sub_position_unit = -angle_to_detent_center / config.position_width_radians,
+            .position_width_radians = config.position_width_radians,
+        });
 
-            display_task_.set_angle(-value * PI / 180);
-        }
         motor.monitor();
-        command.run();
+        // command.run();
     }
 }
+
+void MotorTask::setConfig(const KnobConfig& config) {
+    xQueueOverwrite(queue_, &config);
+}

+ 4 - 0
firmware/src/motor_task.h

@@ -2,6 +2,7 @@
 
 #include <Arduino.h>
 
+#include "knob_data.h"
 #include "task.h"
 #include "display_task.h"
 
@@ -12,9 +13,12 @@ class MotorTask : public Task<MotorTask> {
         MotorTask(const uint8_t task_core, DisplayTask& display_task);
         ~MotorTask();
 
+        void setConfig(const KnobConfig& config);
+
     protected:
         void run();
 
     private:
         DisplayTask& display_task_;
+        QueueHandle_t queue_;
 };