simplification police

This commit is contained in:
Clément SAILLANT
2025-08-17 17:21:42 +02:00
parent f604dfd0f4
commit b970d25d1b
12 changed files with 139708 additions and 189 deletions
+545
View File
@@ -0,0 +1,545 @@
#ifndef DEJAVUSANSBOLD9PTLAT1__H
#define DEJAVUSANSBOLD9PTLAT1__H
const uint8_t DejaVuSans_Bold9pt8bBitmaps[] PROGMEM = {
0x00, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0xCF, 0x3C, 0xF3, 0xCC, 0x06, 0x60,
0x33, 0x03, 0x18, 0x18, 0xC7, 0xFF, 0xBF, 0xFC, 0x63, 0x03, 0x18, 0xFF,
0xF7, 0xFF, 0x8C, 0x60, 0x66, 0x03, 0x30, 0x00, 0x08, 0x02, 0x03, 0xF1,
0xFE, 0xE8, 0xBA, 0x0F, 0x83, 0xFC, 0x3F, 0x83, 0xF0, 0x9E, 0x27, 0xFF,
0x9F, 0xC0, 0x80, 0x20, 0x08, 0x00, 0x7C, 0x1C, 0x63, 0x0C, 0x31, 0x8C,
0x18, 0xCE, 0x0C, 0x66, 0x06, 0x36, 0x01, 0xF7, 0x7C, 0x03, 0x63, 0x03,
0x31, 0x83, 0x98, 0xC1, 0x8C, 0x61, 0x82, 0x21, 0xC1, 0xE0, 0x0F, 0x80,
0xFF, 0x03, 0x84, 0x0E, 0x00, 0x1C, 0x00, 0xF8, 0xE7, 0xF3, 0xB9, 0xEC,
0xE3, 0xF3, 0x87, 0x8F, 0x0E, 0x1F, 0xFC, 0x1F, 0x78, 0xFF, 0xC0, 0x39,
0x9C, 0xE6, 0x73, 0x9C, 0xE7, 0x38, 0xC7, 0x38, 0xC7, 0xE3, 0x1C, 0xE3,
0x1C, 0xE7, 0x39, 0xCE, 0x67, 0x39, 0x9C, 0x0C, 0x33, 0x3F, 0xFC, 0xFC,
0x3F, 0x3F, 0xFC, 0xCC, 0x30, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06,
0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x77,
0x77, 0xEC, 0xFF, 0xFF, 0xC0, 0xFF, 0x80, 0x06, 0x1C, 0x30, 0x61, 0xC3,
0x06, 0x1C, 0x30, 0x61, 0xC3, 0x06, 0x1C, 0x30, 0x00, 0x1F, 0x07, 0xF1,
0xC7, 0x70, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1D, 0xC7,
0x1F, 0xC1, 0xF0, 0x7C, 0x7E, 0x37, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38,
0x1C, 0x0E, 0x07, 0x1F, 0xFF, 0xF8, 0x7F, 0x3F, 0xEC, 0x3E, 0x07, 0x01,
0xC0, 0x70, 0x3C, 0x1E, 0x1F, 0x0F, 0x87, 0xC3, 0xFF, 0xFF, 0xC0, 0x7F,
0x3F, 0xE8, 0x3C, 0x07, 0x03, 0xCF, 0xC3, 0xF8, 0x0F, 0x01, 0xC0, 0x78,
0x3F, 0xFE, 0x7E, 0x00, 0x07, 0x81, 0xF0, 0x7E, 0x0D, 0xC3, 0x38, 0xE7,
0x18, 0xE6, 0x1C, 0xFF, 0xFF, 0xFC, 0x0E, 0x01, 0xC0, 0x38, 0x7F, 0x9F,
0xE7, 0x01, 0xC0, 0x7F, 0x1F, 0xE4, 0x3C, 0x07, 0x01, 0xC0, 0x78, 0x3F,
0xFE, 0x7E, 0x00, 0x1F, 0x0F, 0xE7, 0x09, 0x80, 0xFF, 0x3F, 0xEF, 0x3F,
0x87, 0xE1, 0xF8, 0x77, 0x3D, 0xFE, 0x1F, 0x00, 0xFF, 0xFF, 0xF0, 0x3C,
0x0E, 0x07, 0x81, 0xC0, 0x70, 0x38, 0x0E, 0x07, 0x01, 0xC0, 0xF0, 0x38,
0x00, 0x3F, 0x1F, 0xEE, 0x1F, 0x87, 0xE1, 0xDF, 0xE7, 0xFB, 0xCF, 0xE1,
0xF8, 0x7F, 0x3D, 0xFE, 0x3F, 0x00, 0x3E, 0x1F, 0xEF, 0x3B, 0x87, 0xE1,
0xF8, 0x7F, 0x3D, 0xFF, 0x3F, 0xC0, 0x64, 0x39, 0xFC, 0x3E, 0x00, 0xFF,
0x80, 0x07, 0xFC, 0x77, 0x70, 0x00, 0x07, 0x77, 0x7E, 0xC0, 0x00, 0x20,
0x3C, 0x3F, 0x3F, 0x0F, 0x01, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xE0, 0x04,
0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x80, 0x1E, 0x01,
0xF8, 0x07, 0xE0, 0x1E, 0x03, 0xC3, 0xF3, 0xF0, 0xF0, 0x10, 0x00, 0x7C,
0xFE, 0x87, 0x07, 0x07, 0x0E, 0x1C, 0x38, 0x38, 0x00, 0x38, 0x38, 0x38,
0x07, 0xE0, 0x1F, 0xF8, 0x3C, 0x1C, 0x70, 0x0E, 0x63, 0xB7, 0xE7, 0xF3,
0xCE, 0x73, 0xCC, 0x33, 0xCC, 0x33, 0xCE, 0x76, 0xE7, 0xFE, 0x63, 0xB8,
0x70, 0x08, 0x3C, 0x38, 0x1F, 0xF0, 0x07, 0xC0, 0x07, 0x80, 0x1E, 0x00,
0xFC, 0x03, 0x30, 0x1C, 0xE0, 0x73, 0x81, 0x86, 0x0E, 0x1C, 0x3F, 0xF1,
0xFF, 0xE7, 0x03, 0x9C, 0x0E, 0xE0, 0x1C, 0xFF, 0x1F, 0xFB, 0x87, 0x70,
0xEE, 0x1D, 0xFF, 0x3F, 0xF7, 0x0F, 0xE0, 0xFC, 0x1F, 0x87, 0xFF, 0xEF,
0xF8, 0x0F, 0xC7, 0xFD, 0xE0, 0xB8, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00,
0xE0, 0x0E, 0x01, 0xE0, 0x9F, 0xF0, 0xFC, 0xFF, 0x0F, 0xFC, 0xE1, 0xEE,
0x0E, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x0E, 0xE1, 0xEF,
0xFC, 0xFF, 0x00, 0xFF, 0xFF, 0xF8, 0x1C, 0x0E, 0x07, 0xFB, 0xFD, 0xC0,
0xE0, 0x70, 0x38, 0x1F, 0xFF, 0xF8, 0xFF, 0xFF, 0xF8, 0x1C, 0x0E, 0x07,
0xFF, 0xFF, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x00, 0x0F, 0xE1, 0xFF,
0x9E, 0x04, 0xE0, 0x0E, 0x00, 0x70, 0x03, 0x83, 0xFC, 0x1F, 0xE0, 0x3B,
0x81, 0xDE, 0x0E, 0x7F, 0xF0, 0xFE, 0x00, 0xE0, 0x7E, 0x07, 0xE0, 0x7E,
0x07, 0xE0, 0x7F, 0xFF, 0xFF, 0xFE, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E,
0x07, 0xE0, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1C, 0x71, 0xC7, 0x1C,
0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x73, 0xFE, 0xF0, 0xE1, 0xE7, 0x1E,
0x39, 0xE1, 0xDE, 0x0F, 0xE0, 0x7E, 0x03, 0xF0, 0x1F, 0xC0, 0xEF, 0x07,
0x3C, 0x38, 0xF1, 0xC3, 0xCE, 0x0F, 0x00, 0xE0, 0x70, 0x38, 0x1C, 0x0E,
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1F, 0xFF, 0xF8, 0xF0, 0x1F,
0xE0, 0x3F, 0xE0, 0xFF, 0xC1, 0xFE, 0xC6, 0xFD, 0x8D, 0xFB, 0xBB, 0xF3,
0x67, 0xE7, 0xCF, 0xC7, 0x1F, 0x8E, 0x3F, 0x00, 0x7E, 0x00, 0xE0, 0xF0,
0x7F, 0x07, 0xF8, 0x7F, 0x87, 0xEC, 0x7E, 0xE7, 0xE6, 0x7E, 0x77, 0xE3,
0x7E, 0x3F, 0xE1, 0xFE, 0x0F, 0xE0, 0xF0, 0x0F, 0x81, 0xFF, 0x1E, 0x3C,
0xE0, 0xEE, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3B, 0x83, 0x9E,
0x3C, 0x7F, 0xC0, 0xF8, 0x00, 0xFF, 0x9F, 0xFB, 0x87, 0xF0, 0x7E, 0x0F,
0xC1, 0xF8, 0x7F, 0xFE, 0xFF, 0x9C, 0x03, 0x80, 0x70, 0x0E, 0x00, 0x0F,
0x81, 0xFF, 0x1E, 0x3C, 0xE0, 0xEE, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07,
0xE0, 0x3B, 0x83, 0xDE, 0x3C, 0x7F, 0xC0, 0xFC, 0x00, 0xE0, 0x03, 0x80,
0x0E, 0xFF, 0x0F, 0xF8, 0xE1, 0xCE, 0x1C, 0xE1, 0xCE, 0x3C, 0xFF, 0x8F,
0xF8, 0xE3, 0x8E, 0x1C, 0xE1, 0xEE, 0x0E, 0xE0, 0xF0, 0x3F, 0x9F, 0xEE,
0x0B, 0x80, 0xF0, 0x3F, 0x87, 0xF8, 0x3F, 0x03, 0xC0, 0x78, 0x1F, 0xFE,
0x7F, 0x00, 0xFF, 0xFF, 0xFC, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80,
0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0xE0, 0x7E, 0x07, 0xE0,
0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0x70,
0xE7, 0xFE, 0x1F, 0x80, 0xE0, 0x1D, 0xC0, 0xE7, 0x03, 0x9E, 0x1E, 0x38,
0x70, 0xE1, 0xC3, 0xCF, 0x07, 0x38, 0x1C, 0xE0, 0x3F, 0x00, 0xFC, 0x03,
0xF0, 0x07, 0x80, 0xE0, 0xE0, 0xFC, 0x3E, 0x1D, 0xC6, 0xC7, 0x38, 0xD8,
0xE7, 0x1B, 0x1C, 0xE3, 0x63, 0x8E, 0xC6, 0xE1, 0xD8, 0xDC, 0x3B, 0x1B,
0x87, 0x63, 0x70, 0x78, 0x3C, 0x0F, 0x07, 0x81, 0xE0, 0xF0, 0xF0, 0x7B,
0xC7, 0x8E, 0x38, 0x7B, 0xC1, 0xFC, 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x1F,
0xC1, 0xEF, 0x0E, 0x38, 0xF1, 0xEF, 0x07, 0x80, 0xF0, 0x7B, 0xC7, 0x8E,
0x38, 0x7B, 0xC1, 0xFC, 0x07, 0xC0, 0x3E, 0x00, 0xE0, 0x07, 0x00, 0x38,
0x01, 0xC0, 0x0E, 0x00, 0x70, 0x00, 0xFF, 0xFF, 0xFC, 0x07, 0x81, 0xE0,
0x78, 0x1E, 0x03, 0x80, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0x7F, 0xFF, 0xFE,
0xFF, 0xF9, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0xFF, 0xC1, 0xC1,
0x83, 0x07, 0x06, 0x0C, 0x1C, 0x18, 0x30, 0x70, 0x60, 0xC1, 0xC1, 0x80,
0xFF, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9F, 0xFF, 0x0E, 0x03,
0xE0, 0xEE, 0x38, 0xEE, 0x0E, 0xFF, 0xFF, 0xC0, 0x61, 0x86, 0x3F, 0x1F,
0xE4, 0x1C, 0x07, 0x3F, 0xFF, 0xFE, 0x1F, 0x8F, 0xFF, 0xDF, 0x70, 0xE0,
0x1C, 0x03, 0x80, 0x70, 0x0E, 0x79, 0xFF, 0xBC, 0x77, 0x07, 0xE0, 0xFC,
0x1F, 0x83, 0xF8, 0xEF, 0xFD, 0xCF, 0x00, 0x1F, 0x3F, 0xDC, 0x3C, 0x0E,
0x07, 0x03, 0x80, 0xE1, 0x7F, 0x8F, 0x80, 0x00, 0xE0, 0x1C, 0x03, 0x80,
0x73, 0xCE, 0xFF, 0xDC, 0x7F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xB8, 0xF7,
0xFE, 0x79, 0xC0, 0x1F, 0x0F, 0xF9, 0xC7, 0x70, 0x7F, 0xFF, 0xFF, 0xF8,
0x03, 0x81, 0x7F, 0xE3, 0xF8, 0x1F, 0x3F, 0x38, 0x38, 0xFF, 0xFF, 0x38,
0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3C, 0xEF, 0xFD, 0xC7, 0xF0,
0x7E, 0x0F, 0xC1, 0xF8, 0x3B, 0x8F, 0x7F, 0xE7, 0x9C, 0x03, 0xA0, 0xE7,
0xFC, 0x7E, 0x00, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE7, 0xBF, 0xEF, 0x1F,
0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x70, 0xFF, 0x8F, 0xFF,
0xFF, 0xFF, 0xC0, 0x39, 0xCE, 0x03, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C,
0xE7, 0xF7, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x1D, 0xC7, 0x39,
0xC7, 0x70, 0xFC, 0x1F, 0x83, 0xB8, 0x73, 0x8E, 0x39, 0xC3, 0x80, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xEF, 0x3D, 0xFE, 0xFF, 0xCF, 0x3F, 0x1C,
0x7E, 0x38, 0xFC, 0x71, 0xF8, 0xE3, 0xF1, 0xC7, 0xE3, 0x8F, 0xC7, 0x1C,
0xE7, 0xBF, 0xEF, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8,
0x70, 0x1F, 0x0F, 0xF9, 0xC7, 0x70, 0x7E, 0x0F, 0xC1, 0xF8, 0x3B, 0x8E,
0x7F, 0xC3, 0xE0, 0xE7, 0x9F, 0xFB, 0xC7, 0x70, 0x7E, 0x0F, 0xC1, 0xF8,
0x3F, 0x8E, 0xFF, 0xDC, 0xF3, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x00, 0x3C,
0xEF, 0xFD, 0xC7, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3B, 0x8F, 0x7F, 0xE7,
0x9C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0xEF, 0xFF, 0xC7, 0x0E, 0x1C,
0x38, 0x70, 0xE1, 0xC0, 0x3F, 0x7F, 0xF8, 0x3C, 0x0F, 0xE1, 0xFC, 0x0F,
0x07, 0xFF, 0xBF, 0x00, 0x38, 0x38, 0x38, 0xFF, 0xFF, 0x38, 0x38, 0x38,
0x38, 0x38, 0x38, 0x3F, 0x1F, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8,
0x7E, 0x1F, 0x8F, 0x7F, 0xCE, 0x70, 0xE0, 0xFC, 0x3D, 0xC7, 0x38, 0xE3,
0xB8, 0x77, 0x06, 0xC0, 0xF8, 0x0E, 0x01, 0xC0, 0xE3, 0x8F, 0xC7, 0x1D,
0xCE, 0x73, 0xB6, 0xE7, 0x6D, 0xC6, 0xDB, 0x0F, 0xBE, 0x1E, 0x7C, 0x1C,
0x70, 0x38, 0xE0, 0xF1, 0xEE, 0x38, 0xEE, 0x1D, 0xC1, 0xF0, 0x3E, 0x0E,
0xE1, 0xDC, 0x71, 0xDE, 0x3C, 0xE0, 0xEE, 0x39, 0xC7, 0x38, 0xE3, 0xB8,
0x77, 0x06, 0xC0, 0xF8, 0x0F, 0x01, 0xC0, 0x38, 0x07, 0x03, 0xC0, 0x70,
0x00, 0xFF, 0xFF, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF,
0xC0, 0x0F, 0x8F, 0xC7, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x78, 0xF8, 0x7C,
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0x0F, 0x80, 0xFF, 0xFF, 0xFF,
0xFF, 0xF0, 0xF8, 0x7E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3C, 0x0F,
0x87, 0xC7, 0x03, 0x81, 0xC0, 0xE0, 0x71, 0xF8, 0xF8, 0x00, 0x7C, 0x3F,
0xFE, 0x1F, 0x00, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0x00, 0xFF, 0x8F,
0xFF, 0xFF, 0xFE, 0x08, 0x08, 0x08, 0x3E, 0x7F, 0xF9, 0xE8, 0xE8, 0xE8,
0xE8, 0x79, 0x7F, 0x1E, 0x08, 0x08, 0x08, 0x0F, 0x87, 0xF3, 0xC4, 0xE0,
0x38, 0x0E, 0x0F, 0xF3, 0xFC, 0x38, 0x0E, 0x03, 0x83, 0xFF, 0xFF, 0xC0,
0x40, 0xFF, 0xF7, 0xF9, 0xCE, 0x61, 0x98, 0x67, 0x39, 0xFE, 0xFF, 0xF0,
0x20, 0xF1, 0xEE, 0x39, 0xC7, 0x1D, 0xC3, 0xB9, 0xFF, 0xFF, 0xF8, 0x70,
0xFF, 0xFF, 0xFC, 0x38, 0x07, 0x00, 0xE0, 0xFF, 0xFC, 0x3F, 0xFF, 0x3F,
0x3F, 0x9C, 0x4E, 0x03, 0xC3, 0xFB, 0x9F, 0xC7, 0xF3, 0xBF, 0x87, 0x80,
0xE4, 0x73, 0xF9, 0xF8, 0xDE, 0xC0, 0x0F, 0x81, 0x83, 0x18, 0x0C, 0x8F,
0x28, 0xC8, 0xCC, 0x06, 0x60, 0x33, 0x01, 0x8C, 0x0A, 0x3C, 0x98, 0x0C,
0x60, 0xC0, 0xF8, 0x00, 0x7C, 0x0D, 0xFE, 0x3C, 0x79, 0xDF, 0x80, 0xFF,
0xFC, 0x11, 0x33, 0x76, 0xCC, 0xCC, 0x76, 0x33, 0x11, 0xFF, 0xFF, 0xFC,
0x01, 0x80, 0x30, 0x06, 0xFF, 0xFF, 0xC0, 0x0F, 0x81, 0x83, 0x18, 0x0C,
0x9E, 0x28, 0xD8, 0xC6, 0xC6, 0x3C, 0x31, 0xE1, 0x8D, 0x8A, 0x6C, 0x98,
0x0C, 0x60, 0xC0, 0xF8, 0x00, 0xFF, 0xF0, 0x7B, 0x38, 0x61, 0xCD, 0xE0,
0x06, 0x00, 0x60, 0x06, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x06, 0x00, 0x60,
0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0xFA, 0x30, 0xC3, 0x19, 0xCE, 0x3F, 0xF8,
0x30, 0xDE, 0x0C, 0x38, 0xFE, 0x33, 0x30, 0xE1, 0xDC, 0x3B, 0x87, 0x70,
0xEE, 0x1D, 0xC3, 0xB8, 0x77, 0x9E, 0xFF, 0xFF, 0xDF, 0x80, 0x70, 0x0E,
0x01, 0xC0, 0x00, 0x3F, 0xDF, 0x3F, 0xCF, 0xF3, 0xFC, 0xDF, 0x33, 0xCC,
0x33, 0x0C, 0xC3, 0x30, 0xCC, 0x33, 0x0C, 0xC3, 0x30, 0xCC, 0xFF, 0x80,
0x31, 0x1F, 0xF0, 0xC3, 0x0C, 0x30, 0xC3, 0x3F, 0x3C, 0x66, 0xC3, 0xC3,
0xC3, 0x66, 0x3C, 0x00, 0xFF, 0xFF, 0x88, 0xCC, 0x6E, 0x33, 0x33, 0x6E,
0xCC, 0x88, 0xF0, 0x38, 0x30, 0x30, 0x30, 0x70, 0x30, 0x60, 0x30, 0xC0,
0x31, 0xC0, 0x31, 0x8E, 0xFF, 0x8E, 0x03, 0x16, 0x06, 0x26, 0x0E, 0x7F,
0x0C, 0x7F, 0x1C, 0x06, 0xF0, 0x38, 0x18, 0x18, 0x0C, 0x1C, 0x06, 0x0C,
0x03, 0x0C, 0x01, 0x8E, 0x00, 0xC6, 0x7D, 0xFF, 0x23, 0x03, 0x01, 0x83,
0x00, 0xC3, 0x80, 0xC1, 0x81, 0xC1, 0xC1, 0xC0, 0x00, 0xFC, 0xF8, 0x38,
0x0C, 0x30, 0x0C, 0x70, 0x78, 0x60, 0x0C, 0xC0, 0x0D, 0xC0, 0x8D, 0x8E,
0xFB, 0x8E, 0x03, 0x16, 0x06, 0x26, 0x0E, 0x7F, 0x0C, 0x7F, 0x1C, 0x06,
0x1C, 0x1C, 0x1C, 0x00, 0x1C, 0x1C, 0x3C, 0x78, 0xF0, 0xE0, 0xE0, 0xE1,
0x7F, 0x3E, 0x06, 0x00, 0x0C, 0x00, 0x00, 0x01, 0xE0, 0x07, 0x80, 0x3F,
0x00, 0xCC, 0x07, 0x38, 0x1C, 0xE0, 0x61, 0x83, 0x87, 0x0F, 0xFC, 0x7F,
0xF9, 0xC0, 0xE7, 0x03, 0xB8, 0x07, 0x03, 0x00, 0x18, 0x00, 0x00, 0x01,
0xE0, 0x07, 0x80, 0x3F, 0x00, 0xCC, 0x07, 0x38, 0x1C, 0xE0, 0x61, 0x83,
0x87, 0x0F, 0xFC, 0x7F, 0xF9, 0xC0, 0xE7, 0x03, 0xB8, 0x07, 0x07, 0x80,
0x33, 0x00, 0x00, 0x01, 0xE0, 0x07, 0x80, 0x3F, 0x00, 0xCC, 0x07, 0x38,
0x1C, 0xE0, 0x61, 0x83, 0x87, 0x0F, 0xFC, 0x7F, 0xF9, 0xC0, 0xE7, 0x03,
0xB8, 0x07, 0x06, 0x40, 0x3F, 0x00, 0x98, 0x00, 0x00, 0x07, 0x80, 0x1E,
0x00, 0xFC, 0x03, 0x30, 0x1C, 0xE0, 0x73, 0x81, 0x86, 0x0E, 0x1C, 0x3F,
0xF1, 0xFF, 0xE7, 0x03, 0x9C, 0x0E, 0xE0, 0x1C, 0x0C, 0xC0, 0x33, 0x00,
0x00, 0x01, 0xE0, 0x07, 0x80, 0x3F, 0x00, 0xCC, 0x07, 0x38, 0x1C, 0xE0,
0x61, 0x83, 0x87, 0x0F, 0xFC, 0x7F, 0xF9, 0xC0, 0xE7, 0x03, 0xB8, 0x07,
0x07, 0x80, 0x33, 0x00, 0x84, 0x03, 0x30, 0x07, 0x80, 0x3F, 0x00, 0xFC,
0x07, 0x38, 0x1C, 0xE0, 0x73, 0x83, 0x87, 0x0E, 0x1C, 0x3F, 0xF1, 0xFF,
0xE7, 0x03, 0x9C, 0x0E, 0xE0, 0x1C, 0x07, 0xFF, 0xC1, 0xFF, 0xF0, 0xF7,
0x00, 0x39, 0xC0, 0x0E, 0x70, 0x07, 0x1F, 0xE1, 0xC7, 0xF8, 0xFF, 0xC0,
0x3F, 0xF0, 0x1E, 0x1C, 0x07, 0x07, 0x01, 0xC1, 0xFF, 0xE0, 0x7F, 0xC0,
0x0F, 0xC7, 0xFD, 0xE0, 0xB8, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0,
0x0E, 0x01, 0xE0, 0x9F, 0xF0, 0xFC, 0x06, 0x00, 0x40, 0x08, 0x0F, 0x00,
0x18, 0x06, 0x00, 0x1F, 0xFF, 0xFF, 0x03, 0x81, 0xC0, 0xFF, 0x7F, 0xB8,
0x1C, 0x0E, 0x07, 0x03, 0xFF, 0xFF, 0x0C, 0x0C, 0x00, 0x1F, 0xFF, 0xFF,
0x03, 0x81, 0xC0, 0xFF, 0x7F, 0xB8, 0x1C, 0x0E, 0x07, 0x03, 0xFF, 0xFF,
0x1C, 0x11, 0x00, 0x1F, 0xFF, 0xFF, 0x03, 0x81, 0xC0, 0xFF, 0x7F, 0xB8,
0x1C, 0x0E, 0x07, 0x03, 0xFF, 0xFF, 0x36, 0x1B, 0x00, 0x1F, 0xFF, 0xFF,
0x03, 0x81, 0xC0, 0xFF, 0x7F, 0xB8, 0x1C, 0x0E, 0x07, 0x03, 0xFF, 0xFF,
0x63, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x6C, 0x0E, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0x38, 0x88, 0x01, 0xC3, 0x87, 0x0E, 0x1C, 0x38,
0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0xDE, 0xC0, 0xE7, 0x39, 0xCE, 0x73,
0x9C, 0xE7, 0x39, 0xCE, 0x3F, 0xC0, 0xFF, 0xC3, 0x87, 0x8E, 0x0E, 0x38,
0x1F, 0xF8, 0x7F, 0xE1, 0xCE, 0x07, 0x38, 0x1C, 0xE0, 0xE3, 0x87, 0x8F,
0xFC, 0x3F, 0xC0, 0x19, 0x03, 0xF0, 0x26, 0x00, 0x00, 0xF0, 0x7F, 0x07,
0xF8, 0x7F, 0x87, 0xEC, 0x7E, 0xE7, 0xE6, 0x7E, 0x77, 0xE3, 0x7E, 0x3F,
0xE1, 0xFE, 0x0F, 0xE0, 0xF0, 0x06, 0x00, 0x18, 0x00, 0x00, 0x1F, 0x03,
0xFE, 0x3C, 0x79, 0xC1, 0xDC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0,
0x77, 0x07, 0x3C, 0x78, 0xFF, 0x81, 0xF0, 0x03, 0x00, 0x30, 0x00, 0x00,
0x1F, 0x03, 0xFE, 0x3C, 0x79, 0xC1, 0xDC, 0x07, 0xE0, 0x3F, 0x01, 0xF8,
0x0F, 0xC0, 0x77, 0x07, 0x3C, 0x78, 0xFF, 0x81, 0xF0, 0x07, 0x00, 0x44,
0x00, 0x00, 0x1F, 0x03, 0xFE, 0x3C, 0x79, 0xC1, 0xDC, 0x07, 0xE0, 0x3F,
0x01, 0xF8, 0x0F, 0xC0, 0x77, 0x07, 0x3C, 0x78, 0xFF, 0x81, 0xF0, 0x06,
0x80, 0x7C, 0x02, 0xC0, 0x00, 0x00, 0xF8, 0x1F, 0xF1, 0xE3, 0xCE, 0x0E,
0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xB8, 0x39, 0xE3, 0xC7,
0xFC, 0x0F, 0x80, 0x0D, 0x80, 0x6C, 0x00, 0x00, 0x1F, 0x03, 0xFE, 0x3C,
0x79, 0xC1, 0xDC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x77, 0x07,
0x3C, 0x78, 0xFF, 0x81, 0xF0, 0x40, 0x5C, 0x1D, 0xC7, 0x1D, 0xC1, 0xF0,
0x1C, 0x07, 0xC1, 0xDC, 0x71, 0xDC, 0x1D, 0x01, 0x00, 0x07, 0xE4, 0x7F,
0xE3, 0xC7, 0x8E, 0x1F, 0x70, 0xDD, 0xC6, 0x77, 0x31, 0xDD, 0x87, 0x7C,
0x1D, 0xE0, 0xE3, 0xC7, 0x8F, 0xFC, 0x4F, 0xC0, 0x0C, 0x00, 0x60, 0x00,
0x0E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0,
0x7E, 0x07, 0xE0, 0x77, 0x0E, 0x7F, 0xE1, 0xF8, 0x06, 0x00, 0xC0, 0x00,
0x0E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0,
0x7E, 0x07, 0xE0, 0x77, 0x0E, 0x7F, 0xE1, 0xF8, 0x0F, 0x01, 0x98, 0x00,
0x0E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0,
0x7E, 0x07, 0xE0, 0x77, 0x0E, 0x7F, 0xE1, 0xF8, 0x19, 0x81, 0x98, 0x00,
0x0E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0,
0x7E, 0x07, 0xE0, 0x77, 0x0E, 0x7F, 0xE1, 0xF8, 0x03, 0x00, 0x30, 0x00,
0x01, 0xE0, 0xF7, 0x8F, 0x1C, 0x70, 0xF7, 0x83, 0xF8, 0x0F, 0x80, 0x7C,
0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0xE0, 0x1C,
0x03, 0xFE, 0x7F, 0xEE, 0x1F, 0xC1, 0xF8, 0x3F, 0x07, 0xE1, 0xFF, 0xFB,
0xFE, 0x70, 0x0E, 0x00, 0x3F, 0x0F, 0xF3, 0xC7, 0x70, 0xEE, 0x7D, 0xDC,
0x3B, 0x87, 0x78, 0xE7, 0xDC, 0x7F, 0x83, 0xF0, 0x7E, 0xFF, 0xDF, 0x00,
0x18, 0x03, 0x00, 0x60, 0x00, 0x3F, 0x1F, 0xE4, 0x1C, 0x07, 0x3F, 0xFF,
0xFE, 0x1F, 0x8F, 0xFF, 0xDF, 0x70, 0x03, 0x01, 0x80, 0xC0, 0x00, 0x3F,
0x1F, 0xE4, 0x1C, 0x07, 0x3F, 0xFF, 0xFE, 0x1F, 0x8F, 0xFF, 0xDF, 0x70,
0x0E, 0x06, 0xC3, 0x18, 0x00, 0x3F, 0x1F, 0xE4, 0x1C, 0x07, 0x3F, 0xFF,
0xFE, 0x1F, 0x8F, 0xFF, 0xDF, 0x70, 0x0D, 0x07, 0xC1, 0x60, 0x00, 0x3F,
0x1F, 0xE4, 0x1C, 0x07, 0x3F, 0xFF, 0xFE, 0x1F, 0x8F, 0xFF, 0xDF, 0x70,
0x1B, 0x06, 0xC0, 0x00, 0x00, 0x3F, 0x1F, 0xE4, 0x1C, 0x07, 0x3F, 0xFF,
0xFE, 0x1F, 0x8F, 0xFF, 0xDF, 0x70, 0x0E, 0x04, 0x41, 0x10, 0x44, 0x0E,
0x00, 0x03, 0xF1, 0xFE, 0x41, 0xC0, 0x73, 0xFF, 0xFF, 0xE1, 0xF8, 0xFF,
0xFD, 0xF7, 0x3F, 0x3C, 0x3F, 0xFF, 0x90, 0x79, 0xC0, 0x38, 0x73, 0xFF,
0xFF, 0xFF, 0xFF, 0x87, 0x01, 0xC7, 0xC1, 0xFE, 0xFF, 0xBE, 0x1F, 0x80,
0x1F, 0x3F, 0xDC, 0x3C, 0x0E, 0x07, 0x03, 0x80, 0xE1, 0x7F, 0x8F, 0x81,
0x80, 0x40, 0x20, 0xF0, 0x18, 0x01, 0x80, 0x18, 0x00, 0x01, 0xF0, 0xFF,
0x9C, 0x77, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x38, 0x17, 0xFE, 0x3F, 0x80,
0x03, 0x00, 0xC0, 0x30, 0x00, 0x01, 0xF0, 0xFF, 0x9C, 0x77, 0x07, 0xFF,
0xFF, 0xFF, 0x80, 0x38, 0x17, 0xFE, 0x3F, 0x80, 0x0E, 0x03, 0x60, 0xC6,
0x00, 0x01, 0xF0, 0xFF, 0x9C, 0x77, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x38,
0x17, 0xFE, 0x3F, 0x80, 0x1B, 0x03, 0x60, 0x00, 0x00, 0x01, 0xF0, 0xFF,
0x9C, 0x77, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x38, 0x17, 0xFE, 0x3F, 0x80,
0x61, 0x86, 0x03, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0x33, 0x30, 0x0E,
0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x70, 0x38, 0xDB, 0x18, 0x03, 0x87, 0x0E,
0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x00, 0xDE, 0xC0, 0x07, 0x39, 0xCE,
0x73, 0x9C, 0xE7, 0x38, 0x1C, 0x41, 0xF8, 0x3C, 0x19, 0x80, 0x18, 0x7F,
0x9F, 0xF7, 0x87, 0xE0, 0xFC, 0x1F, 0x83, 0xB8, 0xE7, 0xFC, 0x3E, 0x00,
0x32, 0x1F, 0x84, 0xC0, 0x00, 0xE7, 0xBF, 0xEF, 0x1F, 0x87, 0xE1, 0xF8,
0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x70, 0x18, 0x01, 0x80, 0x18, 0x00, 0x01,
0xF0, 0xFF, 0x9C, 0x77, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xB8, 0xE7, 0xFC,
0x3E, 0x00, 0x03, 0x00, 0xC0, 0x30, 0x00, 0x01, 0xF0, 0xFF, 0x9C, 0x77,
0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xB8, 0xE7, 0xFC, 0x3E, 0x00, 0x0E, 0x03,
0x60, 0xC6, 0x00, 0x01, 0xF0, 0xFF, 0x9C, 0x77, 0x07, 0xE0, 0xFC, 0x1F,
0x83, 0xB8, 0xE7, 0xFC, 0x3E, 0x00, 0x1C, 0x87, 0xF0, 0x9C, 0x00, 0x01,
0xF0, 0xFF, 0x9C, 0x77, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xB8, 0xE7, 0xFC,
0x3E, 0x00, 0x1B, 0x03, 0x60, 0x00, 0x00, 0x01, 0xF0, 0xFF, 0x9C, 0x77,
0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xB8, 0xE7, 0xFC, 0x3E, 0x00, 0x0E, 0x01,
0xC0, 0x38, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x00, 0x70, 0x0E, 0x01, 0xC0,
0x00, 0x03, 0xFD, 0xFF, 0x38, 0xFE, 0x3F, 0xCD, 0xFB, 0x3F, 0xC7, 0xF1,
0xCF, 0xFB, 0xFC, 0x00, 0x00, 0x30, 0x06, 0x00, 0xC0, 0x00, 0xE1, 0xF8,
0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x8F, 0x7F, 0xCE, 0x70, 0x06,
0x03, 0x01, 0x80, 0x00, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E,
0x1F, 0x8F, 0x7F, 0xCE, 0x70, 0x1E, 0x07, 0x83, 0x30, 0x00, 0xE1, 0xF8,
0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x8F, 0x7F, 0xCE, 0x70, 0x33,
0x0C, 0xC0, 0x00, 0x00, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E,
0x1F, 0x8F, 0x7F, 0xCE, 0x70, 0x06, 0x01, 0x80, 0x60, 0x00, 0x0E, 0x0E,
0xE3, 0x9C, 0x73, 0x8E, 0x3B, 0x87, 0x70, 0x6C, 0x0F, 0x80, 0xF0, 0x1C,
0x03, 0x80, 0x70, 0x3C, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E,
0x79, 0xFF, 0xBC, 0x77, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF8, 0xEF, 0xFD,
0xCF, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x00, 0x36, 0x06, 0xC0, 0x00, 0x00,
0x0E, 0x0E, 0xE3, 0x9C, 0x73, 0x8E, 0x3B, 0x87, 0x70, 0x6C, 0x0F, 0x80,
0xF0, 0x1C, 0x03, 0x80, 0x70, 0x3C, 0x07, 0x00 };
const GFXglyph DejaVuSans_Bold9pt8bGlyphs[] PROGMEM = {
{ 0, 1, 1, 6, 0, 0 }, // 0x20 ' '
{ 1, 3, 13, 8, 3, -12 }, // 0x21 '!'
{ 6, 6, 5, 9, 2, -12 }, // 0x22 '"'
{ 10, 13, 13, 15, 1, -12 }, // 0x23 '#'
{ 32, 10, 17, 13, 1, -13 }, // 0x24 '$'
{ 54, 17, 13, 18, 1, -12 }, // 0x25 '%'
{ 82, 14, 13, 16, 1, -12 }, // 0x26 '&'
{ 105, 2, 5, 6, 2, -12 }, // 0x27 '''
{ 107, 5, 16, 8, 2, -13 }, // 0x28 '('
{ 117, 5, 16, 8, 2, -13 }, // 0x29 ')'
{ 127, 10, 8, 9, 0, -12 }, // 0x2A '*'
{ 137, 12, 12, 15, 2, -11 }, // 0x2B '+'
{ 155, 4, 6, 7, 1, -2 }, // 0x2C ','
{ 158, 6, 3, 7, 1, -6 }, // 0x2D '-'
{ 161, 3, 3, 7, 2, -2 }, // 0x2E '.'
{ 163, 7, 15, 7, 0, -12 }, // 0x2F '/'
{ 177, 11, 13, 13, 1, -12 }, // 0x30 '0'
{ 195, 9, 13, 13, 2, -12 }, // 0x31 '1'
{ 210, 10, 13, 13, 1, -12 }, // 0x32 '2'
{ 227, 10, 13, 13, 1, -12 }, // 0x33 '3'
{ 244, 11, 13, 13, 1, -12 }, // 0x34 '4'
{ 262, 10, 13, 13, 1, -12 }, // 0x35 '5'
{ 279, 10, 13, 13, 1, -12 }, // 0x36 '6'
{ 296, 10, 13, 13, 1, -12 }, // 0x37 '7'
{ 313, 10, 13, 13, 1, -12 }, // 0x38 '8'
{ 330, 10, 13, 13, 1, -12 }, // 0x39 '9'
{ 347, 3, 10, 7, 2, -9 }, // 0x3A ':'
{ 351, 4, 13, 7, 1, -9 }, // 0x3B ';'
{ 358, 11, 10, 15, 2, -10 }, // 0x3C '<'
{ 372, 11, 6, 15, 2, -8 }, // 0x3D '='
{ 381, 11, 10, 15, 2, -10 }, // 0x3E '>'
{ 395, 8, 13, 10, 1, -12 }, // 0x3F '?'
{ 408, 16, 16, 18, 1, -12 }, // 0x40 '@'
{ 440, 14, 13, 14, 0, -12 }, // 0x41 'A'
{ 463, 11, 13, 14, 2, -12 }, // 0x42 'B'
{ 481, 11, 13, 13, 1, -12 }, // 0x43 'C'
{ 499, 12, 13, 15, 2, -12 }, // 0x44 'D'
{ 519, 9, 13, 12, 2, -12 }, // 0x45 'E'
{ 534, 9, 13, 12, 2, -12 }, // 0x46 'F'
{ 549, 13, 13, 15, 1, -12 }, // 0x47 'G'
{ 571, 12, 13, 16, 2, -12 }, // 0x48 'H'
{ 591, 3, 13, 7, 2, -12 }, // 0x49 'I'
{ 596, 6, 17, 7, -1, -12 }, // 0x4A 'J'
{ 609, 13, 13, 14, 2, -12 }, // 0x4B 'K'
{ 631, 9, 13, 11, 2, -12 }, // 0x4C 'L'
{ 646, 15, 13, 18, 2, -12 }, // 0x4D 'M'
{ 671, 12, 13, 15, 2, -12 }, // 0x4E 'N'
{ 691, 13, 13, 15, 1, -12 }, // 0x4F 'O'
{ 713, 11, 13, 13, 2, -12 }, // 0x50 'P'
{ 731, 13, 16, 15, 1, -12 }, // 0x51 'Q'
{ 757, 12, 13, 14, 2, -12 }, // 0x52 'R'
{ 777, 10, 13, 13, 1, -12 }, // 0x53 'S'
{ 794, 11, 13, 12, 0, -12 }, // 0x54 'T'
{ 812, 12, 13, 16, 2, -12 }, // 0x55 'U'
{ 832, 14, 13, 14, 0, -12 }, // 0x56 'V'
{ 855, 19, 13, 20, 1, -12 }, // 0x57 'W'
{ 886, 13, 13, 14, 0, -12 }, // 0x58 'X'
{ 908, 13, 13, 13, 0, -12 }, // 0x59 'Y'
{ 930, 11, 13, 13, 1, -12 }, // 0x5A 'Z'
{ 948, 5, 16, 8, 2, -13 }, // 0x5B '['
{ 958, 7, 15, 7, 0, -12 }, // 0x5C '\'
{ 972, 5, 16, 8, 2, -13 }, // 0x5D ']'
{ 982, 11, 5, 15, 2, -12 }, // 0x5E '^'
{ 989, 9, 2, 9, 0, 3 }, // 0x5F '_'
{ 992, 5, 3, 9, 1, -13 }, // 0x60 '`'
{ 994, 10, 10, 12, 1, -9 }, // 0x61 'a'
{ 1007, 11, 14, 13, 2, -13 }, // 0x62 'b'
{ 1027, 9, 10, 11, 1, -9 }, // 0x63 'c'
{ 1039, 11, 14, 13, 1, -13 }, // 0x64 'd'
{ 1059, 11, 10, 12, 1, -9 }, // 0x65 'e'
{ 1073, 8, 14, 8, 0, -13 }, // 0x66 'f'
{ 1087, 11, 14, 13, 1, -9 }, // 0x67 'g'
{ 1107, 10, 14, 13, 2, -13 }, // 0x68 'h'
{ 1125, 3, 14, 6, 2, -13 }, // 0x69 'i'
{ 1131, 5, 18, 6, 0, -13 }, // 0x6A 'j'
{ 1143, 11, 14, 12, 2, -13 }, // 0x6B 'k'
{ 1163, 3, 14, 6, 2, -13 }, // 0x6C 'l'
{ 1169, 15, 10, 18, 2, -9 }, // 0x6D 'm'
{ 1188, 10, 10, 13, 2, -9 }, // 0x6E 'n'
{ 1201, 11, 10, 12, 1, -9 }, // 0x6F 'o'
{ 1215, 11, 14, 13, 2, -9 }, // 0x70 'p'
{ 1235, 11, 14, 13, 1, -9 }, // 0x71 'q'
{ 1255, 7, 10, 9, 2, -9 }, // 0x72 'r'
{ 1264, 9, 10, 11, 1, -9 }, // 0x73 's'
{ 1276, 8, 13, 9, 1, -12 }, // 0x74 't'
{ 1289, 10, 10, 13, 2, -9 }, // 0x75 'u'
{ 1302, 11, 10, 12, 1, -9 }, // 0x76 'v'
{ 1316, 15, 10, 16, 1, -9 }, // 0x77 'w'
{ 1335, 11, 10, 12, 1, -9 }, // 0x78 'x'
{ 1349, 11, 14, 12, 1, -9 }, // 0x79 'y'
{ 1369, 9, 10, 10, 1, -9 }, // 0x7A 'z'
{ 1381, 9, 17, 13, 2, -13 }, // 0x7B '{'
{ 1401, 2, 18, 7, 2, -13 }, // 0x7C '|'
{ 1406, 9, 17, 13, 2, -13 }, // 0x7D '}'
{ 1426, 11, 3, 15, 2, -6 }, // 0x7E '~'
{ 1431, 9, 16, 11, 1, -12 }, // 0x7F
{ 1449, 9, 16, 11, 1, -12 }, // 0x80
{ 1467, 9, 16, 11, 1, -12 }, // 0x81
{ 1485, 9, 16, 11, 1, -12 }, // 0x82
{ 1503, 9, 16, 11, 1, -12 }, // 0x83
{ 1521, 9, 16, 11, 1, -12 }, // 0x84
{ 1539, 9, 16, 11, 1, -12 }, // 0x85
{ 1557, 9, 16, 11, 1, -12 }, // 0x86
{ 1575, 9, 16, 11, 1, -12 }, // 0x87
{ 1593, 9, 16, 11, 1, -12 }, // 0x88
{ 1611, 9, 16, 11, 1, -12 }, // 0x89
{ 1629, 9, 16, 11, 1, -12 }, // 0x8A
{ 1647, 9, 16, 11, 1, -12 }, // 0x8B
{ 1665, 9, 16, 11, 1, -12 }, // 0x8C
{ 1683, 9, 16, 11, 1, -12 }, // 0x8D
{ 1701, 9, 16, 11, 1, -12 }, // 0x8E
{ 1719, 9, 16, 11, 1, -12 }, // 0x8F
{ 1737, 9, 16, 11, 1, -12 }, // 0x90
{ 1755, 9, 16, 11, 1, -12 }, // 0x91
{ 1773, 9, 16, 11, 1, -12 }, // 0x92
{ 1791, 9, 16, 11, 1, -12 }, // 0x93
{ 1809, 9, 16, 11, 1, -12 }, // 0x94
{ 1827, 9, 16, 11, 1, -12 }, // 0x95
{ 1845, 9, 16, 11, 1, -12 }, // 0x96
{ 1863, 9, 16, 11, 1, -12 }, // 0x97
{ 1881, 9, 16, 11, 1, -12 }, // 0x98
{ 1899, 9, 16, 11, 1, -12 }, // 0x99
{ 1917, 9, 16, 11, 1, -12 }, // 0x9A
{ 1935, 9, 16, 11, 1, -12 }, // 0x9B
{ 1953, 9, 16, 11, 1, -12 }, // 0x9C
{ 1971, 9, 16, 11, 1, -12 }, // 0x9D
{ 1989, 9, 16, 11, 1, -12 }, // 0x9E
{ 2007, 9, 16, 11, 1, -12 }, // 0x9F
{ 2025, 1, 1, 6, 0, 0 }, // 0xA0
{ 2026, 3, 13, 8, 3, -9 }, // 0xA1
{ 2031, 8, 16, 13, 2, -12 }, // 0xA2
{ 2047, 10, 13, 13, 1, -12 }, // 0xA3
{ 2064, 10, 10, 11, 1, -9 }, // 0xA4
{ 2077, 11, 13, 13, 1, -12 }, // 0xA5
{ 2095, 2, 16, 7, 2, -12 }, // 0xA6
{ 2099, 9, 15, 9, 1, -12 }, // 0xA7
{ 2116, 5, 2, 9, 2, -13 }, // 0xA8
{ 2118, 13, 13, 18, 2, -12 }, // 0xA9
{ 2140, 7, 10, 10, 1, -12 }, // 0xAA
{ 2149, 8, 8, 12, 1, -8 }, // 0xAB
{ 2157, 11, 5, 15, 2, -7 }, // 0xAC
{ 2164, 6, 3, 7, 1, -6 }, // 0xAD
{ 2167, 13, 13, 18, 2, -12 }, // 0xAE
{ 2189, 6, 2, 9, 2, -13 }, // 0xAF
{ 2191, 6, 6, 9, 2, -12 }, // 0xB0
{ 2196, 12, 11, 15, 2, -10 }, // 0xB1
{ 2213, 6, 8, 8, 1, -12 }, // 0xB2
{ 2219, 6, 8, 8, 1, -12 }, // 0xB3
{ 2225, 5, 3, 9, 3, -13 }, // 0xB4
{ 2227, 11, 14, 13, 2, -9 }, // 0xB5
{ 2247, 10, 15, 11, 1, -12 }, // 0xB6
{ 2266, 3, 3, 7, 2, -7 }, // 0xB7
{ 2268, 4, 4, 9, 2, 1 }, // 0xB8
{ 2270, 6, 8, 8, 1, -12 }, // 0xB9
{ 2276, 8, 10, 10, 1, -12 }, // 0xBA
{ 2286, 8, 8, 12, 2, -8 }, // 0xBB
{ 2294, 16, 13, 19, 1, -12 }, // 0xBC
{ 2320, 17, 14, 19, 1, -12 }, // 0xBD
{ 2350, 16, 13, 19, 1, -12 }, // 0xBE
{ 2376, 8, 14, 10, 1, -9 }, // 0xBF
{ 2390, 14, 16, 14, 0, -15 }, // 0xC0
{ 2418, 14, 16, 14, 0, -15 }, // 0xC1
{ 2446, 14, 16, 14, 0, -15 }, // 0xC2
{ 2474, 14, 17, 14, 0, -16 }, // 0xC3
{ 2504, 14, 16, 14, 0, -15 }, // 0xC4
{ 2532, 14, 17, 14, 0, -16 }, // 0xC5
{ 2562, 18, 13, 20, 0, -12 }, // 0xC6
{ 2592, 11, 17, 13, 1, -12 }, // 0xC7
{ 2616, 9, 16, 12, 2, -15 }, // 0xC8
{ 2634, 9, 16, 12, 2, -15 }, // 0xC9
{ 2652, 9, 16, 12, 2, -15 }, // 0xCA
{ 2670, 9, 16, 12, 2, -15 }, // 0xCB
{ 2688, 4, 16, 7, 1, -15 }, // 0xCC
{ 2696, 4, 16, 7, 2, -15 }, // 0xCD
{ 2704, 7, 16, 7, 0, -15 }, // 0xCE
{ 2718, 5, 16, 7, 1, -15 }, // 0xCF
{ 2728, 14, 13, 15, 0, -12 }, // 0xD0
{ 2751, 12, 17, 15, 2, -16 }, // 0xD1
{ 2777, 13, 16, 15, 1, -15 }, // 0xD2
{ 2803, 13, 16, 15, 1, -15 }, // 0xD3
{ 2829, 13, 16, 15, 1, -15 }, // 0xD4
{ 2855, 13, 17, 15, 1, -16 }, // 0xD5
{ 2883, 13, 16, 15, 1, -15 }, // 0xD6
{ 2909, 11, 11, 15, 2, -10 }, // 0xD7
{ 2925, 14, 13, 15, 0, -12 }, // 0xD8
{ 2948, 12, 16, 16, 2, -15 }, // 0xD9
{ 2972, 12, 16, 16, 2, -15 }, // 0xDA
{ 2996, 12, 16, 16, 2, -15 }, // 0xDB
{ 3020, 12, 16, 16, 2, -15 }, // 0xDC
{ 3044, 13, 16, 13, 0, -15 }, // 0xDD
{ 3070, 11, 13, 13, 2, -12 }, // 0xDE
{ 3088, 11, 14, 14, 2, -13 }, // 0xDF
{ 3108, 10, 14, 12, 1, -13 }, // 0xE0
{ 3126, 10, 14, 12, 1, -13 }, // 0xE1
{ 3144, 10, 14, 12, 1, -13 }, // 0xE2
{ 3162, 10, 14, 12, 1, -13 }, // 0xE3
{ 3180, 10, 14, 12, 1, -13 }, // 0xE4
{ 3198, 10, 16, 12, 1, -15 }, // 0xE5
{ 3218, 17, 10, 18, 1, -9 }, // 0xE6
{ 3240, 9, 14, 11, 1, -9 }, // 0xE7
{ 3256, 11, 14, 12, 1, -13 }, // 0xE8
{ 3276, 11, 14, 12, 1, -13 }, // 0xE9
{ 3296, 11, 14, 12, 1, -13 }, // 0xEA
{ 3316, 11, 14, 12, 1, -13 }, // 0xEB
{ 3336, 5, 14, 6, 0, -13 }, // 0xEC
{ 3345, 5, 14, 6, 2, -13 }, // 0xED
{ 3354, 7, 14, 6, 0, -13 }, // 0xEE
{ 3367, 5, 14, 6, 1, -13 }, // 0xEF
{ 3376, 11, 14, 12, 1, -13 }, // 0xF0
{ 3396, 10, 14, 13, 2, -13 }, // 0xF1
{ 3414, 11, 14, 12, 1, -13 }, // 0xF2
{ 3434, 11, 14, 12, 1, -13 }, // 0xF3
{ 3454, 11, 14, 12, 1, -13 }, // 0xF4
{ 3474, 11, 14, 12, 1, -13 }, // 0xF5
{ 3494, 11, 14, 12, 1, -13 }, // 0xF6
{ 3514, 11, 10, 15, 2, -10 }, // 0xF7
{ 3528, 11, 12, 12, 1, -10 }, // 0xF8
{ 3545, 10, 14, 13, 2, -13 }, // 0xF9
{ 3563, 10, 14, 13, 2, -13 }, // 0xFA
{ 3581, 10, 14, 13, 2, -13 }, // 0xFB
{ 3599, 10, 14, 13, 2, -13 }, // 0xFC
{ 3617, 11, 18, 12, 1, -13 }, // 0xFD
{ 3642, 11, 18, 13, 2, -13 }, // 0xFE
{ 3667, 11, 18, 12, 1, -13 } }; // 0xFF
const GFXfont DejaVuSans_Bold9pt8b PROGMEM = {
(uint8_t *)DejaVuSans_Bold9pt8bBitmaps,
(GFXglyph *)DejaVuSans_Bold9pt8bGlyphs,
0x20, 0xFF, 21 };
// Approx. 5267 bytes
#endif // DEJAVUSANSBOLD9PTLAT1__H
@@ -0,0 +1,310 @@
const uint8_t DejaVuSans9ptLat1Bitmaps[] PROGMEM = {
0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xA0, 0xA0, 0x28, 0x28, 0xFC,
0x50, 0xF8, 0x50, 0x90, 0x20, 0xF0, 0xA0, 0xF0, 0x78, 0x38, 0xF0, 0x20,
0x62, 0x00, 0x94, 0x00, 0x94, 0x00, 0x6B, 0x00, 0x14, 0x80, 0x14, 0x80,
0x23, 0x00, 0x70, 0x40, 0x60, 0xE4, 0xBC, 0x98, 0xFC, 0x80, 0x80, 0x40,
0xC0, 0x80, 0x80, 0x80, 0x80, 0xC0, 0x40, 0x80, 0xC0, 0x40, 0x40, 0x40,
0x40, 0xC0, 0x80, 0x20, 0xB0, 0x60, 0xF0, 0x20, 0x20, 0x20, 0xFC, 0x20,
0x20, 0xC0, 0x80, 0x80, 0xE0, 0xC0, 0xC0, 0x20, 0x20, 0x40, 0x40, 0x40,
0x80, 0x80, 0x38, 0x48, 0x4C, 0xCC, 0x4C, 0x48, 0x38, 0xE0, 0x20, 0x20,
0x20, 0x20, 0x20, 0xF8, 0xF0, 0x10, 0x10, 0x30, 0x60, 0xC0, 0xF0, 0xF0,
0x10, 0x10, 0x70, 0x10, 0x10, 0xF0, 0x18, 0x38, 0x38, 0x58, 0xD8, 0xFC,
0x18, 0xF0, 0x80, 0x80, 0xF0, 0x18, 0x18, 0xF0, 0x70, 0xC0, 0x80, 0xF0,
0x98, 0x98, 0x70, 0xF8, 0x10, 0x30, 0x20, 0x60, 0x60, 0x40, 0xF0, 0x98,
0x90, 0x60, 0x98, 0x98, 0xF0, 0xF0, 0x90, 0x98, 0xF8, 0x18, 0x30, 0xE0,
0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0x80, 0x80, 0x0C,
0x70, 0x80, 0x70, 0x0C, 0xFC, 0x00, 0xFC, 0x80, 0x70, 0x0C, 0x70, 0x80,
0xE0, 0x30, 0x60, 0x40, 0x00, 0x40, 0x40, 0x3C, 0xC6, 0xBA, 0xAA, 0xAA,
0xBC, 0xC4, 0x38, 0x38, 0x38, 0x28, 0x6C, 0x6C, 0x7C, 0xC6, 0xF0, 0xD8,
0xD8, 0xF0, 0xD8, 0xD8, 0xF8, 0x3C, 0x64, 0x40, 0xC0, 0x40, 0x64, 0x3C,
0xF0, 0xC8, 0xCC, 0xCC, 0xCC, 0xC8, 0xF0, 0xF0, 0xC0, 0xC0, 0xF0, 0xC0,
0xC0, 0xF0, 0xF0, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x3C, 0x64, 0x40,
0xCE, 0x46, 0x66, 0x3E, 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0xC0,
0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
0x30, 0x20, 0xE0, 0xD8, 0xD0, 0xF0, 0xE0, 0xF0, 0xD8, 0xCC, 0xC0, 0xC0,
0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0xC6, 0xEE, 0xAA, 0xAA, 0xBA, 0x92, 0x82,
0xCC, 0xCC, 0xAC, 0xAC, 0x9C, 0x9C, 0x8C, 0x3C, 0x66, 0x46, 0xC6, 0x46,
0x66, 0x3C, 0xF8, 0xD8, 0xD8, 0xF8, 0xC0, 0xC0, 0xC0, 0x3C, 0x66, 0x46,
0xC6, 0x46, 0x66, 0x3C, 0x04, 0xF0, 0xD8, 0xD8, 0xF0, 0xD8, 0xD8, 0xCC,
0xF0, 0x90, 0x80, 0xF0, 0x18, 0x98, 0xF0, 0xFC, 0x30, 0x30, 0x30, 0x30,
0x30, 0x30, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0x78, 0xC6, 0x44, 0x6C,
0x6C, 0x28, 0x38, 0x38, 0xCC, 0xC0, 0x4C, 0x80, 0x4D, 0x80, 0x7F, 0x80,
0x73, 0x80, 0x73, 0x00, 0x33, 0x00, 0x44, 0x6C, 0x38, 0x38, 0x38, 0x6C,
0xC4, 0xCC, 0x6C, 0x78, 0x30, 0x30, 0x30, 0x30, 0xFC, 0x0C, 0x18, 0x30,
0x70, 0x60, 0xFC, 0xE0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xE0, 0x80,
0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0xC0, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0xC0, 0x30, 0xC8, 0xF8, 0x80, 0x40, 0x78, 0x08, 0x78, 0xC8, 0x78,
0x80, 0x80, 0x80, 0xF0, 0xD8, 0x98, 0xD8, 0xF0, 0x78, 0x40, 0xC0, 0x40,
0x78, 0x0C, 0x0C, 0x0C, 0x7C, 0x4C, 0xCC, 0x4C, 0x7C, 0x78, 0x4C, 0xFC,
0x40, 0x78, 0x70, 0x60, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x7C, 0x4C,
0xCC, 0x4C, 0x7C, 0x0C, 0x78, 0x80, 0x80, 0x80, 0xF0, 0xD8, 0x98, 0x98,
0x98, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x00,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xC0, 0x80, 0x80, 0x80, 0x90, 0xA0,
0xE0, 0xB0, 0x98, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFE,
0xDB, 0x9B, 0x9B, 0x9B, 0xF0, 0xD8, 0x98, 0x98, 0x98, 0x78, 0x4C, 0xCC,
0x4C, 0x78, 0xF0, 0xD8, 0x98, 0xD8, 0xF0, 0x80, 0x80, 0x7C, 0x4C, 0xCC,
0x4C, 0x7C, 0x0C, 0x0C, 0xE0, 0xC0, 0x80, 0x80, 0x80, 0x78, 0xC0, 0x78,
0x18, 0x70, 0x40, 0xF0, 0x40, 0x40, 0x40, 0x70, 0x98, 0x98, 0x98, 0x98,
0xF8, 0xCC, 0x48, 0x78, 0x70, 0x30, 0xDB, 0x5B, 0x5A, 0x76, 0x66, 0x90,
0xE0, 0x60, 0xF0, 0x90, 0xCC, 0x48, 0x78, 0x30, 0x30, 0x30, 0x60, 0x78,
0x10, 0x30, 0x60, 0xF8, 0x30, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x60, 0x30,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xE0, 0x60, 0x60,
0x30, 0x60, 0x60, 0x60, 0xE0, 0xE4, 0x18, 0xC0, 0xC0, 0x00, 0xC0, 0xC0,
0xC0, 0xC0, 0x20, 0x70, 0xE0, 0xA0, 0xE0, 0x70, 0x20, 0x70, 0x40, 0x40,
0xF0, 0x40, 0x40, 0xF8, 0x88, 0x78, 0x48, 0x48, 0x78, 0x88, 0xCC, 0x68,
0x78, 0xFC, 0x30, 0xFC, 0x30, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80,
0x70, 0xC0, 0x70, 0x90, 0xD0, 0x70, 0x10, 0xF0, 0xA0, 0x38, 0x44, 0xBA,
0xA2, 0xA2, 0xBA, 0x44, 0x38, 0xE0, 0x20, 0xE0, 0xE0, 0x00, 0xE0, 0x50,
0xA0, 0xA0, 0x50, 0xFC, 0x04, 0x04, 0xE0, 0x38, 0x44, 0xBA, 0xBA, 0xAA,
0xAA, 0x44, 0x38, 0xE0, 0xC0, 0xA0, 0xC0, 0x20, 0x20, 0xFC, 0x20, 0x20,
0xFC, 0xE0, 0x20, 0x40, 0xE0, 0x60, 0x60, 0x20, 0xE0, 0x40, 0x80, 0x98,
0x98, 0x98, 0x98, 0xE8, 0x80, 0x80, 0xF0, 0xD0, 0xD0, 0xD0, 0x50, 0x50,
0x50, 0x50, 0xC0, 0xC0, 0x40, 0xC0, 0xC0, 0x40, 0x40, 0xC0, 0xE0, 0xB0,
0xB0, 0xE0, 0x00, 0xE0, 0xA0, 0xD0, 0xD0, 0xA0, 0xC2, 0x44, 0x44, 0x69,
0x0B, 0x15, 0x13, 0xC2, 0x00, 0x44, 0x00, 0x44, 0x00, 0x6B, 0x80, 0x08,
0x80, 0x11, 0x00, 0x13, 0x80, 0x62, 0x64, 0x34, 0xE9, 0x0B, 0x15, 0x13,
0x60, 0x60, 0x00, 0x60, 0xC0, 0x80, 0xF0, 0x10, 0x00, 0x38, 0x38, 0x28,
0x6C, 0x6C, 0x7C, 0xC6, 0x10, 0x00, 0x38, 0x38, 0x28, 0x6C, 0x6C, 0x7C,
0xC6, 0x38, 0x00, 0x38, 0x38, 0x28, 0x6C, 0x6C, 0x7C, 0xC6, 0x38, 0x38,
0x00, 0x38, 0x38, 0x28, 0x6C, 0x6C, 0x7C, 0xC6, 0x28, 0x00, 0x38, 0x38,
0x28, 0x6C, 0x6C, 0x7C, 0xC6, 0x38, 0x38, 0x38, 0x28, 0x6C, 0x6C, 0x7C,
0xC6, 0x1F, 0x80, 0x3C, 0x00, 0x2C, 0x00, 0x6F, 0x80, 0x7C, 0x00, 0x4C,
0x00, 0xCF, 0x80, 0x3C, 0x64, 0x40, 0xC0, 0x40, 0x64, 0x3C, 0x08, 0x18,
0x40, 0x00, 0xF0, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xF0, 0x20, 0x00, 0xF0,
0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xF0, 0x60, 0x00, 0xF0, 0xC0, 0xC0, 0xF0,
0xC0, 0xC0, 0xF0, 0x60, 0x00, 0xF0, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xF0,
0x80, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0xC0,
0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0,
0xC0, 0xC0, 0xC0, 0xA0, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
0x7C, 0x66, 0x66, 0xF6, 0x66, 0x66, 0x7C, 0x70, 0x50, 0x00, 0xCC, 0xCC,
0xAC, 0xAC, 0x9C, 0x9C, 0x8C, 0x10, 0x00, 0x3C, 0x66, 0x46, 0xC6, 0x46,
0x66, 0x3C, 0x08, 0x00, 0x3C, 0x66, 0x46, 0xC6, 0x46, 0x66, 0x3C, 0x18,
0x00, 0x3C, 0x66, 0x46, 0xC6, 0x46, 0x66, 0x3C, 0x18, 0x28, 0x00, 0x3C,
0x66, 0x46, 0xC6, 0x46, 0x66, 0x3C, 0x28, 0x00, 0x3C, 0x66, 0x46, 0xC6,
0x46, 0x66, 0x3C, 0x88, 0x58, 0x30, 0x58, 0x88, 0x3E, 0x66, 0x4E, 0xD6,
0x66, 0x66, 0x7C, 0x20, 0x00, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0x78,
0x20, 0x00, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0x78, 0x70, 0x00, 0xC8,
0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0x78, 0x50, 0x00, 0xC8, 0xC8, 0xC8, 0xC8,
0xC8, 0xC8, 0x78, 0x10, 0x00, 0xCC, 0x6C, 0x78, 0x30, 0x30, 0x30, 0x30,
0xC0, 0xC0, 0xF8, 0xD8, 0xD8, 0xF8, 0xC0, 0xF0, 0x90, 0xB0, 0xA0, 0xB0,
0x98, 0x88, 0xB8, 0x20, 0x20, 0x78, 0x08, 0x78, 0xC8, 0x78, 0x18, 0x10,
0x78, 0x08, 0x78, 0xC8, 0x78, 0x30, 0x30, 0x78, 0x08, 0x78, 0xC8, 0x78,
0x28, 0x10, 0x78, 0x08, 0x78, 0xC8, 0x78, 0x30, 0x00, 0x78, 0x08, 0x78,
0xC8, 0x78, 0x30, 0x50, 0x30, 0x78, 0x08, 0x78, 0xC8, 0x78, 0x77, 0x00,
0x0D, 0x80, 0x7F, 0x80, 0xC8, 0x00, 0x77, 0x80, 0x78, 0x40, 0xC0, 0x40,
0x78, 0x10, 0x30, 0x20, 0x10, 0x78, 0x4C, 0xFC, 0x40, 0x78, 0x18, 0x10,
0x78, 0x4C, 0xFC, 0x40, 0x78, 0x30, 0x28, 0x78, 0x4C, 0xFC, 0x40, 0x78,
0x28, 0x00, 0x78, 0x4C, 0xFC, 0x40, 0x78, 0x80, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0xA0, 0x40,
0x40, 0x40, 0x40, 0x40, 0xA0, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x28,
0x30, 0x58, 0x78, 0xCC, 0xCC, 0x4C, 0x78, 0x50, 0x30, 0xF0, 0xD8, 0x98,
0x98, 0x98, 0x20, 0x10, 0x78, 0x4C, 0xCC, 0x4C, 0x78, 0x18, 0x10, 0x78,
0x4C, 0xCC, 0x4C, 0x78, 0x30, 0x30, 0x78, 0x4C, 0xCC, 0x4C, 0x78, 0x28,
0x10, 0x78, 0x4C, 0xCC, 0x4C, 0x78, 0x30, 0x00, 0x78, 0x4C, 0xCC, 0x4C,
0x78, 0x20, 0x00, 0xFC, 0x00, 0x20, 0x78, 0x4C, 0xDC, 0x6C, 0x78, 0x40,
0x20, 0x98, 0x98, 0x98, 0x98, 0xF8, 0x10, 0x20, 0x98, 0x98, 0x98, 0x98,
0xF8, 0x60, 0x50, 0x98, 0x98, 0x98, 0x98, 0xF8, 0x50, 0x00, 0x98, 0x98,
0x98, 0x98, 0xF8, 0x10, 0x10, 0xCC, 0x48, 0x78, 0x30, 0x30, 0x30, 0x60,
0x80, 0x80, 0x80, 0xF0, 0xD8, 0x98, 0xD8, 0xF0, 0x80, 0x80, 0x30, 0x00,
0xCC, 0x48, 0x78, 0x30, 0x30, 0x30, 0x60
};
const GFXglyph DejaVuSans9ptLat1Glyphs[] PROGMEM = {
{ 0, 0, 0, 3, 0, 0 },
{ 0, 2, 7, 4, 1, 0 },
{ 7, 3, 2, 5, 1, 5 },
{ 9, 6, 7, 8, 1, 0 },
{ 16, 5, 8, 6, 1, -1 },
{ 24, 9, 7, 9, 0, 0 },
{ 38, 6, 7, 8, 1, 0 },
{ 45, 1, 2, 3, 1, 5 },
{ 47, 2, 8, 4, 1, 0 },
{ 55, 2, 8, 4, 1, 0 },
{ 63, 4, 5, 5, 0, 2 },
{ 68, 6, 5, 8, 1, 0 },
{ 73, 2, 3, 3, 1, -1 },
{ 76, 3, 1, 4, 0, 2 },
{ 77, 2, 2, 3, 1, 0 },
{ 79, 3, 7, 3, 0, 0 },
{ 86, 6, 7, 6, 0, 0 },
{ 93, 5, 7, 6, 1, 0 },
{ 100, 4, 7, 6, 1, 0 },
{ 107, 4, 7, 6, 1, 0 },
{ 114, 6, 7, 6, 0, 0 },
{ 121, 5, 7, 6, 1, 0 },
{ 128, 5, 7, 6, 1, 0 },
{ 135, 5, 7, 6, 1, 0 },
{ 142, 5, 7, 6, 1, 0 },
{ 149, 5, 7, 6, 1, 0 },
{ 156, 2, 5, 4, 1, 0 },
{ 161, 2, 6, 4, 1, -1 },
{ 167, 6, 5, 8, 1, 0 },
{ 172, 6, 3, 8, 1, 1 },
{ 175, 6, 5, 8, 1, 0 },
{ 180, 4, 7, 5, 1, 0 },
{ 187, 7, 8, 9, 1, -1 },
{ 195, 7, 7, 7, 0, 0 },
{ 202, 5, 7, 7, 1, 0 },
{ 209, 6, 7, 7, 0, 0 },
{ 216, 6, 7, 7, 1, 0 },
{ 223, 4, 7, 6, 1, 0 },
{ 230, 4, 7, 6, 1, 0 },
{ 237, 7, 7, 7, 0, 0 },
{ 244, 6, 7, 8, 1, 0 },
{ 251, 2, 7, 3, 1, 0 },
{ 258, 4, 9, 3, -1, -2 },
{ 267, 6, 7, 7, 1, 0 },
{ 274, 4, 7, 6, 1, 0 },
{ 281, 7, 7, 9, 1, 0 },
{ 288, 6, 7, 8, 1, 0 },
{ 295, 7, 7, 8, 0, 0 },
{ 302, 5, 7, 7, 1, 0 },
{ 309, 7, 8, 8, 0, -1 },
{ 317, 6, 7, 7, 1, 0 },
{ 324, 5, 7, 6, 1, 0 },
{ 331, 6, 7, 6, 0, 0 },
{ 338, 5, 7, 7, 1, 0 },
{ 345, 7, 7, 7, 0, 0 },
{ 352, 10, 7, 10, 0, 0 },
{ 366, 6, 7, 7, 0, 0 },
{ 373, 6, 7, 7, 0, 0 },
{ 380, 6, 7, 7, 0, 0 },
{ 387, 3, 8, 4, 1, 0 },
{ 395, 3, 7, 3, 0, 0 },
{ 402, 2, 8, 4, 1, 0 },
{ 410, 5, 2, 8, 1, 5 },
{ 412, 5, 1, 5, 0, -2 },
{ 413, 2, 2, 5, 1, 5 },
{ 415, 5, 5, 6, 0, 0 },
{ 420, 5, 8, 6, 1, 0 },
{ 428, 5, 5, 5, 0, 0 },
{ 433, 6, 8, 6, 0, 0 },
{ 441, 6, 5, 6, 0, 0 },
{ 446, 4, 8, 4, 0, 0 },
{ 454, 6, 7, 6, 0, -2 },
{ 461, 5, 8, 6, 1, 0 },
{ 469, 1, 8, 3, 1, 0 },
{ 477, 2, 10, 3, 0, -2 },
{ 487, 5, 8, 6, 1, 0 },
{ 495, 1, 8, 3, 1, 0 },
{ 503, 8, 5, 9, 1, 0 },
{ 508, 5, 5, 6, 1, 0 },
{ 513, 6, 5, 6, 0, 0 },
{ 518, 5, 7, 6, 1, -2 },
{ 525, 6, 7, 6, 0, -2 },
{ 532, 3, 5, 4, 1, 0 },
{ 537, 5, 5, 5, 0, 0 },
{ 542, 4, 6, 4, 0, 0 },
{ 548, 5, 5, 6, 1, 0 },
{ 553, 6, 5, 6, 0, 0 },
{ 558, 8, 5, 8, 0, 0 },
{ 563, 4, 5, 6, 1, 0 },
{ 568, 6, 7, 6, 0, -2 },
{ 575, 5, 5, 5, 0, 0 },
{ 580, 4, 8, 6, 1, 0 },
{ 588, 1, 9, 3, 1, -2 },
{ 597, 4, 8, 6, 1, 0 },
{ 605, 6, 2, 8, 1, 2 },
{ 607, 0, 0, 3, 0, 0 },
{ 607, 2, 7, 4, 1, -2 },
{ 614, 4, 7, 6, 1, -1 },
{ 621, 5, 7, 6, 1, 0 },
{ 628, 5, 6, 6, 0, 0 },
{ 634, 6, 7, 6, 0, 0 },
{ 641, 1, 7, 3, 1, -1 },
{ 648, 4, 8, 5, 0, -1 },
{ 656, 3, 1, 5, 1, 6 },
{ 657, 7, 8, 9, 1, 0 },
{ 665, 3, 6, 5, 1, 1 },
{ 671, 4, 4, 6, 1, 1 },
{ 675, 6, 3, 8, 1, 1 },
{ 678, 3, 1, 4, 0, 2 },
{ 679, 7, 8, 9, 1, 0 },
{ 687, 3, 1, 5, 1, 6 },
{ 688, 3, 3, 5, 1, 4 },
{ 691, 6, 6, 8, 1, 0 },
{ 697, 3, 4, 4, 0, 3 },
{ 701, 3, 4, 4, 0, 3 },
{ 705, 2, 2, 5, 2, 5 },
{ 707, 5, 7, 7, 1, -2 },
{ 714, 4, 8, 6, 1, -1 },
{ 722, 2, 2, 3, 1, 2 },
{ 724, 2, 2, 5, 1, -2 },
{ 726, 2, 4, 4, 1, 3 },
{ 730, 4, 6, 5, 1, 1 },
{ 736, 4, 4, 6, 1, 1 },
{ 740, 8, 7, 9, 0, 0 },
{ 747, 9, 7, 9, 0, 0 },
{ 761, 8, 7, 9, 0, 0 },
{ 768, 4, 7, 5, 1, -2 },
{ 775, 7, 9, 7, 0, 0 },
{ 784, 7, 9, 7, 0, 0 },
{ 793, 7, 9, 7, 0, 0 },
{ 802, 7, 10, 7, 0, 0 },
{ 812, 7, 9, 7, 0, 0 },
{ 821, 7, 8, 7, 0, 0 },
{ 829, 9, 7, 10, 0, 0 },
{ 843, 6, 9, 7, 0, -2 },
{ 852, 4, 9, 6, 1, 0 },
{ 861, 4, 9, 6, 1, 0 },
{ 870, 4, 9, 6, 1, 0 },
{ 879, 4, 9, 6, 1, 0 },
{ 888, 2, 9, 3, 1, 0 },
{ 897, 2, 9, 3, 1, 0 },
{ 906, 2, 9, 3, 1, 0 },
{ 915, 3, 9, 3, 0, 0 },
{ 924, 7, 7, 8, 0, 0 },
{ 931, 6, 10, 8, 1, 0 },
{ 941, 7, 9, 8, 0, 0 },
{ 950, 7, 9, 8, 0, 0 },
{ 959, 7, 9, 8, 0, 0 },
{ 968, 7, 10, 8, 0, 0 },
{ 978, 7, 9, 8, 0, 0 },
{ 987, 5, 5, 8, 1, 0 },
{ 992, 7, 7, 8, 0, 0 },
{ 999, 5, 9, 7, 1, 0 },
{ 1008, 5, 9, 7, 1, 0 },
{ 1017, 5, 9, 7, 1, 0 },
{ 1026, 5, 9, 7, 1, 0 },
{ 1035, 6, 9, 7, 0, 0 },
{ 1044, 5, 7, 7, 1, 0 },
{ 1051, 5, 8, 6, 1, 0 },
{ 1059, 5, 7, 6, 0, 0 },
{ 1066, 5, 7, 6, 0, 0 },
{ 1073, 5, 7, 6, 0, 0 },
{ 1080, 5, 7, 6, 0, 0 },
{ 1087, 5, 7, 6, 0, 0 },
{ 1094, 5, 8, 6, 0, 0 },
{ 1102, 9, 5, 9, 0, 0 },
{ 1112, 5, 7, 5, 0, -2 },
{ 1119, 6, 7, 6, 0, 0 },
{ 1126, 6, 7, 6, 0, 0 },
{ 1133, 6, 7, 6, 0, 0 },
{ 1140, 6, 7, 6, 0, 0 },
{ 1147, 2, 7, 3, 0, 0 },
{ 1154, 2, 7, 3, 1, 0 },
{ 1161, 3, 7, 3, 0, 0 },
{ 1168, 3, 7, 3, 0, 0 },
{ 1175, 6, 8, 6, 0, 0 },
{ 1183, 5, 7, 6, 1, 0 },
{ 1190, 6, 7, 6, 0, 0 },
{ 1197, 6, 7, 6, 0, 0 },
{ 1204, 6, 7, 6, 0, 0 },
{ 1211, 6, 7, 6, 0, 0 },
{ 1218, 6, 7, 6, 0, 0 },
{ 1225, 6, 5, 8, 1, 0 },
{ 1230, 6, 5, 6, 0, 0 },
{ 1235, 5, 7, 6, 1, 0 },
{ 1242, 5, 7, 6, 1, 0 },
{ 1249, 5, 7, 6, 1, 0 },
{ 1256, 5, 7, 6, 1, 0 },
{ 1263, 6, 9, 6, 0, -2 },
{ 1272, 5, 10, 6, 1, -2 },
{ 1282, 6, 9, 6, 0, -2 }
};
const GFXfont DejaVuSans9ptLat1 PROGMEM = {
(uint8_t *)DejaVuSans9ptLat1Bitmaps,
(GFXglyph *)DejaVuSans9ptLat1Glyphs,
32, 255, 9 };
+541
View File
@@ -0,0 +1,541 @@
#ifndef DEJAVUSANSOBLIQUE9PTLAT1__H
#define DEJAVUSANSOBLIQUE9PTLAT1__H
const uint8_t DejaVuSans_Oblique9pt8bBitmaps[] PROGMEM = {
0x00, 0x18, 0xC6, 0x63, 0x18, 0xC6, 0x20, 0x01, 0x8C, 0x00, 0xCF, 0x3C,
0xF3, 0xCC, 0x06, 0x60, 0x23, 0x01, 0x10, 0x08, 0x87, 0xFF, 0xBF, 0xFC,
0x22, 0x01, 0x10, 0xFF, 0xF7, 0xFF, 0x84, 0x40, 0x22, 0x03, 0x30, 0x19,
0x80, 0x02, 0x00, 0x81, 0xF8, 0xFF, 0x74, 0x99, 0x06, 0x40, 0xF0, 0x0F,
0x02, 0x60, 0x9A, 0x2E, 0xFF, 0x1F, 0x81, 0x00, 0x40, 0x10, 0x00, 0x38,
0x09, 0x10, 0x48, 0x42, 0x21, 0x10, 0x84, 0xC2, 0x26, 0x07, 0x33, 0x81,
0x91, 0x04, 0x84, 0x22, 0x11, 0x08, 0x48, 0x22, 0x60, 0x70, 0x07, 0x00,
0xF8, 0x1C, 0x81, 0x80, 0x18, 0x01, 0xC0, 0x3E, 0x36, 0x62, 0xC3, 0x6C,
0x1C, 0xE1, 0xC7, 0xFC, 0x3E, 0x60, 0xFF, 0xC0, 0x06, 0x18, 0x61, 0x83,
0x0C, 0x18, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x08, 0x18, 0x10, 0x08, 0x18,
0x10, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x18, 0x30, 0xC1, 0x86, 0x18, 0x60,
0x11, 0x25, 0x51, 0xC3, 0x8A, 0xA4, 0x88, 0x06, 0x00, 0x60, 0x06, 0x00,
0x60, 0x06, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00,
0x60, 0x6F, 0x40, 0xFF, 0xC0, 0xF0, 0x01, 0x01, 0x80, 0x80, 0xC0, 0x40,
0x60, 0x30, 0x30, 0x18, 0x08, 0x0C, 0x04, 0x06, 0x02, 0x03, 0x00, 0x0F,
0x07, 0xE3, 0x1D, 0x83, 0x60, 0xF0, 0x3C, 0x0F, 0x03, 0xC1, 0xB0, 0x6E,
0x31, 0xF8, 0x3C, 0x00, 0x0E, 0x3E, 0x26, 0x06, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x18, 0x18, 0xFF, 0xFF, 0x0F, 0x0F, 0xF2, 0x1C, 0x03, 0x00, 0xC0,
0x70, 0x38, 0x1C, 0x0E, 0x07, 0x07, 0x03, 0xFC, 0xFF, 0x00, 0x0F, 0x87,
0xF2, 0x0C, 0x03, 0x01, 0x87, 0xC1, 0xF0, 0x06, 0x01, 0x80, 0x68, 0x3B,
0xFC, 0x7C, 0x00, 0x00, 0xC0, 0x70, 0x38, 0x16, 0x09, 0x84, 0x62, 0x31,
0x0C, 0xFF, 0xFF, 0xF0, 0x30, 0x18, 0x06, 0x00, 0x1F, 0xC7, 0xF3, 0x00,
0xC0, 0x3E, 0x0F, 0xC4, 0x38, 0x06, 0x01, 0x80, 0x68, 0x73, 0xF8, 0x7C,
0x00, 0x0F, 0x87, 0xF3, 0x85, 0xC0, 0x60, 0x3B, 0xCD, 0xFB, 0x86, 0xC1,
0xB0, 0x6C, 0x31, 0xFC, 0x3C, 0x00, 0xFF, 0xFF, 0xE0, 0x38, 0x0C, 0x07,
0x01, 0x80, 0xC0, 0x70, 0x18, 0x0E, 0x03, 0x01, 0x80, 0xE0, 0x00, 0x0F,
0x87, 0xF3, 0x8C, 0xC3, 0x31, 0x87, 0xC3, 0xF1, 0x8E, 0xC1, 0xB0, 0x6E,
0x39, 0xFC, 0x3E, 0x00, 0x0F, 0x0F, 0xE3, 0x0D, 0x83, 0x60, 0xD8, 0x77,
0xEC, 0xF6, 0x01, 0x80, 0xE8, 0x73, 0xF8, 0x78, 0x00, 0x33, 0x00, 0x00,
0x0C, 0xC0, 0x33, 0x00, 0x00, 0x06, 0x6C, 0x80, 0x00, 0x20, 0x3C, 0x1F,
0x1F, 0x0F, 0x81, 0xF0, 0x0F, 0x80, 0x3E, 0x01, 0xE0, 0x04, 0xFF, 0xFF,
0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x80, 0x1E, 0x01, 0xF0, 0x07,
0xC0, 0x3E, 0x07, 0xC3, 0xE3, 0xE0, 0xF0, 0x10, 0x00, 0x7D, 0xFE, 0x18,
0x30, 0xC3, 0x8E, 0x38, 0x60, 0xC0, 0x06, 0x0C, 0x00, 0x03, 0xF0, 0x0F,
0xFC, 0x1E, 0x0E, 0x38, 0x07, 0x70, 0x03, 0x61, 0xD3, 0xE3, 0xF3, 0xC6,
0x17, 0xC6, 0x26, 0xC7, 0xFC, 0xC3, 0xB8, 0xE0, 0x00, 0x60, 0x10, 0x78,
0x60, 0x3F, 0xC0, 0x0F, 0x80, 0x01, 0xC0, 0x1C, 0x03, 0xC0, 0x3C, 0x06,
0xC0, 0xE6, 0x0C, 0x61, 0xC6, 0x1F, 0xE3, 0xFE, 0x70, 0x76, 0x03, 0xE0,
0x30, 0x1F, 0xC3, 0xFC, 0xC1, 0x98, 0x33, 0x0C, 0x7F, 0x1F, 0xE3, 0x06,
0x60, 0xCC, 0x19, 0x87, 0x7F, 0xCF, 0xF0, 0x07, 0xE1, 0xFF, 0x38, 0x17,
0x00, 0x60, 0x0E, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0x60, 0x47,
0xFC, 0x1F, 0x80, 0x1F, 0xC0, 0xFF, 0x8C, 0x1C, 0x60, 0x33, 0x01, 0x98,
0x0D, 0xC0, 0x6C, 0x03, 0x60, 0x33, 0x03, 0x98, 0x39, 0xFF, 0x8F, 0xF0,
0x00, 0x1F, 0xE3, 0xFC, 0xC0, 0x18, 0x03, 0x00, 0x7F, 0x9F, 0xF3, 0x00,
0x60, 0x0C, 0x01, 0x80, 0x7F, 0xCF, 0xF8, 0x1F, 0xC7, 0xF3, 0x00, 0xC0,
0x30, 0x0F, 0xC7, 0xF1, 0x80, 0x60, 0x18, 0x06, 0x03, 0x00, 0xC0, 0x00,
0x07, 0xE1, 0xFF, 0x38, 0x27, 0x00, 0x60, 0x0C, 0x1E, 0xC1, 0xEC, 0x06,
0xC0, 0xCC, 0x0C, 0xE0, 0xC7, 0xF8, 0x3F, 0x00, 0x18, 0x18, 0xC0, 0xCC,
0x0C, 0x60, 0x63, 0x03, 0x1F, 0xF9, 0xFF, 0xCC, 0x0C, 0x60, 0x63, 0x03,
0x18, 0x19, 0x81, 0x8C, 0x0C, 0x00, 0x18, 0xCC, 0x63, 0x19, 0xCC, 0x63,
0x19, 0x8C, 0x00, 0x03, 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x18, 0x18, 0x38, 0xF0, 0xE0, 0x18, 0x30, 0xC3, 0x0C,
0x30, 0x67, 0x03, 0x60, 0x1E, 0x01, 0xF0, 0x0D, 0xC0, 0x67, 0x03, 0x18,
0x18, 0x61, 0x83, 0x8C, 0x0E, 0x00, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30,
0x70, 0x60, 0x60, 0x60, 0x60, 0xFF, 0xFF, 0x1C, 0x0E, 0x38, 0x3C, 0xF0,
0xF1, 0xA1, 0xE3, 0x66, 0xC6, 0xCD, 0x9D, 0xB3, 0x33, 0xCC, 0x63, 0x98,
0xC6, 0x31, 0x80, 0x66, 0x01, 0x8C, 0x03, 0x00, 0x1C, 0x18, 0xE0, 0xCD,
0x8C, 0x6C, 0x63, 0x63, 0x19, 0x99, 0xCD, 0xCC, 0x6C, 0x61, 0xE3, 0x0F,
0x18, 0x79, 0x81, 0x8C, 0x0C, 0x00, 0x07, 0xC0, 0xFF, 0x8E, 0x0C, 0xE0,
0x36, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x36, 0x03, 0x98, 0x38,
0xFF, 0x81, 0xF0, 0x00, 0x1F, 0x87, 0xF3, 0x0C, 0xC3, 0x30, 0xCC, 0x77,
0xF9, 0xFC, 0x60, 0x18, 0x06, 0x03, 0x00, 0xC0, 0x00, 0x07, 0xC0, 0xFF,
0x8E, 0x0C, 0xE0, 0x36, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x36,
0x03, 0x98, 0x38, 0xFF, 0x81, 0xF0, 0x01, 0xC0, 0x07, 0x00, 0x1F, 0x87,
0xF3, 0x0C, 0xC3, 0x30, 0xCC, 0x67, 0xF1, 0xFC, 0x63, 0x18, 0x66, 0x1B,
0x06, 0xC0, 0xC0, 0x07, 0xC3, 0xFC, 0xE0, 0x98, 0x03, 0x00, 0x7C, 0x03,
0xE0, 0x0E, 0x00, 0xC0, 0x1B, 0x07, 0x7F, 0xC7, 0xE0, 0xFF, 0xFF, 0xFF,
0x06, 0x00, 0x60, 0x0C, 0x00, 0xC0, 0x0C, 0x01, 0xC0, 0x18, 0x01, 0x80,
0x18, 0x03, 0x00, 0x30, 0x00, 0x30, 0x33, 0x03, 0x60, 0x66, 0x06, 0x60,
0x66, 0x06, 0xC0, 0x6C, 0x0C, 0xC0, 0xCC, 0x0C, 0xE3, 0x87, 0xF8, 0x3E,
0x00, 0xC0, 0x7C, 0x06, 0xC0, 0xE6, 0x0C, 0x61, 0x86, 0x38, 0x63, 0x06,
0x70, 0x36, 0x03, 0xC0, 0x3C, 0x03, 0x80, 0x38, 0x00, 0xC1, 0x81, 0xE0,
0xC1, 0xB0, 0xE0, 0xD8, 0x70, 0xCC, 0x6C, 0x66, 0x36, 0x63, 0x33, 0x31,
0x99, 0xB8, 0x58, 0xD8, 0x3C, 0x3C, 0x1C, 0x1C, 0x0E, 0x0E, 0x06, 0x06,
0x00, 0x38, 0x71, 0x86, 0x1C, 0xC0, 0xD8, 0x0F, 0x80, 0x70, 0x07, 0x00,
0xF0, 0x1D, 0x81, 0x98, 0x39, 0xC7, 0x0C, 0xE0, 0xE0, 0xC0, 0xCC, 0x31,
0x8E, 0x19, 0x83, 0x60, 0x78, 0x07, 0x00, 0xC0, 0x18, 0x03, 0x00, 0xC0,
0x18, 0x03, 0x00, 0x3F, 0xF9, 0xFF, 0xC0, 0x1C, 0x01, 0xC0, 0x1C, 0x01,
0xC0, 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xFF, 0xCF, 0xFE,
0x00, 0x1E, 0x3C, 0x61, 0x83, 0x06, 0x0C, 0x18, 0x60, 0xC1, 0x83, 0x06,
0x1C, 0x3C, 0x78, 0xDB, 0x64, 0x92, 0x6D, 0x92, 0x48, 0x1E, 0x3C, 0x38,
0x60, 0xC1, 0x83, 0x06, 0x18, 0x30, 0x60, 0xC1, 0x86, 0x3C, 0x78, 0x0E,
0x03, 0x60, 0xC6, 0x30, 0x6C, 0x06, 0xFF, 0xFF, 0xC0, 0xC6, 0x30, 0x1F,
0x1F, 0xC8, 0x60, 0x33, 0xFB, 0xFF, 0x0D, 0x8E, 0xFB, 0x3B, 0x80, 0x18,
0x06, 0x03, 0x80, 0xC0, 0x37, 0x8F, 0xF3, 0x9D, 0xC3, 0x60, 0xD8, 0x36,
0x19, 0x8E, 0xDF, 0x33, 0x80, 0x0F, 0x1F, 0xDC, 0x2C, 0x0C, 0x06, 0x03,
0x01, 0xC4, 0x7E, 0x1E, 0x00, 0x00, 0x60, 0x0C, 0x03, 0x00, 0x61, 0xEC,
0x7D, 0x9C, 0x73, 0x0C, 0xC1, 0x98, 0x33, 0x0E, 0x71, 0xCF, 0xF0, 0xF6,
0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xFF, 0xFF, 0xFC, 0x03, 0x86, 0x7F,
0x0F, 0x80, 0x0E, 0x3C, 0xC1, 0x8F, 0xDF, 0x8C, 0x30, 0x60, 0xC1, 0x83,
0x0C, 0x18, 0x00, 0x1E, 0xCF, 0xB7, 0x1D, 0x86, 0xC1, 0xB0, 0x6C, 0x1B,
0x8E, 0x7F, 0x1E, 0xC0, 0x32, 0x18, 0xFE, 0x1E, 0x00, 0x18, 0x06, 0x03,
0x80, 0xC0, 0x37, 0x8F, 0xF3, 0x9D, 0xC3, 0x60, 0xD8, 0x36, 0x0D, 0x86,
0xC1, 0xB0, 0x60, 0x18, 0xC0, 0x03, 0x19, 0xCC, 0x63, 0x19, 0xCC, 0x60,
0x03, 0x03, 0x00, 0x00, 0x06, 0x06, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x18,
0x18, 0x18, 0x18, 0x30, 0xF0, 0xE0, 0x18, 0x06, 0x03, 0x80, 0xC0, 0x31,
0x8C, 0xC3, 0x61, 0xF0, 0x78, 0x1F, 0x06, 0xE1, 0x98, 0xC3, 0x30, 0xE0,
0x18, 0xCE, 0x63, 0x18, 0xCC, 0x63, 0x18, 0xCC, 0x60, 0x37, 0x1C, 0x7F,
0x7D, 0xE7, 0x1B, 0x8C, 0x36, 0x18, 0x6C, 0x30, 0xD8, 0x61, 0xF1, 0x86,
0xC3, 0x0D, 0x86, 0x18, 0x37, 0x8F, 0xF7, 0x9D, 0xC3, 0x60, 0xD8, 0x36,
0x0F, 0x86, 0xC1, 0xB0, 0x60, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0, 0xF0,
0x3C, 0x1B, 0x8E, 0x7F, 0x0F, 0x80, 0x1B, 0xC3, 0xFC, 0xE3, 0x9C, 0x33,
0x06, 0x60, 0xCC, 0x33, 0x8E, 0x6F, 0x8D, 0xE1, 0x80, 0x30, 0x0C, 0x01,
0x80, 0x00, 0x1E, 0xCF, 0xB7, 0x19, 0x86, 0xC1, 0xB0, 0x6C, 0x3B, 0x8C,
0xFF, 0x1E, 0xC0, 0x30, 0x1C, 0x06, 0x01, 0x80, 0x37, 0x3F, 0x78, 0x70,
0x60, 0x60, 0x60, 0xE0, 0xC0, 0xC0, 0x1F, 0x1F, 0xD8, 0x2E, 0x03, 0xE0,
0x78, 0x0D, 0x06, 0xFE, 0x3E, 0x00, 0x30, 0xC6, 0x3F, 0xFD, 0x86, 0x18,
0xC3, 0x0C, 0x3E, 0x70, 0x60, 0xD8, 0x36, 0x1F, 0x06, 0xC1, 0xB0, 0x6C,
0x3B, 0x1E, 0xFF, 0x1E, 0xC0, 0xC1, 0xF0, 0x6E, 0x39, 0x8C, 0x66, 0x1B,
0x86, 0xC1, 0xF0, 0x38, 0x0C, 0x00, 0xC3, 0x1B, 0x1C, 0x6C, 0x73, 0x33,
0x4C, 0xCD, 0x63, 0x65, 0x8D, 0x9C, 0x3C, 0x70, 0x71, 0x81, 0x86, 0x00,
0x30, 0xC3, 0x30, 0x6C, 0x07, 0x00, 0xC0, 0x1C, 0x07, 0x81, 0x98, 0x63,
0x18, 0x30, 0x60, 0x76, 0x06, 0x30, 0xC3, 0x1C, 0x31, 0x83, 0x30, 0x1E,
0x01, 0xE0, 0x1C, 0x01, 0x80, 0x18, 0x03, 0x00, 0x70, 0x06, 0x00, 0x3F,
0xCF, 0xF0, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xFF, 0x3F, 0xC0,
0x03, 0x83, 0xC3, 0x81, 0x80, 0xC0, 0x60, 0x61, 0xF0, 0xF0, 0x1C, 0x06,
0x03, 0x03, 0x01, 0x80, 0xC0, 0x78, 0x1C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xF0, 0x1C, 0x0F, 0x01, 0x80, 0xC0, 0x60, 0x60, 0x38, 0x0F, 0x07, 0x86,
0x03, 0x03, 0x01, 0x80, 0xC0, 0xE1, 0xE0, 0xE0, 0x00, 0x7C, 0x3F, 0xFE,
0x1F, 0x00, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0x00, 0x18, 0xC0, 0x02,
0x31, 0x8C, 0x63, 0x31, 0x8C, 0x00, 0x02, 0x01, 0x00, 0x81, 0xE3, 0xFB,
0x95, 0x91, 0x88, 0xC4, 0x62, 0x3A, 0x4F, 0xC3, 0xE0, 0x40, 0x20, 0x10,
0x03, 0xC0, 0xFC, 0x31, 0x06, 0x01, 0x80, 0x30, 0x1F, 0xC3, 0xF8, 0x18,
0x06, 0x00, 0xC0, 0x7F, 0x8F, 0xF0, 0x80, 0xB5, 0x9F, 0xC4, 0x46, 0x31,
0x11, 0xFC, 0xD6, 0x80, 0x80, 0x30, 0xE6, 0x18, 0xC6, 0x0D, 0xC1, 0xF0,
0xFF, 0x83, 0x00, 0x60, 0xFF, 0x81, 0x80, 0x60, 0x0C, 0x01, 0x80, 0xFF,
0xFC, 0x3F, 0xFF, 0x07, 0x83, 0xE0, 0xC0, 0x30, 0x04, 0x06, 0x83, 0x38,
0xC6, 0x39, 0x82, 0xC0, 0x40, 0x18, 0x06, 0x3F, 0x0F, 0x80, 0xDE, 0xC0,
0x0F, 0x81, 0x83, 0x18, 0x0C, 0x8F, 0x28, 0x80, 0xC8, 0x06, 0x40, 0x32,
0x01, 0x88, 0x8A, 0x38, 0x98, 0x0C, 0x60, 0xC0, 0xF8, 0x00, 0x7C, 0x04,
0xFE, 0x18, 0x71, 0xDD, 0x00, 0xFC, 0x08, 0x8C, 0xCC, 0xD9, 0x8C, 0xC3,
0x30, 0xCC, 0x24, 0xFF, 0xFF, 0xFC, 0x01, 0x80, 0x30, 0x06, 0xFF, 0xC0,
0x0F, 0x81, 0x83, 0x18, 0x0C, 0x9E, 0x28, 0x88, 0xC4, 0x46, 0x3C, 0x31,
0x21, 0x88, 0x8A, 0x46, 0x98, 0x0C, 0x60, 0xC0, 0xF8, 0x00, 0xFF, 0xF0,
0x7B, 0x38, 0x61, 0xCD, 0xE0, 0x06, 0x00, 0x60, 0x06, 0x0F, 0xFF, 0xFF,
0xF0, 0x60, 0x06, 0x00, 0x60, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x39, 0x10,
0x43, 0x11, 0x8F, 0x80, 0x7C, 0x13, 0x82, 0x08, 0x2F, 0x00, 0x33, 0x30,
0x18, 0x63, 0x0C, 0xE1, 0x98, 0x73, 0x0C, 0x61, 0x8C, 0x33, 0x8E, 0x7F,
0xED, 0xDD, 0x80, 0x30, 0x0C, 0x01, 0x80, 0x00, 0x1F, 0xBE, 0x7F, 0x3F,
0x3F, 0x97, 0xC9, 0xE4, 0x32, 0x13, 0x09, 0x04, 0x82, 0x43, 0x21, 0x30,
0x90, 0xF0, 0x11, 0xE0, 0x71, 0x12, 0x22, 0xF0, 0x3C, 0x8E, 0x0C, 0x18,
0x38, 0x9E, 0x00, 0xFC, 0x44, 0x33, 0x0C, 0xC3, 0x31, 0x9B, 0x33, 0x31,
0x10, 0x70, 0x0C, 0x20, 0x30, 0x40, 0xC1, 0x03, 0x02, 0x0C, 0x04, 0x30,
0x3C, 0x41, 0x81, 0x85, 0x06, 0x12, 0x18, 0x48, 0x61, 0xF9, 0x80, 0x26,
0x00, 0x40, 0x70, 0x0C, 0x20, 0x30, 0x40, 0xC1, 0x03, 0x02, 0x0C, 0x04,
0x30, 0x3C, 0x47, 0x01, 0x91, 0x06, 0x02, 0x18, 0x0C, 0x60, 0x21, 0x81,
0x86, 0x07, 0xC0, 0x7C, 0x06, 0x04, 0x0C, 0x38, 0x18, 0x08, 0x30, 0x08,
0x60, 0x08, 0xC0, 0xF0, 0x83, 0x01, 0x85, 0x03, 0x09, 0x06, 0x12, 0x0C,
0x3F, 0x18, 0x02, 0x30, 0x02, 0x06, 0x0C, 0x00, 0x30, 0xC1, 0x87, 0x1C,
0x61, 0x83, 0x06, 0x1F, 0xEF, 0x80, 0x01, 0x80, 0x0C, 0x00, 0x00, 0x1C,
0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x6C, 0x0E, 0x60, 0xC6, 0x1C, 0x61, 0xFE,
0x3F, 0xE7, 0x07, 0x60, 0x3E, 0x03, 0x00, 0x60, 0x0C, 0x00, 0x00, 0x1C,
0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x6C, 0x0E, 0x60, 0xC6, 0x1C, 0x61, 0xFE,
0x3F, 0xE7, 0x07, 0x60, 0x3E, 0x03, 0x00, 0xE0, 0x13, 0x00, 0x00, 0x1C,
0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x6C, 0x0E, 0x60, 0xC6, 0x1C, 0x61, 0xFE,
0x3F, 0xE7, 0x07, 0x60, 0x3E, 0x03, 0x01, 0x90, 0x26, 0x00, 0x00, 0x1C,
0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x6C, 0x0E, 0x60, 0xC6, 0x1C, 0x61, 0xFE,
0x3F, 0xE7, 0x07, 0x60, 0x3E, 0x03, 0x01, 0xB0, 0x1B, 0x00, 0x00, 0x1C,
0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x6C, 0x0E, 0x60, 0xC6, 0x1C, 0x61, 0xFE,
0x3F, 0xE7, 0x07, 0x60, 0x3E, 0x03, 0x01, 0xC0, 0x22, 0x02, 0x20, 0x22,
0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x7C, 0x06, 0xC0, 0xC6, 0x0C, 0x61, 0x86,
0x1F, 0xE3, 0xFE, 0x70, 0x36, 0x03, 0xE0, 0x30, 0x00, 0xFF, 0xE0, 0x3F,
0xFC, 0x06, 0xC0, 0x01, 0x98, 0x00, 0x73, 0x00, 0x0C, 0x7F, 0x83, 0x1F,
0xE0, 0xE3, 0x00, 0x1F, 0xE0, 0x07, 0xFC, 0x00, 0xC1, 0x80, 0x30, 0x7F,
0xCE, 0x0F, 0xF8, 0x07, 0xE1, 0xFF, 0x38, 0x17, 0x00, 0x60, 0x0E, 0x00,
0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0x60, 0x47, 0xFC, 0x1F, 0x80, 0x20,
0x02, 0x01, 0xC0, 0x06, 0x00, 0x60, 0x00, 0x0F, 0xF1, 0xFE, 0x60, 0x0C,
0x01, 0x80, 0x3F, 0xCF, 0xF9, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x3F, 0xE7,
0xFC, 0x01, 0x80, 0x60, 0x00, 0x0F, 0xF1, 0xFE, 0x60, 0x0C, 0x01, 0x80,
0x3F, 0xCF, 0xF9, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x3F, 0xE7, 0xFC, 0x03,
0x80, 0x98, 0x00, 0x0F, 0xF1, 0xFE, 0x60, 0x0C, 0x01, 0x80, 0x3F, 0xCF,
0xF9, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x3F, 0xE7, 0xFC, 0x06, 0xC0, 0xD8,
0x00, 0x0F, 0xF1, 0xFE, 0x60, 0x0C, 0x01, 0x80, 0x3F, 0xCF, 0xF9, 0x80,
0x30, 0x06, 0x00, 0xC0, 0x3F, 0xE7, 0xFC, 0x30, 0xC0, 0x31, 0x98, 0xC6,
0x33, 0x98, 0xC6, 0x33, 0x18, 0x0C, 0x30, 0x00, 0xC1, 0x86, 0x0C, 0x18,
0x30, 0xE1, 0x83, 0x06, 0x0C, 0x30, 0x60, 0x1C, 0x4C, 0x00, 0xC1, 0x86,
0x0C, 0x18, 0x30, 0xE1, 0x83, 0x06, 0x0C, 0x30, 0x60, 0x36, 0x6C, 0x00,
0xC1, 0x86, 0x0C, 0x18, 0x30, 0xE1, 0x83, 0x06, 0x0C, 0x30, 0x60, 0x1F,
0xC0, 0xFF, 0x8C, 0x1C, 0x60, 0x33, 0x01, 0xFF, 0x0F, 0xF0, 0x6C, 0x03,
0x60, 0x33, 0x03, 0x98, 0x39, 0xFF, 0x8F, 0xF0, 0x00, 0x03, 0x20, 0x26,
0x00, 0x00, 0x38, 0x31, 0xC1, 0x9B, 0x18, 0xD8, 0xC6, 0xC6, 0x33, 0x33,
0x9B, 0x98, 0xD8, 0xC3, 0xC6, 0x1E, 0x30, 0xF3, 0x03, 0x18, 0x18, 0x01,
0x80, 0x06, 0x00, 0x00, 0x0F, 0x81, 0xFF, 0x1C, 0x19, 0xC0, 0x6C, 0x03,
0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x6C, 0x07, 0x30, 0x71, 0xFF, 0x03,
0xE0, 0x00, 0x60, 0x06, 0x00, 0x00, 0x0F, 0x81, 0xFF, 0x1C, 0x19, 0xC0,
0x6C, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x6C, 0x07, 0x30, 0x71,
0xFF, 0x03, 0xE0, 0x00, 0xE0, 0x09, 0x80, 0x00, 0x0F, 0x81, 0xFF, 0x1C,
0x19, 0xC0, 0x6C, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x6C, 0x07,
0x30, 0x71, 0xFF, 0x03, 0xE0, 0x01, 0x90, 0x13, 0x00, 0x00, 0x0F, 0x81,
0xFF, 0x1C, 0x19, 0xC0, 0x6C, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80,
0x6C, 0x07, 0x30, 0x71, 0xFF, 0x03, 0xE0, 0x01, 0xB0, 0x0D, 0x80, 0x00,
0x0F, 0x81, 0xFF, 0x1C, 0x19, 0xC0, 0x6C, 0x03, 0xC0, 0x1E, 0x00, 0xF0,
0x07, 0x80, 0x6C, 0x07, 0x30, 0x71, 0xFF, 0x03, 0xE0, 0x40, 0xB8, 0x77,
0x38, 0xFC, 0x1E, 0x07, 0x83, 0xF1, 0xCE, 0xE1, 0xD0, 0x20, 0x03, 0xE2,
0x1F, 0xE8, 0x70, 0x61, 0xC1, 0xE3, 0x06, 0xCE, 0x19, 0x98, 0xE3, 0x33,
0x0E, 0x6C, 0x18, 0xF0, 0x71, 0xC1, 0xC2, 0xFF, 0x08, 0xF8, 0x00, 0x06,
0x00, 0x30, 0x00, 0x03, 0x03, 0x30, 0x36, 0x06, 0x60, 0x66, 0x06, 0x60,
0x6C, 0x06, 0xC0, 0xCC, 0x0C, 0xC0, 0xCE, 0x38, 0x7F, 0x83, 0xE0, 0x01,
0x80, 0x30, 0x00, 0x03, 0x03, 0x30, 0x36, 0x06, 0x60, 0x66, 0x06, 0x60,
0x6C, 0x06, 0xC0, 0xCC, 0x0C, 0xC0, 0xCE, 0x38, 0x7F, 0x83, 0xE0, 0x03,
0x80, 0x4C, 0x00, 0x03, 0x03, 0x30, 0x36, 0x06, 0x60, 0x66, 0x06, 0x60,
0x6C, 0x06, 0xC0, 0xCC, 0x0C, 0xC0, 0xCE, 0x38, 0x7F, 0x83, 0xE0, 0x06,
0xC0, 0x6C, 0x00, 0x03, 0x03, 0x30, 0x36, 0x06, 0x60, 0x66, 0x06, 0x60,
0x6C, 0x06, 0xC0, 0xCC, 0x0C, 0xC0, 0xCE, 0x38, 0x7F, 0x83, 0xE0, 0x03,
0x00, 0xC0, 0x00, 0x60, 0x66, 0x18, 0xC7, 0x0C, 0xC1, 0xB0, 0x3C, 0x03,
0x80, 0x60, 0x0C, 0x01, 0x80, 0x60, 0x0C, 0x01, 0x80, 0x18, 0x06, 0x03,
0xF8, 0xFF, 0x30, 0xCC, 0x37, 0x0D, 0x87, 0x7F, 0x9F, 0xC6, 0x03, 0x00,
0xC0, 0x00, 0x0F, 0x87, 0xF3, 0x8C, 0xC3, 0x33, 0x0D, 0x83, 0x71, 0x8E,
0x61, 0xD8, 0x36, 0x0D, 0xC7, 0xDF, 0xB7, 0xC0, 0x18, 0x06, 0x01, 0x80,
0x01, 0xF1, 0xFC, 0x86, 0x03, 0x3F, 0xBF, 0xF0, 0xD8, 0xEF, 0xB3, 0xB8,
0x01, 0x80, 0xC0, 0x60, 0x00, 0x1F, 0x0F, 0xE2, 0x18, 0x06, 0x3F, 0x9F,
0xEC, 0x33, 0x1C, 0xFB, 0x1D, 0xC0, 0x07, 0x06, 0x86, 0x60, 0x01, 0xF1,
0xFC, 0x86, 0x03, 0x3F, 0xBF, 0xF0, 0xD8, 0xEF, 0xB3, 0xB8, 0x0C, 0x89,
0x80, 0x00, 0x01, 0xF1, 0xFC, 0x86, 0x03, 0x3F, 0xBF, 0xF0, 0xD8, 0xEF,
0xB3, 0xB8, 0x1B, 0x0D, 0x80, 0x00, 0x01, 0xF1, 0xFC, 0x86, 0x03, 0x3F,
0xBF, 0xF0, 0xD8, 0xEF, 0xB3, 0xB8, 0x07, 0x04, 0x42, 0x21, 0x10, 0x70,
0x00, 0x7C, 0x7F, 0x21, 0x80, 0xCF, 0xEF, 0xFC, 0x36, 0x3B, 0xEC, 0xEE,
0x1F, 0x1C, 0x3F, 0xFE, 0x21, 0xC3, 0x01, 0x83, 0x3F, 0xFF, 0x7F, 0xFF,
0xC1, 0x80, 0xC3, 0x86, 0xFC, 0xFC, 0x78, 0x78, 0x0F, 0x1F, 0xDC, 0x2C,
0x0C, 0x06, 0x03, 0x01, 0xC4, 0x7E, 0x1E, 0x02, 0x01, 0x07, 0x00, 0x18,
0x03, 0x00, 0x60, 0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xFF, 0xFF, 0xFC,
0x03, 0x86, 0x7F, 0x0F, 0x80, 0x01, 0x80, 0xC0, 0x60, 0x00, 0x0F, 0x0F,
0xE7, 0x1D, 0x83, 0xFF, 0xFF, 0xFC, 0x03, 0x86, 0x7F, 0x0F, 0x80, 0x07,
0x03, 0x41, 0x98, 0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xFF, 0xFF, 0xFC,
0x03, 0x86, 0x7F, 0x0F, 0x80, 0x1B, 0x06, 0xC0, 0x00, 0x00, 0x0F, 0x0F,
0xE7, 0x1D, 0x83, 0xFF, 0xFF, 0xFC, 0x03, 0x86, 0x7F, 0x0F, 0x80, 0xC6,
0x30, 0x33, 0x76, 0x66, 0x6E, 0xCC, 0x0C, 0x30, 0xC0, 0x03, 0x06, 0x1C,
0x30, 0x60, 0xC1, 0x87, 0x0C, 0x18, 0x00, 0x39, 0xAC, 0xC0, 0x30, 0xC7,
0x18, 0x61, 0x86, 0x38, 0xC3, 0x00, 0xDE, 0xC0, 0x03, 0x19, 0xCC, 0x63,
0x19, 0xCC, 0x60, 0x1C, 0x87, 0x8F, 0x80, 0xC1, 0xF1, 0xFD, 0xC6, 0xC3,
0xC1, 0xE0, 0xF0, 0xD8, 0xE7, 0xE1, 0xE0, 0x0C, 0x84, 0xC0, 0x00, 0x00,
0x37, 0x8F, 0xF7, 0x9D, 0xC3, 0x60, 0xD8, 0x36, 0x0F, 0x86, 0xC1, 0xB0,
0x60, 0x18, 0x03, 0x00, 0x60, 0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0,
0xF0, 0x3C, 0x1B, 0x8E, 0x7F, 0x0F, 0x80, 0x01, 0x80, 0xC0, 0x60, 0x00,
0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0, 0xF0, 0x3C, 0x1B, 0x8E, 0x7F, 0x0F,
0x80, 0x07, 0x03, 0x41, 0x98, 0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0,
0xF0, 0x3C, 0x1B, 0x8E, 0x7F, 0x0F, 0x80, 0x0C, 0x84, 0xC0, 0x00, 0x00,
0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0, 0xF0, 0x3C, 0x1B, 0x8E, 0x7F, 0x0F,
0x80, 0x1B, 0x06, 0xC0, 0x00, 0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0,
0xF0, 0x3C, 0x1B, 0x8E, 0x7F, 0x0F, 0x80, 0x06, 0x00, 0x60, 0x00, 0x0F,
0xFF, 0xFF, 0xF0, 0x00, 0x06, 0x00, 0x60, 0x00, 0x01, 0xEC, 0x7F, 0x1C,
0xE7, 0x2C, 0xC9, 0x99, 0x33, 0x4E, 0x73, 0x8F, 0xE3, 0x78, 0x00, 0x00,
0x18, 0x03, 0x00, 0x60, 0x00, 0x60, 0xD8, 0x36, 0x1F, 0x06, 0xC1, 0xB0,
0x6C, 0x3B, 0x1E, 0xFF, 0x1E, 0xC0, 0x01, 0x80, 0xC0, 0x60, 0x00, 0x60,
0xD8, 0x36, 0x1F, 0x06, 0xC1, 0xB0, 0x6C, 0x3B, 0x1E, 0xFF, 0x1E, 0xC0,
0x07, 0x03, 0x41, 0x98, 0x00, 0x60, 0xD8, 0x36, 0x1F, 0x06, 0xC1, 0xB0,
0x6C, 0x3B, 0x1E, 0xFF, 0x1E, 0xC0, 0x1B, 0x06, 0xC0, 0x00, 0x00, 0x60,
0xD8, 0x36, 0x1F, 0x06, 0xC1, 0xB0, 0x6C, 0x3B, 0x1E, 0xFF, 0x1E, 0xC0,
0x00, 0xC0, 0x18, 0x03, 0x00, 0x00, 0x60, 0x76, 0x06, 0x30, 0xC3, 0x1C,
0x31, 0x83, 0x30, 0x1E, 0x01, 0xE0, 0x1C, 0x01, 0x80, 0x18, 0x03, 0x00,
0x70, 0x06, 0x00, 0x18, 0x03, 0x00, 0x60, 0x18, 0x03, 0x3C, 0x6F, 0x8E,
0x39, 0x83, 0x30, 0x6C, 0x0D, 0x83, 0x38, 0xE7, 0xF8, 0xDE, 0x18, 0x06,
0x00, 0xC0, 0x18, 0x00, 0x0D, 0x80, 0xD8, 0x00, 0x00, 0x00, 0x60, 0x76,
0x06, 0x30, 0xC3, 0x1C, 0x31, 0x83, 0x30, 0x1E, 0x01, 0xE0, 0x1C, 0x01,
0x80, 0x18, 0x03, 0x00, 0x70, 0x06, 0x00 };
const GFXglyph DejaVuSans_Oblique9pt8bGlyphs[] PROGMEM = {
{ 0, 1, 1, 6, 0, 0 }, // 0x20 ' '
{ 1, 5, 13, 7, 0, -12 }, // 0x21 '!'
{ 10, 6, 5, 8, 2, -12 }, // 0x22 '"'
{ 14, 13, 14, 15, 1, -13 }, // 0x23 '#'
{ 37, 10, 17, 11, 1, -13 }, // 0x24 '$'
{ 59, 14, 13, 17, 2, -12 }, // 0x25 '%'
{ 82, 12, 13, 14, 0, -12 }, // 0x26 '&'
{ 102, 2, 5, 5, 2, -12 }, // 0x27 '''
{ 104, 7, 16, 7, 1, -13 }, // 0x28 '('
{ 118, 7, 16, 7, -1, -13 }, // 0x29 ')'
{ 132, 7, 8, 9, 1, -12 }, // 0x2A '*'
{ 139, 12, 12, 15, 2, -11 }, // 0x2B '+'
{ 157, 3, 4, 6, 1, -1 }, // 0x2C ','
{ 159, 5, 2, 7, 1, -5 }, // 0x2D '-'
{ 161, 2, 2, 6, 1, -1 }, // 0x2E '.'
{ 162, 9, 15, 6, -1, -12 }, // 0x2F '/'
{ 179, 10, 13, 11, 1, -12 }, // 0x30 '0'
{ 196, 8, 13, 11, 1, -12 }, // 0x31 '1'
{ 209, 10, 13, 11, 0, -12 }, // 0x32 '2'
{ 226, 10, 13, 11, 0, -12 }, // 0x33 '3'
{ 243, 10, 13, 11, 0, -12 }, // 0x34 '4'
{ 260, 10, 13, 11, 0, -12 }, // 0x35 '5'
{ 277, 10, 13, 11, 1, -12 }, // 0x36 '6'
{ 294, 10, 13, 11, 2, -12 }, // 0x37 '7'
{ 311, 10, 13, 11, 1, -12 }, // 0x38 '8'
{ 328, 10, 13, 11, 1, -12 }, // 0x39 '9'
{ 345, 4, 9, 6, 1, -8 }, // 0x3A ':'
{ 350, 4, 11, 6, 1, -8 }, // 0x3B ';'
{ 356, 11, 10, 15, 2, -9 }, // 0x3C '<'
{ 370, 11, 6, 15, 2, -8 }, // 0x3D '='
{ 379, 11, 10, 15, 2, -9 }, // 0x3E '>'
{ 393, 7, 13, 10, 2, -12 }, // 0x3F '?'
{ 405, 16, 16, 18, 1, -12 }, // 0x40 '@'
{ 437, 12, 13, 12, -1, -12 }, // 0x41 'A'
{ 457, 11, 13, 12, 0, -12 }, // 0x42 'B'
{ 475, 12, 13, 13, 0, -12 }, // 0x43 'C'
{ 495, 13, 13, 14, 0, -12 }, // 0x44 'D'
{ 517, 11, 13, 11, 0, -12 }, // 0x45 'E'
{ 535, 10, 13, 10, 0, -12 }, // 0x46 'F'
{ 552, 12, 13, 14, 0, -12 }, // 0x47 'G'
{ 572, 13, 13, 14, 0, -12 }, // 0x48 'H'
{ 594, 5, 13, 5, 0, -12 }, // 0x49 'I'
{ 603, 8, 17, 5, -3, -12 }, // 0x4A 'J'
{ 620, 13, 13, 12, 0, -12 }, // 0x4B 'K'
{ 642, 8, 13, 10, 0, -12 }, // 0x4C 'L'
{ 655, 15, 13, 16, 0, -12 }, // 0x4D 'M'
{ 680, 13, 13, 13, 0, -12 }, // 0x4E 'N'
{ 702, 13, 13, 14, 0, -12 }, // 0x4F 'O'
{ 724, 10, 13, 11, 0, -12 }, // 0x50 'P'
{ 741, 13, 15, 14, 0, -12 }, // 0x51 'Q'
{ 766, 10, 13, 13, 0, -12 }, // 0x52 'R'
{ 783, 11, 13, 11, 0, -12 }, // 0x53 'S'
{ 801, 12, 13, 11, 1, -12 }, // 0x54 'T'
{ 821, 12, 13, 13, 1, -12 }, // 0x55 'U'
{ 841, 12, 13, 12, 1, -12 }, // 0x56 'V'
{ 861, 17, 13, 18, 2, -12 }, // 0x57 'W'
{ 889, 12, 13, 12, 0, -12 }, // 0x58 'X'
{ 909, 11, 13, 11, 1, -12 }, // 0x59 'Y'
{ 927, 13, 13, 12, 0, -12 }, // 0x5A 'Z'
{ 949, 7, 16, 7, 1, -13 }, // 0x5B '['
{ 963, 3, 15, 6, 2, -12 }, // 0x5C '\'
{ 969, 7, 16, 7, -1, -13 }, // 0x5D ']'
{ 983, 11, 5, 15, 2, -12 }, // 0x5E '^'
{ 990, 9, 2, 9, 0, 3 }, // 0x5F '_'
{ 993, 4, 3, 9, 3, -13 }, // 0x60 '`'
{ 995, 9, 10, 10, 1, -9 }, // 0x61 'a'
{ 1007, 10, 14, 11, 1, -13 }, // 0x62 'b'
{ 1025, 9, 10, 10, 1, -9 }, // 0x63 'c'
{ 1037, 11, 14, 11, 1, -13 }, // 0x64 'd'
{ 1057, 10, 10, 11, 1, -9 }, // 0x65 'e'
{ 1070, 7, 14, 6, 1, -13 }, // 0x66 'f'
{ 1083, 10, 14, 11, 1, -9 }, // 0x67 'g'
{ 1101, 10, 14, 11, 1, -13 }, // 0x68 'h'
{ 1119, 5, 14, 5, 1, -13 }, // 0x69 'i'
{ 1128, 8, 18, 5, -2, -13 }, // 0x6A 'j'
{ 1146, 10, 14, 10, 1, -13 }, // 0x6B 'k'
{ 1164, 5, 14, 5, 1, -13 }, // 0x6C 'l'
{ 1173, 15, 10, 17, 1, -9 }, // 0x6D 'm'
{ 1192, 10, 10, 11, 1, -9 }, // 0x6E 'n'
{ 1205, 10, 10, 11, 1, -9 }, // 0x6F 'o'
{ 1218, 11, 14, 11, 0, -9 }, // 0x70 'p'
{ 1238, 10, 14, 11, 1, -9 }, // 0x71 'q'
{ 1256, 8, 10, 8, 0, -9 }, // 0x72 'r'
{ 1266, 9, 10, 9, 0, -9 }, // 0x73 's'
{ 1278, 6, 13, 7, 1, -12 }, // 0x74 't'
{ 1288, 10, 10, 11, 1, -9 }, // 0x75 'u'
{ 1301, 10, 10, 10, 1, -9 }, // 0x76 'v'
{ 1314, 14, 10, 14, 1, -9 }, // 0x77 'w'
{ 1332, 11, 10, 10, 0, -9 }, // 0x78 'x'
{ 1346, 12, 14, 11, 0, -9 }, // 0x79 'y'
{ 1367, 10, 10, 9, 0, -9 }, // 0x7A 'z'
{ 1380, 9, 17, 11, 2, -13 }, // 0x7B '{'
{ 1400, 2, 18, 6, 2, -13 }, // 0x7C '|'
{ 1405, 9, 17, 11, 0, -13 }, // 0x7D '}'
{ 1425, 11, 3, 15, 2, -7 }, // 0x7E '~'
{ 1430, 9, 16, 11, 1, -12 }, // 0x7F
{ 1448, 9, 16, 11, 1, -12 }, // 0x80
{ 1466, 9, 16, 11, 1, -12 }, // 0x81
{ 1484, 9, 16, 11, 1, -12 }, // 0x82
{ 1502, 9, 16, 11, 1, -12 }, // 0x83
{ 1520, 9, 16, 11, 1, -12 }, // 0x84
{ 1538, 9, 16, 11, 1, -12 }, // 0x85
{ 1556, 9, 16, 11, 1, -12 }, // 0x86
{ 1574, 9, 16, 11, 1, -12 }, // 0x87
{ 1592, 9, 16, 11, 1, -12 }, // 0x88
{ 1610, 9, 16, 11, 1, -12 }, // 0x89
{ 1628, 9, 16, 11, 1, -12 }, // 0x8A
{ 1646, 9, 16, 11, 1, -12 }, // 0x8B
{ 1664, 9, 16, 11, 1, -12 }, // 0x8C
{ 1682, 9, 16, 11, 1, -12 }, // 0x8D
{ 1700, 9, 16, 11, 1, -12 }, // 0x8E
{ 1718, 9, 16, 11, 1, -12 }, // 0x8F
{ 1736, 9, 16, 11, 1, -12 }, // 0x90
{ 1754, 9, 16, 11, 1, -12 }, // 0x91
{ 1772, 9, 16, 11, 1, -12 }, // 0x92
{ 1790, 9, 16, 11, 1, -12 }, // 0x93
{ 1808, 9, 16, 11, 1, -12 }, // 0x94
{ 1826, 9, 16, 11, 1, -12 }, // 0x95
{ 1844, 9, 16, 11, 1, -12 }, // 0x96
{ 1862, 9, 16, 11, 1, -12 }, // 0x97
{ 1880, 9, 16, 11, 1, -12 }, // 0x98
{ 1898, 9, 16, 11, 1, -12 }, // 0x99
{ 1916, 9, 16, 11, 1, -12 }, // 0x9A
{ 1934, 9, 16, 11, 1, -12 }, // 0x9B
{ 1952, 9, 16, 11, 1, -12 }, // 0x9C
{ 1970, 9, 16, 11, 1, -12 }, // 0x9D
{ 1988, 9, 16, 11, 1, -12 }, // 0x9E
{ 2006, 9, 16, 11, 1, -12 }, // 0x9F
{ 2024, 1, 1, 6, 0, 0 }, // 0xA0
{ 2025, 5, 13, 7, 2, -9 }, // 0xA1
{ 2034, 9, 16, 11, 1, -12 }, // 0xA2
{ 2052, 11, 13, 11, 0, -12 }, // 0xA3
{ 2070, 9, 9, 11, 1, -9 }, // 0xA4
{ 2081, 11, 13, 11, 1, -12 }, // 0xA5
{ 2099, 2, 16, 6, 2, -12 }, // 0xA6
{ 2103, 10, 15, 9, -1, -12 }, // 0xA7
{ 2122, 5, 2, 9, 3, -13 }, // 0xA8
{ 2124, 13, 13, 18, 2, -12 }, // 0xA9
{ 2146, 7, 9, 8, 1, -12 }, // 0xAA
{ 2154, 9, 8, 11, 1, -8 }, // 0xAB
{ 2163, 11, 5, 15, 2, -7 }, // 0xAC
{ 2170, 5, 2, 7, 1, -5 }, // 0xAD
{ 2172, 13, 13, 18, 2, -12 }, // 0xAE
{ 2194, 6, 2, 9, 3, -12 }, // 0xAF
{ 2196, 6, 6, 9, 2, -12 }, // 0xB0
{ 2201, 12, 11, 15, 2, -10 }, // 0xB1
{ 2218, 6, 7, 7, 0, -12 }, // 0xB2
{ 2224, 6, 7, 7, 0, -12 }, // 0xB3
{ 2230, 5, 3, 9, 5, -13 }, // 0xB4
{ 2232, 11, 14, 11, 0, -9 }, // 0xB5
{ 2252, 9, 15, 11, 1, -12 }, // 0xB6
{ 2269, 2, 2, 6, 2, -6 }, // 0xB7
{ 2270, 4, 3, 9, 1, 1 }, // 0xB8
{ 2272, 4, 7, 7, 1, -12 }, // 0xB9
{ 2276, 7, 9, 8, 1, -12 }, // 0xBA
{ 2284, 9, 8, 11, 1, -8 }, // 0xBB
{ 2293, 15, 13, 17, 1, -12 }, // 0xBC
{ 2318, 15, 13, 17, 1, -12 }, // 0xBD
{ 2343, 16, 13, 17, 0, -12 }, // 0xBE
{ 2369, 7, 14, 10, 0, -9 }, // 0xBF
{ 2382, 12, 16, 12, -1, -15 }, // 0xC0
{ 2406, 12, 16, 12, -1, -15 }, // 0xC1
{ 2430, 12, 16, 12, -1, -15 }, // 0xC2
{ 2454, 12, 16, 12, -1, -15 }, // 0xC3
{ 2478, 12, 16, 12, -1, -15 }, // 0xC4
{ 2502, 12, 17, 12, -1, -16 }, // 0xC5
{ 2528, 19, 13, 18, -1, -12 }, // 0xC6
{ 2559, 12, 16, 13, 0, -12 }, // 0xC7
{ 2583, 11, 16, 11, 0, -15 }, // 0xC8
{ 2605, 11, 16, 11, 0, -15 }, // 0xC9
{ 2627, 11, 16, 11, 0, -15 }, // 0xCA
{ 2649, 11, 16, 11, 0, -15 }, // 0xCB
{ 2671, 5, 16, 5, 0, -15 }, // 0xCC
{ 2681, 7, 16, 5, 0, -15 }, // 0xCD
{ 2695, 7, 16, 5, 0, -15 }, // 0xCE
{ 2709, 7, 16, 5, 0, -15 }, // 0xCF
{ 2723, 13, 13, 14, 0, -12 }, // 0xD0
{ 2745, 13, 16, 13, 0, -15 }, // 0xD1
{ 2771, 13, 16, 14, 0, -15 }, // 0xD2
{ 2797, 13, 16, 14, 0, -15 }, // 0xD3
{ 2823, 13, 16, 14, 0, -15 }, // 0xD4
{ 2849, 13, 16, 14, 0, -15 }, // 0xD5
{ 2875, 13, 16, 14, 0, -15 }, // 0xD6
{ 2901, 10, 10, 15, 2, -10 }, // 0xD7
{ 2914, 15, 13, 14, -1, -12 }, // 0xD8
{ 2939, 12, 16, 13, 1, -15 }, // 0xD9
{ 2963, 12, 16, 13, 1, -15 }, // 0xDA
{ 2987, 12, 16, 13, 1, -15 }, // 0xDB
{ 3011, 12, 16, 13, 1, -15 }, // 0xDC
{ 3035, 11, 16, 11, 1, -15 }, // 0xDD
{ 3057, 10, 13, 11, 0, -12 }, // 0xDE
{ 3074, 10, 14, 11, 0, -13 }, // 0xDF
{ 3092, 9, 14, 10, 1, -13 }, // 0xE0
{ 3108, 10, 14, 10, 1, -13 }, // 0xE1
{ 3126, 9, 14, 10, 1, -13 }, // 0xE2
{ 3142, 9, 14, 10, 1, -13 }, // 0xE3
{ 3158, 9, 14, 10, 1, -13 }, // 0xE4
{ 3174, 9, 16, 10, 1, -15 }, // 0xE5
{ 3192, 16, 10, 18, 1, -9 }, // 0xE6
{ 3212, 9, 13, 10, 1, -9 }, // 0xE7
{ 3227, 10, 14, 11, 1, -13 }, // 0xE8
{ 3245, 10, 14, 11, 1, -13 }, // 0xE9
{ 3263, 10, 14, 11, 1, -13 }, // 0xEA
{ 3281, 10, 14, 11, 1, -13 }, // 0xEB
{ 3299, 4, 14, 5, 1, -13 }, // 0xEC
{ 3306, 7, 14, 5, 1, -13 }, // 0xED
{ 3319, 6, 14, 5, 1, -13 }, // 0xEE
{ 3330, 5, 14, 5, 1, -13 }, // 0xEF
{ 3339, 9, 14, 11, 1, -13 }, // 0xF0
{ 3355, 10, 14, 11, 1, -13 }, // 0xF1
{ 3373, 10, 14, 11, 1, -13 }, // 0xF2
{ 3391, 10, 14, 11, 1, -13 }, // 0xF3
{ 3409, 10, 14, 11, 1, -13 }, // 0xF4
{ 3427, 10, 14, 11, 1, -13 }, // 0xF5
{ 3445, 10, 14, 11, 1, -13 }, // 0xF6
{ 3463, 12, 8, 15, 2, -9 }, // 0xF7
{ 3475, 11, 12, 11, 0, -10 }, // 0xF8
{ 3492, 10, 14, 11, 1, -13 }, // 0xF9
{ 3510, 10, 14, 11, 1, -13 }, // 0xFA
{ 3528, 10, 14, 11, 1, -13 }, // 0xFB
{ 3546, 10, 14, 11, 1, -13 }, // 0xFC
{ 3564, 12, 18, 11, 0, -13 }, // 0xFD
{ 3591, 11, 18, 12, 0, -13 }, // 0xFE
{ 3616, 12, 18, 11, 0, -13 } }; // 0xFF
const GFXfont DejaVuSans_Oblique9pt8b PROGMEM = {
(uint8_t *)DejaVuSans_Oblique9pt8bBitmaps,
(GFXglyph *)DejaVuSans_Oblique9pt8bGlyphs,
0x20, 0xFF, 21 };
// Approx. 5218 bytes
#endif // DEJAVUSANSOBLIQUE9PTLAT1__H
@@ -0,0 +1,308 @@
const uint8_t DejaVuSans9ptLat1Bitmaps[] PROGMEM = {
0x40, 0x40, 0x80, 0x80, 0x80, 0x00, 0x80, 0xC0, 0xC0, 0x28, 0x28, 0xFC,
0x50, 0xF8, 0x50, 0xA0, 0x10, 0x38, 0x60, 0x60, 0x18, 0x28, 0xF0, 0xE4,
0xA8, 0xB0, 0xDC, 0x32, 0x52, 0x8C, 0x38, 0x20, 0x20, 0x54, 0x8C, 0xC8,
0x74, 0x80, 0x80, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40,
0x40, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0xB0, 0x60, 0x60, 0xB0, 0x20,
0x20, 0xFC, 0x20, 0x20, 0x40, 0x80, 0xE0, 0x80, 0x08, 0x10, 0x10, 0x20,
0x40, 0x40, 0x80, 0x38, 0x48, 0x48, 0x88, 0x88, 0x98, 0x70, 0xE0, 0x20,
0x20, 0x40, 0x40, 0x40, 0xE0, 0x38, 0x48, 0x08, 0x18, 0x20, 0x40, 0xF0,
0x38, 0x48, 0x08, 0x30, 0x08, 0x98, 0x70, 0x08, 0x18, 0x28, 0x50, 0x90,
0xF8, 0x10, 0x38, 0x40, 0x40, 0x70, 0x08, 0x08, 0xF0, 0x70, 0xC0, 0x80,
0xF0, 0x90, 0x90, 0xE0, 0xF8, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x38,
0x48, 0x48, 0x30, 0xC8, 0x88, 0x70, 0x38, 0x48, 0x48, 0x78, 0x08, 0x10,
0xE0, 0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x40, 0x80,
0x0C, 0x30, 0xC0, 0x70, 0x0C, 0xFC, 0x00, 0xFC, 0x80, 0x70, 0x0C, 0x30,
0xC0, 0xE0, 0x10, 0x20, 0x40, 0x80, 0x00, 0x80, 0x3C, 0x42, 0x9D, 0xAA,
0xCA, 0xBC, 0x88, 0x78, 0x10, 0x28, 0x28, 0x48, 0x48, 0xF8, 0x88, 0x78,
0x44, 0x48, 0x70, 0x48, 0x88, 0xF0, 0x3C, 0x64, 0x40, 0x80, 0x80, 0x40,
0x78, 0x78, 0x44, 0x44, 0x44, 0x44, 0x8C, 0xF8, 0x7C, 0x40, 0x40, 0x78,
0x40, 0x80, 0xF8, 0x78, 0x40, 0x40, 0x70, 0x40, 0x80, 0x80, 0x3C, 0x64,
0x40, 0x8C, 0x84, 0x44, 0x78, 0x44, 0x44, 0x44, 0x7C, 0x44, 0x84, 0x88,
0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x20, 0x20, 0x20, 0x20, 0x20,
0x40, 0x40, 0x40, 0x80, 0x44, 0x48, 0x70, 0x60, 0x70, 0x90, 0x88, 0x40,
0x40, 0x40, 0x40, 0x40, 0x80, 0xF0, 0x62, 0x66, 0x66, 0x6A, 0x5A, 0x92,
0x84, 0x64, 0x64, 0x64, 0x54, 0x54, 0x98, 0x88, 0x3C, 0x66, 0x42, 0x82,
0x84, 0x44, 0x78, 0x78, 0x48, 0x48, 0x78, 0x40, 0x80, 0x80, 0x3C, 0x66,
0x42, 0x82, 0x84, 0x44, 0x78, 0x08, 0x78, 0x48, 0x48, 0x70, 0x48, 0x88,
0x88, 0x38, 0x48, 0x40, 0x30, 0x08, 0x88, 0x70, 0xFC, 0x10, 0x20, 0x20,
0x20, 0x20, 0x20, 0x88, 0x88, 0x88, 0x88, 0x88, 0x90, 0xE0, 0x88, 0x88,
0x90, 0x90, 0xA0, 0xA0, 0x40, 0x99, 0x99, 0xAA, 0xAA, 0xCC, 0xCC, 0xC8,
0x44, 0x28, 0x30, 0x30, 0x30, 0x48, 0x88, 0x88, 0x90, 0x60, 0x40, 0x40,
0x40, 0x40, 0x7C, 0x08, 0x10, 0x10, 0x20, 0x40, 0xF8, 0x30, 0x40, 0x40,
0x40, 0x40, 0x40, 0x80, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x60, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0xC0, 0x60, 0x90, 0xF8, 0x80,
0x80, 0x78, 0x08, 0x78, 0x88, 0x70, 0x40, 0x40, 0x40, 0x78, 0x48, 0x48,
0x48, 0xB0, 0x38, 0x40, 0x80, 0x80, 0x70, 0x04, 0x04, 0x08, 0x38, 0x48,
0x88, 0x88, 0x78, 0x38, 0x48, 0xF8, 0x80, 0x70, 0x60, 0x40, 0x80, 0xE0,
0x80, 0x80, 0x80, 0x80, 0x38, 0x48, 0x88, 0x88, 0x70, 0x10, 0xE0, 0x40,
0x40, 0x40, 0x78, 0x48, 0x48, 0x88, 0x88, 0x40, 0x00, 0x00, 0x40, 0x40,
0x40, 0x80, 0x80, 0x20, 0x00, 0x00, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40,
0xC0, 0x40, 0x40, 0x40, 0x48, 0x70, 0x60, 0xA0, 0x90, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x80, 0x80, 0x7B, 0x4D, 0x49, 0x89, 0x91, 0x78, 0x48,
0x48, 0x88, 0x88, 0x38, 0x48, 0x88, 0x88, 0x70, 0x78, 0x48, 0x48, 0x48,
0xB0, 0x80, 0x80, 0x38, 0x48, 0x88, 0x88, 0x78, 0x10, 0x10, 0x70, 0x40,
0x40, 0x80, 0x80, 0x70, 0x40, 0x70, 0x10, 0xF0, 0x80, 0xE0, 0x80, 0x80,
0x80, 0xC0, 0x90, 0x90, 0x90, 0xB0, 0xE0, 0x90, 0x90, 0xA0, 0xC0, 0xC0,
0xB4, 0xB4, 0xD8, 0xD8, 0x90, 0x48, 0x30, 0x20, 0x50, 0x90, 0x48, 0x48,
0x50, 0x60, 0x20, 0x40, 0xC0, 0x78, 0x10, 0x20, 0x40, 0xF0, 0x30, 0x20,
0x20, 0xC0, 0x40, 0x40, 0x40, 0x60, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x20, 0x20, 0x20, 0x10, 0x20, 0x20, 0x40, 0xC0, 0xE4,
0x18, 0x40, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x70, 0xA0, 0xC0, 0xC0,
0xE0, 0x40, 0x1C, 0x20, 0x20, 0x70, 0x20, 0x40, 0xF8, 0x88, 0x78, 0x48,
0x48, 0x78, 0x80, 0x44, 0x48, 0x30, 0x78, 0x20, 0xF8, 0x20, 0x80, 0x80,
0x80, 0x00, 0x80, 0x80, 0x80, 0x30, 0x40, 0x60, 0x90, 0x50, 0x20, 0x20,
0xE0, 0xC0, 0x38, 0x44, 0xBA, 0xC2, 0xBA, 0x44, 0x38, 0x70, 0x10, 0x70,
0x70, 0x00, 0xE0, 0x50, 0xA0, 0xA0, 0xA0, 0xFC, 0x04, 0x04, 0xE0, 0x38,
0x44, 0xBA, 0xBA, 0xAA, 0x44, 0x38, 0xC0, 0xC0, 0xA0, 0xC0, 0x20, 0x20,
0xFC, 0x20, 0x20, 0xFC, 0x60, 0x20, 0x40, 0xE0, 0x60, 0x20, 0x60, 0xE0,
0x40, 0x80, 0x48, 0x48, 0x88, 0x88, 0xF8, 0x80, 0x80, 0x70, 0xF0, 0xD0,
0xD0, 0x60, 0x60, 0x60, 0xA0, 0x80, 0x40, 0xC0, 0xC0, 0x40, 0x80, 0xC0,
0x70, 0x50, 0x90, 0x60, 0x00, 0xE0, 0xA0, 0x50, 0x60, 0xC0, 0xC4, 0x48,
0x88, 0xD2, 0x26, 0x47, 0x82, 0xC4, 0x48, 0x88, 0xD6, 0x22, 0x44, 0x86,
0x62, 0x00, 0x24, 0x00, 0x64, 0x00, 0xE9, 0x00, 0x13, 0x00, 0x23, 0x80,
0x41, 0x00, 0x10, 0x00, 0x20, 0x20, 0x40, 0x80, 0x70, 0x10, 0x00, 0x10,
0x28, 0x28, 0x48, 0x48, 0xF8, 0x88, 0x08, 0x00, 0x10, 0x28, 0x28, 0x48,
0x48, 0xF8, 0x88, 0x18, 0x00, 0x10, 0x28, 0x28, 0x48, 0x48, 0xF8, 0x88,
0x18, 0x00, 0x10, 0x28, 0x28, 0x48, 0x48, 0xF8, 0x88, 0x18, 0x00, 0x10,
0x28, 0x28, 0x48, 0x48, 0xF8, 0x88, 0x18, 0x10, 0x28, 0x28, 0x48, 0x48,
0xF8, 0x88, 0x1F, 0x80, 0x18, 0x00, 0x28, 0x00, 0x2F, 0x00, 0x48, 0x00,
0xF8, 0x00, 0x8F, 0x00, 0x3C, 0x64, 0x40, 0x80, 0x80, 0x40, 0x78, 0x10,
0x20, 0x10, 0x00, 0x7C, 0x40, 0x40, 0x78, 0x40, 0x80, 0xF8, 0x10, 0x00,
0x7C, 0x40, 0x40, 0x78, 0x40, 0x80, 0xF8, 0x18, 0x00, 0x7C, 0x40, 0x40,
0x78, 0x40, 0x80, 0xF8, 0x28, 0x00, 0x7C, 0x40, 0x40, 0x78, 0x40, 0x80,
0xF8, 0x40, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x20, 0x00,
0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x60, 0x00, 0x40, 0x40, 0x40,
0x40, 0x40, 0x80, 0x80, 0x60, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80,
0x80, 0x7C, 0x44, 0x42, 0xE4, 0x44, 0x8C, 0xF8, 0x18, 0x00, 0x64, 0x64,
0x64, 0x54, 0x54, 0x98, 0x88, 0x08, 0x00, 0x3C, 0x66, 0x42, 0x82, 0x84,
0x44, 0x78, 0x08, 0x00, 0x3C, 0x66, 0x42, 0x82, 0x84, 0x44, 0x78, 0x18,
0x00, 0x3C, 0x66, 0x42, 0x82, 0x84, 0x44, 0x78, 0x1C, 0x00, 0x3C, 0x66,
0x42, 0x82, 0x84, 0x44, 0x78, 0x14, 0x00, 0x3C, 0x66, 0x42, 0x82, 0x84,
0x44, 0x78, 0x88, 0x50, 0x20, 0x50, 0x88, 0x3E, 0x64, 0x4A, 0x92, 0xA4,
0x44, 0xB8, 0x20, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x90, 0xE0, 0x10,
0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x90, 0xE0, 0x30, 0x00, 0x88, 0x88,
0x88, 0x88, 0x88, 0x90, 0xE0, 0x30, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88,
0x90, 0xE0, 0x20, 0x00, 0x88, 0x90, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40,
0x78, 0x48, 0x48, 0x70, 0x80, 0x80, 0x38, 0x28, 0x48, 0x50, 0x50, 0x48,
0x88, 0xB0, 0x20, 0x10, 0x78, 0x08, 0x78, 0x88, 0x70, 0x08, 0x10, 0x78,
0x08, 0x78, 0x88, 0x70, 0x10, 0x28, 0x78, 0x08, 0x78, 0x88, 0x70, 0x38,
0x38, 0x78, 0x08, 0x78, 0x88, 0x70, 0x28, 0x00, 0x78, 0x08, 0x78, 0x88,
0x70, 0x10, 0x28, 0x10, 0x78, 0x08, 0x78, 0x88, 0x70, 0x77, 0x00, 0x08,
0x80, 0x7F, 0x80, 0x88, 0x00, 0x7F, 0x00, 0x38, 0x40, 0x80, 0x80, 0x70,
0x20, 0x60, 0x20, 0x10, 0x38, 0x48, 0xF8, 0x80, 0x70, 0x08, 0x10, 0x38,
0x48, 0xF8, 0x80, 0x70, 0x10, 0x28, 0x38, 0x48, 0xF8, 0x80, 0x70, 0x28,
0x00, 0x38, 0x48, 0xF8, 0x80, 0x70, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80,
0x80, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x60, 0xA0, 0x40, 0x40,
0x40, 0x80, 0x80, 0x60, 0x00, 0x40, 0x40, 0x40, 0x80, 0x80, 0x20, 0x18,
0x30, 0x38, 0x48, 0x88, 0x88, 0x70, 0x18, 0x28, 0x78, 0x48, 0x48, 0x88,
0x88, 0x20, 0x10, 0x38, 0x48, 0x88, 0x88, 0x70, 0x08, 0x10, 0x38, 0x48,
0x88, 0x88, 0x70, 0x10, 0x28, 0x38, 0x48, 0x88, 0x88, 0x70, 0x38, 0x38,
0x38, 0x48, 0x88, 0x88, 0x70, 0x28, 0x00, 0x38, 0x48, 0x88, 0x88, 0x70,
0x20, 0x00, 0xFC, 0x00, 0x20, 0x38, 0x48, 0xB8, 0x48, 0xF0, 0x40, 0x20,
0x90, 0x90, 0x90, 0xB0, 0xE0, 0x10, 0x20, 0x90, 0x90, 0x90, 0xB0, 0xE0,
0x20, 0x50, 0x90, 0x90, 0x90, 0xB0, 0xE0, 0x50, 0x00, 0x90, 0x90, 0x90,
0xB0, 0xE0, 0x08, 0x10, 0x48, 0x48, 0x50, 0x60, 0x20, 0x40, 0xC0, 0x40,
0x40, 0x40, 0x78, 0x48, 0x48, 0x48, 0xB0, 0x80, 0x80, 0x28, 0x00, 0x48,
0x48, 0x50, 0x60, 0x20, 0x40, 0xC0
};
const GFXglyph DejaVuSans9ptLat1Glyphs[] PROGMEM = {
{ 0, 0, 0, 3, 0, 0 },
{ 0, 2, 7, 4, 1, 0 },
{ 7, 2, 2, 4, 1, 5 },
{ 9, 6, 7, 8, 1, 0 },
{ 16, 5, 7, 6, 0, -1 },
{ 23, 7, 7, 9, 1, 0 },
{ 30, 6, 7, 7, 0, 0 },
{ 37, 1, 2, 2, 1, 5 },
{ 39, 2, 8, 4, 1, 0 },
{ 47, 3, 8, 4, 0, 0 },
{ 55, 4, 4, 5, 0, 3 },
{ 59, 6, 5, 8, 1, 0 },
{ 64, 2, 2, 3, 0, -1 },
{ 66, 3, 1, 3, 0, 2 },
{ 67, 1, 1, 3, 1, 0 },
{ 68, 5, 7, 3, -1, 0 },
{ 75, 5, 7, 6, 0, 0 },
{ 82, 3, 7, 6, 1, 0 },
{ 89, 5, 7, 6, 0, 0 },
{ 96, 5, 7, 6, 0, 0 },
{ 103, 5, 7, 6, 0, 0 },
{ 110, 5, 7, 6, 0, 0 },
{ 117, 4, 7, 6, 1, 0 },
{ 124, 5, 7, 6, 1, 0 },
{ 131, 5, 7, 6, 0, 0 },
{ 138, 5, 7, 6, 0, 0 },
{ 145, 1, 5, 3, 1, 0 },
{ 150, 2, 6, 3, 0, -1 },
{ 156, 6, 5, 8, 1, 0 },
{ 161, 6, 3, 8, 1, 1 },
{ 164, 6, 5, 8, 1, 0 },
{ 169, 4, 7, 5, 1, 0 },
{ 176, 8, 8, 9, 1, -2 },
{ 184, 5, 7, 6, 0, 0 },
{ 191, 6, 7, 6, 0, 0 },
{ 198, 6, 7, 6, 0, 0 },
{ 205, 6, 7, 7, 0, 0 },
{ 212, 6, 7, 6, 0, 0 },
{ 219, 5, 7, 5, 0, 0 },
{ 226, 6, 7, 7, 0, 0 },
{ 233, 6, 7, 7, 0, 0 },
{ 240, 2, 7, 3, 0, 0 },
{ 247, 3, 9, 3, -1, -2 },
{ 256, 6, 7, 6, 0, 0 },
{ 263, 4, 7, 5, 0, 0 },
{ 270, 7, 7, 8, 0, 0 },
{ 277, 6, 7, 7, 0, 0 },
{ 284, 7, 7, 7, 0, 0 },
{ 291, 5, 7, 5, 0, 0 },
{ 298, 7, 8, 7, 0, -1 },
{ 306, 5, 7, 6, 0, 0 },
{ 313, 5, 7, 6, 0, 0 },
{ 320, 6, 7, 6, 0, 0 },
{ 327, 5, 7, 7, 1, 0 },
{ 334, 5, 7, 6, 1, 0 },
{ 341, 8, 7, 9, 1, 0 },
{ 348, 6, 7, 6, 0, 0 },
{ 355, 5, 7, 6, 1, 0 },
{ 362, 6, 7, 6, 0, 0 },
{ 369, 4, 8, 4, 0, 0 },
{ 377, 1, 7, 3, 1, 0 },
{ 384, 3, 8, 4, 0, 0 },
{ 392, 4, 2, 8, 2, 5 },
{ 394, 5, 1, 5, 0, -2 },
{ 395, 1, 2, 5, 2, 5 },
{ 397, 5, 5, 6, 0, 0 },
{ 402, 5, 8, 6, 0, 0 },
{ 410, 5, 5, 5, 0, 0 },
{ 415, 6, 8, 6, 0, 0 },
{ 423, 5, 5, 6, 0, 0 },
{ 428, 3, 8, 3, 1, 0 },
{ 436, 5, 7, 6, 0, -2 },
{ 443, 5, 8, 6, 0, 0 },
{ 451, 2, 8, 3, 0, 0 },
{ 459, 3, 10, 3, -1, -2 },
{ 469, 5, 8, 5, 0, 0 },
{ 477, 2, 8, 3, 0, 0 },
{ 485, 8, 5, 9, 0, 0 },
{ 490, 5, 5, 6, 0, 0 },
{ 495, 5, 5, 6, 0, 0 },
{ 500, 5, 7, 6, 0, -2 },
{ 507, 5, 7, 6, 0, -2 },
{ 514, 4, 5, 4, 0, 0 },
{ 519, 4, 5, 5, 0, 0 },
{ 524, 3, 6, 4, 1, 0 },
{ 530, 4, 5, 6, 1, 0 },
{ 535, 4, 5, 5, 1, 0 },
{ 540, 6, 5, 7, 1, 0 },
{ 545, 5, 5, 5, 0, 0 },
{ 550, 5, 7, 5, 0, -2 },
{ 557, 5, 5, 5, 0, 0 },
{ 562, 4, 8, 6, 1, 0 },
{ 570, 1, 9, 3, 1, -2 },
{ 579, 4, 8, 6, 0, 0 },
{ 587, 6, 2, 8, 1, 2 },
{ 589, 0, 0, 3, 0, 0 },
{ 589, 2, 7, 4, 1, -2 },
{ 596, 4, 6, 6, 1, 0 },
{ 602, 6, 7, 6, 0, 0 },
{ 609, 5, 6, 6, 0, 0 },
{ 615, 6, 7, 6, 0, 0 },
{ 622, 1, 7, 3, 1, -1 },
{ 629, 4, 8, 5, 0, -1 },
{ 637, 2, 1, 5, 2, 6 },
{ 638, 7, 7, 9, 1, 0 },
{ 645, 4, 6, 4, 0, 1 },
{ 651, 4, 4, 6, 1, 1 },
{ 655, 6, 3, 8, 1, 1 },
{ 658, 3, 1, 3, 0, 2 },
{ 659, 7, 7, 9, 1, 0 },
{ 666, 2, 1, 5, 2, 7 },
{ 667, 3, 3, 5, 1, 4 },
{ 670, 6, 6, 8, 1, 0 },
{ 676, 3, 4, 4, 0, 3 },
{ 680, 3, 4, 4, 0, 3 },
{ 684, 2, 2, 5, 2, 5 },
{ 686, 5, 7, 6, 0, -2 },
{ 693, 4, 8, 6, 1, -1 },
{ 701, 1, 1, 3, 1, 3 },
{ 702, 2, 2, 5, 0, -2 },
{ 704, 2, 4, 4, 1, 3 },
{ 708, 4, 6, 4, 0, 1 },
{ 714, 4, 4, 6, 1, 1 },
{ 718, 8, 7, 9, 1, 0 },
{ 725, 7, 7, 9, 1, 0 },
{ 732, 9, 7, 9, 0, 0 },
{ 746, 4, 7, 5, 0, -2 },
{ 753, 5, 9, 6, 0, 0 },
{ 762, 5, 9, 6, 0, 0 },
{ 771, 5, 9, 6, 0, 0 },
{ 780, 5, 9, 6, 0, 0 },
{ 789, 5, 9, 6, 0, 0 },
{ 798, 5, 8, 6, 0, 0 },
{ 806, 9, 7, 9, 0, 0 },
{ 820, 6, 9, 6, 0, -2 },
{ 829, 6, 9, 6, 0, 0 },
{ 838, 6, 9, 6, 0, 0 },
{ 847, 6, 9, 6, 0, 0 },
{ 856, 6, 9, 6, 0, 0 },
{ 865, 2, 9, 3, 0, 0 },
{ 874, 3, 9, 3, 0, 0 },
{ 883, 3, 9, 3, 0, 0 },
{ 892, 3, 9, 3, 0, 0 },
{ 901, 7, 7, 7, 0, 0 },
{ 908, 6, 9, 7, 0, 0 },
{ 917, 7, 9, 7, 0, 0 },
{ 926, 7, 9, 7, 0, 0 },
{ 935, 7, 9, 7, 0, 0 },
{ 944, 7, 9, 7, 0, 0 },
{ 953, 7, 9, 7, 0, 0 },
{ 962, 5, 5, 8, 1, 0 },
{ 967, 7, 7, 7, 0, 0 },
{ 974, 5, 9, 7, 1, 0 },
{ 983, 5, 9, 7, 1, 0 },
{ 992, 5, 9, 7, 1, 0 },
{ 1001, 5, 9, 7, 1, 0 },
{ 1010, 5, 9, 6, 1, 0 },
{ 1019, 5, 7, 5, 0, 0 },
{ 1026, 5, 8, 6, 0, 0 },
{ 1034, 5, 7, 6, 0, 0 },
{ 1041, 5, 7, 6, 0, 0 },
{ 1048, 5, 7, 6, 0, 0 },
{ 1055, 5, 7, 6, 0, 0 },
{ 1062, 5, 7, 6, 0, 0 },
{ 1069, 5, 8, 6, 0, 0 },
{ 1077, 9, 5, 9, 0, 0 },
{ 1087, 5, 7, 5, 0, -2 },
{ 1094, 5, 7, 6, 0, 0 },
{ 1101, 5, 7, 6, 0, 0 },
{ 1108, 5, 7, 6, 0, 0 },
{ 1115, 5, 7, 6, 0, 0 },
{ 1122, 2, 7, 3, 0, 0 },
{ 1129, 3, 7, 3, 0, 0 },
{ 1136, 3, 7, 3, 0, 0 },
{ 1143, 3, 7, 3, 0, 0 },
{ 1150, 5, 8, 6, 0, 0 },
{ 1158, 5, 7, 6, 0, 0 },
{ 1165, 5, 7, 6, 0, 0 },
{ 1172, 5, 7, 6, 0, 0 },
{ 1179, 5, 7, 6, 0, 0 },
{ 1186, 5, 7, 6, 0, 0 },
{ 1193, 5, 7, 6, 0, 0 },
{ 1200, 6, 5, 8, 1, 0 },
{ 1205, 5, 5, 6, 0, 0 },
{ 1210, 4, 7, 6, 1, 0 },
{ 1217, 4, 7, 6, 1, 0 },
{ 1224, 4, 7, 6, 1, 0 },
{ 1231, 4, 7, 6, 1, 0 },
{ 1238, 5, 9, 5, 0, -2 },
{ 1247, 5, 10, 6, 0, -2 },
{ 1257, 5, 9, 5, 0, -2 }
};
const GFXfont DejaVuSans9ptLat1 PROGMEM = {
(uint8_t *)DejaVuSans9ptLat1Bitmaps,
(GFXglyph *)DejaVuSans9ptLat1Glyphs,
32, 255, 9 };
+263 -189
View File
@@ -33,11 +33,10 @@
#include <Arduino.h>
#include <PxMatrix.h>
#include <RTClib.h>
#include <Fonts/FreeSansBold9pt7b.h>
#include <Fonts/FreeSans9pt7b.h>
#include <Fonts/FreeMono9pt7b.h>
// Option police étendue : ajouter ici votre police Latin-1 générée et définir HAVE_LATIN1_FONT
#include "DejaVuSans9ptLat1.h" // Placeholder Latin-1 font (remplacer par version générée)
// Polices DejaVu avec support Latin-1 complet (accents et caractères spéciaux)
#include "DejaVuSans9ptLat1.h" // Normal
#include "DejaVuSansBold9ptLat1.h" // Gras
#include "DejaVuSansOblique9ptLat1.h" // Italique
#include <WiFi.h>
#include <WebServer.h>
#include <Preferences.h>
@@ -195,6 +194,42 @@ size_t utf8SafeCopyTruncate(const String &src, char *dest, size_t destSize, size
return o; // octets copiés
}
// === Classe helper pour gestion automatique des mutex ===
class MutexGuard {
private:
SemaphoreHandle_t mutex;
bool acquired;
public:
MutexGuard(SemaphoreHandle_t mtx, TickType_t timeout = pdMS_TO_TICKS(500)) : mutex(mtx), acquired(false) {
if (mutex != NULL) {
acquired = xSemaphoreTake(mutex, timeout) == pdTRUE;
}
}
~MutexGuard() {
if (acquired && mutex != NULL) {
xSemaphoreGive(mutex);
}
}
bool isLocked() const { return acquired; }
// Interdire la copie pour éviter double libération
MutexGuard(const MutexGuard&) = delete;
MutexGuard& operator=(const MutexGuard&) = delete;
};
// Macros pour simplifier l'utilisation
#define MUTEX_GUARD(mutex, timeout) MutexGuard guard_##mutex(mutex, timeout)
#define MUTEX_GUARD_CHECK(mutex, timeout) MutexGuard guard_##mutex(mutex, timeout); if (!guard_##mutex.isLocked())
// === Constantes optimisées pour les timeouts ===
#define MUTEX_TIMEOUT_FAST pdMS_TO_TICKS(50) // Opérations rapides
#define MUTEX_TIMEOUT_NORMAL pdMS_TO_TICKS(200) // Opérations normales
#define MUTEX_TIMEOUT_SLOW pdMS_TO_TICKS(1000) // Opérations lentes (I/O)
#define MUTEX_TIMEOUT_CRITICAL pdMS_TO_TICKS(2000) // Opérations critiques
// Prototypes des tâches
void DisplayTask(void * parameter);
void CountdownTask(void * parameter);
@@ -375,11 +410,11 @@ int countdownHour = 23;
int countdownMinute = 59;
int countdownSecond = 0;
char countdownTitle[51] = "COUNTDOWN";
int countdownTextSize = 2; // 1-3
// Polices DejaVu avec taille automatique et style configurable
int fontStyle = 0; // 0=Normal, 1=Gras, 2=Italique
int countdownColorR = 0;
int countdownColorG = 255;
int countdownColorB = 0;
int fontIndex = 0; // 0=Default, 1=Sans, 2=Sans Bold, 3=Mono, 4=Latin-1
uint16_t countdownColor;
int displayBrightness = -1; // -1 = auto (calculé selon nombre de panneaux)
@@ -467,22 +502,27 @@ footer { margin:40px 0 10px; text-align:center; font-size:.6rem; letter-spacing:
<div class="field"><label for="time">Heure (hh:mm:ss)</label><input type="time" id="time" name="time" step="1" required /></div>
</div>
<div class="row-2">
<div class="field"><label for="fontIndex">Police</label>
<select id="fontIndex" name="fontIndex">
<option value="0">Standard</option>
<option value="1">Sans Serif</option>
<option value="2">Sans Serif Bold</option>
<option value="3">Monospace</option>
<option value="4">Latin-1 (Accents)</option>
</select>
</div>
<div class="field"><label for="textSize">Taille</label>
<select id="textSize" name="textSize">
<option value="1">Petite</option>
<option value="2" selected>Moyenne</option>
<option value="3">Grande</option>
<div class="field" style="grid-column:1/-1;">
<label>Police : DejaVu Sans (Support complet accents et caractères spéciaux)</label>
<div style="padding:8px; background:var(--panel-alt); border-radius:4px; font-size:0.9em; color:var(--muted);">
Accents français : àâäéèêëïîôöùûüÿç<br>
Caractères spéciaux : ñߣ¥§°±×÷<br>
Taille optimisée automatiquement selon la résolution
</div>
</div>
</div>
<div class="row-2">
<div class="field">
<label for="fontStyle">Style de Police</label>
<select id="fontStyle" name="fontStyle">
<option value="0" selected>Normal</option>
<option value="1">Gras</option>
<option value="2">Italique</option>
</select>
</div>
<div class="field"></div>
</div>
<div class="row-2">
<div class="field" style="grid-column:1/-1;">
<label>Couleur</label>
<div class="inline" style="align-items:center;">
@@ -655,7 +695,7 @@ requestAnimationFrame(updatePreviewLoop);
function syncFieldsToPreview(){ titlePreview.textContent = (el('title').value||'').toUpperCase(); refreshTarget(); }
['title','date','time','fontIndex','textSize','blinkEnabled','blinkInterval','blinkWindow','marqueeEnabled','marqueeInterval','marqueeGap','marqueeMode','marqueeReturnInterval','marqueeBouncePauseLeft','marqueeBouncePauseRight','marqueeOneShotDelay','marqueeOneShotStopCenter','marqueeOneShotRestart','marqueeAccelEnabled','marqueeAccelStart','marqueeAccelEnd','marqueeAccelDuration','brightness','brightnessMode'].forEach(id=> el(id).addEventListener('input',()=>{ if(id==='brightnessMode'){ if(el('brightnessMode').value==='auto'){ el('brightnessHidden').value='-1'; } else { el('brightnessHidden').value=el('brightness').value; } } if(id==='brightness'){ if(el('brightnessMode').value==='manual'){ el('brightnessHidden').value=el('brightness').value; } } syncFieldsToPreview(); setSaving(true,'MODIFIÉ'); }));
['title','date','time','fontStyle','blinkEnabled','blinkInterval','blinkWindow','marqueeEnabled','marqueeInterval','marqueeGap','marqueeMode','marqueeReturnInterval','marqueeBouncePauseLeft','marqueeBouncePauseRight','marqueeOneShotDelay','marqueeOneShotStopCenter','marqueeOneShotRestart','marqueeAccelEnabled','marqueeAccelStart','marqueeAccelEnd','marqueeAccelDuration','brightness','brightnessMode'].forEach(id=> el(id).addEventListener('input',()=>{ if(id==='brightnessMode'){ if(el('brightnessMode').value==='auto'){ el('brightnessHidden').value='-1'; } else { el('brightnessHidden').value=el('brightness').value; } } if(id==='brightness'){ if(el('brightnessMode').value==='manual'){ el('brightnessHidden').value=el('brightness').value; } } syncFieldsToPreview(); setSaving(true,'MODIFIÉ'); }));
el('colorPicker').addEventListener('input',e=>{ updateColor(e.target.value); setSaving(true,'MODIFIÉ'); });
// Ajustements rapides
@@ -689,7 +729,7 @@ window.addEventListener('load',()=>{
// Injecter version firmware (fourni côté C++ via endpoint futur ou placeholder compilé)
document.getElementById('fwVer').textContent = 'v__FWVER__';
const now=new Date(); const tomorrow=new Date(now.getTime()+86400000); el('date').value=tomorrow.toISOString().split('T')[0]; el('time').value='23:59:59';
fetch('/getSettings').then(r=>r.json()).then(d=>{ el('title').value=d.title; const ds=`${d.year}-${String(d.month).padStart(2,'0')}-${String(d.day).padStart(2,'0')}`; el('date').value=ds; const ts=`${String(d.hour).padStart(2,'0')}:${String(d.minute).padStart(2,'0')}:${String(d.second).padStart(2,'0')}`; el('time').value=ts; el('fontIndex').value=d.fontIndex; el('textSize').value=d.textSize; if(d.blinkEnabled!==undefined){ el('blinkEnabled').value = d.blinkEnabled ? '1' : '0'; } if(d.blinkIntervalMs!==undefined){ el('blinkInterval').value = d.blinkIntervalMs; } if(d.blinkWindow!==undefined){ el('blinkWindow').value = d.blinkWindow; } if(d.marqueeEnabled!==undefined){ el('marqueeEnabled').value = d.marqueeEnabled ? '1':'0'; } if(d.marqueeIntervalMs!==undefined){ el('marqueeInterval').value = d.marqueeIntervalMs; } if(d.marqueeGap!==undefined){ el('marqueeGap').value = d.marqueeGap; } if(d.marqueeMode!==undefined){ el('marqueeMode').value = d.marqueeMode; } if(d.marqueeReturnIntervalMs!==undefined){ el('marqueeReturnInterval').value = d.marqueeReturnIntervalMs; } if(d.marqueeBouncePauseLeftMs!==undefined){ el('marqueeBouncePauseLeft').value = d.marqueeBouncePauseLeftMs; } if(d.marqueeBouncePauseRightMs!==undefined){ el('marqueeBouncePauseRight').value = d.marqueeBouncePauseRightMs; } if(d.marqueeOneShotDelayMs!==undefined){ el('marqueeOneShotDelay').value = d.marqueeOneShotDelayMs; } if(d.marqueeOneShotStopCenter!==undefined){ el('marqueeOneShotStopCenter').value = d.marqueeOneShotStopCenter? '1':'0'; } if(d.marqueeOneShotRestartSec!==undefined){ el('marqueeOneShotRestart').value = d.marqueeOneShotRestartSec; } if(d.marqueeAccelEnabled!==undefined){ el('marqueeAccelEnabled').value = d.marqueeAccelEnabled? '1':'0'; } if(d.marqueeAccelStartIntervalMs!==undefined){ el('marqueeAccelStart').value = d.marqueeAccelStartIntervalMs; } if(d.marqueeAccelEndIntervalMs!==undefined){ el('marqueeAccelEnd').value = d.marqueeAccelEndIntervalMs; } if(d.marqueeAccelDurationMs!==undefined){ el('marqueeAccelDuration').value = d.marqueeAccelDurationMs; } if(d.brightness!==undefined){ if(parseInt(d.brightness,10)===-1){ el('brightnessMode').value='auto'; el('brightnessHidden').value='-1'; } else { el('brightnessMode').value='manual'; el('brightness').value=d.brightness; el('brightnessHidden').value=d.brightness; } } const color=rgbToHex(d.colorR,d.colorG,d.colorB); el('colorPicker').value=color; updateColor(color); syncFieldsToPreview(); setSaving(false,'PRÊT'); showToast('Paramètres chargés'); }).catch(()=>{ showToast('Échec chargement paramètres',false); setSaving(false,'HORS LIGNE'); syncFieldsToPreview(); });
fetch('/getSettings').then(r=>r.json()).then(d=>{ el('title').value=d.title; const ds=`${d.year}-${String(d.month).padStart(2,'0')}-${String(d.day).padStart(2,'0')}`; el('date').value=ds; const ts=`${String(d.hour).padStart(2,'0')}:${String(d.minute).padStart(2,'0')}:${String(d.second).padStart(2,'0')}`; el('time').value=ts; if(d.blinkEnabled!==undefined){ el('blinkEnabled').value = d.blinkEnabled ? '1' : '0'; } if(d.blinkIntervalMs!==undefined){ el('blinkInterval').value = d.blinkIntervalMs; } if(d.blinkWindow!==undefined){ el('blinkWindow').value = d.blinkWindow; } if(d.marqueeEnabled!==undefined){ el('marqueeEnabled').value = d.marqueeEnabled ? '1':'0'; } if(d.marqueeIntervalMs!==undefined){ el('marqueeInterval').value = d.marqueeIntervalMs; } if(d.marqueeGap!==undefined){ el('marqueeGap').value = d.marqueeGap; } if(d.marqueeMode!==undefined){ el('marqueeMode').value = d.marqueeMode; } if(d.marqueeReturnIntervalMs!==undefined){ el('marqueeReturnInterval').value = d.marqueeReturnIntervalMs; } if(d.marqueeBouncePauseLeftMs!==undefined){ el('marqueeBouncePauseLeft').value = d.marqueeBouncePauseLeftMs; } if(d.marqueeBouncePauseRightMs!==undefined){ el('marqueeBouncePauseRight').value = d.marqueeBouncePauseRightMs; } if(d.marqueeOneShotDelayMs!==undefined){ el('marqueeOneShotDelay').value = d.marqueeOneShotDelayMs; } if(d.marqueeOneShotStopCenter!==undefined){ el('marqueeOneShotStopCenter').value = d.marqueeOneShotStopCenter? '1':'0'; } if(d.marqueeOneShotRestartSec!==undefined){ el('marqueeOneShotRestart').value = d.marqueeOneShotRestartSec; } if(d.marqueeAccelEnabled!==undefined){ el('marqueeAccelEnabled').value = d.marqueeAccelEnabled? '1':'0'; } if(d.marqueeAccelStartIntervalMs!==undefined){ el('marqueeAccelStart').value = d.marqueeAccelStartIntervalMs; } if(d.marqueeAccelEndIntervalMs!==undefined){ el('marqueeAccelEnd').value = d.marqueeAccelEndIntervalMs; } if(d.marqueeAccelDurationMs!==undefined){ el('marqueeAccelDuration').value = d.marqueeAccelDurationMs; } if(d.brightness!==undefined){ if(parseInt(d.brightness,10)===-1){ el('brightnessMode').value='auto'; el('brightnessHidden').value='-1'; } else { el('brightnessMode').value='manual'; el('brightness').value=d.brightness; el('brightnessHidden').value=d.brightness; } } if(d.fontStyle!==undefined){ el('fontStyle').value = d.fontStyle; } const color=rgbToHex(d.colorR,d.colorG,d.colorB); el('colorPicker').value=color; updateColor(color); syncFieldsToPreview(); setSaving(false,'PRÊT'); showToast('Paramètres chargés'); }).catch(()=>{ showToast('Échec chargement paramètres',false); setSaving(false,'HORS LIGNE'); syncFieldsToPreview(); });
});
</script>
</body></html>
@@ -698,6 +738,32 @@ window.addEventListener('load',()=>{
// Note: La fonction display_update_enable() a été intégrée dans setup()
// pour une meilleure gestion avec FreeRTOS
// Prototypes des fonctions de calcul de countdown
void updateCountdown(int &days, int &hours, int &minutes, int &seconds);
void updateDisplayFormat(int days, int hours, int minutes, int seconds);
// === Fonctions helper pour opérations critiques avec mutex ===
inline bool safeTakeCountdownData(int &days, int &hours, int &minutes, int &seconds, bool &expired) {
MUTEX_GUARD(countdownMutex, MUTEX_TIMEOUT_FAST);
if (guard_countdownMutex.isLocked()) {
updateCountdown(days, hours, minutes, seconds);
updateDisplayFormat(days, hours, minutes, seconds);
expired = countdownExpired;
return true;
}
return false;
}
inline bool safeUpdateCountdownTarget(const DateTime &newTarget) {
MUTEX_GUARD(countdownMutex, MUTEX_TIMEOUT_NORMAL);
if (guard_countdownMutex.isLocked()) {
countdownTarget = newTarget;
countdownExpired = false; // Reset si nouvelle date
return true;
}
return false;
}
// Calcul du temps restant
void updateCountdown(int &days, int &hours, int &minutes, int &seconds) {
DateTime now = rtc.now();
@@ -759,33 +825,43 @@ void drawColon(int16_t x, int16_t y, uint16_t colonColor) {
display.fillRect(x, y+4, 2, 2, colonColor);
}
// Obtenir la police en fonction de l'index
const GFXfont* getFontByIndex(int index) {
switch (index) {
case 1:
return &FreeSans9pt7b;
case 2:
return &FreeSansBold9pt7b;
case 3:
return &FreeMono9pt7b;
case 4:
#ifdef HAVE_LATIN1_FONT
return &DejaVuSans9ptLat1; // Police générée incluant accents (32-255)
#else
return &FreeSans9pt7b; // fallback si non fournie
#endif
default:
return NULL; // Police par défaut
// Sélection de police selon le style choisi (Normal, Gras, Italique)
const GFXfont* getOptimalFont() {
switch (fontStyle) {
case 1: return &DejaVuSans_Bold9pt8b; // Gras
case 2: return &DejaVuSans_Oblique9pt8b; // Italique
default: return &DejaVuSans9ptLat1; // Normal (défaut)
}
}
// Calcul automatique de la taille optimale selon le texte et la police
int calculateAutoTextSize(const char* text, const GFXfont* font) {
// Taille de base selon la largeur totale disponible - ajustée pour minuteur
int baseSize;
if (TOTAL_WIDTH >= 128) {
baseSize = 2; // Taille réduite pour 4+ panneaux (128+ pixels)
} else if (TOTAL_WIDTH >= 96) {
baseSize = 1; // Taille réduite pour 3 panneaux (96 pixels) - mieux pour minuteur
} else if (TOTAL_WIDTH >= 64) {
baseSize = 1; // Taille appropriée pour 2 panneaux (64 pixels)
} else {
baseSize = 1; // Taille standard pour 1 panneau (32 pixels)
}
// Adapter selon la longueur du texte (textes longs = taille plus petite)
int textLen = strlen(text);
if (textLen > 8 && baseSize > 1) {
return baseSize - 1; // Réduire la taille pour les textes longs (seuil abaissé)
}
return baseSize;
}
// Affichage du compte à rebours en plein écran
void displayFullscreenCountdown(int days, int hours, int minutes, int seconds) {
// --- Cache layout ---
static char lastText[64] = ""; // élargi pour titres jusqu'à 50 chars
static bool lastExpired = false;
static int lastFontIndex = -1;
static int lastTextSizeTier = -1;
static int16_t cachedX = 0, cachedY = 0;
static uint8_t cachedSetSize = 1;
static bool cachedIsEndMsg = false;
@@ -818,17 +894,8 @@ void displayFullscreenCountdown(int days, int hours, int minutes, int seconds) {
// Préparer le texte cible
char currentText[64];
if (countdownExpired) {
// Si police Latin-1 sélectionnée (index 4), garder accents tels quels
if (fontIndex == 4) {
// Convertir UTF-8 reçu du navigateur en octets Latin-1 que la police couvre
utf8ToLatin1(countdownTitle, currentText, sizeof(currentText));
} else {
// fallback pliage si police sans accents
char folded[64];
foldAccents(countdownTitle, folded, sizeof(folded));
strncpy(currentText, folded, sizeof(currentText)-1);
currentText[sizeof(currentText)-1] = '\0';
}
// Police DejaVu avec support complet UTF-8 -> Latin-1
utf8ToLatin1(countdownTitle, currentText, sizeof(currentText));
} else {
switch (displayFormat) {
case 0: snprintf(currentText, sizeof(currentText), "%dd %02d:%02d", days, hours, minutes); break;
@@ -838,29 +905,18 @@ void displayFullscreenCountdown(int days, int hours, int minutes, int seconds) {
}
}
bool needRecalc = forceLayout || countdownExpired != lastExpired || (strcmp(currentText, lastText) != 0) || fontIndex != lastFontIndex || countdownTextSize != lastTextSizeTier;
bool needRecalc = forceLayout || countdownExpired != lastExpired || (strcmp(currentText, lastText) != 0);
if (needRecalc) {
const GFXfont *font = getFontByIndex(fontIndex);
// Utiliser uniquement la police DejaVu optimale
const GFXfont *font = getOptimalFont();
display.setFont(font);
if (!font) {
int maxFittingSize = 1;
for (int s = 1; s <= 5; s++) {
display.setTextSize(s);
int w = getTextWidth(currentText, font);
int h = 8 * s;
if (w < TOTAL_WIDTH && h < TOTAL_HEIGHT) maxFittingSize = s; else break;
}
int desiredTier = countdownTextSize;
int chosen = maxFittingSize;
if (desiredTier == 1) chosen = max(1, maxFittingSize - 2);
else if (desiredTier == 2) chosen = max(1, maxFittingSize - 1);
display.setTextSize(chosen);
cachedSetSize = chosen;
} else {
display.setTextSize(1);
cachedSetSize = 1;
}
// Calcul automatique de la taille basé sur la résolution du panneau
int optimalSize = calculateAutoTextSize(currentText, font);
display.setTextSize(optimalSize);
cachedSetSize = optimalSize;
int16_t x1, y1; uint16_t w, h;
display.getTextBounds(currentText, 0, 0, &x1, &y1, &w, &h);
cachedTextPixelWidth = w; // conserver largeur
@@ -918,12 +974,10 @@ void displayFullscreenCountdown(int days, int hours, int minutes, int seconds) {
strncpy(lastText, currentText, sizeof(lastText)-1);
lastText[sizeof(lastText)-1] = '\0';
lastExpired = countdownExpired;
lastFontIndex = fontIndex;
lastTextSizeTier = countdownTextSize;
cachedIsEndMsg = countdownExpired;
forceLayout = false;
} else {
const GFXfont *font = getFontByIndex(fontIndex);
const GFXfont *font = getOptimalFont();
display.setFont(font);
display.setTextSize(cachedSetSize);
}
@@ -1054,15 +1108,17 @@ void displayFullscreenCountdown(int days, int hours, int minutes, int seconds) {
// Chargement des paramètres depuis la mémoire flash (version thread-safe)
void loadSettings() {
// Utiliser un timeout pour éviter les blocages
if (preferencesMutex == NULL || xSemaphoreTake(preferencesMutex, pdMS_TO_TICKS(1000)) != pdTRUE) {
Serial.println("Loading settings from NVS...");
// Utilisation de la classe helper pour mutex automatique avec timeout approprié
MUTEX_GUARD_CHECK(preferencesMutex, MUTEX_TIMEOUT_SLOW) {
Serial.println("Failed to acquire preferences mutex - using defaults");
return;
}
// Prendre aussi le mutex countdown pour cohérence des paramètres
if (countdownMutex == NULL || xSemaphoreTake(countdownMutex, pdMS_TO_TICKS(1000)) != pdTRUE) {
MUTEX_GUARD_CHECK(countdownMutex, MUTEX_TIMEOUT_NORMAL) {
Serial.println("Failed to acquire countdown mutex - using defaults");
xSemaphoreGive(preferencesMutex);
return;
}
@@ -1081,12 +1137,11 @@ void loadSettings() {
countdownMinute = preferences.getInt("cd_Minute", 59);
countdownSecond = preferences.getInt("cd_Second", 0);
// Paramètres d'affichage
countdownTextSize = preferences.getInt("textSize", 2);
// Paramètres d'affichage - style de police et couleur
fontStyle = preferences.getInt("fontStyle", 0); // 0=Normal, 1=Gras, 2=Italique
countdownColorR = preferences.getInt("colorR", 0);
countdownColorG = preferences.getInt("colorG", 255);
countdownColorB = preferences.getInt("colorB", 0);
fontIndex = preferences.getInt("fontIndex", 0); // accepte maintenant 0-4
blinkEnabled = preferences.getBool("blinkEn", true);
blinkIntervalMs = preferences.getInt("blinkInt", 500);
blinkWindowSeconds = preferences.getInt("blinkWin", 10);
@@ -1114,9 +1169,7 @@ void loadSettings() {
} while(false);
// Libérer le mutex
xSemaphoreGive(preferencesMutex);
xSemaphoreGive(countdownMutex);
// Les mutex sont libérés automatiquement par le destructeur de MutexGuard
if (success) {
Serial.println("Settings loaded successfully");
@@ -1145,79 +1198,99 @@ void loadSettings() {
// Sauvegarde des paramètres dans la mémoire flash (version thread-safe)
void saveSettings() {
// Utiliser un timeout pour éviter les blocages
if (preferencesMutex == NULL || xSemaphoreTake(preferencesMutex, pdMS_TO_TICKS(1000)) != pdTRUE) {
Serial.println("Failed to acquire preferences mutex - settings not saved");
return;
}
if (countdownMutex == NULL || xSemaphoreTake(countdownMutex, pdMS_TO_TICKS(1000)) != pdTRUE) {
Serial.println("Failed to acquire countdown mutex - settings not saved");
xSemaphoreGive(preferencesMutex);
Serial.println("Saving settings to NVS...");
// Tentative simple d'acquisition des mutex avec vérification du scheduler
if (xTaskGetSchedulerState() != taskSCHEDULER_RUNNING) {
Serial.println("Scheduler not running - delaying save");
return;
}
// Utiliser un try-catch style pour s'assurer que le mutex est libéré
bool success = false;
do {
if (!preferences.begin("countdown", false)) {
// Tentative d'acquisition des mutex avec timeout court
if (preferencesMutex && xSemaphoreTake(preferencesMutex, pdMS_TO_TICKS(100)) == pdTRUE) {
bool prefsStarted = preferences.begin("countdown", false);
if (prefsStarted) {
// Paramètres du countdown - capture des valeurs locales pour éviter les races
int year, month, day, hour, minute, second;
int colorR, colorG, colorB;
int fStyle;
// Acquisition rapide du mutex countdown pour capturer les valeurs
if (countdownMutex && xSemaphoreTake(countdownMutex, pdMS_TO_TICKS(50)) == pdTRUE) {
year = countdownYear;
month = countdownMonth;
day = countdownDay;
hour = countdownHour;
minute = countdownMinute;
second = countdownSecond;
colorR = countdownColorR;
colorG = countdownColorG;
colorB = countdownColorB;
fStyle = fontStyle;
xSemaphoreGive(countdownMutex);
} else {
// Si on ne peut pas obtenir le mutex, utiliser les valeurs par défaut
Serial.println("Could not acquire countdown mutex - using current values");
year = countdownYear;
month = countdownMonth;
day = countdownDay;
hour = countdownHour;
minute = countdownMinute;
second = countdownSecond;
colorR = countdownColorR;
colorG = countdownColorG;
colorB = countdownColorB;
fStyle = fontStyle;
}
// Sauvegarde sans mutex actif
preferences.putInt("cd_Year", year);
preferences.putInt("cd_Month", month);
preferences.putInt("cd_Day", day);
preferences.putInt("cd_Hour", hour);
preferences.putInt("cd_Minute", minute);
preferences.putInt("cd_Second", second);
// Paramètres d'affichage - style de police et couleur
preferences.putInt("fontStyle", fStyle);
preferences.putInt("colorR", colorR);
preferences.putInt("colorG", colorG);
preferences.putInt("colorB", colorB);
preferences.putBool("blinkEn", blinkEnabled);
preferences.putInt("blinkInt", blinkIntervalMs);
preferences.putInt("blinkWin", blinkWindowSeconds);
preferences.putBool("mqEn", marqueeEnabled);
preferences.putInt("mqInt", marqueeIntervalMs);
preferences.putInt("mqGap", marqueeGap);
preferences.putInt("mqMode", marqueeMode);
preferences.putInt("mqRetInt", marqueeReturnIntervalMs);
preferences.putInt("mqPL", marqueeBouncePauseLeftMs);
preferences.putInt("mqPR", marqueeBouncePauseRightMs);
preferences.putInt("mqOsDelay", marqueeOneShotDelayMs);
preferences.putBool("mqOsStopC", marqueeOneShotStopCenter);
preferences.putInt("mqOsRst", marqueeOneShotRestartSec);
preferences.putBool("mqAccEn", marqueeAccelEnabled);
preferences.putInt("mqAccSt", marqueeAccelStartIntervalMs);
preferences.putInt("mqAccEnd", marqueeAccelEndIntervalMs);
preferences.putInt("mqAccDur", marqueeAccelDurationMs);
preferences.putInt("bright", displayBrightness);
preferences.putString("cd_Title", String(countdownTitle));
preferences.end();
Serial.println("Settings saved successfully");
// Mise à jour de la couleur et de la date cible
countdownColor = display.color565(colorR, colorG, colorB);
countdownTarget = DateTime(year, month, day, hour, minute, second);
} else {
Serial.println("Failed to begin preferences");
break;
}
// Paramètres du countdown
preferences.putInt("cd_Year", countdownYear);
preferences.putInt("cd_Month", countdownMonth);
preferences.putInt("cd_Day", countdownDay);
preferences.putInt("cd_Hour", countdownHour);
preferences.putInt("cd_Minute", countdownMinute);
preferences.putInt("cd_Second", countdownSecond);
// Paramètres d'affichage
preferences.putInt("textSize", countdownTextSize);
preferences.putInt("colorR", countdownColorR);
preferences.putInt("colorG", countdownColorG);
preferences.putInt("colorB", countdownColorB);
preferences.putInt("fontIndex", fontIndex);
preferences.putBool("blinkEn", blinkEnabled);
preferences.putInt("blinkInt", blinkIntervalMs);
preferences.putInt("blinkWin", blinkWindowSeconds);
preferences.putBool("mqEn", marqueeEnabled);
preferences.putInt("mqInt", marqueeIntervalMs);
preferences.putInt("mqGap", marqueeGap);
preferences.putInt("mqMode", marqueeMode);
preferences.putInt("mqRetInt", marqueeReturnIntervalMs);
preferences.putInt("mqPL", marqueeBouncePauseLeftMs);
preferences.putInt("mqPR", marqueeBouncePauseRightMs);
preferences.putInt("mqOsDelay", marqueeOneShotDelayMs);
preferences.putBool("mqOsStopC", marqueeOneShotStopCenter);
preferences.putInt("mqOsRst", marqueeOneShotRestartSec);
preferences.putBool("mqAccEn", marqueeAccelEnabled);
preferences.putInt("mqAccSt", marqueeAccelStartIntervalMs);
preferences.putInt("mqAccEnd", marqueeAccelEndIntervalMs);
preferences.putInt("mqAccDur", marqueeAccelDurationMs);
preferences.putInt("bright", displayBrightness);
preferences.putString("cd_Title", String(countdownTitle));
preferences.end();
success = true;
} while(false);
// Libérer le mutex
xSemaphoreGive(preferencesMutex);
xSemaphoreGive(countdownMutex);
if (success) {
Serial.println("Settings saved successfully");
// Mise à jour de la couleur
countdownColor = display.color565(countdownColorR, countdownColorG, countdownColorB);
// Mise à jour de la date cible
countdownTarget = DateTime(countdownYear, countdownMonth, countdownDay,
countdownHour, countdownMinute, countdownSecond);
xSemaphoreGive(preferencesMutex);
} else {
Serial.println("Failed to save settings");
Serial.println("Could not acquire preferences mutex - save skipped");
}
}
@@ -1282,11 +1355,10 @@ void handleGetSettings() {
json += "\"hour\":" + String(countdownHour) + ",";
json += "\"minute\":" + String(countdownMinute) + ",";
json += "\"second\":" + String(countdownSecond) + ",";
json += "\"textSize\":" + String(countdownTextSize) + ",";
json += "\"fontStyle\":" + String(fontStyle) + ",";
json += "\"colorR\":" + String(countdownColorR) + ",";
json += "\"colorG\":" + String(countdownColorG) + ",";
json += "\"colorB\":" + String(countdownColorB) + ",";
json += "\"fontIndex\":" + String(fontIndex) + ","; // 0-4
json += "\"blinkEnabled\":" + String(blinkEnabled ? 1 : 0) + ",";
json += "\"blinkIntervalMs\":" + String(blinkIntervalMs) + ",";
json += "\"blinkWindow\":" + String(blinkWindowSeconds) + ",";
@@ -1373,12 +1445,11 @@ void handleSettings() {
countdownMinute = timeStr.substring(3, 5).toInt();
countdownSecond = timeStr.length() > 5 ? timeStr.substring(6, 8).toInt() : 0;
// Récupérer les autres paramètres
countdownTextSize = server.hasArg("textSize") ? server.arg("textSize").toInt() : countdownTextSize;
// Récupérer le style de police et la couleur
fontStyle = server.hasArg("fontStyle") ? server.arg("fontStyle").toInt() : fontStyle;
countdownColorR = server.hasArg("colorR") ? server.arg("colorR").toInt() : countdownColorR;
countdownColorG = server.hasArg("colorG") ? server.arg("colorG").toInt() : countdownColorG;
countdownColorB = server.hasArg("colorB") ? server.arg("colorB").toInt() : countdownColorB;
fontIndex = server.hasArg("fontIndex") ? server.arg("fontIndex").toInt() : fontIndex;
if (server.hasArg("blinkEnabled")) {
blinkEnabled = server.arg("blinkEnabled").toInt() != 0;
}
@@ -1475,12 +1546,9 @@ void handleSettings() {
displayBrightness = b;
}
// Limiter les valeurs
if (countdownTextSize < 1) countdownTextSize = 1;
if (countdownTextSize > 3) countdownTextSize = 3;
if (fontIndex < 0) fontIndex = 0;
if (fontIndex > 4) fontIndex = 4;
// Valider le style de police (0=Normal, 1=Gras, 2=Italique)
if (fontStyle < 0) fontStyle = 0;
if (fontStyle > 2) fontStyle = 2;
// Mettre à jour le titre
if (title.length() > 0) {
@@ -1529,7 +1597,8 @@ void handleSettings() {
countdownYear, countdownMonth, countdownDay,
countdownHour, countdownMinute, countdownSecond);
Serial.printf("Title: %s\n", countdownTitle);
Serial.printf("Text Size: %d, Font: %d\n", countdownTextSize, fontIndex);
const char* fontStyleNames[] = {"Normal", "Gras", "Italique"};
Serial.printf("Font: DejaVu %s (taille automatique)\n", fontStyleNames[fontStyle]);
Serial.printf("Color (RGB): %d,%d,%d\n", countdownColorR, countdownColorG, countdownColorB);
Serial.printf("Blink: enabled=%d interval=%dms window=%ds\n", blinkEnabled, blinkIntervalMs, blinkWindowSeconds);
Serial.printf("Marquee: en=%d mode=%d fwdInt=%d retInt=%d gap=%d LPause=%d RPause=%d accel=%d start=%d end=%d dur=%d oneDelay=%d oneStopC=%d oneRst=%d\n",
@@ -1565,11 +1634,10 @@ void handleReset() {
countdownMinute = 59;
countdownSecond = 0;
strcpy(countdownTitle, "COUNTDOWN");
countdownTextSize = 2;
fontStyle = 0; // Normal par défaut
countdownColorR = 0;
countdownColorG = 255;
countdownColorB = 0;
fontIndex = 0;
countdownColor = display.color565(countdownColorR, countdownColorG, countdownColorB);
countdownTarget = DateTime(countdownYear, countdownMonth, countdownDay,
countdownHour, countdownMinute, countdownSecond);
@@ -1787,22 +1855,25 @@ void DisplayTask(void * parameter) {
int prevSeconds = -1, prevMinutes = -1, prevHours = -1, prevDays = -1;
bool prevExpired = false;
for(;;) {
if(displayMutex != NULL && xSemaphoreTake(displayMutex, pdMS_TO_TICKS(10))) {
int days=0, hours=0, minutes=0, seconds=0;
if(countdownMutex != NULL && xSemaphoreTake(countdownMutex, pdMS_TO_TICKS(10))) {
updateCountdown(days, hours, minutes, seconds);
updateDisplayFormat(days, hours, minutes, seconds);
prevExpired = countdownExpired; // snapshot
xSemaphoreGive(countdownMutex);
// Utiliser MUTEX_GUARD avec timeout optimisé pour l'affichage
{
MUTEX_GUARD(displayMutex, MUTEX_TIMEOUT_FAST);
if (guard_displayMutex.isLocked()) {
int days=0, hours=0, minutes=0, seconds=0;
bool expired = false;
// Utiliser la fonction helper optimisée
if (safeTakeCountdownData(days, hours, minutes, seconds, expired)) {
bool secondChanged = (seconds != prevSeconds) || (minutes != prevMinutes) || (hours != prevHours) || (days != prevDays);
bool needDraw = secondChanged || blinkLastSeconds || expired != prevExpired || marqueeActive;
if (needDraw) {
displayFullscreenCountdown(days, hours, minutes, seconds);
prevSeconds = seconds; prevMinutes = minutes; prevHours = hours; prevDays = days; prevExpired = expired;
}
}
}
bool secondChanged = (seconds != prevSeconds) || (minutes != prevMinutes) || (hours != prevHours) || (days != prevDays);
bool needDraw = secondChanged || blinkLastSeconds || countdownExpired != prevExpired || marqueeActive;
if (needDraw) {
displayFullscreenCountdown(days, hours, minutes, seconds);
prevSeconds = seconds; prevMinutes = minutes; prevHours = hours; prevDays = days; prevExpired = countdownExpired;
}
xSemaphoreGive(displayMutex);
}
// Fréquence un peu plus élevée si marquee actif pour fluidité, sinon économe
uint32_t baseDelay = marqueeActive ? 40 : 150;
if (blinkLastSeconds && baseDelay > 50) baseDelay = 50;
@@ -1839,7 +1910,7 @@ void CountdownTask(void * parameter) {
for(;;) {
// Vérifier s'il faut sauvegarder les paramètres (avec délai de sécurité)
if (saveRequested && (millis() - saveRequestTime) > 1500) { // Débounce 1.5s après dernière modif
if (saveRequested && (millis() - saveRequestTime) > 1500) { // Débounce 1.5s après dernière modif
saveRequested = false;
// Attendre un peu plus pour s'assurer que le contexte web est terminé
vTaskDelay(pdMS_TO_TICKS(50));
@@ -1847,16 +1918,19 @@ void CountdownTask(void * parameter) {
Serial.println("Settings saved from CountdownTask");
}
if(countdownMutex != NULL && xSemaphoreTake(countdownMutex, pdMS_TO_TICKS(100))) {
DateTime now = rtc.now();
if (now.isValid()) { // Vérification de la validité de la date/heure
if (now >= countdownTarget) {
countdownExpired = true;
// Utiliser MUTEX_GUARD avec timeout optimisé
{
MUTEX_GUARD(countdownMutex, MUTEX_TIMEOUT_NORMAL);
if (guard_countdownMutex.isLocked()) {
DateTime now = rtc.now();
if (now.isValid()) { // Vérification de la validité de la date/heure
if (now >= countdownTarget) {
countdownExpired = true;
}
} else {
Serial.println("RTC read error!");
}
} else {
Serial.println("RTC read error!");
}
xSemaphoreGive(countdownMutex);
}
vTaskDelay(pdMS_TO_TICKS(100));
}
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+545
View File
@@ -0,0 +1,545 @@
#ifndef DEJAVUSANSBOLD9PTLAT1__H
#define DEJAVUSANSBOLD9PTLAT1__H
const uint8_t DejaVuSans_Bold9pt8bBitmaps[] PROGMEM = {
0x00, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0xCF, 0x3C, 0xF3, 0xCC, 0x06, 0x60,
0x33, 0x03, 0x18, 0x18, 0xC7, 0xFF, 0xBF, 0xFC, 0x63, 0x03, 0x18, 0xFF,
0xF7, 0xFF, 0x8C, 0x60, 0x66, 0x03, 0x30, 0x00, 0x08, 0x02, 0x03, 0xF1,
0xFE, 0xE8, 0xBA, 0x0F, 0x83, 0xFC, 0x3F, 0x83, 0xF0, 0x9E, 0x27, 0xFF,
0x9F, 0xC0, 0x80, 0x20, 0x08, 0x00, 0x7C, 0x1C, 0x63, 0x0C, 0x31, 0x8C,
0x18, 0xCE, 0x0C, 0x66, 0x06, 0x36, 0x01, 0xF7, 0x7C, 0x03, 0x63, 0x03,
0x31, 0x83, 0x98, 0xC1, 0x8C, 0x61, 0x82, 0x21, 0xC1, 0xE0, 0x0F, 0x80,
0xFF, 0x03, 0x84, 0x0E, 0x00, 0x1C, 0x00, 0xF8, 0xE7, 0xF3, 0xB9, 0xEC,
0xE3, 0xF3, 0x87, 0x8F, 0x0E, 0x1F, 0xFC, 0x1F, 0x78, 0xFF, 0xC0, 0x39,
0x9C, 0xE6, 0x73, 0x9C, 0xE7, 0x38, 0xC7, 0x38, 0xC7, 0xE3, 0x1C, 0xE3,
0x1C, 0xE7, 0x39, 0xCE, 0x67, 0x39, 0x9C, 0x0C, 0x33, 0x3F, 0xFC, 0xFC,
0x3F, 0x3F, 0xFC, 0xCC, 0x30, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06,
0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x77,
0x77, 0xEC, 0xFF, 0xFF, 0xC0, 0xFF, 0x80, 0x06, 0x1C, 0x30, 0x61, 0xC3,
0x06, 0x1C, 0x30, 0x61, 0xC3, 0x06, 0x1C, 0x30, 0x00, 0x1F, 0x07, 0xF1,
0xC7, 0x70, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1D, 0xC7,
0x1F, 0xC1, 0xF0, 0x7C, 0x7E, 0x37, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38,
0x1C, 0x0E, 0x07, 0x1F, 0xFF, 0xF8, 0x7F, 0x3F, 0xEC, 0x3E, 0x07, 0x01,
0xC0, 0x70, 0x3C, 0x1E, 0x1F, 0x0F, 0x87, 0xC3, 0xFF, 0xFF, 0xC0, 0x7F,
0x3F, 0xE8, 0x3C, 0x07, 0x03, 0xCF, 0xC3, 0xF8, 0x0F, 0x01, 0xC0, 0x78,
0x3F, 0xFE, 0x7E, 0x00, 0x07, 0x81, 0xF0, 0x7E, 0x0D, 0xC3, 0x38, 0xE7,
0x18, 0xE6, 0x1C, 0xFF, 0xFF, 0xFC, 0x0E, 0x01, 0xC0, 0x38, 0x7F, 0x9F,
0xE7, 0x01, 0xC0, 0x7F, 0x1F, 0xE4, 0x3C, 0x07, 0x01, 0xC0, 0x78, 0x3F,
0xFE, 0x7E, 0x00, 0x1F, 0x0F, 0xE7, 0x09, 0x80, 0xFF, 0x3F, 0xEF, 0x3F,
0x87, 0xE1, 0xF8, 0x77, 0x3D, 0xFE, 0x1F, 0x00, 0xFF, 0xFF, 0xF0, 0x3C,
0x0E, 0x07, 0x81, 0xC0, 0x70, 0x38, 0x0E, 0x07, 0x01, 0xC0, 0xF0, 0x38,
0x00, 0x3F, 0x1F, 0xEE, 0x1F, 0x87, 0xE1, 0xDF, 0xE7, 0xFB, 0xCF, 0xE1,
0xF8, 0x7F, 0x3D, 0xFE, 0x3F, 0x00, 0x3E, 0x1F, 0xEF, 0x3B, 0x87, 0xE1,
0xF8, 0x7F, 0x3D, 0xFF, 0x3F, 0xC0, 0x64, 0x39, 0xFC, 0x3E, 0x00, 0xFF,
0x80, 0x07, 0xFC, 0x77, 0x70, 0x00, 0x07, 0x77, 0x7E, 0xC0, 0x00, 0x20,
0x3C, 0x3F, 0x3F, 0x0F, 0x01, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xE0, 0x04,
0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x80, 0x1E, 0x01,
0xF8, 0x07, 0xE0, 0x1E, 0x03, 0xC3, 0xF3, 0xF0, 0xF0, 0x10, 0x00, 0x7C,
0xFE, 0x87, 0x07, 0x07, 0x0E, 0x1C, 0x38, 0x38, 0x00, 0x38, 0x38, 0x38,
0x07, 0xE0, 0x1F, 0xF8, 0x3C, 0x1C, 0x70, 0x0E, 0x63, 0xB7, 0xE7, 0xF3,
0xCE, 0x73, 0xCC, 0x33, 0xCC, 0x33, 0xCE, 0x76, 0xE7, 0xFE, 0x63, 0xB8,
0x70, 0x08, 0x3C, 0x38, 0x1F, 0xF0, 0x07, 0xC0, 0x07, 0x80, 0x1E, 0x00,
0xFC, 0x03, 0x30, 0x1C, 0xE0, 0x73, 0x81, 0x86, 0x0E, 0x1C, 0x3F, 0xF1,
0xFF, 0xE7, 0x03, 0x9C, 0x0E, 0xE0, 0x1C, 0xFF, 0x1F, 0xFB, 0x87, 0x70,
0xEE, 0x1D, 0xFF, 0x3F, 0xF7, 0x0F, 0xE0, 0xFC, 0x1F, 0x87, 0xFF, 0xEF,
0xF8, 0x0F, 0xC7, 0xFD, 0xE0, 0xB8, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00,
0xE0, 0x0E, 0x01, 0xE0, 0x9F, 0xF0, 0xFC, 0xFF, 0x0F, 0xFC, 0xE1, 0xEE,
0x0E, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x0E, 0xE1, 0xEF,
0xFC, 0xFF, 0x00, 0xFF, 0xFF, 0xF8, 0x1C, 0x0E, 0x07, 0xFB, 0xFD, 0xC0,
0xE0, 0x70, 0x38, 0x1F, 0xFF, 0xF8, 0xFF, 0xFF, 0xF8, 0x1C, 0x0E, 0x07,
0xFF, 0xFF, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x00, 0x0F, 0xE1, 0xFF,
0x9E, 0x04, 0xE0, 0x0E, 0x00, 0x70, 0x03, 0x83, 0xFC, 0x1F, 0xE0, 0x3B,
0x81, 0xDE, 0x0E, 0x7F, 0xF0, 0xFE, 0x00, 0xE0, 0x7E, 0x07, 0xE0, 0x7E,
0x07, 0xE0, 0x7F, 0xFF, 0xFF, 0xFE, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E,
0x07, 0xE0, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1C, 0x71, 0xC7, 0x1C,
0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x73, 0xFE, 0xF0, 0xE1, 0xE7, 0x1E,
0x39, 0xE1, 0xDE, 0x0F, 0xE0, 0x7E, 0x03, 0xF0, 0x1F, 0xC0, 0xEF, 0x07,
0x3C, 0x38, 0xF1, 0xC3, 0xCE, 0x0F, 0x00, 0xE0, 0x70, 0x38, 0x1C, 0x0E,
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1F, 0xFF, 0xF8, 0xF0, 0x1F,
0xE0, 0x3F, 0xE0, 0xFF, 0xC1, 0xFE, 0xC6, 0xFD, 0x8D, 0xFB, 0xBB, 0xF3,
0x67, 0xE7, 0xCF, 0xC7, 0x1F, 0x8E, 0x3F, 0x00, 0x7E, 0x00, 0xE0, 0xF0,
0x7F, 0x07, 0xF8, 0x7F, 0x87, 0xEC, 0x7E, 0xE7, 0xE6, 0x7E, 0x77, 0xE3,
0x7E, 0x3F, 0xE1, 0xFE, 0x0F, 0xE0, 0xF0, 0x0F, 0x81, 0xFF, 0x1E, 0x3C,
0xE0, 0xEE, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3B, 0x83, 0x9E,
0x3C, 0x7F, 0xC0, 0xF8, 0x00, 0xFF, 0x9F, 0xFB, 0x87, 0xF0, 0x7E, 0x0F,
0xC1, 0xF8, 0x7F, 0xFE, 0xFF, 0x9C, 0x03, 0x80, 0x70, 0x0E, 0x00, 0x0F,
0x81, 0xFF, 0x1E, 0x3C, 0xE0, 0xEE, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07,
0xE0, 0x3B, 0x83, 0xDE, 0x3C, 0x7F, 0xC0, 0xFC, 0x00, 0xE0, 0x03, 0x80,
0x0E, 0xFF, 0x0F, 0xF8, 0xE1, 0xCE, 0x1C, 0xE1, 0xCE, 0x3C, 0xFF, 0x8F,
0xF8, 0xE3, 0x8E, 0x1C, 0xE1, 0xEE, 0x0E, 0xE0, 0xF0, 0x3F, 0x9F, 0xEE,
0x0B, 0x80, 0xF0, 0x3F, 0x87, 0xF8, 0x3F, 0x03, 0xC0, 0x78, 0x1F, 0xFE,
0x7F, 0x00, 0xFF, 0xFF, 0xFC, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80,
0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0xE0, 0x7E, 0x07, 0xE0,
0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0x70,
0xE7, 0xFE, 0x1F, 0x80, 0xE0, 0x1D, 0xC0, 0xE7, 0x03, 0x9E, 0x1E, 0x38,
0x70, 0xE1, 0xC3, 0xCF, 0x07, 0x38, 0x1C, 0xE0, 0x3F, 0x00, 0xFC, 0x03,
0xF0, 0x07, 0x80, 0xE0, 0xE0, 0xFC, 0x3E, 0x1D, 0xC6, 0xC7, 0x38, 0xD8,
0xE7, 0x1B, 0x1C, 0xE3, 0x63, 0x8E, 0xC6, 0xE1, 0xD8, 0xDC, 0x3B, 0x1B,
0x87, 0x63, 0x70, 0x78, 0x3C, 0x0F, 0x07, 0x81, 0xE0, 0xF0, 0xF0, 0x7B,
0xC7, 0x8E, 0x38, 0x7B, 0xC1, 0xFC, 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x1F,
0xC1, 0xEF, 0x0E, 0x38, 0xF1, 0xEF, 0x07, 0x80, 0xF0, 0x7B, 0xC7, 0x8E,
0x38, 0x7B, 0xC1, 0xFC, 0x07, 0xC0, 0x3E, 0x00, 0xE0, 0x07, 0x00, 0x38,
0x01, 0xC0, 0x0E, 0x00, 0x70, 0x00, 0xFF, 0xFF, 0xFC, 0x07, 0x81, 0xE0,
0x78, 0x1E, 0x03, 0x80, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0x7F, 0xFF, 0xFE,
0xFF, 0xF9, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0xFF, 0xC1, 0xC1,
0x83, 0x07, 0x06, 0x0C, 0x1C, 0x18, 0x30, 0x70, 0x60, 0xC1, 0xC1, 0x80,
0xFF, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9F, 0xFF, 0x0E, 0x03,
0xE0, 0xEE, 0x38, 0xEE, 0x0E, 0xFF, 0xFF, 0xC0, 0x61, 0x86, 0x3F, 0x1F,
0xE4, 0x1C, 0x07, 0x3F, 0xFF, 0xFE, 0x1F, 0x8F, 0xFF, 0xDF, 0x70, 0xE0,
0x1C, 0x03, 0x80, 0x70, 0x0E, 0x79, 0xFF, 0xBC, 0x77, 0x07, 0xE0, 0xFC,
0x1F, 0x83, 0xF8, 0xEF, 0xFD, 0xCF, 0x00, 0x1F, 0x3F, 0xDC, 0x3C, 0x0E,
0x07, 0x03, 0x80, 0xE1, 0x7F, 0x8F, 0x80, 0x00, 0xE0, 0x1C, 0x03, 0x80,
0x73, 0xCE, 0xFF, 0xDC, 0x7F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xB8, 0xF7,
0xFE, 0x79, 0xC0, 0x1F, 0x0F, 0xF9, 0xC7, 0x70, 0x7F, 0xFF, 0xFF, 0xF8,
0x03, 0x81, 0x7F, 0xE3, 0xF8, 0x1F, 0x3F, 0x38, 0x38, 0xFF, 0xFF, 0x38,
0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3C, 0xEF, 0xFD, 0xC7, 0xF0,
0x7E, 0x0F, 0xC1, 0xF8, 0x3B, 0x8F, 0x7F, 0xE7, 0x9C, 0x03, 0xA0, 0xE7,
0xFC, 0x7E, 0x00, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE7, 0xBF, 0xEF, 0x1F,
0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x70, 0xFF, 0x8F, 0xFF,
0xFF, 0xFF, 0xC0, 0x39, 0xCE, 0x03, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C,
0xE7, 0xF7, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x1D, 0xC7, 0x39,
0xC7, 0x70, 0xFC, 0x1F, 0x83, 0xB8, 0x73, 0x8E, 0x39, 0xC3, 0x80, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xEF, 0x3D, 0xFE, 0xFF, 0xCF, 0x3F, 0x1C,
0x7E, 0x38, 0xFC, 0x71, 0xF8, 0xE3, 0xF1, 0xC7, 0xE3, 0x8F, 0xC7, 0x1C,
0xE7, 0xBF, 0xEF, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8,
0x70, 0x1F, 0x0F, 0xF9, 0xC7, 0x70, 0x7E, 0x0F, 0xC1, 0xF8, 0x3B, 0x8E,
0x7F, 0xC3, 0xE0, 0xE7, 0x9F, 0xFB, 0xC7, 0x70, 0x7E, 0x0F, 0xC1, 0xF8,
0x3F, 0x8E, 0xFF, 0xDC, 0xF3, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x00, 0x3C,
0xEF, 0xFD, 0xC7, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3B, 0x8F, 0x7F, 0xE7,
0x9C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0xEF, 0xFF, 0xC7, 0x0E, 0x1C,
0x38, 0x70, 0xE1, 0xC0, 0x3F, 0x7F, 0xF8, 0x3C, 0x0F, 0xE1, 0xFC, 0x0F,
0x07, 0xFF, 0xBF, 0x00, 0x38, 0x38, 0x38, 0xFF, 0xFF, 0x38, 0x38, 0x38,
0x38, 0x38, 0x38, 0x3F, 0x1F, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8,
0x7E, 0x1F, 0x8F, 0x7F, 0xCE, 0x70, 0xE0, 0xFC, 0x3D, 0xC7, 0x38, 0xE3,
0xB8, 0x77, 0x06, 0xC0, 0xF8, 0x0E, 0x01, 0xC0, 0xE3, 0x8F, 0xC7, 0x1D,
0xCE, 0x73, 0xB6, 0xE7, 0x6D, 0xC6, 0xDB, 0x0F, 0xBE, 0x1E, 0x7C, 0x1C,
0x70, 0x38, 0xE0, 0xF1, 0xEE, 0x38, 0xEE, 0x1D, 0xC1, 0xF0, 0x3E, 0x0E,
0xE1, 0xDC, 0x71, 0xDE, 0x3C, 0xE0, 0xEE, 0x39, 0xC7, 0x38, 0xE3, 0xB8,
0x77, 0x06, 0xC0, 0xF8, 0x0F, 0x01, 0xC0, 0x38, 0x07, 0x03, 0xC0, 0x70,
0x00, 0xFF, 0xFF, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF,
0xC0, 0x0F, 0x8F, 0xC7, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x78, 0xF8, 0x7C,
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0x0F, 0x80, 0xFF, 0xFF, 0xFF,
0xFF, 0xF0, 0xF8, 0x7E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3C, 0x0F,
0x87, 0xC7, 0x03, 0x81, 0xC0, 0xE0, 0x71, 0xF8, 0xF8, 0x00, 0x7C, 0x3F,
0xFE, 0x1F, 0x00, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0x00, 0xFF, 0x8F,
0xFF, 0xFF, 0xFE, 0x08, 0x08, 0x08, 0x3E, 0x7F, 0xF9, 0xE8, 0xE8, 0xE8,
0xE8, 0x79, 0x7F, 0x1E, 0x08, 0x08, 0x08, 0x0F, 0x87, 0xF3, 0xC4, 0xE0,
0x38, 0x0E, 0x0F, 0xF3, 0xFC, 0x38, 0x0E, 0x03, 0x83, 0xFF, 0xFF, 0xC0,
0x40, 0xFF, 0xF7, 0xF9, 0xCE, 0x61, 0x98, 0x67, 0x39, 0xFE, 0xFF, 0xF0,
0x20, 0xF1, 0xEE, 0x39, 0xC7, 0x1D, 0xC3, 0xB9, 0xFF, 0xFF, 0xF8, 0x70,
0xFF, 0xFF, 0xFC, 0x38, 0x07, 0x00, 0xE0, 0xFF, 0xFC, 0x3F, 0xFF, 0x3F,
0x3F, 0x9C, 0x4E, 0x03, 0xC3, 0xFB, 0x9F, 0xC7, 0xF3, 0xBF, 0x87, 0x80,
0xE4, 0x73, 0xF9, 0xF8, 0xDE, 0xC0, 0x0F, 0x81, 0x83, 0x18, 0x0C, 0x8F,
0x28, 0xC8, 0xCC, 0x06, 0x60, 0x33, 0x01, 0x8C, 0x0A, 0x3C, 0x98, 0x0C,
0x60, 0xC0, 0xF8, 0x00, 0x7C, 0x0D, 0xFE, 0x3C, 0x79, 0xDF, 0x80, 0xFF,
0xFC, 0x11, 0x33, 0x76, 0xCC, 0xCC, 0x76, 0x33, 0x11, 0xFF, 0xFF, 0xFC,
0x01, 0x80, 0x30, 0x06, 0xFF, 0xFF, 0xC0, 0x0F, 0x81, 0x83, 0x18, 0x0C,
0x9E, 0x28, 0xD8, 0xC6, 0xC6, 0x3C, 0x31, 0xE1, 0x8D, 0x8A, 0x6C, 0x98,
0x0C, 0x60, 0xC0, 0xF8, 0x00, 0xFF, 0xF0, 0x7B, 0x38, 0x61, 0xCD, 0xE0,
0x06, 0x00, 0x60, 0x06, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x06, 0x00, 0x60,
0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0xFA, 0x30, 0xC3, 0x19, 0xCE, 0x3F, 0xF8,
0x30, 0xDE, 0x0C, 0x38, 0xFE, 0x33, 0x30, 0xE1, 0xDC, 0x3B, 0x87, 0x70,
0xEE, 0x1D, 0xC3, 0xB8, 0x77, 0x9E, 0xFF, 0xFF, 0xDF, 0x80, 0x70, 0x0E,
0x01, 0xC0, 0x00, 0x3F, 0xDF, 0x3F, 0xCF, 0xF3, 0xFC, 0xDF, 0x33, 0xCC,
0x33, 0x0C, 0xC3, 0x30, 0xCC, 0x33, 0x0C, 0xC3, 0x30, 0xCC, 0xFF, 0x80,
0x31, 0x1F, 0xF0, 0xC3, 0x0C, 0x30, 0xC3, 0x3F, 0x3C, 0x66, 0xC3, 0xC3,
0xC3, 0x66, 0x3C, 0x00, 0xFF, 0xFF, 0x88, 0xCC, 0x6E, 0x33, 0x33, 0x6E,
0xCC, 0x88, 0xF0, 0x38, 0x30, 0x30, 0x30, 0x70, 0x30, 0x60, 0x30, 0xC0,
0x31, 0xC0, 0x31, 0x8E, 0xFF, 0x8E, 0x03, 0x16, 0x06, 0x26, 0x0E, 0x7F,
0x0C, 0x7F, 0x1C, 0x06, 0xF0, 0x38, 0x18, 0x18, 0x0C, 0x1C, 0x06, 0x0C,
0x03, 0x0C, 0x01, 0x8E, 0x00, 0xC6, 0x7D, 0xFF, 0x23, 0x03, 0x01, 0x83,
0x00, 0xC3, 0x80, 0xC1, 0x81, 0xC1, 0xC1, 0xC0, 0x00, 0xFC, 0xF8, 0x38,
0x0C, 0x30, 0x0C, 0x70, 0x78, 0x60, 0x0C, 0xC0, 0x0D, 0xC0, 0x8D, 0x8E,
0xFB, 0x8E, 0x03, 0x16, 0x06, 0x26, 0x0E, 0x7F, 0x0C, 0x7F, 0x1C, 0x06,
0x1C, 0x1C, 0x1C, 0x00, 0x1C, 0x1C, 0x3C, 0x78, 0xF0, 0xE0, 0xE0, 0xE1,
0x7F, 0x3E, 0x06, 0x00, 0x0C, 0x00, 0x00, 0x01, 0xE0, 0x07, 0x80, 0x3F,
0x00, 0xCC, 0x07, 0x38, 0x1C, 0xE0, 0x61, 0x83, 0x87, 0x0F, 0xFC, 0x7F,
0xF9, 0xC0, 0xE7, 0x03, 0xB8, 0x07, 0x03, 0x00, 0x18, 0x00, 0x00, 0x01,
0xE0, 0x07, 0x80, 0x3F, 0x00, 0xCC, 0x07, 0x38, 0x1C, 0xE0, 0x61, 0x83,
0x87, 0x0F, 0xFC, 0x7F, 0xF9, 0xC0, 0xE7, 0x03, 0xB8, 0x07, 0x07, 0x80,
0x33, 0x00, 0x00, 0x01, 0xE0, 0x07, 0x80, 0x3F, 0x00, 0xCC, 0x07, 0x38,
0x1C, 0xE0, 0x61, 0x83, 0x87, 0x0F, 0xFC, 0x7F, 0xF9, 0xC0, 0xE7, 0x03,
0xB8, 0x07, 0x06, 0x40, 0x3F, 0x00, 0x98, 0x00, 0x00, 0x07, 0x80, 0x1E,
0x00, 0xFC, 0x03, 0x30, 0x1C, 0xE0, 0x73, 0x81, 0x86, 0x0E, 0x1C, 0x3F,
0xF1, 0xFF, 0xE7, 0x03, 0x9C, 0x0E, 0xE0, 0x1C, 0x0C, 0xC0, 0x33, 0x00,
0x00, 0x01, 0xE0, 0x07, 0x80, 0x3F, 0x00, 0xCC, 0x07, 0x38, 0x1C, 0xE0,
0x61, 0x83, 0x87, 0x0F, 0xFC, 0x7F, 0xF9, 0xC0, 0xE7, 0x03, 0xB8, 0x07,
0x07, 0x80, 0x33, 0x00, 0x84, 0x03, 0x30, 0x07, 0x80, 0x3F, 0x00, 0xFC,
0x07, 0x38, 0x1C, 0xE0, 0x73, 0x83, 0x87, 0x0E, 0x1C, 0x3F, 0xF1, 0xFF,
0xE7, 0x03, 0x9C, 0x0E, 0xE0, 0x1C, 0x07, 0xFF, 0xC1, 0xFF, 0xF0, 0xF7,
0x00, 0x39, 0xC0, 0x0E, 0x70, 0x07, 0x1F, 0xE1, 0xC7, 0xF8, 0xFF, 0xC0,
0x3F, 0xF0, 0x1E, 0x1C, 0x07, 0x07, 0x01, 0xC1, 0xFF, 0xE0, 0x7F, 0xC0,
0x0F, 0xC7, 0xFD, 0xE0, 0xB8, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0,
0x0E, 0x01, 0xE0, 0x9F, 0xF0, 0xFC, 0x06, 0x00, 0x40, 0x08, 0x0F, 0x00,
0x18, 0x06, 0x00, 0x1F, 0xFF, 0xFF, 0x03, 0x81, 0xC0, 0xFF, 0x7F, 0xB8,
0x1C, 0x0E, 0x07, 0x03, 0xFF, 0xFF, 0x0C, 0x0C, 0x00, 0x1F, 0xFF, 0xFF,
0x03, 0x81, 0xC0, 0xFF, 0x7F, 0xB8, 0x1C, 0x0E, 0x07, 0x03, 0xFF, 0xFF,
0x1C, 0x11, 0x00, 0x1F, 0xFF, 0xFF, 0x03, 0x81, 0xC0, 0xFF, 0x7F, 0xB8,
0x1C, 0x0E, 0x07, 0x03, 0xFF, 0xFF, 0x36, 0x1B, 0x00, 0x1F, 0xFF, 0xFF,
0x03, 0x81, 0xC0, 0xFF, 0x7F, 0xB8, 0x1C, 0x0E, 0x07, 0x03, 0xFF, 0xFF,
0x63, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x6C, 0x0E, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0x38, 0x88, 0x01, 0xC3, 0x87, 0x0E, 0x1C, 0x38,
0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0xDE, 0xC0, 0xE7, 0x39, 0xCE, 0x73,
0x9C, 0xE7, 0x39, 0xCE, 0x3F, 0xC0, 0xFF, 0xC3, 0x87, 0x8E, 0x0E, 0x38,
0x1F, 0xF8, 0x7F, 0xE1, 0xCE, 0x07, 0x38, 0x1C, 0xE0, 0xE3, 0x87, 0x8F,
0xFC, 0x3F, 0xC0, 0x19, 0x03, 0xF0, 0x26, 0x00, 0x00, 0xF0, 0x7F, 0x07,
0xF8, 0x7F, 0x87, 0xEC, 0x7E, 0xE7, 0xE6, 0x7E, 0x77, 0xE3, 0x7E, 0x3F,
0xE1, 0xFE, 0x0F, 0xE0, 0xF0, 0x06, 0x00, 0x18, 0x00, 0x00, 0x1F, 0x03,
0xFE, 0x3C, 0x79, 0xC1, 0xDC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0,
0x77, 0x07, 0x3C, 0x78, 0xFF, 0x81, 0xF0, 0x03, 0x00, 0x30, 0x00, 0x00,
0x1F, 0x03, 0xFE, 0x3C, 0x79, 0xC1, 0xDC, 0x07, 0xE0, 0x3F, 0x01, 0xF8,
0x0F, 0xC0, 0x77, 0x07, 0x3C, 0x78, 0xFF, 0x81, 0xF0, 0x07, 0x00, 0x44,
0x00, 0x00, 0x1F, 0x03, 0xFE, 0x3C, 0x79, 0xC1, 0xDC, 0x07, 0xE0, 0x3F,
0x01, 0xF8, 0x0F, 0xC0, 0x77, 0x07, 0x3C, 0x78, 0xFF, 0x81, 0xF0, 0x06,
0x80, 0x7C, 0x02, 0xC0, 0x00, 0x00, 0xF8, 0x1F, 0xF1, 0xE3, 0xCE, 0x0E,
0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xB8, 0x39, 0xE3, 0xC7,
0xFC, 0x0F, 0x80, 0x0D, 0x80, 0x6C, 0x00, 0x00, 0x1F, 0x03, 0xFE, 0x3C,
0x79, 0xC1, 0xDC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x77, 0x07,
0x3C, 0x78, 0xFF, 0x81, 0xF0, 0x40, 0x5C, 0x1D, 0xC7, 0x1D, 0xC1, 0xF0,
0x1C, 0x07, 0xC1, 0xDC, 0x71, 0xDC, 0x1D, 0x01, 0x00, 0x07, 0xE4, 0x7F,
0xE3, 0xC7, 0x8E, 0x1F, 0x70, 0xDD, 0xC6, 0x77, 0x31, 0xDD, 0x87, 0x7C,
0x1D, 0xE0, 0xE3, 0xC7, 0x8F, 0xFC, 0x4F, 0xC0, 0x0C, 0x00, 0x60, 0x00,
0x0E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0,
0x7E, 0x07, 0xE0, 0x77, 0x0E, 0x7F, 0xE1, 0xF8, 0x06, 0x00, 0xC0, 0x00,
0x0E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0,
0x7E, 0x07, 0xE0, 0x77, 0x0E, 0x7F, 0xE1, 0xF8, 0x0F, 0x01, 0x98, 0x00,
0x0E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0,
0x7E, 0x07, 0xE0, 0x77, 0x0E, 0x7F, 0xE1, 0xF8, 0x19, 0x81, 0x98, 0x00,
0x0E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0,
0x7E, 0x07, 0xE0, 0x77, 0x0E, 0x7F, 0xE1, 0xF8, 0x03, 0x00, 0x30, 0x00,
0x01, 0xE0, 0xF7, 0x8F, 0x1C, 0x70, 0xF7, 0x83, 0xF8, 0x0F, 0x80, 0x7C,
0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0xE0, 0x1C,
0x03, 0xFE, 0x7F, 0xEE, 0x1F, 0xC1, 0xF8, 0x3F, 0x07, 0xE1, 0xFF, 0xFB,
0xFE, 0x70, 0x0E, 0x00, 0x3F, 0x0F, 0xF3, 0xC7, 0x70, 0xEE, 0x7D, 0xDC,
0x3B, 0x87, 0x78, 0xE7, 0xDC, 0x7F, 0x83, 0xF0, 0x7E, 0xFF, 0xDF, 0x00,
0x18, 0x03, 0x00, 0x60, 0x00, 0x3F, 0x1F, 0xE4, 0x1C, 0x07, 0x3F, 0xFF,
0xFE, 0x1F, 0x8F, 0xFF, 0xDF, 0x70, 0x03, 0x01, 0x80, 0xC0, 0x00, 0x3F,
0x1F, 0xE4, 0x1C, 0x07, 0x3F, 0xFF, 0xFE, 0x1F, 0x8F, 0xFF, 0xDF, 0x70,
0x0E, 0x06, 0xC3, 0x18, 0x00, 0x3F, 0x1F, 0xE4, 0x1C, 0x07, 0x3F, 0xFF,
0xFE, 0x1F, 0x8F, 0xFF, 0xDF, 0x70, 0x0D, 0x07, 0xC1, 0x60, 0x00, 0x3F,
0x1F, 0xE4, 0x1C, 0x07, 0x3F, 0xFF, 0xFE, 0x1F, 0x8F, 0xFF, 0xDF, 0x70,
0x1B, 0x06, 0xC0, 0x00, 0x00, 0x3F, 0x1F, 0xE4, 0x1C, 0x07, 0x3F, 0xFF,
0xFE, 0x1F, 0x8F, 0xFF, 0xDF, 0x70, 0x0E, 0x04, 0x41, 0x10, 0x44, 0x0E,
0x00, 0x03, 0xF1, 0xFE, 0x41, 0xC0, 0x73, 0xFF, 0xFF, 0xE1, 0xF8, 0xFF,
0xFD, 0xF7, 0x3F, 0x3C, 0x3F, 0xFF, 0x90, 0x79, 0xC0, 0x38, 0x73, 0xFF,
0xFF, 0xFF, 0xFF, 0x87, 0x01, 0xC7, 0xC1, 0xFE, 0xFF, 0xBE, 0x1F, 0x80,
0x1F, 0x3F, 0xDC, 0x3C, 0x0E, 0x07, 0x03, 0x80, 0xE1, 0x7F, 0x8F, 0x81,
0x80, 0x40, 0x20, 0xF0, 0x18, 0x01, 0x80, 0x18, 0x00, 0x01, 0xF0, 0xFF,
0x9C, 0x77, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x38, 0x17, 0xFE, 0x3F, 0x80,
0x03, 0x00, 0xC0, 0x30, 0x00, 0x01, 0xF0, 0xFF, 0x9C, 0x77, 0x07, 0xFF,
0xFF, 0xFF, 0x80, 0x38, 0x17, 0xFE, 0x3F, 0x80, 0x0E, 0x03, 0x60, 0xC6,
0x00, 0x01, 0xF0, 0xFF, 0x9C, 0x77, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x38,
0x17, 0xFE, 0x3F, 0x80, 0x1B, 0x03, 0x60, 0x00, 0x00, 0x01, 0xF0, 0xFF,
0x9C, 0x77, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x38, 0x17, 0xFE, 0x3F, 0x80,
0x61, 0x86, 0x03, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0x33, 0x30, 0x0E,
0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x70, 0x38, 0xDB, 0x18, 0x03, 0x87, 0x0E,
0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x00, 0xDE, 0xC0, 0x07, 0x39, 0xCE,
0x73, 0x9C, 0xE7, 0x38, 0x1C, 0x41, 0xF8, 0x3C, 0x19, 0x80, 0x18, 0x7F,
0x9F, 0xF7, 0x87, 0xE0, 0xFC, 0x1F, 0x83, 0xB8, 0xE7, 0xFC, 0x3E, 0x00,
0x32, 0x1F, 0x84, 0xC0, 0x00, 0xE7, 0xBF, 0xEF, 0x1F, 0x87, 0xE1, 0xF8,
0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x70, 0x18, 0x01, 0x80, 0x18, 0x00, 0x01,
0xF0, 0xFF, 0x9C, 0x77, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xB8, 0xE7, 0xFC,
0x3E, 0x00, 0x03, 0x00, 0xC0, 0x30, 0x00, 0x01, 0xF0, 0xFF, 0x9C, 0x77,
0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xB8, 0xE7, 0xFC, 0x3E, 0x00, 0x0E, 0x03,
0x60, 0xC6, 0x00, 0x01, 0xF0, 0xFF, 0x9C, 0x77, 0x07, 0xE0, 0xFC, 0x1F,
0x83, 0xB8, 0xE7, 0xFC, 0x3E, 0x00, 0x1C, 0x87, 0xF0, 0x9C, 0x00, 0x01,
0xF0, 0xFF, 0x9C, 0x77, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xB8, 0xE7, 0xFC,
0x3E, 0x00, 0x1B, 0x03, 0x60, 0x00, 0x00, 0x01, 0xF0, 0xFF, 0x9C, 0x77,
0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xB8, 0xE7, 0xFC, 0x3E, 0x00, 0x0E, 0x01,
0xC0, 0x38, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x00, 0x70, 0x0E, 0x01, 0xC0,
0x00, 0x03, 0xFD, 0xFF, 0x38, 0xFE, 0x3F, 0xCD, 0xFB, 0x3F, 0xC7, 0xF1,
0xCF, 0xFB, 0xFC, 0x00, 0x00, 0x30, 0x06, 0x00, 0xC0, 0x00, 0xE1, 0xF8,
0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x8F, 0x7F, 0xCE, 0x70, 0x06,
0x03, 0x01, 0x80, 0x00, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E,
0x1F, 0x8F, 0x7F, 0xCE, 0x70, 0x1E, 0x07, 0x83, 0x30, 0x00, 0xE1, 0xF8,
0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x8F, 0x7F, 0xCE, 0x70, 0x33,
0x0C, 0xC0, 0x00, 0x00, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E,
0x1F, 0x8F, 0x7F, 0xCE, 0x70, 0x06, 0x01, 0x80, 0x60, 0x00, 0x0E, 0x0E,
0xE3, 0x9C, 0x73, 0x8E, 0x3B, 0x87, 0x70, 0x6C, 0x0F, 0x80, 0xF0, 0x1C,
0x03, 0x80, 0x70, 0x3C, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E,
0x79, 0xFF, 0xBC, 0x77, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF8, 0xEF, 0xFD,
0xCF, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x00, 0x36, 0x06, 0xC0, 0x00, 0x00,
0x0E, 0x0E, 0xE3, 0x9C, 0x73, 0x8E, 0x3B, 0x87, 0x70, 0x6C, 0x0F, 0x80,
0xF0, 0x1C, 0x03, 0x80, 0x70, 0x3C, 0x07, 0x00 };
const GFXglyph DejaVuSans_Bold9pt8bGlyphs[] PROGMEM = {
{ 0, 1, 1, 6, 0, 0 }, // 0x20 ' '
{ 1, 3, 13, 8, 3, -12 }, // 0x21 '!'
{ 6, 6, 5, 9, 2, -12 }, // 0x22 '"'
{ 10, 13, 13, 15, 1, -12 }, // 0x23 '#'
{ 32, 10, 17, 13, 1, -13 }, // 0x24 '$'
{ 54, 17, 13, 18, 1, -12 }, // 0x25 '%'
{ 82, 14, 13, 16, 1, -12 }, // 0x26 '&'
{ 105, 2, 5, 6, 2, -12 }, // 0x27 '''
{ 107, 5, 16, 8, 2, -13 }, // 0x28 '('
{ 117, 5, 16, 8, 2, -13 }, // 0x29 ')'
{ 127, 10, 8, 9, 0, -12 }, // 0x2A '*'
{ 137, 12, 12, 15, 2, -11 }, // 0x2B '+'
{ 155, 4, 6, 7, 1, -2 }, // 0x2C ','
{ 158, 6, 3, 7, 1, -6 }, // 0x2D '-'
{ 161, 3, 3, 7, 2, -2 }, // 0x2E '.'
{ 163, 7, 15, 7, 0, -12 }, // 0x2F '/'
{ 177, 11, 13, 13, 1, -12 }, // 0x30 '0'
{ 195, 9, 13, 13, 2, -12 }, // 0x31 '1'
{ 210, 10, 13, 13, 1, -12 }, // 0x32 '2'
{ 227, 10, 13, 13, 1, -12 }, // 0x33 '3'
{ 244, 11, 13, 13, 1, -12 }, // 0x34 '4'
{ 262, 10, 13, 13, 1, -12 }, // 0x35 '5'
{ 279, 10, 13, 13, 1, -12 }, // 0x36 '6'
{ 296, 10, 13, 13, 1, -12 }, // 0x37 '7'
{ 313, 10, 13, 13, 1, -12 }, // 0x38 '8'
{ 330, 10, 13, 13, 1, -12 }, // 0x39 '9'
{ 347, 3, 10, 7, 2, -9 }, // 0x3A ':'
{ 351, 4, 13, 7, 1, -9 }, // 0x3B ';'
{ 358, 11, 10, 15, 2, -10 }, // 0x3C '<'
{ 372, 11, 6, 15, 2, -8 }, // 0x3D '='
{ 381, 11, 10, 15, 2, -10 }, // 0x3E '>'
{ 395, 8, 13, 10, 1, -12 }, // 0x3F '?'
{ 408, 16, 16, 18, 1, -12 }, // 0x40 '@'
{ 440, 14, 13, 14, 0, -12 }, // 0x41 'A'
{ 463, 11, 13, 14, 2, -12 }, // 0x42 'B'
{ 481, 11, 13, 13, 1, -12 }, // 0x43 'C'
{ 499, 12, 13, 15, 2, -12 }, // 0x44 'D'
{ 519, 9, 13, 12, 2, -12 }, // 0x45 'E'
{ 534, 9, 13, 12, 2, -12 }, // 0x46 'F'
{ 549, 13, 13, 15, 1, -12 }, // 0x47 'G'
{ 571, 12, 13, 16, 2, -12 }, // 0x48 'H'
{ 591, 3, 13, 7, 2, -12 }, // 0x49 'I'
{ 596, 6, 17, 7, -1, -12 }, // 0x4A 'J'
{ 609, 13, 13, 14, 2, -12 }, // 0x4B 'K'
{ 631, 9, 13, 11, 2, -12 }, // 0x4C 'L'
{ 646, 15, 13, 18, 2, -12 }, // 0x4D 'M'
{ 671, 12, 13, 15, 2, -12 }, // 0x4E 'N'
{ 691, 13, 13, 15, 1, -12 }, // 0x4F 'O'
{ 713, 11, 13, 13, 2, -12 }, // 0x50 'P'
{ 731, 13, 16, 15, 1, -12 }, // 0x51 'Q'
{ 757, 12, 13, 14, 2, -12 }, // 0x52 'R'
{ 777, 10, 13, 13, 1, -12 }, // 0x53 'S'
{ 794, 11, 13, 12, 0, -12 }, // 0x54 'T'
{ 812, 12, 13, 16, 2, -12 }, // 0x55 'U'
{ 832, 14, 13, 14, 0, -12 }, // 0x56 'V'
{ 855, 19, 13, 20, 1, -12 }, // 0x57 'W'
{ 886, 13, 13, 14, 0, -12 }, // 0x58 'X'
{ 908, 13, 13, 13, 0, -12 }, // 0x59 'Y'
{ 930, 11, 13, 13, 1, -12 }, // 0x5A 'Z'
{ 948, 5, 16, 8, 2, -13 }, // 0x5B '['
{ 958, 7, 15, 7, 0, -12 }, // 0x5C '\'
{ 972, 5, 16, 8, 2, -13 }, // 0x5D ']'
{ 982, 11, 5, 15, 2, -12 }, // 0x5E '^'
{ 989, 9, 2, 9, 0, 3 }, // 0x5F '_'
{ 992, 5, 3, 9, 1, -13 }, // 0x60 '`'
{ 994, 10, 10, 12, 1, -9 }, // 0x61 'a'
{ 1007, 11, 14, 13, 2, -13 }, // 0x62 'b'
{ 1027, 9, 10, 11, 1, -9 }, // 0x63 'c'
{ 1039, 11, 14, 13, 1, -13 }, // 0x64 'd'
{ 1059, 11, 10, 12, 1, -9 }, // 0x65 'e'
{ 1073, 8, 14, 8, 0, -13 }, // 0x66 'f'
{ 1087, 11, 14, 13, 1, -9 }, // 0x67 'g'
{ 1107, 10, 14, 13, 2, -13 }, // 0x68 'h'
{ 1125, 3, 14, 6, 2, -13 }, // 0x69 'i'
{ 1131, 5, 18, 6, 0, -13 }, // 0x6A 'j'
{ 1143, 11, 14, 12, 2, -13 }, // 0x6B 'k'
{ 1163, 3, 14, 6, 2, -13 }, // 0x6C 'l'
{ 1169, 15, 10, 18, 2, -9 }, // 0x6D 'm'
{ 1188, 10, 10, 13, 2, -9 }, // 0x6E 'n'
{ 1201, 11, 10, 12, 1, -9 }, // 0x6F 'o'
{ 1215, 11, 14, 13, 2, -9 }, // 0x70 'p'
{ 1235, 11, 14, 13, 1, -9 }, // 0x71 'q'
{ 1255, 7, 10, 9, 2, -9 }, // 0x72 'r'
{ 1264, 9, 10, 11, 1, -9 }, // 0x73 's'
{ 1276, 8, 13, 9, 1, -12 }, // 0x74 't'
{ 1289, 10, 10, 13, 2, -9 }, // 0x75 'u'
{ 1302, 11, 10, 12, 1, -9 }, // 0x76 'v'
{ 1316, 15, 10, 16, 1, -9 }, // 0x77 'w'
{ 1335, 11, 10, 12, 1, -9 }, // 0x78 'x'
{ 1349, 11, 14, 12, 1, -9 }, // 0x79 'y'
{ 1369, 9, 10, 10, 1, -9 }, // 0x7A 'z'
{ 1381, 9, 17, 13, 2, -13 }, // 0x7B '{'
{ 1401, 2, 18, 7, 2, -13 }, // 0x7C '|'
{ 1406, 9, 17, 13, 2, -13 }, // 0x7D '}'
{ 1426, 11, 3, 15, 2, -6 }, // 0x7E '~'
{ 1431, 9, 16, 11, 1, -12 }, // 0x7F
{ 1449, 9, 16, 11, 1, -12 }, // 0x80
{ 1467, 9, 16, 11, 1, -12 }, // 0x81
{ 1485, 9, 16, 11, 1, -12 }, // 0x82
{ 1503, 9, 16, 11, 1, -12 }, // 0x83
{ 1521, 9, 16, 11, 1, -12 }, // 0x84
{ 1539, 9, 16, 11, 1, -12 }, // 0x85
{ 1557, 9, 16, 11, 1, -12 }, // 0x86
{ 1575, 9, 16, 11, 1, -12 }, // 0x87
{ 1593, 9, 16, 11, 1, -12 }, // 0x88
{ 1611, 9, 16, 11, 1, -12 }, // 0x89
{ 1629, 9, 16, 11, 1, -12 }, // 0x8A
{ 1647, 9, 16, 11, 1, -12 }, // 0x8B
{ 1665, 9, 16, 11, 1, -12 }, // 0x8C
{ 1683, 9, 16, 11, 1, -12 }, // 0x8D
{ 1701, 9, 16, 11, 1, -12 }, // 0x8E
{ 1719, 9, 16, 11, 1, -12 }, // 0x8F
{ 1737, 9, 16, 11, 1, -12 }, // 0x90
{ 1755, 9, 16, 11, 1, -12 }, // 0x91
{ 1773, 9, 16, 11, 1, -12 }, // 0x92
{ 1791, 9, 16, 11, 1, -12 }, // 0x93
{ 1809, 9, 16, 11, 1, -12 }, // 0x94
{ 1827, 9, 16, 11, 1, -12 }, // 0x95
{ 1845, 9, 16, 11, 1, -12 }, // 0x96
{ 1863, 9, 16, 11, 1, -12 }, // 0x97
{ 1881, 9, 16, 11, 1, -12 }, // 0x98
{ 1899, 9, 16, 11, 1, -12 }, // 0x99
{ 1917, 9, 16, 11, 1, -12 }, // 0x9A
{ 1935, 9, 16, 11, 1, -12 }, // 0x9B
{ 1953, 9, 16, 11, 1, -12 }, // 0x9C
{ 1971, 9, 16, 11, 1, -12 }, // 0x9D
{ 1989, 9, 16, 11, 1, -12 }, // 0x9E
{ 2007, 9, 16, 11, 1, -12 }, // 0x9F
{ 2025, 1, 1, 6, 0, 0 }, // 0xA0
{ 2026, 3, 13, 8, 3, -9 }, // 0xA1
{ 2031, 8, 16, 13, 2, -12 }, // 0xA2
{ 2047, 10, 13, 13, 1, -12 }, // 0xA3
{ 2064, 10, 10, 11, 1, -9 }, // 0xA4
{ 2077, 11, 13, 13, 1, -12 }, // 0xA5
{ 2095, 2, 16, 7, 2, -12 }, // 0xA6
{ 2099, 9, 15, 9, 1, -12 }, // 0xA7
{ 2116, 5, 2, 9, 2, -13 }, // 0xA8
{ 2118, 13, 13, 18, 2, -12 }, // 0xA9
{ 2140, 7, 10, 10, 1, -12 }, // 0xAA
{ 2149, 8, 8, 12, 1, -8 }, // 0xAB
{ 2157, 11, 5, 15, 2, -7 }, // 0xAC
{ 2164, 6, 3, 7, 1, -6 }, // 0xAD
{ 2167, 13, 13, 18, 2, -12 }, // 0xAE
{ 2189, 6, 2, 9, 2, -13 }, // 0xAF
{ 2191, 6, 6, 9, 2, -12 }, // 0xB0
{ 2196, 12, 11, 15, 2, -10 }, // 0xB1
{ 2213, 6, 8, 8, 1, -12 }, // 0xB2
{ 2219, 6, 8, 8, 1, -12 }, // 0xB3
{ 2225, 5, 3, 9, 3, -13 }, // 0xB4
{ 2227, 11, 14, 13, 2, -9 }, // 0xB5
{ 2247, 10, 15, 11, 1, -12 }, // 0xB6
{ 2266, 3, 3, 7, 2, -7 }, // 0xB7
{ 2268, 4, 4, 9, 2, 1 }, // 0xB8
{ 2270, 6, 8, 8, 1, -12 }, // 0xB9
{ 2276, 8, 10, 10, 1, -12 }, // 0xBA
{ 2286, 8, 8, 12, 2, -8 }, // 0xBB
{ 2294, 16, 13, 19, 1, -12 }, // 0xBC
{ 2320, 17, 14, 19, 1, -12 }, // 0xBD
{ 2350, 16, 13, 19, 1, -12 }, // 0xBE
{ 2376, 8, 14, 10, 1, -9 }, // 0xBF
{ 2390, 14, 16, 14, 0, -15 }, // 0xC0
{ 2418, 14, 16, 14, 0, -15 }, // 0xC1
{ 2446, 14, 16, 14, 0, -15 }, // 0xC2
{ 2474, 14, 17, 14, 0, -16 }, // 0xC3
{ 2504, 14, 16, 14, 0, -15 }, // 0xC4
{ 2532, 14, 17, 14, 0, -16 }, // 0xC5
{ 2562, 18, 13, 20, 0, -12 }, // 0xC6
{ 2592, 11, 17, 13, 1, -12 }, // 0xC7
{ 2616, 9, 16, 12, 2, -15 }, // 0xC8
{ 2634, 9, 16, 12, 2, -15 }, // 0xC9
{ 2652, 9, 16, 12, 2, -15 }, // 0xCA
{ 2670, 9, 16, 12, 2, -15 }, // 0xCB
{ 2688, 4, 16, 7, 1, -15 }, // 0xCC
{ 2696, 4, 16, 7, 2, -15 }, // 0xCD
{ 2704, 7, 16, 7, 0, -15 }, // 0xCE
{ 2718, 5, 16, 7, 1, -15 }, // 0xCF
{ 2728, 14, 13, 15, 0, -12 }, // 0xD0
{ 2751, 12, 17, 15, 2, -16 }, // 0xD1
{ 2777, 13, 16, 15, 1, -15 }, // 0xD2
{ 2803, 13, 16, 15, 1, -15 }, // 0xD3
{ 2829, 13, 16, 15, 1, -15 }, // 0xD4
{ 2855, 13, 17, 15, 1, -16 }, // 0xD5
{ 2883, 13, 16, 15, 1, -15 }, // 0xD6
{ 2909, 11, 11, 15, 2, -10 }, // 0xD7
{ 2925, 14, 13, 15, 0, -12 }, // 0xD8
{ 2948, 12, 16, 16, 2, -15 }, // 0xD9
{ 2972, 12, 16, 16, 2, -15 }, // 0xDA
{ 2996, 12, 16, 16, 2, -15 }, // 0xDB
{ 3020, 12, 16, 16, 2, -15 }, // 0xDC
{ 3044, 13, 16, 13, 0, -15 }, // 0xDD
{ 3070, 11, 13, 13, 2, -12 }, // 0xDE
{ 3088, 11, 14, 14, 2, -13 }, // 0xDF
{ 3108, 10, 14, 12, 1, -13 }, // 0xE0
{ 3126, 10, 14, 12, 1, -13 }, // 0xE1
{ 3144, 10, 14, 12, 1, -13 }, // 0xE2
{ 3162, 10, 14, 12, 1, -13 }, // 0xE3
{ 3180, 10, 14, 12, 1, -13 }, // 0xE4
{ 3198, 10, 16, 12, 1, -15 }, // 0xE5
{ 3218, 17, 10, 18, 1, -9 }, // 0xE6
{ 3240, 9, 14, 11, 1, -9 }, // 0xE7
{ 3256, 11, 14, 12, 1, -13 }, // 0xE8
{ 3276, 11, 14, 12, 1, -13 }, // 0xE9
{ 3296, 11, 14, 12, 1, -13 }, // 0xEA
{ 3316, 11, 14, 12, 1, -13 }, // 0xEB
{ 3336, 5, 14, 6, 0, -13 }, // 0xEC
{ 3345, 5, 14, 6, 2, -13 }, // 0xED
{ 3354, 7, 14, 6, 0, -13 }, // 0xEE
{ 3367, 5, 14, 6, 1, -13 }, // 0xEF
{ 3376, 11, 14, 12, 1, -13 }, // 0xF0
{ 3396, 10, 14, 13, 2, -13 }, // 0xF1
{ 3414, 11, 14, 12, 1, -13 }, // 0xF2
{ 3434, 11, 14, 12, 1, -13 }, // 0xF3
{ 3454, 11, 14, 12, 1, -13 }, // 0xF4
{ 3474, 11, 14, 12, 1, -13 }, // 0xF5
{ 3494, 11, 14, 12, 1, -13 }, // 0xF6
{ 3514, 11, 10, 15, 2, -10 }, // 0xF7
{ 3528, 11, 12, 12, 1, -10 }, // 0xF8
{ 3545, 10, 14, 13, 2, -13 }, // 0xF9
{ 3563, 10, 14, 13, 2, -13 }, // 0xFA
{ 3581, 10, 14, 13, 2, -13 }, // 0xFB
{ 3599, 10, 14, 13, 2, -13 }, // 0xFC
{ 3617, 11, 18, 12, 1, -13 }, // 0xFD
{ 3642, 11, 18, 13, 2, -13 }, // 0xFE
{ 3667, 11, 18, 12, 1, -13 } }; // 0xFF
const GFXfont DejaVuSans_Bold9pt8b PROGMEM = {
(uint8_t *)DejaVuSans_Bold9pt8bBitmaps,
(GFXglyph *)DejaVuSans_Bold9pt8bGlyphs,
0x20, 0xFF, 21 };
// Approx. 5267 bytes
#endif // DEJAVUSANSBOLD9PTLAT1__H
+541
View File
@@ -0,0 +1,541 @@
#ifndef DEJAVUSANSOBLIQUE9PTLAT1__H
#define DEJAVUSANSOBLIQUE9PTLAT1__H
const uint8_t DejaVuSans_Oblique9pt8bBitmaps[] PROGMEM = {
0x00, 0x18, 0xC6, 0x63, 0x18, 0xC6, 0x20, 0x01, 0x8C, 0x00, 0xCF, 0x3C,
0xF3, 0xCC, 0x06, 0x60, 0x23, 0x01, 0x10, 0x08, 0x87, 0xFF, 0xBF, 0xFC,
0x22, 0x01, 0x10, 0xFF, 0xF7, 0xFF, 0x84, 0x40, 0x22, 0x03, 0x30, 0x19,
0x80, 0x02, 0x00, 0x81, 0xF8, 0xFF, 0x74, 0x99, 0x06, 0x40, 0xF0, 0x0F,
0x02, 0x60, 0x9A, 0x2E, 0xFF, 0x1F, 0x81, 0x00, 0x40, 0x10, 0x00, 0x38,
0x09, 0x10, 0x48, 0x42, 0x21, 0x10, 0x84, 0xC2, 0x26, 0x07, 0x33, 0x81,
0x91, 0x04, 0x84, 0x22, 0x11, 0x08, 0x48, 0x22, 0x60, 0x70, 0x07, 0x00,
0xF8, 0x1C, 0x81, 0x80, 0x18, 0x01, 0xC0, 0x3E, 0x36, 0x62, 0xC3, 0x6C,
0x1C, 0xE1, 0xC7, 0xFC, 0x3E, 0x60, 0xFF, 0xC0, 0x06, 0x18, 0x61, 0x83,
0x0C, 0x18, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x08, 0x18, 0x10, 0x08, 0x18,
0x10, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x18, 0x30, 0xC1, 0x86, 0x18, 0x60,
0x11, 0x25, 0x51, 0xC3, 0x8A, 0xA4, 0x88, 0x06, 0x00, 0x60, 0x06, 0x00,
0x60, 0x06, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00,
0x60, 0x6F, 0x40, 0xFF, 0xC0, 0xF0, 0x01, 0x01, 0x80, 0x80, 0xC0, 0x40,
0x60, 0x30, 0x30, 0x18, 0x08, 0x0C, 0x04, 0x06, 0x02, 0x03, 0x00, 0x0F,
0x07, 0xE3, 0x1D, 0x83, 0x60, 0xF0, 0x3C, 0x0F, 0x03, 0xC1, 0xB0, 0x6E,
0x31, 0xF8, 0x3C, 0x00, 0x0E, 0x3E, 0x26, 0x06, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x18, 0x18, 0xFF, 0xFF, 0x0F, 0x0F, 0xF2, 0x1C, 0x03, 0x00, 0xC0,
0x70, 0x38, 0x1C, 0x0E, 0x07, 0x07, 0x03, 0xFC, 0xFF, 0x00, 0x0F, 0x87,
0xF2, 0x0C, 0x03, 0x01, 0x87, 0xC1, 0xF0, 0x06, 0x01, 0x80, 0x68, 0x3B,
0xFC, 0x7C, 0x00, 0x00, 0xC0, 0x70, 0x38, 0x16, 0x09, 0x84, 0x62, 0x31,
0x0C, 0xFF, 0xFF, 0xF0, 0x30, 0x18, 0x06, 0x00, 0x1F, 0xC7, 0xF3, 0x00,
0xC0, 0x3E, 0x0F, 0xC4, 0x38, 0x06, 0x01, 0x80, 0x68, 0x73, 0xF8, 0x7C,
0x00, 0x0F, 0x87, 0xF3, 0x85, 0xC0, 0x60, 0x3B, 0xCD, 0xFB, 0x86, 0xC1,
0xB0, 0x6C, 0x31, 0xFC, 0x3C, 0x00, 0xFF, 0xFF, 0xE0, 0x38, 0x0C, 0x07,
0x01, 0x80, 0xC0, 0x70, 0x18, 0x0E, 0x03, 0x01, 0x80, 0xE0, 0x00, 0x0F,
0x87, 0xF3, 0x8C, 0xC3, 0x31, 0x87, 0xC3, 0xF1, 0x8E, 0xC1, 0xB0, 0x6E,
0x39, 0xFC, 0x3E, 0x00, 0x0F, 0x0F, 0xE3, 0x0D, 0x83, 0x60, 0xD8, 0x77,
0xEC, 0xF6, 0x01, 0x80, 0xE8, 0x73, 0xF8, 0x78, 0x00, 0x33, 0x00, 0x00,
0x0C, 0xC0, 0x33, 0x00, 0x00, 0x06, 0x6C, 0x80, 0x00, 0x20, 0x3C, 0x1F,
0x1F, 0x0F, 0x81, 0xF0, 0x0F, 0x80, 0x3E, 0x01, 0xE0, 0x04, 0xFF, 0xFF,
0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x80, 0x1E, 0x01, 0xF0, 0x07,
0xC0, 0x3E, 0x07, 0xC3, 0xE3, 0xE0, 0xF0, 0x10, 0x00, 0x7D, 0xFE, 0x18,
0x30, 0xC3, 0x8E, 0x38, 0x60, 0xC0, 0x06, 0x0C, 0x00, 0x03, 0xF0, 0x0F,
0xFC, 0x1E, 0x0E, 0x38, 0x07, 0x70, 0x03, 0x61, 0xD3, 0xE3, 0xF3, 0xC6,
0x17, 0xC6, 0x26, 0xC7, 0xFC, 0xC3, 0xB8, 0xE0, 0x00, 0x60, 0x10, 0x78,
0x60, 0x3F, 0xC0, 0x0F, 0x80, 0x01, 0xC0, 0x1C, 0x03, 0xC0, 0x3C, 0x06,
0xC0, 0xE6, 0x0C, 0x61, 0xC6, 0x1F, 0xE3, 0xFE, 0x70, 0x76, 0x03, 0xE0,
0x30, 0x1F, 0xC3, 0xFC, 0xC1, 0x98, 0x33, 0x0C, 0x7F, 0x1F, 0xE3, 0x06,
0x60, 0xCC, 0x19, 0x87, 0x7F, 0xCF, 0xF0, 0x07, 0xE1, 0xFF, 0x38, 0x17,
0x00, 0x60, 0x0E, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0x60, 0x47,
0xFC, 0x1F, 0x80, 0x1F, 0xC0, 0xFF, 0x8C, 0x1C, 0x60, 0x33, 0x01, 0x98,
0x0D, 0xC0, 0x6C, 0x03, 0x60, 0x33, 0x03, 0x98, 0x39, 0xFF, 0x8F, 0xF0,
0x00, 0x1F, 0xE3, 0xFC, 0xC0, 0x18, 0x03, 0x00, 0x7F, 0x9F, 0xF3, 0x00,
0x60, 0x0C, 0x01, 0x80, 0x7F, 0xCF, 0xF8, 0x1F, 0xC7, 0xF3, 0x00, 0xC0,
0x30, 0x0F, 0xC7, 0xF1, 0x80, 0x60, 0x18, 0x06, 0x03, 0x00, 0xC0, 0x00,
0x07, 0xE1, 0xFF, 0x38, 0x27, 0x00, 0x60, 0x0C, 0x1E, 0xC1, 0xEC, 0x06,
0xC0, 0xCC, 0x0C, 0xE0, 0xC7, 0xF8, 0x3F, 0x00, 0x18, 0x18, 0xC0, 0xCC,
0x0C, 0x60, 0x63, 0x03, 0x1F, 0xF9, 0xFF, 0xCC, 0x0C, 0x60, 0x63, 0x03,
0x18, 0x19, 0x81, 0x8C, 0x0C, 0x00, 0x18, 0xCC, 0x63, 0x19, 0xCC, 0x63,
0x19, 0x8C, 0x00, 0x03, 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x18, 0x18, 0x38, 0xF0, 0xE0, 0x18, 0x30, 0xC3, 0x0C,
0x30, 0x67, 0x03, 0x60, 0x1E, 0x01, 0xF0, 0x0D, 0xC0, 0x67, 0x03, 0x18,
0x18, 0x61, 0x83, 0x8C, 0x0E, 0x00, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30,
0x70, 0x60, 0x60, 0x60, 0x60, 0xFF, 0xFF, 0x1C, 0x0E, 0x38, 0x3C, 0xF0,
0xF1, 0xA1, 0xE3, 0x66, 0xC6, 0xCD, 0x9D, 0xB3, 0x33, 0xCC, 0x63, 0x98,
0xC6, 0x31, 0x80, 0x66, 0x01, 0x8C, 0x03, 0x00, 0x1C, 0x18, 0xE0, 0xCD,
0x8C, 0x6C, 0x63, 0x63, 0x19, 0x99, 0xCD, 0xCC, 0x6C, 0x61, 0xE3, 0x0F,
0x18, 0x79, 0x81, 0x8C, 0x0C, 0x00, 0x07, 0xC0, 0xFF, 0x8E, 0x0C, 0xE0,
0x36, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x36, 0x03, 0x98, 0x38,
0xFF, 0x81, 0xF0, 0x00, 0x1F, 0x87, 0xF3, 0x0C, 0xC3, 0x30, 0xCC, 0x77,
0xF9, 0xFC, 0x60, 0x18, 0x06, 0x03, 0x00, 0xC0, 0x00, 0x07, 0xC0, 0xFF,
0x8E, 0x0C, 0xE0, 0x36, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x36,
0x03, 0x98, 0x38, 0xFF, 0x81, 0xF0, 0x01, 0xC0, 0x07, 0x00, 0x1F, 0x87,
0xF3, 0x0C, 0xC3, 0x30, 0xCC, 0x67, 0xF1, 0xFC, 0x63, 0x18, 0x66, 0x1B,
0x06, 0xC0, 0xC0, 0x07, 0xC3, 0xFC, 0xE0, 0x98, 0x03, 0x00, 0x7C, 0x03,
0xE0, 0x0E, 0x00, 0xC0, 0x1B, 0x07, 0x7F, 0xC7, 0xE0, 0xFF, 0xFF, 0xFF,
0x06, 0x00, 0x60, 0x0C, 0x00, 0xC0, 0x0C, 0x01, 0xC0, 0x18, 0x01, 0x80,
0x18, 0x03, 0x00, 0x30, 0x00, 0x30, 0x33, 0x03, 0x60, 0x66, 0x06, 0x60,
0x66, 0x06, 0xC0, 0x6C, 0x0C, 0xC0, 0xCC, 0x0C, 0xE3, 0x87, 0xF8, 0x3E,
0x00, 0xC0, 0x7C, 0x06, 0xC0, 0xE6, 0x0C, 0x61, 0x86, 0x38, 0x63, 0x06,
0x70, 0x36, 0x03, 0xC0, 0x3C, 0x03, 0x80, 0x38, 0x00, 0xC1, 0x81, 0xE0,
0xC1, 0xB0, 0xE0, 0xD8, 0x70, 0xCC, 0x6C, 0x66, 0x36, 0x63, 0x33, 0x31,
0x99, 0xB8, 0x58, 0xD8, 0x3C, 0x3C, 0x1C, 0x1C, 0x0E, 0x0E, 0x06, 0x06,
0x00, 0x38, 0x71, 0x86, 0x1C, 0xC0, 0xD8, 0x0F, 0x80, 0x70, 0x07, 0x00,
0xF0, 0x1D, 0x81, 0x98, 0x39, 0xC7, 0x0C, 0xE0, 0xE0, 0xC0, 0xCC, 0x31,
0x8E, 0x19, 0x83, 0x60, 0x78, 0x07, 0x00, 0xC0, 0x18, 0x03, 0x00, 0xC0,
0x18, 0x03, 0x00, 0x3F, 0xF9, 0xFF, 0xC0, 0x1C, 0x01, 0xC0, 0x1C, 0x01,
0xC0, 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xFF, 0xCF, 0xFE,
0x00, 0x1E, 0x3C, 0x61, 0x83, 0x06, 0x0C, 0x18, 0x60, 0xC1, 0x83, 0x06,
0x1C, 0x3C, 0x78, 0xDB, 0x64, 0x92, 0x6D, 0x92, 0x48, 0x1E, 0x3C, 0x38,
0x60, 0xC1, 0x83, 0x06, 0x18, 0x30, 0x60, 0xC1, 0x86, 0x3C, 0x78, 0x0E,
0x03, 0x60, 0xC6, 0x30, 0x6C, 0x06, 0xFF, 0xFF, 0xC0, 0xC6, 0x30, 0x1F,
0x1F, 0xC8, 0x60, 0x33, 0xFB, 0xFF, 0x0D, 0x8E, 0xFB, 0x3B, 0x80, 0x18,
0x06, 0x03, 0x80, 0xC0, 0x37, 0x8F, 0xF3, 0x9D, 0xC3, 0x60, 0xD8, 0x36,
0x19, 0x8E, 0xDF, 0x33, 0x80, 0x0F, 0x1F, 0xDC, 0x2C, 0x0C, 0x06, 0x03,
0x01, 0xC4, 0x7E, 0x1E, 0x00, 0x00, 0x60, 0x0C, 0x03, 0x00, 0x61, 0xEC,
0x7D, 0x9C, 0x73, 0x0C, 0xC1, 0x98, 0x33, 0x0E, 0x71, 0xCF, 0xF0, 0xF6,
0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xFF, 0xFF, 0xFC, 0x03, 0x86, 0x7F,
0x0F, 0x80, 0x0E, 0x3C, 0xC1, 0x8F, 0xDF, 0x8C, 0x30, 0x60, 0xC1, 0x83,
0x0C, 0x18, 0x00, 0x1E, 0xCF, 0xB7, 0x1D, 0x86, 0xC1, 0xB0, 0x6C, 0x1B,
0x8E, 0x7F, 0x1E, 0xC0, 0x32, 0x18, 0xFE, 0x1E, 0x00, 0x18, 0x06, 0x03,
0x80, 0xC0, 0x37, 0x8F, 0xF3, 0x9D, 0xC3, 0x60, 0xD8, 0x36, 0x0D, 0x86,
0xC1, 0xB0, 0x60, 0x18, 0xC0, 0x03, 0x19, 0xCC, 0x63, 0x19, 0xCC, 0x60,
0x03, 0x03, 0x00, 0x00, 0x06, 0x06, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x18,
0x18, 0x18, 0x18, 0x30, 0xF0, 0xE0, 0x18, 0x06, 0x03, 0x80, 0xC0, 0x31,
0x8C, 0xC3, 0x61, 0xF0, 0x78, 0x1F, 0x06, 0xE1, 0x98, 0xC3, 0x30, 0xE0,
0x18, 0xCE, 0x63, 0x18, 0xCC, 0x63, 0x18, 0xCC, 0x60, 0x37, 0x1C, 0x7F,
0x7D, 0xE7, 0x1B, 0x8C, 0x36, 0x18, 0x6C, 0x30, 0xD8, 0x61, 0xF1, 0x86,
0xC3, 0x0D, 0x86, 0x18, 0x37, 0x8F, 0xF7, 0x9D, 0xC3, 0x60, 0xD8, 0x36,
0x0F, 0x86, 0xC1, 0xB0, 0x60, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0, 0xF0,
0x3C, 0x1B, 0x8E, 0x7F, 0x0F, 0x80, 0x1B, 0xC3, 0xFC, 0xE3, 0x9C, 0x33,
0x06, 0x60, 0xCC, 0x33, 0x8E, 0x6F, 0x8D, 0xE1, 0x80, 0x30, 0x0C, 0x01,
0x80, 0x00, 0x1E, 0xCF, 0xB7, 0x19, 0x86, 0xC1, 0xB0, 0x6C, 0x3B, 0x8C,
0xFF, 0x1E, 0xC0, 0x30, 0x1C, 0x06, 0x01, 0x80, 0x37, 0x3F, 0x78, 0x70,
0x60, 0x60, 0x60, 0xE0, 0xC0, 0xC0, 0x1F, 0x1F, 0xD8, 0x2E, 0x03, 0xE0,
0x78, 0x0D, 0x06, 0xFE, 0x3E, 0x00, 0x30, 0xC6, 0x3F, 0xFD, 0x86, 0x18,
0xC3, 0x0C, 0x3E, 0x70, 0x60, 0xD8, 0x36, 0x1F, 0x06, 0xC1, 0xB0, 0x6C,
0x3B, 0x1E, 0xFF, 0x1E, 0xC0, 0xC1, 0xF0, 0x6E, 0x39, 0x8C, 0x66, 0x1B,
0x86, 0xC1, 0xF0, 0x38, 0x0C, 0x00, 0xC3, 0x1B, 0x1C, 0x6C, 0x73, 0x33,
0x4C, 0xCD, 0x63, 0x65, 0x8D, 0x9C, 0x3C, 0x70, 0x71, 0x81, 0x86, 0x00,
0x30, 0xC3, 0x30, 0x6C, 0x07, 0x00, 0xC0, 0x1C, 0x07, 0x81, 0x98, 0x63,
0x18, 0x30, 0x60, 0x76, 0x06, 0x30, 0xC3, 0x1C, 0x31, 0x83, 0x30, 0x1E,
0x01, 0xE0, 0x1C, 0x01, 0x80, 0x18, 0x03, 0x00, 0x70, 0x06, 0x00, 0x3F,
0xCF, 0xF0, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xFF, 0x3F, 0xC0,
0x03, 0x83, 0xC3, 0x81, 0x80, 0xC0, 0x60, 0x61, 0xF0, 0xF0, 0x1C, 0x06,
0x03, 0x03, 0x01, 0x80, 0xC0, 0x78, 0x1C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xF0, 0x1C, 0x0F, 0x01, 0x80, 0xC0, 0x60, 0x60, 0x38, 0x0F, 0x07, 0x86,
0x03, 0x03, 0x01, 0x80, 0xC0, 0xE1, 0xE0, 0xE0, 0x00, 0x7C, 0x3F, 0xFE,
0x1F, 0x00, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x03, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xFF, 0x00, 0x18, 0xC0, 0x02,
0x31, 0x8C, 0x63, 0x31, 0x8C, 0x00, 0x02, 0x01, 0x00, 0x81, 0xE3, 0xFB,
0x95, 0x91, 0x88, 0xC4, 0x62, 0x3A, 0x4F, 0xC3, 0xE0, 0x40, 0x20, 0x10,
0x03, 0xC0, 0xFC, 0x31, 0x06, 0x01, 0x80, 0x30, 0x1F, 0xC3, 0xF8, 0x18,
0x06, 0x00, 0xC0, 0x7F, 0x8F, 0xF0, 0x80, 0xB5, 0x9F, 0xC4, 0x46, 0x31,
0x11, 0xFC, 0xD6, 0x80, 0x80, 0x30, 0xE6, 0x18, 0xC6, 0x0D, 0xC1, 0xF0,
0xFF, 0x83, 0x00, 0x60, 0xFF, 0x81, 0x80, 0x60, 0x0C, 0x01, 0x80, 0xFF,
0xFC, 0x3F, 0xFF, 0x07, 0x83, 0xE0, 0xC0, 0x30, 0x04, 0x06, 0x83, 0x38,
0xC6, 0x39, 0x82, 0xC0, 0x40, 0x18, 0x06, 0x3F, 0x0F, 0x80, 0xDE, 0xC0,
0x0F, 0x81, 0x83, 0x18, 0x0C, 0x8F, 0x28, 0x80, 0xC8, 0x06, 0x40, 0x32,
0x01, 0x88, 0x8A, 0x38, 0x98, 0x0C, 0x60, 0xC0, 0xF8, 0x00, 0x7C, 0x04,
0xFE, 0x18, 0x71, 0xDD, 0x00, 0xFC, 0x08, 0x8C, 0xCC, 0xD9, 0x8C, 0xC3,
0x30, 0xCC, 0x24, 0xFF, 0xFF, 0xFC, 0x01, 0x80, 0x30, 0x06, 0xFF, 0xC0,
0x0F, 0x81, 0x83, 0x18, 0x0C, 0x9E, 0x28, 0x88, 0xC4, 0x46, 0x3C, 0x31,
0x21, 0x88, 0x8A, 0x46, 0x98, 0x0C, 0x60, 0xC0, 0xF8, 0x00, 0xFF, 0xF0,
0x7B, 0x38, 0x61, 0xCD, 0xE0, 0x06, 0x00, 0x60, 0x06, 0x0F, 0xFF, 0xFF,
0xF0, 0x60, 0x06, 0x00, 0x60, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x39, 0x10,
0x43, 0x11, 0x8F, 0x80, 0x7C, 0x13, 0x82, 0x08, 0x2F, 0x00, 0x33, 0x30,
0x18, 0x63, 0x0C, 0xE1, 0x98, 0x73, 0x0C, 0x61, 0x8C, 0x33, 0x8E, 0x7F,
0xED, 0xDD, 0x80, 0x30, 0x0C, 0x01, 0x80, 0x00, 0x1F, 0xBE, 0x7F, 0x3F,
0x3F, 0x97, 0xC9, 0xE4, 0x32, 0x13, 0x09, 0x04, 0x82, 0x43, 0x21, 0x30,
0x90, 0xF0, 0x11, 0xE0, 0x71, 0x12, 0x22, 0xF0, 0x3C, 0x8E, 0x0C, 0x18,
0x38, 0x9E, 0x00, 0xFC, 0x44, 0x33, 0x0C, 0xC3, 0x31, 0x9B, 0x33, 0x31,
0x10, 0x70, 0x0C, 0x20, 0x30, 0x40, 0xC1, 0x03, 0x02, 0x0C, 0x04, 0x30,
0x3C, 0x41, 0x81, 0x85, 0x06, 0x12, 0x18, 0x48, 0x61, 0xF9, 0x80, 0x26,
0x00, 0x40, 0x70, 0x0C, 0x20, 0x30, 0x40, 0xC1, 0x03, 0x02, 0x0C, 0x04,
0x30, 0x3C, 0x47, 0x01, 0x91, 0x06, 0x02, 0x18, 0x0C, 0x60, 0x21, 0x81,
0x86, 0x07, 0xC0, 0x7C, 0x06, 0x04, 0x0C, 0x38, 0x18, 0x08, 0x30, 0x08,
0x60, 0x08, 0xC0, 0xF0, 0x83, 0x01, 0x85, 0x03, 0x09, 0x06, 0x12, 0x0C,
0x3F, 0x18, 0x02, 0x30, 0x02, 0x06, 0x0C, 0x00, 0x30, 0xC1, 0x87, 0x1C,
0x61, 0x83, 0x06, 0x1F, 0xEF, 0x80, 0x01, 0x80, 0x0C, 0x00, 0x00, 0x1C,
0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x6C, 0x0E, 0x60, 0xC6, 0x1C, 0x61, 0xFE,
0x3F, 0xE7, 0x07, 0x60, 0x3E, 0x03, 0x00, 0x60, 0x0C, 0x00, 0x00, 0x1C,
0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x6C, 0x0E, 0x60, 0xC6, 0x1C, 0x61, 0xFE,
0x3F, 0xE7, 0x07, 0x60, 0x3E, 0x03, 0x00, 0xE0, 0x13, 0x00, 0x00, 0x1C,
0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x6C, 0x0E, 0x60, 0xC6, 0x1C, 0x61, 0xFE,
0x3F, 0xE7, 0x07, 0x60, 0x3E, 0x03, 0x01, 0x90, 0x26, 0x00, 0x00, 0x1C,
0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x6C, 0x0E, 0x60, 0xC6, 0x1C, 0x61, 0xFE,
0x3F, 0xE7, 0x07, 0x60, 0x3E, 0x03, 0x01, 0xB0, 0x1B, 0x00, 0x00, 0x1C,
0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x6C, 0x0E, 0x60, 0xC6, 0x1C, 0x61, 0xFE,
0x3F, 0xE7, 0x07, 0x60, 0x3E, 0x03, 0x01, 0xC0, 0x22, 0x02, 0x20, 0x22,
0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x7C, 0x06, 0xC0, 0xC6, 0x0C, 0x61, 0x86,
0x1F, 0xE3, 0xFE, 0x70, 0x36, 0x03, 0xE0, 0x30, 0x00, 0xFF, 0xE0, 0x3F,
0xFC, 0x06, 0xC0, 0x01, 0x98, 0x00, 0x73, 0x00, 0x0C, 0x7F, 0x83, 0x1F,
0xE0, 0xE3, 0x00, 0x1F, 0xE0, 0x07, 0xFC, 0x00, 0xC1, 0x80, 0x30, 0x7F,
0xCE, 0x0F, 0xF8, 0x07, 0xE1, 0xFF, 0x38, 0x17, 0x00, 0x60, 0x0E, 0x00,
0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0x60, 0x47, 0xFC, 0x1F, 0x80, 0x20,
0x02, 0x01, 0xC0, 0x06, 0x00, 0x60, 0x00, 0x0F, 0xF1, 0xFE, 0x60, 0x0C,
0x01, 0x80, 0x3F, 0xCF, 0xF9, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x3F, 0xE7,
0xFC, 0x01, 0x80, 0x60, 0x00, 0x0F, 0xF1, 0xFE, 0x60, 0x0C, 0x01, 0x80,
0x3F, 0xCF, 0xF9, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x3F, 0xE7, 0xFC, 0x03,
0x80, 0x98, 0x00, 0x0F, 0xF1, 0xFE, 0x60, 0x0C, 0x01, 0x80, 0x3F, 0xCF,
0xF9, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x3F, 0xE7, 0xFC, 0x06, 0xC0, 0xD8,
0x00, 0x0F, 0xF1, 0xFE, 0x60, 0x0C, 0x01, 0x80, 0x3F, 0xCF, 0xF9, 0x80,
0x30, 0x06, 0x00, 0xC0, 0x3F, 0xE7, 0xFC, 0x30, 0xC0, 0x31, 0x98, 0xC6,
0x33, 0x98, 0xC6, 0x33, 0x18, 0x0C, 0x30, 0x00, 0xC1, 0x86, 0x0C, 0x18,
0x30, 0xE1, 0x83, 0x06, 0x0C, 0x30, 0x60, 0x1C, 0x4C, 0x00, 0xC1, 0x86,
0x0C, 0x18, 0x30, 0xE1, 0x83, 0x06, 0x0C, 0x30, 0x60, 0x36, 0x6C, 0x00,
0xC1, 0x86, 0x0C, 0x18, 0x30, 0xE1, 0x83, 0x06, 0x0C, 0x30, 0x60, 0x1F,
0xC0, 0xFF, 0x8C, 0x1C, 0x60, 0x33, 0x01, 0xFF, 0x0F, 0xF0, 0x6C, 0x03,
0x60, 0x33, 0x03, 0x98, 0x39, 0xFF, 0x8F, 0xF0, 0x00, 0x03, 0x20, 0x26,
0x00, 0x00, 0x38, 0x31, 0xC1, 0x9B, 0x18, 0xD8, 0xC6, 0xC6, 0x33, 0x33,
0x9B, 0x98, 0xD8, 0xC3, 0xC6, 0x1E, 0x30, 0xF3, 0x03, 0x18, 0x18, 0x01,
0x80, 0x06, 0x00, 0x00, 0x0F, 0x81, 0xFF, 0x1C, 0x19, 0xC0, 0x6C, 0x03,
0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x6C, 0x07, 0x30, 0x71, 0xFF, 0x03,
0xE0, 0x00, 0x60, 0x06, 0x00, 0x00, 0x0F, 0x81, 0xFF, 0x1C, 0x19, 0xC0,
0x6C, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x6C, 0x07, 0x30, 0x71,
0xFF, 0x03, 0xE0, 0x00, 0xE0, 0x09, 0x80, 0x00, 0x0F, 0x81, 0xFF, 0x1C,
0x19, 0xC0, 0x6C, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x6C, 0x07,
0x30, 0x71, 0xFF, 0x03, 0xE0, 0x01, 0x90, 0x13, 0x00, 0x00, 0x0F, 0x81,
0xFF, 0x1C, 0x19, 0xC0, 0x6C, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80,
0x6C, 0x07, 0x30, 0x71, 0xFF, 0x03, 0xE0, 0x01, 0xB0, 0x0D, 0x80, 0x00,
0x0F, 0x81, 0xFF, 0x1C, 0x19, 0xC0, 0x6C, 0x03, 0xC0, 0x1E, 0x00, 0xF0,
0x07, 0x80, 0x6C, 0x07, 0x30, 0x71, 0xFF, 0x03, 0xE0, 0x40, 0xB8, 0x77,
0x38, 0xFC, 0x1E, 0x07, 0x83, 0xF1, 0xCE, 0xE1, 0xD0, 0x20, 0x03, 0xE2,
0x1F, 0xE8, 0x70, 0x61, 0xC1, 0xE3, 0x06, 0xCE, 0x19, 0x98, 0xE3, 0x33,
0x0E, 0x6C, 0x18, 0xF0, 0x71, 0xC1, 0xC2, 0xFF, 0x08, 0xF8, 0x00, 0x06,
0x00, 0x30, 0x00, 0x03, 0x03, 0x30, 0x36, 0x06, 0x60, 0x66, 0x06, 0x60,
0x6C, 0x06, 0xC0, 0xCC, 0x0C, 0xC0, 0xCE, 0x38, 0x7F, 0x83, 0xE0, 0x01,
0x80, 0x30, 0x00, 0x03, 0x03, 0x30, 0x36, 0x06, 0x60, 0x66, 0x06, 0x60,
0x6C, 0x06, 0xC0, 0xCC, 0x0C, 0xC0, 0xCE, 0x38, 0x7F, 0x83, 0xE0, 0x03,
0x80, 0x4C, 0x00, 0x03, 0x03, 0x30, 0x36, 0x06, 0x60, 0x66, 0x06, 0x60,
0x6C, 0x06, 0xC0, 0xCC, 0x0C, 0xC0, 0xCE, 0x38, 0x7F, 0x83, 0xE0, 0x06,
0xC0, 0x6C, 0x00, 0x03, 0x03, 0x30, 0x36, 0x06, 0x60, 0x66, 0x06, 0x60,
0x6C, 0x06, 0xC0, 0xCC, 0x0C, 0xC0, 0xCE, 0x38, 0x7F, 0x83, 0xE0, 0x03,
0x00, 0xC0, 0x00, 0x60, 0x66, 0x18, 0xC7, 0x0C, 0xC1, 0xB0, 0x3C, 0x03,
0x80, 0x60, 0x0C, 0x01, 0x80, 0x60, 0x0C, 0x01, 0x80, 0x18, 0x06, 0x03,
0xF8, 0xFF, 0x30, 0xCC, 0x37, 0x0D, 0x87, 0x7F, 0x9F, 0xC6, 0x03, 0x00,
0xC0, 0x00, 0x0F, 0x87, 0xF3, 0x8C, 0xC3, 0x33, 0x0D, 0x83, 0x71, 0x8E,
0x61, 0xD8, 0x36, 0x0D, 0xC7, 0xDF, 0xB7, 0xC0, 0x18, 0x06, 0x01, 0x80,
0x01, 0xF1, 0xFC, 0x86, 0x03, 0x3F, 0xBF, 0xF0, 0xD8, 0xEF, 0xB3, 0xB8,
0x01, 0x80, 0xC0, 0x60, 0x00, 0x1F, 0x0F, 0xE2, 0x18, 0x06, 0x3F, 0x9F,
0xEC, 0x33, 0x1C, 0xFB, 0x1D, 0xC0, 0x07, 0x06, 0x86, 0x60, 0x01, 0xF1,
0xFC, 0x86, 0x03, 0x3F, 0xBF, 0xF0, 0xD8, 0xEF, 0xB3, 0xB8, 0x0C, 0x89,
0x80, 0x00, 0x01, 0xF1, 0xFC, 0x86, 0x03, 0x3F, 0xBF, 0xF0, 0xD8, 0xEF,
0xB3, 0xB8, 0x1B, 0x0D, 0x80, 0x00, 0x01, 0xF1, 0xFC, 0x86, 0x03, 0x3F,
0xBF, 0xF0, 0xD8, 0xEF, 0xB3, 0xB8, 0x07, 0x04, 0x42, 0x21, 0x10, 0x70,
0x00, 0x7C, 0x7F, 0x21, 0x80, 0xCF, 0xEF, 0xFC, 0x36, 0x3B, 0xEC, 0xEE,
0x1F, 0x1C, 0x3F, 0xFE, 0x21, 0xC3, 0x01, 0x83, 0x3F, 0xFF, 0x7F, 0xFF,
0xC1, 0x80, 0xC3, 0x86, 0xFC, 0xFC, 0x78, 0x78, 0x0F, 0x1F, 0xDC, 0x2C,
0x0C, 0x06, 0x03, 0x01, 0xC4, 0x7E, 0x1E, 0x02, 0x01, 0x07, 0x00, 0x18,
0x03, 0x00, 0x60, 0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xFF, 0xFF, 0xFC,
0x03, 0x86, 0x7F, 0x0F, 0x80, 0x01, 0x80, 0xC0, 0x60, 0x00, 0x0F, 0x0F,
0xE7, 0x1D, 0x83, 0xFF, 0xFF, 0xFC, 0x03, 0x86, 0x7F, 0x0F, 0x80, 0x07,
0x03, 0x41, 0x98, 0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xFF, 0xFF, 0xFC,
0x03, 0x86, 0x7F, 0x0F, 0x80, 0x1B, 0x06, 0xC0, 0x00, 0x00, 0x0F, 0x0F,
0xE7, 0x1D, 0x83, 0xFF, 0xFF, 0xFC, 0x03, 0x86, 0x7F, 0x0F, 0x80, 0xC6,
0x30, 0x33, 0x76, 0x66, 0x6E, 0xCC, 0x0C, 0x30, 0xC0, 0x03, 0x06, 0x1C,
0x30, 0x60, 0xC1, 0x87, 0x0C, 0x18, 0x00, 0x39, 0xAC, 0xC0, 0x30, 0xC7,
0x18, 0x61, 0x86, 0x38, 0xC3, 0x00, 0xDE, 0xC0, 0x03, 0x19, 0xCC, 0x63,
0x19, 0xCC, 0x60, 0x1C, 0x87, 0x8F, 0x80, 0xC1, 0xF1, 0xFD, 0xC6, 0xC3,
0xC1, 0xE0, 0xF0, 0xD8, 0xE7, 0xE1, 0xE0, 0x0C, 0x84, 0xC0, 0x00, 0x00,
0x37, 0x8F, 0xF7, 0x9D, 0xC3, 0x60, 0xD8, 0x36, 0x0F, 0x86, 0xC1, 0xB0,
0x60, 0x18, 0x03, 0x00, 0x60, 0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0,
0xF0, 0x3C, 0x1B, 0x8E, 0x7F, 0x0F, 0x80, 0x01, 0x80, 0xC0, 0x60, 0x00,
0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0, 0xF0, 0x3C, 0x1B, 0x8E, 0x7F, 0x0F,
0x80, 0x07, 0x03, 0x41, 0x98, 0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0,
0xF0, 0x3C, 0x1B, 0x8E, 0x7F, 0x0F, 0x80, 0x0C, 0x84, 0xC0, 0x00, 0x00,
0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0, 0xF0, 0x3C, 0x1B, 0x8E, 0x7F, 0x0F,
0x80, 0x1B, 0x06, 0xC0, 0x00, 0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0,
0xF0, 0x3C, 0x1B, 0x8E, 0x7F, 0x0F, 0x80, 0x06, 0x00, 0x60, 0x00, 0x0F,
0xFF, 0xFF, 0xF0, 0x00, 0x06, 0x00, 0x60, 0x00, 0x01, 0xEC, 0x7F, 0x1C,
0xE7, 0x2C, 0xC9, 0x99, 0x33, 0x4E, 0x73, 0x8F, 0xE3, 0x78, 0x00, 0x00,
0x18, 0x03, 0x00, 0x60, 0x00, 0x60, 0xD8, 0x36, 0x1F, 0x06, 0xC1, 0xB0,
0x6C, 0x3B, 0x1E, 0xFF, 0x1E, 0xC0, 0x01, 0x80, 0xC0, 0x60, 0x00, 0x60,
0xD8, 0x36, 0x1F, 0x06, 0xC1, 0xB0, 0x6C, 0x3B, 0x1E, 0xFF, 0x1E, 0xC0,
0x07, 0x03, 0x41, 0x98, 0x00, 0x60, 0xD8, 0x36, 0x1F, 0x06, 0xC1, 0xB0,
0x6C, 0x3B, 0x1E, 0xFF, 0x1E, 0xC0, 0x1B, 0x06, 0xC0, 0x00, 0x00, 0x60,
0xD8, 0x36, 0x1F, 0x06, 0xC1, 0xB0, 0x6C, 0x3B, 0x1E, 0xFF, 0x1E, 0xC0,
0x00, 0xC0, 0x18, 0x03, 0x00, 0x00, 0x60, 0x76, 0x06, 0x30, 0xC3, 0x1C,
0x31, 0x83, 0x30, 0x1E, 0x01, 0xE0, 0x1C, 0x01, 0x80, 0x18, 0x03, 0x00,
0x70, 0x06, 0x00, 0x18, 0x03, 0x00, 0x60, 0x18, 0x03, 0x3C, 0x6F, 0x8E,
0x39, 0x83, 0x30, 0x6C, 0x0D, 0x83, 0x38, 0xE7, 0xF8, 0xDE, 0x18, 0x06,
0x00, 0xC0, 0x18, 0x00, 0x0D, 0x80, 0xD8, 0x00, 0x00, 0x00, 0x60, 0x76,
0x06, 0x30, 0xC3, 0x1C, 0x31, 0x83, 0x30, 0x1E, 0x01, 0xE0, 0x1C, 0x01,
0x80, 0x18, 0x03, 0x00, 0x70, 0x06, 0x00 };
const GFXglyph DejaVuSans_Oblique9pt8bGlyphs[] PROGMEM = {
{ 0, 1, 1, 6, 0, 0 }, // 0x20 ' '
{ 1, 5, 13, 7, 0, -12 }, // 0x21 '!'
{ 10, 6, 5, 8, 2, -12 }, // 0x22 '"'
{ 14, 13, 14, 15, 1, -13 }, // 0x23 '#'
{ 37, 10, 17, 11, 1, -13 }, // 0x24 '$'
{ 59, 14, 13, 17, 2, -12 }, // 0x25 '%'
{ 82, 12, 13, 14, 0, -12 }, // 0x26 '&'
{ 102, 2, 5, 5, 2, -12 }, // 0x27 '''
{ 104, 7, 16, 7, 1, -13 }, // 0x28 '('
{ 118, 7, 16, 7, -1, -13 }, // 0x29 ')'
{ 132, 7, 8, 9, 1, -12 }, // 0x2A '*'
{ 139, 12, 12, 15, 2, -11 }, // 0x2B '+'
{ 157, 3, 4, 6, 1, -1 }, // 0x2C ','
{ 159, 5, 2, 7, 1, -5 }, // 0x2D '-'
{ 161, 2, 2, 6, 1, -1 }, // 0x2E '.'
{ 162, 9, 15, 6, -1, -12 }, // 0x2F '/'
{ 179, 10, 13, 11, 1, -12 }, // 0x30 '0'
{ 196, 8, 13, 11, 1, -12 }, // 0x31 '1'
{ 209, 10, 13, 11, 0, -12 }, // 0x32 '2'
{ 226, 10, 13, 11, 0, -12 }, // 0x33 '3'
{ 243, 10, 13, 11, 0, -12 }, // 0x34 '4'
{ 260, 10, 13, 11, 0, -12 }, // 0x35 '5'
{ 277, 10, 13, 11, 1, -12 }, // 0x36 '6'
{ 294, 10, 13, 11, 2, -12 }, // 0x37 '7'
{ 311, 10, 13, 11, 1, -12 }, // 0x38 '8'
{ 328, 10, 13, 11, 1, -12 }, // 0x39 '9'
{ 345, 4, 9, 6, 1, -8 }, // 0x3A ':'
{ 350, 4, 11, 6, 1, -8 }, // 0x3B ';'
{ 356, 11, 10, 15, 2, -9 }, // 0x3C '<'
{ 370, 11, 6, 15, 2, -8 }, // 0x3D '='
{ 379, 11, 10, 15, 2, -9 }, // 0x3E '>'
{ 393, 7, 13, 10, 2, -12 }, // 0x3F '?'
{ 405, 16, 16, 18, 1, -12 }, // 0x40 '@'
{ 437, 12, 13, 12, -1, -12 }, // 0x41 'A'
{ 457, 11, 13, 12, 0, -12 }, // 0x42 'B'
{ 475, 12, 13, 13, 0, -12 }, // 0x43 'C'
{ 495, 13, 13, 14, 0, -12 }, // 0x44 'D'
{ 517, 11, 13, 11, 0, -12 }, // 0x45 'E'
{ 535, 10, 13, 10, 0, -12 }, // 0x46 'F'
{ 552, 12, 13, 14, 0, -12 }, // 0x47 'G'
{ 572, 13, 13, 14, 0, -12 }, // 0x48 'H'
{ 594, 5, 13, 5, 0, -12 }, // 0x49 'I'
{ 603, 8, 17, 5, -3, -12 }, // 0x4A 'J'
{ 620, 13, 13, 12, 0, -12 }, // 0x4B 'K'
{ 642, 8, 13, 10, 0, -12 }, // 0x4C 'L'
{ 655, 15, 13, 16, 0, -12 }, // 0x4D 'M'
{ 680, 13, 13, 13, 0, -12 }, // 0x4E 'N'
{ 702, 13, 13, 14, 0, -12 }, // 0x4F 'O'
{ 724, 10, 13, 11, 0, -12 }, // 0x50 'P'
{ 741, 13, 15, 14, 0, -12 }, // 0x51 'Q'
{ 766, 10, 13, 13, 0, -12 }, // 0x52 'R'
{ 783, 11, 13, 11, 0, -12 }, // 0x53 'S'
{ 801, 12, 13, 11, 1, -12 }, // 0x54 'T'
{ 821, 12, 13, 13, 1, -12 }, // 0x55 'U'
{ 841, 12, 13, 12, 1, -12 }, // 0x56 'V'
{ 861, 17, 13, 18, 2, -12 }, // 0x57 'W'
{ 889, 12, 13, 12, 0, -12 }, // 0x58 'X'
{ 909, 11, 13, 11, 1, -12 }, // 0x59 'Y'
{ 927, 13, 13, 12, 0, -12 }, // 0x5A 'Z'
{ 949, 7, 16, 7, 1, -13 }, // 0x5B '['
{ 963, 3, 15, 6, 2, -12 }, // 0x5C '\'
{ 969, 7, 16, 7, -1, -13 }, // 0x5D ']'
{ 983, 11, 5, 15, 2, -12 }, // 0x5E '^'
{ 990, 9, 2, 9, 0, 3 }, // 0x5F '_'
{ 993, 4, 3, 9, 3, -13 }, // 0x60 '`'
{ 995, 9, 10, 10, 1, -9 }, // 0x61 'a'
{ 1007, 10, 14, 11, 1, -13 }, // 0x62 'b'
{ 1025, 9, 10, 10, 1, -9 }, // 0x63 'c'
{ 1037, 11, 14, 11, 1, -13 }, // 0x64 'd'
{ 1057, 10, 10, 11, 1, -9 }, // 0x65 'e'
{ 1070, 7, 14, 6, 1, -13 }, // 0x66 'f'
{ 1083, 10, 14, 11, 1, -9 }, // 0x67 'g'
{ 1101, 10, 14, 11, 1, -13 }, // 0x68 'h'
{ 1119, 5, 14, 5, 1, -13 }, // 0x69 'i'
{ 1128, 8, 18, 5, -2, -13 }, // 0x6A 'j'
{ 1146, 10, 14, 10, 1, -13 }, // 0x6B 'k'
{ 1164, 5, 14, 5, 1, -13 }, // 0x6C 'l'
{ 1173, 15, 10, 17, 1, -9 }, // 0x6D 'm'
{ 1192, 10, 10, 11, 1, -9 }, // 0x6E 'n'
{ 1205, 10, 10, 11, 1, -9 }, // 0x6F 'o'
{ 1218, 11, 14, 11, 0, -9 }, // 0x70 'p'
{ 1238, 10, 14, 11, 1, -9 }, // 0x71 'q'
{ 1256, 8, 10, 8, 0, -9 }, // 0x72 'r'
{ 1266, 9, 10, 9, 0, -9 }, // 0x73 's'
{ 1278, 6, 13, 7, 1, -12 }, // 0x74 't'
{ 1288, 10, 10, 11, 1, -9 }, // 0x75 'u'
{ 1301, 10, 10, 10, 1, -9 }, // 0x76 'v'
{ 1314, 14, 10, 14, 1, -9 }, // 0x77 'w'
{ 1332, 11, 10, 10, 0, -9 }, // 0x78 'x'
{ 1346, 12, 14, 11, 0, -9 }, // 0x79 'y'
{ 1367, 10, 10, 9, 0, -9 }, // 0x7A 'z'
{ 1380, 9, 17, 11, 2, -13 }, // 0x7B '{'
{ 1400, 2, 18, 6, 2, -13 }, // 0x7C '|'
{ 1405, 9, 17, 11, 0, -13 }, // 0x7D '}'
{ 1425, 11, 3, 15, 2, -7 }, // 0x7E '~'
{ 1430, 9, 16, 11, 1, -12 }, // 0x7F
{ 1448, 9, 16, 11, 1, -12 }, // 0x80
{ 1466, 9, 16, 11, 1, -12 }, // 0x81
{ 1484, 9, 16, 11, 1, -12 }, // 0x82
{ 1502, 9, 16, 11, 1, -12 }, // 0x83
{ 1520, 9, 16, 11, 1, -12 }, // 0x84
{ 1538, 9, 16, 11, 1, -12 }, // 0x85
{ 1556, 9, 16, 11, 1, -12 }, // 0x86
{ 1574, 9, 16, 11, 1, -12 }, // 0x87
{ 1592, 9, 16, 11, 1, -12 }, // 0x88
{ 1610, 9, 16, 11, 1, -12 }, // 0x89
{ 1628, 9, 16, 11, 1, -12 }, // 0x8A
{ 1646, 9, 16, 11, 1, -12 }, // 0x8B
{ 1664, 9, 16, 11, 1, -12 }, // 0x8C
{ 1682, 9, 16, 11, 1, -12 }, // 0x8D
{ 1700, 9, 16, 11, 1, -12 }, // 0x8E
{ 1718, 9, 16, 11, 1, -12 }, // 0x8F
{ 1736, 9, 16, 11, 1, -12 }, // 0x90
{ 1754, 9, 16, 11, 1, -12 }, // 0x91
{ 1772, 9, 16, 11, 1, -12 }, // 0x92
{ 1790, 9, 16, 11, 1, -12 }, // 0x93
{ 1808, 9, 16, 11, 1, -12 }, // 0x94
{ 1826, 9, 16, 11, 1, -12 }, // 0x95
{ 1844, 9, 16, 11, 1, -12 }, // 0x96
{ 1862, 9, 16, 11, 1, -12 }, // 0x97
{ 1880, 9, 16, 11, 1, -12 }, // 0x98
{ 1898, 9, 16, 11, 1, -12 }, // 0x99
{ 1916, 9, 16, 11, 1, -12 }, // 0x9A
{ 1934, 9, 16, 11, 1, -12 }, // 0x9B
{ 1952, 9, 16, 11, 1, -12 }, // 0x9C
{ 1970, 9, 16, 11, 1, -12 }, // 0x9D
{ 1988, 9, 16, 11, 1, -12 }, // 0x9E
{ 2006, 9, 16, 11, 1, -12 }, // 0x9F
{ 2024, 1, 1, 6, 0, 0 }, // 0xA0
{ 2025, 5, 13, 7, 2, -9 }, // 0xA1
{ 2034, 9, 16, 11, 1, -12 }, // 0xA2
{ 2052, 11, 13, 11, 0, -12 }, // 0xA3
{ 2070, 9, 9, 11, 1, -9 }, // 0xA4
{ 2081, 11, 13, 11, 1, -12 }, // 0xA5
{ 2099, 2, 16, 6, 2, -12 }, // 0xA6
{ 2103, 10, 15, 9, -1, -12 }, // 0xA7
{ 2122, 5, 2, 9, 3, -13 }, // 0xA8
{ 2124, 13, 13, 18, 2, -12 }, // 0xA9
{ 2146, 7, 9, 8, 1, -12 }, // 0xAA
{ 2154, 9, 8, 11, 1, -8 }, // 0xAB
{ 2163, 11, 5, 15, 2, -7 }, // 0xAC
{ 2170, 5, 2, 7, 1, -5 }, // 0xAD
{ 2172, 13, 13, 18, 2, -12 }, // 0xAE
{ 2194, 6, 2, 9, 3, -12 }, // 0xAF
{ 2196, 6, 6, 9, 2, -12 }, // 0xB0
{ 2201, 12, 11, 15, 2, -10 }, // 0xB1
{ 2218, 6, 7, 7, 0, -12 }, // 0xB2
{ 2224, 6, 7, 7, 0, -12 }, // 0xB3
{ 2230, 5, 3, 9, 5, -13 }, // 0xB4
{ 2232, 11, 14, 11, 0, -9 }, // 0xB5
{ 2252, 9, 15, 11, 1, -12 }, // 0xB6
{ 2269, 2, 2, 6, 2, -6 }, // 0xB7
{ 2270, 4, 3, 9, 1, 1 }, // 0xB8
{ 2272, 4, 7, 7, 1, -12 }, // 0xB9
{ 2276, 7, 9, 8, 1, -12 }, // 0xBA
{ 2284, 9, 8, 11, 1, -8 }, // 0xBB
{ 2293, 15, 13, 17, 1, -12 }, // 0xBC
{ 2318, 15, 13, 17, 1, -12 }, // 0xBD
{ 2343, 16, 13, 17, 0, -12 }, // 0xBE
{ 2369, 7, 14, 10, 0, -9 }, // 0xBF
{ 2382, 12, 16, 12, -1, -15 }, // 0xC0
{ 2406, 12, 16, 12, -1, -15 }, // 0xC1
{ 2430, 12, 16, 12, -1, -15 }, // 0xC2
{ 2454, 12, 16, 12, -1, -15 }, // 0xC3
{ 2478, 12, 16, 12, -1, -15 }, // 0xC4
{ 2502, 12, 17, 12, -1, -16 }, // 0xC5
{ 2528, 19, 13, 18, -1, -12 }, // 0xC6
{ 2559, 12, 16, 13, 0, -12 }, // 0xC7
{ 2583, 11, 16, 11, 0, -15 }, // 0xC8
{ 2605, 11, 16, 11, 0, -15 }, // 0xC9
{ 2627, 11, 16, 11, 0, -15 }, // 0xCA
{ 2649, 11, 16, 11, 0, -15 }, // 0xCB
{ 2671, 5, 16, 5, 0, -15 }, // 0xCC
{ 2681, 7, 16, 5, 0, -15 }, // 0xCD
{ 2695, 7, 16, 5, 0, -15 }, // 0xCE
{ 2709, 7, 16, 5, 0, -15 }, // 0xCF
{ 2723, 13, 13, 14, 0, -12 }, // 0xD0
{ 2745, 13, 16, 13, 0, -15 }, // 0xD1
{ 2771, 13, 16, 14, 0, -15 }, // 0xD2
{ 2797, 13, 16, 14, 0, -15 }, // 0xD3
{ 2823, 13, 16, 14, 0, -15 }, // 0xD4
{ 2849, 13, 16, 14, 0, -15 }, // 0xD5
{ 2875, 13, 16, 14, 0, -15 }, // 0xD6
{ 2901, 10, 10, 15, 2, -10 }, // 0xD7
{ 2914, 15, 13, 14, -1, -12 }, // 0xD8
{ 2939, 12, 16, 13, 1, -15 }, // 0xD9
{ 2963, 12, 16, 13, 1, -15 }, // 0xDA
{ 2987, 12, 16, 13, 1, -15 }, // 0xDB
{ 3011, 12, 16, 13, 1, -15 }, // 0xDC
{ 3035, 11, 16, 11, 1, -15 }, // 0xDD
{ 3057, 10, 13, 11, 0, -12 }, // 0xDE
{ 3074, 10, 14, 11, 0, -13 }, // 0xDF
{ 3092, 9, 14, 10, 1, -13 }, // 0xE0
{ 3108, 10, 14, 10, 1, -13 }, // 0xE1
{ 3126, 9, 14, 10, 1, -13 }, // 0xE2
{ 3142, 9, 14, 10, 1, -13 }, // 0xE3
{ 3158, 9, 14, 10, 1, -13 }, // 0xE4
{ 3174, 9, 16, 10, 1, -15 }, // 0xE5
{ 3192, 16, 10, 18, 1, -9 }, // 0xE6
{ 3212, 9, 13, 10, 1, -9 }, // 0xE7
{ 3227, 10, 14, 11, 1, -13 }, // 0xE8
{ 3245, 10, 14, 11, 1, -13 }, // 0xE9
{ 3263, 10, 14, 11, 1, -13 }, // 0xEA
{ 3281, 10, 14, 11, 1, -13 }, // 0xEB
{ 3299, 4, 14, 5, 1, -13 }, // 0xEC
{ 3306, 7, 14, 5, 1, -13 }, // 0xED
{ 3319, 6, 14, 5, 1, -13 }, // 0xEE
{ 3330, 5, 14, 5, 1, -13 }, // 0xEF
{ 3339, 9, 14, 11, 1, -13 }, // 0xF0
{ 3355, 10, 14, 11, 1, -13 }, // 0xF1
{ 3373, 10, 14, 11, 1, -13 }, // 0xF2
{ 3391, 10, 14, 11, 1, -13 }, // 0xF3
{ 3409, 10, 14, 11, 1, -13 }, // 0xF4
{ 3427, 10, 14, 11, 1, -13 }, // 0xF5
{ 3445, 10, 14, 11, 1, -13 }, // 0xF6
{ 3463, 12, 8, 15, 2, -9 }, // 0xF7
{ 3475, 11, 12, 11, 0, -10 }, // 0xF8
{ 3492, 10, 14, 11, 1, -13 }, // 0xF9
{ 3510, 10, 14, 11, 1, -13 }, // 0xFA
{ 3528, 10, 14, 11, 1, -13 }, // 0xFB
{ 3546, 10, 14, 11, 1, -13 }, // 0xFC
{ 3564, 12, 18, 11, 0, -13 }, // 0xFD
{ 3591, 11, 18, 12, 0, -13 }, // 0xFE
{ 3616, 12, 18, 11, 0, -13 } }; // 0xFF
const GFXfont DejaVuSans_Oblique9pt8b PROGMEM = {
(uint8_t *)DejaVuSans_Oblique9pt8bBitmaps,
(GFXglyph *)DejaVuSans_Oblique9pt8bGlyphs,
0x20, 0xFF, 21 };
// Approx. 5218 bytes
#endif // DEJAVUSANSOBLIQUE9PTLAT1__H
+131
View File
@@ -0,0 +1,131 @@
#!/usr/bin/env python3
import sys
import re
def convert_bdf_to_adafruit(bdf_filename, start_char=32, end_char=255):
"""Convert BDF font to Adafruit GFX format"""
with open(bdf_filename, 'r') as f:
lines = f.readlines()
# Parse BDF header
font_name = "Font"
font_size = 9
for line in lines:
if line.startswith('FONT '):
# Extract font name
parts = line.split('-')
if len(parts) > 2:
font_name = parts[2].replace(' ', '')
elif line.startswith('PIXEL_SIZE '):
font_size = int(line.split()[1])
# Clean font name
font_name = re.sub(r'[^a-zA-Z0-9]', '', font_name)
header_name = f"{font_name}{font_size}ptLat1"
print(f"const uint8_t {header_name}Bitmaps[] PROGMEM = {{")
# Parse characters
char_data = {}
i = 0
while i < len(lines):
line = lines[i].strip()
if line.startswith('STARTCHAR'):
# Parse character
char_code = None
width = 0
height = 0
x_offset = 0
y_offset = 0
advance = 0
bitmap_data = []
i += 1
while i < len(lines) and not lines[i].strip().startswith('ENDCHAR'):
line = lines[i].strip()
if line.startswith('ENCODING '):
char_code = int(line.split()[1])
elif line.startswith('DWIDTH '):
advance = int(line.split()[1])
elif line.startswith('BBX '):
parts = line.split()
width = int(parts[1])
height = int(parts[2])
x_offset = int(parts[3])
y_offset = int(parts[4])
elif line.startswith('BITMAP'):
i += 1
while i < len(lines) and not lines[i].strip().startswith('ENDCHAR'):
hex_line = lines[i].strip()
if hex_line:
bitmap_data.append(hex_line)
i += 1
break
i += 1
if char_code is not None and start_char <= char_code <= end_char:
char_data[char_code] = {
'width': width,
'height': height,
'advance': advance,
'x_offset': x_offset,
'y_offset': y_offset,
'bitmap': bitmap_data
}
i += 1
# Generate bitmap data
bitmap_bytes = []
for char_code in sorted(char_data.keys()):
char = char_data[char_code]
for hex_line in char['bitmap']:
# Convert hex string to bytes
for i in range(0, len(hex_line), 2):
if i + 1 < len(hex_line):
byte_val = int(hex_line[i:i+2], 16)
bitmap_bytes.append(f"0x{byte_val:02X}")
# Print bitmap data
for i, byte_val in enumerate(bitmap_bytes):
if i % 12 == 0:
print("\n ", end="")
print(f"{byte_val}", end="")
if i < len(bitmap_bytes) - 1:
print(", ", end="")
print("\n};")
print()
# Generate glyph data
print(f"const GFXglyph {header_name}Glyphs[] PROGMEM = {{")
offset = 0
for char_code in sorted(char_data.keys()):
char = char_data[char_code]
bitmap_size = len(char['bitmap']) * ((char['width'] + 7) // 8)
print(f" {{ {offset}, {char['width']}, {char['height']}, {char['advance']}, {char['x_offset']}, {char['y_offset']} }}", end="")
if char_code < max(char_data.keys()):
print(",")
else:
print("")
offset += bitmap_size
print("};")
print()
# Generate font structure
first_char = min(char_data.keys())
last_char = max(char_data.keys())
print(f"const GFXfont {header_name} PROGMEM = {{")
print(f" (uint8_t *){header_name}Bitmaps,")
print(f" (GFXglyph *){header_name}Glyphs,")
print(f" {first_char}, {last_char}, {font_size} }};")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python3 bdf2adafruit.py <font.bdf>")
sys.exit(1)
convert_bdf_to_adafruit(sys.argv[1])
+34
View File
@@ -0,0 +1,34 @@
#!/usr/bin/env bash
set -euo pipefail
# Script pour générer les polices DejaVu Bold et Oblique
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
TOOLS_DIR="${PROJECT_ROOT}/tools"
WORK_DIR="${TOOLS_DIR}/_fontbuild"
DEJAVU_DIR="${WORK_DIR}/dejavu/dejavu-fonts-ttf-2.37/ttf"
EXAMPLES_DIR="${PROJECT_ROOT}/examples"
# Vérifier que les TTF existent
if [[ ! -f "${DEJAVU_DIR}/DejaVuSans-Bold.ttf" ]]; then
echo "Erreur: DejaVuSans-Bold.ttf non trouvé dans ${DEJAVU_DIR}"
exit 1
fi
if [[ ! -f "${DEJAVU_DIR}/DejaVuSans-Oblique.ttf" ]]; then
echo "Erreur: DejaVuSans-Oblique.ttf non trouvé dans ${DEJAVU_DIR}"
exit 1
fi
echo "Génération des polices DejaVu Bold et Oblique..."
# Utiliser le script existant pour générer Bold
echo "Génération DejaVu Bold..."
"${TOOLS_DIR}/generate_latin1_font.sh" -f "${DEJAVU_DIR}/DejaVuSans-Bold.ttf" -o "DejaVuSansBold9ptLat1.h"
# Utiliser le script existant pour générer Oblique
echo "Génération DejaVu Oblique..."
"${TOOLS_DIR}/generate_latin1_font.sh" -f "${DEJAVU_DIR}/DejaVuSans-Oblique.ttf" -o "DejaVuSansOblique9ptLat1.h"
echo "Polices générées avec succès!"
echo "- ${EXAMPLES_DIR}/DejaVuSansBold9ptLat1.h"
echo "- ${EXAMPLES_DIR}/DejaVuSansOblique9ptLat1.h"