Kevin LO
Published © GPL3+

Wireless doorbell hack for Arduino ESP32

Hack a wireless doorbell RF receiver module and use ESP32 to decode the received RF data stream.

IntermediateFull instructions provided4 hours1,217
Wireless doorbell hack for Arduino ESP32

Things used in this project

Hardware components

2.13 inches e-ink Display Module for ESP32
×1

Story

Read more

Code

Main Code and Header Hile

Arduino
//////////////////////////////////////
// 
// ESP32-RfSwitch.ino
// Hardware : ESP32 PICO
//
//////////////////////////////////////

//
// This project using a 2.13" e-Ink Display Module as an example
// For details about this ESP32 module, please visit : https://www.dfrobot.com//product-2101.html
// and https://wiki.dfrobot.com/e-Ink_Display_Module_for_ESP32_SKU_DFR0676
//
// To decode a RF bit stream, we need to know 
// - a start condition
//   A low pulse with duration about 1000us
//  
// - time duration of each bit
//   About 142us, fix duration for each of bit
//  
// - Total number of bits per frame
//   25
//
//  We use a timer with resolution at 100ns for bit duration and start condition measurement. 
//  A RF pin input with edge interrupt generation, on either rising-edge or falling-edge.
//
//

#include <pgmspace.h>
#include "SPI.h"

#include"EPD_Font8x16.h"                        // LCD background logo and fonts data included

#define SPI_MOSI    23                          // SPI Interface for the e-Ink display
#define SPI_MISO    -1
#define SPI_CLK     18

#define ELINK_SS    5                           // Additional hardware connection about the e-Ink display
#define ELINK_BUSY  4
#define ELINK_RESET 16
#define ELINK_DC    17

#define RFIN_PIN    21                          // RF Streams input pin from the RF Module
#define DEBUG_PIN   19                          // a digiral output pin for debug purpose

#define MAX_LINE_BYTES        16                // 16 lines x 8 bits = 128 pixels
#define MAX_COLUMN_BYTES      250               // 250 pixels in column
#define ALLSCREEN_GRAGHBYTES  4000

//
// Defination related to RF bit streams
// All these data were obtained by oscilloscope
// 

#define STREAM_HEAD_MIN     9000                // RF Bit Streams header detection timing : minimum is 9000us
#define STREAM_HEAD_MAX     13000               //   and maximum is 13000us

#define STREAM_BITDURATION  1420                // RF Bit Streams duration, measured as 1360us
#define STREAM_BITDUR_MIN   1200                // Minimum duration for each bit
#define STREAM_BITDUR_MAX   1600                // Maximum duration for each bit
#define STREAM_BITDETECT    600                 // a time delay about 600us after rising-edge detected for a single bit

#define STREAM_BITCOUNT     25                  // Total number of bits per frame
#define STREAM_TIMEOUT      48                  // Number of rising-edge wait when bit duration is not in given specification

//
// Fixed setup data for the e-Ink display
// For details, please refer to https://wiki.dfrobot.com/e-Ink_Display_Module_for_ESP32_SKU_DFR0676
//
const uint8_t LUT_DATA_full[] =
{
  0xA0,  0x90, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x50, 0x90, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xA0, 0x90, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x50, 0x90, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  0x0F, 0x0F, 0x00, 0x00, 0x00,
  0x0F, 0x0F, 0x00, 0x00, 0x03,
  0x0F, 0x0F, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,

  //0x15, 0x41, 0xA8, 0x32, 0x50, 0x2C, 0x0B,
};

//
// Fixed setup data for the e-Ink display
//
const uint8_t LUT_DATA_part[] =
{
  0x40,  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  0x0A, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00,

  //0x15, 0x41, 0xA8, 0x32, 0x50, 0x2C, 0x0B,
};

//
// Variables related to RF stream decode
//
uint8_t streamState;                            // Decode states, 0: Wait for stream header and 1: decode data bit
uint8_t rfBitCount;                             // Number of data bit read
uint8_t rfDecodeRead;                           // Number of data frame (25-bits) decoded
uint32_t streamCode;                            // a 32-bit dword for saving bit where just read
uint32_t streamDecode[4];                       // an array for saving decoded 25-bit data stream
uint32_t frameTimeout;                          // timeout counter for each frame detection

