diff --git a/cameteo-interface/EPD_driver.py b/cameteo-interface/EPD_driver.py new file mode 100644 index 0000000..6adde5d --- /dev/null +++ b/cameteo-interface/EPD_driver.py @@ -0,0 +1,644 @@ + +import RPi.GPIO as GPIO +import time + +""" Register initial variable """ +xDot = 122 +yDot = 250 +DELAYTIME = 2 +LUTDefault_full = [0x32,0x22,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x01,0x00,0x00,0x00,0x00] +LUTDefault_part = [0x32,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00] + +GDOControl = [0x01,int((yDot-1)%256),int((yDot-1)/256),0x00] #for 2.9inch +softstart = [0x0c,0xd7,0xd6,0x9d] +VCOMVol = [0x2c,0xa8] # VCOM 7c +DummyLine = [0x3a,0x1a] # 4 dummy line per gate +Gatetime = [0x3b,0x08] # 2us per line +RamDataEntryMode = [0x11,0x01] # Ram data entry mode +w_buffer = [0 for i in range(5000)] + +""" BCM GPIO """ +RST = 17 +DC = 25 +BUSY = 24 +CS = 8 + +""" Display lib """ +Font1206 = [ + [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#" ",0*/ + [0x00,0x00,0x00,0x00,0x3F,0x40,0x00,0x00,0x00,0x00,0x00,0x00],#"!",1*/ + [0x00,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x40,0x00,0x00,0x00],#""",2*/ + [0x09,0x00,0x0B,0xC0,0x3D,0x00,0x0B,0xC0,0x3D,0x00,0x09,0x00],#"#",3*/ + [0x18,0xC0,0x24,0x40,0x7F,0xE0,0x22,0x40,0x31,0x80,0x00,0x00],#"$",4*/ + [0x18,0x00,0x24,0xC0,0x1B,0x00,0x0D,0x80,0x32,0x40,0x01,0x80],#"%",5*/ + [0x03,0x80,0x1C,0x40,0x27,0x40,0x1C,0x80,0x07,0x40,0x00,0x40],#"&",6*/ + [0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#"'",7*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x20,0x40,0x40,0x20],#"(",8*/ + [0x00,0x00,0x40,0x20,0x20,0x40,0x1F,0x80,0x00,0x00,0x00,0x00],#")",9*/ + [0x09,0x00,0x06,0x00,0x1F,0x80,0x06,0x00,0x09,0x00,0x00,0x00],#"*",10*/ + [0x04,0x00,0x04,0x00,0x3F,0x80,0x04,0x00,0x04,0x00,0x00,0x00],#"+",11*/ + [0x00,0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#",",12*/ + [0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00],#"-",13*/ + [0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#".",14*/ + [0x00,0x20,0x01,0xC0,0x06,0x00,0x38,0x00,0x40,0x00,0x00,0x00],#"/",15*/ + [0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00],#"0",16*/ + [0x00,0x00,0x10,0x40,0x3F,0xC0,0x00,0x40,0x00,0x00,0x00,0x00],#"1",17*/ + [0x18,0xC0,0x21,0x40,0x22,0x40,0x24,0x40,0x18,0x40,0x00,0x00],#"2",18*/ + [0x10,0x80,0x20,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00],#"3",19*/ + [0x02,0x00,0x0D,0x00,0x11,0x00,0x3F,0xC0,0x01,0x40,0x00,0x00],#"4",20*/ + [0x3C,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x23,0x80,0x00,0x00],#"5",21*/ + [0x1F,0x80,0x24,0x40,0x24,0x40,0x34,0x40,0x03,0x80,0x00,0x00],#"6",22*/ + [0x30,0x00,0x20,0x00,0x27,0xC0,0x38,0x00,0x20,0x00,0x00,0x00],#"7",23*/ + [0x1B,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00],#"8",24*/ + [0x1C,0x00,0x22,0xC0,0x22,0x40,0x22,0x40,0x1F,0x80,0x00,0x00],#"9",25*/ + [0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00],#":",26*/ + [0x00,0x00,0x00,0x00,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00],#";",27*/ + [0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0x40,0x40],#"<",28*/ + [0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x00,0x00],#"=",29*/ + [0x00,0x00,0x40,0x40,0x20,0x80,0x11,0x00,0x0A,0x00,0x04,0x00],#">",30*/ + [0x18,0x00,0x20,0x00,0x23,0x40,0x24,0x00,0x18,0x00,0x00,0x00],#"?",31*/ + [0x1F,0x80,0x20,0x40,0x27,0x40,0x29,0x40,0x1F,0x40,0x00,0x00],#"@",32*/ + [0x00,0x40,0x07,0xC0,0x39,0x00,0x0F,0x00,0x01,0xC0,0x00,0x40],#"A",33*/ + [0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00],#"B",34*/ + [0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x30,0x80,0x00,0x00],#"C",35*/ + [0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00],#"D",36*/ + [0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x40,0x30,0xC0,0x00,0x00],#"E",37*/ + [0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x00,0x30,0x00,0x00,0x00],#"F",38*/ + [0x0F,0x00,0x10,0x80,0x20,0x40,0x22,0x40,0x33,0x80,0x02,0x00],#"G",39*/ + [0x20,0x40,0x3F,0xC0,0x04,0x00,0x04,0x00,0x3F,0xC0,0x20,0x40],#"H",40*/ + [0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x00,0x00],#"I",41*/ + [0x00,0x60,0x20,0x20,0x20,0x20,0x3F,0xC0,0x20,0x00,0x20,0x00],#"J",42*/ + [0x20,0x40,0x3F,0xC0,0x24,0x40,0x0B,0x00,0x30,0xC0,0x20,0x40],#"K",43*/ + [0x20,0x40,0x3F,0xC0,0x20,0x40,0x00,0x40,0x00,0x40,0x00,0xC0],#"L",44*/ + [0x3F,0xC0,0x3C,0x00,0x03,0xC0,0x3C,0x00,0x3F,0xC0,0x00,0x00],#"M",45*/ + [0x20,0x40,0x3F,0xC0,0x0C,0x40,0x23,0x00,0x3F,0xC0,0x20,0x00],#"N",46*/ + [0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00],#"O",47*/ + [0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x00,0x18,0x00,0x00,0x00],#"P",48*/ + [0x1F,0x80,0x21,0x40,0x21,0x40,0x20,0xE0,0x1F,0xA0,0x00,0x00],#"Q",49*/ + [0x20,0x40,0x3F,0xC0,0x24,0x40,0x26,0x00,0x19,0xC0,0x00,0x40],#"R",50*/ + [0x18,0xC0,0x24,0x40,0x24,0x40,0x22,0x40,0x31,0x80,0x00,0x00],#"S",51*/ + [0x30,0x00,0x20,0x40,0x3F,0xC0,0x20,0x40,0x30,0x00,0x00,0x00],#"T",52*/ + [0x20,0x00,0x3F,0x80,0x00,0x40,0x00,0x40,0x3F,0x80,0x20,0x00],#"U",53*/ + [0x20,0x00,0x3E,0x00,0x01,0xC0,0x07,0x00,0x38,0x00,0x20,0x00],#"V",54*/ + [0x38,0x00,0x07,0xC0,0x3C,0x00,0x07,0xC0,0x38,0x00,0x00,0x00],#"W",55*/ + [0x20,0x40,0x39,0xC0,0x06,0x00,0x39,0xC0,0x20,0x40,0x00,0x00],#"X",56*/ + [0x20,0x00,0x38,0x40,0x07,0xC0,0x38,0x40,0x20,0x00,0x00,0x00],#"Y",57*/ + [0x30,0x40,0x21,0xC0,0x26,0x40,0x38,0x40,0x20,0xC0,0x00,0x00],#"Z",58*/ + [0x00,0x00,0x00,0x00,0x7F,0xE0,0x40,0x20,0x40,0x20,0x00,0x00],#"[",59*/ + [0x00,0x00,0x70,0x00,0x0C,0x00,0x03,0x80,0x00,0x40,0x00,0x00],#"\",60*/ + [0x00,0x00,0x40,0x20,0x40,0x20,0x7F,0xE0,0x00,0x00,0x00,0x00],#"]",61*/ + [0x00,0x00,0x20,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00],#"^",62*/ + [0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10],#"_",63*/ + [0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#"`",64*/ + [0x00,0x00,0x02,0x80,0x05,0x40,0x05,0x40,0x03,0xC0,0x00,0x40],#"a",65*/ + [0x20,0x00,0x3F,0xC0,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00],#"b",66*/ + [0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x06,0x40,0x00,0x00],#"c",67*/ + [0x00,0x00,0x03,0x80,0x04,0x40,0x24,0x40,0x3F,0xC0,0x00,0x40],#"d",68*/ + [0x00,0x00,0x03,0x80,0x05,0x40,0x05,0x40,0x03,0x40,0x00,0x00],#"e",69*/ + [0x00,0x00,0x04,0x40,0x1F,0xC0,0x24,0x40,0x24,0x40,0x20,0x00],#"f",70*/ + [0x00,0x00,0x02,0xE0,0x05,0x50,0x05,0x50,0x06,0x50,0x04,0x20],#"g",71*/ + [0x20,0x40,0x3F,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40],#"h",72*/ + [0x00,0x00,0x04,0x40,0x27,0xC0,0x00,0x40,0x00,0x00,0x00,0x00],#"i",73*/ + [0x00,0x10,0x00,0x10,0x04,0x10,0x27,0xE0,0x00,0x00,0x00,0x00],#"j",74*/ + [0x20,0x40,0x3F,0xC0,0x01,0x40,0x07,0x00,0x04,0xC0,0x04,0x40],#"k",75*/ + [0x20,0x40,0x20,0x40,0x3F,0xC0,0x00,0x40,0x00,0x40,0x00,0x00],#"l",76*/ + [0x07,0xC0,0x04,0x00,0x07,0xC0,0x04,0x00,0x03,0xC0,0x00,0x00],#"m",77*/ + [0x04,0x40,0x07,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40],#"n",78*/ + [0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00],#"o",79*/ + [0x04,0x10,0x07,0xF0,0x04,0x50,0x04,0x40,0x03,0x80,0x00,0x00],#"p",80*/ + [0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x50,0x07,0xF0,0x00,0x10],#"q",81*/ + [0x04,0x40,0x07,0xC0,0x02,0x40,0x04,0x00,0x04,0x00,0x00,0x00],#"r",82*/ + [0x00,0x00,0x06,0x40,0x05,0x40,0x05,0x40,0x04,0xC0,0x00,0x00],#"s",83*/ + [0x00,0x00,0x04,0x00,0x1F,0x80,0x04,0x40,0x00,0x40,0x00,0x00],#"t",84*/ + [0x04,0x00,0x07,0x80,0x00,0x40,0x04,0x40,0x07,0xC0,0x00,0x40],#"u",85*/ + [0x04,0x00,0x07,0x00,0x04,0xC0,0x01,0x80,0x06,0x00,0x04,0x00],#"v",86*/ + [0x06,0x00,0x01,0xC0,0x07,0x00,0x01,0xC0,0x06,0x00,0x00,0x00],#"w",87*/ + [0x04,0x40,0x06,0xC0,0x01,0x00,0x06,0xC0,0x04,0x40,0x00,0x00],#"x",88*/ + [0x04,0x10,0x07,0x10,0x04,0xE0,0x01,0x80,0x06,0x00,0x04,0x00],#"y",89*/ + [0x00,0x00,0x04,0x40,0x05,0xC0,0x06,0x40,0x04,0x40,0x00,0x00],#"z",90*/ + [0x00,0x00,0x00,0x00,0x04,0x00,0x7B,0xE0,0x40,0x20,0x00,0x00],#"{",91*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00],#"|",92*/ + [0x00,0x00,0x40,0x20,0x7B,0xE0,0x04,0x00,0x00,0x00,0x00,0x00],#"]",93*/ + [0x40,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x40,0x00],#"~",94*/ +] + +Font1608 = [ + [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#" ",0*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00],#"!",1*/ + [0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00],#""",2*/ + [0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00],#"#",3*/ + [0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00],#"$",4*/ + [0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00],#"%",5*/ + [0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08],#"&",6*/ + [0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#"'",7*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00],#"(",8*/ + [0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00],#")",9*/ + [0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00],#"*",10*/ + [0x00,0x80,0x00,0x80,0x00,0x80,0x0F,0xF8,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00],#"+",11*/ + [0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#",",12*/ + [0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80],#"-",13*/ + [0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#".",14*/ + [0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00],#"/",15*/ + [0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00],#"0",16*/ + [0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00],#"1",17*/ + [0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00],#"2",18*/ + [0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00],#"3",19*/ + [0x00,0x00,0x00,0xE0,0x03,0x20,0x04,0x24,0x08,0x24,0x1F,0xFC,0x00,0x24,0x00,0x00],#"4",20*/ + [0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00],#"5",21*/ + [0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00],#"6",22*/ + [0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00],#"7",23*/ + [0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00],#"8",24*/ + [0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xF0,0x00,0x00],#"9",25*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x0C,0x00,0x00,0x00,0x00,0x00,0x00],#":",26*/ + [0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#";",27*/ + [0x00,0x00,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x10,0x08,0x08,0x10,0x04,0x00,0x00],#"<",28*/ + [0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x00,0x00],#"=",29*/ + [0x00,0x00,0x10,0x04,0x08,0x08,0x04,0x10,0x02,0x20,0x01,0x40,0x00,0x80,0x00,0x00],#">",30*/ + [0x00,0x00,0x0E,0x00,0x12,0x00,0x10,0x0C,0x10,0x6C,0x10,0x80,0x0F,0x00,0x00,0x00],#"?",31*/ + [0x03,0xE0,0x0C,0x18,0x13,0xE4,0x14,0x24,0x17,0xC4,0x08,0x28,0x07,0xD0,0x00,0x00],#"@",32*/ + [0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04],#"A",33*/ + [0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x11,0x04,0x0E,0x88,0x00,0x70,0x00,0x00],#"B",34*/ + [0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08,0x1C,0x10,0x00,0x00],#"C",35*/ + [0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00],#"D",36*/ + [0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x17,0xC4,0x10,0x04,0x08,0x18,0x00,0x00],#"E",37*/ + [0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x17,0xC0,0x10,0x00,0x08,0x00,0x00,0x00],#"F",38*/ + [0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1C,0x78,0x00,0x40,0x00,0x00],#"G",39*/ + [0x10,0x04,0x1F,0xFC,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84,0x1F,0xFC,0x10,0x04],#"H",40*/ + [0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x00,0x00,0x00,0x00],#"I",41*/ + [0x00,0x03,0x00,0x01,0x10,0x01,0x10,0x01,0x1F,0xFE,0x10,0x00,0x10,0x00,0x00,0x00],#"J",42*/ + [0x10,0x04,0x1F,0xFC,0x11,0x04,0x03,0x80,0x14,0x64,0x18,0x1C,0x10,0x04,0x00,0x00],#"K",43*/ + [0x10,0x04,0x1F,0xFC,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x0C,0x00,0x00],#"L",44*/ + [0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00],#"M",45*/ + [0x10,0x04,0x1F,0xFC,0x0C,0x04,0x03,0x00,0x00,0xE0,0x10,0x18,0x1F,0xFC,0x10,0x00],#"N",46*/ + [0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00],#"O",47*/ + [0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80,0x0F,0x00,0x00,0x00],#"P",48*/ + [0x07,0xF0,0x08,0x18,0x10,0x24,0x10,0x24,0x10,0x1C,0x08,0x0A,0x07,0xF2,0x00,0x00],#"Q",49*/ + [0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x11,0xC0,0x11,0x30,0x0E,0x0C,0x00,0x04],#"R",50*/ + [0x00,0x00,0x0E,0x1C,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44,0x1C,0x38,0x00,0x00],#"S",51*/ + [0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00,0x18,0x00,0x00,0x00],#"T",52*/ + [0x10,0x00,0x1F,0xF8,0x10,0x04,0x00,0x04,0x00,0x04,0x10,0x04,0x1F,0xF8,0x10,0x00],#"U",53*/ + [0x10,0x00,0x1E,0x00,0x11,0xE0,0x00,0x1C,0x00,0x70,0x13,0x80,0x1C,0x00,0x10,0x00],#"V",54*/ + [0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C,0x1F,0xC0,0x00,0x00],#"W",55*/ + [0x10,0x04,0x18,0x0C,0x16,0x34,0x01,0xC0,0x01,0xC0,0x16,0x34,0x18,0x0C,0x10,0x04],#"X",56*/ + [0x10,0x00,0x1C,0x00,0x13,0x04,0x00,0xFC,0x13,0x04,0x1C,0x00,0x10,0x00,0x00,0x00],#"Y",57*/ + [0x08,0x04,0x10,0x1C,0x10,0x64,0x10,0x84,0x13,0x04,0x1C,0x04,0x10,0x18,0x00,0x00],#"Z",58*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x40,0x02,0x40,0x02,0x40,0x02,0x00,0x00],#"[",59*/ + [0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x80,0x00,0x60,0x00,0x1C,0x00,0x03,0x00,0x00],#"\",60*/ + [0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00],#"]",61*/ + [0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00],#"^",62*/ + [0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01],#"_",63*/ + [0x00,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#"`",64*/ + [0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xFC,0x00,0x04],#"a",65*/ + [0x10,0x00,0x1F,0xFC,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00],#"b",66*/ + [0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x00],#"c",67*/ + [0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08,0x1F,0xFC,0x00,0x04],#"d",68*/ + [0x00,0x00,0x00,0xF8,0x01,0x44,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xC8,0x00,0x00],#"e",69*/ + [0x00,0x00,0x01,0x04,0x01,0x04,0x0F,0xFC,0x11,0x04,0x11,0x04,0x11,0x00,0x18,0x00],#"f",70*/ + [0x00,0x00,0x00,0xD6,0x01,0x29,0x01,0x29,0x01,0x29,0x01,0xC9,0x01,0x06,0x00,0x00],#"g",71*/ + [0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04],#"h",72*/ + [0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00],#"i",73*/ + [0x00,0x00,0x00,0x03,0x00,0x01,0x01,0x01,0x19,0x01,0x19,0xFE,0x00,0x00,0x00,0x00],#"j",74*/ + [0x10,0x04,0x1F,0xFC,0x00,0x24,0x00,0x40,0x01,0xB4,0x01,0x0C,0x01,0x04,0x00,0x00],#"k",75*/ + [0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00],#"l",76*/ + [0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04,0x01,0x00,0x00,0xFC],#"m",77*/ + [0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04],#"n",78*/ + [0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00],#"o",79*/ + [0x01,0x01,0x01,0xFF,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00],#"p",80*/ + [0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x05,0x01,0xFF,0x00,0x01],#"q",81*/ + [0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00,0x01,0x80,0x00,0x00],#"r",82*/ + [0x00,0x00,0x00,0xCC,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x98,0x00,0x00],#"s",83*/ + [0x00,0x00,0x01,0x00,0x01,0x00,0x07,0xF8,0x01,0x04,0x01,0x04,0x00,0x00,0x00,0x00],#"t",84*/ + [0x01,0x00,0x01,0xF8,0x00,0x04,0x00,0x04,0x00,0x04,0x01,0x08,0x01,0xFC,0x00,0x04],#"u",85*/ + [0x01,0x00,0x01,0x80,0x01,0x70,0x00,0x0C,0x00,0x10,0x01,0x60,0x01,0x80,0x01,0x00],#"v",86*/ + [0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00],#"w",87*/ + [0x00,0x00,0x01,0x04,0x01,0x8C,0x00,0x74,0x01,0x70,0x01,0x8C,0x01,0x04,0x00,0x00],#"x",88*/ + [0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00],#"y",89*/ + [0x00,0x00,0x01,0x84,0x01,0x0C,0x01,0x34,0x01,0x44,0x01,0x84,0x01,0x0C,0x00,0x00],#"z",90*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x3E,0xFC,0x40,0x02,0x40,0x02],#"{",91*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00],#"|",92*/ + [0x00,0x00,0x40,0x02,0x40,0x02,0x3E,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#"]",93*/ + [0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00],#"~",94*/ +] + +progress_head = [ + 0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC, + 0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC, +] +progress_zero = [ + 0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C, + 0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C, + ] +progress_start = [ + 0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C, + 0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C, + ] +progress_Spare = [ + 0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC, + 0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC + ] +progress_full = [ + 0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C, + 0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00, + ] +progress_end = [ + 0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC, + 0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00, +] + +class EPD_driver(object): + def __init__(self,spi): + #Initialize DC RST pin + GPIO.setmode(GPIO.BCM) + GPIO.setwarnings(False) + GPIO.setup(RST,GPIO.OUT) + GPIO.setup(DC,GPIO.OUT) + GPIO.setup(CS,GPIO.OUT) + GPIO.setup(BUSY,GPIO.IN) + #Initialize SPI + self._spi = spi + self._spi.max_speed_hz = 2000000 + self._spi.mode = 0b00 + + def ReadBusy(self): + for i in range(0,400): + if GPIO.input(BUSY)==0: + #print('Busy is Low') + return 1 + time.sleep(0.01) + + def EPD_WriteCMD(self,command): + GPIO.output(DC,GPIO.LOW) + #print 'send command : ' ,hex(command) + self._spi.writebytes([command]) + + def EPD_WriteCMD_p1(self,command,para): + self.ReadBusy() + GPIO.output(DC,GPIO.LOW) + #print 'send command : ' ,hex(command) + self._spi.writebytes([command]) + GPIO.output(DC,GPIO.HIGH) + #print 'Sent to data : ' ,hex(para), + self._spi.writebytes([para]) + + def EPD_POWERON(self): + self.EPD_WriteCMD_p1(0x22,0xc0) + self.EPD_WriteCMD(0x20) + + def EPD_Write(self,value): + """Send command byte to display""" + GPIO.output(DC,GPIO.LOW) + time.sleep(0.01) + #print(value) + #print('send command : ' ,hex(value[0])) + self._spi.writebytes([value[0]]) #The first byte is written with the command value + GPIO.output(DC,GPIO.HIGH) + for i in range(0,len(value)-1): + data = value[i+1] + self._spi.writebytes([data]) + + def EPD_WriteDispRam(self,XSize,YSize,Dispbuff): + if XSize%8!=0 : + XSize = XSize+(8-XSize%8) + XSize = XSize/8 + NUM = 0 + self.ReadBusy() + GPIO.output(DC,GPIO.LOW) + self._spi.writebytes([0x24]) + GPIO.output(DC,GPIO.HIGH) + for i in range(0,int(YSize)): + for j in range(0,int(XSize)): + self._spi.writebytes([Dispbuff[NUM]]) + NUM = NUM +1 + + def EPD_WriteDispRamMono(self,XSize,YSize,dispdata): + if XSize%8!=0 : + XSize = XSize+(8-XSize%8) + XSize = XSize/8 + NUM = 0 + self.ReadBusy() + #print 'send command : ' ,hex(0x24) + GPIO.output(DC,GPIO.LOW) + self._spi.writebytes([0x24]) + GPIO.output(DC,GPIO.HIGH) + #print 'Sent to data : ',hex(dispdata), + if isinstance(dispdata,list): + for i in range(0,YSize): + for j in range(0,XSize): + self._spi.writebytes([dispdata[NUM]]) + NUM = NUM +1 + #print hex(dispdata[i+j]), + else: + #print 'send data : ' ,dispdata + for i in range(0,YSize): + for j in range(0,int(XSize)): + self._spi.writebytes([dispdata]) + + def EPD_SetRamArea(self,Xstart,Xend,Ystart,Ystart1,Yend,Yend1): + RamAreaX = [] + RamAreaY = [] + RamAreaX.extend([0x44,Xstart,Xend]) + RamAreaY.extend([0x45,Ystart,Ystart1,Yend,Yend1]) + self.EPD_Write(RamAreaX) + self.EPD_Write(RamAreaY) + + def EPD_SetRamPointer(self,addrX,addrY,addrY1): + RamPointerX = [] + RamPointerY = [] + RamPointerX.extend([0x4e,addrX]) + RamPointerY.extend([0x4f,addrY,addrY1]) + self.EPD_Write(RamPointerX) + self.EPD_Write(RamPointerY) + + def part_display(self,RAM_XST,RAM_XEND,RAM_YST,RAM_YST1,RAM_YEND,RAM_YEND1): + self.EPD_SetRamArea(RAM_XST,RAM_XEND,RAM_YST,RAM_YST1,RAM_YEND,RAM_YEND1) + self.EPD_SetRamPointer(RAM_XST,RAM_YST,RAM_YST1) + + def EPD_Init(self): + """Initialize dispaly""" + """2.reset driver""" + GPIO.output(CS,GPIO.LOW) + GPIO.output(RST,GPIO.HIGH) + time.sleep(0.1) + GPIO.output(RST,GPIO.LOW) + if GPIO.input(RST) == 0: + print('Reset is complete') + else: + print('Reset is false') + time.sleep(0.01) + GPIO.output(RST,GPIO.HIGH) + """3.set register""" + print('***********set register Start**********') + self.EPD_Write(GDOControl) # Pannel configuration, Gate selection + self.EPD_Write(softstart) # X decrease, Y decrease + self.EPD_Write(VCOMVol) # VCOM setting + self.EPD_Write(DummyLine) # dummy line per gate + self.EPD_Write(Gatetime) # Gage time setting + self.EPD_Write(RamDataEntryMode) # X increase, Y decrease + self.EPD_SetRamArea(0x00,int((xDot-1)/8),int((yDot-1)%256),int((yDot-1)/256),0x00,0x00) # X-source area,Y-gage area + self.EPD_SetRamPointer(0x00,(yDot-1)%256,int((yDot-1)/256)) # set ram + print('***********set register end**********') + + def EPD_Update(self): + self.EPD_WriteCMD_p1(0x22,0xc7) + self.EPD_WriteCMD(0x20) + self.EPD_WriteCMD(0xff) + + def EPD_Update_Part(self): + self.EPD_WriteCMD_p1(0x22,0x04) + self.EPD_WriteCMD(0x20) + self.EPD_WriteCMD(0xff) + + def EPD_init_Full(self): + self.EPD_Init() + self.EPD_Write(LUTDefault_full) + self.EPD_POWERON() + + def EPD_init_Part(self): + #GPIO.output(CS,GPIO.LOW) + self.EPD_Init() + self.EPD_Write(LUTDefault_part) + self.EPD_POWERON() + + def EPD_Dis_Full(self,DisBuffer,Label): + self.EPD_SetRamPointer(0x00,(yDot-1)%256,int((yDot-1)/256)) + if Label == 0 : + self.EPD_WriteDispRamMono(xDot, yDot, 0xff) + else: + if isinstance(DisBuffer,list): + print('is list') + else: + print('not list') + self.EPD_WriteDispRam(xDot, yDot, DisBuffer) + self.EPD_Update() + + def EPD_Dis_Part(self,xStart,xEnd,yStart,yEnd,DisBuffer,Label) : + if Label == 0 : + self.part_display(int(xStart/8),int(xEnd/8),int(yEnd%256),int(yEnd/256),int(yStart%256),int(yStart/256)) + self.EPD_WriteDispRamMono(xEnd-xStart, yEnd-yStart+1, DisBuffer) + self.EPD_Update_Part() + time.sleep(0.5) + self.part_display(int(xStart/8),int(xEnd/8),int(yEnd%256),int(yEnd/256),int(yStart%256),int(yStart/256)) + self.EPD_WriteDispRamMono(xEnd-xStart, yEnd-yStart+1, DisBuffer) + else: + self.part_display(int(xStart/8),int(xEnd/8),int(yEnd%256),int(yEnd/256),int(yStart%256),int(yStart/256)) + self.EPD_WriteDispRam(xEnd-xStart, yEnd-yStart+1, DisBuffer) + self.EPD_Update_Part() + time.sleep(0.5) + self.part_display(int(xStart/8),int(xEnd/8),int(yEnd%256),int(yEnd/256),int(yStart%256),int(yStart/256)) + self.EPD_WriteDispRam(xEnd-xStart, yEnd-yStart+1, DisBuffer) + + """*********************************************************************************************************************** + ------------------------------------------------------------------------ + |\\\ ///| + |\\\ App layer ///| + ------------------------------------------------------------------------ + ***********************************************************************************************************************""" + """******************************************************************************** + clear full screen + ********************************************************************************""" + def Dis_Clear_full(self): + print('1.init full screen') + self.EPD_init_Full() + time.sleep(DELAYTIME) + + #Clear screen + print('2.Clear screen') + m=0xff + self.EPD_Dis_Full(m,0) + time.sleep(DELAYTIME) + + def Dis_Clear_part(self): + print('1.init part screen') + self.EPD_init_Part() + time.sleep(DELAYTIME) + + #Clear screen + print('Clear screen') + m=0xff + self.EPD_Dis_Part(0,xDot-1,0,yDot-1,m,0) + time.sleep(DELAYTIME) + + def Dis_full_pic(self,DisBuffer): + self.EPD_Dis_Full(DisBuffer,1) + + def Dis_part_pic(self,xStart,xEnd,yStart,yEnd,DisBuffer): + self.EPD_Dis_Part(xStart,xEnd,yStart,yEnd,DisBuffer,1) + + """******************************************************************************** + funtion : Select the character size + parameter : + acsii : char data + size : char len + mode : char mode + n : char len + Remarks: + ********************************************************************************""" + def Dis_Char(self,acsii,size,mode,n): + ch = ord(acsii) - 32 + #print "ch =",ch + if size == 12: + temp = [0 for i in range(11)] + temp = Font1206[ch] + else : + temp = [0 for i in range(15)] + temp = Font1608[ch] + for i in range(0,size): + del w_buffer[size*n+i] + w_buffer.insert(size*n+i,~temp[i]&0xff) + + + """******************************************************************************** + funtion : write string + parameter : + x : x start address + y : y start address + pString : Display data + Size : char len + Remarks: + ********************************************************************************""" + def Dis_String(self,x,y,pString,Size): + len_s = 0 + x_addr = x + y_addr = y + #1.Remove the character and determine the character size + while len_s < len(pString): + if (x > (xDot- Size / 2)): + x = 0 + y = y + Size + if (y > (yDot- Size)): + y = x = 0 + new_string = pString[len_s:len_s+1] + self.Dis_Char(new_string, Size, 0,len_s) + x = x + Size / 2 + len_s = len_s + 1 #Calculate the current number for the first few characters + #2.show + if Size == 12: + self.EPD_Dis_Part(y_addr+1,y_addr+Size/2,yDot-(Size*len_s)-x_addr+1,yDot-x_addr,w_buffer,1) + else: + self.EPD_Dis_Part(y_addr+1,y_addr+Size/2,yDot-(Size*len_s)-x_addr+1,yDot-x_addr,w_buffer,1) + + """******************************************************************************** + funtion : Drawing pic + parameter : + xStart : x start address + yStart : y start address + DisBuffer : Display data + xSize : Displays the x length of the image + ySize : Displays the y length of the image + Remarks: + The sample image is 32 * 32 + ********************************************************************************""" + def Dis_Drawing(self,xStart,yStart,DisBuffer,xSize,ySize): + x_addr = xStart*8 + y_addr = yStart*8 + self.EPD_Dis_Part(y_addr,y_addr+xSize-1,yDot-ySize-x_addr,yDot-x_addr-1,DisBuffer,1) + + + """******************************************************************************** + funtion : show Progress + parameter : + progress_len : Progress bar length + ********************************************************************************""" + def Dis_Progress(self,progress_len): + y = 0 + pheight_pix = 2 + pWidth_pix = 16 + w_buffer = [0xff for i in range(0,5000)] + #1.Initialize the progress bar length and place it in the center of the lower end of the display + for z in range(0,progress_len): + for x in range(0,pWidth_pix*pheight_pix): + if(z == 0): + temp = [0 for i in range(pheight_pix*pWidth_pix-1)] + temp = progress_head + del w_buffer[y] + w_buffer.insert(y,temp[x]) + y = y + 1 + elif(z == progress_len -1): + temp = [0 for i in range(pheight_pix*pWidth_pix-1)] + temp = progress_end + del w_buffer[y] + w_buffer.insert(y,temp[x]) + y = y + 1 + else: + temp = [0 for i in range(pheight_pix*pWidth_pix-1)] + temp = progress_Spare + del w_buffer[y] + w_buffer.insert(y,temp[x]) + y = y + 1 + self.EPD_Dis_Part(xDot-xDot/16-5,xDot-xDot/16+4,(yDot-16*progress_len)/2-1,(yDot-16*progress_len)/2-1+16*progress_len,w_buffer,1) + #2.Load progress bar + y =0 + for z in range(0,progress_len): + for x in range(0,pWidth_pix*pheight_pix): + if(z == 0): + temp = [0 for i in range(pheight_pix*pWidth_pix-1)] + temp = progress_zero + del w_buffer[y] + w_buffer.insert(y,temp[x]) + y = y + 1 + elif(z == progress_len-1): + temp = [0 for i in range(pheight_pix*pWidth_pix-1)] + temp = progress_full + del w_buffer[y] + w_buffer.insert(y,temp[x]) + y = y + 1 + else: + temp = [0 for i in range(pheight_pix*pWidth_pix-1)] + temp = progress_start + del w_buffer[y] + w_buffer.insert(y,temp[x]) + y = y + 1 + self.EPD_Dis_Part(xDot-xDot/16-5,xDot-xDot/16+4,(yDot-16*progress_len)/2-1,(yDot-16*progress_len)/2-1+16*progress_len,w_buffer,1) + + def Dis_showtime(self,hour,minute,sec): + len_s = 16 + w_buffer = [0xff for i in range(5000)] + for z in range(0,8): + for x in range(0,len_s): + if z == 0 : + temp = [0 for i in range(15)] + temp = Font1608[int(16+hour/10)] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 1 : + temp = [0 for i in range(15)] + temp = Font1608[int(16+hour%10)] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 2 : + temp = [0 for i in range(15)] + temp = Font1608[26] + del w_buffer[x + z *16]#delete + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 3 : + temp = [0 for i in range(15)] + temp = Font1608[int(16+minute/10)] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 4 : + temp = [0 for i in range(15)] + temp = Font1608[int(16+minute%10)] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 5 : + temp = [0 for i in range(15)] + temp = Font1608[26] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 6 : + temp = [0 for i in range(15)] + temp = Font1608[int(16+sec/10)] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 7 : + temp = [0 for i in range(15)] + temp = Font1608[int(16+sec%10)] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + else : + return 1 + self.EPD_Dis_Part(int(xDot/10-1),int(xDot/10+8),int((yDot-16*4)/2),int((yDot-16*4)/2-1+16*4),w_buffer,1) + + + + diff --git a/cameteo-interface/cameteo.conf b/cameteo-interface/cameteo.conf index bbadfce..16651ed 100644 --- a/cameteo-interface/cameteo.conf +++ b/cameteo-interface/cameteo.conf @@ -12,9 +12,9 @@ sql_verbose = 0 mqtt_host = aro-yuno mqtt_port = 1883 mqtt_client_id = mqtt2sql -mqtt_user = arofarn' -mqtt_pass = xxx -mqtt_qos=1 +mqtt_user = arofarn +mqtt_pass = WaKaW9XMGUZ3rRJD +mqtt_qos = 1 mqtt_topic = huzzah0/# [MISC] diff --git a/cameteo-interface/cameteo.py b/cameteo-interface/cameteo.py index 04edfdd..d78798c 100644 --- a/cameteo-interface/cameteo.py +++ b/cameteo-interface/cameteo.py @@ -15,13 +15,17 @@ from datetime import datetime, timedelta from configparser import ConfigParser from flask import Flask from flask_sqlalchemy import SQLAlchemy +import os, sys ################# # CONFIGURATION # ################# +script_path = os.path.dirname(sys.argv[0]) +script_dir = os.path.abspath(script_path) + parser = ConfigParser() -parser.read('cameteo.conf') +parser.read(script_dir + '/cameteo.conf') #Misc TimeZone = parser['MISC'].get('TimeZone', fallback=0) @@ -130,5 +134,9 @@ class Data(db.Model): return "" % (self.value, self.type_id, self.valdate.utc, self.sensor_id, self.data_id) def __str__(self): - return "{} : {:4s}= {:8.2f} {:8s} (capteur: {:s})".format(self.valdate, self.type_id, self.value, self.unit, self.sensor_id) + try: + val = "{:8.2f} {:8s}".format(self.value, self.unit) + except: + val = " 'NULL' " + return "{} : {:4s}= {} (capteur: {:s})".format(self.valdate, self.type_id, val, self.sensor_id) diff --git a/cameteo-interface/interface.py b/cameteo-interface/interface.py index 5923d53..52b30db 100755 --- a/cameteo-interface/interface.py +++ b/cameteo-interface/interface.py @@ -26,6 +26,7 @@ nav.init_app(app) navbar = Navbar('Camétéo', View('Accueil', 'index'), + View('Toutes les données', 'all_data'), Subgroup('Par données', View("Température de l'air", 'by_data_type', dt='TA'), View("Humidité relative", 'by_data_type', dt='HR'), @@ -33,27 +34,43 @@ navbar = Navbar('Camétéo', ), Subgroup('Par capteur', View("Capteur BME280", 'by_sensor', sens = 'AdaBME280_1') - ) + ), + View('Configuration', 'config_page') ) + nav.register_element('top', navbar) @app.route('/') def index(): - date_deb = datetime.utcnow()-timedelta(seconds=3600) + return render_template('index.html') + +@app.route('/all_data') +def all_data(): + date_deb = datetime.utcnow()-timedelta(seconds=3600) res = Data.query.filter(Data.dbdate >= date_deb) - return render_template('index.html', dat=res.order_by(Data.dbdate.desc()).paginate(per_page=15)) - + return render_template('data_viz.html', dat=res.order_by(Data.dbdate.desc()).paginate(per_page=15)) + @app.route('/type_id=
') def by_data_type(dt): date_deb = datetime.utcnow()-timedelta(seconds=3600) res = Data.query.filter(Data.type_id == dt).filter(Data.dbdate >= date_deb) - return render_template('index.html', dat=res.order_by(Data.dbdate.desc()).paginate(per_page=15)) + return render_template('data_viz.html', dat=res.order_by(Data.dbdate.desc()).paginate(per_page=15)) @app.route('/sensor_id=') def by_sensor(sens): date_deb = datetime.utcnow()-timedelta(seconds=3600) res = Data.query.filter(Data.sensor_id == sens).filter(Data.dbdate >= date_deb) - return render_template('index.html', dat=res.order_by(Data.dbdate.desc()).paginate(per_page=15)) + return render_template('data_viz.html', dat=res.order_by(Data.dbdate.desc()).paginate(per_page=15)) + +@app.route('/configuration', methods=['GET', 'POST']) +def config_page(): + + if request.method == 'POST': + pass + else: + pass + + return render_template('config_page.html') if __name__=="__main__": app.run(host="0.0.0.0", debug=True) \ No newline at end of file diff --git a/cameteo-interface/mqtt2epaper.py b/cameteo-interface/mqtt2epaper.py new file mode 100644 index 0000000..0be7af6 --- /dev/null +++ b/cameteo-interface/mqtt2epaper.py @@ -0,0 +1,112 @@ +# Affichage de données arrivant sur un MQTT +# sur un écran ePaper +# Auteur : Arofarn +# v0.1 + +################# +# Configuration # +################# + + + +########### +# IMPORTS # +########### + +from cameteo import * +import paho.mqtt.client as mqtt +from spidev import SpiDev +import EPD_driver +import json +import netifaces + +############# +# CALLBACKS # +############# + +#Callback pour la connection au MQTT : souscriptions aux topics +def on_connect(client, userdata, flags, rc): + print(mqtt.connack_string(rc)) + if rc == 0: + print("Subscribing to %s ..." % mqtt_topic) + client.subscribe(mqtt_topic) + print("OK") + + +#Callback de gestion des messages arrivant au MQTT : +# affichage et enregistrement en base de données +def on_message(client, userdata, msg): + top=msg.topic[len(mqtt_topic)-1:].strip() + + subtopics = top.split("/") + payload = msg.payload.decode() + print(payload) + val = json.loads(payload) + + #Test présence et cohérence de la valeur + try: + val['value'] = float(val['value'] ) + except: + print("Value error: {}".format(val['value'])) + val['value'] = float('nan') + + #Gestion du symbole des degrés parfois difficile pour certaines sources + #val['unit'] = val['unit'].replace('deg', '°') + + #Affichage des données + coord_type = { 'TA' : 33, + 'HR' : 49, + 'PA' : 65 + } + + disp.Dis_String(110, coord_type[val['type']], "{} {} ".format(val['value'], val['unit']), 16) + +#Callback particulier pour gérer les date/heure arrivent sur le broker MQTT +def on_message_date(client, userdata, msg): + payload = msg.payload.decode() + #try: + d = datetime.strptime(payload, "%H:%M:%S %d/%m/%Y") + disp.Dis_String(0, 17, d.strftime("%d/%m/%Y %H:%M:%S"), 16) + #except: + # print("Date mal formatée : %s" % payload) + +#Callback de déconnexion au broker MQTT +def on_disconnect(client, userdata, msg): + if msg != 0: + print("Déconnexion imprévu : %s" % msg) + exit() + +######## +# Main # +######## + +#init and Clear full screen +bus = 0 +device = 0 +disp = EPD_driver.EPD_driver(spi=SpiDev(bus, device)) + +print("Start display...") +disp.Dis_Clear_full() +disp.Dis_Clear_part() +print("OK") + +#disp.Dis_String(0, 0, "{} | {}".format(socket.gethostname(), netifaces.ifaddresses('wlan0')[2][0]['addr']), 12) +disp.Dis_String(0, 0, "IPv4 : {}".format(netifaces.ifaddresses('wlan0')[2][0]['addr']), 16) +disp.Dis_String(0, 33, "Temperature : ", 16) +disp.Dis_String(0, 49, "Humidity : ", 16) +disp.Dis_String(0, 65, "Pression : ", 16) + +#Connect to MQTT broker and loop... +mqtt_client = mqtt.Client(mqtt_client_id, clean_session=False) +mqtt_client.username_pw_set(mqtt_user, mqtt_pass) +mqtt_client.on_connect = on_connect +mqtt_client.on_message = on_message +mqtt_client.on_disconnect = on_disconnect + +mqtt_client.message_callback_add("huzzah0/NTP/date", on_message_date) + +print(mqtt_host + ":" + str(mqtt_port)) +mqtt_client.connect(mqtt_host, int(mqtt_port), 60) + +mqtt_client.loop_forever() + diff --git a/cameteo-interface/mqtt2papirus.py b/cameteo-interface/mqtt2papirus.py deleted file mode 100755 index c0f64c8..0000000 --- a/cameteo-interface/mqtt2papirus.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/python2 -# -*- coding: utf8 -*- - -# Get data from MQTT broker and print them to -# Papirus ePaper display - -from papirus import Papirus -from papirus import PapirusTextPos - -import paho.mqtt.client as mqtt - -import datetime -import decimal - -# MQTT settings -mqtt_server = 'localhost' -mqtt_port= 1883 -mqtt_auth= {'username':'cameteo', - 'password':'CaMeteo'} -mqtt_client_id= 'mqtt2papirus' - -topic="pi/papirus_zero_hat/temperature/#" - -# Papirus display settings -disp_rotation = 0 -font_path = '/usr/share/fonts/truetype/freefont/FreeMono.ttf' -font_path_bold = '/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf' -text_size = 15 - -date = datetime.datetime.now().replace(microsecond=0).isoformat() -temp = "-" -unit_temp = "\u00B0C" - -#Set the dispaly and position of text -text = PapirusTextPos(False, rotation=disp_rotation) -#text.Clear() -text.AddText(date, 0, 0, text_size, Id="Date", font_path=font_path_bold) -text.AddText("Connecting to MQTT...", 5, 15, text_size, Id="Temperature", font_path=font_path) -text.WriteAll() - -# The callback for when the client receives a CONNACK response from the server. -def on_connect(client, userdata, flags, rc): - print("Connected with result code "+str(rc)) - date = datetime.datetime.now().replace(microsecond=0).isoformat() - text.UpdateText("Date", date, font_path=font_path_bold) - text.UpdateText("Temperature", "Connected to MQTT !") - text.WriteAll() - # Subscribing in on_connect() means that if we lose the connection and - # reconnect then subscriptions will be renewed. - client.unsubscribe("$SYS/#") - client.subscribe(topic) - -# The callback for when a PUBLISH message is received from the server. -def on_message(client, userdata, msg): - global unit_temp - top=msg.topic[len(topic)-1:].strip() - print(top+" : "+str(msg.payload)) - - if top == "date" : - text.UpdateText("Date", msg.payload, font_path=font_path_bold) - - if top == "unit" : - unit_temp = msg.payload - - if top == "value" : - val = decimal.Decimal(msg.payload) - txt = "T= %.1f" % val + unit_temp.decode("utf-8") - text.UpdateText("Temperature", txt) - text.WriteAll() - -######## -# Main # -######## - -#Connect to MQTT broker and loop... -mqtt_client = mqtt.Client(mqtt_client_id, clean_session=False) -mqtt_client.username_pw_set(mqtt_auth['username'], mqtt_auth['password']) -mqtt_client.on_connect = on_connect -mqtt_client.on_message = on_message -mqtt_client.connect(mqtt_server, mqtt_port, 60) - -mqtt_client.loop_forever() - - diff --git a/cameteo-interface/mqtt2sqlal.py b/cameteo-interface/mqtt2sqlal.py index e2a2b23..50c2a99 100755 --- a/cameteo-interface/mqtt2sqlal.py +++ b/cameteo-interface/mqtt2sqlal.py @@ -22,10 +22,12 @@ from math import isnan #Callback pour la connection au MQTT : souscriptions aux topics def on_connect(client, userdata, flags, rc): - print("Connected to MQTT broker with result code "+str(rc)) - print("Subscribing to %s ..." % mqtt_topic) - client.subscribe(mqtt_topic) - print("OK") + print(mqtt.connack_string(rc)) + if rc == 0: + print("Subscribing to %s ..." % mqtt_topic) + client.subscribe(mqtt_topic) + print("OK") + #Callback de gestion des messages arrivant au MQTT : # affichage et enregistrement en base de données @@ -33,7 +35,8 @@ def on_message(client, userdata, msg): top=msg.topic[len(mqtt_topic)-1:].strip() subtopics = top.split("/") - payload = msg.payload.decode() + payload = msg.payload.decode() + print(payload) val = json.loads(payload) #Test présence et cohérence de la valeur @@ -61,10 +64,14 @@ def on_message(client, userdata, msg): print(data) - db.session.add(data) - db.session.commit() - db.session.close() - + try: + db.session.add(data) + db.session.commit() + except: + print("Erreur lors de l'enregistrement en base de données") + finally: + db.session.close() + #Callback particulier pour gérer les date/heure arrivent sur le broker MQTT def on_message_date(client, userdata, msg): payload = msg.payload.decode() @@ -86,7 +93,7 @@ def on_disconnect(client, userdata, msg): #Connect to MQTT broker and loop... mqtt_client = mqtt.Client(mqtt_client_id, clean_session=False) -#mqtt_client.username_pw_set(mqtt_auth['username'], mqtt_auth['password']) +mqtt_client.username_pw_set(mqtt_user, mqtt_pass) mqtt_client.on_connect = on_connect mqtt_client.on_message = on_message mqtt_client.on_disconnect = on_disconnect diff --git a/cameteo-interface/papirus-lm752mqtt.py b/cameteo-interface/papirus-lm752mqtt.py deleted file mode 100755 index 9106bee..0000000 --- a/cameteo-interface/papirus-lm752mqtt.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/python3 -# -*- coding: utf8 -*- - -#Get LM75 temperature value and send it to MQTT broker - -import smbus -import paho.mqtt.publish as mqtt -import datetime - -# MQTT settings -mqtt_server = 'localhost' -mqtt_port= 1883 -mqtt_auth= {'username':'cameteo', - 'password':'CaMeteo'} -mqtt_client_id= 'papirus_temp2mqtt' -mqtt_qos=2 - -mqtt_topic="pi/papirus_zero_hat/temperature/" - -#LM75B settings -LM75B_ADDRESS = 0x48 -LM75B_TEMP_REGISTER = 0 -LM75B_CONF_REGISTER = 1 -LM75B_THYST_REGISTER = 2 -LM75B_TOS_REGISTER = 3 -LM75B_CONF_NORMAL = 0 - -class LM75B(object): - def __init__(self, address=LM75B_ADDRESS, busnum=1): - self._address = address - self._bus = smbus.SMBus(busnum) - self._bus.write_byte_data(self._address, LM75B_CONF_REGISTER, LM75B_CONF_NORMAL) - - def getTempC(self): - """Return temperature in degrees Celsius""" - raw = self._bus.read_word_data(self._address, LM75B_TEMP_REGISTER) & 0xFFFF - raw = (((raw << 8) & 0xFF00) + (raw >> 8) +128 ) /256 - return raw - -######## -# Main # -######## - -#Get and print data -date = datetime.datetime.now().replace(microsecond=0).isoformat() -print(date) - -sens = LM75B() -lm75_temp = sens.getTempC() -print("Temperature (Papirus HAT LM75b) : %s °C" % lm75_temp) - - -#Send data to MQTT broker -mqtt_data = [{'topic':mqtt_topic + "value", 'payload':lm75_temp, 'qos':mqtt_qos, 'retain':True}, - {'topic':mqtt_topic + "date", 'payload':date, 'qos':mqtt_qos, 'retain':True}, - {'topic':mqtt_topic + "unit", 'payload':"\u00B0C", 'qos':mqtt_qos, 'retain':True}, - {'topic':mqtt_topic + "desc", 'payload':"LM75b sensor", 'qos':mqtt_qos, 'retain':True}] - -mqtt.multiple(mqtt_data, - hostname= mqtt_server , - port= mqtt_port , - auth= mqtt_auth , - client_id= mqtt_client_id ) diff --git a/cameteo-interface/templates/base.html b/cameteo-interface/templates/base.html index 5bde244..cc36352 100644 --- a/cameteo-interface/templates/base.html +++ b/cameteo-interface/templates/base.html @@ -1,12 +1,10 @@ {% extends "bootstrap/base.html" %} -{% block html_attribs %} lang="fr"{% endblock %} +{% block html_attribs %} lang="fr" {% endblock %} {% block styles %} {{super()}} - - {% endblock %} {% block navbar %} diff --git a/cameteo-interface/templates/config_page.html b/cameteo-interface/templates/config_page.html new file mode 100644 index 0000000..2c80d38 --- /dev/null +++ b/cameteo-interface/templates/config_page.html @@ -0,0 +1,9 @@ +{% extends "base.html" %} +{% block title %}Camétéo{% endblock %} +{% block content %} + +
+ +
+ +{% endblock %} \ No newline at end of file diff --git a/cameteo-interface/templates/data_viz.html b/cameteo-interface/templates/data_viz.html new file mode 100644 index 0000000..30a224c --- /dev/null +++ b/cameteo-interface/templates/data_viz.html @@ -0,0 +1,85 @@ +{% extends "base.html" %} +{% block title %}Camétéo{% endblock %} + +{% block styles %} + {{super()}} + + +{% endblock %} + +{% block content %} +{% from "bootstrap/pagination.html" import render_pagination %} +
+
+ {{ render_pagination(dat) }} +
+ + + + + + + + + + {% for item in dat.items -%} + {% if item.value is number %} + + {% else %} + + {% endif %} + {%- endfor %} + +
Date/HeureValeurCapteur
{{ item.valdate }}{{ item.value }} {{ item.unit }}{{ item.sensor_id }}
{{ item.valdate }}{{ item.value }}{{ item.sensor_id }}
+ {{ render_pagination(dat) }} +
+
+ +{% endblock %} \ No newline at end of file diff --git a/cameteo-interface/templates/index.html b/cameteo-interface/templates/index.html index 4c39edb..2631881 100644 --- a/cameteo-interface/templates/index.html +++ b/cameteo-interface/templates/index.html @@ -1,71 +1,14 @@ {% extends "base.html" %} {% block title %}Camétéo{% endblock %} + {% block content %} -{% from "bootstrap/pagination.html" import render_pagination %} -
-
- -
- {{ render_pagination(dat) }} -
- - - - - - {% for item in dat.items %} - - {% endfor %} - -
Date/HeureValeurCapteur
{{ item.valdate }}{{ item.value }} {{ item.unit }}{{ item.sensor_id }}
- {{ render_pagination(dat) }} + +
+
+

Bienvenue !

+

Camétéo est un projet de prise de mesures et de photos pour documenter + des activités d'extérieurs (randonnées, jardin...).

+

Voir les données...

{% endblock %} \ No newline at end of file diff --git a/cameteo-interface/templates/index2.html b/cameteo-interface/templates/index2.html new file mode 100644 index 0000000..2631881 --- /dev/null +++ b/cameteo-interface/templates/index2.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} +{% block title %}Camétéo{% endblock %} + +{% block content %} + +
+
+

Bienvenue !

+

Camétéo est un projet de prise de mesures et de photos pour documenter + des activités d'extérieurs (randonnées, jardin...).

+

Voir les données...

+
+
+{% endblock %} \ No newline at end of file diff --git a/doc/2.13inch_e-Paper_HAT-code.7z b/doc/2.13inch_e-Paper_HAT-code.7z new file mode 100644 index 0000000..96d48b7 Binary files /dev/null and b/doc/2.13inch_e-Paper_HAT-code.7z differ diff --git a/python/epaper-screen/EPD_driver.py b/python/epaper-screen/EPD_driver.py new file mode 100644 index 0000000..7da58d3 --- /dev/null +++ b/python/epaper-screen/EPD_driver.py @@ -0,0 +1,641 @@ + +import spidev +import RPi.GPIO as GPIO +import time + +""" Register initial variable """ +EPD2X9 = 0 +EPD02X13 = 1 +EPD1X54 = 0 + +if EPD2X9 == 1: + xDot = 128 + yDot = 296 + DELAYTIME = 1.5 + LUTDefault_full = [0x32,0x02,0x02,0x01,0x11,0x12,0x12,0x22,0x22,0x66,0x69,0x69,0x59,0x58,0x99,0x99,0x88,0x00,0x00,0x00,0x00,0xF8,0xB4,0x13,0x51,0x35,0x51,0x51,0x19,0x01,0x00] + LUTDefault_part = [0x32,0x10,0x18,0x18,0x08,0x18,0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x14,0x44,0x12,0x00,0x00,0x00,0x00,0x00,0x00] +if EPD02X13 == 1: + xDot = 122 + yDot = 250 + DELAYTIME = 4 + LUTDefault_full = [0x32,0x22,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x01,0x00,0x00,0x00,0x00] + LUTDefault_part = [0x32,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00] +if EPD1X54 == 1: + xDot = 200 + yDot = 200 + DELAYTIME = 1.5 + LUTDefault_full = [0x32,0x02,0x02,0x01,0x11,0x12,0x12,0x22,0x22,0x66,0x69,0x69,0x59,0x58,0x99,0x99,0x88,0x00,0x00,0x00,0x00,0xF8,0xB4,0x13,0x51,0x35,0x51,0x51,0x19,0x01,0x00] + LUTDefault_part = [0x32,0x10,0x18,0x18,0x08,0x18,0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x14,0x44,0x12,0x00,0x00,0x00,0x00,0x00,0x00] + +GDOControl = [0x01,int((yDot-1)%256),int((yDot-1)/256),0x00] #for 2.9inch +softstart = [0x0c,0xd7,0xd6,0x9d] +VCOMVol = [0x2c,0xa8] # VCOM 7c +DummyLine = [0x3a,0x1a] # 4 dummy line per gate +Gatetime = [0x3b,0x08] # 2us per line +RamDataEntryMode = [0x11,0x01] # Ram data entry mode +w_buffer = [0 for i in range(5000)] +""" Display lib """ +Font1206 = [ + [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#" ",0*/ + [0x00,0x00,0x00,0x00,0x3F,0x40,0x00,0x00,0x00,0x00,0x00,0x00],#"!",1*/ + [0x00,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x40,0x00,0x00,0x00],#""",2*/ + [0x09,0x00,0x0B,0xC0,0x3D,0x00,0x0B,0xC0,0x3D,0x00,0x09,0x00],#"#",3*/ + [0x18,0xC0,0x24,0x40,0x7F,0xE0,0x22,0x40,0x31,0x80,0x00,0x00],#"$",4*/ + [0x18,0x00,0x24,0xC0,0x1B,0x00,0x0D,0x80,0x32,0x40,0x01,0x80],#"%",5*/ + [0x03,0x80,0x1C,0x40,0x27,0x40,0x1C,0x80,0x07,0x40,0x00,0x40],#"&",6*/ + [0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#"'",7*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x20,0x40,0x40,0x20],#"(",8*/ + [0x00,0x00,0x40,0x20,0x20,0x40,0x1F,0x80,0x00,0x00,0x00,0x00],#")",9*/ + [0x09,0x00,0x06,0x00,0x1F,0x80,0x06,0x00,0x09,0x00,0x00,0x00],#"*",10*/ + [0x04,0x00,0x04,0x00,0x3F,0x80,0x04,0x00,0x04,0x00,0x00,0x00],#"+",11*/ + [0x00,0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#",",12*/ + [0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00],#"-",13*/ + [0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#".",14*/ + [0x00,0x20,0x01,0xC0,0x06,0x00,0x38,0x00,0x40,0x00,0x00,0x00],#"/",15*/ + [0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00],#"0",16*/ + [0x00,0x00,0x10,0x40,0x3F,0xC0,0x00,0x40,0x00,0x00,0x00,0x00],#"1",17*/ + [0x18,0xC0,0x21,0x40,0x22,0x40,0x24,0x40,0x18,0x40,0x00,0x00],#"2",18*/ + [0x10,0x80,0x20,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00],#"3",19*/ + [0x02,0x00,0x0D,0x00,0x11,0x00,0x3F,0xC0,0x01,0x40,0x00,0x00],#"4",20*/ + [0x3C,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x23,0x80,0x00,0x00],#"5",21*/ + [0x1F,0x80,0x24,0x40,0x24,0x40,0x34,0x40,0x03,0x80,0x00,0x00],#"6",22*/ + [0x30,0x00,0x20,0x00,0x27,0xC0,0x38,0x00,0x20,0x00,0x00,0x00],#"7",23*/ + [0x1B,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00],#"8",24*/ + [0x1C,0x00,0x22,0xC0,0x22,0x40,0x22,0x40,0x1F,0x80,0x00,0x00],#"9",25*/ + [0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00],#":",26*/ + [0x00,0x00,0x00,0x00,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00],#";",27*/ + [0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0x40,0x40],#"<",28*/ + [0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x00,0x00],#"=",29*/ + [0x00,0x00,0x40,0x40,0x20,0x80,0x11,0x00,0x0A,0x00,0x04,0x00],#">",30*/ + [0x18,0x00,0x20,0x00,0x23,0x40,0x24,0x00,0x18,0x00,0x00,0x00],#"?",31*/ + [0x1F,0x80,0x20,0x40,0x27,0x40,0x29,0x40,0x1F,0x40,0x00,0x00],#"@",32*/ + [0x00,0x40,0x07,0xC0,0x39,0x00,0x0F,0x00,0x01,0xC0,0x00,0x40],#"A",33*/ + [0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00],#"B",34*/ + [0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x30,0x80,0x00,0x00],#"C",35*/ + [0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00],#"D",36*/ + [0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x40,0x30,0xC0,0x00,0x00],#"E",37*/ + [0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x00,0x30,0x00,0x00,0x00],#"F",38*/ + [0x0F,0x00,0x10,0x80,0x20,0x40,0x22,0x40,0x33,0x80,0x02,0x00],#"G",39*/ + [0x20,0x40,0x3F,0xC0,0x04,0x00,0x04,0x00,0x3F,0xC0,0x20,0x40],#"H",40*/ + [0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x00,0x00],#"I",41*/ + [0x00,0x60,0x20,0x20,0x20,0x20,0x3F,0xC0,0x20,0x00,0x20,0x00],#"J",42*/ + [0x20,0x40,0x3F,0xC0,0x24,0x40,0x0B,0x00,0x30,0xC0,0x20,0x40],#"K",43*/ + [0x20,0x40,0x3F,0xC0,0x20,0x40,0x00,0x40,0x00,0x40,0x00,0xC0],#"L",44*/ + [0x3F,0xC0,0x3C,0x00,0x03,0xC0,0x3C,0x00,0x3F,0xC0,0x00,0x00],#"M",45*/ + [0x20,0x40,0x3F,0xC0,0x0C,0x40,0x23,0x00,0x3F,0xC0,0x20,0x00],#"N",46*/ + [0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00],#"O",47*/ + [0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x00,0x18,0x00,0x00,0x00],#"P",48*/ + [0x1F,0x80,0x21,0x40,0x21,0x40,0x20,0xE0,0x1F,0xA0,0x00,0x00],#"Q",49*/ + [0x20,0x40,0x3F,0xC0,0x24,0x40,0x26,0x00,0x19,0xC0,0x00,0x40],#"R",50*/ + [0x18,0xC0,0x24,0x40,0x24,0x40,0x22,0x40,0x31,0x80,0x00,0x00],#"S",51*/ + [0x30,0x00,0x20,0x40,0x3F,0xC0,0x20,0x40,0x30,0x00,0x00,0x00],#"T",52*/ + [0x20,0x00,0x3F,0x80,0x00,0x40,0x00,0x40,0x3F,0x80,0x20,0x00],#"U",53*/ + [0x20,0x00,0x3E,0x00,0x01,0xC0,0x07,0x00,0x38,0x00,0x20,0x00],#"V",54*/ + [0x38,0x00,0x07,0xC0,0x3C,0x00,0x07,0xC0,0x38,0x00,0x00,0x00],#"W",55*/ + [0x20,0x40,0x39,0xC0,0x06,0x00,0x39,0xC0,0x20,0x40,0x00,0x00],#"X",56*/ + [0x20,0x00,0x38,0x40,0x07,0xC0,0x38,0x40,0x20,0x00,0x00,0x00],#"Y",57*/ + [0x30,0x40,0x21,0xC0,0x26,0x40,0x38,0x40,0x20,0xC0,0x00,0x00],#"Z",58*/ + [0x00,0x00,0x00,0x00,0x7F,0xE0,0x40,0x20,0x40,0x20,0x00,0x00],#"[",59*/ + [0x00,0x00,0x70,0x00,0x0C,0x00,0x03,0x80,0x00,0x40,0x00,0x00],#"\",60*/ + [0x00,0x00,0x40,0x20,0x40,0x20,0x7F,0xE0,0x00,0x00,0x00,0x00],#"]",61*/ + [0x00,0x00,0x20,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00],#"^",62*/ + [0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10],#"_",63*/ + [0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#"`",64*/ + [0x00,0x00,0x02,0x80,0x05,0x40,0x05,0x40,0x03,0xC0,0x00,0x40],#"a",65*/ + [0x20,0x00,0x3F,0xC0,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00],#"b",66*/ + [0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x06,0x40,0x00,0x00],#"c",67*/ + [0x00,0x00,0x03,0x80,0x04,0x40,0x24,0x40,0x3F,0xC0,0x00,0x40],#"d",68*/ + [0x00,0x00,0x03,0x80,0x05,0x40,0x05,0x40,0x03,0x40,0x00,0x00],#"e",69*/ + [0x00,0x00,0x04,0x40,0x1F,0xC0,0x24,0x40,0x24,0x40,0x20,0x00],#"f",70*/ + [0x00,0x00,0x02,0xE0,0x05,0x50,0x05,0x50,0x06,0x50,0x04,0x20],#"g",71*/ + [0x20,0x40,0x3F,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40],#"h",72*/ + [0x00,0x00,0x04,0x40,0x27,0xC0,0x00,0x40,0x00,0x00,0x00,0x00],#"i",73*/ + [0x00,0x10,0x00,0x10,0x04,0x10,0x27,0xE0,0x00,0x00,0x00,0x00],#"j",74*/ + [0x20,0x40,0x3F,0xC0,0x01,0x40,0x07,0x00,0x04,0xC0,0x04,0x40],#"k",75*/ + [0x20,0x40,0x20,0x40,0x3F,0xC0,0x00,0x40,0x00,0x40,0x00,0x00],#"l",76*/ + [0x07,0xC0,0x04,0x00,0x07,0xC0,0x04,0x00,0x03,0xC0,0x00,0x00],#"m",77*/ + [0x04,0x40,0x07,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40],#"n",78*/ + [0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00],#"o",79*/ + [0x04,0x10,0x07,0xF0,0x04,0x50,0x04,0x40,0x03,0x80,0x00,0x00],#"p",80*/ + [0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x50,0x07,0xF0,0x00,0x10],#"q",81*/ + [0x04,0x40,0x07,0xC0,0x02,0x40,0x04,0x00,0x04,0x00,0x00,0x00],#"r",82*/ + [0x00,0x00,0x06,0x40,0x05,0x40,0x05,0x40,0x04,0xC0,0x00,0x00],#"s",83*/ + [0x00,0x00,0x04,0x00,0x1F,0x80,0x04,0x40,0x00,0x40,0x00,0x00],#"t",84*/ + [0x04,0x00,0x07,0x80,0x00,0x40,0x04,0x40,0x07,0xC0,0x00,0x40],#"u",85*/ + [0x04,0x00,0x07,0x00,0x04,0xC0,0x01,0x80,0x06,0x00,0x04,0x00],#"v",86*/ + [0x06,0x00,0x01,0xC0,0x07,0x00,0x01,0xC0,0x06,0x00,0x00,0x00],#"w",87*/ + [0x04,0x40,0x06,0xC0,0x01,0x00,0x06,0xC0,0x04,0x40,0x00,0x00],#"x",88*/ + [0x04,0x10,0x07,0x10,0x04,0xE0,0x01,0x80,0x06,0x00,0x04,0x00],#"y",89*/ + [0x00,0x00,0x04,0x40,0x05,0xC0,0x06,0x40,0x04,0x40,0x00,0x00],#"z",90*/ + [0x00,0x00,0x00,0x00,0x04,0x00,0x7B,0xE0,0x40,0x20,0x00,0x00],#"{",91*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00],#"|",92*/ + [0x00,0x00,0x40,0x20,0x7B,0xE0,0x04,0x00,0x00,0x00,0x00,0x00],#"]",93*/ + [0x40,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x40,0x00],#"~",94*/ +] + +Font1608 = [ + [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#" ",0*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00],#"!",1*/ + [0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00],#""",2*/ + [0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00],#"#",3*/ + [0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00],#"$",4*/ + [0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00],#"%",5*/ + [0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08],#"&",6*/ + [0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#"'",7*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00],#"(",8*/ + [0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00],#")",9*/ + [0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00],#"*",10*/ + [0x00,0x80,0x00,0x80,0x00,0x80,0x0F,0xF8,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00],#"+",11*/ + [0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#",",12*/ + [0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80],#"-",13*/ + [0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#".",14*/ + [0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00],#"/",15*/ + [0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00],#"0",16*/ + [0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00],#"1",17*/ + [0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00],#"2",18*/ + [0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00],#"3",19*/ + [0x00,0x00,0x00,0xE0,0x03,0x20,0x04,0x24,0x08,0x24,0x1F,0xFC,0x00,0x24,0x00,0x00],#"4",20*/ + [0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00],#"5",21*/ + [0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00],#"6",22*/ + [0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00],#"7",23*/ + [0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00],#"8",24*/ + [0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xF0,0x00,0x00],#"9",25*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x0C,0x00,0x00,0x00,0x00,0x00,0x00],#":",26*/ + [0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#";",27*/ + [0x00,0x00,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x10,0x08,0x08,0x10,0x04,0x00,0x00],#"<",28*/ + [0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x00,0x00],#"=",29*/ + [0x00,0x00,0x10,0x04,0x08,0x08,0x04,0x10,0x02,0x20,0x01,0x40,0x00,0x80,0x00,0x00],#">",30*/ + [0x00,0x00,0x0E,0x00,0x12,0x00,0x10,0x0C,0x10,0x6C,0x10,0x80,0x0F,0x00,0x00,0x00],#"?",31*/ + [0x03,0xE0,0x0C,0x18,0x13,0xE4,0x14,0x24,0x17,0xC4,0x08,0x28,0x07,0xD0,0x00,0x00],#"@",32*/ + [0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04],#"A",33*/ + [0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x11,0x04,0x0E,0x88,0x00,0x70,0x00,0x00],#"B",34*/ + [0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08,0x1C,0x10,0x00,0x00],#"C",35*/ + [0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00],#"D",36*/ + [0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x17,0xC4,0x10,0x04,0x08,0x18,0x00,0x00],#"E",37*/ + [0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x17,0xC0,0x10,0x00,0x08,0x00,0x00,0x00],#"F",38*/ + [0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1C,0x78,0x00,0x40,0x00,0x00],#"G",39*/ + [0x10,0x04,0x1F,0xFC,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84,0x1F,0xFC,0x10,0x04],#"H",40*/ + [0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x00,0x00,0x00,0x00],#"I",41*/ + [0x00,0x03,0x00,0x01,0x10,0x01,0x10,0x01,0x1F,0xFE,0x10,0x00,0x10,0x00,0x00,0x00],#"J",42*/ + [0x10,0x04,0x1F,0xFC,0x11,0x04,0x03,0x80,0x14,0x64,0x18,0x1C,0x10,0x04,0x00,0x00],#"K",43*/ + [0x10,0x04,0x1F,0xFC,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x0C,0x00,0x00],#"L",44*/ + [0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00],#"M",45*/ + [0x10,0x04,0x1F,0xFC,0x0C,0x04,0x03,0x00,0x00,0xE0,0x10,0x18,0x1F,0xFC,0x10,0x00],#"N",46*/ + [0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00],#"O",47*/ + [0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80,0x0F,0x00,0x00,0x00],#"P",48*/ + [0x07,0xF0,0x08,0x18,0x10,0x24,0x10,0x24,0x10,0x1C,0x08,0x0A,0x07,0xF2,0x00,0x00],#"Q",49*/ + [0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x11,0xC0,0x11,0x30,0x0E,0x0C,0x00,0x04],#"R",50*/ + [0x00,0x00,0x0E,0x1C,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44,0x1C,0x38,0x00,0x00],#"S",51*/ + [0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00,0x18,0x00,0x00,0x00],#"T",52*/ + [0x10,0x00,0x1F,0xF8,0x10,0x04,0x00,0x04,0x00,0x04,0x10,0x04,0x1F,0xF8,0x10,0x00],#"U",53*/ + [0x10,0x00,0x1E,0x00,0x11,0xE0,0x00,0x1C,0x00,0x70,0x13,0x80,0x1C,0x00,0x10,0x00],#"V",54*/ + [0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C,0x1F,0xC0,0x00,0x00],#"W",55*/ + [0x10,0x04,0x18,0x0C,0x16,0x34,0x01,0xC0,0x01,0xC0,0x16,0x34,0x18,0x0C,0x10,0x04],#"X",56*/ + [0x10,0x00,0x1C,0x00,0x13,0x04,0x00,0xFC,0x13,0x04,0x1C,0x00,0x10,0x00,0x00,0x00],#"Y",57*/ + [0x08,0x04,0x10,0x1C,0x10,0x64,0x10,0x84,0x13,0x04,0x1C,0x04,0x10,0x18,0x00,0x00],#"Z",58*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x40,0x02,0x40,0x02,0x40,0x02,0x00,0x00],#"[",59*/ + [0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x80,0x00,0x60,0x00,0x1C,0x00,0x03,0x00,0x00],#"\",60*/ + [0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00],#"]",61*/ + [0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00],#"^",62*/ + [0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01],#"_",63*/ + [0x00,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#"`",64*/ + [0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xFC,0x00,0x04],#"a",65*/ + [0x10,0x00,0x1F,0xFC,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00],#"b",66*/ + [0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x00],#"c",67*/ + [0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08,0x1F,0xFC,0x00,0x04],#"d",68*/ + [0x00,0x00,0x00,0xF8,0x01,0x44,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xC8,0x00,0x00],#"e",69*/ + [0x00,0x00,0x01,0x04,0x01,0x04,0x0F,0xFC,0x11,0x04,0x11,0x04,0x11,0x00,0x18,0x00],#"f",70*/ + [0x00,0x00,0x00,0xD6,0x01,0x29,0x01,0x29,0x01,0x29,0x01,0xC9,0x01,0x06,0x00,0x00],#"g",71*/ + [0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04],#"h",72*/ + [0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00],#"i",73*/ + [0x00,0x00,0x00,0x03,0x00,0x01,0x01,0x01,0x19,0x01,0x19,0xFE,0x00,0x00,0x00,0x00],#"j",74*/ + [0x10,0x04,0x1F,0xFC,0x00,0x24,0x00,0x40,0x01,0xB4,0x01,0x0C,0x01,0x04,0x00,0x00],#"k",75*/ + [0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00],#"l",76*/ + [0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04,0x01,0x00,0x00,0xFC],#"m",77*/ + [0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04],#"n",78*/ + [0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00],#"o",79*/ + [0x01,0x01,0x01,0xFF,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00],#"p",80*/ + [0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x05,0x01,0xFF,0x00,0x01],#"q",81*/ + [0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00,0x01,0x80,0x00,0x00],#"r",82*/ + [0x00,0x00,0x00,0xCC,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x98,0x00,0x00],#"s",83*/ + [0x00,0x00,0x01,0x00,0x01,0x00,0x07,0xF8,0x01,0x04,0x01,0x04,0x00,0x00,0x00,0x00],#"t",84*/ + [0x01,0x00,0x01,0xF8,0x00,0x04,0x00,0x04,0x00,0x04,0x01,0x08,0x01,0xFC,0x00,0x04],#"u",85*/ + [0x01,0x00,0x01,0x80,0x01,0x70,0x00,0x0C,0x00,0x10,0x01,0x60,0x01,0x80,0x01,0x00],#"v",86*/ + [0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00],#"w",87*/ + [0x00,0x00,0x01,0x04,0x01,0x8C,0x00,0x74,0x01,0x70,0x01,0x8C,0x01,0x04,0x00,0x00],#"x",88*/ + [0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00],#"y",89*/ + [0x00,0x00,0x01,0x84,0x01,0x0C,0x01,0x34,0x01,0x44,0x01,0x84,0x01,0x0C,0x00,0x00],#"z",90*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x3E,0xFC,0x40,0x02,0x40,0x02],#"{",91*/ + [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00],#"|",92*/ + [0x00,0x00,0x40,0x02,0x40,0x02,0x3E,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#"]",93*/ + [0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00],#"~",94*/ +] + +progress_head = [ + 0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC, + 0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC, +] +progress_zero = [ + 0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C, + 0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C, + ] +progress_start = [ + 0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C, + 0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C, + ] +progress_Spare = [ + 0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC, + 0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC + ] +progress_full = [ + 0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C, + 0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00, + ] +progress_end = [ + 0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC, + 0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00, +] + +""" BCM GPIO """ +RST = 17 +DC = 25 +BUSY = 24 +CS = 8 + +class EPD_driver(object): + def __init__(self,spi): + #Initialize DC RST pin + GPIO.setmode(GPIO.BCM) + GPIO.setwarnings(False) + GPIO.setup(RST,GPIO.OUT) + GPIO.setup(DC,GPIO.OUT) + GPIO.setup(CS,GPIO.OUT) + GPIO.setup(BUSY,GPIO.IN) + #Initialize SPI + self._spi = spi + self._spi.max_speed_hz = 2000000 + self._spi.mode = 0b00 + + def ReadBusy(self): + for i in range(0,400): + if GPIO.input(BUSY)==0: + print('Busy is Low') + return 1 + time.sleep(0.01) + def EPD_WriteCMD(self,command): + GPIO.output(DC,GPIO.LOW) + #print 'send command : ' ,hex(command) + self._spi.writebytes([command]) + def EPD_WriteCMD_p1(self,command,para): + self.ReadBusy() + GPIO.output(DC,GPIO.LOW) + #print 'send command : ' ,hex(command) + self._spi.writebytes([command]) + GPIO.output(DC,GPIO.HIGH) + #print 'Sent to data : ' ,hex(para), + self._spi.writebytes([para]) + def EPD_POWERON(self): + self.EPD_WriteCMD_p1(0x22,0xc0) + self.EPD_WriteCMD(0x20) + def EPD_Write(self,value): + """Send command byte to display""" + GPIO.output(DC,GPIO.LOW) + time.sleep(0.01) + #print(value) + #print('send command : ' ,hex(value[0])) + self._spi.writebytes([value[0]]) #The first byte is written with the command value + GPIO.output(DC,GPIO.HIGH) + for i in range(0,len(value)-1): + data = value[i+1] + self._spi.writebytes([data]) + def EPD_WriteDispRam(self,XSize,YSize,Dispbuff): + if XSize%8!=0 : + XSize = XSize+(8-XSize%8) + XSize = XSize/8 + NUM = 0 + self.ReadBusy() + GPIO.output(DC,GPIO.LOW) + self._spi.writebytes([0x24]) + GPIO.output(DC,GPIO.HIGH) + for i in range(0,int(YSize)): + for j in range(0,int(XSize)): + self._spi.writebytes([Dispbuff[NUM]]) + NUM = NUM +1 + #print hex(Dispbuff[i+j]), + #print '' + def EPD_WriteDispRamMono(self,XSize,YSize,dispdata): + if XSize%8!=0 : + XSize = XSize+(8-XSize%8) + XSize = XSize/8 + NUM = 0 + self.ReadBusy() + #print 'send command : ' ,hex(0x24) + GPIO.output(DC,GPIO.LOW) + self._spi.writebytes([0x24]) + GPIO.output(DC,GPIO.HIGH) + #print 'Sent to data : ',hex(dispdata), + if isinstance(dispdata,list): + for i in range(0,YSize): + for j in range(0,XSize): + self._spi.writebytes([dispdata[NUM]]) + NUM = NUM +1 + #print hex(dispdata[i+j]), + else: + #print 'send data : ' ,dispdata + for i in range(0,YSize): + for j in range(0,int(XSize)): + self._spi.writebytes([dispdata]) + def EPD_SetRamArea(self,Xstart,Xend,Ystart,Ystart1,Yend,Yend1): + RamAreaX = [] + RamAreaY = [] + RamAreaX.extend([0x44,Xstart,Xend]) + RamAreaY.extend([0x45,Ystart,Ystart1,Yend,Yend1]) + self.EPD_Write(RamAreaX) + self.EPD_Write(RamAreaY) + def EPD_SetRamPointer(self,addrX,addrY,addrY1): + RamPointerX = [] + RamPointerY = [] + RamPointerX.extend([0x4e,addrX]) + RamPointerY.extend([0x4f,addrY,addrY1]) + self.EPD_Write(RamPointerX) + self.EPD_Write(RamPointerY) + def part_display(self,RAM_XST,RAM_XEND,RAM_YST,RAM_YST1,RAM_YEND,RAM_YEND1): + self.EPD_SetRamArea(RAM_XST,RAM_XEND,RAM_YST,RAM_YST1,RAM_YEND,RAM_YEND1) + self.EPD_SetRamPointer(RAM_XST,RAM_YST,RAM_YST1) + def EPD_Init(self): + """Initialize dispaly""" + """2.reset driver""" + GPIO.output(CS,GPIO.LOW) + GPIO.output(RST,GPIO.HIGH) + time.sleep(0.1) + GPIO.output(RST,GPIO.LOW) + if GPIO.input(RST) == 0: + print('Reset is complete') + else: + print('Reset is false') + time.sleep(0.01) + GPIO.output(RST,GPIO.HIGH) + """3.set register""" + print('***********set register Start**********') + self.EPD_Write(GDOControl) # Pannel configuration, Gate selection + self.EPD_Write(softstart) # X decrease, Y decrease + self.EPD_Write(VCOMVol) # VCOM setting + self.EPD_Write(DummyLine) # dummy line per gate + self.EPD_Write(Gatetime) # Gage time setting + self.EPD_Write(RamDataEntryMode) # X increase, Y decrease + self.EPD_SetRamArea(0x00,int((xDot-1)/8),int((yDot-1)%256),int((yDot-1)/256),0x00,0x00) # X-source area,Y-gage area + self.EPD_SetRamPointer(0x00,(yDot-1)%256,int((yDot-1)/256)) # set ram + print('***********set register end**********') + def EPD_Update(self): + self.EPD_WriteCMD_p1(0x22,0xc7) + self.EPD_WriteCMD(0x20) + self.EPD_WriteCMD(0xff) + def EPD_Update_Part(self): + self.EPD_WriteCMD_p1(0x22,0x04) + self.EPD_WriteCMD(0x20) + self.EPD_WriteCMD(0xff) + def EPD_init_Full(self): + self.EPD_Init() + self.EPD_Write(LUTDefault_full) + self.EPD_POWERON() + def EPD_init_Part(self): + #GPIO.output(CS,GPIO.LOW) + self.EPD_Init() + self.EPD_Write(LUTDefault_part) + self.EPD_POWERON() + def EPD_Dis_Full(self,DisBuffer,Label): + self.EPD_SetRamPointer(0x00,(yDot-1)%256,int((yDot-1)/256)) + if Label == 0 : + self.EPD_WriteDispRamMono(xDot, yDot, 0xff) + else: + if isinstance(DisBuffer,list): + print('is list') + else: + print('not list') + self.EPD_WriteDispRam(xDot, yDot, DisBuffer) + self.EPD_Update() + def EPD_Dis_Part(self,xStart,xEnd,yStart,yEnd,DisBuffer,Label) : + if Label == 0 : + self.part_display(int(xStart/8),int(xEnd/8),int(yEnd%256),int(yEnd/256),int(yStart%256),int(yStart/256)) + self.EPD_WriteDispRamMono(xEnd-xStart, yEnd-yStart+1, DisBuffer) + self.EPD_Update_Part() + time.sleep(0.5) + self.part_display(int(xStart/8),int(xEnd/8),int(yEnd%256),int(yEnd/256),int(yStart%256),int(yStart/256)) + self.EPD_WriteDispRamMono(xEnd-xStart, yEnd-yStart+1, DisBuffer) + else: + self.part_display(int(xStart/8),int(xEnd/8),int(yEnd%256),int(yEnd/256),int(yStart%256),int(yStart/256)) + self.EPD_WriteDispRam(xEnd-xStart, yEnd-yStart+1, DisBuffer) + self.EPD_Update_Part() + time.sleep(0.5) + self.part_display(int(xStart/8),int(xEnd/8),int(yEnd%256),int(yEnd/256),int(yStart%256),int(yStart/256)) + self.EPD_WriteDispRam(xEnd-xStart, yEnd-yStart+1, DisBuffer) + + """*********************************************************************************************************************** + ------------------------------------------------------------------------ + |\\\ ///| + |\\\ App layer ///| + ------------------------------------------------------------------------ + ***********************************************************************************************************************""" + """******************************************************************************** + clear full screen + ********************************************************************************""" + def Dis_Clear_full(self): + print('1.init full screen') + self.EPD_init_Full() + time.sleep(DELAYTIME) + + #Clear screen + print('2.Clear screen') + m=0xff + self.EPD_Dis_Full(m,0) + time.sleep(DELAYTIME) + + def Dis_Clear_part(self): + print('1.init part screen') + self.EPD_init_Part() + time.sleep(DELAYTIME) + + #Clear screen + print('Clear screen') + m=0xff + self.EPD_Dis_Part(0,xDot-1,0,yDot-1,m,0) + time.sleep(DELAYTIME) + + def Dis_full_pic(self,DisBuffer): + self.EPD_Dis_Full(DisBuffer,1) + + def Dis_part_pic(self,xStart,xEnd,yStart,yEnd,DisBuffer): + self.EPD_Dis_Part(xStart,xEnd,yStart,yEnd,DisBuffer,1) + + """******************************************************************************** + funtion : Select the character size + parameter : + acsii : char data + size : char len + mode : char mode + next : char len + Remarks: + ********************************************************************************""" + def Dis_Char(self,acsii,size,mode,next): + ch = ord(acsii) - 32 + #print "ch =",ch + if size == 12: + temp = [0 for i in range(11)] + temp = Font1206[ch] + else : + temp = [0 for i in range(15)] + temp = Font1608[ch] + for i in range(0,size): + del w_buffer[size*next+i] + w_buffer.insert(size*next+i,~temp[i]&0xff) + """******************************************************************************** + funtion : write string + parameter : + x : x start address + y : y start address + pString : Display data + Size : char len + Remarks: + ********************************************************************************""" + def Dis_String(self,x,y,pString,Size): + len_s = 0 + x_addr = x + y_addr = y + #1.Remove the character and determine the character size + while len_s < len(pString): + if (x > (xDot- Size / 2)): + x = 0 + y = y + Size + if (y > (yDot- Size)): + y = x = 0 + new_string = pString[len_s:len_s+1] + self.Dis_Char(new_string, Size, 0,len_s) + x = x + Size / 2 + len_s = len_s + 1 #Calculate the current number for the first few characters + #2.show + if Size == 12: + self.EPD_Dis_Part(y_addr+1,y_addr+Size/2,yDot-(Size*len_s)-x_addr+1,yDot-x_addr,w_buffer,1) + else: + self.EPD_Dis_Part(y_addr+1,y_addr+Size/2,yDot-(Size*len_s)-x_addr+1,yDot-x_addr,w_buffer,1) + """******************************************************************************** + funtion : Drawing pic + parameter : + xStart : x start address + yStart : y start address + DisBuffer : Display data + xSize : Displays the x length of the image + ySize : Displays the y length of the image + Remarks: + The sample image is 32 * 32 + ********************************************************************************""" + def Dis_Drawing(self,xStart,yStart,DisBuffer,xSize,ySize): + x_addr = xStart*8 + y_addr = yStart*8 + self.EPD_Dis_Part(y_addr,y_addr+xSize-1,yDot-ySize-x_addr,yDot-x_addr-1,DisBuffer,1) + """******************************************************************************** + funtion : show Progress + parameter : + progress_len : Progress bar length + ********************************************************************************""" + def Dis_Progress(self,progress_len): + y = 0 + pheight_pix = 2 + pWidth_pix = 16 + w_buffer = [0xff for i in range(0,5000)] + #1.Initialize the progress bar length and place it in the center of the lower end of the display + for z in range(0,progress_len): + for x in range(0,pWidth_pix*pheight_pix): + if(z == 0): + temp = [0 for i in range(pheight_pix*pWidth_pix-1)] + temp = progress_head + del w_buffer[y] + w_buffer.insert(y,temp[x]) + y = y + 1 + elif(z == progress_len -1): + temp = [0 for i in range(pheight_pix*pWidth_pix-1)] + temp = progress_end + del w_buffer[y] + w_buffer.insert(y,temp[x]) + y = y + 1 + else: + temp = [0 for i in range(pheight_pix*pWidth_pix-1)] + temp = progress_Spare + del w_buffer[y] + w_buffer.insert(y,temp[x]) + y = y + 1 + self.EPD_Dis_Part(xDot-xDot/16-5,xDot-xDot/16+4,(yDot-16*progress_len)/2-1,(yDot-16*progress_len)/2-1+16*progress_len,w_buffer,1) + #2.Load progress bar + y =0 + for z in range(0,progress_len): + for x in range(0,pWidth_pix*pheight_pix): + if(z == 0): + temp = [0 for i in range(pheight_pix*pWidth_pix-1)] + temp = progress_zero + del w_buffer[y] + w_buffer.insert(y,temp[x]) + y = y + 1 + elif(z == progress_len-1): + temp = [0 for i in range(pheight_pix*pWidth_pix-1)] + temp = progress_full + del w_buffer[y] + w_buffer.insert(y,temp[x]) + y = y + 1 + else: + temp = [0 for i in range(pheight_pix*pWidth_pix-1)] + temp = progress_start + del w_buffer[y] + w_buffer.insert(y,temp[x]) + y = y + 1 + self.EPD_Dis_Part(xDot-xDot/16-5,xDot-xDot/16+4,(yDot-16*progress_len)/2-1,(yDot-16*progress_len)/2-1+16*progress_len,w_buffer,1) + def Dis_showtime(self,hour,minute,sec): + len_s = 16 + w_buffer = [0xff for i in range(5000)] + for z in range(0,8): + for x in range(0,len_s): + if z == 0 : + temp = [0 for i in range(15)] + temp = Font1608[int(16+hour/10)] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 1 : + temp = [0 for i in range(15)] + temp = Font1608[int(16+hour%10)] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 2 : + temp = [0 for i in range(15)] + temp = Font1608[26] + del w_buffer[x + z *16]#delete + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 3 : + temp = [0 for i in range(15)] + temp = Font1608[int(16+minute/10)] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 4 : + temp = [0 for i in range(15)] + temp = Font1608[int(16+minute%10)] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 5 : + temp = [0 for i in range(15)] + temp = Font1608[26] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 6 : + temp = [0 for i in range(15)] + temp = Font1608[int(16+sec/10)] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + elif z == 7 : + temp = [0 for i in range(15)] + temp = Font1608[int(16+sec%10)] + del w_buffer[x + z *16] + w_buffer.insert(x + z *16,~temp[x]&0xff) + else : + return 1 + self.EPD_Dis_Part(int(xDot/10-1),int(xDot/10+8),int((yDot-16*4)/2),int((yDot-16*4)/2-1+16*4),w_buffer,1) + + + + diff --git a/python/epaper-screen/main.py b/python/epaper-screen/main.py new file mode 100644 index 0000000..e29072d --- /dev/null +++ b/python/epaper-screen/main.py @@ -0,0 +1,960 @@ +import time +import spidev as SPI +import EPD_driver +import datetime + +EPD2X9 = 0 +EPD02X13 = 1 +EPD1X54 = 0 + +if EPD2X9 == 1: + xDot = 128 + yDot = 296 + DELAYTIME = 0.5 + waveshare = [ + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X03,0XFF,0X7F,0XDF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X03,0XFE,0X3F,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,0XFC,0X1E,0X07,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X03,0XF8,0X38,0X00,0X00,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X07,0XF0,0X70,0X00,0X00,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X3F,0XC0,0XC0,0X00,0X00,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0X81,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X3F,0XFF,0XC3,0X83,0XFF,0XFB,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XFF,0XFF,0XEF,0XC7,0XFF,0XF3,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X1C,0X7F,0X80,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X1F,0XF0,0X1C,0X60,0X01,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X07,0XF0,0X1C,0X60,0X03,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X70,0X07,0XFF,0X1C,0X60,0X1F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XE0,0X03,0X80,0X1C,0X63,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE0,0X03,0X80,0X1C,0X63,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE1,0XC3,0X80,0X1C,0X63,0XFB,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE3,0XE3,0XFF,0X1C,0X60,0X01,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE3,0XE7,0XF0,0X1C,0X60,0X01,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XC3,0XC7,0XF0,0X1C,0X60,0X03,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X0F,0XF0,0X1C,0X7F,0X87,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XFF,0XC1,0XFF,0X87,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X03,0XFF,0X01,0XFF,0XC1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X03,0XF8,0X00,0X3F,0X81,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X03,0XC0,0X00,0X03,0X03,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X03,0X80,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X3F,0XC0,0X0F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC4,0X3F,0X00,0X0F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF3,0XFF,0XFF,0XFC,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X7F,0XFF,0XFC,0X00,0X07,0X01,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X0F,0XFF,0XFC,0X00,0X3F,0XC0,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X01,0XFF,0XFC,0X3F,0XFF,0XE3,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X3F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0XC6,0X07,0XC7,0XF1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X83,0XC6,0X07,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X03,0XC6,0X3C,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X1F,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X7F,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X1F,0XFF,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC6,0X3F,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X7F,0XC0,0X00,0X46,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X1F,0XC0,0X00,0X46,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X0F,0XC0,0X00,0X46,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X07,0XC0,0X00,0X46,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X07,0XC6,0X3F,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X63,0X07,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XE3,0XC3,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE3,0XC3,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE3,0XE3,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE3,0XE3,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE3,0XE3,0XC6,0X24,0XC6,0X31,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XE3,0XE3,0XC6,0X24,0XC0,0X00,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X03,0XE3,0XC6,0X3C,0XC0,0X00,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X03,0XE3,0XC6,0X07,0XC0,0X00,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,0XE7,0XC6,0X07,0XC0,0X00,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X03,0XC7,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X0F,0X87,0XF8,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X07,0XC3,0XF8,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X07,0XC3,0XF8,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X03,0XE3,0XF8,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0XE3,0XF8,0X70,0XE1,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XC1,0XE3,0XF8,0X70,0XE1,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE1,0XE3,0XF8,0X70,0XE1,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE0,0XC3,0XF8,0X70,0XE1,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE0,0X03,0XF8,0X70,0XE1,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XF0,0X07,0XF8,0X70,0XE1,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XF0,0X07,0XF8,0X70,0XE1,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XF8,0X0F,0X80,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X1F,0X80,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X70,0XE1,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X03,0XF8,0X70,0XE1,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X03,0XF8,0X70,0XE1,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X03,0XF8,0X70,0XE1,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X03,0XF8,0X70,0XE1,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X03,0XF8,0X70,0XE1,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XF8,0X00,0X01,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X7F,0XFF,0XF8,0X00,0X01,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XFF,0XF8,0X00,0X01,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XF8,0X00,0X01,0X81,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XF8,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X7F,0XFF,0XFF,0XFF,0XFE,0X03,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XFF,0XFF,0XFE,0X0F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X03,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X03,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC3,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC3,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC3,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X1F,0XC3,0XFC,0X3F,0XEF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X07,0XC3,0XFC,0X3F,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X70,0X07,0XC3,0XFC,0X3F,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XE0,0X03,0XC3,0XFC,0X3F,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE0,0X03,0XC3,0XFC,0X3F,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE1,0XC3,0XC3,0XFC,0X3F,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE3,0XE3,0XC3,0XFC,0X3F,0XE1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE3,0XE7,0XC3,0XFC,0X3F,0XC1,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XC3,0XC7,0XC3,0XE0,0X00,0X01,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X0F,0XC3,0XC0,0X00,0X01,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XC3,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X03,0XC3,0X80,0X00,0X07,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X03,0XC3,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X03,0XC2,0X04,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X03,0XC2,0X0C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X7C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XC0,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XC0,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XC1,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XC3,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X63,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XE3,0XC3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE3,0XC3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE3,0XE3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE3,0XE3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE3,0XE3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XE3,0XE3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X03,0XE3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X03,0XE3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,0XE7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X03,0XC7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF + ] + +if EPD02X13 == 1: + xDot = 122 + yDot = 250 + DELAYTIME = 2 + waveshare = [ + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X03,0XFF,0XEF,0XFB,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X03,0XFF,0XC7,0XF0,0X7F,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X0F,0XFF,0X81,0XC0,0X7F,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0XFF,0XFF,0X03,0X80,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XFC,0X07,0X00,0X00,0X07,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X7F,0XFF,0XF8,0X0C,0X00,0X00,0X07,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE3,0XFF,0XFF,0XF0,0X18,0X00,0X00,0X07,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X30,0X00,0X00,0X07,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X1F,0XF0,0XF8,0X3F,0XFF,0XDF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X0F,0XF9,0XFC,0XFF,0XFF,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X70,0X07,0XFE,0X01,0XC7,0XF8,0X07,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XF0,0X03,0XFE,0X01,0XC6,0X00,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XE0,0X03,0XFE,0X01,0XC6,0X00,0X1F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE1,0X83,0XFF,0XF1,0XC6,0X00,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE3,0XC3,0XE0,0X01,0XC6,0X3F,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE3,0XC3,0XE0,0X01,0XC6,0X3F,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE3,0XC3,0XE0,0X01,0XC6,0X3F,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE3,0XC7,0XE0,0X01,0XC6,0X00,0X1F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE3,0X87,0XFF,0XF1,0XC6,0X00,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XC3,0X8F,0XFE,0X01,0XC6,0X00,0X1F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XFE,0X01,0XC6,0X00,0X1F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XFE,0X01,0XC7,0XFC,0X3F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XFF,0XFC,0X3F,0XF8,0X3F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X03,0XFF,0XE0,0X1F,0XFC,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X03,0XFF,0X00,0X03,0XFC,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X30,0X1F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XFF,0XFF,0XE0,0X07,0XF0,0X00,0X7F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XFF,0XFF,0XF0,0X07,0XF8,0X00,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X3F,0XFF,0XF7,0X86,0X00,0X00,0X3F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0X80,0X00,0X10,0X1F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X01,0XFF,0XFF,0X80,0X00,0XF8,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X3F,0XFF,0X80,0X0F,0XFC,0X07,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X07,0XFF,0X87,0XFF,0XFE,0X1F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0XF1,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XF1,0X80,0X7C,0X7F,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X07,0XF1,0X80,0X4C,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X3F,0XF1,0X8F,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X01,0XFF,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X3F,0XFF,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XFF,0XFF,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XFF,0XFF,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X3F,0XF1,0X8F,0XFC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X0F,0XF0,0X00,0X04,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X0F,0XF0,0X00,0X04,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X07,0XF0,0X00,0X04,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X07,0XF0,0X00,0X04,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X43,0X03,0XF0,0X00,0X04,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XC3,0X83,0XF1,0X8F,0XFC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XC3,0XC3,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XC3,0XC3,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XC3,0XC3,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XC3,0XC3,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XC3,0XC3,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0XC7,0XF1,0X8C,0XCC,0X63,0X8F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0X87,0XF1,0X8C,0XCC,0X00,0X07,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X03,0X07,0XF1,0X8F,0XCC,0X00,0X07,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,0XFF,0XF1,0X80,0X4C,0X00,0X07,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0XFF,0XF1,0X80,0X7C,0X00,0X07,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0X80,0X7C,0X00,0X07,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X1F,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X0F,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0XC3,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X03,0XC3,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X83,0XC3,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XC1,0XC3,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XC1,0XC3,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XC0,0X83,0XFE,0X1E,0X1E,0X1F,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE0,0X07,0XFE,0X1E,0X1E,0X1F,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE0,0X07,0XFE,0X1E,0X1E,0X1F,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XF0,0X07,0XFE,0X1E,0X1E,0X1F,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XF0,0X0F,0XFE,0X1E,0X1E,0X1F,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFE,0X1E,0X1E,0X1F,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X1E,0X1E,0X1F,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X03,0XFE,0X1E,0X1E,0X1F,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X03,0XFE,0X1E,0X1E,0X1F,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X03,0XFE,0X1E,0X1E,0X1F,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X03,0XFE,0X1E,0X1E,0X1F,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X7F,0XFF,0XFE,0X1E,0X1E,0X1F,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XFE,0X1E,0X1E,0X1F,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XFF,0XFF,0XFE,0X00,0X00,0X1F,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XFF,0XFF,0XFE,0X00,0X00,0X1F,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XFF,0XFF,0XFE,0X00,0X00,0X1F,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XFF,0XFF,0XFE,0X00,0X00,0X1E,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XFE,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XFF,0XFF,0XFF,0XC0,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XFF,0XFF,0XFF,0XE0,0X3F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X03,0XFF,0XFF,0XFF,0XE0,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X1F,0XF0,0X7F,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X0F,0XF0,0X7F,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X70,0X07,0XF0,0X7F,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XF0,0X03,0XF0,0X7F,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XE0,0X03,0XF0,0X7F,0X83,0XFE,0X3F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE1,0X83,0XF0,0X7F,0X83,0XFE,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE3,0XC3,0XF0,0X7F,0X83,0XFE,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE3,0XC3,0XF0,0X7F,0X83,0XFE,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE3,0XC3,0XF0,0X7F,0X83,0XFE,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE3,0XC7,0XF0,0X7F,0X83,0XFE,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XE3,0X87,0XF0,0X7F,0X83,0XFE,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XC3,0X8F,0XF0,0X7F,0X83,0XFC,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XF0,0X78,0X00,0X00,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XF0,0X70,0X00,0X00,0X0F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XF0,0X70,0X00,0X00,0X1F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X03,0XF0,0X70,0X00,0X00,0X1F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X03,0XF0,0X60,0X00,0X00,0X3F,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X60,0X00,0X01,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X41,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X43,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XF0,0X0F,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XF0,0X0F,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XF0,0X1F,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XF0,0X1F,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XF0,0X3F,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XF0,0X3F,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XF0,0X7F,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X7F,0XFF,0XFF,0XFF,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XFF,0XFF,0X83,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X43,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XC3,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XC3,0XC3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XC3,0XC3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XC3,0XC3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XC3,0XC3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XC3,0XC3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0XC7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X03,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X03,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0 + ] +if EPD1X54 == 1: + xDot = 200 + yDot = 200 + DELAYTIME = 0.5 + waveshare = [ + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFC,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X01,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFC,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X03,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8, + 0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XC0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X1F,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X1F,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, + 0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0X80,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0XFF,0XFF,0XDF, + 0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0XFF,0X8F,0XC0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0XFF, + 0XFF,0X07,0X81,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0XFF,0XFE,0X0E,0X00,0X00,0X3F,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00, + 0X01,0XFF,0XFC,0X1C,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X0F,0XFF,0XF0,0X30,0X00,0X00,0X3F, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFC,0X00,0XFF,0XFF,0XE0,0X40,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X0F,0XFF,0XFF,0XF0,0XE0,0XFF, + 0XFE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFC,0X7F,0XFF,0XFF,0XFB,0XF1,0XFF,0XFC,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, + 0X07,0X1F,0XE0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X07,0XFF,0XFC,0X07,0X18,0X00,0X7F,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X01, + 0XFF,0XFC,0X07,0X18,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X1C,0X01,0XFF,0XFF,0XC7,0X18,0X07,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE, + 0X38,0X00,0XFF,0XE0,0X07,0X18,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X78,0X00,0XFF,0XE0,0X07,0X18,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFC,0X78,0X70,0XFF,0XE0,0X07,0X18,0XFE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X78,0XF8,0XFF,0XFF,0XC7, + 0X18,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFC,0X78,0XF9,0XFF,0XFC,0X07,0X18,0X00,0X7F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X30,0XF1,0XFF, + 0XFC,0X07,0X18,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X03,0XFF,0XFC,0X07,0X1F,0XE1,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00, + 0X00,0XFF,0XFF,0XF0,0X7F,0XE1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0XFF,0XFF,0XC0,0X7F,0XF0,0X7F, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFE,0X00,0X00,0XFF,0XFE,0X00,0X0F,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0XFF,0XF0,0X00,0X00, + 0XC0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XC0,0X00,0XFF,0XE0,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0, + 0X0F,0XF0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0X0F,0XC0,0X03,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0XFF,0XFF, + 0XFF,0XFF,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X1F,0XFF,0XFF,0XFF,0X00,0X01,0XC0,0X7F,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, + 0X03,0XFF,0XFF,0XFF,0X00,0X0F,0XF0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X7F,0XFF,0XFF,0X0F,0XFF,0XF8, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFC,0X00,0X0F,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X01,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF, + 0XFF,0X81,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF1,0X81,0XF1,0XFC,0X7F,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XE0,0XFF,0XF1,0X81,0XF1,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0XFF,0XF1,0X8F,0X31,0X8C,0X7F, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XE0,0X00,0XFF,0XF1,0X89,0X31,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X07,0XFF,0XF1,0X89,0X31, + 0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFC,0X00,0X1F,0XFF,0XF1,0X89,0X31,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0XFF,0XF1, + 0X89,0X31,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XF1,0X89,0X31,0X8C,0X7F,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF, + 0XFF,0XF1,0X89,0X31,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XF1,0X89,0X31,0X8C,0X7F,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XF1,0X8F,0XF1,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X1F,0XFF,0XF0,0X00,0X11,0X8C, + 0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XC0,0X07,0XFF,0XF0,0X00,0X11,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XFF,0XF0,0X00, + 0X11,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0X00,0X01,0XFF,0XF0,0X00,0X11,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X01,0XFF, + 0XF1,0X8F,0XF1,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X18,0XC1,0XFF,0XF1,0X89,0X31,0X8C,0X7F,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X38, + 0XF0,0XFF,0XF1,0X89,0X31,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X78,0XF0,0XFF,0XF1,0X89,0X31,0X8C,0X7F, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFC,0X78,0XF8,0XFF,0XF1,0X89,0X31,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X78,0XF8,0XFF,0XF1,0X89,0X31, + 0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFC,0X78,0XF8,0XFF,0XF1,0X89,0X31,0X8C,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X38,0XF8,0XFF,0XF1, + 0X89,0X30,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0XF8,0XFF,0XF1,0X8F,0X30,0X00,0X3F,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0XF8, + 0XFF,0XF1,0X81,0XF0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0XF9,0XFF,0XF1,0X81,0XF0,0X00,0X3F,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0X80,0XF1,0XFF,0XFF,0X81,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X83,0XE1,0XFF, + 0XFE,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X01,0XF0,0XFF,0XFE,0X00,0X00,0X0F,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X01, + 0XF0,0XFF,0XFE,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0XF8,0XFF,0XFE,0X00,0X00,0X0F,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFC,0X00,0XF8,0XFF,0XFE,0X1C,0X38,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X30,0X78,0XFF,0XFE,0X1C,0X38, + 0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFC,0X78,0X78,0XFF,0XFE,0X1C,0X38,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X78,0X30,0XFF,0XFE, + 0X1C,0X38,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFC,0X78,0X00,0XFF,0XFE,0X1C,0X38,0X7F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X7C,0X01, + 0XFF,0XFE,0X1C,0X38,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X7C,0X01,0XFF,0XFE,0X1C,0X38,0X7F,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, + 0X3E,0X03,0XFF,0XE0,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X07,0XFF,0XE0,0X00,0X00,0X00, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00, + 0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X1C,0X38,0X78,0X7F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF, + 0XFE,0X1C,0X38,0X78,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFE,0X1C,0X38,0X78,0X7F,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00, + 0X00,0XFF,0XFE,0X1C,0X38,0X78,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFE,0X1C,0X38,0X78,0X7F, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, + 0X00,0X00,0X00,0XFF,0XFE,0X1C,0X38,0X78,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8F,0XFF,0XFF,0XFE,0X00,0X00, + 0X78,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0X1F,0XFF,0XFF,0XFE,0X00,0X00,0X78,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XFF,0XFE, + 0X00,0X00,0X78,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFE,0X00,0X00,0X60,0X7F,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF, + 0XFF,0XFE,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, + 0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0X83, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFC,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0X00,0X00,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0XFF, + 0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XF0,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0X0F,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0X07,0XFF,0XF0,0XFF,0X0F,0XFB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X01,0XFF,0XF0,0XFF,0X0F, + 0XF8,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFE,0X1C,0X01,0XFF,0XF0,0XFF,0X0F,0XF8,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X38,0X00,0XFF,0XF0, + 0XFF,0X0F,0XF8,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFC,0X78,0X00,0XFF,0XF0,0XFF,0X0F,0XF8,0X7F,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X78,0X70, + 0XFF,0XF0,0XFF,0X0F,0XF8,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X78,0XF8,0XFF,0XF0,0XFF,0X0F,0XF8,0X7F,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, + 0X78,0XF9,0XFF,0XF0,0XFF,0X0F,0XF0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X30,0XF1,0XFF,0XF0,0XF8,0X00,0X00, + 0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFC,0X00,0X03,0XFF,0XF0,0XF0,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0XFF,0XF0,0XE0, + 0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFE,0X00,0X00,0XFF,0XF0,0XE0,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0XFF, + 0XF0,0XC0,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0XFF,0XF0,0X81,0X0F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, + 0X00,0XFF,0XF0,0X83,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0X0F,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X0F,0X0F, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X1F,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0XFF,0XF0, + 0X3F,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0XFF,0XF0,0X3F,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00, + 0XFF,0XF0,0X7F,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0XFF,0XF0,0XFF,0X0F,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, + 0X00,0X00,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0X0F,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFE,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XF0,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X07,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0X80,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X01,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X18,0XC1, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X38,0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, + 0X78,0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X78,0XF8,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFC,0X78,0XF8,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X78,0XF8,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFC,0X38,0XF8,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0XF8,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0XF8,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00, + 0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XF1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, + 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF + ] + +#Circle +Circle3232 = [ + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x3F,0xFF,0xFF,0x80,0x07,0xFF, + 0xFE,0x00,0x03,0xFF,0xFC,0x00,0x01,0xFF,0xF8,0x00,0x00,0x7F,0xF0,0x0F,0x80,0x7F, + 0xE0,0x3F,0xE0,0x3F,0xE0,0x7F,0xF0,0x1F,0xC0,0xFF,0xF8,0x1F,0xC1,0xFF,0xFC,0x1F, + 0x81,0xFF,0xFC,0x0F,0x83,0xFF,0xFE,0x0F,0x83,0xFF,0xFE,0x0F,0x83,0xFF,0xFE,0x0F, + 0x83,0xFF,0xFE,0x0F,0x83,0xFF,0xFE,0x0F,0x81,0xFF,0xFC,0x0F,0xC1,0xFF,0xFC,0x1F, + 0xC0,0xFF,0xF8,0x1F,0xC0,0x7F,0xF8,0x1F,0xE0,0x3F,0xE0,0x3F,0xF0,0x0F,0x80,0x7F, + 0xF8,0x00,0x00,0x7F,0xF8,0x00,0x00,0xFF,0xFE,0x00,0x03,0xFF,0xFF,0x00,0x07,0xFF, + 0xFF,0xE0,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, +] +#Line +Line3232 = [ + 0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF, + 0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF, + 0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF, + 0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF, + 0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF, + 0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF, + 0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF, + 0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x3F,0xFF, +] +bus = 0 +device = 0 + + +disp = EPD_driver.EPD_driver(spi=SPI.SpiDev(bus, device)) + +#init and Clear full screen +print('------------init and Clear full screen------------') +disp.Dis_Clear_full() + +#Show full pic +print('------------Show full pic------------') +disp.Dis_full_pic(waveshare) +time.sleep(DELAYTIME) + +#init and Clear part screen +print('------------init and Clear part screen------------') +disp.Dis_Clear_part() + +#Show part pic +print('------------Show part pic------------') +disp.Dis_part_pic(0,xDot-1,0,yDot-1,waveshare) +time.sleep(DELAYTIME) + +#Drawing +print('------------Show Circle and Line------------') +disp.Dis_Drawing((yDot-32)/8,5,Circle3232,32,32) #Circle +disp.Dis_Drawing((yDot-32)/8,0,Line3232,32,32) #Line +time.sleep(DELAYTIME) + +#String +print('------------Show string------------') +disp.Dis_String(0, 10, "SHOW TIME : ",16) +disp.Dis_String(0, 26, "I am an electronic paper display",12) +time.sleep(DELAYTIME) + +#Progress +print('------------Show Progress------------') +disp.Dis_Progress(9) +time.sleep(DELAYTIME) + +#time +print('------------show time------------') +while 1 : + now = datetime.datetime.now() + now_sec = now.second%10 + next_sec = 11 #Guaranteed next greater than 9 + if now_sec != next_sec: + disp.Dis_showtime(now.hour,now.minute,now.second) + next_sec = now.second%10