Заработал вариант с некоторыми изменениями. Координаты картинки должны быть 0,0 - иначе искажения. Время смены картинки около 46 миллисекунд. Жаль раскрасить нельзя :)
Завтра напишу код для вывода одной предварительно оаскрашенной строки из ОЗУ на максимальной скорости...
Т.е. надо будет пробегать по flash и результат раскрасски не сразу на экран, а в ОЗУ. Как строка готова - быстренько ее пуляем в экран и готовим новую....
Завтра напишу код для вывода одной предварительно оаскрашенной строки из ОЗУ на максимальной скорости...
Т.е. надо будет пробегать по flash и результат раскрасски не сразу на экран, а в ОЗУ. Как строка готова - быстренько ее пуляем в экран и готовим новую....
Этот алгоритм был озвучен ещё в начале темы, а вы все топчитесь на месте.
Меня посетила ещё задумка... Если нельзя хранить цветную картинку в МК и нет SD карты - можно грузить на экран из файла на ПК. Но тут у меня препятствие. Как выделенную на стороне Ардуино строку 0хFF превратить в число? Со строкой 255 всё ясно, а тут?
Меня посетила ещё задумка... Если нельзя хранить цветную картинку в МК и нет SD карты - можно грузить на экран из файла на ПК. Но тут у меня препятствие. Как выделенную на стороне Ардуино строку 0хFF превратить в число? Со строкой 255 всё ясно, а тут?
Вопрос на самом деле в другом: зачем Вам замедление в 3-6 раз при форматном преобразовании? Да еще и на самом медленном участке (последовательный порт). Передавайте сразу в бинарном виде.
На hiasm можно нарисовать несколькими картинками программу которая указанный файл в байтах на сом порт указанный выдаст. Но конвертер у меня картинку даёт в виде массива 0х00, ...
Меня посетила ещё задумка... Если нельзя хранить цветную картинку в МК и нет SD карты - можно грузить на экран из файла на ПК. Но тут у меня препятствие. Как выделенную на стороне Ардуино строку 0хFF превратить в число? Со строкой 255 всё ясно, а тут?
Вопрос на самом деле в другом: зачем Вам замедление в 3-6 раз при форматном преобразовании? Да еще и на самом медленном участке (последовательный порт). Передавайте сразу в бинарном виде.
На стороне ПС надо передать бинарный массив с картинкой размером 2 * w * h байт...
Я не понимаю как это :)
Есть массив типа 0х00,0х00,... Он идёт в ардуино в виде символов. Там надо сначала отделить по запятым строку-число, потом перевести её в число, потом вывести в экран как половину цвета пикселя. А как сделать бинарный массив и его передать я не алё (к сожалению).
Есть массив типа 0х00,0х00,... Он идёт в ардуино в виде символов. Там надо сначала отделить по запятым строку-число, потом перевести её в число, потом вывести в экран как половину цвета пикселя. А как сделать бинарный массив и его передать я не алё (к сожалению).
Вот когда ты все это проделаешь (отделить по запятым...перевести в число) у тебя и получится бинарный массив.
Дисплей мне ещё не пришёл. Проверить пока не на чем. Написал программу перекодировки изображения из стандартного PictureBox VB 6.0 В из 8-8-8 в 5-6-5. Пишу урывками. Могут быть ошибки. в логике. Вот код:
Public bWrite(40959) As Byte
Private Sub Command2_Click()
k = 0
For i = 0 To 159
For j = 0 To 127
res = GetPixel(Picture1.hdc, j, i)
Call GetRGB(res)
C565
Next j
Next i
End Sub
Public Sub GetRGB(Color As Long)
R = Color \ 65536
G = (Color And 65535) \ 256
B = Color And 255
End Sub
Public Function C565()
R = R And &HF8
G = G And &HFC
B = B And &HF8
Prom = G And &HC0
Prom = Prom / 32
Prom1 = R Or Prom
bWrite(k) = Prom1
Prom = (G And &H1F) * 8
Prom2 = Prom Or B / 8
bWrite(k + 1) = Prom2
k = k + 2
End Function
В архиве папка с программой: 128X160.exe и ActiveX: COMDLG32.OCX для работы программы. Выбираете скорость передачи и номер СОМ-порта. Загружаете файл с картинкой, она помещается в PictureBox размером 128Х160. Если не нравится, то загружаете другую. Файлы в формате .png пока не загружается. Это на потом. Нажимаете кнопку: "Send To Arduino". Картинка перекодируется из формата 8-8-8 в формат 5-6-5 и передаётся в выбранный СОМ-порт.
Выдаёт ошибка платы ардуино генуино... с новой библиотекой. Так что не судьба. вернулся к старой версии.
вернулся к старой версии.
какой номер старой версии библиотеки ? IDE ?
ua6em есть в железе NANO UNO и 7735 с согласованными уровнями что бы проверить быстрый вывод ?
Не знаю, вот её cpp файл. ИДЕ версии 1.8.2.
вернулся к старой версии.
какой номер старой версии библиотеки ? IDE ?
ua6em есть в железе NANO UNO и 7735 с согласованными уровнями что бы проверить быстрый вывод ?
быстро нету, разобрал для проверки RP2040 и ESP32
Soft SPI ...если я правильно понял, то используется clock определённый в ядре
lilik есть значительные отличия в библиотеках...
актуальная:
void Adafruit_SPITFT::drawPixel(int16_t x, int16_t y, uint16_t color) { // Clip first... if ((x >= 0) && (x < _width) && (y >= 0) && (y < _height)) { // THEN set up transaction (if needed) and draw... startWrite(); setAddrWindow(x, y, 1, 1); SPI_WRITE16(color); endWrite(); } }"старая":
void Adafruit_ST7735::drawPixel(int16_t x, int16_t y, uint16_t color) { if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) return; setAddrWindow(x,y,x+1,y+1); #if defined (SPI_HAS_TRANSACTION) if (hwSPI) SPI.beginTransaction(mySPISettings); #endif DC_HIGH(); CS_LOW(); spiwrite(color >> 8); spiwrite(color); CS_HIGH(); #if defined (SPI_HAS_TRANSACTION) if (hwSPI) SPI.endTransaction(); #endif }Получается что setAddrWindow по разному трактует входные переменные !
Заработал вариант с некоторыми изменениями. Координаты картинки должны быть 0,0 - иначе искажения. Время смены картинки около 46 миллисекунд. Жаль раскрасить нельзя :)
const unsigned char ris_1[]PROGMEM = { 0X00, 0X00, 0X00, 0X00, 0X80, 0X00, 0X00, 0X05, 0XB5, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X00, 0X00, 0X00, 0X5A, 0X40, 0X94, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0X14, 0X40, 0X02, 0XA8, 0X08, 0X55, 0X0E, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X08, 0X40, 0X01, 0X14, 0XB1, 0X03, 0X08, 0XA1, 0XA4, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X80, 0X00, 0X04, 0X02, 0XC0, 0X2C, 0X52, 0X00, 0XC0, 0X08, 0X00, 0X00, 0X00, 0X04, 0X88, 0X44, 0X14, 0X01, 0X20, 0X10, 0XAA, 0XB2, 0XAB, 0XAA, 0X28, 0X00, 0X88, 0X80, 0X00, 0X10, 0X01, 0X00, 0X00, 0X08, 0X00, 0X0B, 0XC0, 0X55, 0X54, 0X90, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X10, 0X40, 0X04, 0X42, 0X93, 0X54, 0X82, 0X26, 0X12, 0X40, 0X00, 0X01, 0X00, 0X80, 0X00, 0X00, 0X41, 0X01, 0X11, 0X0B, 0X45, 0XA9, 0X51, 0X01, 0X41, 0X02, 0X00, 0X00, 0X00, 0X00, 0X08, 0X24, 0X00, 0X04, 0X00, 0X45, 0X4A, 0XA2, 0X0E, 0XD4, 0X80, 0X08, 0X00, 0X00, 0X00, 0X00, 0X40, 0X80, 0X14, 0X20, 0XA1, 0X55, 0X76, 0XB5, 0XBB, 0XFA, 0X08, 0X80, 0X08, 0X00, 0X00, 0X04, 0X00, 0X00, 0X80, 0X81, 0X08, 0X96, 0XAD, 0X56, 0XFF, 0XAF, 0XC0, 0X20, 0X20, 0X00, 0X00, 0X40, 0X02, 0X08, 0X04, 0X14, 0XA2, 0X55, 0X5A, 0XAD, 0XF4, 0X48, 0X32, 0X00, 0X00, 0X00, 0X00, 0X00, 0X10, 0X01, 0X12, 0X8A, 0X89, 0X57, 0X6A, 0X5B, 0XAF, 0XB5, 0X5C, 0X24, 0X00, 0X00, 0X00, 0X00, 0X80, 0X20, 0X00, 0X20, 0X6A, 0X57, 0X5B, 0X6F, 0X5A, 0XEA, 0XA5, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X84, 0X94, 0X0A, 0X95, 0X5A, 0XEA, 0XBA, 0XFF, 0XAD, 0X52, 0XC8, 0X40, 0X04, 0X00, 0X80, 0X04, 0X00, 0X01, 0X55, 0X55, 0XB7, 0X55, 0XAD, 0X4B, 0XD5, 0X55, 0X41, 0X00, 0X00, 0X00, 0X00, 0X10, 0X02, 0X48, 0X0A, 0XBA, 0XDB, 0XBA, 0XD6, 0XBE, 0XED, 0X54, 0X54, 0X00, 0X00, 0X00, 0X10, 0X40, 0X90, 0X02, 0XB7, 0XED, 0X6D, 0X6D, 0X7A, 0XAB, 0X5F, 0XAB, 0X20, 0X00, 0X00, 0X00, 0X01, 0X00, 0X02, 0XA8, 0X4A, 0XBB, 0X77, 0XD7, 0XAA, 0XAA, 0XEA, 0XE9, 0X49, 0X00, 0X00, 0X00, 0X80, 0X02, 0X20, 0X02, 0XAD, 0XF5, 0XAD, 0X7D, 0XFF, 0X5A, 0XBF, 0X7D, 0X34, 0X20, 0X00, 0X00, 0X04, 0X00, 0X09, 0X14, 0X2B, 0XDE, 0XDF, 0XD6, 0XB5, 0XEB, 0X55, 0XAB, 0X8E, 0X80, 0X00, 0X00, 0X10, 0X10, 0X84, 0X42, 0XAF, 0X77, 0X7B, 0X7F, 0XEF, 0X5D, 0X55, 0X74, 0XF3, 0X00, 0X00, 0X00, 0X40, 0X00, 0X21, 0X11, 0X55, 0XDB, 0XEF, 0XFB, 0X7D, 0XEB, 0XB5, 0X5E, 0X8D, 0XA2, 0X00, 0X00, 0X00, 0X44, 0X04, 0X4A, 0X5B, 0XBE, 0XBD, 0XDF, 0XF7, 0X7D, 0X6A, 0XA3, 0X56, 0X40, 0X00, 0X00, 0X00, 0X00, 0X81, 0X24, 0XAE, 0XEB, 0XF7, 0XFF, 0XDF, 0XD7, 0XD6, 0XBD, 0XD1, 0X50, 0X00, 0X00, 0X82, 0X10, 0X10, 0X52, 0X57, 0XBF, 0XDF, 0XFF, 0XFF, 0XFD, 0X75, 0XA6, 0XB1, 0XA0, 0X04, 0X00, 0X08, 0X40, 0X05, 0X09, 0XFA, 0XFD, 0XFF, 0X76, 0XFF, 0XF7, 0XBA, 0XBB, 0XFC, 0X50, 0X00, 0X04, 0X00, 0X02, 0X40, 0XA5, 0X2F, 0XDF, 0X7B, 0XFF, 0XFD, 0XBF, 0XD7, 0XCD, 0X56, 0X20, 0X00, 0X00, 0X20, 0X00, 0X0B, 0X4A, 0XF6, 0XF7, 0XDF, 0XFF, 0XEF, 0XFD, 0XFD, 0X75, 0XFD, 0X14, 0X00, 0X00, 0X01, 0X00, 0X8A, 0X95, 0XDF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0X6E, 0XDB, 0X57, 0X90, 0X00, 0X00, 0X04, 0X12, 0X2B, 0X2F, 0X7D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFB, 0XFB, 0XB7, 0XFE, 0XDA, 0X00, 0X00, 0X40, 0X00, 0X0E, 0X2B, 0XFF, 0XBF, 0XFB, 0X6F, 0X7F, 0XDF, 0XDE, 0XED, 0X57, 0XA8, 0X00, 0X00, 0X00, 0X40, 0XB8, 0X77, 0XDB, 0XF7, 0X7F, 0XFF, 0XFF, 0XFF, 0X77, 0X7B, 0XBD, 0XCE, 0X00, 0X00, 0X01, 0X02, 0X59, 0X5D, 0X7F, 0XFF, 0XFF, 0XFF, 0XFD, 0XBF, 0XFD, 0XDE, 0XEE, 0XA5, 0X00, 0X00, 0X04, 0X01, 0X69, 0XB7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0XEB, 0X77, 0XF2, 0X80, 0X00, 0X80, 0X14, 0XA2, 0XAF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFF, 0XF7, 0XEE, 0XBE, 0XBD, 0XB4, 0X40, 0X00, 0X00, 0X02, 0XA5, 0X7F, 0XF7, 0X7F, 0XFF, 0XFF, 0XFF, 0XFD, 0XFB, 0XF7, 0XD7, 0XE9, 0X10, 0X00, 0X10, 0X91, 0X04, 0XB6, 0XFF, 0XFF, 0XFD, 0XFF, 0XEE, 0XFF, 0X6F, 0XBD, 0X7F, 0X7D, 0X02, 0X00, 0X00, 0X04, 0X53, 0XAF, 0XFF, 0XFF, 0XEF, 0XFF, 0XFF, 0XBF, 0XFE, 0XEF, 0XAB, 0XED, 0X00, 0X00, 0X02, 0X42, 0X4A, 0XBF, 0XDE, 0XFF, 0X7F, 0XFF, 0XFF, 0XEF, 0X6F, 0XFA, 0XFF, 0XBA, 0X00, 0X02, 0X08, 0X10, 0X05, 0X77, 0X7F, 0XFD, 0XFF, 0XFF, 0XFF, 0XFB, 0XFD, 0XAF, 0X5E, 0XFB, 0X80, 0X20, 0X21, 0X4A, 0X49, 0XBF, 0XFF, 0XF7, 0XFF, 0XFF, 0XBF, 0XFE, 0XF7, 0XFD, 0XEF, 0XEC, 0X80, 0X00, 0X04, 0XA0, 0X0A, 0XD7, 0XFF, 0XDF, 0XFF, 0XFD, 0XFF, 0X7F, 0XBF, 0XBF, 0XBF, 0X76, 0X40, 0X00, 0X18, 0X04, 0X85, 0XBE, 0XFF, 0X7F, 0XFF, 0XFF, 0XFD, 0XEE, 0XFD, 0XFB, 0X77, 0XDF, 0X20, 0X00, 0X50, 0X00, 0X16, 0XEF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XEF, 0XDF, 0XF2, 0X90, 0X00, 0X42, 0X41, 0X02, 0XBB, 0XFF, 0XFF, 0XF6, 0XDB, 0XFF, 0XFF, 0XFF, 0XFE, 0XFD, 0XAD, 0X44, 0X08, 0XA0, 0X11, 0X1A, 0XC1, 0X5B, 0XED, 0XBF, 0XE4, 0X55, 0XED, 0XB6, 0XFB, 0XBF, 0XF6, 0X80, 0X00, 0X80, 0X82, 0X84, 0X05, 0X7F, 0X7F, 0XFD, 0XAA, 0XAA, 0X7F, 0XFF, 0XDF, 0XFF, 0XBA, 0XD4, 0X80, 0X04, 0X01, 0X14, 0X05, 0X5F, 0XFF, 0XF7, 0XDD, 0X15, 0XBF, 0XF7, 0X7A, 0XDE, 0XED, 0X40, 0X00, 0X01, 0X4A, 0X84, 0X17, 0XFD, 0XF7, 0X7F, 0XFE, 0XDF, 0XFE, 0XDD, 0XFF, 0XFF, 0XF5, 0X50, 0X00, 0X12, 0X02, 0X08, 0X49, 0X5F, 0XDF, 0XFF, 0XFF, 0X7B, 0X7F, 0XFF, 0XF6, 0XBF, 0XDA, 0X90, 0X80, 0X01, 0X45, 0X09, 0X77, 0XFF, 0XFF, 0XFF, 0XFB, 0XFF, 0XFD, 0XEF, 0XFF, 0XFF, 0X6D, 0X52, 0X00, 0X04, 0X02, 0X8A, 0XDF, 0XF7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0XDD, 0XB7, 0XF5, 0X54, 0X00, 0X41, 0X25, 0X15, 0XFA, 0XBF, 0XFF, 0XFD, 0XDF, 0XFE, 0XEF, 0XFB, 0X7F, 0XFF, 0XAD, 0X28, 0X90, 0X14, 0X86, 0X8B, 0XEF, 0XFD, 0XFF, 0XFF, 0XFF, 0XF7, 0XFE, 0XAF, 0XF7, 0XAF, 0XFF, 0X8A, 0X00, 0X02, 0X05, 0X0E, 0XFD, 0XAF, 0XFF, 0XFF, 0XFF, 0XBF, 0XFF, 0XFF, 0XFE, 0XFF, 0XED, 0X65, 0X40, 0X54, 0X92, 0X97, 0XAB, 0XF6, 0XEF, 0XFF, 0XF5, 0XEF, 0XFF, 0XBB, 0X77, 0XFF, 0XBF, 0XA9, 0X54, 0X00, 0X02, 0X16, 0XF5, 0X5B, 0XBF, 0XFF, 0XFE, 0X95, 0XFE, 0XDF, 0XFF, 0XDD, 0XFD, 0XB2, 0X50, 0X15, 0X05, 0X1B, 0XAA, 0XAD, 0X7F, 0XF7, 0X75, 0XED, 0X7B, 0XEF, 0XDD, 0X7F, 0XFF, 0X5A, 0X94, 0X00, 0X10, 0X8F, 0XD5, 0X75, 0X7F, 0XFF, 0XFE, 0XBA, 0XBF, 0XBB, 0X7F, 0XFF, 0XFB, 0XEA, 0X43, 0X10, 0X42, 0X16, 0X4A, 0XBE, 0XBF, 0XDF, 0XB5, 0XDF, 0X7F, 0XDF, 0XF7, 0XEF, 0XEF, 0XD2, 0XA8, 0X09, 0X04, 0X1B, 0X20, 0XAB, 0X2F, 0XFD, 0XF4, 0X2D, 0XDD, 0XB7, 0XBB, 0X7E, 0XFA, 0XB9, 0X51, 0X00, 0X02, 0X16, 0X8F, 0X56, 0X9F, 0XFE, 0XAB, 0XD2, 0XEF, 0XFD, 0XFF, 0XFF, 0XFE, 0XD4, 0XA8, 0X08, 0X08, 0X1A, 0X3C, 0X2B, 0X3F, 0X75, 0XD7, 0X01, 0X7F, 0XDF, 0X6B, 0XDF, 0XEB, 0X5E, 0XA4, 0X08, 0X22, 0X4A, 0X78, 0X1A, 0X9F, 0XFF, 0X6F, 0X26, 0XB7, 0XF7, 0XFE, 0XFD, 0XFF, 0XD2, 0XAA, 0X08, 0X84, 0X14, 0X28, 0X9B, 0X37, 0XD7, 0XDF, 0X03, 0X5E, 0XFF, 0XAF, 0XF7, 0XB5, 0X6D, 0X44, 0X40, 0X0A, 0X16, 0XD0, 0X35, 0X3E, 0XFF, 0X7E, 0X82, 0XFF, 0XED, 0XFB, 0X7F, 0XDD, 0XAB, 0X69, 0X10, 0X04, 0X2B, 0X28, 0X55, 0X5B, 0XED, 0XCB, 0X2B, 0X6D, 0XFF, 0XF7, 0XEE, 0XB6, 0XB4, 0XA0, 0X08, 0X82, 0X0A, 0X57, 0X6E, 0X6F, 0XBF, 0X75, 0XBD, 0XBF, 0XFF, 0X7D, 0XBF, 0XDB, 0X5A, 0X5A, 0X00, 0X08, 0X54, 0X0A, 0XDA, 0X3E, 0XF7, 0XBA, 0XA6, 0XD5, 0XED, 0XEF, 0XFF, 0X6D, 0XEB, 0X24, 0X10, 0X00, 0X2A, 0XA5, 0X6C, 0XFB, 0XFD, 0XDF, 0X7B, 0X7F, 0X7F, 0XFA, 0XFA, 0XD5, 0X5D, 0X54, 0X00, 0X04, 0X01, 0X4A, 0XD8, 0X2F, 0XB7, 0X6B, 0XDD, 0XD5, 0XFB, 0X5F, 0XDF, 0XBA, 0XD5, 0X95, 0X14, 0X40, 0X55, 0XAD, 0XE8, 0XBE, 0XEF, 0XFE, 0XFF, 0XFF, 0XEF, 0XF5, 0X75, 0X68, 0X35, 0X54, 0X00, 0X00, 0X22, 0XB7, 0X54, 0X7B, 0XBD, 0XF7, 0XF6, 0XAE, 0XFD, 0X5F, 0XDA, 0XDE, 0X8D, 0X6A, 0X00, 0X00, 0X52, 0XDA, 0XF8, 0XDE, 0XFF, 0XDE, 0XBF, 0XEB, 0XBB, 0XF5, 0X6D, 0X6C, 0XC5, 0X56, 0X20, 0X00, 0X4A, 0XB7, 0X51, 0X77, 0XB7, 0XFF, 0XFB, 0X7F, 0XFD, 0XBB, 0XB7, 0X3B, 0X42, 0XAB, 0X00, 0X01, 0X2D, 0XFD, 0XF1, 0X7D, 0X7D, 0XFF, 0XFF, 0XFA, 0XDB, 0XDD, 0X6D, 0XAE, 0XD4, 0XDA, 0X42, 0X00, 0X1B, 0X57, 0X55, 0XAF, 0XAF, 0XBE, 0XFF, 0XDF, 0XFE, 0XEB, 0XAE, 0XFA, 0X42, 0X6F, 0X00, 0X08, 0X6D, 0XFD, 0XF2, 0XFA, 0XFB, 0XFF, 0XFF, 0XFF, 0XD7, 0X5D, 0X55, 0X3D, 0XA9, 0X5A, 0X00, 0X20, 0X37, 0X57, 0XA5, 0XDF, 0X5F, 0X7F, 0XFD, 0XFF, 0XFD, 0XF6, 0XAD, 0X76, 0XA9, 0XB7, 0X00, 0X00, 0X5D, 0XFD, 0XC7, 0X75, 0XD7, 0XFF, 0XFF, 0XFD, 0XF6, 0XAD, 0X55, 0XFF, 0X9D, 0X5A, 0X00, 0X20, 0X5F, 0X57, 0X55, 0XFF, 0X5B, 0XEF, 0XFF, 0XFF, 0XDE, 0XF7, 0X1B, 0XBD, 0XD4, 0XFF, 0X00, 0X80, 0X6B, 0XDF, 0XAF, 0XFF, 0XED, 0XFE, 0XEF, 0XDF, 0XFB, 0XAD, 0X5F, 0XFF, 0X6E, 0X57, 0X04, 0X00, 0X3E, 0XEA, 0XCB, 0X6D, 0XB6, 0XFF, 0XFF, 0XFE, 0XFD, 0X75, 0X55, 0XED, 0XFE, 0X5D, 0X00, 0X00, 0X5B, 0XBF, 0X9F, 0XFF, 0XDB, 0XFF, 0XFE, 0XFF, 0XEE, 0XAE, 0XBF, 0XFF, 0X6D, 0X3F, 0X00, 0X00, 0X37, 0X6A, 0XCB, 0XFF, 0X6E, 0XBF, 0XFF, 0XF7, 0XF7, 0X75, 0X4B, 0XFD, 0XFF, 0X7F, 0X00, 0X00, 0X5D, 0XBF, 0X97, 0XFF, 0XFD, 0XEF, 0XFB, 0XFF, 0X7A, 0XBA, 0XB7, 0XBE, 0XF6, 0XBA, 0X00, 0X00, 0X2E, 0XD7, 0X4D, 0XFF, 0XB7, 0X7F, 0X7F, 0XBF, 0XEF, 0X56, 0XDB, 0X75, 0X7B, 0X3F, 0X00, 0X00, 0X35, 0X7E, 0X07, 0X76, 0XFF, 0XBB, 0XFF, 0XFD, 0XFD, 0X7B, 0X4F, 0XFF, 0X5E, 0XBB, 0X01, 0X00, 0X2F, 0XBB, 0X53, 0XDF, 0XBF, 0X6F, 0XFF, 0XF7, 0XDF, 0X55, 0X77, 0X6B, 0XBB, 0X7D, 0X00, 0X00, 0X28, 0XEF, 0X01, 0X7A, 0XA5, 0XBE, 0XF7, 0X7F, 0XBA, 0XDA, 0X9F, 0XDA, 0XED, 0X3E, 0X00, 0X08, 0X2B, 0XBE, 0X92, 0XDD, 0XFE, 0XFF, 0XBF, 0XFE, 0XFF, 0X6E, 0XDF, 0XB7, 0XEE, 0XF6, 0X00, 0X00, 0X2A, 0XFF, 0XE0, 0XAB, 0XFB, 0XF6, 0XFF, 0XD7, 0XF5, 0X55, 0XAE, 0XEA, 0XB5, 0X5B, 0X04, 0X40, 0X2B, 0X75, 0X5A, 0X7F, 0XBF, 0XBF, 0XBB, 0X7F, 0XFE, 0XBA, 0XBF, 0XB5, 0X7B, 0X7E, 0X20, 0X00, 0X25, 0XDE, 0XFF, 0XED, 0XEE, 0XF7, 0XDF, 0XFD, 0XDB, 0X6F, 0X57, 0XA5, 0X55, 0XD5, 0X04, 0X80, 0X32, 0XFB, 0XB7, 0XFE, 0XFB, 0XDE, 0XEF, 0XDF, 0XFE, 0XB5, 0XBD, 0X95, 0X5A, 0XBA, 0X00, 0X00, 0X15, 0XAE, 0XFE, 0XF7, 0XFF, 0XF7, 0X5A, 0XF7, 0X7B, 0X6A, 0XAF, 0X6A, 0X8A, 0XCE, 0X00, 0X00, 0X52, 0XFB, 0XFF, 0XDF, 0XDE, 0XDD, 0XF7, 0XDD, 0XFE, 0XBE, 0XBB, 0X95, 0X55, 0X4A, 0X00, 0X00, 0X35, 0X57, 0X77, 0XFD, 0XF7, 0XFE, 0XBF, 0X7F, 0XEB, 0X55, 0XBE, 0XD0, 0XAA, 0X8A, 0X00, 0X00, 0X29, 0XBB, 0XBE, 0XFF, 0XFF, 0XD7, 0XDB, 0XF7, 0XFD, 0X7E, 0XBB, 0X40, 0X55, 0X00, 0X00, 0X00, 0X2A, 0XDE, 0XFF, 0XEF, 0XFB, 0X7E, 0XED, 0XBE, 0XF6, 0XAA, 0XAE, 0X80, 0XA2, 0X04, 0X00, 0X10, 0X11, 0X2B, 0XEB, 0XFE, 0XDF, 0XEF, 0X5E, 0XFB, 0XFD, 0XDD, 0X4D, 0X00, 0X14, 0X10, 0X00, 0X00, 0X35, 0XAE, 0XBF, 0XBB, 0XFA, 0XBB, 0XF7, 0XDF, 0XDA, 0X77, 0X40, 0X00, 0X00, 0X00, 0X04, 0X00, 0X15, 0X55, 0XFB, 0XFF, 0XBF, 0XEE, 0XBA, 0XFB, 0XF7, 0XBA, 0X80, 0X00, 0X00, 0X00, 0X10, 0X00, 0X0A, 0XA9, 0X5D, 0X6A, 0XE5, 0X3B, 0XDF, 0XEF, 0X7D, 0X5D, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X15, 0XC5, 0X56, 0XB5, 0XB6, 0XD6, 0XED, 0X7F, 0XEE, 0XF6, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X09, 0X68, 0X49, 0X4A, 0X9B, 0X59, 0X5F, 0XF7, 0XBA, 0XBA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X10, 0X15, 0XB4, 0X22, 0X51, 0X55, 0X25, 0X76, 0XDE, 0XFE, 0XED, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X08, 0XFA, 0X05, 0X6A, 0XAE, 0X90, 0X9F, 0XFB, 0XFA, 0XF4, 0X00, 0X00, 0X00, 0X00, 0X40, 0X00, 0X0A, 0X7D, 0X4A, 0XBB, 0X7B, 0X60, 0XED, 0X7F, 0XFD, 0XBA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XB7, 0X2B, 0XED, 0XDD, 0XA2, 0XBB, 0XEF, 0XD6, 0XE8, 0X00, 0X00, 0X00, 0X20, 0X00, 0X80, 0X06, 0X7F, 0X8E, 0XBF, 0X77, 0XA2, 0XD6, 0XFB, 0XFD, 0XE0, 0X00, 0X04, 0X20, 0X80, 0X00, 0X00, 0X05, 0X5E, 0XD7, 0XF5, 0XDE, 0XC5, 0XFD, 0XEF, 0XFB, 0X70, 0X02, 0X10, 0X00, 0X00, 0X00, 0X00, 0X83, 0XBF, 0X9A, 0XBF, 0X76, 0X97, 0X7B, 0XFF, 0X6D, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X84, 0X00, 0X02, 0XAF, 0XCF, 0XEB, 0XDE, 0XAD, 0XFF, 0X57, 0XFB, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X9F, 0X8B, 0X7D, 0X6E, 0XB7, 0XEB, 0XFF, 0XF7, 0X80, 0X10, 0X00, 0X00, 0X00, 0X00, 0X04, 0X01, 0XDE, 0XCF, 0XD7, 0XBB, 0X5A, 0XFE, 0XEE, 0XDE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X10, 0X00, 0X6B, 0XCF, 0X7D, 0XDE, 0X6F, 0XFD, 0XDF, 0XF6, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XD7, 0XC7, 0XD6, 0XBD, 0X55, 0XDF, 0XFF, 0XDC, 0X00, 0X00, 0X00, 0X01, 0X02, 0X20, 0X80, 0X00, 0X6F, 0XCD, 0XFB, 0XDA, 0XDF, 0XFF, 0XAD, 0XE8, 0X00, 0X40, 0X20, 0X08, 0X00, 0X00, 0X00, 0X00, 0X37, 0XA7, 0X6E, 0XBD, 0X57, 0X7D, 0XFF, 0X50, 0X01, 0X00, 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X37, 0XC7, 0XF6, 0XD5, 0X7E, 0XF7, 0XAF, 0XA0, 0X20, 0X00, 0X00, 0X00, 0X00, 0X02, 0X00, 0X00, 0X1A, 0XC5, 0X5B, 0X7D, 0X5B, 0XFF, 0XFE, 0X80, 0X00, 0X00, 0X00, 0X00, 0X08, 0X40, 0X00, 0X02, 0X1B, 0XE7, 0XF6, 0XB5, 0XFF, 0XFF, 0XBF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XC2, 0XEF, 0X7A, 0XB7, 0XBF, 0XF6, 0X00, 0X00, 0X00, 0X21, 0X00, 0X01, 0X00, 0X00, 0X00, 0X0D, 0XE3, 0XB5, 0XAB, 0XFE, 0XFD, 0XBC, 0X80, 0X80, 0X00, 0X80, 0X00, 0X00, 0X00, 0X04, 0X20, 0X05, 0X61, 0X6E, 0XF7, 0XDF, 0XFF, 0X7A, 0X02, 0X02, 0X00, 0X00, 0X00, 0X44, 0X00, 0X20, 0X00, 0X04, 0XD1, 0XF5, 0XAA, 0XFF, 0XF7, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X02, 0X01, 0X04, 0X00, 0X00, 0X02, 0XF0, 0XB6, 0XEF, 0XFF, 0XFE, 0XD0, 0X00, 0X00, 0X04, 0X00, 0X10, 0X11, 0X00, 0X00, 0X00, 0X40, 0X50, 0XDB, 0XAF, 0XFB, 0XBF, 0X60, 0X00, 0X00, 0X00, 0X00, 0X80, 0X04, 0X00, 0X00, 0X01, 0X00, 0X38, 0X6D, 0XAF, 0XEF, 0XFB, 0X80, 0X00, 0X00, 0X00, 0X04, 0X00, 0X22, 0X00, 0X00, 0X04, 0X01, 0X2C, 0X2B, 0X5F, 0XFF, 0XED, 0X00, 0X04, 0X22, 0X20, 0X20, 0X00, 0X89, 0X10, 0X00, 0X10, 0X00, 0X14, 0X5D, 0XBF, 0XBE, 0XFC, 0X00, 0X00, 0X00, 0X01, 0X00, 0X00, 0X04, 0X00, 0X41, 0X00, 0X00, 0X0E, 0X12, 0XBF, 0XFF, 0XD8, 0X00, 0X20, 0X00, 0X00, 0X00, 0X02, 0X51, 0X00, 0X00, 0X00, 0X00, 0X03, 0X0A, 0X7F, 0XF7, 0X70, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X88, 0X00, 0X00, 0X00, 0X00, 0X05, 0X01, 0XFE, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X80, 0X00, 0X48, 0X22, 0X42, 0X04, 0X00, 0X00, 0X02, 0XC5, 0XFF, 0XFD, 0X80, 0X01, 0X00, 0X88, 0X04, 0X11, 0X02, 0X88, 0X00, 0X00, 0X00, 0X00, 0X01, 0X7F, 0XDF, 0XEF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X40, 0X02, 0X52, 0X10, 0X00, 0X00, 0X10, 0X80, 0XAB, 0X7B, 0XBC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X11, 0X09, 0X00, 0X20, 0X11, 0X00, 0X00, 0X5D, 0XEE, 0XF8, 0X00, 0X08, 0X08, 0X02, 0X10, 0X00, 0X04, 0XA4, 0X00, 0X00, 0X40, 0X00, 0X00, 0X27, 0X7B, 0XE0, 0X00, 0X00, 0X00, 0X88, 0X00, 0X00, 0XA2, 0X51, 0X00, 0X01, 0X00, 0X00, 0X00, 0X09, 0XAD, 0X40, 0X00, 0X00, 0X00, 0X00, 0X01, 0X04, 0X19, 0X24, 0X02, 0X00, 0X00, 0X00, 0X00, 0X02, 0X55, 0X00, 0X00, 0X40, 0X20, 0X00, 0X04, 0X11, 0X45, 0X49, 0X08, 0X10, 0X00, 0X01, 0X08, 0X00, 0X10, 0X00, 0X01, 0X00, 0X00, 0X00, 0X40, 0X00, 0X14, 0X90, 0X00, 0X00, 0X00, 0X08, 0X01, 0X00, 0X84, 0X00, 0X00, 0X00, 0X00, 0X44, 0X00, 0X05, 0X4A, 0X05, 0X00, 0X00, 0X00, 0X20, 0X23, 0X02, 0XF8, 0X00, 0X00, 0X00, 0X81, 0X00, 0X00, 0X10, 0XA5, 0X68, 0X00, 0X00, 0X00, 0X80, 0X07, 0XF0, 0X20, 0X00, 0X10, 0X00, 0X00, 0X00, 0X08, 0X85, 0X11, 0X01, 0X00, 0X88, 0X80, 0X00, 0X87, 0XF0, 0X00, 0X00, 0X40, 0X00, 0X00, 0X00, 0X80, 0X12, 0XAA, 0X48, 0X10, 0X00, 0X04, 0X00, 0X27, 0X41, 0X80, 0X04, 0X00, 0X00, 0X00, 0X04, 0X00, 0X09, 0X15, 0X25, 0X00, 0X00, 0X00, 0X02, 0X0C, 0X05, 0X00, 0X00, 0X00, 0X00, 0X08, 0X20, 0X04, 0XA5, 0X52, 0X90, 0X00, 0X80, 0X00, 0X00, 0X9A, 0X42, 0X00, 0X00, 0X00, 0X01, 0X00, 0X80, 0X20, 0X29, 0X28, 0X44, 0X02, 0X04, 0X00, 0X04, 0X10, 0X08, 0X00, 0X20, 0X00, 0X04, 0X00, 0X00, 0X80, 0XAA, 0XA5, 0X22, 0X08, 0X00, 0X40, 0X10, 0X31, 0X20, 0X00, 0X80, 0X00, 0X10, 0X00, 0X02, 0X02, 0X2A, 0X2A, 0XA9, 0X00, 0X10, 0X02, 0X01, 0X20, 0X00, 0X00, 0X00, 0X00, 0X80, 0X08, 0X10, 0X04, 0XAA, 0XA4, 0X92, 0X00, 0X00, 0X00, 0X08, 0X64, 0X80, 0X04, 0X00, 0X02, 0X00, 0X01, 0X00, 0X01, 0X55, 0X2A, 0X44, 0X10, 0X00, 0X00, 0X22, 0X00, 0X00, 0X00, 0X00, 0X20, 0X00, 0X00, 0X00, 0X2A, 0XA4, 0XA2, 0X28, 0X40, 0X81, 0X10, 0X80, 0X49, 0X00, 0X00, 0X00, 0X80, 0X00, 0X20, 0X24, 0X01, 0X2A, 0XA8, 0X82, 0X00, 0X08, 0X00, 0X14, 0X00, 0X00, 0X20, 0X00, 0X00, 0X00, 0X02, 0X00, 0XAA, 0XA9, 0X4A, 0XA8, 0X02, 0X00, 0X00, 0X40, 0X10, 0X04, 0X00, 0X00, 0X00, 0X01, 0X00, 0X00, 0X02, 0X54, 0X44, 0X41 }; const unsigned char ris_2[]PROGMEM = { 0X50, 0X00, 0X02, 0X10, 0X80, 0X08, 0X09, 0X24, 0X84, 0X81, 0X24, 0X80, 0X10, 0X00, 0X15, 0X40, 0XA9, 0X02, 0XA8, 0XA5, 0X28, 0X24, 0X24, 0X92, 0X02, 0X51, 0X49, 0X28, 0XA5, 0X54, 0X49, 0X2A, 0XA0, 0X00, 0X12, 0X12, 0X20, 0X12, 0X12, 0XAA, 0X85, 0X42, 0X24, 0X90, 0X08, 0X89, 0X25, 0X50, 0X54, 0X81, 0X41, 0X48, 0X90, 0X28, 0X4A, 0X49, 0X44, 0XA1, 0X52, 0X48, 0X52, 0X20, 0X14, 0X92, 0XA8, 0X00, 0X14, 0X25, 0X20, 0X04, 0X29, 0X25, 0X22, 0X82, 0X95, 0X24, 0X09, 0X4A, 0X45, 0X48, 0XA2, 0X01, 0X49, 0X48, 0X90, 0X28, 0X4A, 0XAA, 0X82, 0X50, 0XA4, 0XA8, 0X52, 0X24, 0X88, 0XAA, 0X58, 0X80, 0X22, 0X25, 0X20, 0X14, 0X29, 0X54, 0XA2, 0XA2, 0X92, 0X94, 0X08, 0X89, 0X02, 0X24, 0XA1, 0X01, 0X14, 0X90, 0X81, 0X20, 0X4A, 0X4A, 0X82, 0X81, 0X54, 0XA2, 0X25, 0X24, 0X90, 0X52, 0XA8, 0X00, 0X42, 0X4A, 0X50, 0X14, 0X29, 0X52, 0X42, 0X62, 0X4A, 0X48, 0X28, 0X92, 0X0F, 0XAC, 0X52, 0X08, 0X94, 0X92, 0X82, 0X28, 0X55, 0X4A, 0XA2, 0X81, 0X55, 0X2A, 0X12, 0X4A, 0X8A, 0XDA, 0XA8, 0X80, 0X22, 0X48, 0X40, 0X08, 0X4A, 0XAA, 0XA2, 0XA5, 0X45, 0XA4, 0X25, 0X22, 0X8D, 0X68, 0XA2, 0X08, 0X49, 0X25, 0X44, 0X28, 0X54, 0XAA, 0X82, 0XAF, 0X28, 0XA8, 0X12, 0X40, 0X4F, 0X95, 0X58, 0X80, 0X24, 0X95, 0X02, 0X24, 0X52, 0XAA, 0XA2, 0XB5, 0XD1, 0X64, 0X49, 0X22, 0X0D, 0XD0, 0XA2, 0X08, 0X2A, 0X52, 0XA4, 0X14, 0X2A, 0XAA, 0XA2, 0XAE, 0XAE, 0X54, 0X2A, 0X90, 0X2A, 0X8A, 0X50, 0X80, 0X41, 0X49, 0X02, 0X28, 0X55, 0X55, 0X42, 0XAA, 0XFF, 0XAA, 0X12, 0X42, 0XA5, 0X51, 0X54, 0X0A, 0X14, 0X94, 0X88, 0X24, 0X55, 0X55, 0X42, 0XAB, 0XF7, 0XE8, 0X29, 0X21, 0X54, 0X48, 0XA9, 0X00, 0X0A, 0X45, 0X06, 0X14, 0X55, 0X55, 0X62, 0XA5, 0XBE, 0XB4, 0X25, 0X40, 0X22, 0X85, 0X50, 0X8A, 0X21, 0X29, 0X08, 0X28, 0X55, 0X55, 0X82, 0XCB, 0XFF, 0XD4, 0X2A, 0X43, 0X48, 0X50, 0XA4, 0X00, 0X14, 0X94, 0X8A, 0X28, 0X55, 0X56, 0XA3, 0X49, 0X4C, 0XAA, 0X29, 0X20, 0X90, 0X8A, 0X92, 0X8A, 0X0A, 0X4A, 0X14, 0X28, 0X55, 0X6A, 0XA2, 0X8B, 0X3A, 0XD4, 0X25, 0X45, 0X20, 0X20, 0XA8, 0X01, 0X11, 0X52, 0X0A, 0X14, 0X55, 0XAA, 0XC2, 0XC9, 0X6E, 0X4A, 0X2A, 0X82, 0X94, 0X95, 0X52, 0X8A, 0X04, 0X95, 0X14, 0X28, 0X56, 0XAD, 0X43, 0X05, 0XFF, 0XD4, 0X29, 0X44, 0X48, 0X22, 0X54, 0X01, 0X0A, 0X48, 0X2A, 0X2C, 0X5A, 0XB6, 0XC5, 0X92, 0XD7, 0XD4, 0X25, 0X02, 0XA4, 0X49, 0X51, 0X0A, 0X05, 0X55, 0X12, 0X28, 0X6A, 0XD5, 0X62, 0X91, 0X6E, 0XD4, 0X2A, 0X8A, 0X50, 0X12, 0X48, 0X81, 0X08, 0X94, 0X2A, 0X14, 0X55, 0X5B, 0X43, 0X72, 0XFF, 0XB4, 0X2A, 0X85, 0X2A, 0X24, 0XAA, 0X0A, 0X85, 0X52, 0X2A, 0X28, 0X56, 0XD5, 0XA2, 0X91, 0XCB, 0XEA, 0X2A, 0X09, 0X44, 0X11, 0X51, 0X04, 0X42, 0X48, 0X2A, 0X2C, 0X5B, 0X5A, 0XC3, 0X72, 0XFD, 0X54, 0X2A, 0X8A, 0XA8, 0X24, 0XA8, 0X89, 0X05, 0X28, 0X54, 0X28, 0X6A, 0XAE, 0XA2, 0XC1, 0XB7, 0XEC, 0X2A, 0X09, 0X24, 0X12, 0XA5, 0X04, 0X82, 0XA8, 0X54, 0X28, 0X55, 0XEB, 0X43, 0X46, 0XFF, 0X34, 0X55, 0X15, 0X55, 0X14, 0X90, 0X0A, 0X42, 0X54, 0XAA, 0X2C, 0X6E, 0XB5, 0XE5, 0XAD, 0XBD, 0XAA, 0X2A, 0X15, 0X24, 0X09, 0X55, 0X01, 0X41, 0X50, 0X54, 0X28, 0X55, 0X5D, 0X42, 0XB7, 0XC2, 0X54, 0X2B, 0X00, 0X00, 0X24, 0XA9, 0X0A, 0X52, 0XA8, 0XAA, 0X2C, 0X6D, 0XD6, 0XC3, 0X2F, 0XE9, 0XB6, 0X34, 0X00, 0X00, 0X12, 0XA4, 0X89, 0X41, 0X40, 0XAD, 0X34, 0X5B, 0X6B, 0X62, 0X7B, 0XEA, 0XDA, 0X2A, 0X00, 0X00, 0X09, 0X52, 0X05, 0X21, 0X31, 0X54, 0X14, 0X6D, 0XBD, 0XA1, 0X5F, 0XB6, 0XAA, 0X2C, 0X36, 0XED, 0X0A, 0X54, 0X88, 0XA0, 0XA1, 0X6A, 0X34, 0X56, 0XD6, 0XC5, 0X6F, 0XE9, 0XB4, 0X34, 0X55, 0X2A, 0X85, 0X22, 0X05, 0X51, 0X51, 0X56, 0X28, 0X7B, 0X6B, 0X62, 0XBD, 0XB7, 0X5A, 0X2A, 0X2A, 0XA5, 0X08, 0XD4, 0X8A, 0X48, 0XA2, 0XAA, 0X2C, 0X55, 0XBD, 0X95, 0XAF, 0XDF, 0XEC, 0X2C, 0X55, 0X54, 0X85, 0XF2, 0X05, 0X28, 0XA1, 0X6C, 0X34, 0X6E, 0XD6, 0XCE, 0XBF, 0X75, 0XB4, 0X54, 0X55, 0X55, 0X0A, 0XB9, 0X09, 0X50, 0X42, 0XAA, 0X2C, 0X5B, 0X6D, 0X2B, 0X2D, 0XAF, 0XEC, 0X58, 0X55, 0X55, 0X41, 0X7A, 0X85, 0X48, 0X43, 0X5A, 0X34, 0X6D, 0XB6, 0X9D, 0X7F, 0XFF, 0XB4, 0X6C, 0X5A, 0XAA, 0X85, 0X28, 0X0A, 0X54, 0X45, 0X6C, 0X2A, 0X36, 0XDC, 0X6B, 0X2E, 0XAB, 0XEC, 0X28, 0XAA, 0XA9, 0X44, 0XF2, 0X89, 0X54, 0X45, 0X56, 0X34, 0X3B, 0X75, 0X5E, 0X7B, 0XFE, 0XE8, 0X68, 0XAB, 0X55, 0X02, 0XF5, 0X05, 0X28, 0X05, 0XB4, 0X2E, 0X2D, 0XD9, 0X76, 0X5E, 0XAF, 0XB4, 0XB0, 0XB5, 0X55, 0X45, 0XB8, 0X8A, 0XAA, 0X0A, 0XAA, 0X35, 0X17, 0X65, 0XBD, 0X77, 0X7A, 0XD8, 0XD8, 0XD5, 0X55, 0X40, 0XF5, 0X04, 0XAA, 0X0A, 0XDE, 0X2E, 0X1A, 0XD5, 0X6E, 0X5D, 0XDF, 0XA0, 0XA9, 0X5B, 0X55, 0X43, 0X59, 0X0A, 0XA4, 0X0B, 0X6A, 0X35, 0X87, 0X66, 0XFA, 0X77, 0X75, 0XD1, 0XD0, 0XAA, 0XAA, 0XA1, 0XF4, 0X8A, 0X9A, 0X0A, 0XAA, 0X2E, 0X81, 0X97, 0XBC, 0XBD, 0XDE, 0X82, 0XB1, 0XDA, 0XD5, 0X52, 0X72, 0X04, 0XAA, 0X16, 0XDC, 0X35, 0XC0, 0X15, 0XEC, 0XEE, 0XF7, 0X07, 0X61, 0X6B, 0X5A, 0XA1, 0X1A, 0X8A, 0XAB, 0X1A, 0XAA, 0X2E, 0XF0, 0X2F, 0X7A, 0X7B, 0X5B, 0X1A, 0XD1, 0XAD, 0X55, 0X50, 0X54, 0X8A, 0XAA, 0X95, 0XB6, 0XB7, 0X5E, 0X5B, 0XD8, 0XB7, 0X76, 0XF7, 0X65, 0X55, 0X55, 0X45, 0XFA, 0X54, 0XAA, 0X6A, 0XAD, 0X5A, 0XE9, 0X2F, 0X75, 0X7D, 0XDD, 0XAD, 0XBB, 0XB6, 0XD5, 0X5A, 0XD1, 0X52, 0XAA, 0XAD, 0XDB, 0XED, 0XBA, 0X5D, 0XDC, 0XDB, 0X76, 0XF6, 0XD6, 0XDB, 0X5A, 0XA4, 0XFA, 0X95, 0X55, 0XB6, 0X6D, 0X5B, 0X64, 0XB7, 0XF0, 0XFD, 0XED, 0X5B, 0X7A, 0XAA, 0XAA, 0XAA, 0XDA, 0X55, 0X55, 0X55, 0XB6, 0XEE, 0XD2, 0X5E, 0XAD, 0X57, 0XDE, 0XED, 0XAD, 0XDB, 0X6A, 0XAA, 0XE9, 0X4A, 0XAA, 0XAA, 0XDB, 0X5B, 0XAD, 0XB7, 0XF0, 0XFA, 0XEB, 0XB6, 0XD6, 0XB5, 0X55, 0X55, 0XBA, 0XA9, 0X55, 0XB7, 0X55, 0XB6, 0XB6, 0XDA, 0X89, 0X6F, 0X5D, 0X6F, 0X7B, 0X6D, 0XAD, 0X54, 0XF4, 0X55, 0X56, 0XAA, 0XEE, 0XDA, 0XAD, 0X6F, 0XE1, 0XF9, 0XD6, 0XDA, 0XD6, 0XD6, 0XD5, 0XAB, 0X5A, 0XA5, 0X55, 0X5D, 0X5B, 0X75, 0XFF, 0XB5, 0X41, 0X5A, 0XBB, 0XB7, 0X6D, 0XBA, 0XB6, 0XA9, 0X52, 0X95, 0X55, 0X6B, 0X6D, 0XAA, 0XAA, 0XDF, 0X82, 0XF5, 0X56, 0XED, 0XB6, 0XAB, 0X55, 0X55, 0X49, 0X55, 0X55, 0XAD, 0XB6, 0XAB, 0XFF, 0XB5, 0X51, 0XB8, 0X5B, 0X76, 0XDA, 0XD5, 0XAA, 0XAA, 0XAA, 0X55, 0X56, 0XB5, 0X5A, 0XAE, 0XDD, 0XEE, 0XC2, 0XE9, 0X77, 0XAB, 0X6D, 0XBE, 0X6D, 0X55, 0X55, 0X4A, 0XAA, 0XD6, 0XEC, 0XAB, 0XFF, 0X75, 0X41, 0XD9, 0X5D, 0X6D, 0XAA, 0XA1, 0X92, 0XAA, 0XA9, 0X2A, 0XAA, 0XAB, 0X52, 0XB7, 0XEB, 0XDB, 0X02, 0XF3, 0X77, 0XAA, 0XAA, 0XAD, 0X49, 0X55, 0X54, 0XAA, 0XAD, 0X75, 0XB2, 0XAE, 0XDE, 0XE8, 0X81, 0XDA, 0XED, 0X76, 0XED, 0X56, 0XB6, 0XB5, 0X4A, 0XA9, 0X55, 0X9E, 0XC9, 0X5B, 0XFB, 0X50, 0X12, 0XFB, 0XB7, 0XDB, 0X55, 0XAA, 0XAA, 0XD5, 0X52, 0X55, 0X56, 0XE5, 0X45, 0X6F, 0XAE, 0XCA, 0X09, 0XDE, 0XED, 0X6D, 0X54, 0XD4, 0XAD, 0X55, 0X55, 0X4A, 0XAA, 0XBB, 0XA2, 0XBE, 0XF5, 0X74, 0X2A, 0XF5, 0XFB, 0XBE, 0XAF, 0X5B, 0X55, 0X55, 0X49, 0X2A, 0XB5, 0X4D, 0X09, 0X57, 0XAB, 0X50, 0X78, 0XB7, 0X56, 0XEB, 0XF5, 0XB5, 0XB6, 0XAA, 0XAA, 0XAA, 0XAB, 0X75, 0X84, 0XBE, 0XD5, 0X49, 0XDA, 0XF5, 0XEF, 0X5D, 0X5A, 0XDA, 0XDA, 0XD5, 0X54, 0XAA, 0XAD, 0XAE, 0X22, 0XAB, 0XAA, 0XA3, 0X69, 0XB7, 0X5B, 0XEB, 0XAF, 0X6F, 0X55, 0X55, 0X52, 0XAA, 0XAA, 0XB5, 0X09, 0X5F, 0XE9, 0X0F, 0XFC, 0XDB, 0XFD, 0X7D, 0X69, 0X22, 0XB6, 0XAA, 0X95, 0X4A, 0XB5, 0X57, 0X22, 0X5B, 0X74, 0X3D, 0X55, 0X6A, 0XAB, 0XAB, 0XAD, 0X5A, 0XD5, 0XB5, 0X54, 0XAA, 0XAB, 0X6A, 0X04, 0XAF, 0XDD, 0XEF, 0XF9, 0XF7, 0XBE, 0XEE, 0XD5, 0XAD, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0XBB, 0X00, 0X55, 0XFA, 0XB5, 0X55, 0X53, 0X6B, 0X55, 0X5A, 0XD2, 0XA5, 0X55, 0X52, 0XAA, 0XAD, 0X56, 0X92, 0X8B, 0X7F, 0XBF, 0XBC, 0XED, 0XDD, 0XD6, 0XAA, 0XAA, 0X95, 0X6A, 0X95, 0X4A, 0XAA, 0XDB, 0X00, 0X2B, 0XDA, 0XD5, 0X6D, 0XA7, 0X77, 0X55, 0X56, 0XD5, 0X6A, 0XAB, 0X49, 0X2A, 0XB5, 0X6A, 0X85, 0X15, 0X7F, 0XEF, 0XF4, 0XED, 0XBB, 0XFB, 0X6A, 0XAD, 0X55, 0X55, 0X2A, 0XAA, 0XAB, 0X5B, 0X40, 0X45, 0XB7, 0X6A, 0XBD, 0X56, 0XDD, 0X55, 0XAB, 0X55, 0X5B, 0X6A, 0XA9, 0X55, 0X55, 0XAD, 0X88, 0X12, 0XDF, 0XF5, 0XD5, 0XCD, 0XEF, 0XBD, 0X5D, 0X2A, 0XAD, 0X55, 0X4A, 0X4A, 0XAD, 0X6A, 0XC1, 0X44, 0XBB, 0XBC, 0XFC, 0XAD, 0X75, 0X6D, 0XD5, 0XDD, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0XB7, 0X60, 0X09, 0X56, 0XF7, 0X2D, 0X6F, 0XAF, 0XDA, 0XAA, 0X54, 0XB6, 0XDB, 0X4A, 0XAA, 0XAA, 0XAA, 0XD8, 0X21, 0X5F, 0XFE, 0XB6, 0XD5, 0XFA, 0XBE, 0XAB, 0X55, 0X55, 0X55, 0X29, 0X2A, 0XB6, 0XDD, 0XB4, 0X84, 0X2B, 0X7F, 0XDC, 0XDB, 0X5F, 0XEB, 0X6D, 0XAA, 0XAD, 0XAA, 0X95, 0X52, 0XAA, 0XAB, 0X6E, 0X01, 0X55, 0XED, 0XAA, 0XDD, 0XEA, 0XBD, 0XB6, 0XDB, 0X6A, 0XB5, 0X52, 0XAA, 0XAB, 0X6D, 0XB5, 0X08, 0X2B, 0X7F, 0XE6, 0XF6, 0XBD, 0XD5, 0X55, 0X51, 0X2D, 0X55, 0X4A, 0X4A, 0XAD, 0X56, 0XDE, 0XA1, 0X0A, 0XDF, 0XFA, 0XB5, 0XEB, 0X7B, 0X55, 0X55, 0XAB, 0X55, 0X55, 0X2A, 0XAA, 0XB5, 0X6B, 0XC0, 0X52, 0XF5, 0XBA, 0XD7, 0X7E, 0XD7, 0XBB, 0XBE, 0XB5, 0XAA, 0XA9, 0X55, 0X55, 0XAD, 0XB5, 0X70, 0X0A, 0X9F, 0XEC, 0XE9, 0XAB, 0XBA, 0XAC, 0XA5, 0X4A, 0XB5, 0X54, 0XAA, 0XAA, 0XB6, 0XDE, 0XDC, 0X81, 0X6B, 0X7F, 0X7B, 0XFD, 0XE5, 0X52, 0X9A, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X6B, 0X6A, 0X14, 0X9D, 0XFE, 0XB6, 0XAB, 0X5B, 0XB7, 0X6A, 0XAA, 0XD5, 0X52, 0X52, 0XAD, 0XB7, 0X5B, 0XBF, 0X42, 0X57, 0X6F, 0XBD, 0XFE, 0XED, 0X6D, 0XBB, 0X6D, 0X55, 0X55, 0X4A, 0XAA, 0XAA, 0XED, 0X6A, 0XC0, 0XAA, 0XFB, 0XDE, 0XAB, 0XBB, 0XB5, 0X55, 0XAA, 0XAA, 0XA8, 0XAA, 0XAA, 0XDB, 0X56, 0XDD, 0XB8, 0X0B, 0X5F, 0X6B, 0XF6, 0XDE, 0XDE, 0XEE, 0XB6, 0XD5, 0X55, 0X2A, 0X55, 0X55, 0X7B, 0X6B, 0XED, 0X25, 0XED, 0XFE, 0XAF, 0X6B, 0X6B, 0X5A, 0XD5, 0X55, 0X52, 0XA5, 0X55, 0X5B, 0XAD, 0XBD, 0X5E, 0X85, 0X5F, 0XD6, 0XFA, 0XFB, 0XB5, 0XB5, 0X5A, 0XAA, 0XA9, 0X2A, 0X04, 0XA4, 0X2A, 0X07, 0XB5, 0X41, 0X76, 0XFB, 0XAF, 0X84, 0X5E, 0XA2, 0XD4, 0XAA, 0XAA, 0XA8, 0XF0, 0XD8, 0XDB, 0X1A, 0XEE, 0X70, 0XAF, 0XBB, 0XDA, 0XBB, 0XAB, 0X41, 0X56, 0XAA, 0XA8, 0X92, 0X8C, 0XA8, 0X55, 0X1D, 0XBA, 0X6A, 0X35, 0X6A, 0XBD, 0X2E, 0X8D, 0XE0, 0XB4, 0XAA, 0XA5, 0X41, 0X54, 0XA8, 0X6E, 0X16, 0XD4, 0X3C, 0X17, 0XFB, 0XEA, 0X75, 0XC6, 0XA8, 0X54, 0XAA, 0XAA, 0X52, 0XAA, 0XA8, 0XB5, 0X1B, 0X7C, 0X57, 0X0A, 0XDB, 0X5C, 0X5E, 0XA3, 0X50, 0X6A, 0XAA, 0XA9, 0X21, 0X54, 0XA8, 0X57, 0X16, 0XD4, 0X3A, 0X83, 0XF5, 0X68, 0X6B, 0X42, 0XCC, 0X2C, 0XAA, 0XAA, 0X90, 0X95, 0X54, 0XB5, 0X1B, 0X6A, 0X1F, 0XC5, 0XBA, 0XB8, 0XB5, 0XE3, 0X6A, 0X16, 0XAA, 0XA4, 0X50, 0X2A, 0XB0, 0X5A, 0X0D, 0XBA, 0X2A, 0X96, 0XEC, 0XE8, 0XDE, 0XA1, 0X54, 0X14, 0XAA, 0XA9, 0X48, 0X02, 0XA8, 0XAD, 0X16, 0XD3, 0X1B, 0XCB, 0XF5, 0XB0, 0X6B, 0X41, 0XAB, 0X0A, 0XAA, 0XAA, 0X50, 0X01, 0X54, 0X00, 0X1B, 0X6D, 0X0D, 0X17, 0X5B, 0X50, 0XB5, 0XE1, 0X55, 0X0A, 0X55, 0X51, 0X2A, 0X00, 0X50, 0XFF, 0X15, 0XB6, 0X0E, 0XAD, 0XE9, 0XF0, 0XDE, 0XA1, 0XAA, 0X84, 0XA9, 0X2A, 0X89, 0XA0, 0X58, 0X12, 0X1A, 0XD5, 0X8B, 0X37, 0XB4, 0XA8, 0X6A, 0XA1, 0X4D, 0X02, 0XA5, 0X51, 0X54, 0X50, 0X48, 0XD5, 0X0E, 0XAB, 0X0C, 0X5E, 0XE8, 0X70, 0XB6, 0XC1, 0X6A, 0XC2, 0X55, 0X54, 0X23, 0X2C, 0X50, 0X5A, 0X15, 0XA4, 0X86, 0X57, 0XB4, 0X58, 0X5B, 0X62, 0XAA, 0XA0, 0XAA, 0XAA, 0X94, 0XA2, 0X58, 0X55, 0X1A, 0XDB, 0X44, 0XBD, 0XD4, 0X68, 0XD5, 0XA3, 0X4A, 0XA0, 0XA9, 0X51, 0X42, 0X54, 0X24, 0XAB, 0X0B, 0X4D, 0X80, 0XAF, 0X68, 0X5C, 0X6D, 0X42, 0XAA, 0XA0, 0X95, 0X54, 0X25, 0X2A, 0XA8, 0X55, 0X1A, 0XB5, 0X42, 0X7B, 0XB4, 0X6A, 0X36, 0X85, 0X6A, 0XA8, 0X52, 0X49, 0X40, 0X90, 0X50, 0X55, 0X0B, 0X56, 0XE1, 0X5D, 0XA8, 0X2A, 0X55, 0XCD, 0XA5, 0X50, 0XA9, 0X52, 0X22, 0X49, 0X48, 0X55, 0X15, 0X55, 0X40, 0XB7, 0X6C, 0X76, 0X2A, 0X15, 0X4A, 0XA8, 0X4A, 0XA9, 0X44, 0XA2, 0XA0, 0X28, 0X0A, 0X0B, 0X22, 0XDD, 0XB4, 0X0B, 0X8D, 0X55, 0X25, 0X54, 0XA9, 0X54, 0X29, 0X0A, 0X4A, 0X96, 0XA5, 0X55, 0XB8, 0XBE, 0XD5, 0X5D, 0X51, 0X24, 0X92, 0XAA, 0X95, 0X49, 0X44, 0X52, 0X92, 0X10, 0X28, 0XA1, 0X52, 0XEB, 0X5A, 0X15, 0X4A, 0X82, 0XA2, 0X92, 0X49, 0X24, 0X22, 0X89, 0X15, 0X14, 0XA8, 0XAA, 0XA1, 0X5E, 0XD4, 0X0A, 0XEA, 0XC5, 0X51, 0X55, 0X54, 0XB2, 0X94, 0X54, 0X49, 0X4A, 0XA8, 0X51, 0X62, 0XFB, 0X6E, 0X8B, 0X2B, 0X42, 0XAA, 0X49, 0X22, 0XA8, 0X42, 0X92, 0X25, 0X54, 0XA8, 0XAA, 0X81, 0X5D, 0X52, 0X05, 0XA5, 0X42, 0XA1, 0X54, 0X95, 0X4A, 0X29, 0X24, 0X2A, 0X89, 0X50, 0XB5, 0X45, 0XB6, 0X2D, 0X82, 0XAA, 0X85, 0X55, 0X52, 0XA8, 0XA1, 0X44, 0X92, 0X12, 0X55, 0X50, 0XAA, 0X82, 0XFB, 0X34, 0XA2, 0XAA, 0XA2, 0X94, 0X8A, 0X45, 0X58, 0X12, 0X48, 0X09, 0X4A, 0X48, 0XAA, 0X82, 0XAC, 0X16, 0X81, 0X4A, 0X82, 0X52, 0XA9, 0X2A, 0XA5, 0X48, 0X92, 0X00, 0XA9, 0X50, 0X55, 0X02, 0XF6, 0X14, 0XE1, 0X65, 0X42, 0X8A, 0X55, 0X50, 0X90, 0X22, 0X25, 0X00, 0X15, 0X50, 0XAA, 0X05, 0XB4, 0X14, 0X90, 0X8A, 0XA1, 0X29, 0X44, 0X8A, 0XAA, 0X89, 0X48, 0X80, 0X09, 0X28, 0XAA, 0X82, 0XEE, 0X16, 0X68, 0X6A, 0X84, 0X15, 0X2A, 0X52, 0X50, 0X44, 0X12, 0X50, 0X05, 0X48, 0X52, 0X05, 0XB4, 0X14, 0XA8, 0X25, 0X42, 0X89, 0X51, 0X25, 0X55, 0X29, 0X44, 0X95, 0X0A, 0X50, 0XAA, 0X86, 0XEA, 0X15, 0X50, 0X0A, 0X42, 0XA4, 0X8A, 0X90, 0XA0, 0X02, 0X29, 0X24, 0X85, 0X28, 0X4A, 0X83, 0X5A, 0X14, 0XAC, 0X29, 0X42, 0X55, 0X24, 0X4A, 0XAA, 0XA8, 0X82, 0X49, 0X08, 0XA0, 0XA9, 0X0D, 0XEA, 0X2A, 0X52, 0X05, 0X01, 0X20, 0XA9, 0X21, 0X50, 0X02, 0X28, 0X24, 0X85, 0X50, 0X55, 0X45, 0X54, 0X2A, 0XAA, 0X0A, 0XC5, 0X55, 0X12, 0X4A, 0X4A, 0XA8, 0X84, 0X92, 0X52, 0X08, 0X8A, 0X4B, 0XD8, 0X52, 0X49, 0X09, 0X01, 0X08, 0XA4, 0X91, 0X28, 0X02, 0X50, 0X49, 0X09, 0X60, 0X51, 0X4A, 0XA8, 0X94, 0XA5, 0X04, 0XA2, 0X51, 0X11, 0X08, 0XA1, 0X28, 0X0A, 0X04, 0X92, 0X10, 0XAA, 0X97, 0XD4, 0X52, 0X54, 0X8A, 0X41, 0X40, 0X88, 0X45, 0X54, 0X02, 0XA0, 0X28, 0X09, 0X48, 0X14, 0X0A, 0XA1, 0X48, 0X92, 0X42, 0X82, 0X21, 0X25, 0X20, 0X90, 0XA0, 0X08, 0X81, 0X52, 0X42, 0XA2, 0X97, 0X6A, 0XA5, 0X29, 0X08, 0X10, 0X88, 0X90, 0X94, 0XA9, 0X0A, 0XA2, 0X24, 0X09, 0X28, 0X4A, 0X89, 0X89, 0X14, 0X85, 0X65, 0X4A, 0X24, 0X44, 0X02, 0XA0, 0X20, 0X08, 0X89, 0X50, 0X95, 0X24, 0X56, 0X64, 0XAA, 0X54, 0X94, 0XA1, 0X49, 0X12, 0XA8, 0X9A, 0X09, 0X22, 0X22, 0X25, 0X22, 0X92, 0X8A, 0XAA, 0XA2, 0XAA, 0X4A, 0X4C, 0X92, 0X48, 0X44, 0XA0, 0XA0, 0X88, 0X91, 0X48, 0X94, 0X54, 0X5A, 0XD5, 0X2A, 0XA5, 0X51, 0X22, 0X49, 0X25, 0X22, 0X94, 0X0A, 0X22, 0X4A, 0X12, 0X4A, 0XA9, 0XAE, 0X52, 0XAA, 0X55, 0X56, 0XAA, 0XA5, 0X52, 0X94, 0XA9, 0X20, 0X89, 0X11, 0X4A, 0XA5, 0X22, 0XDA, 0X95, 0X55, 0XAA, 0XA9, 0X55, 0X55, 0X4A, 0X52, 0X90, 0X44, 0X24, 0X48, 0XA4, 0X94, 0XA9, 0XAD, 0X6D, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X12, 0X89, 0X25, 0X12, 0X55, 0X50, 0X06, 0X96, 0XED, 0X6A, 0XAA, 0XAD, 0X55, 0X55, 0X55, 0X44, 0X00, 0X20, 0X92, 0X55, 0X55, 0X50, 0X05, 0X5B, 0X56, 0XB6, 0XDA, 0XB5, 0XBA, 0XDB, 0X6D, 0X30, 0XAA, 0X8A, 0X49, 0X4A, 0XAA, 0XA0, 0X0E, 0XAD, 0XAD, 0XDB, 0X6D, 0XAE, 0XD5, 0XB6, 0XB6, 0X92, 0X00, 0X21, 0X12, 0X29, 0X55, 0X58, 0X05, 0X76, 0XEB, 0X5D, 0X56, 0XB5, 0X7B, 0X6D, 0XDB, 0X50, 0X55, 0X14, 0X49, 0X55, 0X2A, 0XD0, 0X02, 0X9F, 0XB9, 0XD6, 0XED, 0XB7, 0X96, 0XFB, 0X77, 0X4A, 0X70, 0XA2, 0X92, 0X44, 0XAA, 0XB9, 0X15, 0X4A, 0XEE, 0XDE, 0XB5, 0XF5, 0XDB, 0XAF, 0XDD, 0X28, 0X8A, 0X08, 0X49, 0X2A, 0XAA, 0XAA, 0X9D, 0X7F, 0XBD, 0XEB, 0XDF, 0X55, 0X77, 0XFD, 0XFF, 0XA5, 0X25, 0X65, 0X24, 0X91, 0X2A, 0XA9, 0X03, 0X0D, 0XDF, 0X6E, 0XDA, 0XEF, 0XB5, 0XB7, 0X6B, 0X2A, 0X94, 0X9A, 0XD5, 0X55, 0X4A, 0XAA, 0XC2, 0X6F, 0XF7, 0XFF, 0XFB, 0XBD, 0XFF, 0XFF, 0XFF, 0X56, 0XEB, 0X56, 0XB6, 0XDA, 0XB5, 0X53, 0X03, 0X57, 0XFF, 0XDE, 0XDF, 0XFF, 0XB7, 0XFF, 0XFF, 0X56, 0XA5, 0XDD, 0XDD, 0XB7, 0X55, 0X59, 0X61, 0XA9, 0XBD, 0X7B, 0XFD, 0XED, 0XFD, 0X5B, 0X6F, 0X57, 0XE9, 0XDF, 0XFF, 0XFA, 0XEA, 0XA5, 0X61, 0X40, 0X3F, 0XF7, 0X56, 0XB7, 0XAF, 0XEF, 0XFF, 0X56, 0X2C, 0X77, 0X77, 0X6F, 0XB5, 0X40, 0X00, 0X01, 0X07, 0XFD, 0XFF, 0XDE, 0XF5, 0X7F, 0XFF, 0X57, 0XEF, 0X1F, 0XFF, 0XFF, 0XFD, 0X51, 0X20, 0X28, 0X0B, 0XFF, 0XDB, 0XFF, 0XFF, 0XFF, 0XFF, 0X4F, 0XDD, 0XDF, 0XFD, 0XFF, 0XD6, 0X84, 0X10, 0X00, 0X1F, 0XEF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFB, 0X57, 0X7B, 0XDE, 0XDF, 0XFD, 0XFF, 0XFB, 0XA4, 0X95, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0XF7, 0XDF, 0X5F, 0XF7, 0XDF, 0XFF, 0XEF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X7F, 0XFF, 0XFF, 0XFF }; const unsigned char ris_3[]PROGMEM = { 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X80, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0XFF, 0XC1, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X01, 0XFF, 0X83, 0XF8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X01, 0XFF, 0X0F, 0XFE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X01, 0XFE, 0X1F, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X03, 0XFC, 0X3F, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X03, 0XF8, 0X7F, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X07, 0XF0, 0XFF, 0XFF, 0X01, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X07, 0XE1, 0XFF, 0XFC, 0X07, 0XFE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X07, 0XC3, 0XFF, 0XF8, 0X0F, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X07, 0X83, 0XFF, 0XF0, 0X3F, 0XFF, 0X00, 0X00, 0X03, 0XE0, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X07, 0X07, 0XFF, 0XC0, 0X7F, 0XFE, 0X00, 0X80, 0X1F, 0XFC, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X07, 0X0F, 0XFF, 0X81, 0XFF, 0XFC, 0X07, 0XF8, 0X7F, 0XFF, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X06, 0X1F, 0XFF, 0X03, 0XFF, 0XF8, 0X1F, 0XF8, 0XFF, 0XFF, 0X80, 0X7C, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X3F, 0XFE, 0X07, 0XFF, 0XF0, 0X3F, 0XF0, 0XFF, 0XFF, 0XC0, 0X7E, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X7F, 0XF8, 0X1F, 0XFF, 0XE0, 0X7F, 0XF1, 0XFF, 0X7F, 0XC0, 0X7E, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X7F, 0XF0, 0X3F, 0XFF, 0XC0, 0XFF, 0XE1, 0XF8, 0X0F, 0XE0, 0X7F, 0X01, 0XC0, 0X03, 0X80, 0X00, 0XFF, 0XE0, 0X7F, 0XFF, 0X83, 0XFF, 0XE3, 0XF0, 0X03, 0XE0, 0X7F, 0X01, 0XC0, 0X03, 0X80, 0X01, 0XFF, 0XC0, 0XFF, 0XFF, 0X07, 0XFF, 0XC3, 0XF0, 0X03, 0XF0, 0X7F, 0X01, 0XC0, 0X03, 0X80, 0X01, 0XFE, 0X01, 0XFF, 0XFE, 0X0F, 0XFF, 0X87, 0XE3, 0XE1, 0XF8, 0X3F, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X7F, 0XF8, 0X3F, 0XFF, 0X87, 0XE7, 0XF0, 0XFC, 0X3F, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X1F, 0XE0, 0X7F, 0XFF, 0X0F, 0XCF, 0XF8, 0XFF, 0XFF, 0X01, 0XC0, 0X03, 0X80, 0X03, 0XFE, 0X00, 0X00, 0X00, 0XFF, 0XFE, 0X0F, 0XCF, 0XF8, 0X7F, 0XFF, 0X01, 0XC0, 0X03, 0X80, 0X0F, 0XFF, 0XF8, 0X00, 0X01, 0XFF, 0XFE, 0X1F, 0XCF, 0XF8, 0X3F, 0XFE, 0X01, 0XC0, 0X03, 0X80, 0X1F, 0XFF, 0XFF, 0X80, 0X03, 0XFF, 0XFC, 0X1F, 0XCF, 0XFC, 0X1F, 0XFC, 0X01, 0XC0, 0X03, 0X80, 0X1F, 0XFF, 0XFF, 0XF0, 0X03, 0XFF, 0XF8, 0X3F, 0X8F, 0XFC, 0X07, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X1F, 0XFF, 0XFF, 0XFE, 0X01, 0XFF, 0XF8, 0X3F, 0X87, 0XFE, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X0F, 0XFF, 0XFF, 0XFF, 0X80, 0XFF, 0XF0, 0X7F, 0X87, 0XFF, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X0F, 0XFF, 0XFF, 0XFF, 0XE0, 0X3F, 0XE0, 0XFF, 0X87, 0XFF, 0X80, 0X1F, 0X01, 0XC0, 0X03, 0X80, 0X0F, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XE0, 0XFF, 0X07, 0XFF, 0XC0, 0X7F, 0X01, 0XC0, 0X03, 0X80, 0X07, 0XFF, 0XFF, 0XFF, 0XFE, 0X00, 0X01, 0XFF, 0X07, 0XFF, 0XE0, 0X7F, 0X81, 0XC0, 0X03, 0X80, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0XFE, 0X07, 0XFF, 0XF0, 0X7F, 0X81, 0XC0, 0X03, 0X80, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X3C, 0X07, 0XFF, 0XF0, 0XFF, 0X81, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X07, 0XFF, 0XF0, 0XFF, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0X80, 0X00, 0X0F, 0XFF, 0XF0, 0XFF, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFE, 0X0F, 0X0F, 0XFF, 0XE0, 0X7F, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X3F, 0XF0, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0X87, 0XFF, 0XE0, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X7F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, 0XC7, 0XFF, 0XC0, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X7F, 0XFF, 0XF8, 0X03, 0XFF, 0XFF, 0XFF, 0XC3, 0XFF, 0X80, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X7F, 0XFF, 0XFF, 0X00, 0X7F, 0XFF, 0XFF, 0XC0, 0XFC, 0X02, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0XFF, 0XFF, 0XFF, 0XE0, 0X07, 0XFF, 0XFF, 0XC0, 0X00, 0X0F, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X1F, 0XFF, 0X80, 0X00, 0X1F, 0X80, 0X01, 0XC0, 0X03, 0X80, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X80, 0X01, 0XC0, 0X03, 0X80, 0X00, 0XFF, 0X80, 0X7F, 0XFF, 0XF0, 0X00, 0X00, 0X07, 0X0F, 0X8F, 0XC0, 0X01, 0XC0, 0X03, 0X80, 0X01, 0XFC, 0X00, 0X1F, 0XFF, 0XFC, 0X03, 0XF8, 0X07, 0X8F, 0X8F, 0XE0, 0X01, 0XC0, 0X03, 0X80, 0X01, 0XF8, 0X00, 0X07, 0XFF, 0XFC, 0X0F, 0XFE, 0X07, 0X8F, 0XC7, 0XF0, 0X01, 0XC0, 0X03, 0X80, 0X01, 0XF1, 0X80, 0X01, 0XFF, 0XFC, 0X1F, 0XFF, 0X07, 0X8F, 0XC7, 0XF0, 0X01, 0XC0, 0X03, 0X80, 0X01, 0XF1, 0XF0, 0XF0, 0XFF, 0XFC, 0X3F, 0XFF, 0X87, 0X87, 0XC7, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X03, 0XE1, 0XE3, 0XFC, 0X7F, 0XF8, 0X7E, 0X3F, 0X87, 0X87, 0XE3, 0XFC, 0X01, 0XC0, 0X03, 0X80, 0X03, 0XE1, 0XE7, 0XFE, 0X1F, 0XF8, 0X7C, 0X1F, 0X87, 0XC7, 0XE3, 0XFC, 0X01, 0XC0, 0X03, 0X80, 0X03, 0XE3, 0XE7, 0XFE, 0X03, 0XE0, 0X7E, 0X0F, 0X87, 0XC7, 0XE3, 0XFE, 0X01, 0XC0, 0X03, 0X80, 0X07, 0XE3, 0XC7, 0XFE, 0X00, 0X00, 0X7E, 0X0F, 0X87, 0XC7, 0XE1, 0XFE, 0X01, 0XC0, 0X03, 0X80, 0X07, 0XE3, 0XC7, 0XFE, 0X00, 0X00, 0X3F, 0X0F, 0X87, 0XC7, 0XF1, 0XFF, 0X01, 0XC0, 0X03, 0X80, 0X07, 0XE3, 0XE0, 0XFE, 0X00, 0X00, 0X3F, 0X0F, 0X87, 0XC3, 0XF0, 0XFF, 0X81, 0XC0, 0X03, 0X80, 0X0F, 0XE1, 0XE0, 0X7C, 0X00, 0X00, 0X00, 0X1F, 0X87, 0XC3, 0XF0, 0XFF, 0X81, 0XC0, 0X03, 0X80, 0X1F, 0XE1, 0XF0, 0X7C, 0X0F, 0XE0, 0X00, 0X3F, 0X07, 0XE3, 0XF0, 0XFF, 0X81, 0XC0, 0X03, 0X80, 0X1F, 0XF1, 0XFF, 0XF8, 0X3F, 0XF8, 0X00, 0XFF, 0X07, 0XE3, 0XF8, 0XFF, 0XC1, 0XC0, 0X03, 0X80, 0X3F, 0XF0, 0XFF, 0XF0, 0X7F, 0XF8, 0X03, 0XFE, 0X07, 0XE3, 0XF8, 0X7F, 0XC1, 0XC0, 0X03, 0X80, 0X7F, 0XF8, 0X7F, 0XC1, 0XFF, 0XF8, 0X07, 0XFE, 0X07, 0XE3, 0XF8, 0X7F, 0XC1, 0XC0, 0X03, 0X80, 0XFF, 0XFC, 0X1F, 0X03, 0XFF, 0XF0, 0X0F, 0XFC, 0X07, 0XE1, 0XFC, 0X7F, 0XE1, 0XC0, 0X03, 0X81, 0XFF, 0XFE, 0X00, 0X0F, 0XFF, 0XF0, 0X1F, 0XF8, 0X03, 0XE1, 0XFC, 0X3F, 0XE1, 0XC0, 0X03, 0X81, 0XFF, 0XFF, 0X80, 0X3F, 0XFF, 0XF0, 0X1F, 0XF8, 0X03, 0XE1, 0XFC, 0X3F, 0XE1, 0XC0, 0X03, 0X81, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X0F, 0XF0, 0X03, 0XF1, 0XFE, 0X3F, 0XE1, 0XC0, 0X03, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X03, 0XF1, 0XFE, 0X1F, 0XC1, 0XC0, 0X03, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X03, 0XF1, 0XFE, 0X1F, 0XC1, 0XC0, 0X03, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X3F, 0X00, 0X03, 0XF0, 0XFF, 0X0F, 0X81, 0XC0, 0X03, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC1, 0XFF, 0XFF, 0X03, 0XF0, 0XFF, 0X07, 0X01, 0XC0, 0X03, 0X83, 0XF8, 0X0F, 0XFF, 0XFF, 0XFF, 0XC3, 0XFF, 0XFF, 0X83, 0XF0, 0XFF, 0X00, 0X01, 0XC0, 0X03, 0X83, 0XF8, 0X0F, 0XFF, 0XFF, 0XFF, 0X87, 0XFF, 0XFF, 0X83, 0XF0, 0XFF, 0X80, 0X01, 0XC0, 0X03, 0X87, 0XFF, 0X07, 0XFF, 0XFF, 0XFF, 0X87, 0XFF, 0XFF, 0X83, 0XF8, 0XFF, 0X80, 0X01, 0XC0, 0X03, 0X87, 0XFF, 0XC7, 0XFF, 0XFF, 0XFF, 0X87, 0XFF, 0XFF, 0XC3, 0XF8, 0XFF, 0X80, 0X01, 0XC0, 0X03, 0X87, 0XFF, 0XC7, 0XFF, 0XFF, 0XFF, 0X87, 0XFF, 0XFF, 0XC3, 0XF8, 0X7F, 0XC0, 0X01, 0XC0, 0X03, 0X87, 0XFF, 0XC7, 0XFF, 0XFF, 0XFF, 0X8F, 0XF0, 0X3F, 0XC3, 0XF8, 0X7F, 0XC0, 0X01, 0XC0, 0X03, 0X87, 0XFF, 0XC3, 0XFF, 0XFF, 0XFF, 0X8F, 0XF0, 0X3F, 0XC3, 0XF8, 0X7F, 0XC0, 0X01, 0XC0, 0X03, 0X87, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0X8F, 0XE0, 0X1F, 0XC3, 0XF8, 0X7F, 0XC0, 0X01, 0XC0, 0X03, 0X87, 0XFF, 0X01, 0XFF, 0XFF, 0XFF, 0X8F, 0XE0, 0X3F, 0XC3, 0XF8, 0X7F, 0XE0, 0X01, 0XC0, 0X03, 0X80, 0X78, 0X00, 0X7F, 0XFF, 0XFF, 0X8F, 0XE0, 0X3F, 0XC3, 0XF8, 0X7F, 0XE0, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0X87, 0XF0, 0X7F, 0XC3, 0XF8, 0X3F, 0XE0, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0X87, 0XF0, 0XFF, 0XC3, 0XF8, 0X3F, 0XF0, 0X01, 0XC0, 0X03, 0X80, 0X3F, 0XF8, 0X03, 0XFF, 0XFF, 0X87, 0XFF, 0XFF, 0X83, 0XFC, 0X3F, 0XF0, 0X01, 0XC0, 0X03, 0X80, 0XFF, 0XFF, 0X80, 0XFF, 0XFF, 0X87, 0XFF, 0XFF, 0X87, 0XFC, 0X3F, 0XF0, 0X01, 0XC0, 0X03, 0X81, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, 0X87, 0XFF, 0XFF, 0X87, 0XFC, 0X3F, 0XF0, 0X01, 0XC0, 0X03, 0X80, 0XFF, 0XFF, 0XF8, 0X1F, 0XFF, 0X83, 0XFF, 0XFF, 0X87, 0XFC, 0X3F, 0XF0, 0X01, 0XC0, 0X03, 0X80, 0X7F, 0XFF, 0XFC, 0X1F, 0XFF, 0X83, 0XFF, 0XFF, 0X07, 0XFC, 0X1F, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X01, 0XFF, 0XFE, 0X0F, 0XFF, 0X81, 0XFF, 0XFF, 0X07, 0XFC, 0X1F, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X01, 0XFF, 0X07, 0XFF, 0X80, 0X00, 0XFE, 0X07, 0XFC, 0X1F, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0XFF, 0X87, 0XFF, 0X80, 0X00, 0X00, 0X07, 0XFC, 0X1F, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X7F, 0X83, 0XFF, 0X80, 0X00, 0X00, 0X07, 0XFC, 0X1F, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X3F, 0XC3, 0XFF, 0XC3, 0XFF, 0X00, 0X07, 0XFC, 0X1F, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X1F, 0XC0, 0X7F, 0XC3, 0XFF, 0XC3, 0XFF, 0XFC, 0X07, 0XFC, 0X0F, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X1F, 0XFF, 0XFF, 0XC3, 0XFF, 0XC3, 0XFF, 0XFF, 0X07, 0XFC, 0X0F, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X1F, 0XFF, 0XFF, 0XC1, 0XFF, 0XC3, 0XFF, 0XFE, 0X07, 0XFC, 0X0F, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X1F, 0XFF, 0XFF, 0XE1, 0XFF, 0XC1, 0XC0, 0X7E, 0X0F, 0XFC, 0X0F, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X0F, 0XFF, 0XFF, 0XE1, 0XFF, 0XC1, 0XE0, 0X7E, 0X07, 0XF8, 0X07, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X03, 0XFF, 0XFF, 0XE1, 0XFF, 0XC1, 0XF0, 0X7C, 0X07, 0XF8, 0X07, 0XF8, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X3F, 0XFF, 0XE1, 0XFF, 0XE0, 0XF0, 0XFC, 0X07, 0XF8, 0X03, 0XF0, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X0F, 0XFF, 0XE1, 0XFF, 0XE0, 0X7B, 0XF8, 0X07, 0XF8, 0X01, 0XE0, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X07, 0XFF, 0XE1, 0XFF, 0XE0, 0X7F, 0XF0, 0X07, 0XF0, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X01, 0XFF, 0XC1, 0XFF, 0XE0, 0X3F, 0XE0, 0X07, 0XF0, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X3E, 0X01, 0XFE, 0X00, 0X1F, 0XC0, 0X03, 0XE0, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X80, 0X03, 0X80, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X06, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 }; const unsigned char ris_4[]PROGMEM = { 0X00, 0X00, 0X00, 0X01, 0XE0, 0X00, 0X24, 0X07, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X04, 0X00, 0X00, 0X1F, 0XF0, 0X98, 0XF8, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0X3F, 0X00, 0X42, 0XF8, 0X00, 0X3F, 0X9E, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0XC0, 0X00, 0X8E, 0XF0, 0X03, 0X98, 0X83, 0XC1, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X00, 0X0C, 0XE1, 0X1C, 0X00, 0X01, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X1C, 0X01, 0X80, 0X18, 0XF2, 0X39, 0XFF, 0XF0, 0X78, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X10, 0X28, 0X98, 0X31, 0XE8, 0X7F, 0XFF, 0XFE, 0X2C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X11, 0X40, 0X02, 0X03, 0XC1, 0XE9, 0XC0, 0X12, 0X06, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X18, 0X80, 0X01, 0X83, 0X81, 0XF0, 0X80, 0X01, 0X0B, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X18, 0X00, 0X30, 0XC3, 0XC7, 0X10, 0X03, 0XC0, 0X85, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X40, 0X60, 0X5B, 0X77, 0X13, 0X1F, 0XFE, 0X80, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X06, 0X30, 0X80, 0X8E, 0X3E, 0X3A, 0XFF, 0XFF, 0XC0, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X06, 0X16, 0X1F, 0X8D, 0X96, 0X3E, 0X3F, 0XF8, 0X00, 0X70, 0X2C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X19, 0X93, 0XEF, 0XC9, 0XB7, 0X1A, 0X3F, 0XC1, 0X72, 0X3C, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X09, 0X00, 0X10, 0XF0, 0X37, 0X58, 0X7F, 0X06, 0XFF, 0X2F, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC4, 0X00, 0X19, 0X37, 0XF9, 0XFE, 0X7F, 0X87, 0X81, 0XC8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X06, 0X46, 0X1A, 0X09, 0XB7, 0X72, 0XD8, 0XFF, 0XF0, 0X59, 0XEC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X88, 0X02, 0XEF, 0XFC, 0XFB, 0X12, 0X33, 0X1F, 0XCE, 0X1C, 0X70, 0X00, 0X00, 0X00, 0X00, 0X00, 0X81, 0X97, 0XFB, 0XFF, 0X7B, 0XFF, 0XB0, 0X08, 0XFF, 0XC3, 0X18, 0X40, 0X00, 0X00, 0X00, 0X00, 0X03, 0X88, 0X07, 0XFA, 0X6D, 0X8F, 0XF0, 0X59, 0XFE, 0X70, 0X08, 0X00, 0X00, 0X00, 0X00, 0X00, 0X78, 0X30, 0X07, 0XF9, 0X2E, 0XFC, 0XFF, 0X9B, 0XFF, 0XFC, 0X3C, 0X30, 0X00, 0X00, 0X00, 0X00, 0X31, 0X1E, 0X3F, 0XFD, 0X27, 0XDF, 0X7F, 0XE1, 0X1F, 0XFF, 0XEF, 0X10, 0X00, 0X00, 0X00, 0X00, 0X9C, 0XC7, 0XBF, 0XFD, 0XFC, 0X87, 0X37, 0XBC, 0X0D, 0XFC, 0X73, 0X80, 0X00, 0X00, 0X00, 0X00, 0XFE, 0XE1, 0XE7, 0XD7, 0XDE, 0XFF, 0X76, 0X3B, 0XF0, 0X06, 0X1D, 0XCC, 0X00, 0X00, 0X00, 0X06, 0X00, 0XFC, 0X63, 0X8F, 0X8F, 0XFF, 0XFF, 0X1F, 0XEC, 0X03, 0X86, 0X60, 0X00, 0X00, 0X00, 0X00, 0X03, 0XDC, 0X1F, 0XEF, 0XDF, 0XFF, 0XFF, 0XFF, 0XE6, 0X5E, 0XC1, 0XB0, 0X00, 0X00, 0X00, 0X00, 0X18, 0X50, 0X3F, 0X3F, 0XFF, 0XFF, 0XFF, 0XF3, 0XE3, 0XFF, 0XF0, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X51, 0XE1, 0XFF, 0XFF, 0XE7, 0XFF, 0XFF, 0XBA, 0X8F, 0XFC, 0X70, 0X00, 0X00, 0X00, 0X00, 0X80, 0XC3, 0X0F, 0XFE, 0X9F, 0XFF, 0X7F, 0XFF, 0XDE, 0XE3, 0XFC, 0X38, 0X00, 0X00, 0X00, 0X03, 0X83, 0XC2, 0X7E, 0X00, 0X0F, 0XFF, 0XE3, 0XFC, 0XFB, 0X70, 0X7F, 0X10, 0X00, 0X00, 0X00, 0X06, 0X0B, 0X81, 0XE3, 0XFF, 0XFF, 0XFF, 0XFD, 0XFF, 0X3F, 0XBB, 0XEF, 0X8C, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X0F, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0XD9, 0XEB, 0XFF, 0XCC, 0X00, 0X00, 0X00, 0X20, 0X0E, 0X1C, 0XFF, 0X7F, 0XFC, 0X9F, 0XBF, 0XF7, 0XEE, 0X7F, 0X3D, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X7C, 0X37, 0XE0, 0X3A, 0X7F, 0XFF, 0XF3, 0XFC, 0X73, 0X3F, 0XDE, 0XCE, 0X00, 0X00, 0X00, 0X00, 0XFC, 0XDE, 0X7F, 0XFF, 0XFF, 0XFF, 0XFC, 0X3F, 0X39, 0XBC, 0XC7, 0XE7, 0X00, 0X00, 0X00, 0X01, 0XF9, 0XF3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0X8E, 0XCE, 0X73, 0XB3, 0XC0, 0X00, 0X00, 0X8F, 0XF3, 0X4F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0XF6, 0X6F, 0X1B, 0XF1, 0XC0, 0X00, 0X00, 0X1F, 0XE2, 0X3E, 0XFF, 0XFF, 0XFF, 0X7F, 0X8F, 0XF8, 0XFF, 0X7C, 0XEF, 0XF9, 0X30, 0X00, 0X00, 0X02, 0X64, 0X77, 0XFF, 0XFF, 0XFF, 0XFF, 0XFA, 0X7F, 0X35, 0XFE, 0XE7, 0XED, 0X10, 0X00, 0X00, 0X08, 0X69, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X1F, 0X9F, 0XDF, 0XFF, 0XFD, 0X80, 0X00, 0X08, 0X03, 0X43, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE7, 0XEE, 0X4F, 0X9F, 0XFE, 0X00, 0X00, 0X08, 0X26, 0X56, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF1, 0XF7, 0X6F, 0XCE, 0XF9, 0X80, 0X00, 0X01, 0XFC, 0X0C, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0XFE, 0XFB, 0XBF, 0XFE, 0X6D, 0XC0, 0X00, 0X07, 0XF8, 0X09, 0XC0, 0XFF, 0XFF, 0XFF, 0XFF, 0X7F, 0X3D, 0X7F, 0XBF, 0XBF, 0XF4, 0X40, 0X00, 0X1C, 0X05, 0X93, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X9F, 0X9F, 0XB7, 0X20, 0X00, 0X38, 0X00, 0X86, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XDF, 0X8B, 0X50, 0X00, 0X60, 0X20, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFB, 0XFF, 0XFF, 0X7B, 0XC5, 0X0C, 0X00, 0XC0, 0X71, 0X9B, 0XC0, 0XFF, 0XFF, 0XFF, 0XC0, 0X7B, 0XFB, 0XFF, 0X7B, 0XBF, 0XF9, 0X8E, 0X00, 0XC8, 0X03, 0X96, 0X00, 0X3F, 0XFF, 0XFD, 0X00, 0X20, 0X3D, 0XFF, 0XD3, 0XBF, 0XFC, 0XC7, 0X00, 0X88, 0X03, 0X94, 0X07, 0X1F, 0XFF, 0XF9, 0X8C, 0X00, 0X36, 0XFB, 0XFF, 0XFF, 0XFF, 0X63, 0X00, 0X1A, 0XC3, 0X8C, 0X07, 0XDF, 0X7F, 0XF3, 0XDE, 0X1F, 0XBE, 0XF7, 0XFF, 0XFF, 0XF2, 0X20, 0X80, 0X13, 0X83, 0X88, 0X03, 0XFF, 0XFF, 0XF7, 0XFE, 0XFF, 0XFF, 0XF7, 0XFD, 0X3F, 0XFD, 0XD0, 0X40, 0X05, 0X81, 0X88, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0XBF, 0XDB, 0XFA, 0X40, 0X85, 0XC3, 0X8D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X7F, 0XDF, 0X9F, 0X80, 0X7D, 0X20, 0X01, 0X07, 0X9D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0XEF, 0XD7, 0X80, 0X0C, 0X80, 0XD4, 0X87, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0XFF, 0XDF, 0X9F, 0X8E, 0X00, 0X5F, 0X87, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X3F, 0XFF, 0XAF, 0XFF, 0XC7, 0X84, 0XDF, 0X87, 0X8F, 0XFF, 0XE7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0XF7, 0XFF, 0XFF, 0X61, 0XE0, 0X15, 0X03, 0X9F, 0XE8, 0XE3, 0XFF, 0XFF, 0XF8, 0X01, 0XFF, 0X9F, 0XFF, 0XDF, 0XFE, 0XB0, 0X78, 0X14, 0X87, 0X1F, 0XFC, 0X30, 0X7F, 0XFF, 0XF9, 0XD8, 0XFF, 0X9F, 0XFF, 0X7F, 0XF7, 0X1E, 0X1E, 0X14, 0X03, 0X1F, 0XEF, 0XFC, 0X7F, 0XFF, 0XFF, 0XFC, 0X3F, 0XDF, 0XFB, 0XFF, 0XFF, 0XCF, 0X07, 0X98, 0XC7, 0X1F, 0XC7, 0XFE, 0X3F, 0XFF, 0XFC, 0XFF, 0X1F, 0XDF, 0XF3, 0XDF, 0XE7, 0XE3, 0XE1, 0X98, 0X87, 0X1F, 0X80, 0XFF, 0X3F, 0XFE, 0XF0, 0X1F, 0XFF, 0X0F, 0XBB, 0XFF, 0XF8, 0XF8, 0XD9, 0X98, 0X87, 0X1F, 0X0F, 0X77, 0X1F, 0XF8, 0XE1, 0XF3, 0XEF, 0XCF, 0XFB, 0XFF, 0XFE, 0X7C, 0X6C, 0X08, 0X0B, 0X1E, 0X3E, 0X43, 0X1F, 0XF8, 0X07, 0X80, 0XEF, 0XDF, 0X7F, 0XDF, 0XFF, 0X1E, 0XFE, 0X08, 0X86, 0X1E, 0X78, 0X19, 0X1F, 0XF2, 0X4F, 0X02, 0X7F, 0XFB, 0XE7, 0XFF, 0XF9, 0XC3, 0X8F, 0X18, 0X86, 0X1E, 0X30, 0X9B, 0X1F, 0XF7, 0XFF, 0X23, 0X0E, 0XFB, 0XDF, 0XFF, 0XFD, 0XF6, 0XC7, 0X18, 0X8E, 0X1E, 0X98, 0X1B, 0X3F, 0XF7, 0XBF, 0X03, 0XFF, 0XE7, 0X7F, 0XFF, 0XBE, 0X73, 0XB3, 0X18, 0XCE, 0X3F, 0XD8, 0X73, 0X3F, 0XE7, 0XC7, 0X03, 0XFF, 0XFD, 0XF3, 0XEF, 0X9D, 0X18, 0XF9, 0X18, 0X46, 0X0E, 0X7F, 0XF7, 0X7F, 0XF7, 0XCB, 0X7E, 0X7F, 0XFF, 0XF7, 0XFF, 0X2F, 0XDE, 0X6C, 0X58, 0X04, 0X2E, 0X0F, 0XEE, 0X7F, 0XFB, 0X10, 0X30, 0X11, 0XFF, 0XFF, 0XFF, 0X0F, 0XE7, 0X34, 0X18, 0X04, 0X2C, 0X80, 0X1C, 0X7F, 0XFD, 0X9C, 0X06, 0X38, 0XFD, 0XFD, 0XFF, 0XFD, 0XFF, 0X1E, 0X00, 0X04, 0X09, 0X81, 0XF8, 0X7F, 0XFF, 0X87, 0XFF, 0XFC, 0XFF, 0XFD, 0XFF, 0XF0, 0XFF, 0X8E, 0X00, 0X04, 0X33, 0XEF, 0XF8, 0X7F, 0XC7, 0XF3, 0XFF, 0XEF, 0XFF, 0XFF, 0XF9, 0XF0, 0X39, 0XCD, 0X00, 0X00, 0X73, 0XBF, 0XB8, 0X7E, 0XF7, 0XF8, 0X7B, 0XCF, 0XFF, 0XFF, 0XF9, 0X7C, 0X1F, 0XE7, 0X00, 0X00, 0X7A, 0X96, 0X78, 0X76, 0XFF, 0XFF, 0X0F, 0XC6, 0X79, 0XFB, 0X3C, 0X1E, 0XC6, 0XE7, 0X00, 0X00, 0X48, 0X4E, 0X78, 0XFE, 0XFF, 0XFF, 0XF8, 0X70, 0X79, 0XFF, 0XFF, 0X1E, 0XC1, 0XF3, 0X00, 0X00, 0X59, 0XFE, 0X79, 0XFE, 0X7F, 0XFC, 0XFF, 0X9E, 0XBF, 0XFB, 0XFF, 0X0E, 0XF4, 0XFF, 0X00, 0X00, 0X1B, 0XEB, 0X71, 0XFF, 0XBD, 0XFF, 0XFF, 0XFF, 0XFD, 0XFF, 0XEE, 0X7C, 0X42, 0X7F, 0X00, 0X00, 0X3F, 0X3F, 0XF3, 0XBF, 0XBE, 0X7F, 0XFF, 0XF7, 0XF6, 0XFF, 0X0E, 0X7E, 0XE9, 0X3B, 0X00, 0X00, 0X3F, 0XFF, 0XE3, 0XF2, 0XBF, 0X3F, 0XFF, 0XFF, 0XFF, 0XFD, 0X8C, 0X7E, 0X99, 0XBB, 0X00, 0X00, 0X7F, 0XFF, 0XC7, 0XF2, 0X5F, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0X99, 0XFC, 0X9D, 0XBB, 0X00, 0X00, 0X7E, 0XDF, 0XC7, 0XFF, 0XCD, 0XFF, 0XFF, 0XBF, 0XF4, 0XFF, 0X9B, 0XFD, 0XCC, 0XDF, 0X00, 0X00, 0X7F, 0XCF, 0X4F, 0XFF, 0XC9, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0X19, 0XBD, 0XEE, 0XDF, 0X00, 0X00, 0X7F, 0XDE, 0XCF, 0XFF, 0XC8, 0XFF, 0XFF, 0XFF, 0XFE, 0XDE, 0X1D, 0XBD, 0X6E, 0X5F, 0X00, 0X00, 0X7F, 0XAD, 0XCF, 0XFF, 0XC8, 0XFF, 0XFF, 0XFF, 0XFF, 0X7F, 0X3F, 0XFF, 0XEE, 0X3F, 0X00, 0X00, 0X7F, 0XFD, 0XDF, 0XFF, 0XCC, 0X7F, 0XFF, 0XFF, 0XF6, 0X3E, 0X1F, 0XFC, 0XF7, 0X3F, 0X00, 0X00, 0X3F, 0XF7, 0X8F, 0XFF, 0XDE, 0X7F, 0XFF, 0XFF, 0XF6, 0X7E, 0X8F, 0XFC, 0XFF, 0X3B, 0X00, 0X00, 0X3F, 0XEF, 0X8F, 0XFF, 0XFF, 0X37, 0XFF, 0XFF, 0XFE, 0X7E, 0XC3, 0X7A, 0X7B, 0X3F, 0X00, 0X00, 0X3F, 0X3F, 0X07, 0XFF, 0XFF, 0XBB, 0XFF, 0XFF, 0XFF, 0X7F, 0XC3, 0X73, 0X3B, 0X3B, 0X00, 0X00, 0X3F, 0X3F, 0X07, 0XFF, 0XFF, 0XBD, 0XFF, 0XFF, 0XFF, 0X3F, 0XCF, 0XB7, 0X3F, 0X3F, 0X00, 0X00, 0X3E, 0XFF, 0X03, 0XFE, 0X03, 0X3E, 0XFF, 0XFF, 0X9F, 0X3C, 0XCF, 0XAB, 0XCE, 0X3F, 0X00, 0X00, 0X3B, 0XFF, 0X01, 0XF8, 0XFC, 0X7E, 0X7F, 0XFF, 0XDF, 0X3B, 0X8F, 0X9B, 0XE6, 0X3F, 0X00, 0X00, 0X39, 0XFF, 0XE0, 0X01, 0XFC, 0XFF, 0X3F, 0XEF, 0XFF, 0X7B, 0XDF, 0XB3, 0XFE, 0X7B, 0X00, 0X00, 0X39, 0XFE, 0XF8, 0X0F, 0X9F, 0XFF, 0XBF, 0XFF, 0XFF, 0X37, 0X9F, 0XB7, 0X3F, 0X7F, 0X00, 0X00, 0X31, 0XFA, 0X7F, 0XFC, 0XB7, 0XFF, 0XDF, 0XFF, 0XFE, 0X3F, 0X9F, 0XA4, 0X7F, 0X7F, 0X00, 0X00, 0X3B, 0XFE, 0XFF, 0XF0, 0XF6, 0XBF, 0XCF, 0XFF, 0XFE, 0X7F, 0X9B, 0X84, 0X3B, 0XFE, 0X00, 0X00, 0X31, 0XFD, 0XFF, 0XF3, 0XF7, 0XE0, 0XCF, 0XFF, 0XFF, 0X7B, 0X9B, 0XCF, 0X01, 0XEE, 0X00, 0X00, 0X33, 0XF1, 0XFF, 0XF7, 0XFF, 0XF6, 0X77, 0XF9, 0XFE, 0X7B, 0XBF, 0XDF, 0X87, 0XCF, 0X00, 0X00, 0X31, 0XB7, 0XFF, 0XF7, 0XFF, 0XFE, 0X7B, 0XFB, 0XFE, 0X7F, 0XBF, 0XF0, 0XFF, 0X8F, 0X00, 0X00, 0X31, 0XF7, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X7F, 0X3F, 0XF0, 0XFF, 0X84, 0X00, 0X00, 0X39, 0XDF, 0X7C, 0X7F, 0XB7, 0XCF, 0XA9, 0XFF, 0XFE, 0X7F, 0X3F, 0X84, 0XF7, 0X85, 0X00, 0X00, 0X39, 0X9B, 0X71, 0XFD, 0XF7, 0XFF, 0X8D, 0X7F, 0XFC, 0X7F, 0X4F, 0X00, 0X1F, 0X05, 0X00, 0X00, 0X3D, 0XBF, 0XFF, 0XFF, 0XEF, 0X7F, 0XFF, 0XFD, 0XFF, 0X3F, 0XC4, 0X00, 0X00, 0X00, 0X00, 0X00, 0X1D, 0X97, 0XFB, 0XFF, 0XFD, 0XFF, 0XFF, 0XFF, 0XF7, 0X7F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X19, 0XCD, 0XFB, 0XFF, 0XE5, 0XBF, 0XDF, 0XFF, 0XFE, 0X7F, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X1D, 0XC1, 0XFF, 0XBF, 0XE3, 0X7F, 0XBE, 0X7F, 0XFE, 0X3F, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0D, 0XE0, 0X64, 0X00, 0X8F, 0X39, 0X7F, 0XFF, 0XFE, 0X7F, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0XF0, 0X00, 0X00, 0X08, 0X0F, 0XEE, 0XFF, 0XFE, 0X7F, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X1C, 0XF8, 0X05, 0X70, 0X09, 0X10, 0X1E, 0XFF, 0XFE, 0XFB, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0XFE, 0X0F, 0XF9, 0XBE, 0XF0, 0X5E, 0XFF, 0XFC, 0XFA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0E, 0X7F, 0X2E, 0X6F, 0XFF, 0XE1, 0XCC, 0XF7, 0XFC, 0XF8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0E, 0X7F, 0XCF, 0XFB, 0XFF, 0XE3, 0X31, 0XF7, 0XFD, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0X3F, 0XCF, 0XF3, 0XEF, 0XC3, 0XF9, 0XE7, 0XF9, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0XBD, 0XCF, 0XF7, 0XEF, 0X4F, 0XF9, 0XEF, 0XF9, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X9F, 0XCF, 0X79, 0XCF, 0X0F, 0XF9, 0XEF, 0XFB, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XDF, 0X8F, 0XFF, 0X8E, 0X3C, 0XF9, 0XEF, 0XF3, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XCF, 0XCF, 0XED, 0XCF, 0X79, 0XF9, 0XEF, 0XF7, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XEF, 0XCF, 0X7C, 0XDE, 0X73, 0XFD, 0XCF, 0XF7, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XE7, 0XCE, 0X32, 0XDC, 0X67, 0XFD, 0XCF, 0XEE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X77, 0XCF, 0XD3, 0XDE, 0X4F, 0X7D, 0XCF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X77, 0XC7, 0XF7, 0X1C, 0XCF, 0X7F, 0XDF, 0XF8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X33, 0XC7, 0X77, 0X18, 0X9E, 0X7F, 0XDF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3B, 0XE7, 0XF7, 0XD9, 0X3F, 0XFF, 0XDF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X1B, 0XE7, 0XE7, 0X39, 0X7A, 0XFF, 0X9F, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X19, 0XE7, 0XF7, 0X39, 0XFF, 0XFF, 0XBF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0D, 0XE3, 0XE7, 0X39, 0XEF, 0XFF, 0XBE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0X00, 0X00, 0X00, 0X0D, 0XE3, 0XE6, 0X73, 0XFF, 0XFF, 0X7C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X00, 0X00, 0X00, 0X06, 0XF1, 0XF4, 0XF3, 0XFF, 0XFE, 0X78, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X06, 0XF1, 0XFF, 0XE7, 0XFF, 0XFE, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X11, 0X00, 0X00, 0X00, 0X02, 0X78, 0XF7, 0XC7, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X27, 0X00, 0X00, 0X00, 0X01, 0X78, 0XF7, 0XCF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X3C, 0X7F, 0X9F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X1C, 0X7F, 0X9F, 0XFF, 0XFE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0X00, 0X00, 0X00, 0X00, 0X0E, 0X3F, 0X3F, 0XFF, 0XF8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XE7, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X0C, 0X7F, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XAF, 0X00, 0X00, 0X00, 0X00, 0X07, 0X80, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X02, 0X00, 0X00, 0X00, 0X00, 0X03, 0XC1, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0X0A, 0X00, 0X00, 0X00, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0XDB, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X16, 0X9D, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7D, 0XEF, 0XF8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X11, 0XF5, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X63, 0X33, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7D, 0XB3, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X1B, 0XBB, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X8C, 0X71, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X06, 0XDF, 0X07, 0X00, 0X00, 0X00, 0X00, 0X63, 0X01, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0XF9, 0XEB, 0X00, 0X00, 0X00, 0X00, 0X23, 0XF0, 0X70, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0D, 0X53, 0XE1, 0X00, 0X00, 0X00, 0X00, 0X67, 0XF8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X17, 0X88, 0X0D, 0X00, 0X00, 0X00, 0X02, 0X47, 0XC1, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0X9E, 0XC9, 0X00, 0X00, 0X00, 0X03, 0X0E, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X9A, 0X9B, 0X00, 0X00, 0X00, 0X01, 0X8C, 0X0A, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X79, 0X48, 0X8B, 0X00, 0X00, 0X00, 0X01, 0X18, 0X38, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0X3D, 0X83, 0X00, 0X00, 0X00, 0X02, 0X30, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3D, 0X15, 0X73, 0X00, 0X00, 0X00, 0X0E, 0X31, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X05, 0XEA, 0X31, 0XB7, 0X00, 0X00, 0X00, 0X0F, 0X27, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XEF, 0X3F, 0X4B, 0X00, 0X00, 0X00, 0X0C, 0X67, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X1B, 0X17, 0XE2, 0X4D, 0X00, 0X00, 0X00, 0X16, 0X4E, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X11, 0X75, 0XAC, 0XC7, 0X00, 0X00, 0X00, 0X7E, 0X5C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X7F, 0XFD, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X7F, 0X38, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF }; #include <Adafruit_GFX.h> #include <Adafruit_ST7735.h> #include <SPI.h> #define TFT_CS 10 #define TFT_RST 9 #define TFT_DC 8 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); long Y(0); void setup(void) { tft.initR(INITR_BLACKTAB); tft.setRotation(0); tft.fillScreen(ST7735_BLACK); Serial.begin(9600); } void loop() { Y = millis(); drawBitmapFast(0, 0, ris_1, 128, 160, ST7735_RED, ST7735_BLACK); Serial.println(millis()-Y); //число миллисекунд на кадр Y = millis(); drawBitmapFast(0, 0, ris_2, 128, 160, ST7735_GREEN, ST7735_BLACK); Serial.println(millis()-Y); //число миллисекунд на кадр Y = millis(); drawBitmapFast(0, 0, ris_3, 128, 160, ST7735_RED, ST7735_GREEN); Serial.println(millis()-Y); //число миллисекунд на кадр Y = millis(); drawBitmapFast(0, 0, ris_4, 128, 160, ST7735_GREEN, ST7735_RED); Serial.println(millis()-Y); //число миллисекунд на кадр } void drawBitmapFast(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color, uint16_t bg) { uint8_t b(0); uint8_t bc(0); uint16_t tc(0); int16_t c = w * h; // tft.startWrite(); tft.setAddrWindow(x, y, x+w, y+h); SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0)); digitalWrite(TFT_DC, HIGH); digitalWrite(TFT_CS, LOW); asm volatile( "mloop_%=: \n" " LPM %[b],%a[bm]+ \n" " LDI %[bc],1 \n" "loop_%=: \n" " SBRC %[b],7 \n" " MOVW %[tc],%[color] \n" " SBRS %[b],7 \n" " MOVW %[tc],%[bg] \n" " IN __tmp_reg__,%[spdr]-1 \n" " OUT %[spdr],%B[tc] \n" " RJMP .+0 \n" " RJMP .+0 \n" " RJMP .+0 \n" " RJMP .+0 \n" " RJMP .+0 \n" " RJMP .+0 \n" " RJMP .+0 \n" " RJMP .+0 \n" " IN __tmp_reg__,%[spdr]-1 \n" " OUT %[spdr],%A[tc] \n" " SBIW %[c],1 \n" " BREQ exit_%= \n" " NOP \n" " LSL %[b] \n" " LSL %[bc] \n" " BRCS mloop_%= \n" " RJMP .+0 \n" " NOP \n" " RJMP loop_%= \n" "exit_%=: \n" : : [b] "l" (b), [bm] "z" (bitmap), [bc] "d" (bc), [tc] "r" (tc), [color] "w" (color), [bg] "w" (bg), [spdr] "M" (_SFR_IO_ADDR(SPDR)), [c] "w" (c) : ); // tft.endWrite(); digitalWrite(TFT_CS, HIGH); SPI.endTransaction(); }Координаты картинки должны быть 0,0
Это у меня от PROTEUS осталось - там разрешение 132х162 ... смещал в центр ...
P.S.
А если закомментировать 703 и 713 строки (// " IN __tmp_reg__,%[spdr]-1 \n") - работает ???
Нет. Полосы мельтешат сверху вниз.
Нет. Полосы мельтешат сверху вниз.
Ясно - получается SPSR надо обязательно прочитать перед посылкой нового байта ...
Завтра напишу код для вывода одной предварительно оаскрашенной строки из ОЗУ на максимальной скорости...
Т.е. надо будет пробегать по flash и результат раскрасски не сразу на экран, а в ОЗУ. Как строка готова - быстренько ее пуляем в экран и готовим новую....
Завтра напишу код для вывода одной предварительно оаскрашенной строки из ОЗУ на максимальной скорости...
Т.е. надо будет пробегать по flash и результат раскрасски не сразу на экран, а в ОЗУ. Как строка готова - быстренько ее пуляем в экран и готовим новую....
Этот алгоритм был озвучен ещё в начале темы, а вы все топчитесь на месте.
По скорости он не оптимален ...
Ну, да, самым оптимальным оказался вывод в весь обозначенный сектор рисунка данных по цвету.
Меня посетила ещё задумка... Если нельзя хранить цветную картинку в МК и нет SD карты - можно грузить на экран из файла на ПК. Но тут у меня препятствие. Как выделенную на стороне Ардуино строку 0хFF превратить в число? Со строкой 255 всё ясно, а тут?
Грузить с ПК посредством чего ???
Меня посетила ещё задумка... Если нельзя хранить цветную картинку в МК и нет SD карты - можно грузить на экран из файла на ПК. Но тут у меня препятствие. Как выделенную на стороне Ардуино строку 0хFF превратить в число? Со строкой 255 всё ясно, а тут?
Вопрос на самом деле в другом: зачем Вам замедление в 3-6 раз при форматном преобразовании? Да еще и на самом медленном участке (последовательный порт). Передавайте сразу в бинарном виде.
Грузить с ПК посредством чего ???
На hiasm можно нарисовать несколькими картинками программу которая указанный файл в байтах на сом порт указанный выдаст. Но конвертер у меня картинку даёт в виде массива 0х00, ...
Меня посетила ещё задумка... Если нельзя хранить цветную картинку в МК и нет SD карты - можно грузить на экран из файла на ПК. Но тут у меня препятствие. Как выделенную на стороне Ардуино строку 0хFF превратить в число? Со строкой 255 всё ясно, а тут?
Вопрос на самом деле в другом: зачем Вам замедление в 3-6 раз при форматном преобразовании? Да еще и на самом медленном участке (последовательный порт). Передавайте сразу в бинарном виде.
Сразу не получится ... у меня.
На стороне МК все достаточно просто - в коде из #257 сам asm volatile и всё что у его внутри меняем на:
for (uint16_t i=0; i < 2*w*h; i++) { while (!(Serial.available)); SPI.transfer(Serial.read()); }На стороне ПС надо передать бинарный массив с картинкой размером 2 * w * h байт...
На стороне ПС надо передать бинарный массив с картинкой размером 2 * w * h байт...
Я не понимаю как это :)
Есть массив типа 0х00,0х00,... Он идёт в ардуино в виде символов. Там надо сначала отделить по запятым строку-число, потом перевести её в число, потом вывести в экран как половину цвета пикселя. А как сделать бинарный массив и его передать я не алё (к сожалению).
Может из этого что то подойдет - http://microsin.net/programming/pc/binary-file-to-hex-dump-text.html
Есть массив типа 0х00,0х00,... Он идёт в ардуино в виде символов. Там надо сначала отделить по запятым строку-число, потом перевести её в число, потом вывести в экран как половину цвета пикселя. А как сделать бинарный массив и его передать я не алё (к сожалению).
Пикассо отдыхает.
Исходник
скетч
#include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library #include <SPI.h> #define TFT_CS 10 #define TFT_RST 9 #define TFT_DC 8 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); String inputString;// строки данных void setup () { // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана Serial.begin(115200); tft.setAddrWindow(0,0,127,159);// } void loop() { CheckSerial(); } /////////////////////////////////////////////////////////////////////////////////////////////////////// void CheckSerial() { ////////////////////////////////////////////////////////////////////////////// SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0)); digitalWrite(TFT_DC, HIGH); digitalWrite(TFT_CS, LOW); while (Serial.available())//считываем строку данных пока они поступают { char inChar = (char)Serial.read(); if (inChar == ',') //если запятая ... { MakeCmd();//обрабатываем её данной функцией break; } else {if(inChar!='\n'){inputString += inChar;}}// иначе удлиняем строку на один символ } digitalWrite(TFT_CS, HIGH); SPI.endTransaction(); } ///////////////////////////////////////////////////////////////////////////////// void MakeCmd() { int y = inputString.length(); // присваиваем переменной у число символов в строке if (y<1||y > 5){inputString = "";return;} //если их меньше 1 или больше 5, выходим из функции String cmd = inputString; // передаём строку другой переменной inputString = "";//"обнуляем переменную" byte N = strtol(cmd.c_str(),NULL,0);//переводим строку в число SPI.transfer(N); } ////////////////////////////////////////////////////////////////////////////////картинка
Теперь одно в голове - как добиться такого эффекта картины маслом при раскраске чб картинки?
Байты в парах надо менять местами ...
Эта мысль меня осенила только утром, после того как вчера я картинку вывел, правда весьма своеобразным способом.
выводил два раза подряд массивы одного рисунка, но с разным чередованием цветов в 16 битах. После работы попробую поправить скетч.
Если байты крайней картинки привести к виду:
00 00 00 00 00 00 20 00 E1 18 42 21 62 29 42 29
...
то можно весь массив вставить в HEX редактор HxD и сохранить как bin.
P.S.
Сам не пробовал, но вроде как в https://www.codeandweb.com/texturepacker/download можно это сделать без проблем ...
Подправил. Выводит.
#include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library #include <SPI.h> #define TFT_CS 10 #define TFT_RST 9 #define TFT_DC 8 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); String inputString;// строки данных byte N;byte N1;byte k=0;//вспомогательные переменные void setup () { // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана Serial.begin(115200); tft.setAddrWindow(0,0,127,159);// } void loop() { CheckSerial(); } /////////////////////////////////////////////////////////////////////////////////////////////////////// void CheckSerial() { ////////////////////////////////////////////////////////////////////////////// SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0)); digitalWrite(TFT_DC, HIGH); digitalWrite(TFT_CS, LOW); while (Serial.available())//считываем строку данных пока они поступают { char inChar = (char)Serial.read(); if (inChar == ',') //если запятая ... { MakeCmd();//обрабатываем её данной функцией break; } else {if(inChar!='\n'){inputString += inChar;}}// иначе удлиняем строку на один символ } digitalWrite(TFT_CS, HIGH); SPI.endTransaction(); } ///////////////////////////////////////////////////////////////////////////////// void MakeCmd() { int y = inputString.length(); // присваиваем переменной у число символов в строке if (y<1||y > 5){inputString = "";return;} //если их меньше 1 или больше 5, выходим из функции String cmd = inputString; // передаём строку другой переменной inputString = "";//"обнуляем переменную" N1=N;// N = strtol(cmd.c_str(),NULL,0);//переводим строку в число k++; if(k==2){k=0; SPI.transfer(N);SPI.transfer(N1);}// посылаем в экран парами байты } ////////////////////////////////////////////////////////////////////////////////Касперский люто на моём ПК hiasm блокирует, не даёт сделать экзешник, элю почта письмом его не шлёт - пишет вирус содержит :)
Бинарник ентот может в блокноте попробовать сделать? Откинуть 0х, запятые заменить пробелом, вместо расширения .с подписать .bin.
Всё равно это будет текст.
После правки из блокнота скопировать в HxD и там уже сохранить как бинарник ...
lilik,
1). какую разрядность цвета вы используете?
Как здесь?:
https://datagor.ru/microcontrollers/microcontrollers-code-library/2917-v...
2). Каков формат экрана? Т.е. как распределяются строки: 160Х128 или 128Х160?
lilik,
1). какую разрядность цвета вы используете?
Как здесь?:
https://datagor.ru/microcontrollers/microcontrollers-code-library/2917-v...
2). Каков формат экрана? Т.е. как распределяются строки: 160Х128 или 128Х160?
16 битный цвет как по ссылке - 565.
В строке 128 пикселей.
Всё равно это будет текст.
После правки из блокнота скопировать в HxD и там уже сохранить как бинарник ...
Нашёл уже готовое решение, действительно грузит быстрее.
https://cxem.net/mc/mc482.php
конвертер bmp изображений 24bit (то есть обычных несжатых картинок) в бинарный файл с цветовой кодировкой RGB565
скетч для вывода данным способом:
#include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library #include <SPI.h> #define TFT_CS 10 #define TFT_RST 9 #define TFT_DC 8 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); String inputString;// строки данных byte N;byte N1;byte k=0;//вспомогательные переменные void setup () { // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана Serial.begin(115200); tft.setAddrWindow(0,0,127,159);// } void loop() { CheckSerial(); } /////////////////////////////////////////////////////////////////////////////////////////////////////// void CheckSerial() { ////////////////////////////////////////////////////////////////////////////// SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0)); digitalWrite(TFT_DC, HIGH); digitalWrite(TFT_CS, LOW); while (Serial.available())//считываем строку данных пока они поступают { SPI.transfer((byte)Serial.read()); } digitalWrite(TFT_CS, HIGH); SPI.endTransaction(); } ////////////////////////////////////////////////////////////////////////////////:)
Сравнительный заезд по секундомеру показал время загрузки на экран - 3,63 сек. против 18,66 сек.
Было уже про преобразования
https://arduino.ru/forum/programmirovanie/sortirovka-palitry-rgb565#comm...
Можно оказывается визуализировать массив и без экрана. Интересно,есть ли возможность в иде уменьшить масштаб выводимого рисунка в порт?
Можно оказывается визуализировать массив и без экрана.
Ну как бы такой способ известен уже не один десяток лет. И даже успел засветиться в киноклассике.
Так у него в монитор порта картинка «выведена»...
Так у него в монитор порта картинка «выведена»...
Разобрался, надо шрифт уменьшить было.
lilik, как я понял из вашего поста #279,
1). вы передаёте из ПК в ардуино строку длиной 2 * 128 * 160 = 40960 байт?
2). При перекодировке из 8-8-8 в 5-6-6 вы берёте только старшие биты и обнуляете младшие?
3). В массиве передаваемых данных точки идут последовательно, по два байта на точку, 160 строк по 128 точек?
Да, всё так. Биты не отбрасываю, пользуюсь готовым конвертером:
Вот его настройки. Порядок цветов (правый нижний угол) тут стоит неверно, надо не зелёный, синий, красный, а выставить - красный, зелёный, синий.
Да, всё так. Биты не отбрасываю выставить - красный, зелёный, синий.
Порядок следования бат:
1 байт: "R" + часть "G";
второй байт: младшая часть часть "G" + "B" ?
И так до конца?
Паузы между передачами пар байт делаете или идёт весь массив?
Идёт весь массив без пауз, полученный в конвертере. Отброшены лишь { }, оставлены числа и запятые.
Дисплей мне ещё не пришёл. Проверить пока не на чем. Написал программу перекодировки изображения из стандартного PictureBox VB 6.0 В из 8-8-8 в 5-6-5. Пишу урывками. Могут быть ошибки. в логике. Вот код:
Public bWrite(40959) As Byte Private Sub Command2_Click() k = 0 For i = 0 To 159 For j = 0 To 127 res = GetPixel(Picture1.hdc, j, i) Call GetRGB(res) C565 Next j Next i End Sub Public Sub GetRGB(Color As Long) R = Color \ 65536 G = (Color And 65535) \ 256 B = Color And 255 End Sub Public Function C565() R = R And &HF8 G = G And &HFC B = B And &HF8 Prom = G And &HC0 Prom = Prom / 32 Prom1 = R Or Prom bWrite(k) = Prom1 Prom = (G And &H1F) * 8 Prom2 = Prom Or B / 8 bWrite(k + 1) = Prom2 k = k + 2 End FunctionНет ли ошибок?
Залил архив с программой сюда:
https://transfiles.ru/m13vm
В архиве папка с программой: 128X160.exe и ActiveX: COMDLG32.OCX для работы программы. Выбираете скорость передачи и номер СОМ-порта. Загружаете файл с картинкой, она помещается в PictureBox размером 128Х160. Если не нравится, то загружаете другую. Файлы в формате .png пока не загружается. Это на потом. Нажимаете кнопку: "Send To Arduino". Картинка перекодируется из формата 8-8-8 в формат 5-6-5 и передаётся в выбранный СОМ-порт.
Перекодировка не проверена.
:)
Не, не пошло.
На каком этапе возникает ошибка?
На каком этапе возникает ошибка?
При попытке открыть экзешник (два раза левой мышкой :).
При попытке открыть экзешник (два раза левой мышкой :).
Я проверил на двух компах с Windows 10. Программа работает.