uint16_t dispTimeOut;                           // timeout counter switch ID display on e-Ink

SPIClass epdSPI(HSPI);
uint8_t SPIsend, SPIreceive;
hw_timer_t *rfTimer = NULL;               

//
// RFIN_PIN edge interrupt serivce routine
// - for start condition detection and data stream timeout 
//
//
void IRAM_ATTR rfDetect_ISR() {
  uint8_t pinState;                             // RF input pin logic level
  uint64_t rfTimerVal;                          // rfDetectTimer counter value, 100ns per count

  timerStop(rfTimer);                           // Stop timer first
  rfTimerVal = timerRead(rfTimer);              // get the counter value
  timerStart(rfTimer);                          // re-start timer
  
  pinState = digitalRead(RFIN_PIN);             // Read the RFIN_PIN logical level
  if (streamState == 0) {                   
    if (pinState == LOW) {                      // if logic level is LOW, that is Falling Edge
      timerWrite(rfTimer, 0L);                  // Reset counter value to ZERO and wait for rising-edge interrupt
    } 
    else {                                      // if logic level is HIGH, that is Rising Edge
                                                // Check the counter value and makesure that it is between 900us and 1300us
                                                //   and total number of frame decoded less than 4
      if ((rfTimerVal >= STREAM_HEAD_MIN) && (rfTimerVal <= STREAM_HEAD_MAX) && (rfDecodeRead < 4)) {
        digitalWrite(DEBUG_PIN, HIGH);          // DEBUG to HIGH, a start condition detected
        timerWrite(rfTimer, 0L);                // Reset counter value to ZERO
        timerAlarmEnable(rfTimer);              // Enable Alarm Interrupt (use timer to decode each bit, delay about 60us after rising-edge)

        streamState ++;                         // streamState = 1 for bit decode
        rfBitCount = 0;                         // Number of bit count to ZERO
        streamCode = 0;                         // Decoded Word to ZERO
      }
      else                                      // If a start condition, the low pulse duration is not match, then ignore it
        streamState = 0;                        // streamState = 0 for start condition detect again
        if (frameTimeout > 0)                   // Check for number of retries.
           frameTimeout --;
        else
          digitalWrite(DEBUG_PIN, HIGH);        // If it is more the 48 times, then DEBUG_PIN change to HIGH for end of frame detection
    }
  }
  else if (streamState == 1) {                  // streamState = 1, for bit decode
    if (pinState == HIGH) {                     // If RFIN_PIN is at logic HIGH, that is rising-edge detected
                                                // If time duration between each rising-edge is between 120us and 160us, then
      if ((rfTimerVal > STREAM_BITDUR_MIN) && (rfTimerVal < STREAM_BITDUR_MAX)) {
        timerWrite(rfTimer, 0L);                // Set timer counter to ZERO
        timerAlarmEnable(rfTimer);              // Enable timer alarm for bit decode
        digitalWrite(DEBUG_PIN, HIGH);          // DEBUG_PIN changed to HIGH state
      }
      else {                                    // otherwise, a wrong bit duration detected
        timerAlarmDisable(rfTimer);             // Disable timer alarm
        timerWrite(rfTimer, 0L);                // Set timer counter to ZERO
        streamState = 0;                        // Restart everything. Now, detects a start condition of a frame
      }
    }
  }
}

void IRAM_ATTR rfDetectTimer_ISR() 
{
  digitalWrite(DEBUG_PIN, LOW);

  streamCode <<= 1;
  if (digitalRead(RFIN_PIN) == HIGH)
    streamCode |= 1; 

  rfBitCount ++;
  if (rfBitCount >= STREAM_BITCOUNT) {
    timerAlarmDisable(rfTimer);
    timerWrite(rfTimer, 0L);
    streamState = 0;

    streamDecode[0] = streamDecode[1];
    streamDecode[1] = streamDecode[2];
    streamDecode[2] = streamDecode[3];
    streamDecode[3] = streamCode;
    rfDecodeRead ++;
  }

  frameTimeout = STREAM_TIMEOUT;  
}

void EPD_W21_writeCMD(unsigned char command)
{
  EPD_W21_CheckBUSY();
  epdSPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));  
  delayMicroseconds(10);
  digitalWrite(ELINK_SS, LOW);
  delayMicroseconds(10);
  digitalWrite(ELINK_DC, LOW);
  SPIreceive = epdSPI.transfer(command); 
  digitalWrite(ELINK_SS, HIGH);
  epdSPI.endTransaction();  
}

void EPD_W21_writeDATA(unsigned char data)
{
  EPD_W21_CheckBUSY();
  epdSPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));  
  delayMicroseconds(10);
  digitalWrite(ELINK_SS, LOW);
  delayMicroseconds(10);
  digitalWrite(ELINK_DC, HIGH);
  delayMicroseconds(10);
  SPIreceive = epdSPI.transfer(data); 
  digitalWrite(ELINK_SS, HIGH);
  epdSPI.endTransaction();  
}

void EPD_W21_writeblockDATA(const uint8_t *d, uint16_t size)
{
  uint16_t i;
  EPD_W21_CheckBUSY();
  epdSPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));  
  delayMicroseconds(10);
  digitalWrite(ELINK_SS, LOW);
  delayMicroseconds(10);
  digitalWrite(ELINK_DC, HIGH);
  delayMicroseconds(10);
  for (i=0; i<size; i++)
    SPIreceive = epdSPI.transfer(*d++); 
  digitalWrite(ELINK_SS, HIGH);
  epdSPI.endTransaction();  
}

void EPD_W21_Reset(void)
{
  delay(20);
  digitalWrite(ELINK_RESET, LOW);
  delay(20);
  digitalWrite(ELINK_RESET, HIGH);
  delay(200);
}

void EPD_W21_CheckBUSY(void)
{
  unsigned long start = micros();

  while(1) {
    if (!digitalRead(ELINK_BUSY)) break;
    delay(1);    
    if (micros() - start > 10000000) {
      Serial.println("Busy Timeout!");
      break;
    }
  }
}

void EPD_Update(void)
{   
  EPD_W21_writeCMD(0x22); //Display Update Control 
  EPD_W21_writeDATA(0xF7);   
  EPD_W21_writeCMD(0x20); //Activate Display Update Sequence
  EPD_W21_CheckBUSY();

}

void EPD_Part_Update(void)
{
  EPD_W21_writeCMD(0x22); //Display Update Control 
  EPD_W21_writeDATA(0xFF);   
  EPD_W21_writeCMD(0x20); //Activate Display Update Sequence
  EPD_W21_CheckBUSY();    
}

void EPD_DeepSleep(void)
{  
  EPD_W21_writeCMD(0x10); //enter deep sleep
  EPD_W21_writeDATA(0x01); 
  delay(100);
}

void EPD_SetRAMValue_BaseMap( const unsigned char * datas)
{
  unsigned int i;   
  const unsigned char  *datas_flag;   

  datas_flag=datas;
  EPD_W21_writeCMD(0x24);   //Write Black and White image to RAM
  for(i=0;i<ALLSCREEN_GRAGHBYTES;i++) {               
    EPD_W21_writeDATA(pgm_read_byte(&datas[i]));
  }

  datas=datas_flag;
  EPD_W21_writeCMD(0x26);   //Write Black and White image to RAM
  for(i=0;i<ALLSCREEN_GRAGHBYTES;i++) {               
    EPD_W21_writeDATA(pgm_read_byte(&datas[i]));
  }
  EPD_Update();   
}

void EPD_WhiteScreen_ALL(const unsigned char * data)
{
   unsigned int i;

   EPD_W21_writeCMD(0x24);   //write RAM for black(0)/white (1)
   for(i=0;i<ALLSCREEN_GRAGHBYTES;i++) {               
     if (data == NULL)
        EPD_W21_writeDATA(0xff);
     else
        EPD_W21_writeDATA(pgm_read_byte(&data[i]));
   }
   EPD_Update();   
}


void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE)
{
  unsigned int i;  
  unsigned int x_end,y_start1,y_start2,y_end1,y_end2;
  x_start=x_start/8;//
  x_end=x_start+PART_LINE/8-1; 
  
  y_start1=0;
  y_start2=y_start;
  if(y_start>=256) {
    y_start1=y_start2/256;
    y_start2=y_start2%256;
  }
  y_end1=0;
  y_end2=y_start+PART_COLUMN-1;
  if(y_end2>=256) {
    y_end1=y_end2/256;
    y_end2=y_end2%256;    
  }   
  
  EPD_W21_writeCMD(0x44);       // set RAM x address start/end, in page 35
  EPD_W21_writeDATA(x_start);    // RAM x address start at 00h;
  EPD_W21_writeDATA(x_end);    // RAM x address end at 0fh(15+1)*8->128 
  EPD_W21_writeCMD(0x45);       // set RAM y address start/end, in page 35
  EPD_W21_writeDATA(y_start2);    // RAM y address start at 0127h;
  EPD_W21_writeDATA(y_start1);    // RAM y address start at 0127h;
  EPD_W21_writeDATA(y_end2);    // RAM y address end at 00h;
  EPD_W21_writeDATA(y_end1);    // ????=0 


  EPD_W21_writeCMD(0x4E);   // set RAM x address count to 0;
  EPD_W21_writeDATA(x_start); 
  EPD_W21_writeCMD(0x4F);   // set RAM y address count to 0X127;    
  EPD_W21_writeDATA(y_start2);
  EPD_W21_writeDATA(y_start1);
  
  
   EPD_W21_writeCMD(0x24);   //Write Black and White image to RAM
   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) {                         
     EPD_W21_writeDATA(pgm_read_byte(&datas[i]));
   } 
   //EPD_Part_Update();
}

void EPD_PrintString(uint8_t sx, uint8_t sy,const char* str, uint8_t isUpdate)
{
  uint8_t slen;
  const char* pt;
  uint16_t sChar;

  pt = str;
  slen = 0;
  while (*pt++)
    slen ++;
  if (slen == 0)
    return;  

  pt = str + slen - 1;
  sx = 249 - sx;            // Maping to LCD's coordinates
  sx = sx - (8 * (slen-1));
  
  while (*pt) {
    sChar = *pt--;
    sChar = sChar - 32;
    sChar = sChar * 16;
    EPD_Dis_Part(sy, sx,&Font8x16[sChar],8,16);
    sx = sx + 8;
  }

  if (isUpdate)
    EPD_Part_Update();
}

void EPD_PrintHex32bit(uint8_t hx, uint8_t hy, uint32_t hex, uint8_t isUpdate)
{
  uint16_t hChar, i;

  hx = 249 - hx;            // Maping to LCD's coordinates
  if (hx > 56)
    hx = hx - 56;

  for (i=0; i<8; i++) {
    hChar = (hex & 0x0000000F);
    if (hChar <= 9) {
      hChar = hChar + '0';
    }
    else {
      hChar = hChar - 10;
      hChar = hChar + '0';
      hChar = hChar + 17;
    }

    hChar = hChar - 32;
    hChar = hChar * 16;
    EPD_Dis_Part(hy, hx,&Font8x16[hChar],8,16);
    hx = hx + 8;
    hex >>= 4;
  }

  if (isUpdate)
    EPD_Part_Update();
}


void EPD_init(void)
{
  EPD_W21_Reset(); //Electronic paper IC reset

  EPD_W21_CheckBUSY();   
  EPD_W21_writeCMD(0x12);  //SWRESET
  EPD_W21_CheckBUSY();   
    
  EPD_W21_writeCMD(0x01); //Driver output control      
  EPD_W21_writeDATA(0xF9);
  EPD_W21_writeDATA(0x00);
  EPD_W21_writeDATA(0x00);

  EPD_W21_writeCMD(0x11); //data entry mode       
  EPD_W21_writeDATA(0x01);

  EPD_W21_writeCMD(0x44); //set Ram-X address start/end position   
  EPD_W21_writeDATA(0x00);
  EPD_W21_writeDATA(0x0F);    //0x0F-->(15+1)*8=128

  EPD_W21_writeCMD(0x45); //set Ram-Y address start/end position          
  EPD_W21_writeDATA(0xF9);   //0xF9-->(249+1)=250
  EPD_W21_writeDATA(0x00);
  EPD_W21_writeDATA(0x00);
  EPD_W21_writeDATA(0x00); 

  EPD_W21_writeCMD(0x3C); //BorderWavefrom
  EPD_W21_writeDATA(0x01);  
      
  EPD_W21_writeCMD(0x18); //Reading temperature sensor
  EPD_W21_writeDATA(0x80);  

  EPD_W21_writeCMD(0x4E);   // set RAM x address count to 0;
  EPD_W21_writeDATA(0x00);
  EPD_W21_writeCMD(0x4F);   // set RAM y address count to 0X199;    
  EPD_W21_writeDATA(0xF9);
  EPD_W21_writeDATA(0x00);
  EPD_W21_CheckBUSY();  
}


void setup() {
  // put your setup code here, to run once:
  streamState = 0;
  frameTimeout = STREAM_TIMEOUT;
  dispTimeOut = 0;

  Serial.begin(115200);
  Serial.println();
  Serial.println("setup");

  pinMode(ELINK_BUSY, INPUT_PULLUP);
  digitalWrite(ELINK_SS, HIGH);
  digitalWrite(ELINK_RESET, HIGH);
  digitalWrite(ELINK_DC, HIGH);
  pinMode(ELINK_SS, OUTPUT);
  pinMode(ELINK_DC, OUTPUT);
  pinMode(ELINK_RESET, OUTPUT);

  pinMode(DEBUG_PIN, OUTPUT);
  digitalWrite(DEBUG_PIN, LOW);

  EPD_W21_Reset(); //Electronic paper IC reset
  epdSPI.begin(SPI_CLK, SPI_MISO, SPI_MOSI, ELINK_SS);

  EPD_init();  //Electronic paper initialization
  EPD_SetRAMValue_BaseMap(gImage_basemap);  //Partial refresh background color,Brush map is a must, please do not delete
  delay(100);
  EPD_PrintString(0, 72, "RF SWITCH ID:", false);
  EPD_PrintHex32bit(112, 72, 0, true);

  Serial.println("Initial Done.");

  // Enable Timer0 with prescaler 8, count up
  // So the resolution of counter0 is 100ns
  //
  rfTimer = timerBegin(0, 8, true);
  timerAttachInterrupt(rfTimer, &rfDetectTimer_ISR, true);
  timerAlarmWrite(rfTimer, STREAM_BITDETECT, false);
  timerAlarmDisable(rfTimer);  

  pinMode(RFIN_PIN, INPUT_PULLUP);
  attachInterrupt(RFIN_PIN, rfDetect_ISR, CHANGE);
}

void loop() {
  // put your main code here, to run repeatedly:
  uint16_t i, count;
  uint32_t code; 
  
  if ((rfDecodeRead >= 1) && (frameTimeout == 0)) {
    rfDecodeRead = 0;
    frameTimeout = STREAM_TIMEOUT;

    count = 0;
    for (i=0; i<4; i++) {
      Serial.print(streamDecode[i], HEX);
      Serial.print(' ');

      if (streamDecode[i] != 0)
        code = streamDecode[i];

      if (code == streamDecode[i])
        count ++;  
      
      streamDecode[i] = 0;
    }
    Serial.println();

    if (count > 1) { 
      EPD_PrintString(0, 72, "RF SWITCH ID:", false);
      EPD_PrintHex32bit(112, 72, code, true);
      dispTimeOut = 100;
    }
  }

  if (dispTimeOut > 0) {
    dispTimeOut = dispTimeOut - 1;
    if (dispTimeOut == 0) {
      EPD_PrintString(0, 72, "RF SWITCH ID:", false);
      EPD_PrintHex32bit(112, 72, 0, true);
    }
  }

  delay(10);

}

//////////////////////////////////////
// 
// EPD_Font8x16.h
//
//////////////////////////////////////
//
//
#include <pgmspace.h>

//
// A 8x16 font table for EPD Display 
//
const unsigned char Font8x16[] PROGMEM = {
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // <Space>
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x33,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // !
  0xFF,0xFF,0xFF,0xFF,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF, // "
  0xFF,0xB3,0xFD,0x8F,0xFC,0x33,0xF1,0x8F,0xCC,0x3F,0xF1,0xBF,0xCD,0xFF,0xFF,0xFF, // #
  0xE3,0xCF,0xDD,0xF7,0xDE,0xF7,0x80,0x03,0xDE,0xF7,0xDF,0x77,0xE7,0x8F,0xFF,0xFF, // $
  0xF1,0xFF,0xEE,0xF3,0xDD,0xCF,0xE3,0x3F,0xEC,0xC7,0xE3,0xBB,0x9F,0x77,0xFF,0x8F, // %
  0xFF,0x87,0xE1,0x7B,0xDE,0xFB,0xDD,0x3B,0xE3,0xC7,0xFE,0xEB,0xFE,0x1B,0xFE,0xF7, // &
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // '
  0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xF3,0xF9,0xEF,0xFE,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF, // (
  0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xEF,0xFE,0xF3,0xF9,0xFC,0x07,0xFF,0xFF,0xFF,0xFF, // )
  0xFF,0xFF,0xFF,0xFF,0xEE,0xFF,0xF5,0xFF,0xC0,0x7F,0xF5,0xFF,0xEE,0xFF,0xFF,0xFF, // *
  0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xF8,0x03,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xFF, // +
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF2,0xFF,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // ,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF, // -
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xFF,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // .
  0xFF,0xFF,0xFF,0xFF,0xFF,0xE3,0xFF,0x1F,0xF8,0xFF,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF, // /
  0xFF,0xFF,0xF0,0x0F,0xEF,0xF7,0xDF,0xFB,0xDF,0xFB,0xEF,0xF7,0xF0,0x0F,0xFF,0xFF, // 0
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFB,0xC0,0x03,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF, // 1
  0xFF,0xFF,0xE7,0xF3,0xDF,0xEB,0xDF,0xDB,0xDF,0xBB,0xEE,0x7B,0xF1,0xF3,0xFF,0xFF, // 2
  0xFF,0xFF,0xEF,0xFB,0xDF,0xFB,0xDE,0xFB,0xDC,0xFB,0xE3,0x77,0xFF,0x8F,0xFF,0xFF, // 3
  0xFF,0xFF,0xFF,0x9F,0xFE,0x5F,0xF9,0xDF,0xE7,0xDF,0xC0,0x03,0xFF,0xDF,0xFF,0xFF, // 4
  0xFF,0xFF,0xFF,0xFB,0xC1,0xFB,0xDD,0xFB,0xDD,0xFB,0xDE,0xF7,0xDF,0x0F,0xFF,0xFF, // 5
  0xFF,0xFF,0xF8,0x0F,0xF6,0xF7,0xED,0xFB,0xDD,0xFB,0xDE,0xF7,0xDF,0x0F,0xFF,0xFF, // 6
  0xFF,0xFF,0xC7,0xFF,0xDF,0xFF,0xDF,0xE3,0xDF,0x1F,0xD8,0xFF,0xC7,0xFF,0xFF,0xFF, // 7
  0xFF,0xFF,0xF3,0x8F,0xED,0x77,0xDE,0xFB,0xDE,0xFB,0xED,0x77,0xF3,0x8F,0xFF,0xFF, // 8
  0xFF,0xFF,0xF0,0xFB,0xEF,0x7B,0xDF,0xBB,0xDF,0xB7,0xEF,0x6F,0xF0,0x1F,0xFF,0xFF, // 9
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF3,0xFC,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // :
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF2,0xFC,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // ;
  0xFF,0xFF,0xFF,0xBF,0xFF,0x5F,0xFF,0x5F,0xFE,0xEF,0xFE,0xEF,0xFD,0xF7,0xFF,0xFF, // <
  0xFE,0xEF,0xFE,0xEF,0xFE,0xEF,0xFE,0xEF,0xFE,0xEF,0xFE,0xEF,0xFE,0xEF,0xFE,0xEF, // =
  0xFF,0xFF,0xFD,0xF7,0xFE,0xEF,0xFE,0xEF,0xFF,0x5F,0xFF,0x5F,0xFF,0xBF,0xFF,0xFF, // >
  0xFF,0xFF,0xE3,0xFF,0xDF,0xFF,0xDF,0x93,0xDE,0x7F,0xED,0xFF,0xF3,0xFF,0xFF,0xFF, // ?
  0xF0,0x0F,0xEF,0xF7,0xDC,0x3B,0xDB,0xDB,0xDB,0xDB,0xDC,0x3B,0xEB,0xD7,0xF0,0x17, // @
  0xFF,0xFB,0xFF,0xC3,0xF8,0x3B,0xC7,0xBF,0xF8,0x3B,0xFF,0xC3,0xFF,0xFB,0xFF,0xFF, // A
  0xDF,0xFB,0xC0,0x03,0xDE,0xFB,0xDE,0xFB,0xDE,0xFB,0xED,0x77,0xF3,0x8F,0xFF,0xFF, // B
  0xF0,0x0F,0xEF,0xF7,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xEF,0xFB,0xC7,0xF7,0xFF,0xFF, // C
  0xDF,0xFB,0xC0,0x03,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xE7,0xE7,0xF8,0x1F,0xFF,0xFF, // D
  0xDF,0xFB,0xC0,0x03,0xDE,0xFB,0xDE,0xFB,0xDE,0xFB,0xDC,0x7B,0xC7,0xE3,0xFF,0xFF, // E
  0xDF,0xFB,0xC0,0x03,0xDE,0xFB,0xDE,0xFF,0xDE,0xFF,0xDC,0x7F,0xC7,0xFF,0xFF,0xFF, // F
  0xF0,0x0F,0xEF,0xF7,0xDF,0xFB,0xDF,0xFB,0xEF,0x7B,0xC7,0x07,0xFF,0x7F,0xFF,0xFF, // G
  0xDF,0xFB,0xC0,0x03,0xDE,0xFB,0xFE,0xFF,0xDE,0xFB,0xC0,0x03,0xDF,0xFB,0xFF,0xFF, // H
  0xFF,0xFF,0xFF,0xFF,0xDF,0xFB,0xC0,0x03,0xDF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // I
  0xFF,0xFF,0xFF,0xF7,0xFF,0xFB,0xDF,0xFB,0xC0,0x07,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF, // J
  0xDF,0xFB,0xC0,0x03,0xDC,0xFB,0xFB,0x3F,0xD7,0xCB,0xCF,0xF3,0xDF,0xFB,0xFF,0xFF, // K
  0xDF,0xFB,0xC0,0x03,0xDF,0xFB,0xFF,0xFB,0xFF,0xFB,0xFF,0xF3,0xFF,0xEF,0xFF,0xFF, // L
  0xDF,0xFB,0xC0,0x03,0xF8,0xFB,0xFF,0x0F,0xF8,0xFB,0xC0,0x03,0xDF,0xFB,0xFF,0xFF, // M
  0xDF,0xFB,0xC0,0x03,0xF3,0xFB,0xFC,0x3F,0xDF,0xCF,0xC0,0x03,0xDF,0xFF,0xFF,0xFF, // N
  0xF8,0x1F,0xE7,0xE7,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xE7,0xE7,0xF8,0x1F,0xFF,0xFF, // O
  0xDF,0xFB,0xC0,0x03,0xDF,0x7B,0xDF,0x7F,0xDF,0x7F,0xEE,0xFF,0xF1,0xFF,0xFF,0xFF, // P
  0xF8,0x1F,0xE7,0xE7,0xDF,0xFB,0xDF,0xFB,0xDF,0xF9,0xE7,0xE6,0xF8,0x1E,0xFF,0xFF, // Q
  0xDF,0xFB,0xC0,0x03,0xDF,0x7B,0xDF,0x3F,0xDF,0x4F,0xEE,0xF3,0xF1,0xFB,0xFF,0xFF, // R
  0xF3,0xE3,0xED,0xF7,0xDE,0xFB,0xDE,0xFB,0xDF,0x7B,0xEF,0xB7,0xC7,0xCF,0xFF,0xFF, // S
  0xCF,0xFF,0xDF,0xFF,0xDF,0xFB,0xC0,0x03,0xDF,0xFB,0xDF,0xFF,0xCF,0xFF,0xFF,0xFF, // T
  0xDF,0xFF,0xC0,0x07,0xDF,0xFB,0xFF,0xFB,0xDF,0xFB,0xC0,0x07,0xDF,0xFF,0xFF,0xFF, // U
  0xDF,0xFF,0xC1,0xFF,0xDE,0x1F,0xFF,0xE3,0xDE,0x1F,0xC1,0xFF,0xDF,0xFF,0xFF,0xFF, // V
  0xDF,0xFF,0xC0,0x3F,0xDF,0xC3,0xF0,0x3F,0xDF,0xC3,0xC0,0x3F,0xDF,0xFF,0xFF,0xFF, // W
  0xDF,0xFB,0xC7,0xE3,0xD9,0x9B,0xFE,0x7F,0xD9,0x9B,0xC7,0xE3,0xDF,0xFB,0xFF,0xFF, // X
  0xDF,0xFF,0xC7,0xFF,0xD8,0xFB,0xFF,0x03,0xD8,0xFB,0xC7,0xFF,0xDF,0xFF,0xFF,0xFF, // Y
  0xC7,0xF3,0xDF,0xCB,0xDF,0xBB,0xDE,0x7B,0xDD,0xFB,0xD3,0xFB,0xCF,0xE3,0xFF,0xFF, // Z
};


//
// Just a full screen Logo for EPD display
//
const unsigned char gImage_basemap[4000] PROGMEM = { /* 0X01,0X01,0XFA,0X00,0X7A,0X00, */
  0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfe, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfe, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfb, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xf7, 0xbf, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xf7, 0x7f, 0xff, 0x4b, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xef, 0x7f, 0xfd, 0x7f, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xf7, 0x7f, 0xd3, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xee, 0xfe, 0xaf, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xef, 0xf2, 0xff, 0xa3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xde, 0x1f, 0xfd, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xdf, 0xff, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xdf, 0xfe, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xdf, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xdf, 0x57, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbc, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbb, 0xff, 0xff, 0xfd, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbb, 0xff, 0xff, 0xe4, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbb, 0xff, 0xfe, 0x1f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbf, 0xff, 0xf2, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xdb, 0xff, 0x0f, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xd7, 0xf9, 0x7f, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xeb, 0xa7, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfe, 0x5f, 0xfa, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xe9, 0xff, 0xd5, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xd7, 0xfd, 0x2b, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbf, 0xf5, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xbf, 0x4f, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xba, 0xbf, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xcb, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xbb, 0xfa, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xb7, 0xe5, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0x77, 0x5f, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0x74, 0xbf, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0x75, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0x7f, 0xfa, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0x7f, 0xd5, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfe, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0x7a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0x88, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0x5f, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfe, 0x7f, 0xef, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfc, 0xff, 0xf0, 0x26, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfb, 0xff, 0xff, 0xb5, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfb, 0xff, 0xff, 0xad, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfb, 0xfb, 0xdf, 0x25, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xf3, 0xe1, 0xaf, 0xbd, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfb, 0x85, 0x4f, 0x65, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xf7, 0x92, 0x1f, 0xa9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfb, 0xb8, 0xff, 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xf3, 0xfd, 0xfc, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfd, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfb, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfc, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfe, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0x1f, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xc0, 0xbf, 0xfa, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfe, 0xff, 0xcb, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xfe, 0x5f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xf9, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xd7, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0x5f, 0xe5, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfa, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfb, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf7, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf7, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf6, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf4, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfe, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfb, 0xbf, 0xfd, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfb, 0xbf, 0xea, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfb, 0x7f, 0xab, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf7, 0x7e, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf7, 0xfa, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfb, 0x25, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf7, 0xdf, 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfb, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfb, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfd, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfe, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xf9, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xcb, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xfe, 0x3f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xf2, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0x17, 0xfc, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf9, 0x7f, 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xc7, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xfe, 0x5f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xf2, 0xff, 0xa7, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xdf, 0xfc, 0xae, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xdf, 0xf3, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xdf, 0x4f, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xed, 0x7f, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xe5, 0xff, 0x7f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0x77, 0xc5, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfc, 0xe3, 0xfd, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xed, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf9, 0xde, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf7, 0xbf, 0x5f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xe7, 0xbf, 0xd1, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xef, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};

Credits

Kevin LO
3 projects • 2 followers
Maker, Electronic Engineer, works in R&D more than 10 years
Contact

Comments

Please log in or sign up to comment.