Прошло 2 года.
22
Makefile
@@ -1,10 +1,22 @@
|
||||
PYTHON ?= python3.11
|
||||
EPDIY_SCRIPTS := lib/epdiy/scripts
|
||||
MARTIAN_FONT := static/MartianMono-VariableFont_wdth,wght.ttf
|
||||
MARTIAN_CHARS := 0123456789:;.,-+/!@\#^&*%°CABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя
|
||||
|
||||
image:
|
||||
python3 .pio/libdeps/esp32dev/epdiy/scripts/imgconvert.py -i static/sun.jpg -n sun -o include/sun.h \
|
||||
&& python3 .pio/libdeps/esp32dev/epdiy/scripts/imgconvert.py -i static/moon.jpg -n moon -o include/moon.h
|
||||
$(PYTHON) $(EPDIY_SCRIPTS)/imgconvert.py -i static/sun.jpg -n sun -o include/sun.h
|
||||
$(PYTHON) $(EPDIY_SCRIPTS)/imgconvert.py -i static/moon.jpg -n moon -o include/moon.h
|
||||
|
||||
font_12:
|
||||
python3 .pio/libdeps/esp32dev/epdiy/scripts/fontconvert.py --compress IBMPlexMono12 12 static/IBMPlexMono-SemiBold.ttf --string '0123456789:;.,-+/!@#^&*%°CАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя' > lib/IBMPlexMono/IBMPlexMono12.h
|
||||
$(PYTHON) $(EPDIY_SCRIPTS)/fontconvert.py --compress MartianMono12 12 $(MARTIAN_FONT) --string '$(MARTIAN_CHARS)' > lib/MartianMono/MartianMono12.h
|
||||
|
||||
font_30:
|
||||
python3 .pio/libdeps/esp32dev/epdiy/scripts/fontconvert.py --compress MartianMono30 30 static/MartianMono-VariableFont_wdth,wght.ttf --string 'АВДИМНОПСФЧЯабвгдеиклнопрстуцьюя' > lib/MartianMono/MartianMono30.h
|
||||
$(PYTHON) $(EPDIY_SCRIPTS)/fontconvert.py --compress MartianMono30 30 $(MARTIAN_FONT) --string '$(MARTIAN_CHARS)' > lib/MartianMono/MartianMono30.h
|
||||
|
||||
font_120:
|
||||
$(PYTHON) $(EPDIY_SCRIPTS)/fontconvert.py --compress MartianMono120 120 $(MARTIAN_FONT) --string '0123456789' > lib/MartianMono/MartianMono120.h
|
||||
|
||||
font_200:
|
||||
python3 .pio/libdeps/esp32dev/epdiy/scripts/fontconvert.py --compress MartianMono200 200 static/MartianMono-VariableFont_wdth,wght.ttf --string '0123456789' > lib/MartianMono/MartianMono200.h
|
||||
$(PYTHON) $(EPDIY_SCRIPTS)/fontconvert.py --compress MartianMono200 200 $(MARTIAN_FONT) --string '0123456789' > lib/MartianMono/MartianMono200.h
|
||||
|
||||
font_all: font_12 font_30 font_120 font_200
|
||||
|
||||
818
lib/MartianMono/MartianMono120.h
Normal file
@@ -0,0 +1,818 @@
|
||||
#pragma once
|
||||
#include "epdiy.h"
|
||||
/*
|
||||
Created with
|
||||
lib/epdiy/scripts/fontconvert.py --compress MartianMono120 120 static/MartianMono-VariableFont_wdth,wght.ttf --string 0123456789
|
||||
As 'MartianMono120' with available 11 characters
|
||||
0123456789
|
||||
*/
|
||||
const uint8_t MartianMono120_Bitmaps[12384] = {
|
||||
0x78, 0x9C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x78, 0x9C, 0xAD, 0x5B, 0x4B, 0x88, 0x5C, 0x45,
|
||||
0x14, 0x7D, 0x63, 0x92, 0x76, 0xC6, 0x99, 0x4C, 0x37, 0xD9, 0x04, 0x23, 0x98, 0x71, 0xEB, 0x87,
|
||||
0x19, 0xC1, 0x80, 0x28, 0x21, 0xEE, 0xDC, 0xA5, 0x83, 0xB8, 0x11, 0x25, 0xA3, 0x90, 0x85, 0xBB,
|
||||
0x16, 0x57, 0x82, 0x8B, 0x64, 0xE3, 0xD6, 0xB8, 0x8B, 0x8B, 0x90, 0x51, 0x84, 0x6C, 0x24, 0x44,
|
||||
0xDD, 0x08, 0x6E, 0x46, 0xDC, 0xCB, 0x88, 0xA2, 0x20, 0x0A, 0xAD, 0xE2, 0x6F, 0x95, 0x8E, 0xC6,
|
||||
0xFF, 0xAF, 0x9C, 0xF7, 0x5E, 0xF7, 0x74, 0xDD, 0x73, 0x3F, 0x55, 0xF5, 0x72, 0xCF, 0x2E, 0x79,
|
||||
0xD5, 0x67, 0xDE, 0xAB, 0xBA, 0x75, 0xCE, 0xAD, 0xAA, 0x5B, 0x55, 0x65, 0x63, 0xED, 0xCC, 0x85,
|
||||
0xF7, 0xBE, 0xBC, 0x16, 0x42, 0xB8, 0xF6, 0xE1, 0x9B, 0x2F, 0x1C, 0x5B, 0x48, 0xB4, 0x4E, 0x70,
|
||||
0xBD, 0xF4, 0x45, 0xA0, 0xB8, 0xF8, 0x68, 0x67, 0xB2, 0x8D, 0x77, 0xFF, 0x0B, 0x1C, 0xE3, 0x27,
|
||||
0x3A, 0xBD, 0xE2, 0xE0, 0xB2, 0x44, 0x56, 0x63, 0xE7, 0xC1, 0x72, 0xB6, 0x67, 0xFE, 0x56, 0xC8,
|
||||
0x6A, 0xBC, 0xBC, 0xAF, 0x90, 0xED, 0x0D, 0x83, 0xAC, 0xFE, 0xE2, 0xC3, 0x45, 0x6C, 0x9F, 0xD9,
|
||||
0x6C, 0xBB, 0xB8, 0xBB, 0x80, 0xED, 0x87, 0x24, 0x5B, 0x08, 0x0F, 0xBB, 0xB2, 0x85, 0x70, 0x4F,
|
||||
0x26, 0xDB, 0xA7, 0x59, 0x6C, 0x21, 0xDC, 0x9E, 0xC5, 0xF6, 0x41, 0x26, 0x5B, 0x08, 0xBD, 0x0C,
|
||||
0xB6, 0xE7, 0xB2, 0xD9, 0xC2, 0xCE, 0x2D, 0x49, 0xB6, 0xB5, 0x7F, 0xF2, 0xE9, 0xC2, 0xD9, 0x24,
|
||||
0xDD, 0xAF, 0x05, 0x6C, 0x21, 0xDC, 0x91, 0x60, 0x7B, 0xA5, 0x88, 0x2D, 0x4C, 0xEC, 0xE9, 0x31,
|
||||
0x28, 0xF9, 0xD4, 0x1A, 0x9B, 0x26, 0xDD, 0xC7, 0x85, 0x6C, 0x21, 0x2C, 0x1A, 0x6C, 0x1B, 0x9A,
|
||||
0x88, 0xE8, 0xB8, 0x6A, 0xD0, 0xFD, 0x52, 0xCC, 0x16, 0xC2, 0x6D, 0x2A, 0xDB, 0x23, 0x1D, 0xD8,
|
||||
0xC2, 0xB6, 0xEB, 0xCB, 0x85, 0xB0, 0xAC, 0xF5, 0x5C, 0x27, 0x36, 0xB5, 0xF7, 0xBE, 0xE9, 0x46,
|
||||
0xA7, 0x0D, 0xEE, 0xBF, 0x1D, 0xE9, 0x46, 0x22, 0xDB, 0x5B, 0x1D, 0xD9, 0x42, 0x10, 0xA7, 0xC6,
|
||||
0x1F, 0x9D, 0xE9, 0xEE, 0x14, 0xD8, 0x3A, 0x45, 0x49, 0x8B, 0x1D, 0x81, 0xEE, 0x6B, 0xAD, 0xF1,
|
||||
0x95, 0x67, 0x1F, 0x38, 0xB4, 0x3B, 0x9B, 0xEF, 0x7F, 0xFC, 0x82, 0x3A, 0xA1, 0x85, 0xC1, 0x50,
|
||||
0x7C, 0xF5, 0xC5, 0xB8, 0x63, 0x1E, 0xFB, 0x5C, 0x6E, 0x74, 0x82, 0xB1, 0x3D, 0x2D, 0xB6, 0xDB,
|
||||
0xDA, 0x0F, 0xCD, 0x9E, 0x17, 0xDF, 0x70, 0xC2, 0xE8, 0x7E, 0x92, 0x9A, 0x3D, 0xC5, 0x3F, 0x62,
|
||||
0xED, 0x47, 0xA9, 0xE1, 0x52, 0xCE, 0xB7, 0x3E, 0x24, 0x74, 0x71, 0x55, 0x7D, 0x9F, 0xF1, 0xB5,
|
||||
0xA7, 0x84, 0x36, 0x9A, 0x31, 0x0B, 0x36, 0x3C, 0x86, 0x26, 0x5F, 0xF1, 0x26, 0xA7, 0x15, 0xB6,
|
||||
0x6A, 0xF0, 0x17, 0x6F, 0x7C, 0x2B, 0x6D, 0xC2, 0x63, 0x78, 0x4B, 0x63, 0xDB, 0x0D, 0x51, 0xAE,
|
||||
0xB2, 0x34, 0x92, 0x07, 0xFC, 0xEF, 0x1D, 0xD0, 0xE9, 0xAA, 0xB7, 0x59, 0xEB, 0xF3, 0xE4, 0x39,
|
||||
0x37, 0xB0, 0xFB, 0x0C, 0x36, 0xE9, 0x63, 0x88, 0x83, 0xFF, 0x8C, 0x4F, 0x77, 0xEC, 0x8C, 0x95,
|
||||
0x47, 0x29, 0xD1, 0xF8, 0x3F, 0xF1, 0xE9, 0x8A, 0xC9, 0x26, 0xB8, 0xFB, 0x7A, 0xF4, 0x70, 0x8D,
|
||||
0xBD, 0x5C, 0x82, 0x8D, 0x07, 0x56, 0x3C, 0x72, 0xAC, 0xEB, 0x0E, 0xA6, 0xE8, 0xAA, 0xDF, 0xF0,
|
||||
0x27, 0x51, 0xEF, 0xE0, 0x0C, 0x9B, 0xA4, 0x73, 0x7D, 0x96, 0x68, 0x45, 0xAA, 0xF2, 0x3B, 0x3C,
|
||||
0xE2, 0x0A, 0xC1, 0x81, 0xB3, 0x72, 0x75, 0xFE, 0x08, 0xC3, 0x32, 0x27, 0x0F, 0xFC, 0x08, 0x7E,
|
||||
0x33, 0x77, 0x0C, 0xEC, 0x57, 0xDD, 0x89, 0x23, 0xA0, 0x8D, 0xCE, 0xA7, 0x2D, 0x9A, 0x8E, 0xA4,
|
||||
0xFD, 0x1C, 0x18, 0xCA, 0x7B, 0x3A, 0x8B, 0x41, 0x6C, 0xCD, 0x2F, 0xFD, 0x6B, 0xF7, 0x34, 0x0F,
|
||||
0x46, 0x22, 0x19, 0x74, 0x2D, 0xD0, 0xAB, 0xFA, 0xB3, 0x07, 0xE0, 0xD7, 0xEB, 0x16, 0x49, 0x04,
|
||||
0xD0, 0xA9, 0x59, 0xE6, 0x88, 0x9D, 0xAA, 0xA7, 0x58, 0x14, 0xD0, 0x47, 0xB3, 0x01, 0xC4, 0x39,
|
||||
0x91, 0xBB, 0x5E, 0x55, 0x7E, 0x07, 0x4A, 0x6C, 0xE8, 0x26, 0x05, 0x8A, 0xE4, 0x34, 0x5A, 0x6F,
|
||||
0x74, 0xEB, 0x3A, 0xD6, 0x79, 0xD3, 0x44, 0x0F, 0x02, 0x28, 0xB7, 0xEB, 0x58, 0xE7, 0x4D, 0x87,
|
||||
0x16, 0x06, 0x36, 0x7F, 0x25, 0xFD, 0x3E, 0xFD, 0x61, 0x3B, 0xB4, 0xD0, 0x05, 0xE8, 0x71, 0x06,
|
||||
0x60, 0x72, 0xB6, 0x9D, 0x0E, 0x42, 0x2D, 0x27, 0x7F, 0x32, 0xA8, 0x74, 0xB4, 0xA9, 0xC5, 0x6B,
|
||||
0x94, 0xEE, 0x68, 0x01, 0x1D, 0x78, 0x42, 0x63, 0x3F, 0x10, 0x27, 0x5A, 0x22, 0x2E, 0x01, 0x52,
|
||||
0xFD, 0xC6, 0xBB, 0x21, 0x4E, 0xF2, 0xE6, 0x7F, 0x83, 0x53, 0xA0, 0x93, 0xCD, 0x9B, 0x80, 0xEA,
|
||||
0xE7, 0xB3, 0xB1, 0xE4, 0xA2, 0x11, 0x64, 0xFA, 0x9F, 0x59, 0xD2, 0xD9, 0xE2, 0x5B, 0x60, 0x6B,
|
||||
0x27, 0x00, 0x7D, 0xE3, 0xFC, 0x81, 0xE5, 0x99, 0x43, 0xFD, 0x5B, 0xF0, 0xD8, 0xEC, 0x81, 0x15,
|
||||
0xF2, 0x9E, 0x7A, 0xFD, 0x03, 0xB1, 0x98, 0x76, 0xD8, 0x29, 0x58, 0xE2, 0xD0, 0xCE, 0x80, 0x73,
|
||||
0xF4, 0xBF, 0x58, 0x5A, 0xAA, 0xE0, 0x13, 0xCE, 0xD6, 0x0C, 0x23, 0xF8, 0x4E, 0x66, 0x9C, 0x9C,
|
||||
0x93, 0xD8, 0xEA, 0xE9, 0x0E, 0x51, 0x9C, 0xA7, 0x9D, 0x1B, 0xF2, 0xFA, 0xAD, 0x87, 0x09, 0x45,
|
||||
0xA6, 0x00, 0x28, 0x0B, 0xAE, 0x25, 0x9C, 0x28, 0xD6, 0xD2, 0x7E, 0x0E, 0xB1, 0xE3, 0x42, 0x93,
|
||||
0xC6, 0x51, 0x57, 0xCC, 0x0A, 0x3B, 0x75, 0x5F, 0xA9, 0x8F, 0x03, 0x9E, 0x93, 0xEC, 0xE8, 0xFB,
|
||||
0x4A, 0xBB, 0x41, 0x4B, 0x9F, 0xF5, 0xD3, 0x6C, 0x2C, 0xDF, 0x9A, 0x63, 0x88, 0x73, 0x2C, 0x23,
|
||||
0x8A, 0x8D, 0x0D, 0xB9, 0x11, 0x4A, 0x7B, 0x5A, 0xED, 0xE4, 0xB5, 0x60, 0x8B, 0x2D, 0x4C, 0x01,
|
||||
0xAC, 0x3D, 0xA0, 0xB6, 0xE3, 0xAC, 0x0D, 0xE0, 0x6D, 0x9C, 0xB2, 0xC9, 0x49, 0xC1, 0x72, 0xE2,
|
||||
0x18, 0x63, 0x1C, 0xF4, 0x94, 0x2B, 0xF2, 0xF5, 0x0E, 0x01, 0xAA, 0x56, 0x62, 0x8E, 0xA1, 0x9C,
|
||||
0x23, 0x16, 0x40, 0x01, 0x6C, 0xB6, 0x81, 0xD5, 0x71, 0xCD, 0xC7, 0xD1, 0x1C, 0x32, 0x31, 0x65,
|
||||
0xBF, 0x4B, 0xB0, 0x85, 0x03, 0x54, 0x50, 0x6C, 0xA7, 0x78, 0x3D, 0xC5, 0x16, 0x7A, 0xD7, 0xC9,
|
||||
0x3F, 0xCD, 0x64, 0x4C, 0x90, 0x73, 0xC4, 0x22, 0xD5, 0x27, 0x73, 0xE7, 0x56, 0x90, 0x73, 0xC4,
|
||||
0x12, 0x35, 0x6D, 0x4B, 0x50, 0x98, 0x0F, 0x0A, 0x58, 0xA6, 0x72, 0x37, 0xD4, 0xD9, 0xB2, 0xB6,
|
||||
0x80, 0x57, 0xE8, 0xC2, 0x54, 0xD7, 0x27, 0x45, 0xCE, 0x4F, 0xD3, 0xD0, 0x39, 0x48, 0x27, 0x8D,
|
||||
0xEE, 0xB2, 0xB2, 0x9C, 0x6F, 0x2F, 0xD0, 0x1C, 0x62, 0x95, 0x8A, 0x97, 0x2A, 0x77, 0x8A, 0x9C,
|
||||
0xF7, 0xE0, 0xCF, 0xF4, 0xE9, 0x70, 0x69, 0x74, 0xB2, 0x0F, 0xD6, 0x5B, 0xEE, 0xF0, 0x3A, 0xF0,
|
||||
0xB2, 0x45, 0x1D, 0x57, 0xC7, 0x01, 0x74, 0x16, 0x74, 0xA5, 0x4C, 0x27, 0xCB, 0x79, 0x73, 0x5C,
|
||||
0x41, 0x87, 0x72, 0x9D, 0xD2, 0xC9, 0x1B, 0x14, 0x8A, 0x9C, 0x37, 0xC9, 0x26, 0x0D, 0xB4, 0x13,
|
||||
0xD4, 0x79, 0x44, 0x6D, 0x57, 0x7C, 0xF0, 0xDE, 0xE6, 0x21, 0x9D, 0x06, 0xC3, 0x34, 0x9D, 0xE2,
|
||||
0x83, 0xD3, 0xF9, 0x08, 0x74, 0xB4, 0x93, 0xA5, 0x15, 0x8F, 0x2C, 0xE7, 0xE3, 0xE9, 0x2E, 0x11,
|
||||
0x5D, 0xF9, 0x6C, 0x52, 0x95, 0x10, 0xE8, 0xDE, 0x91, 0x3F, 0x75, 0xE6, 0x51, 0x94, 0x6E, 0x44,
|
||||
0xE9, 0x78, 0x76, 0xA7, 0xF8, 0xE0, 0xF1, 0xD9, 0x73, 0xAA, 0x48, 0x23, 0xDA, 0x8A, 0xD1, 0x29,
|
||||
0x72, 0x3E, 0xDF, 0x5F, 0x33, 0xE9, 0x98, 0xCD, 0xCA, 0x72, 0x3E, 0x9E, 0x1B, 0x1E, 0x95, 0xDF,
|
||||
0xB3, 0x36, 0x9D, 0xE2, 0x83, 0xD1, 0x47, 0x94, 0xD0, 0x29, 0x3E, 0x78, 0xB2, 0xEA, 0x44, 0x27,
|
||||
0xED, 0x99, 0x06, 0x30, 0x94, 0x02, 0x3A, 0x59, 0xCE, 0x27, 0xFB, 0xBB, 0xD1, 0xC1, 0xCA, 0x74,
|
||||
0x86, 0x23, 0x55, 0x27, 0x3A, 0xC5, 0x07, 0x61, 0x3B, 0x39, 0x9B, 0x4E, 0xF6, 0xC1, 0xAB, 0x0B,
|
||||
0xDD, 0xE8, 0x64, 0x39, 0x9F, 0x60, 0xC6, 0x96, 0x49, 0xA7, 0xCB, 0x79, 0x01, 0xDD, 0x5E, 0x7C,
|
||||
0x1A, 0x72, 0x4E, 0x01, 0x93, 0x4C, 0x91, 0x00, 0xCD, 0x07, 0xCB, 0xE8, 0x66, 0x02, 0xA5, 0xFA,
|
||||
0x20, 0x03, 0x08, 0x94, 0x28, 0x9F, 0xA6, 0x9C, 0x5B, 0x74, 0x9B, 0x92, 0xB8, 0xDB, 0x72, 0x4E,
|
||||
0x91, 0xE1, 0x15, 0x86, 0x0F, 0xA6, 0xE8, 0x04, 0x63, 0xB4, 0x7C, 0x90, 0x01, 0x8C, 0x91, 0xDB,
|
||||
0xB6, 0x22, 0xE7, 0xCA, 0x01, 0x06, 0xD8, 0x36, 0x4B, 0x2A, 0x94, 0x8E, 0x3B, 0x2F, 0xB3, 0x61,
|
||||
0x52, 0xC1, 0x52, 0x1E, 0xC5, 0x07, 0xB5, 0xF5, 0x0B, 0xA4, 0x3C, 0x98, 0x90, 0x29, 0x72, 0xAE,
|
||||
0xAE, 0xD5, 0x20, 0x21, 0x83, 0x97, 0x55, 0xE4, 0xFC, 0xB8, 0xC6, 0x06, 0x5B, 0x4E, 0xAB, 0xB4,
|
||||
0x2B, 0x87, 0xB2, 0x0F, 0x1A, 0xEB, 0x03, 0x18, 0xCA, 0x9C, 0xD3, 0xF6, 0x09, 0x1E, 0x5C, 0x46,
|
||||
0xA0, 0x03, 0xB7, 0x72, 0x43, 0xA1, 0x88, 0x61, 0xED, 0xFC, 0xD0, 0xCE, 0x59, 0x16, 0x4F, 0x3E,
|
||||
0x29, 0x4E, 0x1A, 0x6C, 0x15, 0xFC, 0xE1, 0xEB, 0x32, 0x45, 0x04, 0x94, 0x73, 0x02, 0x58, 0xFB,
|
||||
0x2F, 0x0A, 0x67, 0x95, 0x14, 0x4C, 0xCE, 0x09, 0x60, 0xED, 0xDF, 0xC3, 0x43, 0x0C, 0x86, 0x23,
|
||||
0x16, 0x1B, 0x5B, 0xFB, 0xA7, 0xAA, 0x01, 0xD4, 0x63, 0xD5, 0x16, 0xB8, 0xF6, 0x4F, 0x2C, 0xB5,
|
||||
0x04, 0x39, 0x27, 0xC0, 0xB5, 0x7F, 0xA2, 0x4E, 0x29, 0x75, 0xC4, 0x85, 0x6B, 0x7F, 0xE9, 0x14,
|
||||
0x7A, 0x8E, 0x54, 0x25, 0x51, 0x85, 0x6B, 0x7F, 0xB3, 0x6A, 0x24, 0xBD, 0x5F, 0x46, 0xE3, 0x6C,
|
||||
0x5B, 0x3A, 0x37, 0xDE, 0x43, 0x46, 0x15, 0x16, 0x9D, 0x54, 0x5B, 0x18, 0xD6, 0x04, 0xB2, 0x9C,
|
||||
0x13, 0x50, 0x05, 0x19, 0xE1, 0x1C, 0x8E, 0x21, 0xF9, 0x20, 0x82, 0xCA, 0xDD, 0xD0, 0xD8, 0x30,
|
||||
0x48, 0x17, 0x88, 0x55, 0xA8, 0x4F, 0x47, 0xF5, 0xCD, 0xBD, 0x8C, 0x8E, 0xAB, 0x50, 0x50, 0xFA,
|
||||
0x7A, 0x79, 0x51, 0x72, 0xEB, 0xAD, 0x06, 0xEC, 0xB0, 0xAF, 0x28, 0xB5, 0x19, 0x96, 0x9C, 0xC7,
|
||||
0x80, 0xA8, 0x5D, 0x12, 0xCB, 0x1F, 0x82, 0xEE, 0x83, 0x00, 0x98, 0x63, 0x3D, 0xA5, 0x22, 0x48,
|
||||
0xF5, 0x41, 0x00, 0xE8, 0xD1, 0x3E, 0x25, 0xCD, 0xCC, 0xDD, 0xC8, 0x87, 0x9E, 0xE2, 0x9F, 0xDF,
|
||||
0xC0, 0x94, 0xF3, 0x18, 0x34, 0x8A, 0xEB, 0xED, 0x3A, 0x56, 0x62, 0x50, 0x70, 0x68, 0x09, 0x2E,
|
||||
0xDB, 0xEC, 0xB0, 0x33, 0xA3, 0xB6, 0x7C, 0x10, 0x20, 0x1C, 0xEC, 0xB0, 0x85, 0x97, 0x2D, 0xE7,
|
||||
0x31, 0x40, 0x8E, 0x9A, 0xA3, 0x23, 0xCC, 0x71, 0x12, 0x72, 0x1E, 0x03, 0x86, 0xB1, 0xD9, 0xD4,
|
||||
0x01, 0xE3, 0x36, 0x7D, 0x10, 0x00, 0x71, 0xD2, 0xE4, 0xAE, 0x10, 0xC7, 0x39, 0x9B, 0xF8, 0x33,
|
||||
0xC0, 0x9B, 0x34, 0x82, 0xE6, 0x7C, 0x64, 0xE9, 0x7C, 0xA0, 0xEA, 0x7C, 0xDC, 0xEB, 0x7C, 0x18,
|
||||
0xED, 0x7D, 0x54, 0xEE, 0x7C, 0x90, 0xEF, 0x5C, 0x66, 0xE0, 0x5C, 0x04, 0xE1, 0x5C, 0xA2, 0xE1,
|
||||
0x5C, 0x40, 0xE2, 0x5D, 0xDE, 0xE2, 0x5C, 0x7C, 0x03, 0xE1, 0x78, 0xB3, 0xA5, 0x41, 0xCE, 0x85,
|
||||
0x4B, 0xCE, 0x65, 0x55, 0xDE, 0x45, 0x5F, 0xCE, 0x25, 0x69, 0xCE, 0x05, 0x73, 0xE5, 0xE5, 0x7C,
|
||||
0xAC, 0xFE, 0x97, 0xCC, 0x74, 0x66, 0x8E, 0x37, 0x55, 0x6C, 0xE8, 0x5D, 0x0A, 0xE9, 0x5C, 0xA8,
|
||||
0xE9, 0x5C, 0x46, 0xEA, 0x5C, 0xE4, 0xEA, 0x5D, 0x82, 0xEB, 0x5C, 0x20, 0xEC, 0x5C, 0xBE, 0xCC,
|
||||
0x43, 0xA5, 0xC6, 0x93, 0x9C, 0x2C, 0xB3, 0xB8, 0x5A, 0x5E, 0xD7, 0x5E, 0xEA, 0x5A, 0xFA, 0xED,
|
||||
0x5C, 0x98, 0x9E, 0x2A, 0x9B, 0xAF, 0xEE, 0x2A, 0x2B, 0x9B, 0x77, 0x2E, 0xEA, 0x77, 0xBE, 0x72,
|
||||
0xE0, 0x7D, 0x21, 0xC2, 0xF9, 0xBA, 0x86, 0xF7, 0x65, 0x12, 0xE7, 0xAB, 0x2E, 0xCE, 0x17, 0x71,
|
||||
0xBC, 0xAF, 0x09, 0x39, 0x5F, 0x62, 0xF2, 0xBE, 0x62, 0xE5, 0x7C, 0x01, 0xAC, 0xFC, 0x7A, 0x5A,
|
||||
0x62, 0x51, 0xE3, 0x7B, 0x79, 0xCE, 0xFB, 0x6A, 0x9F, 0xF7, 0xC5, 0x43, 0xE7, 0x6B, 0x91, 0x25,
|
||||
0x97, 0x36, 0x33, 0x36, 0xE4, 0x2A, 0xEF, 0x2B, 0xA5, 0xDE, 0x17, 0x5E, 0xBD, 0xAF, 0xE3, 0x7A,
|
||||
0x5F, 0x16, 0xF6, 0xBE, 0xCA, 0x9C, 0xB8, 0x68, 0x7D, 0xA9, 0xF4, 0xA2, 0x75, 0x7D, 0x0D, 0x5C,
|
||||
0x7D, 0xB5, 0x0E, 0xD7, 0xC0, 0x2B, 0xE7, 0x4B, 0xEA, 0x35, 0x5C, 0xAF, 0xD0, 0xB7, 0x8C, 0x67,
|
||||
0x5E, 0x2D, 0xB9, 0xE0, 0xFF, 0x3F, 0x7F, 0x2A, 0x56, 0x07, 0x78, 0x9C, 0xED, 0xD3, 0xBD, 0x4D,
|
||||
0x03, 0x41, 0x10, 0x05, 0xE0, 0x3D, 0x0C, 0xC6, 0x99, 0x9D, 0xDA, 0x4E, 0x28, 0xC0, 0x81, 0x1B,
|
||||
0x40, 0x72, 0x03, 0x96, 0xA8, 0xC0, 0x2D, 0x40, 0x07, 0xD0, 0xC1, 0x41, 0x05, 0x2E, 0x01, 0x41,
|
||||
0x03, 0x96, 0xA0, 0x00, 0x07, 0x24, 0x64, 0x8E, 0x20, 0x75, 0x88, 0xF9, 0x31, 0x90, 0x02, 0x37,
|
||||
0x33, 0xF7, 0xDE, 0xFA, 0x12, 0xA4, 0x37, 0xE9, 0xDB, 0xFB, 0x76, 0xF5, 0x4E, 0x93, 0x92, 0x35,
|
||||
0x37, 0x5F, 0xD6, 0x74, 0xCD, 0xB3, 0xC1, 0x9C, 0x99, 0x0C, 0xED, 0x8C, 0x3F, 0x9A, 0x71, 0x5E,
|
||||
0x6D, 0x86, 0x75, 0x9E, 0x1C, 0x86, 0x74, 0x6E, 0x3D, 0x86, 0x73, 0x9C, 0x8E, 0x59, 0x67, 0xBC,
|
||||
0x6D, 0xC4, 0xE9, 0x79, 0x1D, 0x93, 0x8E, 0xDB, 0x31, 0xE7, 0xDC, 0x45, 0x0C, 0xEE, 0x5C, 0x84,
|
||||
0x0C, 0xEC, 0x4C, 0x82, 0x8E, 0x09, 0xA7, 0xF7, 0x16, 0x33, 0xA8, 0xF3, 0x5C, 0xC3, 0x80, 0x4E,
|
||||
0xDC, 0x31, 0xEC, 0xD4, 0x74, 0x8C, 0x3A, 0x93, 0xCF, 0x46, 0x9C, 0xDA, 0x8E, 0x41, 0xE7, 0x05,
|
||||
0x60, 0x00, 0xE7, 0xDE, 0xFE, 0x70, 0xBD, 0xE5, 0x9C, 0x4B, 0xE7, 0x01, 0x83, 0x0D, 0xE5, 0x9C,
|
||||
0x38, 0x1D, 0x4F, 0x13, 0xE5, 0x1C, 0xBD, 0xDB, 0x4C, 0x99, 0x38, 0xC7, 0xE9, 0x78, 0xD9, 0xE2,
|
||||
0x9C, 0x07, 0xA7, 0x9C, 0xC3, 0x44, 0x39, 0x57, 0x0E, 0x33, 0x4C, 0x94, 0xE3, 0x75, 0x3C, 0x4B,
|
||||
0x9C, 0xE3, 0x94, 0x73, 0x5D, 0x90, 0xCE, 0xC6, 0x64, 0x56, 0xFB, 0x56, 0xCA, 0x3B, 0x1D, 0x33,
|
||||
0xA5, 0x9D, 0x91, 0x9D, 0xB2, 0xCE, 0xB9, 0x93, 0x92, 0xCE, 0xA2, 0x68, 0xC4, 0x59, 0x1F, 0x78,
|
||||
0x29, 0xE7, 0xF4, 0xDD, 0x94, 0x72, 0xA6, 0x7E, 0xCA, 0x38, 0x65, 0x90, 0x12, 0xCE, 0x72, 0xAF,
|
||||
0x19, 0xA7, 0x1D, 0xA5, 0xB8, 0x33, 0x0C, 0x53, 0xD8, 0x99, 0xC5, 0xB7, 0xA0, 0xCE, 0xBC, 0x88,
|
||||
0x52, 0xD8, 0x59, 0xB5, 0xE2, 0xD7, 0xA2, 0x4E, 0x27, 0x4C, 0x61, 0x67, 0x14, 0xA6, 0xB0, 0x73,
|
||||
0x5A, 0xF3, 0x5A, 0xD0, 0x59, 0x54, 0x3A, 0xCE, 0x72, 0x7E, 0x2E, 0xF9, 0x2E, 0x4E, 0x3F, 0x4C,
|
||||
0x61, 0xE7, 0x38, 0xBE, 0x05, 0x75, 0xCA, 0x30, 0x85, 0x9D, 0x3F, 0x4B, 0x9E, 0xED, 0xB4, 0xC3,
|
||||
0x14, 0x76, 0x06, 0xF1, 0x2D, 0xA8, 0x53, 0x59, 0xF2, 0x3C, 0x67, 0x1E, 0x84, 0x84, 0xF3, 0x58,
|
||||
0x5D, 0xF2, 0x2C, 0xC7, 0xFD, 0x55, 0xA4, 0x13, 0x8F, 0x1C, 0x39, 0x72, 0xE4, 0xC8, 0x91, 0x23,
|
||||
0x47, 0x8E, 0x1C, 0x39, 0x72, 0xE4, 0xC8, 0x91, 0x23, 0x47, 0x8E, 0x1C, 0x39, 0x72, 0xE4, 0xC8,
|
||||
0x91, 0x23, 0x47, 0x8E, 0x1C, 0x39, 0x72, 0xE4, 0xC8, 0x91, 0x23, 0xE7, 0x3F, 0x3A, 0xBF, 0x4F,
|
||||
0x66, 0x4F, 0x57, 0x8E, 0x1C, 0x39, 0x72, 0xE4, 0xC8, 0x91, 0xB3, 0xBB, 0xF3, 0x0D, 0x9B, 0x20,
|
||||
0x43, 0xC7, 0x78, 0x9C, 0xED, 0x9A, 0x3B, 0x6C, 0x13, 0x41, 0x10, 0x86, 0x2F, 0xEF, 0xA0, 0x04,
|
||||
0xE2, 0x0A, 0x09, 0x90, 0xC0, 0x20, 0x41, 0x83, 0x44, 0x42, 0x03, 0x0D, 0x90, 0xD0, 0x50, 0x50,
|
||||
0x10, 0x23, 0x51, 0x13, 0x7A, 0x24, 0x92, 0x06, 0x89, 0x0E, 0x6A, 0x1A, 0x10, 0x05, 0x14, 0x20,
|
||||
0x05, 0x0A, 0x0A, 0x2A, 0x03, 0x0D, 0xA5, 0x01, 0x09, 0x51, 0x21, 0x8B, 0x77, 0x41, 0x61, 0x90,
|
||||
0x80, 0x06, 0x29, 0xE6, 0x15, 0x9E, 0x21, 0xCB, 0xD9, 0x97, 0xC4, 0xB7, 0xF3, 0xD8, 0x9D, 0x19,
|
||||
0x19, 0x89, 0xC2, 0x7F, 0xE7, 0xF3, 0xFA, 0xF3, 0xDD, 0xEC, 0xCC, 0xCE, 0xEC, 0xCE, 0x25, 0x49,
|
||||
0x48, 0x3B, 0x4F, 0xDE, 0x78, 0x35, 0xB7, 0xE8, 0xEA, 0x73, 0x8F, 0x2E, 0x9F, 0xDA, 0x1A, 0x1C,
|
||||
0x19, 0xD0, 0xD8, 0xC5, 0x05, 0x97, 0x57, 0xFD, 0xCA, 0x36, 0x0B, 0xE5, 0x8E, 0xC3, 0xAA, 0xEE,
|
||||
0xD6, 0x62, 0xAE, 0x13, 0x94, 0x86, 0x2A, 0x6B, 0x35, 0x94, 0xD2, 0x6F, 0x06, 0x93, 0xEA, 0xB8,
|
||||
0x1C, 0x73, 0x61, 0x91, 0xC7, 0x38, 0x37, 0xDB, 0x23, 0xC4, 0x3C, 0x08, 0x51, 0x52, 0xD5, 0xFA,
|
||||
0x44, 0x98, 0x17, 0x11, 0x4C, 0x0A, 0xEA, 0x17, 0x60, 0xDE, 0x47, 0x31, 0xA9, 0x0B, 0xC4, 0x41,
|
||||
0xCF, 0x05, 0x98, 0xD4, 0x01, 0x7A, 0x23, 0x98, 0xFB, 0x22, 0x8C, 0x73, 0xE5, 0xAE, 0x20, 0xE6,
|
||||
0x8C, 0x10, 0xE3, 0xDC, 0x89, 0x10, 0x66, 0x22, 0x38, 0xE1, 0xBE, 0x36, 0x04, 0x38, 0x3F, 0xE4,
|
||||
0x18, 0x57, 0xE7, 0x4D, 0xF4, 0x44, 0x81, 0x71, 0xEE, 0x1C, 0x87, 0x29, 0xA9, 0x30, 0xCE, 0x0D,
|
||||
0xB5, 0xE1, 0xA9, 0x1A, 0xAA, 0xD1, 0x73, 0x76, 0x53, 0x89, 0x71, 0x6E, 0x07, 0x85, 0x29, 0x2C,
|
||||
0xC4, 0x7F, 0x08, 0x54, 0xA7, 0x22, 0xF6, 0xB1, 0x1A, 0x43, 0xDE, 0x50, 0x51, 0xE1, 0x3A, 0xAD,
|
||||
0x1B, 0xEA, 0x46, 0x9C, 0x37, 0x06, 0x8C, 0x73, 0x1B, 0x91, 0x75, 0xFE, 0x98, 0x38, 0xB5, 0x76,
|
||||
0x58, 0xA7, 0x21, 0xE8, 0x43, 0x81, 0x05, 0x39, 0x28, 0xE0, 0xD4, 0xE7, 0x8D, 0x18, 0xE7, 0xFC,
|
||||
0x28, 0xFB, 0x66, 0xE6, 0x78, 0x96, 0x1E, 0xE3, 0x46, 0xD5, 0xCE, 0x1E, 0xD8, 0xD2, 0x95, 0x14,
|
||||
0x36, 0x1F, 0xB9, 0xF4, 0x81, 0x19, 0x51, 0x11, 0x4C, 0x7A, 0x65, 0x57, 0x6E, 0xCC, 0xFE, 0x87,
|
||||
0xF4, 0xA0, 0x7C, 0xF2, 0xF8, 0x45, 0x8E, 0x38, 0x08, 0xE6, 0xE2, 0x30, 0x39, 0x2C, 0xF7, 0x60,
|
||||
0xC7, 0xC8, 0x47, 0xC2, 0x19, 0xB8, 0xF0, 0x92, 0x18, 0x57, 0x6E, 0x7D, 0xFF, 0x89, 0xC2, 0x90,
|
||||
0xC9, 0x8E, 0xCA, 0x26, 0xAD, 0x60, 0x25, 0xEE, 0xB7, 0xCE, 0xE4, 0x4C, 0x02, 0x34, 0xBC, 0xFC,
|
||||
0x1D, 0xB5, 0x0E, 0xAE, 0xA2, 0x31, 0x49, 0xF2, 0x13, 0x0D, 0x9D, 0x5C, 0xFE, 0xEA, 0x35, 0xC6,
|
||||
0xEC, 0xE3, 0x30, 0xC9, 0x18, 0x0A, 0xC4, 0x95, 0x18, 0xFB, 0x8E, 0x30, 0xD5, 0x40, 0x96, 0xBB,
|
||||
0x87, 0x46, 0x2F, 0xB9, 0x74, 0x01, 0xAF, 0x3C, 0xEC, 0x53, 0x91, 0x4F, 0xB6, 0x14, 0xAB, 0x38,
|
||||
0x87, 0x9E, 0x0E, 0x61, 0xF0, 0xF8, 0xF1, 0xEC, 0x3A, 0x9E, 0xF5, 0x81, 0x20, 0x07, 0xE5, 0x95,
|
||||
0x32, 0x63, 0x9E, 0xF0, 0xED, 0x10, 0x8B, 0x43, 0x76, 0x19, 0x99, 0x27, 0x68, 0x9D, 0x86, 0x60,
|
||||
0x66, 0x69, 0x56, 0x43, 0x28, 0x28, 0x2A, 0x31, 0x0C, 0x0A, 0xEB, 0xA6, 0x27, 0xDE, 0x85, 0x9C,
|
||||
0xD5, 0x51, 0xCE, 0x04, 0xF8, 0xC5, 0xA6, 0xC6, 0xC5, 0xCF, 0x90, 0x83, 0x73, 0x09, 0x12, 0x98,
|
||||
0xFA, 0xE9, 0xC6, 0x35, 0x68, 0xFD, 0xE9, 0x38, 0x06, 0x3E, 0x58, 0xD3, 0x12, 0xD0, 0xCC, 0x5C,
|
||||
0x15, 0x91, 0x17, 0xB4, 0x69, 0x42, 0x2C, 0xA9, 0x82, 0xC7, 0x42, 0x7F, 0xDE, 0x8B, 0xBD, 0x93,
|
||||
0xAD, 0x8E, 0x3C, 0x01, 0x9F, 0x1B, 0xC4, 0xD3, 0xB5, 0x46, 0xC4, 0x01, 0x31, 0x30, 0x84, 0xA3,
|
||||
0x42, 0x52, 0xAA, 0x23, 0x97, 0x1E, 0x49, 0x92, 0x79, 0xFF, 0x0A, 0x4A, 0xD8, 0xB4, 0x80, 0x07,
|
||||
0x8D, 0xD2, 0xAE, 0x20, 0x90, 0x6F, 0xE8, 0xA9, 0x24, 0x01, 0xCB, 0x9B, 0xCC, 0x3C, 0xF0, 0xEF,
|
||||
0xD3, 0xC9, 0x01, 0xE6, 0x89, 0x2C, 0x19, 0x2B, 0xF2, 0xCD, 0x51, 0x46, 0xEE, 0x13, 0xDE, 0x36,
|
||||
0xB4, 0xE4, 0x47, 0x53, 0x35, 0x99, 0xF1, 0x31, 0xE5, 0x38, 0x21, 0x13, 0xC8, 0x0D, 0x70, 0x02,
|
||||
0x27, 0xE3, 0x84, 0x4C, 0xA0, 0x48, 0x86, 0x9F, 0xA5, 0x66, 0x86, 0xFF, 0xDF, 0x0D, 0xEE, 0x2F,
|
||||
0xBA, 0x14, 0x2E, 0x0B, 0xD8, 0xA3, 0xE7, 0xA3, 0xFF, 0x39, 0xB6, 0xCD, 0x5B, 0x11, 0xC8, 0xC1,
|
||||
0xBD, 0xBE, 0xDD, 0xEB, 0x52, 0x0C, 0x9C, 0xE7, 0xBE, 0x2F, 0xDE, 0x47, 0xF1, 0x74, 0x25, 0x45,
|
||||
0x9F, 0xD3, 0xFF, 0xD5, 0xFB, 0x28, 0x8D, 0x8A, 0x34, 0x09, 0x03, 0x8E, 0x5F, 0x60, 0x8E, 0x5A,
|
||||
0x39, 0x03, 0xFE, 0x82, 0x24, 0x9E, 0x76, 0x18, 0x4F, 0xD2, 0x70, 0xFA, 0xEF, 0x39, 0xD0, 0xCE,
|
||||
0x56, 0x0E, 0x9C, 0x77, 0x2B, 0x07, 0xFA, 0xA1, 0x95, 0x03, 0xE3, 0xC2, 0xCA, 0x01, 0x19, 0x55,
|
||||
0x94, 0x3C, 0x29, 0x81, 0x75, 0x43, 0xBA, 0x8C, 0x22, 0x81, 0xF4, 0x69, 0xC5, 0x24, 0xFE, 0x7A,
|
||||
0x23, 0xCC, 0x7A, 0x84, 0xFC, 0xF5, 0x26, 0x5E, 0xC2, 0x71, 0xF2, 0xE3, 0x5B, 0x56, 0x5C, 0x50,
|
||||
0xF2, 0xB7, 0x36, 0xF2, 0xF5, 0x06, 0xCA, 0xCF, 0xCB, 0xE3, 0x56, 0x0C, 0xA8, 0x13, 0x46, 0xAC,
|
||||
0x1C, 0xE0, 0x3E, 0xC3, 0xF1, 0x5F, 0xD0, 0x02, 0xE9, 0x6A, 0xD0, 0xCA, 0x01, 0xFB, 0x7D, 0x73,
|
||||
0x78, 0x81, 0x9D, 0x81, 0x15, 0x03, 0xCC, 0x5C, 0xB5, 0x72, 0x40, 0x74, 0xC5, 0x36, 0x48, 0xAC,
|
||||
0xFC, 0xAC, 0xA7, 0x48, 0x57, 0x40, 0xC0, 0x3C, 0xD6, 0x69, 0x87, 0xDB, 0x02, 0x6B, 0xB6, 0x80,
|
||||
0xFB, 0x2F, 0xEB, 0x6A, 0x08, 0x0E, 0xAF, 0xAC, 0xAB, 0x06, 0x7C, 0x2C, 0x71, 0x31, 0x08, 0x04,
|
||||
0x77, 0x7E, 0xF1, 0x0D, 0x24, 0x2D, 0x78, 0x32, 0x61, 0x34, 0xF3, 0x55, 0x80, 0x91, 0x17, 0x71,
|
||||
0xBE, 0xE0, 0x46, 0xD4, 0xE8, 0xCD, 0x68, 0x9F, 0xAE, 0x28, 0x9A, 0xF2, 0x9A, 0x87, 0x1C, 0x9B,
|
||||
0x79, 0xD0, 0xA1, 0x93, 0xD1, 0x3C, 0xE8, 0x76, 0xA6, 0xDA, 0x73, 0x3B, 0xC6, 0x20, 0xC5, 0x67,
|
||||
0x57, 0xA6, 0xE0, 0xC2, 0xE7, 0xB9, 0xB3, 0x16, 0x4C, 0x01, 0x1F, 0x2F, 0x9B, 0x82, 0x82, 0x68,
|
||||
0xB8, 0x48, 0x9B, 0x7C, 0x79, 0x11, 0x07, 0x8D, 0xA6, 0x0A, 0x01, 0x9F, 0x41, 0x9A, 0x66, 0xEB,
|
||||
0x29, 0xC6, 0x10, 0x8D, 0x87, 0xA8, 0x66, 0x30, 0xC6, 0xB2, 0x84, 0x15, 0xA9, 0xBE, 0x8D, 0x21,
|
||||
0xB6, 0xA8, 0x6E, 0x94, 0x61, 0x65, 0x26, 0x8C, 0x63, 0xB1, 0x32, 0xD9, 0x98, 0x60, 0x1A, 0x60,
|
||||
0x01, 0xD1, 0x0D, 0x48, 0xB2, 0xFF, 0x15, 0x52, 0x81, 0x6E, 0x04, 0xA8, 0x7D, 0xF9, 0x1D, 0x89,
|
||||
0x51, 0x57, 0x97, 0xB7, 0x49, 0x8C, 0xFA, 0x76, 0x28, 0x07, 0x34, 0xDC, 0x0E, 0xE9, 0x80, 0x86,
|
||||
0xDB, 0x61, 0xDA, 0xA1, 0xDA, 0xC9, 0x22, 0x1D, 0x50, 0xEF, 0x3B, 0x5C, 0x67, 0x4C, 0x72, 0x0C,
|
||||
0x9B, 0x53, 0x89, 0x69, 0x63, 0xCA, 0x4F, 0x54, 0x9A, 0x62, 0x1C, 0x50, 0xBD, 0xD1, 0xE6, 0xFA,
|
||||
0x74, 0x7C, 0xBF, 0x85, 0x14, 0xF7, 0x96, 0x41, 0xA8, 0xDF, 0x42, 0x88, 0x71, 0x40, 0xED, 0xBE,
|
||||
0x04, 0xB7, 0x84, 0x96, 0x74, 0x48, 0x85, 0x61, 0xFB, 0xF1, 0x15, 0xDD, 0x53, 0x3D, 0xE3, 0x9E,
|
||||
0x4A, 0x37, 0x57, 0xD7, 0x38, 0xCC, 0x76, 0x15, 0x86, 0x73, 0xC0, 0xF0, 0x8B, 0x1B, 0x48, 0x44,
|
||||
0x45, 0x90, 0x29, 0xF2, 0x22, 0x09, 0x14, 0xE7, 0x80, 0x81, 0xB7, 0x36, 0x28, 0xB1, 0xAF, 0xB9,
|
||||
0xE8, 0x3C, 0x87, 0x75, 0x40, 0x9D, 0x8D, 0x59, 0x07, 0x3C, 0xAA, 0xC2, 0x50, 0xF5, 0x49, 0x53,
|
||||
0xCA, 0x1A, 0xEE, 0x2D, 0x83, 0xA9, 0xEA, 0x56, 0x64, 0xCE, 0x01, 0x05, 0x2F, 0x33, 0xE5, 0xC5,
|
||||
0x3A, 0xE0, 0x7A, 0x15, 0xA6, 0xC8, 0x39, 0xE0, 0x5E, 0x15, 0x86, 0x28, 0xB4, 0x33, 0x29, 0x77,
|
||||
0x47, 0x9C, 0x03, 0x2A, 0xC3, 0x81, 0x7B, 0xCF, 0xAA, 0xA6, 0x0B, 0x07, 0xD6, 0x01, 0x95, 0x07,
|
||||
0x3C, 0x9C, 0x03, 0xEA, 0xC2, 0x81, 0x29, 0x73, 0xD4, 0xE1, 0xC0, 0x39, 0xA0, 0x32, 0x1C, 0xC8,
|
||||
0xB7, 0x2F, 0x9C, 0x3A, 0x1C, 0xB8, 0x32, 0x47, 0x19, 0x0E, 0xAC, 0x03, 0xAE, 0xD3, 0x61, 0x98,
|
||||
0x32, 0x47, 0x1B, 0x0E, 0x9C, 0x03, 0x2A, 0xC3, 0x61, 0x82, 0x71, 0x40, 0x65, 0x38, 0x70, 0x65,
|
||||
0x8E, 0x32, 0x1C, 0x58, 0x07, 0x54, 0x6E, 0x8B, 0x6E, 0x31, 0x18, 0x65, 0x38, 0x70, 0x0E, 0xA8,
|
||||
0x0C, 0x07, 0xCE, 0x01, 0xB5, 0x5B, 0x61, 0x74, 0xF2, 0x91, 0xA9, 0xAA, 0xDD, 0xC2, 0xD2, 0xE5,
|
||||
0x92, 0x36, 0x1C, 0x38, 0x8E, 0x32, 0x1C, 0x38, 0xCE, 0x1E, 0x35, 0x86, 0xE4, 0x58, 0x1A, 0x09,
|
||||
0x04, 0x47, 0x19, 0x0E, 0x1C, 0x47, 0x1B, 0x0E, 0x1C, 0xC7, 0x76, 0x02, 0x87, 0x38, 0xCA, 0x70,
|
||||
0xE0, 0x38, 0xCA, 0x70, 0xE0, 0x38, 0xE6, 0xDE, 0x91, 0xCF, 0x51, 0x87, 0x03, 0xCD, 0xE1, 0xDE,
|
||||
0xAB, 0xD3, 0x72, 0xF4, 0xE1, 0x40, 0x72, 0xCC, 0x8D, 0x2C, 0xC0, 0x31, 0x37, 0xB2, 0xFE, 0x11,
|
||||
0xC7, 0xA6, 0xC1, 0x0E, 0xA7, 0xC3, 0xE9, 0x70, 0x3A, 0x9C, 0x0E, 0xA7, 0xC3, 0xE9, 0x70, 0xDA,
|
||||
0xC1, 0xF9, 0x0B, 0xDF, 0x48, 0xDB, 0x44, 0x78, 0x9C, 0xD5, 0x9B, 0xDB, 0x8B, 0x1C, 0x45, 0x14,
|
||||
0xC6, 0x7B, 0x27, 0xAE, 0xC6, 0x75, 0x93, 0x9D, 0xF8, 0xE0, 0x05, 0x25, 0x3B, 0x41, 0x05, 0x41,
|
||||
0x61, 0x17, 0x21, 0x2A, 0xF8, 0xB0, 0x6A, 0xC0, 0xBB, 0x68, 0xFE, 0x00, 0x5D, 0x95, 0x05, 0x43,
|
||||
0x5E, 0xBC, 0x20, 0x82, 0x60, 0xBC, 0x21, 0x8B, 0x22, 0xB8, 0xD1, 0x07, 0x09, 0x82, 0xAC, 0x2F,
|
||||
0x09, 0x06, 0x09, 0xF1, 0xFA, 0x22, 0xC2, 0x46, 0x11, 0x44, 0x44, 0x26, 0x2F, 0x62, 0x94, 0xE0,
|
||||
0x24, 0x2A, 0x22, 0xA2, 0x69, 0x63, 0x34, 0xC6, 0x5B, 0xCA, 0xEE, 0xB9, 0xEC, 0x76, 0x7D, 0xE7,
|
||||
0x54, 0xD7, 0x57, 0x67, 0xF7, 0xC5, 0xEF, 0x6D, 0x66, 0xBA, 0x7F, 0xD3, 0x55, 0x75, 0xEA, 0x9C,
|
||||
0x53, 0xA7, 0xAA, 0xB3, 0xAC, 0x56, 0xD7, 0xCE, 0xEE, 0xFE, 0xF4, 0xE7, 0x93, 0xCE, 0xE5, 0x5F,
|
||||
0xBF, 0xFF, 0xF2, 0xBD, 0x17, 0xD6, 0x5F, 0x1B, 0x54, 0x73, 0xE6, 0x93, 0x02, 0x51, 0x55, 0xFE,
|
||||
0xDC, 0xE5, 0xE9, 0x98, 0xD6, 0xAE, 0x7F, 0x9D, 0xA2, 0xF6, 0x0D, 0x89, 0x4F, 0xB3, 0xF3, 0xA4,
|
||||
0x86, 0xE9, 0xA2, 0xAE, 0x48, 0xE0, 0xDC, 0xFD, 0x4F, 0x08, 0x53, 0xEA, 0xF9, 0x55, 0x2C, 0xE7,
|
||||
0xDD, 0x3A, 0x4C, 0xA1, 0xCE, 0xD9, 0x5C, 0xB3, 0x7E, 0x88, 0x70, 0x0A, 0xDD, 0x44, 0x70, 0x26,
|
||||
0xFF, 0x8A, 0x73, 0x9C, 0xBB, 0x23, 0xCE, 0xF9, 0x9B, 0xE1, 0xC4, 0x49, 0x2C, 0xC7, 0xB9, 0x5B,
|
||||
0xEB, 0xFB, 0xE7, 0x4F, 0x96, 0xE3, 0xDC, 0x25, 0x75, 0xA0, 0xEF, 0x79, 0x8E, 0x73, 0xA7, 0x85,
|
||||
0x39, 0x1F, 0xA6, 0x70, 0x5C, 0x27, 0x68, 0x4F, 0x77, 0x25, 0x71, 0x9C, 0x7B, 0x3C, 0xD4, 0x41,
|
||||
0x74, 0x47, 0x0F, 0x74, 0x9E, 0x0E, 0xFA, 0x36, 0x95, 0xE3, 0x72, 0xB5, 0x71, 0xA9, 0x0D, 0x2B,
|
||||
0x75, 0x9B, 0x06, 0x4A, 0x18, 0xF9, 0x25, 0x9D, 0x2A, 0x39, 0x6F, 0x58, 0x38, 0x5A, 0x7F, 0xD7,
|
||||
0x7A, 0x8E, 0xB0, 0x84, 0x31, 0x7D, 0x60, 0xE3, 0xC8, 0x47, 0x32, 0x3E, 0x90, 0x73, 0xC3, 0x2B,
|
||||
0xD1, 0x43, 0xA5, 0xA6, 0x7C, 0x10, 0xE5, 0x84, 0x54, 0xE5, 0x8D, 0x2A, 0xE7, 0x09, 0x33, 0xC7,
|
||||
0xB9, 0xD1, 0x2A, 0xE8, 0xF7, 0x65, 0x80, 0xE6, 0x2B, 0x9C, 0xC9, 0x65, 0x70, 0xBC, 0xEE, 0xDE,
|
||||
0x1F, 0xBC, 0xA8, 0xFD, 0xEC, 0x75, 0x17, 0xAC, 0xCB, 0x9A, 0x1B, 0x36, 0x3D, 0x8C, 0x61, 0x77,
|
||||
0x49, 0xEB, 0xE3, 0x5D, 0xFD, 0xCA, 0x45, 0x95, 0xC7, 0x6E, 0x3E, 0x1D, 0x30, 0x91, 0xA5, 0xB6,
|
||||
0xDD, 0xAE, 0x5F, 0xB0, 0x70, 0x16, 0x1A, 0xDB, 0x4E, 0xFD, 0xC2, 0x45, 0x1F, 0x70, 0x58, 0xFD,
|
||||
0x79, 0xDB, 0x10, 0x72, 0x8A, 0xBF, 0x54, 0x1F, 0x6A, 0x71, 0xDC, 0xD4, 0x96, 0xDD, 0x22, 0x31,
|
||||
0x59, 0x20, 0xEA, 0x4D, 0xF7, 0x7F, 0xBC, 0x5A, 0xE3, 0x5C, 0xA5, 0x72, 0x8A, 0x2C, 0x45, 0x71,
|
||||
0xA3, 0x9D, 0x9A, 0x31, 0xBB, 0x33, 0xC0, 0x29, 0xFE, 0x56, 0x49, 0x77, 0xFA, 0x06, 0x70, 0x5C,
|
||||
0xFE, 0x32, 0x17, 0xE4, 0xA8, 0xB3, 0xA0, 0xDF, 0x49, 0xD2, 0x40, 0x74, 0x5F, 0x3C, 0xD0, 0x77,
|
||||
0xE2, 0xFA, 0xDE, 0xC4, 0xBD, 0x5F, 0xFE, 0x43, 0x20, 0x3A, 0xF4, 0xD5, 0x14, 0x43, 0xD7, 0xB3,
|
||||
0xA4, 0x43, 0x49, 0x0D, 0x2B, 0x25, 0x7D, 0x4E, 0xF7, 0xEB, 0x3F, 0xC4, 0xD7, 0x8A, 0x47, 0xF7,
|
||||
0x25, 0x6C, 0xA0, 0xDB, 0xDB, 0x62, 0x14, 0xA6, 0x63, 0x1C, 0xF9, 0x48, 0x23, 0x99, 0x66, 0x45,
|
||||
0xC3, 0x51, 0x90, 0x70, 0xCC, 0x63, 0x1A, 0xFD, 0xBE, 0x38, 0x47, 0x4C, 0xAA, 0x72, 0xD8, 0x8E,
|
||||
0x22, 0x68, 0x35, 0x01, 0xC2, 0x66, 0x94, 0xB1, 0x04, 0xFB, 0x7A, 0x81, 0xE0, 0x64, 0xD9, 0x09,
|
||||
0x79, 0x13, 0xF6, 0xF5, 0xFA, 0x28, 0xA4, 0x14, 0xDA, 0x4C, 0x31, 0x09, 0xB1, 0x65, 0xA7, 0x50,
|
||||
0x20, 0xCC, 0x38, 0x1A, 0xC2, 0xAE, 0xE7, 0xE3, 0x90, 0xAE, 0x60, 0x5E, 0x0D, 0x67, 0xFB, 0x4C,
|
||||
0x2D, 0x13, 0x5D, 0xBB, 0x5A, 0x0C, 0x1A, 0x61, 0x44, 0x5D, 0xC1, 0x7D, 0x23, 0x18, 0xD1, 0xDA,
|
||||
0x24, 0x07, 0xCD, 0x6F, 0x14, 0xD3, 0x2B, 0x35, 0x05, 0xD3, 0x04, 0xBD, 0xBD, 0x16, 0x47, 0x7F,
|
||||
0x34, 0x8E, 0xE8, 0x09, 0x46, 0x7B, 0x2C, 0x83, 0x2E, 0xE2, 0x06, 0xBF, 0x94, 0x3F, 0x6C, 0xE3,
|
||||
0x10, 0xAC, 0x3B, 0x71, 0xC0, 0x40, 0x7E, 0x10, 0x98, 0x00, 0x33, 0x62, 0x26, 0x6C, 0x5F, 0x7E,
|
||||
0xE7, 0x4E, 0xBC, 0xEA, 0x83, 0xC6, 0x79, 0x90, 0x1F, 0x32, 0xA6, 0xC0, 0x1E, 0x47, 0x78, 0x90,
|
||||
0x6F, 0x37, 0x53, 0x30, 0xF9, 0xF8, 0xBE, 0x46, 0x10, 0x18, 0x28, 0xCF, 0xC9, 0x7E, 0xF3, 0x41,
|
||||
0xC7, 0xBC, 0x8F, 0x7B, 0xCD, 0xA0, 0x09, 0xFF, 0x01, 0xE3, 0x6E, 0x3F, 0xD4, 0xB4, 0x09, 0x7F,
|
||||
0x12, 0x27, 0x0C, 0x1A, 0x8C, 0xDA, 0xB8, 0xEF, 0x32, 0xD7, 0x24, 0x80, 0xFC, 0x47, 0x18, 0xF3,
|
||||
0xCD, 0xEA, 0xF4, 0x04, 0x90, 0x1F, 0x24, 0xD7, 0xF8, 0x86, 0xCE, 0x3A, 0xA3, 0x52, 0xFE, 0x6C,
|
||||
0x3F, 0x23, 0xE1, 0x4E, 0x90, 0xC7, 0x49, 0x6A, 0x8B, 0x2F, 0x88, 0x6C, 0x29, 0x6D, 0xF1, 0xB5,
|
||||
0xDD, 0x07, 0x35, 0xE2, 0x77, 0x04, 0x04, 0x73, 0xCB, 0xCC, 0x01, 0x7B, 0xE4, 0xC2, 0xB3, 0x2A,
|
||||
0x3F, 0x1F, 0x49, 0xF0, 0x63, 0x20, 0xE8, 0xEB, 0x94, 0x29, 0xE1, 0x0B, 0x52, 0x6A, 0x3A, 0x66,
|
||||
0x08, 0x41, 0xA0, 0x8D, 0x26, 0x8B, 0x21, 0xE1, 0x02, 0xCF, 0xFC, 0x40, 0xD0, 0x32, 0x36, 0xF3,
|
||||
0x90, 0x82, 0x05, 0xC9, 0x84, 0x95, 0x03, 0xB1, 0xC7, 0x3E, 0xD3, 0x30, 0xCF, 0xB6, 0x4E, 0x90,
|
||||
0x37, 0x81, 0x13, 0x5B, 0x29, 0x84, 0xD4, 0xC2, 0xB4, 0x33, 0xC5, 0xB1, 0x56, 0x25, 0x96, 0x65,
|
||||
0x09, 0xD1, 0xB0, 0xAA, 0xB7, 0x90, 0x63, 0x1C, 0xFC, 0x27, 0x91, 0x63, 0x9C, 0x1F, 0x0F, 0xC8,
|
||||
0x65, 0xA2, 0x69, 0xCC, 0x5E, 0x14, 0x18, 0x3E, 0x5B, 0xAC, 0xA8, 0x75, 0x40, 0x72, 0x0C, 0xEE,
|
||||
0xBA, 0xB5, 0x4B, 0x2B, 0x8F, 0xA4, 0xF9, 0xB4, 0xE6, 0x86, 0x4D, 0xB3, 0x5F, 0x29, 0x14, 0x17,
|
||||
0xF7, 0x20, 0x6C, 0xCD, 0x2D, 0x9A, 0x77, 0x90, 0xA0, 0x3C, 0x6A, 0x8C, 0x24, 0xE8, 0xFC, 0x68,
|
||||
0xAF, 0x70, 0x20, 0x62, 0xBA, 0x52, 0xA0, 0x70, 0x69, 0x3C, 0x11, 0x54, 0x53, 0xAC, 0x4F, 0x02,
|
||||
0x9D, 0x4B, 0x70, 0x08, 0x50, 0x7E, 0x0E, 0xC3, 0x89, 0x83, 0xDA, 0x64, 0x2C, 0x8B, 0x81, 0x1E,
|
||||
0x55, 0x2A, 0x70, 0x06, 0x50, 0x87, 0x77, 0x8A, 0xF5, 0x20, 0x7A, 0xC5, 0xFA, 0xFF, 0x03, 0xAD,
|
||||
0x58, 0x1F, 0xB9, 0x9C, 0xD9, 0xF3, 0x63, 0x40, 0xCE, 0x3D, 0x46, 0x8E, 0x7F, 0xDC, 0xB2, 0xE7,
|
||||
0x39, 0x12, 0x31, 0xD7, 0xE6, 0x28, 0x12, 0x33, 0x69, 0xC3, 0x75, 0xD8, 0x44, 0x50, 0xA4, 0xF0,
|
||||
0x99, 0x00, 0x8A, 0x7B, 0x6C, 0xD6, 0xD5, 0x86, 0xF6, 0xFC, 0x92, 0x41, 0x44, 0xD2, 0x47, 0x82,
|
||||
0xE2, 0xEB, 0x72, 0x36, 0x40, 0x46, 0x97, 0x8E, 0xB3, 0xCF, 0x54, 0xB5, 0x63, 0xF7, 0x41, 0xF3,
|
||||
0x23, 0xA1, 0x9A, 0x0F, 0xFD, 0x68, 0xEC, 0x25, 0xA9, 0x07, 0xB5, 0xFD, 0x57, 0x62, 0xE0, 0x94,
|
||||
0xA7, 0xFA, 0x42, 0x21, 0xD1, 0xE7, 0x11, 0x3C, 0x7D, 0x24, 0x41, 0x6C, 0xE5, 0x12, 0xF4, 0xB9,
|
||||
0x00, 0x59, 0x97, 0xA1, 0x27, 0x04, 0xC9, 0xB8, 0x54, 0x6F, 0x09, 0x0B, 0x33, 0xB6, 0x4D, 0x2C,
|
||||
0x8D, 0xEC, 0xAB, 0x35, 0xB1, 0x6D, 0x61, 0x5D, 0x1C, 0x89, 0xDD, 0xF3, 0x84, 0x12, 0x9F, 0x2F,
|
||||
0xDC, 0xFA, 0x9C, 0x8A, 0xDF, 0xC2, 0x3D, 0x52, 0xFA, 0x7C, 0x1B, 0x08, 0x77, 0xF4, 0xD9, 0xCC,
|
||||
0x44, 0x08, 0xCB, 0xF2, 0xCC, 0x0E, 0x88, 0x2A, 0xDC, 0x71, 0x58, 0x6B, 0x05, 0xA1, 0x05, 0x98,
|
||||
0x7B, 0x1B, 0xDB, 0x66, 0x2F, 0x20, 0x40, 0xB1, 0x26, 0x37, 0x83, 0xD0, 0xA5, 0xDB, 0x2B, 0x63,
|
||||
0x60, 0x93, 0xE6, 0x6A, 0x0D, 0x96, 0xD8, 0xCC, 0x93, 0x04, 0x8B, 0x7E, 0xF6, 0xF1, 0x87, 0x02,
|
||||
0x92, 0xBD, 0x34, 0x06, 0x85, 0x51, 0xCB, 0x4A, 0xBB, 0x2F, 0x3F, 0x32, 0x99, 0x62, 0x52, 0x4F,
|
||||
0xBE, 0x6D, 0xDB, 0xE7, 0x3F, 0x54, 0xEA, 0x13, 0xF2, 0x6E, 0xD4, 0xAF, 0x1E, 0x28, 0x61, 0x87,
|
||||
0x07, 0xF5, 0x8B, 0xDF, 0xDB, 0x59, 0xD3, 0x4B, 0x3A, 0xB6, 0xF0, 0x20, 0x2C, 0xFA, 0xFA, 0x9E,
|
||||
0x25, 0x61, 0xF2, 0x41, 0x01, 0x71, 0xA8, 0x09, 0x9F, 0xAD, 0xA0, 0x06, 0x18, 0x16, 0xBF, 0x56,
|
||||
0xD9, 0x57, 0x0F, 0xE2, 0x9D, 0x2F, 0x80, 0x56, 0xC1, 0xC6, 0x1D, 0x5F, 0xE5, 0x12, 0x20, 0xDF,
|
||||
0x43, 0x8D, 0xD1, 0xA0, 0xFD, 0x08, 0xF2, 0x8B, 0x9C, 0xFC, 0xE6, 0x11, 0xD8, 0x51, 0x03, 0xD2,
|
||||
0x1D, 0xDE, 0x8B, 0x1F, 0x45, 0x90, 0x5F, 0x9D, 0xE4, 0x0D, 0xC9, 0xDF, 0x4F, 0x2B, 0xEC, 0x06,
|
||||
0xBE, 0xA0, 0xB3, 0x2F, 0x28, 0x8F, 0x8A, 0xB6, 0xD2, 0x7B, 0x40, 0x7E, 0xDF, 0xE6, 0xA2, 0xF7,
|
||||
0xE9, 0x12, 0xB7, 0x6F, 0x36, 0x1D, 0x91, 0xC8, 0xB1, 0x1E, 0x0A, 0x7C, 0xF6, 0x82, 0x76, 0x94,
|
||||
0x80, 0x12, 0x44, 0x91, 0x39, 0x99, 0x58, 0x90, 0x11, 0x0A, 0xBC, 0xC8, 0xB4, 0x68, 0x2C, 0x9B,
|
||||
0x58, 0x1C, 0x97, 0x77, 0x41, 0xFD, 0x9E, 0x74, 0x9A, 0xF0, 0xF7, 0x63, 0x92, 0x4D, 0x15, 0xE0,
|
||||
0xC4, 0x91, 0x8C, 0x72, 0xB2, 0xE3, 0xA1, 0x08, 0x2A, 0xD6, 0xE1, 0x4D, 0xA5, 0xFB, 0xC1, 0xB3,
|
||||
0x35, 0x39, 0xE3, 0x25, 0x71, 0xE1, 0x56, 0x3A, 0x44, 0x91, 0x7E, 0x13, 0x3E, 0x49, 0x1C, 0xA2,
|
||||
0x2A, 0xBF, 0x6C, 0xE2, 0x97, 0xC4, 0xB2, 0x09, 0x33, 0xF6, 0x9E, 0x19, 0x8B, 0xE3, 0x4D, 0x51,
|
||||
0x53, 0x12, 0xC7, 0x68, 0x7A, 0x6E, 0xEC, 0x18, 0x7E, 0x1D, 0x9D, 0x26, 0xDF, 0xE0, 0x1D, 0x3D,
|
||||
0xC7, 0x2A, 0xCF, 0xC3, 0x45, 0x6A, 0xCB, 0x93, 0xA2, 0x62, 0xDF, 0x5B, 0x69, 0xCB, 0xA3, 0xC2,
|
||||
0xF5, 0xC7, 0xD8, 0x20, 0x7F, 0x28, 0xD5, 0x9F, 0xA0, 0x72, 0x4B, 0xA0, 0x36, 0xDD, 0x91, 0xE7,
|
||||
0xDE, 0x06, 0xC3, 0xA3, 0x1C, 0xD1, 0xBB, 0x34, 0xCC, 0x91, 0x4B, 0xD1, 0x45, 0x1B, 0x96, 0x27,
|
||||
0xE2, 0xEA, 0x22, 0xA5, 0xF2, 0xB7, 0x03, 0xCB, 0xD3, 0xCE, 0x53, 0xE7, 0xA1, 0xCC, 0x59, 0x2E,
|
||||
0xD7, 0x2B, 0x81, 0x5E, 0xAB, 0xCC, 0xE4, 0xFA, 0xE4, 0xD5, 0x38, 0x4B, 0x16, 0x2C, 0x2C, 0xA9,
|
||||
0x4B, 0xBA, 0x52, 0xE9, 0x1F, 0xAD, 0xA4, 0x51, 0xF1, 0xF3, 0xDB, 0xB5, 0x9F, 0x9D, 0xDB, 0x86,
|
||||
0x56, 0x10, 0x78, 0x69, 0xA3, 0xD2, 0x9F, 0x81, 0x23, 0xB3, 0xF9, 0xD6, 0x2A, 0x6A, 0xF3, 0x97,
|
||||
0xFA, 0x55, 0x55, 0x57, 0x28, 0x4D, 0x6C, 0xA0, 0x3D, 0x5B, 0x36, 0x9E, 0x39, 0x94, 0xAD, 0xBB,
|
||||
0x6C, 0xE6, 0xB5, 0x9F, 0x42, 0x97, 0x54, 0x9D, 0xF3, 0x72, 0xCE, 0x30, 0xFB, 0x96, 0x62, 0x3E,
|
||||
0xE6, 0x8D, 0x5E, 0x47, 0x3F, 0xA2, 0x4B, 0xC9, 0x2F, 0xB1, 0x2C, 0xE3, 0x38, 0x34, 0x0C, 0xAD,
|
||||
0x62, 0xF8, 0x9C, 0x30, 0x35, 0x53, 0x8E, 0xB2, 0x72, 0x12, 0x13, 0x40, 0x16, 0xAA, 0x28, 0x49,
|
||||
0x87, 0x63, 0xB4, 0x00, 0xC5, 0x4B, 0xC8, 0x53, 0xB1, 0x84, 0xB4, 0x8D, 0x3A, 0xCB, 0xCB, 0x19,
|
||||
0xFA, 0x32, 0xDD, 0x70, 0xB2, 0x5E, 0x0F, 0xEF, 0x62, 0x1B, 0x3F, 0xAA, 0xD0, 0xCE, 0x61, 0xF2,
|
||||
0x6B, 0x0C, 0xC1, 0x92, 0x7F, 0xA2, 0x55, 0x86, 0x63, 0x8D, 0x12, 0x20, 0x6A, 0xD4, 0xAE, 0x49,
|
||||
0x37, 0x93, 0xEC, 0xBB, 0x36, 0x23, 0x7B, 0x81, 0xE7, 0xD4, 0xBE, 0x51, 0x95, 0x65, 0x6F, 0xB3,
|
||||
0x9C, 0xFA, 0x77, 0xBC, 0x32, 0xB5, 0x60, 0xAD, 0x29, 0xFE, 0xFE, 0x5A, 0xF6, 0xCE, 0x0A, 0x71,
|
||||
0xB2, 0xEC, 0xA9, 0x38, 0xE7, 0x66, 0x86, 0x53, 0xCC, 0xBA, 0xC8, 0x3B, 0x5A, 0xF9, 0xC5, 0x1C,
|
||||
0xA7, 0x48, 0x2B, 0x3F, 0xAE, 0xE3, 0xEC, 0x4D, 0x39, 0xB8, 0xB2, 0x59, 0xDF, 0x03, 0x29, 0xD4,
|
||||
0xB9, 0x31, 0x01, 0x53, 0xEA, 0x1E, 0xF5, 0x2C, 0x45, 0x67, 0xAB, 0xA1, 0x50, 0x78, 0xCD, 0x4B,
|
||||
0x18, 0x5C, 0xF7, 0x5C, 0x6F, 0x2D, 0x13, 0xB7, 0x66, 0x76, 0xBC, 0x77, 0xF0, 0x48, 0x81, 0x38,
|
||||
0xF2, 0xD9, 0xEB, 0x8F, 0x6C, 0xAC, 0xA5, 0xFC, 0x07, 0xAB, 0x93, 0x24, 0x94, 0x78, 0x9C, 0xED,
|
||||
0xD8, 0xDB, 0x4D, 0x02, 0x51, 0x10, 0xC6, 0xF1, 0x55, 0x41, 0x45, 0x30, 0xB1, 0x02, 0x62, 0x05,
|
||||
0x60, 0x07, 0xDA, 0x81, 0x76, 0x80, 0x1D, 0x68, 0x07, 0xDA, 0x81, 0x76, 0x80, 0x1D, 0x68, 0x07,
|
||||
0xDA, 0x01, 0x76, 0x40, 0xB4, 0x01, 0x13, 0x45, 0xBC, 0x5F, 0x5E, 0x78, 0xD9, 0xEF, 0xDC, 0xE6,
|
||||
0x9B, 0xD9, 0x27, 0x9D, 0x7D, 0x3D, 0x67, 0x7F, 0xEC, 0x26, 0xFF, 0x84, 0x3D, 0x53, 0x55, 0x92,
|
||||
0xEB, 0xE2, 0x27, 0x75, 0xED, 0x8B, 0xEE, 0x0F, 0xAE, 0xE7, 0x86, 0xC1, 0xED, 0xA4, 0xA7, 0x04,
|
||||
0x6F, 0x9B, 0x06, 0xDF, 0x1A, 0x06, 0x0F, 0xD2, 0x9E, 0x0E, 0x7C, 0x6C, 0x1A, 0xFC, 0x6A, 0x18,
|
||||
0x3C, 0xCF, 0x78, 0x2A, 0x30, 0x1D, 0xA1, 0x0E, 0xCC, 0x44, 0xA8, 0x03, 0x6F, 0x9A, 0x06, 0x33,
|
||||
0x11, 0xAA, 0xC0, 0x20, 0xC2, 0xB9, 0x11, 0xBC, 0x07, 0x6F, 0x34, 0x33, 0x82, 0x9F, 0x00, 0x76,
|
||||
0x8C, 0xE0, 0x29, 0x78, 0x93, 0xCA, 0x08, 0xCE, 0x00, 0x1C, 0x1A, 0xC1, 0xAD, 0x6F, 0x00, 0xDB,
|
||||
0x46, 0x10, 0x23, 0x1C, 0xE3, 0x33, 0xB3, 0xE0, 0x2B, 0x80, 0x3D, 0x23, 0xB8, 0x07, 0xDE, 0xC3,
|
||||
0xB2, 0x11, 0xBC, 0x03, 0x70, 0x54, 0x19, 0xC1, 0x20, 0x42, 0x23, 0x18, 0x46, 0x68, 0x04, 0x31,
|
||||
0xC2, 0x81, 0x11, 0x0C, 0x22, 0x6C, 0x19, 0xC1, 0x2B, 0xF0, 0xCE, 0x22, 0x8F, 0x4D, 0x81, 0x91,
|
||||
0x08, 0x4D, 0x60, 0x10, 0xE1, 0x92, 0x11, 0xC4, 0x08, 0x17, 0xF7, 0xEA, 0xC1, 0x0F, 0x00, 0xD7,
|
||||
0x8D, 0xE0, 0x31, 0x78, 0x93, 0xCA, 0x08, 0x3E, 0x01, 0xD8, 0x37, 0x82, 0xF1, 0x08, 0x0D, 0x60,
|
||||
0x3C, 0x42, 0x03, 0xF8, 0x02, 0x60, 0xCF, 0x08, 0xEE, 0x80, 0xB7, 0x88, 0x50, 0x0F, 0x26, 0x22,
|
||||
0xD4, 0x83, 0x89, 0x08, 0xD5, 0x60, 0x2A, 0x42, 0x35, 0x98, 0x8A, 0x50, 0x0B, 0x26, 0x23, 0xD4,
|
||||
0x82, 0xC9, 0x08, 0xB5, 0x20, 0x46, 0xD8, 0x35, 0x82, 0xE9, 0x08, 0x95, 0x20, 0x1E, 0xC5, 0x6A,
|
||||
0x77, 0x69, 0xC0, 0x77, 0x00, 0xD7, 0x8C, 0xE0, 0x21, 0x78, 0xD7, 0xB5, 0x55, 0x05, 0x98, 0x89,
|
||||
0x50, 0x07, 0xE2, 0x51, 0xAC, 0x55, 0x5B, 0xE5, 0x41, 0x9C, 0x07, 0x9C, 0xD4, 0x97, 0x79, 0x70,
|
||||
0x0E, 0x60, 0xB7, 0xBE, 0x4C, 0x83, 0x78, 0x14, 0xAB, 0x45, 0xA8, 0x01, 0x31, 0xC2, 0x5D, 0x58,
|
||||
0xA7, 0xC1, 0x6C, 0x84, 0x0A, 0x30, 0x1F, 0xA1, 0x02, 0xC4, 0x79, 0x40, 0x1F, 0x37, 0xB0, 0x20,
|
||||
0x46, 0xB8, 0x62, 0x04, 0x0B, 0x11, 0xF2, 0x20, 0xCE, 0x03, 0xBA, 0xC1, 0x0E, 0x0E, 0x2C, 0x45,
|
||||
0x48, 0x83, 0xA5, 0x08, 0x69, 0x10, 0xE7, 0x01, 0x18, 0x21, 0x0B, 0xE2, 0x3C, 0x20, 0x88, 0x90,
|
||||
0x05, 0x8B, 0x11, 0xB2, 0x60, 0x31, 0x42, 0x12, 0xC4, 0xA1, 0x54, 0x18, 0x21, 0x09, 0x62, 0x84,
|
||||
0x1B, 0x46, 0x10, 0x23, 0x9C, 0x86, 0x11, 0x72, 0x20, 0xCE, 0x03, 0x22, 0x11, 0x72, 0x20, 0x46,
|
||||
0xB8, 0x6A, 0x04, 0x31, 0xC2, 0xCB, 0xF8, 0x36, 0x39, 0x88, 0x43, 0xA9, 0x4D, 0x2B, 0x88, 0xF3,
|
||||
0x80, 0x58, 0x84, 0x0C, 0x88, 0xF3, 0x80, 0xA3, 0xC4, 0x3E, 0x31, 0x88, 0xF3, 0x80, 0x68, 0x84,
|
||||
0x04, 0x88, 0x5F, 0xC1, 0x53, 0xD9, 0x0F, 0xA7, 0x41, 0x59, 0x84, 0x04, 0x88, 0xF3, 0x80, 0x78,
|
||||
0x84, 0x72, 0x10, 0xE7, 0x01, 0x89, 0x08, 0xE5, 0x20, 0x1E, 0xC5, 0x12, 0x11, 0xCA, 0x41, 0x8C,
|
||||
0x70, 0xD9, 0x08, 0x4A, 0x23, 0x14, 0x83, 0xD2, 0x08, 0xA5, 0xA0, 0x38, 0x42, 0x29, 0x88, 0x47,
|
||||
0xB1, 0xA1, 0x15, 0x14, 0x47, 0x28, 0x04, 0xE5, 0x11, 0x0A, 0x41, 0x79, 0x84, 0x42, 0x10, 0xE7,
|
||||
0x01, 0xE9, 0x08, 0x65, 0x20, 0xCE, 0x03, 0x46, 0x39, 0x4F, 0x02, 0xE2, 0x51, 0xAC, 0x63, 0x04,
|
||||
0x99, 0x08, 0x45, 0x20, 0x13, 0xA1, 0x08, 0xC4, 0x79, 0x40, 0xDB, 0x08, 0xE2, 0x3C, 0x60, 0x9C,
|
||||
0xF7, 0xCA, 0x20, 0x15, 0xA1, 0x04, 0xA4, 0x22, 0x14, 0x80, 0x5C, 0x84, 0x02, 0x90, 0x8B, 0xB0,
|
||||
0x0C, 0x62, 0x84, 0x93, 0x98, 0xC1, 0x80, 0x64, 0x84, 0x65, 0x10, 0xDF, 0xB8, 0x10, 0x61, 0x19,
|
||||
0x84, 0x3F, 0x93, 0x52, 0x84, 0x34, 0xD8, 0x8B, 0x11, 0x16, 0xB0, 0x14, 0x21, 0x0B, 0x16, 0x23,
|
||||
0x64, 0xC1, 0x62, 0x84, 0x24, 0x58, 0x8E, 0x90, 0x04, 0x07, 0x4D, 0x83, 0xE5, 0x08, 0x39, 0x50,
|
||||
0xF4, 0xC6, 0x7F, 0x0B, 0x6C, 0xE2, 0xEA, 0x39, 0xE8, 0xA0, 0x83, 0x0E, 0x3A, 0xE8, 0xA0, 0x83,
|
||||
0x0E, 0xCA, 0x41, 0xD1, 0xE7, 0x0C, 0xF3, 0x6D, 0xE3, 0xA0, 0x83, 0x0E, 0x3A, 0xE8, 0xA0, 0x83,
|
||||
0x0E, 0x3A, 0xE8, 0xA0, 0x83, 0x0E, 0x3A, 0xE8, 0xA0, 0x83, 0x0E, 0x3A, 0xE8, 0xE0, 0x3F, 0x01,
|
||||
0x7F, 0x01, 0x5D, 0x59, 0xFC, 0xB5, 0x78, 0x9C, 0xED, 0x9A, 0x4B, 0x6C, 0x8C, 0x51, 0x14, 0xC7,
|
||||
0x6F, 0x0D, 0x9D, 0x76, 0xBC, 0xC6, 0x42, 0x90, 0x78, 0xCC, 0x4E, 0x88, 0x68, 0x23, 0xD2, 0x78,
|
||||
0x24, 0x88, 0x85, 0xA5, 0x56, 0x2C, 0xD8, 0x95, 0x95, 0xC4, 0x06, 0x09, 0x4B, 0xA9, 0x44, 0xC2,
|
||||
0x54, 0x48, 0x91, 0x10, 0x91, 0xD0, 0x86, 0x58, 0x58, 0x34, 0xC4, 0x33, 0x84, 0xD4, 0xC6, 0x46,
|
||||
0xC2, 0x10, 0x56, 0x82, 0x11, 0x42, 0x6C, 0xF8, 0x3C, 0xEA, 0x51, 0xDA, 0x5E, 0xF3, 0xB5, 0xD3,
|
||||
0x9A, 0xF3, 0xB8, 0xF7, 0x9E, 0xB9, 0xBE, 0x85, 0xC4, 0xFD, 0xEF, 0xCC, 0x77, 0xEF, 0xAF, 0xF7,
|
||||
0xDC, 0xC7, 0xB9, 0xE7, 0xDC, 0x43, 0x29, 0xA5, 0xF4, 0xDF, 0xAA, 0x43, 0x0D, 0x29, 0x70, 0x02,
|
||||
0x27, 0x70, 0x02, 0x27, 0x70, 0x02, 0x27, 0x70, 0x92, 0xE6, 0xD4, 0x29, 0x5F, 0x05, 0x4E, 0xE0,
|
||||
0x04, 0x4E, 0xE0, 0x04, 0x4E, 0xE0, 0x04, 0x4E, 0xE0, 0x04, 0x4E, 0xE0, 0x04, 0xCE, 0xEA, 0x7D,
|
||||
0xF7, 0x9E, 0x0F, 0xEA, 0xE8, 0xC5, 0xAD, 0xF6, 0x35, 0x63, 0xBC, 0x39, 0xB9, 0xE3, 0xFD, 0x95,
|
||||
0xDF, 0xBA, 0x9B, 0xBC, 0x38, 0xD9, 0x63, 0x83, 0x1A, 0xA9, 0x67, 0x6E, 0xF5, 0x9C, 0xCD, 0xBF,
|
||||
0x30, 0x25, 0xD6, 0x21, 0xA3, 0x75, 0x06, 0xCE, 0x59, 0x8E, 0x52, 0x52, 0x71, 0x5A, 0x55, 0x9C,
|
||||
0xBB, 0x06, 0x4C, 0x49, 0xF3, 0xAA, 0xE0, 0x3C, 0x31, 0x63, 0xB4, 0x5E, 0x2E, 0xE6, 0x5C, 0xB2,
|
||||
0x61, 0xB4, 0x9E, 0x2F, 0xE4, 0x6C, 0xB2, 0x63, 0xB4, 0x9E, 0x21, 0xE3, 0xFC, 0x74, 0x71, 0xA2,
|
||||
0x5A, 0x09, 0xE7, 0x91, 0x0B, 0xA3, 0x75, 0x81, 0x2E, 0x3F, 0x6C, 0x70, 0x30, 0x9F, 0xCF, 0x0F,
|
||||
0xB8, 0x39, 0xBA, 0xD5, 0xC1, 0x11, 0x2B, 0x93, 0x10, 0xA7, 0x88, 0x2D, 0xF3, 0xE4, 0xE8, 0xB5,
|
||||
0x09, 0x71, 0x74, 0x6D, 0x42, 0x9C, 0xB6, 0x84, 0x38, 0x3A, 0x9D, 0x10, 0xA7, 0x23, 0x21, 0x0E,
|
||||
0x9C, 0xA1, 0xBF, 0xE0, 0xB4, 0x26, 0xC4, 0xD1, 0xA9, 0x84, 0x38, 0xB3, 0x13, 0xE2, 0x14, 0x12,
|
||||
0xE2, 0xE8, 0x7A, 0x21, 0xE7, 0xFE, 0xC9, 0xF6, 0xFC, 0x89, 0xF3, 0xCF, 0x8C, 0xDF, 0x9B, 0x25,
|
||||
0x9C, 0x53, 0x4D, 0x35, 0xE5, 0x36, 0xD9, 0x9D, 0x4F, 0xF9, 0x26, 0x51, 0x8D, 0x93, 0x73, 0x7A,
|
||||
0x2A, 0xD8, 0x66, 0xEB, 0x78, 0x27, 0x99, 0x71, 0x71, 0x96, 0x2A, 0xAC, 0xAB, 0x5C, 0xB3, 0x56,
|
||||
0x3B, 0xA7, 0xC8, 0x38, 0x60, 0x75, 0x94, 0x33, 0xCC, 0xCA, 0x29, 0x8E, 0x63, 0x30, 0x4A, 0x1D,
|
||||
0x61, 0x9A, 0xD6, 0x59, 0x38, 0xDC, 0x75, 0x30, 0x24, 0xE6, 0x5E, 0x6B, 0xB0, 0x70, 0xEA, 0x0D,
|
||||
0x18, 0xA5, 0xBE, 0x91, 0xB6, 0x17, 0xCC, 0x1C, 0xEC, 0x31, 0x2B, 0x94, 0xED, 0x27, 0xAD, 0xC7,
|
||||
0x98, 0x38, 0x3D, 0x35, 0x66, 0x8E, 0x3A, 0x4C, 0x9A, 0x67, 0x4C, 0x1C, 0xB3, 0x55, 0xB1, 0xBE,
|
||||
0x9B, 0x26, 0x08, 0xFF, 0xDE, 0x61, 0xC5, 0xD0, 0xBB, 0xBF, 0xD3, 0xC0, 0x49, 0x5B, 0x31, 0xCC,
|
||||
0x54, 0xF3, 0x1C, 0xC7, 0x70, 0x94, 0xDA, 0x83, 0x39, 0xB5, 0x2C, 0x87, 0xDC, 0xB7, 0x44, 0xF8,
|
||||
0xA0, 0x4D, 0xE4, 0x38, 0x05, 0x3B, 0x23, 0xD6, 0x43, 0xC4, 0x69, 0xE0, 0x38, 0x0D, 0x76, 0x46,
|
||||
0xAC, 0x46, 0x7E, 0x26, 0x58, 0x63, 0xAD, 0x42, 0x4B, 0x5F, 0x64, 0x38, 0x3D, 0x02, 0x0C, 0x31,
|
||||
0x2C, 0x45, 0x39, 0x02, 0xB3, 0x94, 0x5A, 0x85, 0x38, 0x69, 0xCA, 0x91, 0xA5, 0x3B, 0x28, 0xD2,
|
||||
0x1F, 0x3F, 0xF4, 0x63, 0xBE, 0x52, 0xB6, 0xA3, 0xF5, 0x47, 0x5F, 0x20, 0x67, 0xB2, 0xA8, 0x13,
|
||||
0xA3, 0x3B, 0x90, 0xD3, 0xEC, 0xEE, 0xC1, 0xAB, 0x05, 0x72, 0x9C, 0x47, 0xC0, 0x28, 0x98, 0x50,
|
||||
0x89, 0x16, 0x99, 0x55, 0x1F, 0xE0, 0x44, 0xEE, 0x0E, 0x06, 0xA1, 0x89, 0x76, 0x64, 0x9C, 0x66,
|
||||
0xBD, 0x84, 0x1C, 0xFE, 0x76, 0x11, 0xA8, 0x8B, 0xDB, 0x88, 0x1E, 0x42, 0x4E, 0xD1, 0xEE, 0x89,
|
||||
0x2D, 0xCA, 0x71, 0x1B, 0xDA, 0x47, 0x90, 0x33, 0xC9, 0x9B, 0x03, 0xAF, 0x31, 0xEF, 0x83, 0x81,
|
||||
0x7C, 0xEB, 0x1C, 0x6F, 0x0E, 0x74, 0x65, 0x22, 0x6F, 0xC3, 0xEA, 0x2B, 0xE0, 0xAC, 0xF4, 0xE6,
|
||||
0xF4, 0x02, 0x0E, 0x4D, 0x0E, 0xA5, 0xFA, 0x0C, 0x38, 0xDB, 0xBC, 0x39, 0x9F, 0xFE, 0x31, 0xCE,
|
||||
0x47, 0xC0, 0x69, 0x73, 0x77, 0xF8, 0xCF, 0x38, 0xFF, 0xDA, 0x7A, 0x41, 0x07, 0xED, 0xBF, 0x9F,
|
||||
0xE1, 0xB9, 0xF0, 0xBE, 0x08, 0x13, 0x3B, 0xA7, 0x3F, 0x00, 0xC7, 0xDF, 0x6F, 0x40, 0x3F, 0xE6,
|
||||
0xEF, 0x0F, 0x07, 0x12, 0xE2, 0x00, 0xCC, 0x48, 0xC4, 0x5A, 0xBD, 0x50, 0xA8, 0x99, 0xD9, 0x0B,
|
||||
0x82, 0x28, 0xF9, 0xDB, 0xF3, 0x76, 0xC8, 0xA9, 0x83, 0xCB, 0x27, 0xDF, 0x96, 0x17, 0x21, 0x67,
|
||||
0x1C, 0x74, 0x8F, 0x82, 0x18, 0xBC, 0x2C, 0x78, 0x4C, 0x75, 0x0A, 0xFD, 0x5B, 0x1C, 0x7F, 0xC0,
|
||||
0xED, 0xAC, 0x71, 0xA0, 0x27, 0x9E, 0x20, 0xB8, 0x7D, 0x0A, 0x38, 0xBB, 0x13, 0xDF, 0x8B, 0xB0,
|
||||
0x5B, 0x27, 0x8E, 0x3F, 0xA4, 0xFE, 0x08, 0x75, 0x6B, 0xC5, 0xFB, 0x40, 0x1A, 0xE8, 0xA1, 0xE9,
|
||||
0x98, 0x83, 0x03, 0x4F, 0x69, 0x60, 0x85, 0xA6, 0x79, 0x22, 0xC9, 0xC9, 0x84, 0x13, 0x84, 0x92,
|
||||
0xEF, 0x3A, 0x92, 0x6C, 0x76, 0xBA, 0x19, 0x8A, 0xE6, 0x29, 0x29, 0xEC, 0x67, 0xE1, 0xC3, 0x99,
|
||||
0x51, 0x28, 0x6F, 0x8A, 0xE8, 0x4F, 0xB2, 0x93, 0xCB, 0x18, 0x81, 0x93, 0x5F, 0x49, 0xAA, 0x90,
|
||||
0x45, 0x7D, 0x62, 0xAF, 0x8A, 0x02, 0x4F, 0xAD, 0xC7, 0xBA, 0x39, 0xE8, 0x90, 0x0E, 0xDB, 0x80,
|
||||
0xDF, 0x3D, 0x66, 0xBB, 0x28, 0xF4, 0x65, 0x22, 0xCD, 0xD8, 0x2A, 0x38, 0xF3, 0x78, 0xB5, 0xF4,
|
||||
0x50, 0xEE, 0x87, 0x17, 0xCC, 0x1D, 0x53, 0xBF, 0x42, 0x1D, 0x86, 0x1F, 0x80, 0xBA, 0x30, 0xE7,
|
||||
0x82, 0x03, 0x93, 0xC5, 0xC5, 0xAC, 0x06, 0x7E, 0x94, 0xAE, 0x87, 0x09, 0x52, 0xDC, 0x28, 0x1B,
|
||||
0x40, 0x1E, 0x98, 0xEC, 0xD9, 0x5D, 0x8E, 0xD4, 0xD6, 0xCA, 0x5B, 0xB7, 0x17, 0xFF, 0xAE, 0x67,
|
||||
0xDA, 0x38, 0xAF, 0x4D, 0x7F, 0xF6, 0x0E, 0xE1, 0x44, 0x96, 0xC3, 0x41, 0x2B, 0x48, 0x23, 0x77,
|
||||
0x72, 0x0B, 0xF9, 0x62, 0x71, 0x67, 0x59, 0x5A, 0xEB, 0x1B, 0x9D, 0x4E, 0xFA, 0x02, 0xA7, 0x17,
|
||||
0x98, 0x38, 0x6F, 0x68, 0xDB, 0xD1, 0x97, 0x83, 0x2F, 0xF4, 0x1B, 0x5B, 0xDF, 0x2A, 0xE9, 0xB2,
|
||||
0x6D, 0xEC, 0xF4, 0x25, 0xAF, 0xA4, 0xE9, 0x1C, 0xE6, 0x0C, 0xD3, 0x70, 0xC2, 0x1F, 0x9B, 0xC9,
|
||||
0x4A, 0xC6, 0x5A, 0x46, 0x31, 0x57, 0xB8, 0x76, 0x15, 0x6B, 0xF2, 0x95, 0xFB, 0x4E, 0x0A, 0xA5,
|
||||
0x8D, 0xEF, 0xB8, 0x56, 0x95, 0x7E, 0x06, 0xFB, 0x81, 0xB2, 0xA2, 0xAD, 0x15, 0xA4, 0xDC, 0x39,
|
||||
0x76, 0xD4, 0x15, 0x66, 0x99, 0x0C, 0x8B, 0xD5, 0xBD, 0x65, 0xF1, 0x94, 0xD2, 0xF7, 0x45, 0xBB,
|
||||
0x6E, 0x98, 0x9A, 0x80, 0x41, 0x73, 0x2B, 0x26, 0x13, 0x0C, 0x78, 0xB7, 0xBB, 0x3B, 0x18, 0x84,
|
||||
0x02, 0x02, 0xB6, 0x22, 0x2D, 0x10, 0x3E, 0xD2, 0x82, 0x42, 0x27, 0x2B, 0x7C, 0xBB, 0x64, 0x25,
|
||||
0x95, 0x4E, 0xAA, 0x88, 0xBC, 0xA6, 0x61, 0x5F, 0x29, 0xD3, 0x42, 0x8C, 0x61, 0xBC, 0x93, 0x64,
|
||||
0x38, 0x4C, 0xF8, 0xE6, 0xB3, 0xF4, 0x2B, 0x28, 0xC6, 0x67, 0x40, 0xDC, 0x70, 0x7C, 0x96, 0x6C,
|
||||
0x16, 0x87, 0xA9, 0x7E, 0x0F, 0x15, 0x0C, 0x4F, 0x9F, 0xAC, 0x1B, 0xB2, 0xC8, 0xF8, 0x96, 0xC5,
|
||||
0xBB, 0x0F, 0x93, 0xCC, 0xB1, 0x7F, 0x8E, 0x71, 0xD4, 0x46, 0x15, 0x2D, 0x77, 0x0A, 0x29, 0x04,
|
||||
0xF8, 0x58, 0x15, 0xEB, 0xB1, 0x18, 0x63, 0xA9, 0x00, 0xC5, 0x7A, 0x2B, 0xC4, 0xB8, 0xC2, 0xD1,
|
||||
0x6C, 0x9F, 0x9B, 0x51, 0x52, 0xC1, 0x19, 0x8D, 0xE6, 0x9C, 0xFF, 0xE3, 0x42, 0x1B, 0x8B, 0x75,
|
||||
0x10, 0xE4, 0x1E, 0x91, 0xB1, 0x58, 0x07, 0x4D, 0xFB, 0xE1, 0xC0, 0xB0, 0x15, 0x48, 0x4E, 0x6C,
|
||||
0x79, 0x73, 0x54, 0x3D, 0x82, 0x80, 0xB6, 0xAC, 0x1D, 0x96, 0x0D, 0xB9, 0x5B, 0x56, 0x50, 0x18,
|
||||
0x56, 0xEE, 0x9A, 0xC9, 0xA6, 0x25, 0x55, 0x50, 0x62, 0x35, 0x5E, 0xE7, 0x26, 0x78, 0x6B, 0x35,
|
||||
0x83, 0x19, 0x19, 0xD3, 0x2E, 0x54, 0x99, 0x7E, 0xB0, 0xD1, 0x83, 0x32, 0x8C, 0x5A, 0xBF, 0xFF,
|
||||
0xE6, 0xB3, 0xF7, 0x83, 0x3A, 0xFA, 0x70, 0xFB, 0xC0, 0x06, 0xFB, 0xD6, 0xFB, 0x0D, 0xFD, 0x98,
|
||||
0x52, 0x48, 0x78, 0x9C, 0xDD, 0x5A, 0x4D, 0x6F, 0x4D, 0x51, 0x14, 0xBD, 0x4F, 0x4B, 0xFB, 0xA8,
|
||||
0xB6, 0x66, 0x12, 0xA1, 0x4D, 0x8C, 0x44, 0x68, 0x25, 0x44, 0x22, 0x68, 0x13, 0x49, 0x43, 0x22,
|
||||
0xD1, 0x18, 0x08, 0x42, 0x98, 0x88, 0x81, 0x50, 0x06, 0x65, 0x58, 0x53, 0x9D, 0x30, 0x21, 0x46,
|
||||
0xEA, 0x07, 0x48, 0x4A, 0x22, 0x62, 0x22, 0x35, 0x24, 0x06, 0x25, 0xE6, 0x1E, 0x89, 0x88, 0x01,
|
||||
0x9E, 0xEF, 0x6F, 0xAE, 0x7B, 0xDF, 0xBB, 0x7D, 0xEF, 0x9E, 0xB5, 0xCF, 0xB9, 0x67, 0x9F, 0xE5,
|
||||
0x99, 0xD8, 0xB3, 0xF7, 0xB5, 0xDE, 0xF9, 0x58, 0x6B, 0x9F, 0xBD, 0xD7, 0xB9, 0x51, 0xA4, 0x8A,
|
||||
0xAB, 0x31, 0xC4, 0x3C, 0xDD, 0xEF, 0x64, 0x7C, 0x06, 0xA0, 0x43, 0x2C, 0x50, 0x3F, 0x0E, 0xA9,
|
||||
0xCC, 0x22, 0x3D, 0x04, 0xA0, 0x59, 0x16, 0x28, 0xFA, 0x0E, 0x48, 0x2B, 0x58, 0xA0, 0xC3, 0x38,
|
||||
0xB9, 0x76, 0x16, 0xE9, 0x03, 0x00, 0x4D, 0xB0, 0x40, 0xD1, 0x2F, 0x40, 0x5A, 0xC4, 0x02, 0x21,
|
||||
0x99, 0xAA, 0x25, 0x16, 0x09, 0xC9, 0x34, 0xC4, 0x02, 0x0D, 0xE2, 0x7A, 0x2F, 0x60, 0x91, 0x1E,
|
||||
0x01, 0xD0, 0x34, 0x0B, 0x14, 0xFD, 0x00, 0xA4, 0xC5, 0x2C, 0xD0, 0x49, 0x9C, 0x1C, 0x2D, 0x5E,
|
||||
0x24, 0x13, 0x2D, 0xDE, 0xDE, 0xDF, 0x80, 0x44, 0x8B, 0xF7, 0x3A, 0x00, 0xF1, 0xE2, 0xFD, 0x02,
|
||||
0x48, 0xB4, 0x78, 0x05, 0x99, 0x68, 0xF1, 0x3E, 0x03, 0x20, 0x5E, 0xBC, 0x48, 0x26, 0x5A, 0xBC,
|
||||
0x48, 0x26, 0x5E, 0xBC, 0x1F, 0x01, 0x89, 0x16, 0xAF, 0x20, 0x13, 0x2D, 0x5E, 0x24, 0x13, 0x2F,
|
||||
0xDE, 0xAF, 0x80, 0x44, 0x8B, 0x77, 0x18, 0xC9, 0x44, 0x8B, 0x17, 0xC9, 0x44, 0x8B, 0x37, 0xFA,
|
||||
0x09, 0x48, 0xB4, 0x78, 0xCF, 0x02, 0x10, 0x2F, 0x5E, 0x24, 0x13, 0x2D, 0x5E, 0x41, 0x26, 0x5A,
|
||||
0xBC, 0x77, 0x01, 0x88, 0x17, 0x2F, 0x92, 0x89, 0x16, 0xEF, 0x28, 0x00, 0xF1, 0xE2, 0x7D, 0x0F,
|
||||
0x48, 0xB4, 0x78, 0x05, 0x99, 0x68, 0xF1, 0x5E, 0x00, 0x20, 0x5E, 0xBC, 0x9F, 0x00, 0x89, 0x16,
|
||||
0xAF, 0xA8, 0x51, 0x69, 0xF1, 0x62, 0x8D, 0xCA, 0x8B, 0xF7, 0x1B, 0x20, 0xD1, 0xE2, 0x45, 0x32,
|
||||
0xF1, 0xE2, 0x45, 0x32, 0xD1, 0xE2, 0x15, 0x35, 0x2A, 0x2D, 0x5E, 0xAC, 0x51, 0x79, 0xF1, 0x62,
|
||||
0x8D, 0x4A, 0x8B, 0x17, 0xC9, 0xC4, 0x8B, 0x17, 0xC9, 0xC4, 0x8B, 0x17, 0x1B, 0x1E, 0x5A, 0xBC,
|
||||
0xD8, 0xF0, 0xF0, 0xE2, 0xC5, 0x1A, 0x95, 0x16, 0xAF, 0x20, 0x13, 0x2D, 0x5E, 0x24, 0x13, 0x2F,
|
||||
0x5E, 0x24, 0x53, 0x27, 0x0B, 0x84, 0x35, 0x2A, 0x2F, 0x5E, 0x6C, 0x78, 0x78, 0xF1, 0x22, 0x99,
|
||||
0x68, 0xF1, 0x62, 0x8D, 0xCA, 0x8B, 0x17, 0xC9, 0x44, 0x8B, 0x17, 0xCB, 0x8A, 0x0A, 0x2D, 0x5E,
|
||||
0xAC, 0x51, 0x79, 0xF1, 0x62, 0xC3, 0x43, 0x8B, 0x17, 0xC9, 0xC4, 0x8B, 0x17, 0x6B, 0x54, 0x5E,
|
||||
0xBC, 0xD8, 0xF0, 0xD0, 0xE2, 0x45, 0x32, 0xF1, 0xE2, 0xFD, 0x77, 0x35, 0x2A, 0xCD, 0x26, 0x24,
|
||||
0x53, 0x1C, 0x77, 0xA5, 0x6F, 0xAF, 0x3B, 0x72, 0xFA, 0xCC, 0xD1, 0x3D, 0xEB, 0x43, 0xD6, 0x0C,
|
||||
0xC9, 0x94, 0xA6, 0x94, 0xDD, 0xB7, 0x1B, 0x29, 0x74, 0x76, 0x72, 0x83, 0x12, 0x48, 0x74, 0xCF,
|
||||
0x49, 0x40, 0x26, 0x9E, 0xDD, 0xA7, 0x9A, 0x2F, 0x92, 0xC9, 0x1A, 0x95, 0xED, 0x0A, 0x24, 0xCC,
|
||||
0x4C, 0x8E, 0xB8, 0xD2, 0xE6, 0x03, 0x12, 0xBE, 0x9E, 0x2B, 0xAA, 0x4B, 0x3D, 0x48, 0x58, 0x33,
|
||||
0x15, 0xC4, 0xA6, 0x62, 0x24, 0x2C, 0xC0, 0x8B, 0x62, 0x67, 0x11, 0x90, 0xF0, 0x99, 0x68, 0x28,
|
||||
0x4C, 0xBB, 0x9E, 0x58, 0xED, 0x46, 0xC2, 0x33, 0xDC, 0x17, 0xCE, 0x03, 0x35, 0x6C, 0x72, 0x49,
|
||||
0x54, 0x5D, 0xC7, 0x57, 0xC0, 0xCE, 0x65, 0x31, 0xE5, 0x40, 0x0A, 0xD9, 0xB9, 0x2C, 0xB6, 0xB4,
|
||||
0x66, 0x72, 0x69, 0x74, 0xD8, 0x90, 0xDE, 0x31, 0x48, 0xD6, 0xF3, 0x02, 0x13, 0xB8, 0x2E, 0x96,
|
||||
0x4B, 0x20, 0xEC, 0x53, 0x94, 0x51, 0x95, 0xD9, 0xEF, 0x29, 0x87, 0x14, 0x6F, 0x15, 0x48, 0x32,
|
||||
0x5B, 0x2A, 0x03, 0x49, 0xD5, 0xCB, 0x02, 0x89, 0xBA, 0x41, 0x5C, 0xF1, 0xE8, 0x03, 0xD2, 0x5E,
|
||||
0xA0, 0x7A, 0xF3, 0xB1, 0xD6, 0x44, 0x22, 0x08, 0x3E, 0x17, 0xE6, 0x91, 0x28, 0x5C, 0xB4, 0x90,
|
||||
0xE8, 0xCA, 0x23, 0x61, 0xEF, 0x14, 0x14, 0x06, 0xD1, 0xD1, 0x65, 0x68, 0x46, 0x65, 0x72, 0x64,
|
||||
0x65, 0x32, 0xFC, 0x25, 0xDB, 0xC6, 0xEF, 0x3B, 0xBF, 0x93, 0x2F, 0xD6, 0x5C, 0x49, 0x6E, 0x66,
|
||||
0x63, 0xEE, 0x4B, 0xFD, 0x17, 0x1D, 0x5F, 0x1B, 0x68, 0x7E, 0xC7, 0x21, 0x95, 0xEA, 0x0E, 0x64,
|
||||
0xDD, 0x2D, 0xFB, 0xB8, 0x7D, 0xCB, 0x34, 0x63, 0xC9, 0x89, 0xA7, 0xAC, 0xC3, 0x6A, 0xE6, 0x61,
|
||||
0xEB, 0x32, 0x4D, 0x59, 0x4B, 0x93, 0x61, 0x1B, 0x5F, 0x9A, 0x3C, 0xB7, 0x7D, 0x3A, 0xE5, 0xA8,
|
||||
0x24, 0x6C, 0x50, 0x8D, 0x1E, 0xC9, 0x56, 0xA2, 0xCC, 0x38, 0x8B, 0xA5, 0x51, 0xAC, 0xD6, 0xE2,
|
||||
0x66, 0xEE, 0xB4, 0x88, 0xAE, 0x3A, 0xDF, 0x05, 0x24, 0x2D, 0xAE, 0x24, 0xFA, 0xB2, 0x8F, 0x2C,
|
||||
0x89, 0x77, 0x99, 0x1B, 0x28, 0x8A, 0x9E, 0xCB, 0xA5, 0xC8, 0x3E, 0x41, 0xB7, 0xD1, 0xD7, 0x3F,
|
||||
0xF5, 0xCA, 0x4C, 0x9D, 0xAD, 0x85, 0x9C, 0xB8, 0xA7, 0xA5, 0x43, 0x3F, 0x38, 0x8E, 0x17, 0xD6,
|
||||
0xDE, 0x97, 0xF2, 0x5D, 0x5B, 0x0C, 0x24, 0x3B, 0xE5, 0x8C, 0xE6, 0x62, 0xC1, 0x2D, 0x69, 0x1E,
|
||||
0x42, 0x88, 0xA2, 0xBE, 0x50, 0x62, 0xC1, 0xBD, 0x43, 0xB2, 0x70, 0xB9, 0x64, 0x1D, 0xAA, 0xA2,
|
||||
0xEE, 0x16, 0x27, 0x76, 0x8D, 0x51, 0xB8, 0x13, 0xBB, 0xFC, 0x40, 0xD2, 0x10, 0x4C, 0x7B, 0x2E,
|
||||
0x71, 0xAC, 0x58, 0x0F, 0x7B, 0x0C, 0x74, 0xBC, 0x53, 0xE9, 0xE1, 0xEA, 0xCD, 0x68, 0x80, 0x44,
|
||||
0x87, 0x93, 0x2E, 0x39, 0x6E, 0x9D, 0xB2, 0x7D, 0xC2, 0xD5, 0x8D, 0xE4, 0x39, 0x5E, 0xA0, 0xB8,
|
||||
0x7C, 0x60, 0xB3, 0xD4, 0x2E, 0x8E, 0x3A, 0xDD, 0xE4, 0xA4, 0x95, 0x57, 0x16, 0x15, 0xC1, 0x80,
|
||||
0x1F, 0xA4, 0x1E, 0xB0, 0x7B, 0xDD, 0x82, 0x04, 0x0B, 0xB5, 0x48, 0x40, 0xE8, 0x64, 0x04, 0x30,
|
||||
0x4A, 0x75, 0x3B, 0x08, 0x69, 0x6A, 0x0C, 0x13, 0xA6, 0x76, 0x99, 0xC4, 0x42, 0x4D, 0x63, 0x03,
|
||||
0xA5, 0x22, 0x78, 0x3D, 0xCC, 0x65, 0xA9, 0xE2, 0x20, 0xBB, 0xF5, 0x48, 0xA0, 0xE2, 0x12, 0xD0,
|
||||
0x3E, 0xC0, 0x93, 0x7B, 0x6B, 0xFE, 0xB2, 0x1D, 0x5F, 0xEB, 0x91, 0x80, 0x9B, 0x1D, 0xB0, 0x99,
|
||||
0x7A, 0x20, 0x5C, 0xE1, 0xB2, 0xE9, 0x5A, 0xE8, 0xB7, 0x4E, 0x1C, 0x93, 0x5D, 0xA6, 0x12, 0x83,
|
||||
0x4C, 0x39, 0x13, 0xA9, 0xDB, 0x3C, 0xA2, 0x02, 0x48, 0x80, 0x45, 0x40, 0x8F, 0x29, 0x9F, 0x3E,
|
||||
0xFF, 0xEF, 0x9B, 0x01, 0x3F, 0x35, 0xF9, 0xD5, 0x13, 0x82, 0x64, 0x6A, 0x7F, 0xC8, 0x1C, 0x62,
|
||||
0x90, 0x05, 0x66, 0x52, 0x73, 0x97, 0x59, 0x5A, 0x05, 0x99, 0x97, 0x66, 0x66, 0x3B, 0x64, 0xE6,
|
||||
0x63, 0x75, 0x4E, 0x49, 0xC3, 0xEC, 0x77, 0xC7, 0x8C, 0x57, 0x61, 0xB7, 0x4F, 0xEF, 0x8A, 0x90,
|
||||
0x82, 0xAC, 0x70, 0x53, 0x68, 0x13, 0xFF, 0x37, 0x92, 0xB9, 0x77, 0x7F, 0xB3, 0xE2, 0xAD, 0x63,
|
||||
0x41, 0xEB, 0x98, 0xD9, 0x3A, 0xB5, 0xB4, 0x4E, 0xC1, 0x66, 0x6A, 0x50, 0x9F, 0xE5, 0x69, 0x40,
|
||||
0x56, 0x69, 0x5D, 0xA6, 0x33, 0xB3, 0xEF, 0xF9, 0x10, 0x24, 0xE3, 0x97, 0x71, 0x77, 0xEB, 0x4E,
|
||||
0x04, 0xFE, 0x94, 0x82, 0xFA, 0xB7, 0xCC, 0x9F, 0x9C, 0x70, 0x7A, 0x2F, 0x80, 0xD7, 0x01, 0x72,
|
||||
0x81, 0xD9, 0xB4, 0xF3, 0x15, 0x06, 0xD4, 0xAC, 0x25, 0x28, 0xA2, 0x03, 0xAE, 0x20, 0x4C, 0x12,
|
||||
0x54, 0xB0, 0xA0, 0xD2, 0x5F, 0xFB, 0xC1, 0xD6, 0x4D, 0x8B, 0xEE, 0xCE, 0xEB, 0x7D, 0xCF, 0x05,
|
||||
0xD4, 0xF1, 0x63, 0xC2, 0x5E, 0x57, 0x67, 0x03, 0x70, 0x52, 0x07, 0x44, 0x69, 0xA6, 0xBE, 0x1B,
|
||||
0x83, 0x11, 0x2C, 0x16, 0x9B, 0xA9, 0x5D, 0x28, 0xB4, 0x06, 0x3A, 0x65, 0xDB, 0xA0, 0xBC, 0x66,
|
||||
0xC3, 0x66, 0xAA, 0x4D, 0x36, 0x7D, 0xCA, 0xC4, 0x02, 0xAD, 0x45, 0x35, 0x92, 0xFD, 0x9D, 0x6E,
|
||||
0x7A, 0xD8, 0xB6, 0xD4, 0x1A, 0x61, 0xEC, 0x39, 0x55, 0x27, 0x95, 0xF5, 0x09, 0x04, 0xBC, 0x1F,
|
||||
0x53, 0xD1, 0x1C, 0xAF, 0x66, 0x6A, 0x66, 0x9D, 0x30, 0x6A, 0x15, 0xE4, 0x14, 0xDE, 0x43, 0x6D,
|
||||
0x9F, 0x44, 0x9F, 0xAD, 0xE8, 0xF2, 0x45, 0x3F, 0x5F, 0x7B, 0x57, 0xB4, 0xD4, 0x7E, 0xE7, 0x41,
|
||||
0xDC, 0x16, 0x65, 0x59, 0x5B, 0x38, 0x34, 0xD2, 0x60, 0xF6, 0x0D, 0x29, 0xAB, 0x74, 0xA5, 0x6B,
|
||||
0xE4, 0xC9, 0x9C, 0xD2, 0x81, 0x2A, 0xBB, 0x3E, 0x08, 0x76, 0x8D, 0x32, 0x2B, 0x4E, 0xDC, 0x6E,
|
||||
0x06, 0x3B, 0x59, 0x8D, 0x7F, 0x16, 0xD3, 0x0E, 0x75, 0xD7, 0x1A, 0x39, 0xDB, 0xE2, 0x67, 0x86,
|
||||
0x39, 0x7E, 0x8D, 0xFF, 0xB5, 0x59, 0xD1, 0x21, 0x2E, 0x64, 0xEE, 0xBC, 0x45, 0xE7, 0xA6, 0x06,
|
||||
0xA5, 0x77, 0x46, 0x73, 0xE9, 0xC3, 0x6A, 0xD7, 0xEA, 0xDD, 0xDA, 0x5C, 0x4A, 0xB3, 0x3B, 0xED,
|
||||
0x5A, 0x07, 0xD9, 0x28, 0x26, 0xA4, 0x11, 0x59, 0xFF, 0x8E, 0xCA, 0xD5, 0x36, 0xDC, 0x21, 0x79,
|
||||
0xCD, 0x9D, 0x85, 0xC6, 0x69, 0x37, 0x56, 0xC1, 0x42, 0x4E, 0x75, 0x80, 0x20, 0xFE, 0xE2, 0x9A,
|
||||
0x04, 0x4E, 0x48, 0xF2, 0x86, 0x2B, 0xB6, 0xE4, 0x7D, 0xFA, 0x62, 0x4A, 0x5C, 0xBC, 0x49, 0x2F,
|
||||
0x57, 0x17, 0x96, 0xB4, 0x68, 0xE3, 0xB9, 0x22, 0x2C, 0xA9, 0x9A, 0x1B, 0x94, 0x35, 0x53, 0x3B,
|
||||
0xD8, 0x19, 0x3C, 0xA4, 0x80, 0x87, 0x02, 0x72, 0xE1, 0x78, 0xE2, 0x03, 0x8F, 0x50, 0x45, 0x38,
|
||||
0xAA, 0xAD, 0xC1, 0x60, 0xA2, 0xBB, 0x6E, 0xA9, 0xA3, 0x1B, 0xA1, 0x48, 0xEE, 0x0A, 0x29, 0x90,
|
||||
0x9E, 0x6B, 0x9C, 0x40, 0xD1, 0x60, 0xD0, 0x93, 0x01, 0xCE, 0xB9, 0xA5, 0x11, 0x42, 0x2A, 0xE7,
|
||||
0x53, 0x01, 0xF5, 0x78, 0xAC, 0x47, 0xF2, 0x35, 0x26, 0x2F, 0xB4, 0x40, 0x9B, 0x3D, 0x40, 0x51,
|
||||
0xAF, 0x92, 0xEA, 0x07, 0x7D, 0x40, 0x49, 0xBA, 0x56, 0x49, 0xF9, 0x84, 0x1F, 0x28, 0x19, 0x95,
|
||||
0x02, 0xEA, 0xB8, 0x06, 0x28, 0x81, 0x7A, 0xE9, 0x03, 0x3A, 0xA0, 0x03, 0x4A, 0xE2, 0x66, 0x31,
|
||||
0xD0, 0x2A, 0x35, 0x50, 0x72, 0xD6, 0x16, 0x5C, 0x7F, 0x4F, 0x2B, 0xEF, 0x2C, 0xE6, 0x66, 0x68,
|
||||
0x3F, 0x6E, 0x13, 0x3E, 0xEE, 0x0F, 0xC2, 0x49, 0x63, 0xF8, 0x9E, 0x0D, 0xE7, 0x18, 0xF5, 0x80,
|
||||
0x5D, 0xFF, 0xA5, 0x57, 0x26, 0xCE, 0x9D, 0xBD, 0xF4, 0x83, 0x91, 0xD1, 0xE0, 0xF8, 0xE5, 0x07,
|
||||
0xAF, 0x93, 0xB4, 0xF5, 0xE6, 0xC9, 0xB5, 0x73, 0x23, 0x9E, 0xE1, 0xFC, 0x01, 0xB5, 0xCB, 0x66,
|
||||
0xBC, 0x78, 0x9C, 0xED, 0xD9, 0xDB, 0x31, 0x43, 0x01, 0x14, 0x46, 0x61, 0xF7, 0x3B, 0x93, 0x0A,
|
||||
0x48, 0x07, 0x74, 0x40, 0x07, 0x74, 0x40, 0x07, 0x74, 0x40, 0x07, 0xD2, 0x81, 0x74, 0x40, 0x07,
|
||||
0x74, 0x40, 0x07, 0x74, 0x60, 0x22, 0x2E, 0x11, 0x97, 0xE3, 0x79, 0xAF, 0x27, 0x7B, 0xED, 0xCC,
|
||||
0xF0, 0x70, 0x52, 0xC0, 0x3F, 0x67, 0xB6, 0xE4, 0x9B, 0x35, 0x4E, 0xD3, 0x54, 0x3F, 0x4B, 0xE5,
|
||||
0x85, 0x76, 0xA2, 0x9D, 0x68, 0x27, 0xDA, 0x89, 0x76, 0xA2, 0x9D, 0xF8, 0xF3, 0x89, 0x29, 0xF7,
|
||||
0x39, 0xFB, 0x17, 0x13, 0xBD, 0xFA, 0xC4, 0xA0, 0x3E, 0x31, 0x2A, 0x4F, 0x74, 0xEA, 0x7F, 0x91,
|
||||
0x5E, 0x7D, 0xE2, 0xA9, 0x3E, 0x31, 0x2E, 0x4F, 0x74, 0xEB, 0xDF, 0xCE, 0x7E, 0x7D, 0x62, 0x58,
|
||||
0x9F, 0xF8, 0x28, 0x4F, 0xEC, 0xD4, 0x7F, 0xA9, 0x37, 0xF5, 0x89, 0xE7, 0xFA, 0xC4, 0x67, 0x79,
|
||||
0xE2, 0xA0, 0x29, 0x4F, 0xDC, 0xD5, 0x27, 0x5E, 0xEB, 0x13, 0x5F, 0x71, 0x62, 0x36, 0xBF, 0x70,
|
||||
0x14, 0x17, 0xAE, 0xC5, 0x43, 0x3C, 0xC4, 0x89, 0x5D, 0x31, 0xF1, 0x16, 0x27, 0x56, 0xC5, 0xC4,
|
||||
0x77, 0xF9, 0x14, 0x67, 0x71, 0xE1, 0x52, 0x3C, 0xC4, 0x20, 0x4E, 0x6C, 0x8B, 0x89, 0x51, 0x9C,
|
||||
0x58, 0xC9, 0x2F, 0x74, 0xE2, 0x42, 0x33, 0x93, 0x9F, 0xE8, 0xC5, 0x85, 0x8B, 0xFC, 0x42, 0xE0,
|
||||
0x5F, 0x9E, 0x62, 0x1C, 0x27, 0x96, 0xF3, 0x0B, 0xDD, 0xB8, 0xD0, 0x4C, 0xE7, 0x27, 0xFA, 0x71,
|
||||
0xC1, 0x9C, 0x62, 0x18, 0x27, 0xB6, 0xC4, 0xC4, 0x47, 0x9C, 0x10, 0x56, 0x44, 0xFE, 0xD5, 0x29,
|
||||
0x22, 0xFF, 0xCD, 0x79, 0x7E, 0x01, 0xFC, 0xAB, 0x53, 0x44, 0xFE, 0x9B, 0xC5, 0xFC, 0x02, 0xF8,
|
||||
0x7F, 0x14, 0x0F, 0x01, 0xFE, 0x4F, 0xC5, 0x04, 0xF8, 0xDF, 0x10, 0x13, 0x30, 0x4F, 0x9C, 0x02,
|
||||
0xFC, 0x9B, 0x53, 0x80, 0xFF, 0x63, 0x31, 0x01, 0xFE, 0x27, 0x70, 0x8A, 0x85, 0xFC, 0x02, 0xF8,
|
||||
0xBF, 0x17, 0x0F, 0x01, 0xFE, 0x0F, 0xC5, 0x04, 0xF8, 0x5F, 0xCF, 0x2F, 0x90, 0xFF, 0xF9, 0xFC,
|
||||
0x04, 0xF8, 0x37, 0xA7, 0x00, 0xFF, 0xFB, 0x62, 0x02, 0xFC, 0xAF, 0xE5, 0x17, 0xC8, 0xFF, 0x5C,
|
||||
0x7E, 0xE2, 0x2A, 0x2E, 0xDC, 0xE6, 0x17, 0xC8, 0xBF, 0x39, 0x05, 0xF8, 0x17, 0x7D, 0xB4, 0x87,
|
||||
0x53, 0x88, 0x3E, 0x02, 0xFF, 0x26, 0x15, 0xC1, 0xBF, 0x49, 0x45, 0x24, 0xAF, 0x38, 0x05, 0xF8,
|
||||
0x37, 0x7D, 0x04, 0xFE, 0x4D, 0x2A, 0x82, 0x7F, 0xD3, 0x47, 0x30, 0x4F, 0xA4, 0x22, 0xF8, 0x37,
|
||||
0xA7, 0x00, 0xFF, 0xA6, 0x8F, 0xC0, 0xBF, 0x38, 0x45, 0x07, 0xA7, 0x10, 0xA9, 0x08, 0xFE, 0x4D,
|
||||
0x1F, 0x81, 0x7F, 0xD3, 0x47, 0xEF, 0x71, 0x42, 0xF4, 0x11, 0xF9, 0x17, 0xA9, 0x08, 0xFE, 0xCD,
|
||||
0x29, 0xC0, 0xBF, 0x39, 0x05, 0xF8, 0xDF, 0xCC, 0x2F, 0x90, 0x7F, 0xD1, 0x47, 0xE0, 0xDF, 0xF4,
|
||||
0x11, 0xF8, 0x37, 0xA9, 0x08, 0xFE, 0x45, 0x1F, 0x91, 0x7F, 0xD1, 0x47, 0xE0, 0xDF, 0x9C, 0x02,
|
||||
0xFC, 0x9B, 0x54, 0x04, 0xFF, 0xA2, 0x8F, 0xC8, 0xBF, 0x38, 0x05, 0xF8, 0x37, 0x7D, 0x04, 0xFE,
|
||||
0x4D, 0x2A, 0xC2, 0x3C, 0x71, 0x8A, 0x13, 0x9C, 0x42, 0xA4, 0x22, 0xF8, 0x37, 0x7D, 0x04, 0xFE,
|
||||
0x45, 0x1F, 0x91, 0x7F, 0x91, 0x8A, 0xE4, 0x5F, 0xA4, 0x22, 0xF8, 0x37, 0xA7, 0x00, 0xFF, 0xA2,
|
||||
0x8F, 0xC8, 0xBF, 0xE8, 0x23, 0xF2, 0x2F, 0x52, 0x11, 0xFC, 0x9B, 0x54, 0x04, 0xFF, 0xE2, 0x14,
|
||||
0xE4, 0x5F, 0xF4, 0x11, 0xF8, 0x37, 0x7D, 0x04, 0xFE, 0x4D, 0x2A, 0x82, 0x7F, 0xD1, 0x47, 0xE4,
|
||||
0x5F, 0x9C, 0x02, 0xFC, 0x9B, 0x53, 0xBC, 0xC4, 0x05, 0x93, 0x8A, 0xE0, 0x5F, 0xF4, 0x11, 0xF9,
|
||||
0x17, 0xA9, 0x08, 0xFE, 0x4D, 0x1F, 0x81, 0x7F, 0xD3, 0x47, 0x30, 0x4F, 0x9C, 0x82, 0xFC, 0x8B,
|
||||
0x54, 0x04, 0xFF, 0xE6, 0x14, 0xE0, 0x5F, 0x9C, 0x82, 0xE6, 0x89, 0x3E, 0x22, 0xFF, 0x22, 0x15,
|
||||
0xC1, 0xBF, 0xE9, 0x23, 0xF0, 0x2F, 0x52, 0x71, 0x02, 0xA7, 0x20, 0xFF, 0xA2, 0x8F, 0xC0, 0xBF,
|
||||
0x39, 0x05, 0xF8, 0x17, 0xA9, 0xC8, 0x7F, 0x78, 0x8B, 0x3E, 0x22, 0xFF, 0xA2, 0x8F, 0xC0, 0xBF,
|
||||
0x49, 0x45, 0xF0, 0x2F, 0x52, 0x91, 0xFC, 0x8B, 0x53, 0x90, 0x7F, 0x71, 0x0A, 0xF0, 0x6F, 0xFA,
|
||||
0x08, 0xFC, 0x8B, 0x54, 0x24, 0xFF, 0x22, 0x15, 0xC9, 0xBF, 0x48, 0x45, 0xF0, 0x6F, 0x4E, 0x01,
|
||||
0xFE, 0x45, 0x1F, 0x91, 0x7F, 0x91, 0x8A, 0xE4, 0x5F, 0xA4, 0x22, 0xF8, 0x17, 0xA9, 0x48, 0xF3,
|
||||
0xC4, 0x29, 0xC8, 0xBF, 0xE8, 0x23, 0xF0, 0x6F, 0xFA, 0x08, 0xFC, 0x8B, 0x54, 0x64, 0xF2, 0x8A,
|
||||
0x54, 0xC4, 0xFB, 0x4E, 0xD3, 0x47, 0xE0, 0xDF, 0x9C, 0x02, 0xFC, 0x8B, 0x54, 0x24, 0xFF, 0xA2,
|
||||
0x8F, 0xC8, 0xBF, 0x38, 0x05, 0xF8, 0x37, 0x7D, 0x84, 0xF7, 0x9D, 0xA2, 0x8F, 0xC8, 0xBF, 0x38,
|
||||
0x05, 0xF9, 0x17, 0xA9, 0x08, 0xFE, 0xCD, 0x29, 0xC0, 0xBF, 0xE8, 0x23, 0xF2, 0x2F, 0xFA, 0x88,
|
||||
0xFC, 0x8B, 0x54, 0x04, 0xFF, 0xA6, 0x8F, 0xC0, 0xBF, 0x38, 0x05, 0xF9, 0x17, 0xA7, 0x20, 0xFF,
|
||||
0x22, 0x15, 0xF1, 0xBE, 0x53, 0x9C, 0x82, 0xFC, 0x8B, 0x54, 0x24, 0xFF, 0xA2, 0x8F, 0xC8, 0xBF,
|
||||
0xE8, 0x23, 0xF0, 0x2F, 0x52, 0x91, 0xFC, 0x8B, 0x54, 0x24, 0xFF, 0xE2, 0x14, 0xE4, 0x5F, 0xF4,
|
||||
0x11, 0xF8, 0x17, 0x7D, 0x44, 0xFE, 0x45, 0x2A, 0x92, 0x7F, 0x91, 0x8A, 0xE4, 0xFF, 0xB7, 0xA7,
|
||||
0xF8, 0x01, 0xAD, 0x66, 0x16, 0xE2, 0x78, 0x9C, 0xDD, 0x5B, 0x49, 0x88, 0x5D, 0x45, 0x14, 0x7D,
|
||||
0xBF, 0x87, 0x74, 0xF7, 0xEF, 0x4E, 0xF2, 0x13, 0xD4, 0x85, 0xD8, 0xFA, 0x05, 0x51, 0x50, 0xB0,
|
||||
0x1B, 0x31, 0x20, 0xA2, 0x76, 0x67, 0xA3, 0x22, 0x68, 0x1A, 0x14, 0xC4, 0xB9, 0x91, 0x80, 0x4D,
|
||||
0x22, 0xB6, 0x03, 0x88, 0x20, 0xA6, 0x55, 0x90, 0x40, 0x36, 0x71, 0xC0, 0x04, 0x24, 0xD8, 0x11,
|
||||
0xCD, 0x4E, 0xF8, 0x82, 0x3B, 0x51, 0x7F, 0x74, 0xA1, 0x66, 0xD5, 0x11, 0x37, 0x4E, 0xF8, 0x9C,
|
||||
0x07, 0x10, 0x9F, 0x46, 0x4D, 0x1C, 0x53, 0xBE, 0xE1, 0x0F, 0xEF, 0x9E, 0xBA, 0x55, 0x75, 0xAB,
|
||||
0xDE, 0x5F, 0x79, 0x77, 0xBF, 0xEA, 0xBD, 0xF3, 0x6B, 0xB8, 0x75, 0x87, 0x73, 0xEB, 0x45, 0x91,
|
||||
0x45, 0x9A, 0xDB, 0xF7, 0xBF, 0xF6, 0xE9, 0x4F, 0x27, 0x95, 0x4A, 0x3E, 0x7B, 0xFD, 0xB9, 0x87,
|
||||
0xB6, 0xD4, 0x6C, 0xCF, 0x5A, 0x64, 0xEB, 0xBE, 0x1F, 0x15, 0xC8, 0x1B, 0x4B, 0xC3, 0xFE, 0x38,
|
||||
0x0F, 0x7C, 0x8C, 0x30, 0x85, 0x1C, 0x38, 0xD7, 0x0F, 0xE7, 0xFE, 0xBF, 0x79, 0x9C, 0x4C, 0x9E,
|
||||
0x3F, 0x55, 0x8E, 0x33, 0xFB, 0xA1, 0x19, 0x27, 0x93, 0xBB, 0xA5, 0x0B, 0xF6, 0xF8, 0x49, 0x3B,
|
||||
0x90, 0x52, 0x6B, 0xA7, 0x89, 0x80, 0xDE, 0x71, 0xE1, 0x64, 0x72, 0xA9, 0x1B, 0xA7, 0xF1, 0x87,
|
||||
0x04, 0x48, 0xA9, 0xDB, 0x5C, 0x40, 0xCD, 0x3F, 0x65, 0x40, 0x4A, 0xED, 0x72, 0x8C, 0xE8, 0x2F,
|
||||
0x29, 0x90, 0x52, 0xF7, 0x0C, 0x62, 0x6A, 0xEE, 0x09, 0x7E, 0xEB, 0x03, 0xA4, 0xD4, 0x05, 0x46,
|
||||
0xA0, 0xB7, 0xFD, 0x80, 0x94, 0x1A, 0x33, 0x00, 0xDD, 0xEB, 0x0B, 0xA4, 0xE2, 0x21, 0x7E, 0x91,
|
||||
0x2C, 0x27, 0xC4, 0x24, 0xCB, 0x2C, 0xD2, 0xD7, 0xFE, 0x40, 0x4A, 0x4D, 0x0E, 0x64, 0x6E, 0x99,
|
||||
0x70, 0xF3, 0x13, 0xAB, 0x24, 0x95, 0x2B, 0x34, 0xA0, 0x57, 0xC2, 0x80, 0x94, 0x1A, 0x41, 0xA4,
|
||||
0x7F, 0x42, 0x91, 0xEE, 0x00, 0xA0, 0xB7, 0x42, 0x81, 0x94, 0x1A, 0x1D, 0xD0, 0x90, 0x94, 0xDA,
|
||||
0x46, 0x80, 0x0E, 0x86, 0x03, 0x29, 0x45, 0xBC, 0x44, 0xE0, 0xC6, 0x15, 0x72, 0x61, 0x09, 0x68,
|
||||
0xB1, 0x0A, 0x90, 0x8A, 0x4B, 0x48, 0xBF, 0x56, 0x42, 0x52, 0xF5, 0x3E, 0xD2, 0xBF, 0xD5, 0x90,
|
||||
0xFA, 0xA7, 0xEF, 0x49, 0xE3, 0x33, 0xF1, 0x9E, 0xBB, 0x2E, 0xDE, 0x9C, 0xFA, 0xA4, 0x4D, 0x67,
|
||||
0xDF, 0xF0, 0xE0, 0x11, 0xB3, 0xCB, 0xE9, 0x1D, 0x99, 0xDF, 0xF8, 0xFE, 0xE4, 0xE1, 0x53, 0xA8,
|
||||
0xAA, 0xDC, 0x79, 0xC4, 0x80, 0x34, 0xD5, 0x7D, 0x82, 0xFF, 0xB3, 0x9D, 0xCC, 0xE1, 0x9C, 0xFF,
|
||||
0xC8, 0x3A, 0xBD, 0x47, 0xB9, 0xCE, 0xF6, 0xA8, 0x8E, 0x93, 0x09, 0xEF, 0x56, 0x3B, 0x4E, 0xF9,
|
||||
0x17, 0xA6, 0xEB, 0x11, 0xA3, 0xC3, 0x9E, 0xE7, 0xDC, 0xCF, 0x44, 0xD1, 0xC7, 0x74, 0xD9, 0xDC,
|
||||
0x06, 0xE7, 0x12, 0x67, 0x8A, 0x1E, 0xBD, 0xE3, 0x76, 0x0B, 0x10, 0xEB, 0x14, 0x5B, 0x79, 0x87,
|
||||
0xAE, 0x03, 0xAB, 0x56, 0xA0, 0x74, 0x82, 0xBA, 0xFE, 0xD5, 0xD8, 0x65, 0x8A, 0x9D, 0x81, 0x9B,
|
||||
0xBE, 0x47, 0xE3, 0x59, 0xB3, 0xE6, 0x77, 0xEB, 0x2E, 0x20, 0xC6, 0x7B, 0x6C, 0xCC, 0x5A, 0x71,
|
||||
0x5B, 0x57, 0xDC, 0x40, 0x51, 0x13, 0xE7, 0x97, 0x69, 0xD4, 0x2C, 0xC2, 0xAF, 0x13, 0x20, 0x45,
|
||||
0xEF, 0xC3, 0x4B, 0xED, 0x48, 0x5F, 0x70, 0xB4, 0xCB, 0xBC, 0x34, 0xD0, 0xC8, 0xA6, 0x4B, 0xFE,
|
||||
0x39, 0x34, 0x99, 0x7C, 0x3D, 0xC8, 0x17, 0xFA, 0x6B, 0x60, 0x9B, 0x5A, 0x32, 0x20, 0x6D, 0x51,
|
||||
0x52, 0x67, 0x7C, 0x82, 0xB6, 0xAC, 0x17, 0x22, 0x45, 0xC7, 0xE9, 0x7B, 0xE9, 0xE6, 0x41, 0x5C,
|
||||
0xA1, 0x39, 0x42, 0x93, 0x1C, 0xA6, 0xEF, 0xCD, 0x45, 0x51, 0xD8, 0xE4, 0xB4, 0x43, 0xB6, 0x82,
|
||||
0x0D, 0x67, 0x89, 0x91, 0xC0, 0x1F, 0xB5, 0xA2, 0x05, 0x8A, 0x24, 0xD0, 0xEF, 0xAE, 0x1C, 0x23,
|
||||
0x2F, 0xC6, 0x78, 0x84, 0xF8, 0x20, 0x8D, 0x15, 0xF0, 0xB6, 0x10, 0xA3, 0xAC, 0xC9, 0x81, 0xA2,
|
||||
0x79, 0x8A, 0x34, 0x7C, 0x94, 0xFC, 0xDC, 0xEB, 0x81, 0x04, 0x7B, 0x35, 0x42, 0x55, 0x7C, 0xCE,
|
||||
0x07, 0x89, 0xEA, 0xCF, 0xBA, 0x9F, 0xC9, 0xCF, 0x8D, 0x3E, 0x48, 0x54, 0xA7, 0xC7, 0xA9, 0x9D,
|
||||
0x9B, 0x72, 0xBF, 0xDF, 0x17, 0xEA, 0x26, 0x27, 0xE8, 0x5E, 0x4E, 0xF8, 0x20, 0xD1, 0x41, 0xD4,
|
||||
0x29, 0x92, 0xD0, 0x10, 0x14, 0x42, 0x17, 0xA6, 0x4E, 0x4D, 0x81, 0xC8, 0xCA, 0x75, 0x85, 0x6E,
|
||||
0xD6, 0x24, 0x45, 0x32, 0x38, 0x5E, 0x5E, 0x8E, 0xDA, 0x90, 0xC4, 0x96, 0x20, 0x13, 0x6A, 0x0D,
|
||||
0x26, 0x8F, 0x0D, 0x0A, 0x09, 0x56, 0xBC, 0xC2, 0xEC, 0xEA, 0x74, 0x2B, 0x2B, 0xAC, 0xF8, 0x04,
|
||||
0xDD, 0xCA, 0x0A, 0x5A, 0x30, 0x46, 0x87, 0x58, 0x41, 0x33, 0x47, 0xA9, 0x55, 0xA9, 0x70, 0x5A,
|
||||
0x86, 0xA9, 0xE3, 0xAC, 0x70, 0x82, 0x6B, 0x34, 0xA8, 0x0F, 0xB7, 0x2A, 0x09, 0x78, 0xC0, 0x70,
|
||||
0x4B, 0xD7, 0x86, 0xDF, 0xE1, 0xD6, 0x77, 0x05, 0x2D, 0x5F, 0xB0, 0x47, 0x98, 0xC3, 0x75, 0x0B,
|
||||
0xF6, 0x52, 0x1B, 0xB0, 0x21, 0xD8, 0x73, 0xD6, 0xF1, 0xF4, 0x04, 0x7B, 0xF3, 0x51, 0x8D, 0x27,
|
||||
0x08, 0x8C, 0x30, 0x92, 0xB4, 0xA5, 0x41, 0x91, 0x02, 0xA3, 0x9E, 0x5C, 0x7D, 0x68, 0x9C, 0x1E,
|
||||
0x18, 0x89, 0xE5, 0x49, 0x02, 0x5D, 0xF2, 0xC0, 0xE8, 0x30, 0xDF, 0x73, 0x60, 0x2F, 0xC2, 0x22,
|
||||
0xD6, 0x61, 0x66, 0x9C, 0x32, 0x6B, 0x07, 0x4C, 0x45, 0xBB, 0x68, 0x85, 0x84, 0x26, 0x24, 0xB2,
|
||||
0x9F, 0x61, 0xA7, 0x1C, 0x92, 0x6D, 0x8C, 0x17, 0xCD, 0xC8, 0x16, 0xF8, 0x67, 0x40, 0x3D, 0xC6,
|
||||
0x00, 0x69, 0x35, 0xEF, 0xAC, 0xAC, 0x67, 0xD6, 0x70, 0x7A, 0xDE, 0x99, 0xE2, 0x78, 0xEF, 0x3F,
|
||||
0xB0, 0xC7, 0x33, 0x7B, 0x2D, 0x59, 0xB5, 0x13, 0x1A, 0x94, 0x57, 0x46, 0x3D, 0xDD, 0xEF, 0x65,
|
||||
0x48, 0x0C, 0x8F, 0x2C, 0x3F, 0x29, 0x9B, 0x47, 0x8E, 0xCA, 0x14, 0x33, 0x0F, 0x84, 0xCA, 0x62,
|
||||
0xF9, 0x3E, 0x29, 0x1B, 0x42, 0x0D, 0x91, 0x81, 0x5F, 0x8D, 0xF7, 0xDC, 0xE8, 0x64, 0x68, 0x28,
|
||||
0xBB, 0x66, 0xA1, 0x7B, 0x5C, 0x92, 0xA0, 0x1E, 0x1F, 0x77, 0xBF, 0xC3, 0xCB, 0x19, 0xDA, 0x5A,
|
||||
0x3A, 0x0B, 0x1A, 0xBC, 0x30, 0xE7, 0xE1, 0x85, 0x20, 0xA0, 0x84, 0x53, 0x96, 0x6F, 0x42, 0x90,
|
||||
0x4E, 0x67, 0x80, 0x38, 0x4D, 0x77, 0xCA, 0x65, 0x2C, 0x90, 0x67, 0x3D, 0x22, 0x93, 0x5B, 0x79,
|
||||
0xA0, 0x54, 0xBE, 0xF3, 0x03, 0xB2, 0x15, 0x82, 0x9E, 0xF1, 0xC0, 0x71, 0x14, 0xA7, 0xE6, 0xDF,
|
||||
0x13, 0xE2, 0x24, 0x3B, 0x9C, 0x05, 0x33, 0x21, 0x2B, 0xBD, 0xCD, 0x85, 0xF3, 0xFF, 0x46, 0x6A,
|
||||
0xBE, 0x2B, 0x03, 0x52, 0xC9, 0x4D, 0x76, 0xA0, 0xFB, 0x3C, 0x58, 0xE9, 0x96, 0x2D, 0xD4, 0x7A,
|
||||
0x51, 0x8E, 0x93, 0x4A, 0x6C, 0x0E, 0x6B, 0x5E, 0xF5, 0x02, 0x4A, 0x67, 0x68, 0x0A, 0x46, 0x9E,
|
||||
0xF2, 0x04, 0x4A, 0xA1, 0xF8, 0x09, 0x2E, 0x04, 0xD8, 0xBA, 0x16, 0xA7, 0xE8, 0x21, 0x45, 0x37,
|
||||
0xA5, 0xAE, 0x63, 0x90, 0x3E, 0x08, 0x01, 0x2A, 0x85, 0x04, 0xFD, 0xB9, 0x85, 0x01, 0x75, 0xA3,
|
||||
0xB9, 0x92, 0x0C, 0xCC, 0xB7, 0x84, 0xD5, 0x01, 0x33, 0xC1, 0x5A, 0x60, 0x80, 0x0D, 0xEF, 0xCA,
|
||||
0x34, 0x01, 0x32, 0x96, 0x93, 0x5E, 0x5E, 0xDA, 0xB2, 0x79, 0x53, 0xEA, 0xCD, 0x2F, 0xDA, 0xBE,
|
||||
0xFB, 0x13, 0xD3, 0xA0, 0x08, 0x12, 0x5F, 0x71, 0x79, 0xF3, 0x2A, 0xA2, 0x2E, 0xCD, 0x67, 0xF9,
|
||||
0x53, 0x59, 0x4E, 0xC3, 0x9B, 0x9C, 0x52, 0xAE, 0x9D, 0xA7, 0xEB, 0xDC, 0x21, 0xEE, 0xC1, 0xB2,
|
||||
0x1B, 0x3E, 0xCC, 0xF4, 0xF3, 0x51, 0x1D, 0x5B, 0x23, 0x29, 0xF9, 0x61, 0xA6, 0xEE, 0x71, 0x0D,
|
||||
0x87, 0x93, 0x0D, 0x8B, 0xF1, 0x64, 0x33, 0xFD, 0x3F, 0xD2, 0x3B, 0xCF, 0x37, 0x00, 0x45, 0x5C,
|
||||
0x99, 0xBE, 0x1F, 0xB1, 0x22, 0xD9, 0x6E, 0xF4, 0xD2, 0x85, 0xE8, 0x1A, 0xD3, 0xB3, 0x2E, 0xDA,
|
||||
0xE4, 0xF8, 0x72, 0x78, 0x57, 0x9A, 0xDA, 0x59, 0xEF, 0x4E, 0x4F, 0x2B, 0x02, 0xAD, 0x39, 0x72,
|
||||
0x7D, 0x4D, 0xFB, 0xBA, 0xE9, 0xA5, 0x16, 0xAE, 0x3A, 0x19, 0x9F, 0xAF, 0xF0, 0x8D, 0x4E, 0x84,
|
||||
0x88, 0x6A, 0x69, 0x9F, 0x5B, 0x26, 0x5A, 0x65, 0xA3, 0xA3, 0x9C, 0xD8, 0x2C, 0xA0, 0xD8, 0x50,
|
||||
0x01, 0x0B, 0xEF, 0x87, 0x39, 0xA7, 0x28, 0x7D, 0x85, 0x7F, 0x2F, 0xAC, 0x14, 0xD6, 0xA7, 0x83,
|
||||
0x6A, 0x40, 0xF9, 0x1E, 0x41, 0xAD, 0x4C, 0x96, 0xE6, 0xE3, 0x7E, 0xE7, 0x9B, 0x14, 0x56, 0x70,
|
||||
0x01, 0x1B, 0xBB, 0x21, 0x6B, 0x03, 0x53, 0x21, 0xBC, 0x75, 0xC5, 0x70, 0x03, 0x30, 0x4E, 0x29,
|
||||
0x87, 0xC1, 0xBC, 0x06, 0x16, 0x5C, 0x4C, 0x1B, 0xC1, 0x11, 0x8B, 0x34, 0xD5, 0xD0, 0xFD, 0x97,
|
||||
0x41, 0x60, 0xA3, 0x46, 0x90, 0x29, 0x95, 0xD3, 0x6B, 0xA0, 0x3C, 0xE3, 0x78, 0x56, 0x74, 0x47,
|
||||
0x68, 0x12, 0x50, 0xE8, 0x29, 0x2C, 0x98, 0xCA, 0xF8, 0x99, 0x5C, 0xE8, 0x9E, 0x6B, 0x55, 0xB7,
|
||||
0x60, 0x9E, 0x6E, 0x0E, 0x4B, 0xAF, 0x1E, 0xC4, 0x2F, 0x5D, 0x96, 0x65, 0x24, 0xD7, 0xC4, 0x5B,
|
||||
0x87, 0x5B, 0xB5, 0x17, 0x17, 0xCE, 0x83, 0xB4, 0xA7, 0xA4, 0x63, 0x1B, 0xA3, 0x1D, 0x8F, 0x1B,
|
||||
0x8A, 0xF4, 0xBC, 0xC4, 0x68, 0x93, 0xE5, 0x40, 0x40, 0x1D, 0x25, 0xDA, 0x6F, 0xB9, 0xE0, 0x18,
|
||||
0x28, 0x51, 0x10, 0xBB, 0x01, 0x7A, 0x02, 0xEB, 0x52, 0x3B, 0x38, 0x28, 0xA4, 0x21, 0x8A, 0x54,
|
||||
0xA1, 0x3A, 0x39, 0x34, 0xB8, 0x3A, 0x27, 0xEE, 0x65, 0xF0, 0xEC, 0x2A, 0x20, 0x2D, 0x5A, 0x91,
|
||||
0x2A, 0x68, 0x01, 0xAC, 0x78, 0xB8, 0x66, 0xAA, 0x21, 0x20, 0x9E, 0x82, 0x4F, 0x8B, 0xAA, 0x01,
|
||||
0x72, 0xF0, 0x09, 0x56, 0xE8, 0x5A, 0x3C, 0xAC, 0x0A, 0x75, 0x09, 0x09, 0xEE, 0xA5, 0x98, 0xFC,
|
||||
0x8F, 0xA2, 0xDF, 0xC9, 0x8B, 0x31, 0xDA, 0xA7, 0x60, 0xEB, 0xDB, 0x46, 0x9B, 0xE9, 0x8E, 0xC2,
|
||||
0x7A, 0x42, 0xCD, 0xF6, 0x2A, 0x36, 0xC8, 0x8F, 0x0B, 0x1C, 0x96, 0x65, 0x2D, 0xA6, 0x12, 0xAB,
|
||||
0x01, 0x28, 0xC1, 0x9C, 0xE6, 0xDF, 0xC5, 0x85, 0x29, 0x28, 0x89, 0x6C, 0xC4, 0x2D, 0x28, 0x65,
|
||||
0x0E, 0x0E, 0x81, 0x04, 0x66, 0xBD, 0x16, 0x29, 0x48, 0xDD, 0x39, 0x46, 0xA7, 0x13, 0x9A, 0xAA,
|
||||
0x4A, 0xB5, 0x1C, 0xA3, 0xDF, 0x51, 0x9D, 0xF1, 0x3D, 0x53, 0x86, 0x84, 0x3C, 0x63, 0x4D, 0x4F,
|
||||
0xA4, 0x64, 0x7A, 0xC0, 0xBE, 0x05, 0x6D, 0xB2, 0xEA, 0xF2, 0x97, 0xF0, 0x52, 0xAE, 0xD1, 0x98,
|
||||
0x45, 0x4A, 0xEA, 0xAF, 0x0D, 0xCC, 0x62, 0xF3, 0x53, 0xA6, 0x65, 0xD3, 0x82, 0x6A, 0x19, 0x06,
|
||||
0xF6, 0xC5, 0x5D, 0x64, 0xDC, 0x3C, 0xC1, 0xA0, 0xF4, 0x0C, 0x3C, 0xDF, 0x71, 0x9D, 0xBE, 0xE0,
|
||||
0x2E, 0x3B, 0x13, 0xD1, 0xA6, 0x51, 0xD8, 0xFF, 0x86, 0x86, 0xE4, 0x2A, 0x4C, 0xE9, 0x17, 0xF3,
|
||||
0x3A, 0xF5, 0x35, 0x3D, 0x33, 0xB7, 0xCF, 0x6F, 0x56, 0x27, 0x20, 0x3A, 0x4A, 0xC8, 0xDC, 0xAA,
|
||||
0xBC, 0xD6, 0x02, 0xD4, 0x60, 0x38, 0x81, 0x31, 0xD3, 0x60, 0xAD, 0xC9, 0x39, 0x43, 0xE6, 0x74,
|
||||
0xDD, 0xA4, 0xA6, 0x1C, 0x99, 0xDC, 0x62, 0xC0, 0x69, 0x7E, 0xCF, 0x3C, 0xDC, 0xB3, 0xB4, 0x2C,
|
||||
0x8B, 0xB5, 0x8B, 0xCD, 0x16, 0x16, 0x58, 0x36, 0xAF, 0x17, 0x31, 0x73, 0xB4, 0x4A, 0xBA, 0x83,
|
||||
0x97, 0xE8, 0x4B, 0x74, 0x88, 0x7D, 0xB2, 0x9F, 0xA2, 0x30, 0xB7, 0x46, 0x73, 0x69, 0x5F, 0x4D,
|
||||
0x59, 0xA3, 0x7D, 0x06, 0x2E, 0xB7, 0xB4, 0xD5, 0x66, 0x46, 0x2C, 0x63, 0xB2, 0x6A, 0x39, 0x93,
|
||||
0xB5, 0xDF, 0xC4, 0x64, 0x91, 0x74, 0x20, 0xF8, 0x6A, 0x7C, 0x21, 0xA5, 0x15, 0x65, 0x77, 0x4F,
|
||||
0x2C, 0x24, 0x6B, 0xAA, 0x74, 0x59, 0x9B, 0x18, 0xB4, 0x50, 0x5E, 0x34, 0x13, 0xF0, 0x21, 0xDE,
|
||||
0xE5, 0x9F, 0xBE, 0x40, 0xFA, 0x15, 0x5E, 0x09, 0x8C, 0x91, 0xCF, 0x0B, 0xBE, 0x69, 0x3F, 0x0D,
|
||||
0x40, 0xC1, 0x83, 0xD2, 0x86, 0x14, 0x3C, 0x28, 0xAD, 0x38, 0x19, 0x7A, 0xFF, 0x9F, 0x75, 0xFE,
|
||||
0x86, 0x3B, 0xF2, 0x76, 0x61, 0x9D, 0xA3, 0x76, 0x43, 0x59, 0x20, 0x06, 0x52, 0xC0, 0xFF, 0x93,
|
||||
0x0B, 0xC3, 0x77, 0x40, 0x01, 0x35, 0x53, 0xA3, 0xE3, 0xF7, 0xF9, 0x82, 0x2B, 0x93, 0xCB, 0x4D,
|
||||
0x40, 0xBE, 0x25, 0x17, 0xAB, 0x2F, 0xF3, 0x29, 0x27, 0xB4, 0xEC, 0xB4, 0x90, 0xBC, 0xA2, 0xB4,
|
||||
0xE6, 0x8A, 0x92, 0x9F, 0x96, 0x02, 0xB9, 0xAF, 0x37, 0x3D, 0x26, 0x02, 0x6A, 0x4B, 0xEE, 0x49,
|
||||
0x2D, 0x0A, 0x34, 0x74, 0x55, 0x46, 0x9D, 0xCD, 0xFE, 0xE0, 0x02, 0xDA, 0x29, 0xC2, 0xC9, 0xE4,
|
||||
0x25, 0xAB, 0x36, 0x08, 0xBF, 0x9C, 0xEC, 0x0C, 0xCB, 0x5C, 0xAA, 0x4E, 0x6E, 0xF6, 0xFC, 0xFC,
|
||||
0x75, 0x2B, 0x8F, 0x15, 0xEF, 0xF0, 0xB8, 0xBB, 0xD7, 0x95, 0xE6, 0x13, 0xF8, 0xE9, 0x6B, 0x72,
|
||||
0xE0, 0xCA, 0xD0, 0xCF, 0x71, 0x1B, 0xD7, 0xEF, 0xEE, 0x7F, 0xD5, 0xBB, 0x74, 0x8E, 0xFD, 0xE1,
|
||||
0xFF, 0x00, 0x7A, 0xCF, 0x0B, 0xB0, 0x78, 0x9C, 0xDD, 0x5A, 0x3D, 0x6C, 0x14, 0x57, 0x10, 0x5E,
|
||||
0xFF, 0x04, 0xDB, 0x60, 0x9F, 0x2F, 0x11, 0x1D, 0x02, 0x3B, 0x4A, 0x95, 0x22, 0xE0, 0x2E, 0x0D,
|
||||
0x02, 0x4B, 0x51, 0x2C, 0x52, 0xD9, 0x45, 0x2A, 0x04, 0x32, 0x69, 0x48, 0x11, 0x25, 0x17, 0x4B,
|
||||
0x41, 0x88, 0xCA, 0xB4, 0xD0, 0x38, 0x0D, 0x88, 0xEE, 0x5C, 0xA5, 0x49, 0xE1, 0x44, 0xCA, 0x8F,
|
||||
0x28, 0xD0, 0x45, 0x54, 0xA0, 0x14, 0x20, 0x51, 0xD0, 0x71, 0x28, 0x8A, 0xA0, 0x21, 0x5C, 0x42,
|
||||
0x12, 0xE7, 0xDF, 0x2F, 0xB7, 0x7B, 0xC7, 0x79, 0xE7, 0x9B, 0x79, 0x6F, 0x67, 0x46, 0x57, 0xF1,
|
||||
0x55, 0xF6, 0xDE, 0xED, 0x77, 0xEF, 0xBD, 0xFD, 0xBE, 0x79, 0x33, 0xF3, 0x36, 0xCB, 0x52, 0x58,
|
||||
0x38, 0x77, 0xED, 0xFB, 0x9F, 0x76, 0x42, 0x78, 0xFA, 0xE0, 0xF3, 0x4B, 0x4B, 0xA3, 0xC9, 0xAF,
|
||||
0xA6, 0x30, 0x7F, 0xF5, 0x49, 0x20, 0xB8, 0x71, 0x62, 0xC4, 0xC3, 0xB3, 0x78, 0x2B, 0x70, 0x74,
|
||||
0x3E, 0x30, 0x0F, 0xAC, 0xFE, 0x8D, 0xC0, 0x53, 0x70, 0x9D, 0xB4, 0x11, 0xAD, 0xFD, 0x1B, 0x21,
|
||||
0xEA, 0x62, 0xEB, 0x25, 0x03, 0xD1, 0x57, 0x71, 0x9E, 0x1C, 0xAF, 0xAB, 0x67, 0xF6, 0x38, 0x4D,
|
||||
0x14, 0xC2, 0x29, 0x25, 0xD1, 0x5F, 0x55, 0x44, 0x21, 0x7C, 0xA8, 0x21, 0x9A, 0x57, 0x10, 0x85,
|
||||
0xF0, 0x91, 0x82, 0xE9, 0x4F, 0x0D, 0x51, 0x08, 0xA7, 0x2B, 0x89, 0x1E, 0xE9, 0x88, 0x42, 0x38,
|
||||
0x5A, 0x41, 0x74, 0x4F, 0x4B, 0x14, 0xC2, 0x54, 0x92, 0xE8, 0xA2, 0x9E, 0x28, 0x74, 0xC6, 0x13,
|
||||
0x44, 0x0B, 0xFF, 0x19, 0x98, 0x42, 0x33, 0xC1, 0xF4, 0x87, 0x85, 0x28, 0x84, 0x37, 0xA2, 0x44,
|
||||
0x5F, 0xDA, 0x88, 0x42, 0xD8, 0x13, 0x9B, 0xDB, 0x8E, 0x95, 0x29, 0x36, 0xBF, 0xDF, 0xAC, 0x44,
|
||||
0x21, 0xEC, 0x13, 0x89, 0xCE, 0xD8, 0x89, 0x42, 0x5B, 0x0C, 0x7D, 0x4A, 0x71, 0x53, 0x1C, 0x16,
|
||||
0x88, 0x2C, 0x52, 0xDA, 0x45, 0x47, 0x88, 0xA1, 0x2A, 0xE3, 0x6A, 0x06, 0xE5, 0x1B, 0x92, 0x34,
|
||||
0x28, 0xA3, 0x28, 0x77, 0x71, 0x10, 0x88, 0x56, 0xBC, 0x44, 0xE1, 0x0E, 0x30, 0xFD, 0xEA, 0x66,
|
||||
0x02, 0x4D, 0xD5, 0xCD, 0xF2, 0xDE, 0xC5, 0x3A, 0x61, 0xFA, 0x22, 0xF6, 0xB5, 0xF6, 0xE5, 0xA5,
|
||||
0xD7, 0xBA, 0xEA, 0x7B, 0xF9, 0xAD, 0x73, 0xB7, 0xA3, 0x54, 0x24, 0xBA, 0x44, 0x54, 0xD9, 0x7A,
|
||||
0xB3, 0xF4, 0x9D, 0xF9, 0x2B, 0x91, 0x98, 0x73, 0xA8, 0xF4, 0xA5, 0x45, 0xF1, 0x1B, 0x9D, 0x77,
|
||||
0x60, 0x31, 0x23, 0x1B, 0x73, 0xAB, 0xF4, 0x95, 0xBB, 0xE2, 0x17, 0x84, 0x98, 0xB8, 0x26, 0x0E,
|
||||
0xAB, 0x14, 0x5C, 0x24, 0x7D, 0x37, 0xC5, 0x5C, 0x62, 0x51, 0xDA, 0xE6, 0x8F, 0x24, 0x27, 0xD7,
|
||||
0x8C, 0x24, 0x38, 0x12, 0xD5, 0xEE, 0xF4, 0x84, 0xC9, 0xB5, 0xA2, 0xD9, 0xCD, 0x8A, 0x20, 0x98,
|
||||
0x41, 0xCE, 0xB1, 0xCD, 0x3E, 0xEA, 0x24, 0xF2, 0x91, 0x4F, 0x39, 0x53, 0xAD, 0xFF, 0x91, 0x20,
|
||||
0xCB, 0x03, 0x71, 0xA2, 0x2C, 0xFB, 0x91, 0x7D, 0xFD, 0xB9, 0x38, 0x79, 0x18, 0x58, 0x4F, 0x11,
|
||||
0x65, 0xF5, 0x7F, 0xD8, 0x0D, 0xFD, 0x45, 0xFD, 0x85, 0x7D, 0x90, 0xDA, 0x13, 0xC5, 0x9F, 0xEE,
|
||||
0xEF, 0xC7, 0x4C, 0xE0, 0x52, 0x48, 0x25, 0x60, 0x0B, 0x3B, 0xD7, 0x1B, 0x2C, 0x5E, 0x96, 0x22,
|
||||
0x2A, 0x05, 0x8B, 0x41, 0x1B, 0xC5, 0xE5, 0x8F, 0xCD, 0x43, 0xCA, 0xB2, 0xDF, 0xF1, 0xC7, 0x8B,
|
||||
0xAB, 0x0F, 0x91, 0x49, 0x91, 0x28, 0xB3, 0x5F, 0x2F, 0x0C, 0x83, 0x1B, 0xE6, 0x72, 0x35, 0x11,
|
||||
0xF7, 0xD7, 0x74, 0x7E, 0x11, 0x9F, 0xE9, 0x84, 0x86, 0xE9, 0x3B, 0xB8, 0xE9, 0x78, 0xC6, 0x17,
|
||||
0xBC, 0x55, 0xC9, 0x92, 0x03, 0xD5, 0xDC, 0x14, 0xA6, 0x7C, 0xA8, 0x92, 0xA5, 0x00, 0x08, 0x21,
|
||||
0x5F, 0x72, 0x0C, 0xBC, 0xCA, 0x0A, 0x00, 0x6F, 0x1B, 0x63, 0x0A, 0xD7, 0x4D, 0xAE, 0x1B, 0x8B,
|
||||
0x81, 0x69, 0x92, 0x49, 0xE3, 0x48, 0x35, 0x49, 0x0F, 0xF0, 0xF4, 0x66, 0xB2, 0xEC, 0x6F, 0x7A,
|
||||
0x65, 0xAF, 0x96, 0x09, 0xE6, 0xD2, 0x1D, 0x01, 0x3C, 0x04, 0x75, 0xFD, 0x06, 0x61, 0xAA, 0x81,
|
||||
0xF3, 0xD5, 0x2E, 0x13, 0x5B, 0xA8, 0x2D, 0x34, 0xA3, 0x4A, 0xE0, 0x3D, 0x50, 0x45, 0xB7, 0x71,
|
||||
0x90, 0xB5, 0x6A, 0x86, 0xE7, 0x80, 0x47, 0x35, 0x02, 0xB2, 0x9F, 0xD4, 0x33, 0xFD, 0x4C, 0xEF,
|
||||
0x1C, 0xC7, 0xFF, 0xF5, 0x4C, 0xA0, 0xCD, 0x3D, 0xF0, 0x30, 0xF5, 0x44, 0x98, 0x2B, 0x4F, 0xD1,
|
||||
0x98, 0xA2, 0x7F, 0x74, 0xDD, 0x42, 0x80, 0x32, 0x4D, 0x53, 0x27, 0xA6, 0x37, 0x15, 0x00, 0x65,
|
||||
0xAA, 0xD1, 0xED, 0xC0, 0x20, 0x82, 0x2C, 0xA3, 0xFB, 0xFA, 0x2C, 0xB5, 0xCF, 0x9C, 0x85, 0x09,
|
||||
0x6E, 0xA5, 0xFA, 0x9A, 0xB5, 0x30, 0xD1, 0x74, 0xF9, 0x38, 0x1D, 0xE2, 0x8C, 0x85, 0x89, 0x4A,
|
||||
0x73, 0x99, 0xA6, 0x56, 0x72, 0x6D, 0x14, 0x01, 0xCD, 0x97, 0x57, 0x69, 0x28, 0x50, 0xC7, 0x94,
|
||||
0x1C, 0xCF, 0xC8, 0xAD, 0x0D, 0xCA, 0x94, 0xAE, 0xB7, 0x01, 0x54, 0xD4, 0x0D, 0xF2, 0x9F, 0xC5,
|
||||
0x76, 0x68, 0xBC, 0xF5, 0x17, 0x9B, 0x69, 0x78, 0x2B, 0x3E, 0x3C, 0x15, 0x0C, 0x4F, 0x99, 0xC3,
|
||||
0x73, 0xCB, 0xF0, 0x1C, 0x4C, 0x43, 0x83, 0x7A, 0x2F, 0xCF, 0x01, 0x51, 0x65, 0x78, 0x91, 0x8E,
|
||||
0x46, 0xDF, 0x0D, 0x0B, 0x13, 0xB9, 0x33, 0xD4, 0x86, 0xB6, 0x23, 0xEC, 0xF3, 0xEF, 0x52, 0x90,
|
||||
0x0C, 0x4E, 0xF9, 0x77, 0x4E, 0xD8, 0xBD, 0x27, 0xE0, 0x7F, 0x83, 0x5D, 0x60, 0x36, 0xE3, 0xFE,
|
||||
0x0C, 0x03, 0x72, 0xD6, 0x11, 0xD8, 0x93, 0x57, 0xF5, 0x4C, 0x54, 0x04, 0x1D, 0x4C, 0xA8, 0xB0,
|
||||
0x4B, 0x12, 0x07, 0x3C, 0xBA, 0x16, 0xCB, 0x0E, 0xC7, 0xB4, 0x4C, 0x9B, 0xF4, 0xBE, 0x75, 0x56,
|
||||
0x6C, 0xA8, 0xA3, 0x01, 0x8D, 0x29, 0x79, 0xB9, 0xB1, 0xCD, 0xAE, 0xE8, 0x00, 0x39, 0xF3, 0x2C,
|
||||
0x7B, 0x98, 0xDA, 0x85, 0x82, 0x65, 0xCA, 0xE7, 0x82, 0x55, 0x51, 0xAC, 0x6F, 0x0A, 0x10, 0x6E,
|
||||
0xC3, 0x0A, 0x48, 0x19, 0x58, 0xB0, 0x1B, 0x37, 0xCA, 0x0B, 0x10, 0xDD, 0xF4, 0xF0, 0xAE, 0x76,
|
||||
0x7E, 0x11, 0x1B, 0x25, 0xAA, 0x9D, 0x0A, 0x1B, 0x28, 0x45, 0x38, 0xC2, 0x92, 0x5D, 0x25, 0x73,
|
||||
0x78, 0x72, 0xBD, 0x47, 0x0E, 0xD1, 0x40, 0x25, 0x4E, 0xD6, 0x7B, 0xA8, 0x89, 0x57, 0x15, 0x55,
|
||||
0x3E, 0x6B, 0x3D, 0x14, 0x4B, 0xE2, 0xE8, 0x3C, 0xF0, 0xB6, 0xF5, 0xA8, 0x38, 0xE7, 0x70, 0xCC,
|
||||
0x3C, 0xA4, 0xFE, 0x03, 0x7F, 0x86, 0xD7, 0xAB, 0x22, 0x27, 0xEF, 0x40, 0x35, 0x7A, 0x1F, 0x6C,
|
||||
0xB2, 0x0F, 0xCC, 0x5D, 0xA3, 0xFE, 0x8E, 0xCB, 0x16, 0xCA, 0xDC, 0xC9, 0x1A, 0x04, 0x6D, 0xDE,
|
||||
0x17, 0x35, 0x76, 0xD7, 0x06, 0x35, 0x2F, 0xEB, 0xD1, 0x58, 0x3B, 0x7E, 0x83, 0x6D, 0x52, 0x6A,
|
||||
0x69, 0x5B, 0xBA, 0x90, 0xA5, 0x24, 0x80, 0x2F, 0xA1, 0xA9, 0x33, 0x5A, 0x4A, 0x96, 0x78, 0xA7,
|
||||
0x2E, 0x58, 0xBA, 0xB5, 0xA5, 0x0E, 0x8A, 0xDC, 0xB1, 0xD7, 0x76, 0x90, 0x7B, 0x21, 0xA5, 0x0F,
|
||||
0x26, 0xF3, 0xFE, 0xB0, 0x54, 0x5D, 0x6D, 0x12, 0x3D, 0xC4, 0x66, 0x74, 0xF1, 0x73, 0x8A, 0x4E,
|
||||
0x3B, 0xC9, 0x29, 0x31, 0x04, 0xDA, 0x40, 0xC4, 0x87, 0xCD, 0x40, 0x0B, 0x68, 0xBC, 0x66, 0xCD,
|
||||
0x40, 0x03, 0x20, 0xA5, 0x74, 0x1E, 0x26, 0xE5, 0x80, 0x6D, 0x9B, 0x07, 0x04, 0x35, 0x50, 0xC2,
|
||||
0x92, 0xCE, 0x55, 0x60, 0x07, 0x8B, 0xD1, 0x23, 0x97, 0x2A, 0xF0, 0x66, 0x63, 0x44, 0x9D, 0x95,
|
||||
0xE0, 0xDB, 0xBF, 0xF3, 0xDC, 0x4D, 0xDA, 0xB3, 0x7D, 0x07, 0x6F, 0x52, 0x9A, 0xB4, 0xE8, 0x3A,
|
||||
0xE6, 0x12, 0xB3, 0xE5, 0x9B, 0x0E, 0xA2, 0x8E, 0x44, 0xE4, 0x92, 0x67, 0x24, 0x8B, 0x70, 0xCC,
|
||||
0x2F, 0x56, 0xEF, 0x9A, 0x95, 0xDE, 0x89, 0xBE, 0x55, 0x63, 0x78, 0x53, 0xA1, 0x40, 0x22, 0x45,
|
||||
0x52, 0xBF, 0x3D, 0xD1, 0x43, 0xA2, 0x98, 0xAF, 0x9B, 0x0E, 0xBD, 0xE3, 0x93, 0xB3, 0x52, 0xA5,
|
||||
0xAB, 0xDD, 0xFA, 0x7D, 0x3D, 0x53, 0x55, 0x11, 0xF7, 0xB5, 0x96, 0xA8, 0x5D, 0x41, 0x94, 0x65,
|
||||
0xEF, 0x25, 0x5E, 0x35, 0x2A, 0x43, 0x51, 0x9A, 0xD4, 0x3F, 0x53, 0x31, 0xA9, 0x8E, 0x66, 0x16,
|
||||
0xBE, 0x05, 0xBD, 0x0B, 0xDB, 0xA6, 0xB6, 0x92, 0xAF, 0x7F, 0x72, 0x7D, 0x40, 0x76, 0xE7, 0xC2,
|
||||
0x7E, 0x61, 0xC7, 0x57, 0x1E, 0xCD, 0x14, 0x78, 0xF5, 0xDD, 0xB3, 0xE7, 0xCF, 0xBF, 0xFF, 0xF6,
|
||||
0x2B, 0xF9, 0xDF, 0x7C, 0x4B, 0x54, 0x57, 0x95, 0x00, 0x96, 0x3A, 0x9B, 0xDA, 0xCD, 0x04, 0x28,
|
||||
0x59, 0x53, 0xB3, 0x8A, 0x00, 0xA4, 0x91, 0x74, 0x4A, 0x12, 0x98, 0xA9, 0xAA, 0xEB, 0x5C, 0x06,
|
||||
0x5C, 0x71, 0x95, 0x98, 0x24, 0x60, 0x62, 0x64, 0x69, 0x0B, 0x51, 0x60, 0xB2, 0x66, 0x11, 0x13,
|
||||
0x05, 0x6E, 0xD1, 0x5E, 0x31, 0xB1, 0x04, 0xCB, 0x2F, 0x26, 0x7C, 0x0D, 0xC5, 0x2D, 0x26, 0x3C,
|
||||
0x21, 0xF5, 0x8B, 0x09, 0x73, 0x22, 0xBF, 0x98, 0xD0, 0x29, 0xCA, 0x4E, 0x07, 0x07, 0xBE, 0xA9,
|
||||
0xB1, 0xE5, 0x1E, 0xD2, 0x0F, 0xC0, 0x64, 0xEA, 0x0F, 0x13, 0x60, 0x5C, 0x77, 0x8B, 0x09, 0xCD,
|
||||
0xDB, 0x70, 0x0F, 0x09, 0xCD, 0x6B, 0x6A, 0xC8, 0x97, 0x21, 0x36, 0x76, 0x5C, 0x40, 0xF3, 0x9A,
|
||||
0x7A, 0xDF, 0x04, 0x68, 0x5E, 0xB7, 0x98, 0xD0, 0xBC, 0x7E, 0x31, 0xA1, 0x79, 0xDD, 0x62, 0x62,
|
||||
0x2F, 0xEB, 0xB8, 0xDF, 0xD9, 0x46, 0xF3, 0x1A, 0x5A, 0xC3, 0x00, 0x34, 0xAF, 0xE9, 0x9C, 0xA8,
|
||||
0x0C, 0x34, 0xAF, 0x5F, 0x4C, 0x68, 0x5E, 0xBF, 0x98, 0xD0, 0xBC, 0x96, 0x77, 0xBE, 0x09, 0xD0,
|
||||
0xBC, 0xA9, 0x57, 0x73, 0xD3, 0x40, 0xF3, 0x4E, 0x7B, 0x89, 0x58, 0x4B, 0xC2, 0x2D, 0x26, 0x34,
|
||||
0xAF, 0x5F, 0x4C, 0x68, 0x5E, 0xB7, 0x98, 0xD0, 0xBC, 0xFA, 0x03, 0x0B, 0x04, 0x9A, 0x57, 0xD1,
|
||||
0xC8, 0x95, 0xC1, 0xCC, 0x6B, 0x38, 0x6C, 0xA2, 0x40, 0xF3, 0x9A, 0x0E, 0xE5, 0x08, 0xD0, 0xBC,
|
||||
0x6E, 0x31, 0xA1, 0x79, 0xFD, 0x69, 0x05, 0x9A, 0xD7, 0x74, 0x76, 0x49, 0xE0, 0x3A, 0x61, 0x90,
|
||||
0x80, 0xE6, 0xF5, 0x8B, 0x09, 0xFB, 0xE9, 0xEE, 0x1C, 0x95, 0x99, 0xD7, 0x2D, 0x26, 0xF1, 0x48,
|
||||
0xC5, 0x05, 0x34, 0xAF, 0x3B, 0x47, 0x45, 0xF3, 0xFA, 0xC5, 0x84, 0xE6, 0x75, 0x8B, 0x89, 0x99,
|
||||
0xD7, 0x5D, 0xF0, 0xE0, 0xF9, 0x9C, 0xBF, 0xE0, 0x41, 0xF3, 0xBA, 0xC5, 0xC4, 0x5E, 0x70, 0x76,
|
||||
0xE7, 0xA8, 0x68, 0x5E, 0x7F, 0xC1, 0x83, 0xE6, 0x75, 0x8B, 0x09, 0xCD, 0xEB, 0x17, 0x13, 0x9A,
|
||||
0xD7, 0x5D, 0xF0, 0x30, 0xF3, 0xBA, 0x73, 0x54, 0x34, 0xAF, 0x3F, 0x47, 0x45, 0xF3, 0xBA, 0x73,
|
||||
0x54, 0x76, 0xA8, 0xE0, 0x16, 0x13, 0x9A, 0xD7, 0x5D, 0xF0, 0x30, 0xF3, 0xBA, 0x0B, 0x1E, 0x34,
|
||||
0xAF, 0x3F, 0x47, 0x45, 0xF3, 0xBA, 0x73, 0x54, 0x66, 0x5E, 0xB7, 0x98, 0xF0, 0x50, 0xD7, 0x2F,
|
||||
0x26, 0x34, 0xAF, 0x5B, 0x4C, 0xEC, 0x68, 0x55, 0x9B, 0xA3, 0xFE, 0x0F, 0xB5, 0x7A, 0x66, 0x14,
|
||||
};
|
||||
// GlyphProps[width, height, advance_x, left, top, compressed_size, data_offset, code_point]
|
||||
const EpdGlyph MartianMono120_Glyphs[] = {
|
||||
{ 0, 0, 188, 0, 0, 8, 0 }, // ' '
|
||||
{ 158, 208, 188, 15, 204, 1730, 8 }, // '0'
|
||||
{ 143, 200, 188, 27, 200, 392, 1738 }, // '1'
|
||||
{ 143, 204, 188, 23, 204, 1269, 2130 }, // '2'
|
||||
{ 146, 208, 188, 21, 204, 1654, 3399 }, // '3'
|
||||
{ 161, 200, 188, 13, 200, 649, 5053 }, // '4'
|
||||
{ 144, 204, 188, 24, 200, 1148, 5702 }, // '5'
|
||||
{ 148, 204, 188, 20, 200, 1471, 6850 }, // '6'
|
||||
{ 133, 200, 188, 25, 200, 757, 8321 }, // '7'
|
||||
{ 147, 208, 188, 20, 204, 1792, 9078 }, // '8'
|
||||
{ 148, 204, 188, 20, 204, 1514, 10870 }, // '9'
|
||||
};
|
||||
const EpdUnicodeInterval MartianMono120_Intervals[] = {
|
||||
{ 0x20, 0x20, 0x0 },
|
||||
{ 0x30, 0x39, 0x1 },
|
||||
};
|
||||
const EpdFont MartianMono120 = {
|
||||
MartianMono120_Bitmaps, // (*bitmap) Glyph bitmap pointer, all concatenated together
|
||||
MartianMono120_Glyphs, // glyphs Glyph array
|
||||
MartianMono120_Intervals, // intervals Valid unicode intervals for this font
|
||||
2, // interval_count Number of unicode intervals.intervals
|
||||
1, // compressed Does this font use compressed glyph bitmaps?
|
||||
300, // advance_y Newline distance (y axis)
|
||||
250, // ascender Maximal height of a glyph above the base line
|
||||
-50, // descender Maximal height of a glyph below the base line
|
||||
};
|
||||
/*
|
||||
Included intervals
|
||||
( 32, 32), ie. ' ' - ' '
|
||||
( 48, 57), ie. '0' - '9'
|
||||
|
||||
*/
|
||||
@@ -2,7 +2,7 @@
|
||||
#include "epdiy.h"
|
||||
/*
|
||||
Created with
|
||||
.pio/libdeps/esp32dev/epdiy/scripts/fontconvert.py --compress MartianMono200 200 static/MartianMono-VariableFont_wdth,wght.ttf --string 0123456789
|
||||
lib/epdiy/scripts/fontconvert.py --compress MartianMono200 200 static/MartianMono-VariableFont_wdth,wght.ttf --string 0123456789
|
||||
As 'MartianMono200' with available 11 characters
|
||||
0123456789
|
||||
*/
|
||||
@@ -1474,7 +1474,7 @@ const EpdFont MartianMono200 = {
|
||||
MartianMono200_Intervals, // intervals Valid unicode intervals for this font
|
||||
2, // interval_count Number of unicode intervals.intervals
|
||||
1, // compressed Does this font use compressed glyph bitmaps?
|
||||
0, // advance_y Newline distance (y axis)
|
||||
500, // advance_y Newline distance (y axis)
|
||||
417, // ascender Maximal height of a glyph above the base line
|
||||
-84, // descender Maximal height of a glyph below the base line
|
||||
};
|
||||
|
||||
11
lib/epdiy/.clang-format
Normal file
@@ -0,0 +1,11 @@
|
||||
BasedOnStyle: chromium
|
||||
IndentWidth: 4
|
||||
ColumnLimit: 100
|
||||
AlignAfterOpenBracket: BlockIndent
|
||||
IncludeBlocks: Preserve
|
||||
BreakBeforeBinaryOperators: All
|
||||
Cpp11BracedListStyle: false
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
BinPackArguments: false
|
||||
BinPackParameters: false
|
||||
SortIncludes: false
|
||||
28
lib/epdiy/.gitignore
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
.pio
|
||||
.vscode
|
||||
build/
|
||||
build.clang
|
||||
sdkconfig.old
|
||||
sdkconfig
|
||||
**/build/
|
||||
.ccls-cache
|
||||
doc/source/xml/
|
||||
compile_commands.json
|
||||
examples/mpd_status/main/wifi_config.h
|
||||
/.idea/
|
||||
*.kicad_pcb-bak
|
||||
*.sch-bak
|
||||
eink_*.h
|
||||
eink_*.json
|
||||
fp-info-cache
|
||||
.cache
|
||||
__pycache__
|
||||
examples/weather/components
|
||||
sdkconfig
|
||||
managed_components/
|
||||
epaper-breakout-backups/
|
||||
dependencies.lock
|
||||
ED*.h
|
||||
ES*.h
|
||||
examples/private_*/
|
||||
*.code-workspace
|
||||
23
lib/epdiy/.readthedocs.yml
Normal file
@@ -0,0 +1,23 @@
|
||||
# .readthedocs.yml
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
# Required
|
||||
version: 2
|
||||
|
||||
# Build documentation in the docs/ directory with Sphinx
|
||||
sphinx:
|
||||
configuration: doc/source/conf.py
|
||||
|
||||
# Optionally build your docs in additional formats such as PDF and ePub
|
||||
formats: all
|
||||
|
||||
build:
|
||||
os: ubuntu-22.04
|
||||
tools:
|
||||
python: "3.11"
|
||||
|
||||
# Optionally set the version of Python and requirements required to build your docs
|
||||
python:
|
||||
install:
|
||||
- requirements: doc/requirements.txt
|
||||
45
lib/epdiy/CMakeLists.txt
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
set(app_sources "src/epdiy.c"
|
||||
"src/render.c"
|
||||
"src/output_lcd/render_lcd.c"
|
||||
"src/output_lcd/lcd_driver.c"
|
||||
"src/output_i2s/render_i2s.c"
|
||||
"src/output_i2s/rmt_pulse.c"
|
||||
"src/output_i2s/i2s_data_bus.c"
|
||||
"src/output_common/lut.c"
|
||||
"src/output_common/lut.S"
|
||||
"src/output_common/line_queue.c"
|
||||
"src/output_common/render_context.c"
|
||||
"src/output_common/render_method.c"
|
||||
"src/font.c"
|
||||
"src/displays.c"
|
||||
"src/diff.S"
|
||||
"src/board_specific.c"
|
||||
"src/builtin_waveforms.c"
|
||||
"src/highlevel.c"
|
||||
"src/board/tps65185.c"
|
||||
"src/board/pca9555.c"
|
||||
"src/board/epd_board.c"
|
||||
"src/board/epd_board_common.c"
|
||||
"src/board/epd_board_lilygo_t5_47.c"
|
||||
"src/board/lilygo_board_s3.c"
|
||||
"src/board/epd_board_v2_v3.c"
|
||||
"src/board/epd_board_v4.c"
|
||||
"src/board/epd_board_v5.c"
|
||||
"src/board/epd_board_v6.c"
|
||||
"src/board/epd_board_v7.c"
|
||||
"src/board/epd_board_v7_raw.c"
|
||||
"src/board/epd_board_v7_103.c" # Experimental board (not ready yet)
|
||||
)
|
||||
|
||||
|
||||
# Can also use IDF_VER for the full esp-idf version string but that is harder to parse. i.e. v4.1.1, v5.0-beta1, etc
|
||||
if (${IDF_VERSION_MAJOR} GREATER 4)
|
||||
idf_component_register(SRCS ${app_sources} INCLUDE_DIRS "src/" REQUIRES driver esp_timer esp_adc esp_lcd)
|
||||
else()
|
||||
idf_component_register(SRCS ${app_sources} INCLUDE_DIRS "src/" REQUIRES esp_adc_cal esp_timer esp_lcd)
|
||||
endif()
|
||||
|
||||
# formatting specifiers maybe incompatible between idf versions because of different int definitions
|
||||
component_compile_options(-Wno-error=format= -Wno-format)
|
||||
set_source_files_properties("src/output_common/lut.c" PROPERTIES COMPILE_OPTIONS -mno-fix-esp32-psram-cache-issue)
|
||||
165
lib/epdiy/LICENSE
Normal file
@@ -0,0 +1,165 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
48
lib/epdiy/Makefile
Normal file
@@ -0,0 +1,48 @@
|
||||
# Rules for generating waveform and font headers from raw data.
|
||||
|
||||
SUPPORTRED_DISPLAYS := ED060SC4 ED097OC4 ED097TC2 ED047TC1 ED133UT2 ED060XC3 ED060SCT
|
||||
|
||||
# Generate 16 grascale update waveforms + epdiy special waveforms
|
||||
EXPORTED_MODES ?= 1,2,5,16,17
|
||||
|
||||
# Generate waveforms in room temperature range
|
||||
EXPORT_TEMPERATURE_RANGE ?= 15,35
|
||||
|
||||
FORMATTED_FILES := $(shell find ./ -regex '.*\.\(c\|cpp\|h\|ino\)$$' \
|
||||
-not -regex '.*/\(.ccls-cache\|.cache\|waveforms\|\components\|build\)/.*' \
|
||||
-not -regex '.*/img_.*.h' \
|
||||
-not -regex '.*/build.*' \
|
||||
-not -regex '.*/\(firasans_.*.h\|opensans.*.h\|amiri.h\|alexandria.h\|dragon.h\)' \
|
||||
-not -regex '.*E[DS][0-9]*[A-Za-z]*[0-9].h')
|
||||
|
||||
# the default headers that should come with the distribution
|
||||
default: \
|
||||
$(patsubst %,src/waveforms/epdiy_%.h,$(SUPPORTRED_DISPLAYS))
|
||||
|
||||
clean:
|
||||
rm src/waveforms/epdiy_*.h
|
||||
rm src/waveforms/eink_*.h
|
||||
|
||||
format:
|
||||
clang-format --style=file -i $(FORMATTED_FILES)
|
||||
|
||||
format-check:
|
||||
clang-format --style=file --dry-run -Werror $(FORMATTED_FILES)
|
||||
|
||||
|
||||
src/waveforms/epdiy_%.h: src/waveforms/epdiy_%.json
|
||||
python3 scripts/waveform_hdrgen.py \
|
||||
--export-modes $(EXPORTED_MODES) \
|
||||
--temperature-range $(EXPORT_TEMPERATURE_RANGE) \
|
||||
epdiy_$* < $< > $@
|
||||
|
||||
src/waveforms/eink_%.h: src/waveforms/eink_%.json
|
||||
python3 scripts/waveform_hdrgen.py \
|
||||
--export-modes $(EXPORTED_MODES) \
|
||||
--temperature-range $(EXPORT_TEMPERATURE_RANGE) \
|
||||
eink_$* < $< > $@
|
||||
|
||||
src/waveforms/epdiy_%.json:
|
||||
python3 scripts/epdiy_waveform_gen.py $* > $@
|
||||
|
||||
.PHONY: default format
|
||||
186
lib/epdiy/README.md
Normal file
@@ -0,0 +1,186 @@
|
||||
[](https://epdiy.readthedocs.io/en/latest/?badge=latest) [](https://matrix.to/#/!GUXWriqsBKkWyXzsBK:matrix.vroland.de?via=matrix.vroland.de) [](https://join.slack.com/t/epdiy/shared_invite/zt-189eo7328-bs94cfB~eXPbLYAD1rKQcg)
|
||||
|
||||
EPDiy E-Paper Driver
|
||||
=======================================
|
||||
|
||||
EPDiy is a driver board which talks to affordable E-Paper (or E-Ink) screens, which are usually sold as replacement screens for E-Book readers. Why are they interesting?
|
||||
|
||||
* Easy on the eyes and paper-like aesthetics
|
||||
* No power consumption when not updating
|
||||
* Sunlight-readable
|
||||
|
||||
Ready-made DIY modules for this size and with 4bpp (16 Grayscale) color support are currently quite expensive and / or slow.
|
||||
The EPDiy controller can drive the bare display modules, e.g. from old e-Readers, which are available for 20$ (small) / 30$ (large) on ebay!
|
||||
Additionally, since it is based on the ESP32S3 (V7) / ESP32 (V2-V6) microcontroller, it features WiFi and Bluetooth connectivity.
|
||||
|
||||
The EPDiy driver board targets a range of E-Paper displays, as shown in the table below.
|
||||
As the driving method for all matrix-based E-ink displays is more or less the same, only the right connector and timings are needed.
|
||||
The current V7 board has three different display connectors, other display will require an adapter board.
|
||||
|
||||
The controller is optimized for the use with LiPo batteries, featuring a LiPo charger and ultra-low deep sleep current.
|
||||
|
||||
This project supports a driver for the ESP-IDF and Arduino. For installation instructions, please refer to the [documentation](https://epdiy.readthedocs.io/en/latest/getting_started.html#getting-your-board).
|
||||
Note that for epdiy V7, update speeds are significantly lower when using the Arduino IDE, because it does not allow to change
|
||||
the sub-optimal cache configuration.
|
||||
|
||||
Get Inspired
|
||||
------------
|
||||
|
||||
The `examples` directory contains some example applications like a weather station or a screen diagnostic test.
|
||||
If you want to build something more useful though, how about:
|
||||
|
||||
- A serial terminal for connecting to a raspberry pi: [video](https://cdn.hackaday.io/files/1681937195969312/terminal_demo.mp4) [repository](https://github.com/vroland/epdiy-terminal)]
|
||||
- A Music Player Daemon (MPD) dashboard: [repository](https://github.com/vroland/epdiy-mpd)]
|
||||
- An e-Paper picture frame: [video](https://www.youtube.com/watch?v=r7AcNQsSZUw)
|
||||
- And more to come!
|
||||
|
||||
Building It
|
||||
-----------
|
||||
|
||||
On the [EPDiy Hardware Page](https://vroland.github.io/epdiy-hardware/), you'll find a list of all boards and variants, adapters, and helpers.
|
||||
Next to each board, there are manufacturing files (gerbers), Bill of Materials (BoM), part placement files,
|
||||
and 3D models ready to use!
|
||||
|
||||

|
||||
|
||||
For ordering from JLCPCB for example, ordering is as easy as downloading the zipped gerbers, BoM, and placement file
|
||||
and uploading them. The process is very similar for other manufacturers, check your vendor's documentation for details.
|
||||
Don't forget to oder adapters if the board doesn't have connectors for your specific display.
|
||||
|
||||
The current latest version is epdiy V7, beased on the ESP32S3.
|
||||
Older versions are also available on the hardware page.
|
||||
|
||||
|
||||
#### Contributing Hardware
|
||||
|
||||
Want to contribute your own board variant or adapter?
|
||||
Check out the [epdiy-hardware repository](https://github.com/vroland/epdiy-hardware) for instructions.
|
||||
|
||||
|
||||
Gettings Started
|
||||
----------------
|
||||
|
||||
For instructions and more information visit the [documentation](https://epdiy.readthedocs.io/en/latest/getting_started.html)!
|
||||
|
||||
Join the Discussion
|
||||
----------------
|
||||
|
||||
- [](https://matrix.to/#/!GUXWriqsBKkWyXzsBK:matrix.vroland.de?via=matrix.vroland.de) Matrix Community: +epdiy:matrix.vroland.de
|
||||
- Slack: See badge
|
||||
|
||||
Displays
|
||||
--------
|
||||
|
||||
|Name |Size |Resolution|Compatible|Connector|Pin count|Compatible since pcb version|Notes
|
||||
| --: | --: | --: | --: | --: | --: | --: | --: |
|
||||
| ED060SC4 | 6" | 800 x 600<br>167 PPI | yes, tested | FH26W-39S-0.3SHW(60) | 39 | v2 | |
|
||||
|ED097OC4|9.7"|1200 x 825<br>150 PPI|yes, tested|XF2M-3315-1A|33|v2|Cheap, inferior contrast
|
||||
|ED097TC2|9.7"|1200 x 825<br>150 PPI|yes, tested|XF2M-3315-1A|33|v2|Slightly higher price, better contrast
|
||||
|ED097OC1|9.7"|1200 x 825<br>150 PPI|yes (should work)|XF2M-3315-1A|33|v2|Cheap, inferior performance
|
||||
|ED047TC1|4.7"|960 x 540<br>234 PPI|yes, tested|40-pin|40|LILYGO 4.7" EPD|Supported only by 4.7" e-paper board by LILYGO
|
||||
| ED050SC5 | 5" | 600 x 800<br>200 PPI | yes, tested | THD0510-33CL-GF | 33 | v5 |
|
||||
| ED050SC3 | 5" | 600 x 800<br>200 PPI | yes (should work) | THD0510-33CL-GF | 33 | v5 |
|
||||
| ED052TC4 | 5.2" | 1280 x 780<br>??? PPI | yes (should work) | WP27D-P050VA3 | 50 | v5 |
|
||||
| ED133UT2 | 13.3" | 1600 x 1200<br>150 PPI | yes, tested | adapter board | 39 | v2 | Adapter Board required, also PENG133D
|
||||
| ED060XC3 | 6" | 758 x 1024<br>212 PPI | yes, tested | THD0515-34CL-SN | 34 | v5 | Cheapest, good contrast and resolution
|
||||
| ED060XD4 | 6" | 758 x 1024<br>212 PPI | yes, tested | THD0515-34CL-SN | 34 | v5 |
|
||||
| ED060XC5 | 6" | 758 x 1024<br>212 PPI | yes (should work as ED060XC3) | THD0515-34CL-SN | 34 | v5 |
|
||||
| ED060XD6 | 6" | 758 x 1024<br>212 PPI | yes (should work as ED060XC3) | THD0515-34CL-SN | 34 | v5 |
|
||||
| ED060XH2 | 6" | 758 x 1024<br>212 PPI | yes (should work as ED060XC3) | THD0515-34CL-SN | 34 | v5 |
|
||||
| ED060XC9 | 6" | 758 x 1024<br>212 PPI | yes (should work as ED060XC3) | THD0515-34CL-SN | 34 | v5 |
|
||||
| ED060KD1 | 6" | 1072 x 1448<br>300 PPI | yes (should work as ED060XC3) | THD0515-34CL-SN | 34 | v5 |
|
||||
| ED060KC1 | 6" | 1072 x 1448<br>300 PPI | yes (should work as ED060XC3) | THD0515-34CL-SN | 34 | v5 |
|
||||
| ED060SCF | 6" | 600 x 800<br>167 PPI | yes, tested | THD0515-34CL-SN | 34 | v5 | Different flex cable shape
|
||||
| ED060SCN | 6" | 600 x 800<br>167 PPI | yes (should work as ED060XC3) | THD0515-34CL-SN | 34 | v5 | Different flex cable shape
|
||||
| ED060SCP | 6" | 600 x 800<br>167 PPI | yes (should work as ED060XC3) | THD0515-34CL-SN | 34 | v5 | Different flex cable shape
|
||||
| ED060SC7 | 6" | 600 x 800<br>167 PPI | yes (should work) | AXT334124 | 34 | v5 | connector dropped in v6
|
||||
| ED060SCG | 6" | 600 x 800<br>167 PPI | yes (should work) | AXT334124 | 34 | v5 | connector dropped in v6
|
||||
| ED060SCE | 6" | 600 x 800<br>167 PPI | yes (should work) | AXT334124 | 34 | v5 | connector dropped in v6
|
||||
| ED060SCM | 6" | 600 x 800<br>167 PPI | yes (should work) | AXT334124 | 34 | v5 | connector dropped in v6
|
||||
| ED060SCT | 6" | 600 x 800<br>167 PPI | yes, tested | AXT334124 | 34 | v5 | connector dropped in v6
|
||||
| ED078KC1 | 7.8" | 1872 x 1404<br>300 PPI | yes, tested | FH12-40S-0.5SH | 40 | v7 | 16 data lines
|
||||
|
||||
|
||||
Troubleshooting
|
||||
---------------
|
||||
|
||||
The following list is compiled from past experiences and GitHub issues:
|
||||
* **The displayed image displays only part of the image.** Make sure to select the correct display type as described [here](https://epdiy.readthedocs.io/en/latest/getting_started.html#selecting-a-display-type).
|
||||
* **The existing image fades / darkens when updating a partial screen region.** Make sure the VCOM voltage is [calibrated](https://epdiy.readthedocs.io/en/latest/getting_started.html#calibrate-vcom) for your specific display.
|
||||
* **The second third of the image is replaced with the last third.** This seems to be a timing issue we could not yet quite figure out the reason for. For a workarround or suggestions please [join the discussion](https://github.com/vroland/epdiy/issues/15).
|
||||
* **The ESP does not boot correctly when external periperals are connected.** Make sure not to pull GPIO12 high during boot, as it is a strapping pin internal voltage selection (https://github.com/vroland/epdiy/issues/17).
|
||||
* **The ESP power consumption in deep sleep is too high.** Add `rtc_gpio_isolate(GPIO_NUM_12);` to your solution. See also [Configuring IOs (Deep-sleep Only)](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/sleep_modes.html?highlight=rtc_gpio_isolate#configuring-ios-deep-sleep-only).
|
||||
|
||||
LilyGo Boards
|
||||
---------------
|
||||
|
||||
### Supported LilyGo Boards
|
||||
|
||||
| Board | Display | Board Definition | Notes |
|
||||
| --: | --: | --: | --: |
|
||||
| LilyGo T5 4.7" | ED047TC1 | `epd_board_lilygo_t5_47` | Original T5 4.7" |
|
||||
| LilyGo T5 S3 E-Paper Pro | ED047TC1 | `epd_board_v7` | ESP32-S3 based, includes GT911 touch, PCF8563 RTC, BQ25896/BQ27220 battery management |
|
||||
|
||||
### Power Management
|
||||
|
||||
There are several differences with these boards.
|
||||
One particular one is the way the LilyGo handles power to the display the official lilygo code has two states.
|
||||
This is now handled in epdiy in a different way to the lilygo code.
|
||||
**epd_poweroff()** completely turns the power off to the display and the other peripherals of the lilygo.
|
||||
The new function **epd_powerdown()** keeps the peripherals on (this allows the touch functions to continue to work).
|
||||
**epd_poweroff() should always be called before sleeping the system**
|
||||
You can still use touch to wake the screen with the following.
|
||||
In Arduino it works like this.
|
||||
`epd_poweroff();`
|
||||
|
||||
`epd_deinit();`
|
||||
|
||||
`esp_sleep_enable_ext1_wakeup(GPIO_SEL_13, ESP_EXT1_WAKEUP_ANY_HIGH);`
|
||||
|
||||
`esp_deep_sleep_start();`
|
||||
|
||||
### I2C Bus Sharing (Arduino)
|
||||
|
||||
When using epdiy with Arduino on boards like the T5 S3 E-Paper Pro, you may need to share the I2C bus between epdiy and other peripherals (touch controller, RTC, battery gauge, etc.).
|
||||
|
||||
Epdiy's board initialization will detect if the I2C driver is already installed (e.g., by Arduino's `Wire.begin()`) and reuse the existing driver instead of failing. This allows you to:
|
||||
|
||||
1. Call `Wire.begin(SDA, SCL)` before `epd_init()` to initialize the I2C bus
|
||||
2. Use `Wire` for other I2C devices (GT911 touch, PCF8563 RTC, BQ27220 fuel gauge)
|
||||
3. Protect shared I2C access with a mutex if accessing from multiple tasks
|
||||
|
||||
Example initialization order for T5 S3 E-Paper Pro:
|
||||
```cpp
|
||||
Wire.begin(39, 40); // Initialize I2C first (SDA=39, SCL=40)
|
||||
epd_init(&epd_board_v7, &ED047TC1, EPD_LUT_64K); // epdiy reuses I2C driver
|
||||
// Now both epdiy and Wire can coexist on the same I2C bus
|
||||
```
|
||||
|
||||
More on E-Paper Displays
|
||||
------------------------
|
||||
|
||||
* List of E-Paper devices and their screens: https://e-ink-reader.ru/chg_dsp_en.php (thanks, @mcer12)
|
||||
* Reverse engineering of display pins, possible starting point for alternative drivers: https://linux-sunxi.org/PocketBook_Touch_Lux_3 (thanks, @mcer12)
|
||||
* Reverse engineering and explanation on driving EPDs: http://essentialscrap.com/eink/index.html
|
||||
* Earlier take on driving 6" EPDs with an ESP32, basis of original power circuit: http://spritesmods.com/?art=einkdisplay&page=1
|
||||
* Related Hackaday projects: https://hackaday.io/project/21607 https://hackaday.io/project/11537
|
||||
|
||||
If you know any other useful resources or have suggestions, please comment on #31!
|
||||
|
||||
Hackaday Project
|
||||
----------------
|
||||
|
||||
For more details, see the project page on Hackaday: https://hackaday.io/project/168193-epdiy-976-e-paper-controller
|
||||
|
||||

|
||||

|
||||
|
||||
Licenses
|
||||
--------
|
||||
|
||||
The weather example is Copyright (c) David Bird 2018 (except for minor modifications). Please refer to `examples/weather/README.md` for details.
|
||||
|
||||
The board and schematic are licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/80x15.png" /></a> <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.
|
||||
|
||||
Firmware and remaining examples are licensed under the terms of the GNU Lesser GPL version 3.
|
||||
Utilities are licensed under the terms of the MIT license.
|
||||
338
lib/epdiy/doc/Doxyfile
Normal file
@@ -0,0 +1,338 @@
|
||||
# Doxyfile 1.8.17
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
DOXYFILE_ENCODING = UTF-8
|
||||
PROJECT_NAME = "EPDiy"
|
||||
PROJECT_NUMBER =
|
||||
PROJECT_BRIEF =
|
||||
PROJECT_LOGO =
|
||||
OUTPUT_DIRECTORY =
|
||||
CREATE_SUBDIRS = NO
|
||||
ALLOW_UNICODE_NAMES = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
OUTPUT_TEXT_DIRECTION = None
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ABBREVIATE_BRIEF = "The $name class" \
|
||||
"The $name widget" \
|
||||
"The $name file" \
|
||||
is \
|
||||
provides \
|
||||
specifies \
|
||||
contains \
|
||||
represents \
|
||||
a \
|
||||
an \
|
||||
the
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = YES
|
||||
STRIP_FROM_PATH =
|
||||
STRIP_FROM_INC_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = NO
|
||||
JAVADOC_BANNER = NO
|
||||
QT_AUTOBRIEF = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
INHERIT_DOCS = YES
|
||||
SEPARATE_MEMBER_PAGES = NO
|
||||
TAB_SIZE = 4
|
||||
ALIASES =
|
||||
TCL_SUBST =
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
OPTIMIZE_FOR_FORTRAN = NO
|
||||
OPTIMIZE_OUTPUT_VHDL = NO
|
||||
OPTIMIZE_OUTPUT_SLICE = NO
|
||||
EXTENSION_MAPPING =
|
||||
MARKDOWN_SUPPORT = YES
|
||||
TOC_INCLUDE_HEADINGS = 5
|
||||
AUTOLINK_SUPPORT = YES
|
||||
BUILTIN_STL_SUPPORT = NO
|
||||
CPP_CLI_SUPPORT = NO
|
||||
SIP_SUPPORT = NO
|
||||
IDL_PROPERTY_SUPPORT = YES
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
GROUP_NESTED_COMPOUNDS = NO
|
||||
SUBGROUPING = YES
|
||||
INLINE_GROUPED_CLASSES = NO
|
||||
INLINE_SIMPLE_STRUCTS = NO
|
||||
TYPEDEF_HIDES_STRUCT = NO
|
||||
LOOKUP_CACHE_SIZE = 0
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = NO
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_PRIV_VIRTUAL = NO
|
||||
EXTRACT_PACKAGE = NO
|
||||
EXTRACT_STATIC = NO
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
EXTRACT_ANON_NSPACES = NO
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = NO
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
HIDE_COMPOUND_REFERENCE= NO
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
SHOW_GROUPED_MEMB_INC = NO
|
||||
FORCE_LOCAL_INCLUDES = NO
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
SORT_BRIEF_DOCS = NO
|
||||
SORT_MEMBERS_CTORS_1ST = NO
|
||||
SORT_GROUP_NAMES = NO
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
STRICT_PROTO_MATCHING = NO
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = YES
|
||||
SHOW_FILES = YES
|
||||
SHOW_NAMESPACES = YES
|
||||
FILE_VERSION_FILTER =
|
||||
LAYOUT_FILE =
|
||||
CITE_BIB_FILES =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = NO
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_AS_ERROR = NO
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = ../src/
|
||||
INPUT_ENCODING = UTF-8
|
||||
FILE_PATTERNS = *.c \
|
||||
*.h
|
||||
RECURSIVE = NO
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXCLUDE_SYMBOLS =
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS = *
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
IMAGE_PATH =
|
||||
INPUT_FILTER =
|
||||
FILTER_PATTERNS =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
FILTER_SOURCE_PATTERNS =
|
||||
USE_MDFILE_AS_MAINPAGE =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = NO
|
||||
INLINE_SOURCES = NO
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = NO
|
||||
REFERENCES_RELATION = NO
|
||||
REFERENCES_LINK_SOURCE = YES
|
||||
SOURCE_TOOLTIPS = YES
|
||||
USE_HTAGS = NO
|
||||
VERBATIM_HEADERS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = YES
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = NO
|
||||
HTML_OUTPUT = html
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_EXTRA_STYLESHEET =
|
||||
HTML_EXTRA_FILES =
|
||||
HTML_COLORSTYLE_HUE = 220
|
||||
HTML_COLORSTYLE_SAT = 100
|
||||
HTML_COLORSTYLE_GAMMA = 80
|
||||
HTML_TIMESTAMP = NO
|
||||
HTML_DYNAMIC_MENUS = YES
|
||||
HTML_DYNAMIC_SECTIONS = NO
|
||||
HTML_INDEX_NUM_ENTRIES = 100
|
||||
GENERATE_DOCSET = NO
|
||||
DOCSET_FEEDNAME = "Doxygen generated docs"
|
||||
DOCSET_BUNDLE_ID = org.doxygen.Project
|
||||
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
|
||||
DOCSET_PUBLISHER_NAME = Publisher
|
||||
GENERATE_HTMLHELP = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = NO
|
||||
CHM_INDEX_ENCODING =
|
||||
BINARY_TOC = NO
|
||||
TOC_EXPAND = NO
|
||||
GENERATE_QHP = NO
|
||||
QCH_FILE =
|
||||
QHP_NAMESPACE = org.doxygen.Project
|
||||
QHP_VIRTUAL_FOLDER = doc
|
||||
QHP_CUST_FILTER_NAME =
|
||||
QHP_CUST_FILTER_ATTRS =
|
||||
QHP_SECT_FILTER_ATTRS =
|
||||
QHG_LOCATION =
|
||||
GENERATE_ECLIPSEHELP = NO
|
||||
ECLIPSE_DOC_ID = org.doxygen.Project
|
||||
DISABLE_INDEX = NO
|
||||
GENERATE_TREEVIEW = NO
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
TREEVIEW_WIDTH = 250
|
||||
EXT_LINKS_IN_WINDOW = NO
|
||||
FORMULA_FONTSIZE = 10
|
||||
FORMULA_TRANSPARENT = YES
|
||||
FORMULA_MACROFILE =
|
||||
USE_MATHJAX = NO
|
||||
MATHJAX_FORMAT = HTML-CSS
|
||||
MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/
|
||||
MATHJAX_EXTENSIONS =
|
||||
MATHJAX_CODEFILE =
|
||||
SEARCHENGINE = YES
|
||||
SERVER_BASED_SEARCH = NO
|
||||
EXTERNAL_SEARCH = NO
|
||||
SEARCHENGINE_URL =
|
||||
SEARCHDATA_FILE = searchdata.xml
|
||||
EXTERNAL_SEARCH_ID =
|
||||
EXTRA_SEARCH_MAPPINGS =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = NO
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME =
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
LATEX_MAKEINDEX_CMD = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
LATEX_FOOTER =
|
||||
LATEX_EXTRA_STYLESHEET =
|
||||
LATEX_EXTRA_FILES =
|
||||
PDF_HYPERLINKS = YES
|
||||
USE_PDFLATEX = YES
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
LATEX_SOURCE_CODE = NO
|
||||
LATEX_BIB_STYLE = plain
|
||||
LATEX_TIMESTAMP = NO
|
||||
LATEX_EMOJI_DIRECTORY =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT = rtf
|
||||
COMPACT_RTF = NO
|
||||
RTF_HYPERLINKS = NO
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
RTF_SOURCE_CODE = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_MAN = NO
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_SUBDIR =
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = YES
|
||||
XML_OUTPUT = source/xml
|
||||
XML_PROGRAMLISTING = YES
|
||||
XML_NS_MEMB_FILE_SCOPE = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the DOCBOOK output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_DOCBOOK = NO
|
||||
DOCBOOK_OUTPUT = docbook
|
||||
DOCBOOK_PROGRAMLISTING = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
PERLMOD_PRETTY = YES
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
ENABLE_PREPROCESSING = YES
|
||||
MACRO_EXPANSION = YES
|
||||
EXPAND_ONLY_PREDEF = YES
|
||||
SEARCH_INCLUDES = YES
|
||||
INCLUDE_PATH =
|
||||
INCLUDE_FILE_PATTERNS =
|
||||
PREDEFINED = IRAM_ATTR= \
|
||||
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
EXTERNAL_PAGES = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = YES
|
||||
DIA_PATH =
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = NO
|
||||
DOT_NUM_THREADS = 0
|
||||
DOT_FONTNAME = Helvetica
|
||||
DOT_FONTSIZE = 10
|
||||
DOT_FONTPATH =
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
GROUP_GRAPHS = YES
|
||||
UML_LOOK = NO
|
||||
UML_LIMIT_NUM_FIELDS = 10
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
CALL_GRAPH = NO
|
||||
CALLER_GRAPH = NO
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DIRECTORY_GRAPH = YES
|
||||
DOT_IMAGE_FORMAT = png
|
||||
INTERACTIVE_SVG = NO
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MSCFILE_DIRS =
|
||||
DIAFILE_DIRS =
|
||||
PLANTUML_JAR_PATH =
|
||||
PLANTUML_CFG_FILE =
|
||||
PLANTUML_INCLUDE_PATH =
|
||||
DOT_GRAPH_MAX_NODES = 50
|
||||
MAX_DOT_GRAPH_DEPTH = 0
|
||||
DOT_TRANSPARENT = NO
|
||||
DOT_MULTI_TARGETS = NO
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
23
lib/epdiy/doc/Makefile
Normal file
@@ -0,0 +1,23 @@
|
||||
# Minimal makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line, and also
|
||||
# from the environment for the first two.
|
||||
SPHINXOPTS ?=
|
||||
SPHINXBUILD ?= sphinx-build
|
||||
SOURCEDIR = source
|
||||
BUILDDIR = build
|
||||
|
||||
# Put it first so that "make" without argument is like "make help".
|
||||
help:
|
||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
|
||||
doxygen:
|
||||
doxygen
|
||||
|
||||
.PHONY: help Makefile doxygen
|
||||
|
||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||
%: Makefile doxygen
|
||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
BIN
lib/epdiy/doc/html/bc_s.png
Normal file
|
After Width: | Height: | Size: 676 B |
BIN
lib/epdiy/doc/html/bdwn.png
Normal file
|
After Width: | Height: | Size: 147 B |
BIN
lib/epdiy/doc/html/closed.png
Normal file
|
After Width: | Height: | Size: 132 B |
BIN
lib/epdiy/doc/html/doc.png
Normal file
|
After Width: | Height: | Size: 746 B |
1771
lib/epdiy/doc/html/doxygen.css
Normal file
BIN
lib/epdiy/doc/html/doxygen.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
120
lib/epdiy/doc/html/dynsections.js
Normal file
@@ -0,0 +1,120 @@
|
||||
/*
|
||||
@licstart The following is the entire license notice for the
|
||||
JavaScript code in this file.
|
||||
|
||||
Copyright (C) 1997-2017 by Dimitri van Heesch
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
@licend The above is the entire license notice
|
||||
for the JavaScript code in this file
|
||||
*/
|
||||
function toggleVisibility(linkObj)
|
||||
{
|
||||
var base = $(linkObj).attr('id');
|
||||
var summary = $('#'+base+'-summary');
|
||||
var content = $('#'+base+'-content');
|
||||
var trigger = $('#'+base+'-trigger');
|
||||
var src=$(trigger).attr('src');
|
||||
if (content.is(':visible')===true) {
|
||||
content.hide();
|
||||
summary.show();
|
||||
$(linkObj).addClass('closed').removeClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
content.show();
|
||||
summary.hide();
|
||||
$(linkObj).removeClass('closed').addClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function updateStripes()
|
||||
{
|
||||
$('table.directory tr').
|
||||
removeClass('even').filter(':visible:even').addClass('even');
|
||||
}
|
||||
|
||||
function toggleLevel(level)
|
||||
{
|
||||
$('table.directory tr').each(function() {
|
||||
var l = this.id.split('_').length-1;
|
||||
var i = $('#img'+this.id.substring(3));
|
||||
var a = $('#arr'+this.id.substring(3));
|
||||
if (l<level+1) {
|
||||
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
|
||||
a.html('▼');
|
||||
$(this).show();
|
||||
} else if (l==level+1) {
|
||||
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
|
||||
a.html('►');
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
function toggleFolder(id)
|
||||
{
|
||||
// the clicked row
|
||||
var currentRow = $('#row_'+id);
|
||||
|
||||
// all rows after the clicked row
|
||||
var rows = currentRow.nextAll("tr");
|
||||
|
||||
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||
|
||||
// only match elements AFTER this one (can't hide elements before)
|
||||
var childRows = rows.filter(function() { return this.id.match(re); });
|
||||
|
||||
// first row is visible we are HIDING
|
||||
if (childRows.filter(':first').is(':visible')===true) {
|
||||
// replace down arrow by right arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
currentRowSpans.filter(".arrow").html('►');
|
||||
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
|
||||
} else { // we are SHOWING
|
||||
// replace right arrow by down arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
|
||||
currentRowSpans.filter(".arrow").html('▼');
|
||||
// replace down arrows by right arrows for child rows
|
||||
var childRowsSpans = childRows.find("span");
|
||||
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
childRowsSpans.filter(".arrow").html('►');
|
||||
childRows.show(); //show all children
|
||||
}
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
|
||||
function toggleInherit(id)
|
||||
{
|
||||
var rows = $('tr.inherit.'+id);
|
||||
var img = $('tr.inherit_header.'+id+' img');
|
||||
var src = $(img).attr('src');
|
||||
if (rows.filter(':first').is(':visible')===true) {
|
||||
rows.css('display','none');
|
||||
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
rows.css('display','table-row'); // using show() causes jump in firefox
|
||||
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
}
|
||||
/* @license-end */
|
||||
BIN
lib/epdiy/doc/html/folderclosed.png
Normal file
|
After Width: | Height: | Size: 616 B |
BIN
lib/epdiy/doc/html/folderopen.png
Normal file
|
After Width: | Height: | Size: 597 B |
76
lib/epdiy/doc/html/index.html
Normal file
@@ -0,0 +1,76 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>My Project: Main Page</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">My Project
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">My Project Documentation</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
35
lib/epdiy/doc/html/jquery.js
vendored
Normal file
50
lib/epdiy/doc/html/menu.js
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
@licstart The following is the entire license notice for the
|
||||
JavaScript code in this file.
|
||||
|
||||
Copyright (C) 1997-2017 by Dimitri van Heesch
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
@licend The above is the entire license notice
|
||||
for the JavaScript code in this file
|
||||
*/
|
||||
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
|
||||
function makeTree(data,relPath) {
|
||||
var result='';
|
||||
if ('children' in data) {
|
||||
result+='<ul>';
|
||||
for (var i in data.children) {
|
||||
result+='<li><a href="'+relPath+data.children[i].url+'">'+
|
||||
data.children[i].text+'</a>'+
|
||||
makeTree(data.children[i],relPath)+'</li>';
|
||||
}
|
||||
result+='</ul>';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
$('#main-nav').append(makeTree(menudata,relPath));
|
||||
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
|
||||
if (searchEnabled) {
|
||||
if (serverSide) {
|
||||
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+relPath+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
|
||||
} else {
|
||||
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>');
|
||||
}
|
||||
}
|
||||
$('#main-menu').smartmenus();
|
||||
}
|
||||
/* @license-end */
|
||||
24
lib/epdiy/doc/html/menudata.js
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
@licstart The following is the entire license notice for the
|
||||
JavaScript code in this file.
|
||||
|
||||
Copyright (C) 1997-2019 by Dimitri van Heesch
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of version 2 of the GNU General Public License as published by
|
||||
the Free Software Foundation
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
@licend The above is the entire license notice
|
||||
for the JavaScript code in this file
|
||||
*/
|
||||
var menudata={children:[
|
||||
{text:"Main Page",url:"index.html"}]}
|
||||
BIN
lib/epdiy/doc/html/nav_f.png
Normal file
|
After Width: | Height: | Size: 153 B |
BIN
lib/epdiy/doc/html/nav_g.png
Normal file
|
After Width: | Height: | Size: 95 B |
BIN
lib/epdiy/doc/html/nav_h.png
Normal file
|
After Width: | Height: | Size: 98 B |
BIN
lib/epdiy/doc/html/open.png
Normal file
|
After Width: | Height: | Size: 123 B |
BIN
lib/epdiy/doc/html/search/close.png
Normal file
|
After Width: | Height: | Size: 273 B |
BIN
lib/epdiy/doc/html/search/mag_sel.png
Normal file
|
After Width: | Height: | Size: 465 B |
12
lib/epdiy/doc/html/search/nomatches.html
Normal file
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
271
lib/epdiy/doc/html/search/search.css
Normal file
@@ -0,0 +1,271 @@
|
||||
/*---------------- Search Box */
|
||||
|
||||
#FSearchBox {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#MSearchBox {
|
||||
white-space : nowrap;
|
||||
float: none;
|
||||
margin-top: 8px;
|
||||
right: 0px;
|
||||
width: 170px;
|
||||
height: 24px;
|
||||
z-index: 102;
|
||||
}
|
||||
|
||||
#MSearchBox .left
|
||||
{
|
||||
display:block;
|
||||
position:absolute;
|
||||
left:10px;
|
||||
width:20px;
|
||||
height:19px;
|
||||
background:url('search_l.png') no-repeat;
|
||||
background-position:right;
|
||||
}
|
||||
|
||||
#MSearchSelect {
|
||||
display:block;
|
||||
position:absolute;
|
||||
width:20px;
|
||||
height:19px;
|
||||
}
|
||||
|
||||
.left #MSearchSelect {
|
||||
left:4px;
|
||||
}
|
||||
|
||||
.right #MSearchSelect {
|
||||
right:5px;
|
||||
}
|
||||
|
||||
#MSearchField {
|
||||
display:block;
|
||||
position:absolute;
|
||||
height:19px;
|
||||
background:url('search_m.png') repeat-x;
|
||||
border:none;
|
||||
width:115px;
|
||||
margin-left:20px;
|
||||
padding-left:4px;
|
||||
color: #909090;
|
||||
outline: none;
|
||||
font: 9pt Arial, Verdana, sans-serif;
|
||||
-webkit-border-radius: 0px;
|
||||
}
|
||||
|
||||
#FSearchBox #MSearchField {
|
||||
margin-left:15px;
|
||||
}
|
||||
|
||||
#MSearchBox .right {
|
||||
display:block;
|
||||
position:absolute;
|
||||
right:10px;
|
||||
top:8px;
|
||||
width:20px;
|
||||
height:19px;
|
||||
background:url('search_r.png') no-repeat;
|
||||
background-position:left;
|
||||
}
|
||||
|
||||
#MSearchClose {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
background : none;
|
||||
border: none;
|
||||
margin: 0px 4px 0px 0px;
|
||||
padding: 0px 0px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.left #MSearchClose {
|
||||
left: 6px;
|
||||
}
|
||||
|
||||
.right #MSearchClose {
|
||||
right: 2px;
|
||||
}
|
||||
|
||||
.MSearchBoxActive #MSearchField {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
/*---------------- Search filter selection */
|
||||
|
||||
#MSearchSelectWindow {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 0; top: 0;
|
||||
border: 1px solid #90A5CE;
|
||||
background-color: #F9FAFC;
|
||||
z-index: 10001;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.SelectItem {
|
||||
font: 8pt Arial, Verdana, sans-serif;
|
||||
padding-left: 2px;
|
||||
padding-right: 12px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
span.SelectionMark {
|
||||
margin-right: 4px;
|
||||
font-family: monospace;
|
||||
outline-style: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.SelectItem {
|
||||
display: block;
|
||||
outline-style: none;
|
||||
color: #000000;
|
||||
text-decoration: none;
|
||||
padding-left: 6px;
|
||||
padding-right: 12px;
|
||||
}
|
||||
|
||||
a.SelectItem:focus,
|
||||
a.SelectItem:active {
|
||||
color: #000000;
|
||||
outline-style: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.SelectItem:hover {
|
||||
color: #FFFFFF;
|
||||
background-color: #3D578C;
|
||||
outline-style: none;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*---------------- Search results window */
|
||||
|
||||
iframe#MSearchResults {
|
||||
width: 60ex;
|
||||
height: 15em;
|
||||
}
|
||||
|
||||
#MSearchResultsWindow {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 0; top: 0;
|
||||
border: 1px solid #000;
|
||||
background-color: #EEF1F7;
|
||||
z-index:10000;
|
||||
}
|
||||
|
||||
/* ----------------------------------- */
|
||||
|
||||
|
||||
#SRIndex {
|
||||
clear:both;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.SREntry {
|
||||
font-size: 10pt;
|
||||
padding-left: 1ex;
|
||||
}
|
||||
|
||||
.SRPage .SREntry {
|
||||
font-size: 8pt;
|
||||
padding: 1px 5px;
|
||||
}
|
||||
|
||||
body.SRPage {
|
||||
margin: 5px 2px;
|
||||
}
|
||||
|
||||
.SRChildren {
|
||||
padding-left: 3ex; padding-bottom: .5em
|
||||
}
|
||||
|
||||
.SRPage .SRChildren {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.SRSymbol {
|
||||
font-weight: bold;
|
||||
color: #425E97;
|
||||
font-family: Arial, Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a.SRScope {
|
||||
display: block;
|
||||
color: #425E97;
|
||||
font-family: Arial, Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a.SRSymbol:focus, a.SRSymbol:active,
|
||||
a.SRScope:focus, a.SRScope:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
span.SRScope {
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.SRPage .SRStatus {
|
||||
padding: 2px 5px;
|
||||
font-size: 8pt;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.SRResult {
|
||||
display: none;
|
||||
}
|
||||
|
||||
DIV.searchresults {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
/*---------------- External search page results */
|
||||
|
||||
.searchresult {
|
||||
background-color: #F0F3F8;
|
||||
}
|
||||
|
||||
.pages b {
|
||||
color: white;
|
||||
padding: 5px 5px 3px 5px;
|
||||
background-image: url("../tab_a.png");
|
||||
background-repeat: repeat-x;
|
||||
text-shadow: 0 1px 1px #000000;
|
||||
}
|
||||
|
||||
.pages {
|
||||
line-height: 17px;
|
||||
margin-left: 4px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.hl {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#searchresults {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.searchpages {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
814
lib/epdiy/doc/html/search/search.js
Normal file
@@ -0,0 +1,814 @@
|
||||
/*
|
||||
@licstart The following is the entire license notice for the
|
||||
JavaScript code in this file.
|
||||
|
||||
Copyright (C) 1997-2017 by Dimitri van Heesch
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
@licend The above is the entire license notice
|
||||
for the JavaScript code in this file
|
||||
*/
|
||||
function convertToId(search)
|
||||
{
|
||||
var result = '';
|
||||
for (i=0;i<search.length;i++)
|
||||
{
|
||||
var c = search.charAt(i);
|
||||
var cn = c.charCodeAt(0);
|
||||
if (c.match(/[a-z0-9\u0080-\uFFFF]/))
|
||||
{
|
||||
result+=c;
|
||||
}
|
||||
else if (cn<16)
|
||||
{
|
||||
result+="_0"+cn.toString(16);
|
||||
}
|
||||
else
|
||||
{
|
||||
result+="_"+cn.toString(16);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function getXPos(item)
|
||||
{
|
||||
var x = 0;
|
||||
if (item.offsetWidth)
|
||||
{
|
||||
while (item && item!=document.body)
|
||||
{
|
||||
x += item.offsetLeft;
|
||||
item = item.offsetParent;
|
||||
}
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
function getYPos(item)
|
||||
{
|
||||
var y = 0;
|
||||
if (item.offsetWidth)
|
||||
{
|
||||
while (item && item!=document.body)
|
||||
{
|
||||
y += item.offsetTop;
|
||||
item = item.offsetParent;
|
||||
}
|
||||
}
|
||||
return y;
|
||||
}
|
||||
|
||||
/* A class handling everything associated with the search panel.
|
||||
|
||||
Parameters:
|
||||
name - The name of the global variable that will be
|
||||
storing this instance. Is needed to be able to set timeouts.
|
||||
resultPath - path to use for external files
|
||||
*/
|
||||
function SearchBox(name, resultsPath, inFrame, label)
|
||||
{
|
||||
if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
|
||||
|
||||
// ---------- Instance variables
|
||||
this.name = name;
|
||||
this.resultsPath = resultsPath;
|
||||
this.keyTimeout = 0;
|
||||
this.keyTimeoutLength = 500;
|
||||
this.closeSelectionTimeout = 300;
|
||||
this.lastSearchValue = "";
|
||||
this.lastResultsPage = "";
|
||||
this.hideTimeout = 0;
|
||||
this.searchIndex = 0;
|
||||
this.searchActive = false;
|
||||
this.insideFrame = inFrame;
|
||||
this.searchLabel = label;
|
||||
|
||||
// ----------- DOM Elements
|
||||
|
||||
this.DOMSearchField = function()
|
||||
{ return document.getElementById("MSearchField"); }
|
||||
|
||||
this.DOMSearchSelect = function()
|
||||
{ return document.getElementById("MSearchSelect"); }
|
||||
|
||||
this.DOMSearchSelectWindow = function()
|
||||
{ return document.getElementById("MSearchSelectWindow"); }
|
||||
|
||||
this.DOMPopupSearchResults = function()
|
||||
{ return document.getElementById("MSearchResults"); }
|
||||
|
||||
this.DOMPopupSearchResultsWindow = function()
|
||||
{ return document.getElementById("MSearchResultsWindow"); }
|
||||
|
||||
this.DOMSearchClose = function()
|
||||
{ return document.getElementById("MSearchClose"); }
|
||||
|
||||
this.DOMSearchBox = function()
|
||||
{ return document.getElementById("MSearchBox"); }
|
||||
|
||||
// ------------ Event Handlers
|
||||
|
||||
// Called when focus is added or removed from the search field.
|
||||
this.OnSearchFieldFocus = function(isActive)
|
||||
{
|
||||
this.Activate(isActive);
|
||||
}
|
||||
|
||||
this.OnSearchSelectShow = function()
|
||||
{
|
||||
var searchSelectWindow = this.DOMSearchSelectWindow();
|
||||
var searchField = this.DOMSearchSelect();
|
||||
|
||||
if (this.insideFrame)
|
||||
{
|
||||
var left = getXPos(searchField);
|
||||
var top = getYPos(searchField);
|
||||
left += searchField.offsetWidth + 6;
|
||||
top += searchField.offsetHeight;
|
||||
|
||||
// show search selection popup
|
||||
searchSelectWindow.style.display='block';
|
||||
left -= searchSelectWindow.offsetWidth;
|
||||
searchSelectWindow.style.left = left + 'px';
|
||||
searchSelectWindow.style.top = top + 'px';
|
||||
}
|
||||
else
|
||||
{
|
||||
var left = getXPos(searchField);
|
||||
var top = getYPos(searchField);
|
||||
top += searchField.offsetHeight;
|
||||
|
||||
// show search selection popup
|
||||
searchSelectWindow.style.display='block';
|
||||
searchSelectWindow.style.left = left + 'px';
|
||||
searchSelectWindow.style.top = top + 'px';
|
||||
}
|
||||
|
||||
// stop selection hide timer
|
||||
if (this.hideTimeout)
|
||||
{
|
||||
clearTimeout(this.hideTimeout);
|
||||
this.hideTimeout=0;
|
||||
}
|
||||
return false; // to avoid "image drag" default event
|
||||
}
|
||||
|
||||
this.OnSearchSelectHide = function()
|
||||
{
|
||||
this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
|
||||
this.closeSelectionTimeout);
|
||||
}
|
||||
|
||||
// Called when the content of the search field is changed.
|
||||
this.OnSearchFieldChange = function(evt)
|
||||
{
|
||||
if (this.keyTimeout) // kill running timer
|
||||
{
|
||||
clearTimeout(this.keyTimeout);
|
||||
this.keyTimeout = 0;
|
||||
}
|
||||
|
||||
var e = (evt) ? evt : window.event; // for IE
|
||||
if (e.keyCode==40 || e.keyCode==13)
|
||||
{
|
||||
if (e.shiftKey==1)
|
||||
{
|
||||
this.OnSearchSelectShow();
|
||||
var win=this.DOMSearchSelectWindow();
|
||||
for (i=0;i<win.childNodes.length;i++)
|
||||
{
|
||||
var child = win.childNodes[i]; // get span within a
|
||||
if (child.className=='SelectItem')
|
||||
{
|
||||
child.focus();
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if (window.frames.MSearchResults.searchResults)
|
||||
{
|
||||
var elem = window.frames.MSearchResults.searchResults.NavNext(0);
|
||||
if (elem) elem.focus();
|
||||
}
|
||||
}
|
||||
else if (e.keyCode==27) // Escape out of the search field
|
||||
{
|
||||
this.DOMSearchField().blur();
|
||||
this.DOMPopupSearchResultsWindow().style.display = 'none';
|
||||
this.DOMSearchClose().style.display = 'none';
|
||||
this.lastSearchValue = '';
|
||||
this.Activate(false);
|
||||
return;
|
||||
}
|
||||
|
||||
// strip whitespaces
|
||||
var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
|
||||
|
||||
if (searchValue != this.lastSearchValue) // search value has changed
|
||||
{
|
||||
if (searchValue != "") // non-empty search
|
||||
{
|
||||
// set timer for search update
|
||||
this.keyTimeout = setTimeout(this.name + '.Search()',
|
||||
this.keyTimeoutLength);
|
||||
}
|
||||
else // empty search field
|
||||
{
|
||||
this.DOMPopupSearchResultsWindow().style.display = 'none';
|
||||
this.DOMSearchClose().style.display = 'none';
|
||||
this.lastSearchValue = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.SelectItemCount = function(id)
|
||||
{
|
||||
var count=0;
|
||||
var win=this.DOMSearchSelectWindow();
|
||||
for (i=0;i<win.childNodes.length;i++)
|
||||
{
|
||||
var child = win.childNodes[i]; // get span within a
|
||||
if (child.className=='SelectItem')
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
this.SelectItemSet = function(id)
|
||||
{
|
||||
var i,j=0;
|
||||
var win=this.DOMSearchSelectWindow();
|
||||
for (i=0;i<win.childNodes.length;i++)
|
||||
{
|
||||
var child = win.childNodes[i]; // get span within a
|
||||
if (child.className=='SelectItem')
|
||||
{
|
||||
var node = child.firstChild;
|
||||
if (j==id)
|
||||
{
|
||||
node.innerHTML='•';
|
||||
}
|
||||
else
|
||||
{
|
||||
node.innerHTML=' ';
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Called when an search filter selection is made.
|
||||
// set item with index id as the active item
|
||||
this.OnSelectItem = function(id)
|
||||
{
|
||||
this.searchIndex = id;
|
||||
this.SelectItemSet(id);
|
||||
var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
|
||||
if (searchValue!="" && this.searchActive) // something was found -> do a search
|
||||
{
|
||||
this.Search();
|
||||
}
|
||||
}
|
||||
|
||||
this.OnSearchSelectKey = function(evt)
|
||||
{
|
||||
var e = (evt) ? evt : window.event; // for IE
|
||||
if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
|
||||
{
|
||||
this.searchIndex++;
|
||||
this.OnSelectItem(this.searchIndex);
|
||||
}
|
||||
else if (e.keyCode==38 && this.searchIndex>0) // Up
|
||||
{
|
||||
this.searchIndex--;
|
||||
this.OnSelectItem(this.searchIndex);
|
||||
}
|
||||
else if (e.keyCode==13 || e.keyCode==27)
|
||||
{
|
||||
this.OnSelectItem(this.searchIndex);
|
||||
this.CloseSelectionWindow();
|
||||
this.DOMSearchField().focus();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// --------- Actions
|
||||
|
||||
// Closes the results window.
|
||||
this.CloseResultsWindow = function()
|
||||
{
|
||||
this.DOMPopupSearchResultsWindow().style.display = 'none';
|
||||
this.DOMSearchClose().style.display = 'none';
|
||||
this.Activate(false);
|
||||
}
|
||||
|
||||
this.CloseSelectionWindow = function()
|
||||
{
|
||||
this.DOMSearchSelectWindow().style.display = 'none';
|
||||
}
|
||||
|
||||
// Performs a search.
|
||||
this.Search = function()
|
||||
{
|
||||
this.keyTimeout = 0;
|
||||
|
||||
// strip leading whitespace
|
||||
var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
|
||||
|
||||
var code = searchValue.toLowerCase().charCodeAt(0);
|
||||
var idxChar = searchValue.substr(0, 1).toLowerCase();
|
||||
if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
|
||||
{
|
||||
idxChar = searchValue.substr(0, 2);
|
||||
}
|
||||
|
||||
var resultsPage;
|
||||
var resultsPageWithSearch;
|
||||
var hasResultsPage;
|
||||
|
||||
var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
|
||||
if (idx!=-1)
|
||||
{
|
||||
var hexCode=idx.toString(16);
|
||||
resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
|
||||
resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
|
||||
hasResultsPage = true;
|
||||
}
|
||||
else // nothing available for this search term
|
||||
{
|
||||
resultsPage = this.resultsPath + '/nomatches.html';
|
||||
resultsPageWithSearch = resultsPage;
|
||||
hasResultsPage = false;
|
||||
}
|
||||
|
||||
window.frames.MSearchResults.location = resultsPageWithSearch;
|
||||
var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
|
||||
|
||||
if (domPopupSearchResultsWindow.style.display!='block')
|
||||
{
|
||||
var domSearchBox = this.DOMSearchBox();
|
||||
this.DOMSearchClose().style.display = 'inline';
|
||||
if (this.insideFrame)
|
||||
{
|
||||
var domPopupSearchResults = this.DOMPopupSearchResults();
|
||||
domPopupSearchResultsWindow.style.position = 'relative';
|
||||
domPopupSearchResultsWindow.style.display = 'block';
|
||||
var width = document.body.clientWidth - 8; // the -8 is for IE :-(
|
||||
domPopupSearchResultsWindow.style.width = width + 'px';
|
||||
domPopupSearchResults.style.width = width + 'px';
|
||||
}
|
||||
else
|
||||
{
|
||||
var domPopupSearchResults = this.DOMPopupSearchResults();
|
||||
var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
|
||||
var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
|
||||
domPopupSearchResultsWindow.style.display = 'block';
|
||||
left -= domPopupSearchResults.offsetWidth;
|
||||
domPopupSearchResultsWindow.style.top = top + 'px';
|
||||
domPopupSearchResultsWindow.style.left = left + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
this.lastSearchValue = searchValue;
|
||||
this.lastResultsPage = resultsPage;
|
||||
}
|
||||
|
||||
// -------- Activation Functions
|
||||
|
||||
// Activates or deactivates the search panel, resetting things to
|
||||
// their default values if necessary.
|
||||
this.Activate = function(isActive)
|
||||
{
|
||||
if (isActive || // open it
|
||||
this.DOMPopupSearchResultsWindow().style.display == 'block'
|
||||
)
|
||||
{
|
||||
this.DOMSearchBox().className = 'MSearchBoxActive';
|
||||
|
||||
var searchField = this.DOMSearchField();
|
||||
|
||||
if (searchField.value == this.searchLabel) // clear "Search" term upon entry
|
||||
{
|
||||
searchField.value = '';
|
||||
this.searchActive = true;
|
||||
}
|
||||
}
|
||||
else if (!isActive) // directly remove the panel
|
||||
{
|
||||
this.DOMSearchBox().className = 'MSearchBoxInactive';
|
||||
this.DOMSearchField().value = this.searchLabel;
|
||||
this.searchActive = false;
|
||||
this.lastSearchValue = ''
|
||||
this.lastResultsPage = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
// The class that handles everything on the search results page.
|
||||
function SearchResults(name)
|
||||
{
|
||||
// The number of matches from the last run of <Search()>.
|
||||
this.lastMatchCount = 0;
|
||||
this.lastKey = 0;
|
||||
this.repeatOn = false;
|
||||
|
||||
// Toggles the visibility of the passed element ID.
|
||||
this.FindChildElement = function(id)
|
||||
{
|
||||
var parentElement = document.getElementById(id);
|
||||
var element = parentElement.firstChild;
|
||||
|
||||
while (element && element!=parentElement)
|
||||
{
|
||||
if (element.nodeName == 'DIV' && element.className == 'SRChildren')
|
||||
{
|
||||
return element;
|
||||
}
|
||||
|
||||
if (element.nodeName == 'DIV' && element.hasChildNodes())
|
||||
{
|
||||
element = element.firstChild;
|
||||
}
|
||||
else if (element.nextSibling)
|
||||
{
|
||||
element = element.nextSibling;
|
||||
}
|
||||
else
|
||||
{
|
||||
do
|
||||
{
|
||||
element = element.parentNode;
|
||||
}
|
||||
while (element && element!=parentElement && !element.nextSibling);
|
||||
|
||||
if (element && element!=parentElement)
|
||||
{
|
||||
element = element.nextSibling;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.Toggle = function(id)
|
||||
{
|
||||
var element = this.FindChildElement(id);
|
||||
if (element)
|
||||
{
|
||||
if (element.style.display == 'block')
|
||||
{
|
||||
element.style.display = 'none';
|
||||
}
|
||||
else
|
||||
{
|
||||
element.style.display = 'block';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Searches for the passed string. If there is no parameter,
|
||||
// it takes it from the URL query.
|
||||
//
|
||||
// Always returns true, since other documents may try to call it
|
||||
// and that may or may not be possible.
|
||||
this.Search = function(search)
|
||||
{
|
||||
if (!search) // get search word from URL
|
||||
{
|
||||
search = window.location.search;
|
||||
search = search.substring(1); // Remove the leading '?'
|
||||
search = unescape(search);
|
||||
}
|
||||
|
||||
search = search.replace(/^ +/, ""); // strip leading spaces
|
||||
search = search.replace(/ +$/, ""); // strip trailing spaces
|
||||
search = search.toLowerCase();
|
||||
search = convertToId(search);
|
||||
|
||||
var resultRows = document.getElementsByTagName("div");
|
||||
var matches = 0;
|
||||
|
||||
var i = 0;
|
||||
while (i < resultRows.length)
|
||||
{
|
||||
var row = resultRows.item(i);
|
||||
if (row.className == "SRResult")
|
||||
{
|
||||
var rowMatchName = row.id.toLowerCase();
|
||||
rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
|
||||
|
||||
if (search.length<=rowMatchName.length &&
|
||||
rowMatchName.substr(0, search.length)==search)
|
||||
{
|
||||
row.style.display = 'block';
|
||||
matches++;
|
||||
}
|
||||
else
|
||||
{
|
||||
row.style.display = 'none';
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
document.getElementById("Searching").style.display='none';
|
||||
if (matches == 0) // no results
|
||||
{
|
||||
document.getElementById("NoMatches").style.display='block';
|
||||
}
|
||||
else // at least one result
|
||||
{
|
||||
document.getElementById("NoMatches").style.display='none';
|
||||
}
|
||||
this.lastMatchCount = matches;
|
||||
return true;
|
||||
}
|
||||
|
||||
// return the first item with index index or higher that is visible
|
||||
this.NavNext = function(index)
|
||||
{
|
||||
var focusItem;
|
||||
while (1)
|
||||
{
|
||||
var focusName = 'Item'+index;
|
||||
focusItem = document.getElementById(focusName);
|
||||
if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (!focusItem) // last element
|
||||
{
|
||||
break;
|
||||
}
|
||||
focusItem=null;
|
||||
index++;
|
||||
}
|
||||
return focusItem;
|
||||
}
|
||||
|
||||
this.NavPrev = function(index)
|
||||
{
|
||||
var focusItem;
|
||||
while (1)
|
||||
{
|
||||
var focusName = 'Item'+index;
|
||||
focusItem = document.getElementById(focusName);
|
||||
if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (!focusItem) // last element
|
||||
{
|
||||
break;
|
||||
}
|
||||
focusItem=null;
|
||||
index--;
|
||||
}
|
||||
return focusItem;
|
||||
}
|
||||
|
||||
this.ProcessKeys = function(e)
|
||||
{
|
||||
if (e.type == "keydown")
|
||||
{
|
||||
this.repeatOn = false;
|
||||
this.lastKey = e.keyCode;
|
||||
}
|
||||
else if (e.type == "keypress")
|
||||
{
|
||||
if (!this.repeatOn)
|
||||
{
|
||||
if (this.lastKey) this.repeatOn = true;
|
||||
return false; // ignore first keypress after keydown
|
||||
}
|
||||
}
|
||||
else if (e.type == "keyup")
|
||||
{
|
||||
this.lastKey = 0;
|
||||
this.repeatOn = false;
|
||||
}
|
||||
return this.lastKey!=0;
|
||||
}
|
||||
|
||||
this.Nav = function(evt,itemIndex)
|
||||
{
|
||||
var e = (evt) ? evt : window.event; // for IE
|
||||
if (e.keyCode==13) return true;
|
||||
if (!this.ProcessKeys(e)) return false;
|
||||
|
||||
if (this.lastKey==38) // Up
|
||||
{
|
||||
var newIndex = itemIndex-1;
|
||||
var focusItem = this.NavPrev(newIndex);
|
||||
if (focusItem)
|
||||
{
|
||||
var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
|
||||
if (child && child.style.display == 'block') // children visible
|
||||
{
|
||||
var n=0;
|
||||
var tmpElem;
|
||||
while (1) // search for last child
|
||||
{
|
||||
tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
|
||||
if (tmpElem)
|
||||
{
|
||||
focusItem = tmpElem;
|
||||
}
|
||||
else // found it!
|
||||
{
|
||||
break;
|
||||
}
|
||||
n++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (focusItem)
|
||||
{
|
||||
focusItem.focus();
|
||||
}
|
||||
else // return focus to search field
|
||||
{
|
||||
parent.document.getElementById("MSearchField").focus();
|
||||
}
|
||||
}
|
||||
else if (this.lastKey==40) // Down
|
||||
{
|
||||
var newIndex = itemIndex+1;
|
||||
var focusItem;
|
||||
var item = document.getElementById('Item'+itemIndex);
|
||||
var elem = this.FindChildElement(item.parentNode.parentNode.id);
|
||||
if (elem && elem.style.display == 'block') // children visible
|
||||
{
|
||||
focusItem = document.getElementById('Item'+itemIndex+'_c0');
|
||||
}
|
||||
if (!focusItem) focusItem = this.NavNext(newIndex);
|
||||
if (focusItem) focusItem.focus();
|
||||
}
|
||||
else if (this.lastKey==39) // Right
|
||||
{
|
||||
var item = document.getElementById('Item'+itemIndex);
|
||||
var elem = this.FindChildElement(item.parentNode.parentNode.id);
|
||||
if (elem) elem.style.display = 'block';
|
||||
}
|
||||
else if (this.lastKey==37) // Left
|
||||
{
|
||||
var item = document.getElementById('Item'+itemIndex);
|
||||
var elem = this.FindChildElement(item.parentNode.parentNode.id);
|
||||
if (elem) elem.style.display = 'none';
|
||||
}
|
||||
else if (this.lastKey==27) // Escape
|
||||
{
|
||||
parent.searchBox.CloseResultsWindow();
|
||||
parent.document.getElementById("MSearchField").focus();
|
||||
}
|
||||
else if (this.lastKey==13) // Enter
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
this.NavChild = function(evt,itemIndex,childIndex)
|
||||
{
|
||||
var e = (evt) ? evt : window.event; // for IE
|
||||
if (e.keyCode==13) return true;
|
||||
if (!this.ProcessKeys(e)) return false;
|
||||
|
||||
if (this.lastKey==38) // Up
|
||||
{
|
||||
if (childIndex>0)
|
||||
{
|
||||
var newIndex = childIndex-1;
|
||||
document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
|
||||
}
|
||||
else // already at first child, jump to parent
|
||||
{
|
||||
document.getElementById('Item'+itemIndex).focus();
|
||||
}
|
||||
}
|
||||
else if (this.lastKey==40) // Down
|
||||
{
|
||||
var newIndex = childIndex+1;
|
||||
var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
|
||||
if (!elem) // last child, jump to parent next parent
|
||||
{
|
||||
elem = this.NavNext(itemIndex+1);
|
||||
}
|
||||
if (elem)
|
||||
{
|
||||
elem.focus();
|
||||
}
|
||||
}
|
||||
else if (this.lastKey==27) // Escape
|
||||
{
|
||||
parent.searchBox.CloseResultsWindow();
|
||||
parent.document.getElementById("MSearchField").focus();
|
||||
}
|
||||
else if (this.lastKey==13) // Enter
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function setKeyActions(elem,action)
|
||||
{
|
||||
elem.setAttribute('onkeydown',action);
|
||||
elem.setAttribute('onkeypress',action);
|
||||
elem.setAttribute('onkeyup',action);
|
||||
}
|
||||
|
||||
function setClassAttr(elem,attr)
|
||||
{
|
||||
elem.setAttribute('class',attr);
|
||||
elem.setAttribute('className',attr);
|
||||
}
|
||||
|
||||
function createResults()
|
||||
{
|
||||
var results = document.getElementById("SRResults");
|
||||
for (var e=0; e<searchData.length; e++)
|
||||
{
|
||||
var id = searchData[e][0];
|
||||
var srResult = document.createElement('div');
|
||||
srResult.setAttribute('id','SR_'+id);
|
||||
setClassAttr(srResult,'SRResult');
|
||||
var srEntry = document.createElement('div');
|
||||
setClassAttr(srEntry,'SREntry');
|
||||
var srLink = document.createElement('a');
|
||||
srLink.setAttribute('id','Item'+e);
|
||||
setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
|
||||
setClassAttr(srLink,'SRSymbol');
|
||||
srLink.innerHTML = searchData[e][1][0];
|
||||
srEntry.appendChild(srLink);
|
||||
if (searchData[e][1].length==2) // single result
|
||||
{
|
||||
srLink.setAttribute('href',searchData[e][1][1][0]);
|
||||
if (searchData[e][1][1][1])
|
||||
{
|
||||
srLink.setAttribute('target','_parent');
|
||||
}
|
||||
var srScope = document.createElement('span');
|
||||
setClassAttr(srScope,'SRScope');
|
||||
srScope.innerHTML = searchData[e][1][1][2];
|
||||
srEntry.appendChild(srScope);
|
||||
}
|
||||
else // multiple results
|
||||
{
|
||||
srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
|
||||
var srChildren = document.createElement('div');
|
||||
setClassAttr(srChildren,'SRChildren');
|
||||
for (var c=0; c<searchData[e][1].length-1; c++)
|
||||
{
|
||||
var srChild = document.createElement('a');
|
||||
srChild.setAttribute('id','Item'+e+'_c'+c);
|
||||
setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
|
||||
setClassAttr(srChild,'SRScope');
|
||||
srChild.setAttribute('href',searchData[e][1][c+1][0]);
|
||||
if (searchData[e][1][c+1][1])
|
||||
{
|
||||
srChild.setAttribute('target','_parent');
|
||||
}
|
||||
srChild.innerHTML = searchData[e][1][c+1][2];
|
||||
srChildren.appendChild(srChild);
|
||||
}
|
||||
srEntry.appendChild(srChildren);
|
||||
}
|
||||
srResult.appendChild(srEntry);
|
||||
results.appendChild(srResult);
|
||||
}
|
||||
}
|
||||
|
||||
function init_search()
|
||||
{
|
||||
var results = document.getElementById("MSearchSelectWindow");
|
||||
for (var key in indexSectionLabels)
|
||||
{
|
||||
var link = document.createElement('a');
|
||||
link.setAttribute('class','SelectItem');
|
||||
link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
|
||||
link.href='javascript:void(0)';
|
||||
link.innerHTML='<span class="SelectionMark"> </span>'+indexSectionLabels[key];
|
||||
results.appendChild(link);
|
||||
}
|
||||
searchBox.OnSelectItem(0);
|
||||
}
|
||||
/* @license-end */
|
||||
BIN
lib/epdiy/doc/html/search/search_l.png
Normal file
|
After Width: | Height: | Size: 567 B |
BIN
lib/epdiy/doc/html/search/search_m.png
Normal file
|
After Width: | Height: | Size: 158 B |
BIN
lib/epdiy/doc/html/search/search_r.png
Normal file
|
After Width: | Height: | Size: 553 B |
12
lib/epdiy/doc/html/search/searchdata.js
Normal file
@@ -0,0 +1,12 @@
|
||||
var indexSectionsWithContent =
|
||||
{
|
||||
};
|
||||
|
||||
var indexSectionNames =
|
||||
{
|
||||
};
|
||||
|
||||
var indexSectionLabels =
|
||||
{
|
||||
};
|
||||
|
||||
BIN
lib/epdiy/doc/html/splitbar.png
Normal file
|
After Width: | Height: | Size: 314 B |
BIN
lib/epdiy/doc/html/sync_off.png
Normal file
|
After Width: | Height: | Size: 853 B |
BIN
lib/epdiy/doc/html/sync_on.png
Normal file
|
After Width: | Height: | Size: 845 B |
BIN
lib/epdiy/doc/html/tab_a.png
Normal file
|
After Width: | Height: | Size: 142 B |
BIN
lib/epdiy/doc/html/tab_b.png
Normal file
|
After Width: | Height: | Size: 169 B |
BIN
lib/epdiy/doc/html/tab_h.png
Normal file
|
After Width: | Height: | Size: 177 B |
BIN
lib/epdiy/doc/html/tab_s.png
Normal file
|
After Width: | Height: | Size: 184 B |
1
lib/epdiy/doc/html/tabs.css
Normal file
23
lib/epdiy/doc/latex/Makefile
Normal file
@@ -0,0 +1,23 @@
|
||||
LATEX_CMD=pdflatex
|
||||
|
||||
all: refman.pdf
|
||||
|
||||
pdf: refman.pdf
|
||||
|
||||
refman.pdf: clean refman.tex
|
||||
$(LATEX_CMD) refman
|
||||
makeindex refman.idx
|
||||
$(LATEX_CMD) refman
|
||||
latex_count=8 ; \
|
||||
while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
|
||||
do \
|
||||
echo "Rerunning latex...." ;\
|
||||
$(LATEX_CMD) refman ;\
|
||||
latex_count=`expr $$latex_count - 1` ;\
|
||||
done
|
||||
makeindex refman.idx
|
||||
$(LATEX_CMD) refman
|
||||
|
||||
|
||||
clean:
|
||||
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf
|
||||
576
lib/epdiy/doc/latex/doxygen.sty
Normal file
@@ -0,0 +1,576 @@
|
||||
\NeedsTeXFormat{LaTeX2e}
|
||||
\ProvidesPackage{doxygen}
|
||||
|
||||
% Packages used by this style file
|
||||
\RequirePackage{alltt}
|
||||
%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
|
||||
\RequirePackage{calc}
|
||||
\RequirePackage{float}
|
||||
%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
|
||||
\RequirePackage{verbatim}
|
||||
\RequirePackage[table]{xcolor}
|
||||
\RequirePackage{longtable_doxygen}
|
||||
\RequirePackage{tabu_doxygen}
|
||||
\RequirePackage{fancyvrb}
|
||||
\RequirePackage{tabularx}
|
||||
\RequirePackage{multirow}
|
||||
\RequirePackage{hanging}
|
||||
\RequirePackage{ifpdf}
|
||||
\RequirePackage{adjustbox}
|
||||
\RequirePackage{amssymb}
|
||||
\RequirePackage{stackengine}
|
||||
\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis
|
||||
|
||||
%---------- Internal commands used in this style file ----------------
|
||||
|
||||
\newcommand{\ensurespace}[1]{%
|
||||
\begingroup%
|
||||
\setlength{\dimen@}{#1}%
|
||||
\vskip\z@\@plus\dimen@%
|
||||
\penalty -100\vskip\z@\@plus -\dimen@%
|
||||
\vskip\dimen@%
|
||||
\penalty 9999%
|
||||
\vskip -\dimen@%
|
||||
\vskip\z@skip% hide the previous |\vskip| from |\addvspace|
|
||||
\endgroup%
|
||||
}
|
||||
|
||||
\newcommand{\DoxyHorRuler}[1]{%
|
||||
\setlength{\parskip}{0ex plus 0ex minus 0ex}%
|
||||
\ifthenelse{#1=0}%
|
||||
{%
|
||||
\hrule%
|
||||
}%
|
||||
{%
|
||||
\hrulefilll%
|
||||
}%
|
||||
}
|
||||
\newcommand{\DoxyLabelFont}{}
|
||||
\newcommand{\entrylabel}[1]{%
|
||||
{%
|
||||
\parbox[b]{\labelwidth-4pt}{%
|
||||
\makebox[0pt][l]{\DoxyLabelFont#1}%
|
||||
\vspace{1.5\baselineskip}%
|
||||
}%
|
||||
}%
|
||||
}
|
||||
|
||||
\newenvironment{DoxyDesc}[1]{%
|
||||
\ensurespace{4\baselineskip}%
|
||||
\begin{list}{}{%
|
||||
\settowidth{\labelwidth}{20pt}%
|
||||
%\setlength{\parsep}{0pt}%
|
||||
\setlength{\itemsep}{0pt}%
|
||||
\setlength{\leftmargin}{\labelwidth+\labelsep}%
|
||||
\renewcommand{\makelabel}{\entrylabel}%
|
||||
}%
|
||||
\item[#1]%
|
||||
}{%
|
||||
\end{list}%
|
||||
}
|
||||
|
||||
\newsavebox{\xrefbox}
|
||||
\newlength{\xreflength}
|
||||
\newcommand{\xreflabel}[1]{%
|
||||
\sbox{\xrefbox}{#1}%
|
||||
\setlength{\xreflength}{\wd\xrefbox}%
|
||||
\ifthenelse{\xreflength>\labelwidth}{%
|
||||
\begin{minipage}{\textwidth}%
|
||||
\setlength{\parindent}{0pt}%
|
||||
\hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
|
||||
\end{minipage}%
|
||||
}{%
|
||||
\parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
|
||||
}%
|
||||
}
|
||||
|
||||
%---------- Commands used by doxygen LaTeX output generator ----------
|
||||
|
||||
% Used by <pre> ... </pre>
|
||||
\newenvironment{DoxyPre}{%
|
||||
\small%
|
||||
\begin{alltt}%
|
||||
}{%
|
||||
\end{alltt}%
|
||||
\normalsize%
|
||||
}
|
||||
% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output.
|
||||
\newlength{\CodeWidthChar}
|
||||
\newlength{\CodeHeightChar}
|
||||
\settowidth{\CodeWidthChar}{?}
|
||||
\settoheight{\CodeHeightChar}{?}
|
||||
% Necessary for hanging indent
|
||||
\newlength{\DoxyCodeWidth}
|
||||
|
||||
\newcommand\DoxyCodeLine[1]{\hangpara{\DoxyCodeWidth}{1}{#1}\par}
|
||||
|
||||
\newcommand\NiceSpace{%
|
||||
\discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}%
|
||||
}
|
||||
|
||||
% Used by @code ... @endcode
|
||||
\newenvironment{DoxyCode}[1]{%
|
||||
\par%
|
||||
\scriptsize%
|
||||
\normalfont\ttfamily%
|
||||
\rightskip0pt plus 1fil%
|
||||
\settowidth{\DoxyCodeWidth}{000000}%
|
||||
\settowidth{\CodeWidthChar}{?}%
|
||||
\settoheight{\CodeHeightChar}{?}%
|
||||
\setlength{\parskip}{0ex plus 0ex minus 0ex}%
|
||||
\ifthenelse{\equal{#1}{0}}
|
||||
{
|
||||
{\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces%
|
||||
}
|
||||
{
|
||||
{\lccode`~32 \lowercase{\global\let~}}\obeyspaces%
|
||||
}
|
||||
|
||||
}{%
|
||||
\normalfont%
|
||||
\normalsize%
|
||||
\settowidth{\CodeWidthChar}{?}%
|
||||
\settoheight{\CodeHeightChar}{?}%
|
||||
}
|
||||
|
||||
% Redefining not defined characters, i.e. "Replacement Character" in tex output.
|
||||
\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{%
|
||||
\textcolor{white}{\sffamily\bfseries\small ?}}{%
|
||||
\rotatebox{45}{$\blacksquare$}}}}
|
||||
|
||||
% Used by @example, @include, @includelineno and @dontinclude
|
||||
\newenvironment{DoxyCodeInclude}[1]{%
|
||||
\DoxyCode{#1}%
|
||||
}{%
|
||||
\endDoxyCode%
|
||||
}
|
||||
|
||||
% Used by @verbatim ... @endverbatim
|
||||
\newenvironment{DoxyVerb}{%
|
||||
\footnotesize%
|
||||
\verbatim%
|
||||
}{%
|
||||
\endverbatim%
|
||||
\normalsize%
|
||||
}
|
||||
|
||||
% Used by @verbinclude
|
||||
\newenvironment{DoxyVerbInclude}{%
|
||||
\DoxyVerb%
|
||||
}{%
|
||||
\endDoxyVerb%
|
||||
}
|
||||
|
||||
% Used by numbered lists (using '-#' or <ol> ... </ol>)
|
||||
\newenvironment{DoxyEnumerate}{%
|
||||
\enumerate%
|
||||
}{%
|
||||
\endenumerate%
|
||||
}
|
||||
|
||||
% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
|
||||
\newenvironment{DoxyItemize}{%
|
||||
\itemize%
|
||||
}{%
|
||||
\enditemize%
|
||||
}
|
||||
|
||||
% Used by description lists (using <dl> ... </dl>)
|
||||
\newenvironment{DoxyDescription}{%
|
||||
\description%
|
||||
}{%
|
||||
\enddescription%
|
||||
}
|
||||
|
||||
% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
|
||||
% (only if caption is specified)
|
||||
\newenvironment{DoxyImage}{%
|
||||
\begin{figure}[H]%
|
||||
\begin{center}%
|
||||
}{%
|
||||
\end{center}%
|
||||
\end{figure}%
|
||||
}
|
||||
|
||||
% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
|
||||
% (only if no caption is specified)
|
||||
\newenvironment{DoxyImageNoCaption}{%
|
||||
\begin{center}%
|
||||
}{%
|
||||
\end{center}%
|
||||
}
|
||||
|
||||
% Used by @image
|
||||
% (only if inline is specified)
|
||||
\newenvironment{DoxyInlineImage}{%
|
||||
}{%
|
||||
}
|
||||
|
||||
% Used by @attention
|
||||
\newenvironment{DoxyAttention}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @author and @authors
|
||||
\newenvironment{DoxyAuthor}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @date
|
||||
\newenvironment{DoxyDate}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @invariant
|
||||
\newenvironment{DoxyInvariant}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @note
|
||||
\newenvironment{DoxyNote}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @post
|
||||
\newenvironment{DoxyPostcond}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @pre
|
||||
\newenvironment{DoxyPrecond}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @copyright
|
||||
\newenvironment{DoxyCopyright}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @remark
|
||||
\newenvironment{DoxyRemark}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @return and @returns
|
||||
\newenvironment{DoxyReturn}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @since
|
||||
\newenvironment{DoxySince}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @see
|
||||
\newenvironment{DoxySeeAlso}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @version
|
||||
\newenvironment{DoxyVersion}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @warning
|
||||
\newenvironment{DoxyWarning}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by @internal
|
||||
\newenvironment{DoxyInternal}[1]{%
|
||||
\paragraph*{#1}%
|
||||
}{%
|
||||
}
|
||||
|
||||
% Used by @par and @paragraph
|
||||
\newenvironment{DoxyParagraph}[1]{%
|
||||
\begin{DoxyDesc}{#1}%
|
||||
}{%
|
||||
\end{DoxyDesc}%
|
||||
}
|
||||
|
||||
% Used by parameter lists
|
||||
\newenvironment{DoxyParams}[2][]{%
|
||||
\tabulinesep=1mm%
|
||||
\par%
|
||||
\ifthenelse{\equal{#1}{}}%
|
||||
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description
|
||||
{\ifthenelse{\equal{#1}{1}}%
|
||||
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc
|
||||
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc
|
||||
}
|
||||
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
|
||||
\hline%
|
||||
\endfirsthead%
|
||||
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
|
||||
\hline%
|
||||
\endhead%
|
||||
}{%
|
||||
\end{longtabu*}%
|
||||
\vspace{6pt}%
|
||||
}
|
||||
|
||||
% Used for fields of simple structs
|
||||
\newenvironment{DoxyFields}[1]{%
|
||||
\tabulinesep=1mm%
|
||||
\par%
|
||||
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}%
|
||||
\multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||
\hline%
|
||||
\endfirsthead%
|
||||
\multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||
\hline%
|
||||
\endhead%
|
||||
}{%
|
||||
\end{longtabu*}%
|
||||
\vspace{6pt}%
|
||||
}
|
||||
|
||||
% Used for fields simple class style enums
|
||||
\newenvironment{DoxyEnumFields}[1]{%
|
||||
\tabulinesep=1mm%
|
||||
\par%
|
||||
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
|
||||
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||
\hline%
|
||||
\endfirsthead%
|
||||
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||
\hline%
|
||||
\endhead%
|
||||
}{%
|
||||
\end{longtabu*}%
|
||||
\vspace{6pt}%
|
||||
}
|
||||
|
||||
% Used for parameters within a detailed function description
|
||||
\newenvironment{DoxyParamCaption}{%
|
||||
\renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}%
|
||||
}{%
|
||||
}
|
||||
|
||||
% Used by return value lists
|
||||
\newenvironment{DoxyRetVals}[1]{%
|
||||
\tabulinesep=1mm%
|
||||
\par%
|
||||
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
|
||||
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||
\hline%
|
||||
\endfirsthead%
|
||||
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||
\hline%
|
||||
\endhead%
|
||||
}{%
|
||||
\end{longtabu*}%
|
||||
\vspace{6pt}%
|
||||
}
|
||||
|
||||
% Used by exception lists
|
||||
\newenvironment{DoxyExceptions}[1]{%
|
||||
\tabulinesep=1mm%
|
||||
\par%
|
||||
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
|
||||
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||
\hline%
|
||||
\endfirsthead%
|
||||
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||
\hline%
|
||||
\endhead%
|
||||
}{%
|
||||
\end{longtabu*}%
|
||||
\vspace{6pt}%
|
||||
}
|
||||
|
||||
% Used by template parameter lists
|
||||
\newenvironment{DoxyTemplParams}[1]{%
|
||||
\tabulinesep=1mm%
|
||||
\par%
|
||||
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
|
||||
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||
\hline%
|
||||
\endfirsthead%
|
||||
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||
\hline%
|
||||
\endhead%
|
||||
}{%
|
||||
\end{longtabu*}%
|
||||
\vspace{6pt}%
|
||||
}
|
||||
|
||||
% Used for member lists
|
||||
\newenvironment{DoxyCompactItemize}{%
|
||||
\begin{itemize}%
|
||||
\setlength{\itemsep}{-3pt}%
|
||||
\setlength{\parsep}{0pt}%
|
||||
\setlength{\topsep}{0pt}%
|
||||
\setlength{\partopsep}{0pt}%
|
||||
}{%
|
||||
\end{itemize}%
|
||||
}
|
||||
|
||||
% Used for member descriptions
|
||||
\newenvironment{DoxyCompactList}{%
|
||||
\begin{list}{}{%
|
||||
\setlength{\leftmargin}{0.5cm}%
|
||||
\setlength{\itemsep}{0pt}%
|
||||
\setlength{\parsep}{0pt}%
|
||||
\setlength{\topsep}{0pt}%
|
||||
\renewcommand{\makelabel}{\hfill}%
|
||||
}%
|
||||
}{%
|
||||
\end{list}%
|
||||
}
|
||||
|
||||
% Used for reference lists (@bug, @deprecated, @todo, etc.)
|
||||
\newenvironment{DoxyRefList}{%
|
||||
\begin{list}{}{%
|
||||
\setlength{\labelwidth}{10pt}%
|
||||
\setlength{\leftmargin}{\labelwidth}%
|
||||
\addtolength{\leftmargin}{\labelsep}%
|
||||
\renewcommand{\makelabel}{\xreflabel}%
|
||||
}%
|
||||
}{%
|
||||
\end{list}%
|
||||
}
|
||||
|
||||
% Used by @bug, @deprecated, @todo, etc.
|
||||
\newenvironment{DoxyRefDesc}[1]{%
|
||||
\begin{list}{}{%
|
||||
\renewcommand\makelabel[1]{\textbf{##1}}%
|
||||
\settowidth\labelwidth{\makelabel{#1}}%
|
||||
\setlength\leftmargin{\labelwidth+\labelsep}%
|
||||
}%
|
||||
}{%
|
||||
\end{list}%
|
||||
}
|
||||
|
||||
% Used by parameter lists and simple sections
|
||||
\newenvironment{Desc}
|
||||
{\begin{list}{}{%
|
||||
\settowidth{\labelwidth}{20pt}%
|
||||
\setlength{\parsep}{0pt}%
|
||||
\setlength{\itemsep}{0pt}%
|
||||
\setlength{\leftmargin}{\labelwidth+\labelsep}%
|
||||
\renewcommand{\makelabel}{\entrylabel}%
|
||||
}
|
||||
}{%
|
||||
\end{list}%
|
||||
}
|
||||
|
||||
% Used by tables
|
||||
\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}%
|
||||
\newenvironment{TabularC}[1]%
|
||||
{\tabulinesep=1mm
|
||||
\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}%
|
||||
{\end{longtabu*}\par}%
|
||||
|
||||
\newenvironment{TabularNC}[1]%
|
||||
{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}%
|
||||
{\end{tabu}\par}%
|
||||
|
||||
% Used for member group headers
|
||||
\newenvironment{Indent}{%
|
||||
\begin{list}{}{%
|
||||
\setlength{\leftmargin}{0.5cm}%
|
||||
}%
|
||||
\item[]\ignorespaces%
|
||||
}{%
|
||||
\unskip%
|
||||
\end{list}%
|
||||
}
|
||||
|
||||
% Used when hyperlinks are turned off
|
||||
\newcommand{\doxyref}[3]{%
|
||||
\textbf{#1} (\textnormal{#2}\,\pageref{#3})%
|
||||
}
|
||||
|
||||
% Used to link to a table when hyperlinks are turned on
|
||||
\newcommand{\doxytablelink}[2]{%
|
||||
\ref{#1}%
|
||||
}
|
||||
|
||||
% Used to link to a table when hyperlinks are turned off
|
||||
\newcommand{\doxytableref}[3]{%
|
||||
\ref{#3}%
|
||||
}
|
||||
|
||||
% Used by @addindex
|
||||
\newcommand{\lcurly}{\{}
|
||||
\newcommand{\rcurly}{\}}
|
||||
|
||||
% Colors used for syntax highlighting
|
||||
\definecolor{comment}{rgb}{0.5,0.0,0.0}
|
||||
\definecolor{keyword}{rgb}{0.0,0.5,0.0}
|
||||
\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
|
||||
\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
|
||||
\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
|
||||
\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
|
||||
\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
|
||||
\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
|
||||
\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
|
||||
\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
|
||||
\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
|
||||
|
||||
% Color used for table heading
|
||||
\newcommand{\tableheadbgcolor}{lightgray}%
|
||||
|
||||
% Version of hypertarget with correct landing location
|
||||
\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}}
|
||||
|
||||
% possibility to have sections etc. be within the margins
|
||||
% unfortunately had to copy part of book.cls and add \raggedright
|
||||
\makeatletter
|
||||
\newcommand\doxysection{\@startsection {section}{1}{\z@}%
|
||||
{-3.5ex \@plus -1ex \@minus -.2ex}%
|
||||
{2.3ex \@plus.2ex}%
|
||||
{\raggedright\normalfont\Large\bfseries}}
|
||||
\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}%
|
||||
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
||||
{1.5ex \@plus .2ex}%
|
||||
{\raggedright\normalfont\large\bfseries}}
|
||||
\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}%
|
||||
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
||||
{1.5ex \@plus .2ex}%
|
||||
{\raggedright\normalfont\normalsize\bfseries}}
|
||||
\newcommand\doxyparagraph{\@startsection{paragraph}{4}{\z@}%
|
||||
{3.25ex \@plus1ex \@minus.2ex}%
|
||||
{-1em}%
|
||||
{\raggedright\normalfont\normalsize\bfseries}}
|
||||
\newcommand\doxysubparagraph{\@startsection{subparagraph}{5}{\parindent}%
|
||||
{3.25ex \@plus1ex \@minus .2ex}%
|
||||
{-1em}%
|
||||
{\raggedright\normalfont\normalsize\bfseries}}
|
||||
\makeatother
|
||||
% Define caption that is also suitable in a table
|
||||
\makeatletter
|
||||
\def\doxyfigcaption{%
|
||||
\refstepcounter{figure}%
|
||||
\@dblarg{\@caption{figure}}}
|
||||
\makeatother
|
||||
448
lib/epdiy/doc/latex/longtable_doxygen.sty
Normal file
@@ -0,0 +1,448 @@
|
||||
%%
|
||||
%% This is file `longtable.sty',
|
||||
%% generated with the docstrip utility.
|
||||
%%
|
||||
%% The original source files were:
|
||||
%%
|
||||
%% longtable.dtx (with options: `package')
|
||||
%%
|
||||
%% This is a generated file.
|
||||
%%
|
||||
%% The source is maintained by the LaTeX Project team and bug
|
||||
%% reports for it can be opened at http://latex-project.org/bugs.html
|
||||
%% (but please observe conditions on bug reports sent to that address!)
|
||||
%%
|
||||
%% Copyright 1993-2016
|
||||
%% The LaTeX3 Project and any individual authors listed elsewhere
|
||||
%% in this file.
|
||||
%%
|
||||
%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'.
|
||||
%% --------------------------------------------------------------------------
|
||||
%%
|
||||
%% It may be distributed and/or modified under the
|
||||
%% conditions of the LaTeX Project Public License, either version 1.3c
|
||||
%% of this license or (at your option) any later version.
|
||||
%% The latest version of this license is in
|
||||
%% http://www.latex-project.org/lppl.txt
|
||||
%% and version 1.3c or later is part of all distributions of LaTeX
|
||||
%% version 2005/12/01 or later.
|
||||
%%
|
||||
%% This file may only be distributed together with a copy of the LaTeX
|
||||
%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle'
|
||||
%% without such generated files.
|
||||
%%
|
||||
%% The list of all files belonging to the LaTeX `Tools Bundle' is
|
||||
%% given in the file `manifest.txt'.
|
||||
%%
|
||||
%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle
|
||||
\NeedsTeXFormat{LaTeX2e}[1995/06/01]
|
||||
\ProvidesPackage{longtable_doxygen}
|
||||
[2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen]
|
||||
\def\LT@err{\PackageError{longtable}}
|
||||
\def\LT@warn{\PackageWarning{longtable}}
|
||||
\def\LT@final@warn{%
|
||||
\AtEndDocument{%
|
||||
\LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}%
|
||||
\global\let\LT@final@warn\relax}
|
||||
\DeclareOption{errorshow}{%
|
||||
\def\LT@warn{\PackageInfo{longtable}}}
|
||||
\DeclareOption{pausing}{%
|
||||
\def\LT@warn#1{%
|
||||
\LT@err{#1}{This is not really an error}}}
|
||||
\DeclareOption{set}{}
|
||||
\DeclareOption{final}{}
|
||||
\ProcessOptions
|
||||
\newskip\LTleft \LTleft=\fill
|
||||
\newskip\LTright \LTright=\fill
|
||||
\newskip\LTpre \LTpre=\bigskipamount
|
||||
\newskip\LTpost \LTpost=\bigskipamount
|
||||
\newcount\LTchunksize \LTchunksize=20
|
||||
\let\c@LTchunksize\LTchunksize
|
||||
\newdimen\LTcapwidth \LTcapwidth=4in
|
||||
\newbox\LT@head
|
||||
\newbox\LT@firsthead
|
||||
\newbox\LT@foot
|
||||
\newbox\LT@lastfoot
|
||||
\newcount\LT@cols
|
||||
\newcount\LT@rows
|
||||
\newcounter{LT@tables}
|
||||
\newcounter{LT@chunks}[LT@tables]
|
||||
\ifx\c@table\undefined
|
||||
\newcounter{table}
|
||||
\def\fnum@table{\tablename~\thetable}
|
||||
\fi
|
||||
\ifx\tablename\undefined
|
||||
\def\tablename{Table}
|
||||
\fi
|
||||
\newtoks\LT@p@ftn
|
||||
\mathchardef\LT@end@pen=30000
|
||||
\def\longtable{%
|
||||
\par
|
||||
\ifx\multicols\@undefined
|
||||
\else
|
||||
\ifnum\col@number>\@ne
|
||||
\@twocolumntrue
|
||||
\fi
|
||||
\fi
|
||||
\if@twocolumn
|
||||
\LT@err{longtable not in 1-column mode}\@ehc
|
||||
\fi
|
||||
\begingroup
|
||||
\@ifnextchar[\LT@array{\LT@array[x]}}
|
||||
\def\LT@array[#1]#2{%
|
||||
\refstepcounter{table}\stepcounter{LT@tables}%
|
||||
\if l#1%
|
||||
\LTleft\z@ \LTright\fill
|
||||
\else\if r#1%
|
||||
\LTleft\fill \LTright\z@
|
||||
\else\if c#1%
|
||||
\LTleft\fill \LTright\fill
|
||||
\fi\fi\fi
|
||||
\let\LT@mcol\multicolumn
|
||||
\let\LT@@tabarray\@tabarray
|
||||
\let\LT@@hl\hline
|
||||
\def\@tabarray{%
|
||||
\let\hline\LT@@hl
|
||||
\LT@@tabarray}%
|
||||
\let\\\LT@tabularcr\let\tabularnewline\\%
|
||||
\def\newpage{\noalign{\break}}%
|
||||
\def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
|
||||
\def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
|
||||
\let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
|
||||
\@tempdima\ht\strutbox
|
||||
\let\@endpbox\LT@endpbox
|
||||
\ifx\extrarowheight\@undefined
|
||||
\let\@acol\@tabacol
|
||||
\let\@classz\@tabclassz \let\@classiv\@tabclassiv
|
||||
\def\@startpbox{\vtop\LT@startpbox}%
|
||||
\let\@@startpbox\@startpbox
|
||||
\let\@@endpbox\@endpbox
|
||||
\let\LT@LL@FM@cr\@tabularcr
|
||||
\else
|
||||
\advance\@tempdima\extrarowheight
|
||||
\col@sep\tabcolsep
|
||||
\let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
|
||||
\fi
|
||||
\setbox\@arstrutbox\hbox{\vrule
|
||||
\@height \arraystretch \@tempdima
|
||||
\@depth \arraystretch \dp \strutbox
|
||||
\@width \z@}%
|
||||
\let\@sharp##\let\protect\relax
|
||||
\begingroup
|
||||
\@mkpream{#2}%
|
||||
\xdef\LT@bchunk{%
|
||||
\global\advance\c@LT@chunks\@ne
|
||||
\global\LT@rows\z@\setbox\z@\vbox\bgroup
|
||||
\LT@setprevdepth
|
||||
\tabskip\LTleft \noexpand\halign to\hsize\bgroup
|
||||
\tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
|
||||
\endgroup
|
||||
\expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
|
||||
\LT@make@row
|
||||
\m@th\let\par\@empty
|
||||
\everycr{}\lineskip\z@\baselineskip\z@
|
||||
\LT@bchunk}
|
||||
\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}}
|
||||
\def\LT@start{%
|
||||
\let\LT@start\endgraf
|
||||
\endgraf\penalty\z@\vskip\LTpre
|
||||
\dimen@\pagetotal
|
||||
\advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
|
||||
\advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
|
||||
\advance\dimen@ \ht\LT@foot
|
||||
\dimen@ii\vfuzz
|
||||
\vfuzz\maxdimen
|
||||
\setbox\tw@\copy\z@
|
||||
\setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
|
||||
\setbox\tw@\vbox{\unvbox\tw@}%
|
||||
\vfuzz\dimen@ii
|
||||
\advance\dimen@ \ht
|
||||
\ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
|
||||
\advance\dimen@\dp
|
||||
\ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
|
||||
\advance\dimen@ -\pagegoal
|
||||
\ifdim \dimen@>\z@\vfil\break\fi
|
||||
\global\@colroom\@colht
|
||||
\ifvoid\LT@foot\else
|
||||
\advance\vsize-\ht\LT@foot
|
||||
\global\advance\@colroom-\ht\LT@foot
|
||||
\dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
|
||||
\maxdepth\z@
|
||||
\fi
|
||||
\ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak
|
||||
\output{\LT@output}}
|
||||
\def\endlongtable{%
|
||||
\crcr
|
||||
\noalign{%
|
||||
\let\LT@entry\LT@entry@chop
|
||||
\xdef\LT@save@row{\LT@save@row}}%
|
||||
\LT@echunk
|
||||
\LT@start
|
||||
\unvbox\z@
|
||||
\LT@get@widths
|
||||
\if@filesw
|
||||
{\let\LT@entry\LT@entry@write\immediate\write\@auxout{%
|
||||
\gdef\expandafter\noexpand
|
||||
\csname LT@\romannumeral\c@LT@tables\endcsname
|
||||
{\LT@save@row}}}%
|
||||
\fi
|
||||
\ifx\LT@save@row\LT@@save@row
|
||||
\else
|
||||
\LT@warn{Column \@width s have changed\MessageBreak
|
||||
in table \thetable}%
|
||||
\LT@final@warn
|
||||
\fi
|
||||
\endgraf\penalty -\LT@end@pen
|
||||
\endgroup
|
||||
\global\@mparbottom\z@
|
||||
\pagegoal\vsize
|
||||
\endgraf\penalty\z@\addvspace\LTpost
|
||||
\ifvoid\footins\else\insert\footins{}\fi}
|
||||
\def\LT@nofcols#1&{%
|
||||
\futurelet\@let@token\LT@n@fcols}
|
||||
\def\LT@n@fcols{%
|
||||
\advance\LT@cols\@ne
|
||||
\ifx\@let@token\LT@nofcols
|
||||
\expandafter\@gobble
|
||||
\else
|
||||
\expandafter\LT@nofcols
|
||||
\fi}
|
||||
\def\LT@tabularcr{%
|
||||
\relax\iffalse{\fi\ifnum0=`}\fi
|
||||
\@ifstar
|
||||
{\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr
|
||||
\LT@t@bularcr}%
|
||||
{\LT@t@bularcr}}
|
||||
\let\LT@crcr\crcr
|
||||
\let\LT@setprevdepth\relax
|
||||
\def\LT@t@bularcr{%
|
||||
\global\advance\LT@rows\@ne
|
||||
\ifnum\LT@rows=\LTchunksize
|
||||
\gdef\LT@setprevdepth{%
|
||||
\prevdepth\z@\global
|
||||
\global\let\LT@setprevdepth\relax}%
|
||||
\expandafter\LT@xtabularcr
|
||||
\else
|
||||
\ifnum0=`{}\fi
|
||||
\expandafter\LT@LL@FM@cr
|
||||
\fi}
|
||||
\def\LT@xtabularcr{%
|
||||
\@ifnextchar[\LT@argtabularcr\LT@ntabularcr}
|
||||
\def\LT@ntabularcr{%
|
||||
\ifnum0=`{}\fi
|
||||
\LT@echunk
|
||||
\LT@start
|
||||
\unvbox\z@
|
||||
\LT@get@widths
|
||||
\LT@bchunk}
|
||||
\def\LT@argtabularcr[#1]{%
|
||||
\ifnum0=`{}\fi
|
||||
\ifdim #1>\z@
|
||||
\unskip\@xargarraycr{#1}%
|
||||
\else
|
||||
\@yargarraycr{#1}%
|
||||
\fi
|
||||
\LT@echunk
|
||||
\LT@start
|
||||
\unvbox\z@
|
||||
\LT@get@widths
|
||||
\LT@bchunk}
|
||||
\def\LT@echunk{%
|
||||
\crcr\LT@save@row\cr\egroup
|
||||
\global\setbox\@ne\lastbox
|
||||
\unskip
|
||||
\egroup}
|
||||
\def\LT@entry#1#2{%
|
||||
\ifhmode\@firstofone{&}\fi\omit
|
||||
\ifnum#1=\c@LT@chunks
|
||||
\else
|
||||
\kern#2\relax
|
||||
\fi}
|
||||
\def\LT@entry@chop#1#2{%
|
||||
\noexpand\LT@entry
|
||||
{\ifnum#1>\c@LT@chunks
|
||||
1}{0pt%
|
||||
\else
|
||||
#1}{#2%
|
||||
\fi}}
|
||||
\def\LT@entry@write{%
|
||||
\noexpand\LT@entry^^J%
|
||||
\@spaces}
|
||||
\def\LT@kill{%
|
||||
\LT@echunk
|
||||
\LT@get@widths
|
||||
\expandafter\LT@rebox\LT@bchunk}
|
||||
\def\LT@rebox#1\bgroup{%
|
||||
#1\bgroup
|
||||
\unvbox\z@
|
||||
\unskip
|
||||
\setbox\z@\lastbox}
|
||||
\def\LT@blank@row{%
|
||||
\xdef\LT@save@row{\expandafter\LT@build@blank
|
||||
\romannumeral\number\LT@cols 001 }}
|
||||
\def\LT@build@blank#1{%
|
||||
\if#1m%
|
||||
\noexpand\LT@entry{1}{0pt}%
|
||||
\expandafter\LT@build@blank
|
||||
\fi}
|
||||
\def\LT@make@row{%
|
||||
\global\expandafter\let\expandafter\LT@save@row
|
||||
\csname LT@\romannumeral\c@LT@tables\endcsname
|
||||
\ifx\LT@save@row\relax
|
||||
\LT@blank@row
|
||||
\else
|
||||
{\let\LT@entry\or
|
||||
\if!%
|
||||
\ifcase\expandafter\expandafter\expandafter\LT@cols
|
||||
\expandafter\@gobble\LT@save@row
|
||||
\or
|
||||
\else
|
||||
\relax
|
||||
\fi
|
||||
!%
|
||||
\else
|
||||
\aftergroup\LT@blank@row
|
||||
\fi}%
|
||||
\fi}
|
||||
\let\setlongtables\relax
|
||||
\def\LT@get@widths{%
|
||||
\setbox\tw@\hbox{%
|
||||
\unhbox\@ne
|
||||
\let\LT@old@row\LT@save@row
|
||||
\global\let\LT@save@row\@empty
|
||||
\count@\LT@cols
|
||||
\loop
|
||||
\unskip
|
||||
\setbox\tw@\lastbox
|
||||
\ifhbox\tw@
|
||||
\LT@def@row
|
||||
\advance\count@\m@ne
|
||||
\repeat}%
|
||||
\ifx\LT@@save@row\@undefined
|
||||
\let\LT@@save@row\LT@save@row
|
||||
\fi}
|
||||
\def\LT@def@row{%
|
||||
\let\LT@entry\or
|
||||
\edef\@tempa{%
|
||||
\ifcase\expandafter\count@\LT@old@row
|
||||
\else
|
||||
{1}{0pt}%
|
||||
\fi}%
|
||||
\let\LT@entry\relax
|
||||
\xdef\LT@save@row{%
|
||||
\LT@entry
|
||||
\expandafter\LT@max@sel\@tempa
|
||||
\LT@save@row}}
|
||||
\def\LT@max@sel#1#2{%
|
||||
{\ifdim#2=\wd\tw@
|
||||
#1%
|
||||
\else
|
||||
\number\c@LT@chunks
|
||||
\fi}%
|
||||
{\the\wd\tw@}}
|
||||
\def\LT@hline{%
|
||||
\noalign{\ifnum0=`}\fi
|
||||
\penalty\@M
|
||||
\futurelet\@let@token\LT@@hline}
|
||||
\def\LT@@hline{%
|
||||
\ifx\@let@token\hline
|
||||
\global\let\@gtempa\@gobble
|
||||
\gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}%
|
||||
\else
|
||||
\global\let\@gtempa\@empty
|
||||
\gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}%
|
||||
\fi
|
||||
\ifnum0=`{\fi}%
|
||||
\multispan\LT@cols
|
||||
\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
|
||||
\noalign{\LT@sep}%
|
||||
\multispan\LT@cols
|
||||
\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
|
||||
\noalign{\penalty\@M}%
|
||||
\@gtempa}
|
||||
\def\LT@caption{%
|
||||
\noalign\bgroup
|
||||
\@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n}
|
||||
\def\LT@c@ption#1[#2]#3{%
|
||||
\LT@makecaption#1\fnum@table{#3}%
|
||||
\def\@tempa{#2}%
|
||||
\ifx\@tempa\@empty\else
|
||||
{\let\\\space
|
||||
\addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}%
|
||||
\fi}
|
||||
\def\LT@capti@n{%
|
||||
\@ifstar
|
||||
{\egroup\LT@c@ption\@gobble[]}%
|
||||
{\egroup\@xdblarg{\LT@c@ption\@firstofone}}}
|
||||
\def\LT@makecaption#1#2#3{%
|
||||
\LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{%
|
||||
\sbox\@tempboxa{#1{#2: }#3}%
|
||||
\ifdim\wd\@tempboxa>\hsize
|
||||
#1{#2: }#3%
|
||||
\else
|
||||
\hbox to\hsize{\hfil\box\@tempboxa\hfil}%
|
||||
\fi
|
||||
\endgraf\vskip\baselineskip}%
|
||||
\hss}}}
|
||||
\def\LT@output{%
|
||||
\ifnum\outputpenalty <-\@Mi
|
||||
\ifnum\outputpenalty > -\LT@end@pen
|
||||
\LT@err{floats and marginpars not allowed in a longtable}\@ehc
|
||||
\else
|
||||
\setbox\z@\vbox{\unvbox\@cclv}%
|
||||
\ifdim \ht\LT@lastfoot>\ht\LT@foot
|
||||
\dimen@\pagegoal
|
||||
\advance\dimen@-\ht\LT@lastfoot
|
||||
\ifdim\dimen@<\ht\z@
|
||||
\setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}%
|
||||
\@makecol
|
||||
\@outputpage
|
||||
\setbox\z@\vbox{\box\LT@head}%
|
||||
\fi
|
||||
\fi
|
||||
\global\@colroom\@colht
|
||||
\global\vsize\@colht
|
||||
\vbox
|
||||
{\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
|
||||
\fi
|
||||
\else
|
||||
\setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
|
||||
\@makecol
|
||||
\@outputpage
|
||||
\global\vsize\@colroom
|
||||
\copy\LT@head\nobreak
|
||||
\fi}
|
||||
\def\LT@end@hd@ft#1{%
|
||||
\LT@echunk
|
||||
\ifx\LT@start\endgraf
|
||||
\LT@err
|
||||
{Longtable head or foot not at start of table}%
|
||||
{Increase LTchunksize}%
|
||||
\fi
|
||||
\setbox#1\box\z@
|
||||
\LT@get@widths
|
||||
\LT@bchunk}
|
||||
\def\endfirsthead{\LT@end@hd@ft\LT@firsthead}
|
||||
\def\endhead{\LT@end@hd@ft\LT@head}
|
||||
\def\endfoot{\LT@end@hd@ft\LT@foot}
|
||||
\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot}
|
||||
\def\LT@startpbox#1{%
|
||||
\bgroup
|
||||
\let\@footnotetext\LT@p@ftntext
|
||||
\setlength\hsize{#1}%
|
||||
\@arrayparboxrestore
|
||||
\vrule \@height \ht\@arstrutbox \@width \z@}
|
||||
\def\LT@endpbox{%
|
||||
\@finalstrut\@arstrutbox
|
||||
\egroup
|
||||
\the\LT@p@ftn
|
||||
\global\LT@p@ftn{}%
|
||||
\hfil}
|
||||
\def\LT@p@ftntext#1{%
|
||||
\edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}%
|
||||
\global\LT@p@ftn\expandafter{\@tempa{#1}}}%
|
||||
|
||||
\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen}
|
||||
\endinput
|
||||
%%
|
||||
%% End of file `longtable.sty'.
|
||||
184
lib/epdiy/doc/latex/refman.tex
Normal file
@@ -0,0 +1,184 @@
|
||||
\let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage}\documentclass[twoside]{book}
|
||||
|
||||
%% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package
|
||||
\usepackage{ifthen}
|
||||
\ifx\requestedLaTeXdate\undefined
|
||||
\usepackage{array}
|
||||
\else
|
||||
\usepackage{array}[=2016-10-06]
|
||||
\fi
|
||||
%%
|
||||
% Packages required by doxygen
|
||||
\usepackage{fixltx2e}
|
||||
\usepackage{calc}
|
||||
\usepackage{doxygen}
|
||||
\usepackage{graphicx}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage{makeidx}
|
||||
\usepackage{multicol}
|
||||
\usepackage{multirow}
|
||||
\PassOptionsToPackage{warn}{textcomp}
|
||||
\usepackage{textcomp}
|
||||
\usepackage[nointegrals]{wasysym}
|
||||
\usepackage[table]{xcolor}
|
||||
\usepackage{ifpdf,ifxetex}
|
||||
|
||||
% Font selection
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage[scaled=.90]{helvet}
|
||||
\usepackage{courier}
|
||||
\usepackage{amssymb}
|
||||
\usepackage{sectsty}
|
||||
\renewcommand{\familydefault}{\sfdefault}
|
||||
\allsectionsfont{%
|
||||
\fontseries{bc}\selectfont%
|
||||
\color{darkgray}%
|
||||
}
|
||||
\renewcommand{\DoxyLabelFont}{%
|
||||
\fontseries{bc}\selectfont%
|
||||
\color{darkgray}%
|
||||
}
|
||||
\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}}
|
||||
|
||||
% Arguments of doxygenemoji:
|
||||
% 1) ':<text>:' form of the emoji, already "LaTeX"-escaped
|
||||
% 2) file with the name of the emoji without the .png extension
|
||||
% in case image exist use this otherwise use the ':<text>:' form
|
||||
\newcommand{\doxygenemoji}[2]{%
|
||||
\IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}%
|
||||
}
|
||||
% Page & text layout
|
||||
\usepackage{geometry}
|
||||
\geometry{%
|
||||
a4paper,%
|
||||
top=2.5cm,%
|
||||
bottom=2.5cm,%
|
||||
left=2.5cm,%
|
||||
right=2.5cm%
|
||||
}
|
||||
\tolerance=750
|
||||
\hfuzz=15pt
|
||||
\hbadness=750
|
||||
\setlength{\emergencystretch}{15pt}
|
||||
\setlength{\parindent}{0cm}
|
||||
\newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}}
|
||||
\newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}}
|
||||
\doxynormalparskip
|
||||
\makeatletter
|
||||
\renewcommand{\paragraph}{%
|
||||
\@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%
|
||||
\normalfont\normalsize\bfseries\SS@parafont%
|
||||
}%
|
||||
}
|
||||
\renewcommand{\subparagraph}{%
|
||||
\@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%
|
||||
\normalfont\normalsize\bfseries\SS@subparafont%
|
||||
}%
|
||||
}
|
||||
\makeatother
|
||||
|
||||
\makeatletter
|
||||
\newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@}
|
||||
\makeatother
|
||||
|
||||
% Headers & footers
|
||||
\usepackage{fancyhdr}
|
||||
\pagestyle{fancyplain}
|
||||
\fancyhead[LE]{\fancyplain{}{\bfseries\thepage}}
|
||||
\fancyhead[CE]{\fancyplain{}{}}
|
||||
\fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}}
|
||||
\fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}}
|
||||
\fancyhead[CO]{\fancyplain{}{}}
|
||||
\fancyhead[RO]{\fancyplain{}{\bfseries\thepage}}
|
||||
\fancyfoot[LE]{\fancyplain{}{}}
|
||||
\fancyfoot[CE]{\fancyplain{}{}}
|
||||
\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }}
|
||||
\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }}
|
||||
\fancyfoot[CO]{\fancyplain{}{}}
|
||||
\fancyfoot[RO]{\fancyplain{}{}}
|
||||
\renewcommand{\footrulewidth}{0.4pt}
|
||||
\renewcommand{\chaptermark}[1]{%
|
||||
\markboth{#1}{}%
|
||||
}
|
||||
\renewcommand{\sectionmark}[1]{%
|
||||
\markright{\thesection\ #1}%
|
||||
}
|
||||
|
||||
% Indices & bibliography
|
||||
\usepackage{natbib}
|
||||
\usepackage[titles]{tocloft}
|
||||
\setcounter{tocdepth}{3}
|
||||
\setcounter{secnumdepth}{5}
|
||||
\makeindex
|
||||
|
||||
\usepackage{newunicodechar}
|
||||
\newunicodechar{⁻}{${}^{-}$}% Superscript minus
|
||||
\newunicodechar{²}{${}^{2}$}% Superscript two
|
||||
\newunicodechar{³}{${}^{3}$}% Superscript three
|
||||
|
||||
% Hyperlinks (required, but should be loaded last)
|
||||
\ifpdf
|
||||
\usepackage[pdftex,pagebackref=true]{hyperref}
|
||||
\else
|
||||
\ifxetex
|
||||
\usepackage[pagebackref=true]{hyperref}
|
||||
\else
|
||||
\usepackage[ps2pdf,pagebackref=true]{hyperref}
|
||||
\fi
|
||||
\fi
|
||||
|
||||
\hypersetup{%
|
||||
colorlinks=true,%
|
||||
linkcolor=blue,%
|
||||
citecolor=blue,%
|
||||
unicode%
|
||||
}
|
||||
|
||||
% Custom commands
|
||||
\newcommand{\clearemptydoublepage}{%
|
||||
\newpage{\pagestyle{empty}\cleardoublepage}%
|
||||
}
|
||||
|
||||
\usepackage{caption}
|
||||
\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}
|
||||
|
||||
\usepackage{etoc}
|
||||
\etocsettocstyle{\doxytocparskip}{\doxynormalparskip}
|
||||
\renewcommand{\numberline}[1]{#1~}
|
||||
%===== C O N T E N T S =====
|
||||
|
||||
\begin{document}
|
||||
|
||||
% Titlepage & ToC
|
||||
\hypersetup{pageanchor=false,
|
||||
bookmarksnumbered=true,
|
||||
pdfencoding=unicode
|
||||
}
|
||||
\pagenumbering{alph}
|
||||
\begin{titlepage}
|
||||
\vspace*{7cm}
|
||||
\begin{center}%
|
||||
{\Large My Project }\\
|
||||
\vspace*{1cm}
|
||||
{\large Generated by Doxygen 1.8.17}\\
|
||||
\end{center}
|
||||
\end{titlepage}
|
||||
\clearemptydoublepage
|
||||
\pagenumbering{roman}
|
||||
\tableofcontents
|
||||
\clearemptydoublepage
|
||||
\pagenumbering{arabic}
|
||||
\hypersetup{pageanchor=true}
|
||||
|
||||
%--- Begin generated contents ---
|
||||
%--- End generated contents ---
|
||||
|
||||
% Index
|
||||
\backmatter
|
||||
\newpage
|
||||
\phantomsection
|
||||
\clearemptydoublepage
|
||||
\addcontentsline{toc}{chapter}{\indexname}
|
||||
\printindex
|
||||
|
||||
\end{document}
|
||||
2557
lib/epdiy/doc/latex/tabu_doxygen.sty
Normal file
37
lib/epdiy/doc/make.bat
Normal file
@@ -0,0 +1,37 @@
|
||||
@ECHO OFF
|
||||
|
||||
pushd %~dp0
|
||||
|
||||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set SOURCEDIR=source
|
||||
set BUILDDIR=build
|
||||
|
||||
if "%1" == "" goto help
|
||||
|
||||
%SPHINXBUILD% >NUL 2>NUL
|
||||
if errorlevel 9009 (
|
||||
echo.
|
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||
echo.may add the Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.http://sphinx-doc.org/
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
doxygen.exe
|
||||
|
||||
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||
goto end
|
||||
|
||||
:help
|
||||
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||
|
||||
:end
|
||||
popd
|
||||
3
lib/epdiy/doc/requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
breathe>=4
|
||||
Sphinx>=3
|
||||
sphinx-rtd-theme>=0.5.2
|
||||
44
lib/epdiy/doc/source/about.rst
Normal file
@@ -0,0 +1,44 @@
|
||||
About
|
||||
=====
|
||||
|
||||
EPDiy is a driver board for e-Paper (or E-ink) displays.
|
||||
|
||||
.. _display_types:
|
||||
|
||||
Display Types
|
||||
-------------
|
||||
|
||||
The EPDiy driver board targets multiple E-Paper displays.
|
||||
As the driving method for all matrix-based E-ink displays seems to be more or less the same, only the right connector and timings are needed.
|
||||
A table of supported displays is mainained in the :code:`README.md` file.
|
||||
|
||||
Some of the supported displays are showcased below.
|
||||
|
||||
ED097OC4
|
||||
~~~~~~~~
|
||||
|
||||
The ED097OC4 was the original target of this project. It is an 9.7 inch screen, with a resolution of 1200 * 825 pixels (150dpi).
|
||||
It is fairly available on Ebay and AliExpress, for around 30$ to 35$.
|
||||
There is also a lower contrast version (ED097OC1) which also works.
|
||||
|
||||
.. image:: img/ed097oc4.jpg
|
||||
|
||||
ED060SC4
|
||||
~~~~~~~~
|
||||
|
||||
This is a 6 inch display, with a 800 * 600 resolution. With 150dpi as well, it has about half the total display area of the ED097OC4.
|
||||
To connect this display, the 39-pin connector on the back has to be populated.
|
||||
It is also the display a lot of experimentation was done with (see Thanks To), so there are alternative controllers available.
|
||||
Besides the obvious difference in size, this display is cheaper (~20$) and also refreshes slightly faster than the ED097OC4.
|
||||
|
||||
.. image:: img/ed060sc4.jpg
|
||||
|
||||
ED097TC2
|
||||
~~~~~~~~
|
||||
|
||||
Information on this display should be taken with a grain of salt. One of the displays I ordered as ED097OC4 came as ED097TC2,
|
||||
and upon testing it also exhibited noticably better contrast and a more responsive electro-phoretic medium.
|
||||
The ribbon connector looked like a ED097TC2 as well, or like the `9.7 inch screens offered by Waveshare <https://www.waveshare.com/9.7inch-e-Paper.htm>` (which is sold for a lot more).
|
||||
If you are on the lookout for such a display keep in mind the authenticity of my sample is disputable and resolution and connector type should be double-checked.
|
||||
|
||||
.. image:: img/ed097tc2.jpg
|
||||
20
lib/epdiy/doc/source/api.rst
Normal file
@@ -0,0 +1,20 @@
|
||||
.. _pub_api:
|
||||
|
||||
Library API
|
||||
===========
|
||||
|
||||
Highlevel API
|
||||
-------------
|
||||
.. doxygenfile:: epd_highlevel.h
|
||||
|
||||
Complete API
|
||||
------------
|
||||
.. doxygenfile:: epdiy.h
|
||||
|
||||
Internals
|
||||
----------
|
||||
.. doxygenfile:: epd_internals.h
|
||||
|
||||
Board-Specific Extensions
|
||||
-------------------------
|
||||
.. doxygenfile:: epd_board_specific.h
|
||||
71
lib/epdiy/doc/source/conf.py
Normal file
@@ -0,0 +1,71 @@
|
||||
# Configuration file for the Sphinx documentation builder.
|
||||
#
|
||||
# This file only contains a selection of the most common options. For a full
|
||||
# list see the documentation:
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
||||
|
||||
# -- Path setup --------------------------------------------------------------
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#
|
||||
# import os
|
||||
# import sys
|
||||
# sys.path.insert(0, os.path.abspath('.'))
|
||||
import subprocess, os
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
|
||||
project = 'EPDiy'
|
||||
copyright = '2023, Valentin Roland'
|
||||
author = 'Valentin Roland'
|
||||
|
||||
# The full version, including alpha/beta/rc tags
|
||||
release = '2.0.0'
|
||||
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = [
|
||||
'breathe'
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
# This pattern also affects html_static_path and html_extra_path.
|
||||
exclude_patterns = []
|
||||
|
||||
|
||||
# -- Options for HTML output -------------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
breathe_projects = { "epdiy": "./xml/" }
|
||||
|
||||
breathe_default_project = "epdiy"
|
||||
|
||||
breathe_domain_by_extension = {
|
||||
"h" : "c",
|
||||
"c" : "c",
|
||||
}
|
||||
|
||||
read_the_docs_build = os.environ.get('READTHEDOCS', None) == 'True'
|
||||
|
||||
if read_the_docs_build:
|
||||
|
||||
subprocess.call('cd ../; doxygen', shell=True)
|
||||
95
lib/epdiy/doc/source/filegen.rst
Normal file
@@ -0,0 +1,95 @@
|
||||
Fonts, Images, Waveforms
|
||||
========================
|
||||
|
||||
The ESP32 is, although fairly capable, still a microcontroller.
|
||||
Thus, with memory and computational resources limited, it is useful to do as much of the processing
|
||||
for displaying fonts and images on a computer.
|
||||
|
||||
Epdiy comes with scripts that convert fonts, images and waveforms to C headers,
|
||||
that you can then simply `#include` in your project.
|
||||
|
||||
Generating Font Files
|
||||
---------------------
|
||||
|
||||
Fonts can only be used by the driver in a special header format
|
||||
(inspired by the Adafruit GFX library), which need to be generated from TTF fonts.
|
||||
For this purpose, the :code:`scripts/fontconvert.py` utility is provided.
|
||||
.. code-block::
|
||||
|
||||
fontconvert.py [-h] [--compress] [--additional-intervals ADDITIONAL_INTERVALS] name size fontstack [fontstack ...]
|
||||
|
||||
The following example generates a header file for Fira Code at size 10, where glyphs that are not found in Fira Code will be taken from Symbola:
|
||||
.. code-block::
|
||||
|
||||
./fontconvert.py FiraCode 10 /usr/share/fonts/TTF/FiraCode-Regular.ttf /usr/share/fonts/TTF/Symbola.ttf > ../examples/terminal/main/firacode.h
|
||||
|
||||
You can change which unicode character codes are to be exported by specifying additional
|
||||
ranges of unicode code points with :code:`--additional-intervals`.
|
||||
Intervals are written as :code:`min,max`.
|
||||
To add multiple intervals, you can specify the :code:`--additional-intervals` option multiple times.
|
||||
.. code-block::
|
||||
|
||||
./fontconvert.py ... --additional-intervals 0xE0A0,0xE0A2 --additional-intervals 0xE0B0,0xE0B3 ...
|
||||
|
||||
The above command would add two addtitional ranges.
|
||||
|
||||
You can enable compression with :code:`--compress`, which reduces the size of the generated font but comes at a performance cost.
|
||||
|
||||
If the generated font files with the default characters are too large for your application,
|
||||
you can modify :code:`intervals` in :code:`fontconvert.py`.
|
||||
|
||||
Generating Images
|
||||
-----------------
|
||||
|
||||
The process for converting images is very similar to converting fonts.
|
||||
Run the :code:`scripts/imgconvert.py` script with an input image, an image name and an output image.
|
||||
.. code-block::
|
||||
|
||||
imgconvert.py [-h] -i INPUTFILE -n NAME -o OUTPUTFILE [-maxw MAX_WIDTH] [-maxh MAX_HEIGHT]
|
||||
|
||||
The image is converted to grayscale scaled down to match fit into :code:`MAX_WIDTH` and :code:`MAX_HEIGHT` (1200x825 by default).
|
||||
For accurate grayscale it is advisable to color-grade and scale the image with a dedicated tool before converting it.
|
||||
|
||||
:code:`OUTPUTFILE` will be a C header with the following constants defined:
|
||||
|
||||
- :code:`{NAME}_width` is the width of the image
|
||||
- :code:`{NAME}_height` is the height of the image
|
||||
- :code:`{NAME}_data` is the image data in 4 bit-per-pixel grayscale format.
|
||||
|
||||
Converting Waveforms
|
||||
--------------------
|
||||
|
||||
|
||||
.. note:: Waveform Timings and V7
|
||||
|
||||
Epdiy builtin waveforms currently use variable frame timings to reduce the number
|
||||
of update cycles required. This is currently not implemented in V7. Hence, for best results it is recommended to use Vendor waveforms where available, which use constant frame timings.
|
||||
|
||||
In comercial applications, displays are driven with information in so-called `Waveform Files`.
|
||||
These specify how which pulses to apply to the pixel to transition from one gray tone to another.
|
||||
Unfortunately, they are display-specific and proprietary.
|
||||
However, while they are not freely available, they can be obtained through a number of ways:
|
||||
|
||||
- Being a large customer of E-Ink. Unfortunately not doable for mere mortals.
|
||||
- Finding them scattered around the internet. Examples include the `MobileRead forums <https://www.mobileread.com/>`_ or the `NXP Support forum <https://community.nxp.com/t5/i-MX-Processors/How-to-convert-wbf-waveform-file-to-wf-file/m-p/467926/highlight/true>`_.
|
||||
- Extracting from e-Reader firmware.
|
||||
- Extracting from a flash chip that comes with some displays. More on this can be found `here <https://hackaday.io/project/21168-fpga-eink-controller/log/57822-waveforms-binary-extract>`_.
|
||||
|
||||
Waveforms usually come with a :code:`*.wbf` file extension.
|
||||
|
||||
|
||||
If you have a matching waveform file for your display, it can be converted to a waveform header that's usable by epdiy.
|
||||
The advantage of using vendor waveforms include the availability of all implemented modes in the waveform file, support of a wide range of temperatures and more accurate grayscale-to-grayscale transitions.
|
||||
|
||||
As a first step, the waveform data is extracted from the original waveform file and stored in JSON format.
|
||||
This can be done using a `modified version <https://github.com/vroland/inkwave>`_ of `inkwave <https://github.com/fread-ink/inkwave>`_ by Marc Juul.
|
||||
|
||||
Once a matching JSON file is obtained, the :code:`scripts/waveform_hdrgen.py` utility can be used to generate a waveform header, which can be included in your project.
|
||||
::
|
||||
|
||||
waveform_hdrgen.py [-h] [--list-modes] [--temperature-range TEMPERATURE_RANGE] [--export-modes EXPORT_MODES] name
|
||||
|
||||
With the :code:`--list-modes` option, a list of all included modes is printed.
|
||||
:code:`name` specifies a name for the generated :code:`EpdWaveform` object.
|
||||
Additionally, the temperature range and modes to export can be limited in order to reduce file size.
|
||||
An example for the usage of this script can be found in the top-level :code:`Makefile` of the epdiy repository.
|
||||
140
lib/epdiy/doc/source/getting_started.rst
Normal file
@@ -0,0 +1,140 @@
|
||||
.. _getting_started:
|
||||
|
||||
Getting Started
|
||||
===============
|
||||
|
||||
|
||||
Getting your Board
|
||||
------------------
|
||||
|
||||
At the current point in time, there is no official way to buy an epdiy board.
|
||||
Fortunately, it is quite easy to order your own. There are many PCB prototype services
|
||||
that will manufacture boards for a low price.
|
||||
|
||||
To use one of those services, upload the "Gerber files", usually provided as a zip file,
|
||||
to the service.
|
||||
You can find all the available hardware listed on the `Hardware Page <https://vroland.github.io/epdiy-hardware/>`_.
|
||||
|
||||
Choosing and Finding Parts
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The parts needed to assemble the epdiy board are listed in the `BOM.csv` file.
|
||||
Commodity parts like resistors, capacitors, coils and diodes are interchangable, as long as they
|
||||
fit the footprint.
|
||||
When in doubt, use the parts listed in the BOM file.
|
||||
|
||||
However, some parts are not as common, especially the connectors.
|
||||
Most of them can be found on sites like eBay or AliExpress.
|
||||
|
||||
Tips:
|
||||
- Use the WROVER-B module instead of other WROVER variants.
|
||||
This module exhibits a low deep sleep current and is proven to work.
|
||||
- The LT1945 voltage booster seems to be out of stock with some distributors,
|
||||
but they are available cheaply from AliExpress.
|
||||
|
||||
Calibrate VCOM
|
||||
--------------
|
||||
|
||||
.. note:: Only for old boards
|
||||
|
||||
This is only needed with boards prior to revision 6.
|
||||
From revision 6 onwards, VCOM can be set in software via :code:`epd_set_vcom(..)`.
|
||||
|
||||
EPaper displays use electrical fields to drive colored particles.
|
||||
One of the required voltages, VCOM (Common Voltage) is display-dependent
|
||||
and must be calibrated for each display individually.
|
||||
|
||||
Fortunately, the VCOM voltage is usually printed on the display, similar to this:
|
||||
|
||||
.. image:: img/vcom.jpg
|
||||
|
||||
The VCOM value is usually between -1V and -3V.
|
||||
|
||||
For the v6 board, you can enter the desired VCOM value in :code:`make menuconfig`.
|
||||
No interaction is required.
|
||||
|
||||
For the older models, use the trimmer marked :code:`RV1`.
|
||||
You can measure the VCOM on the VCOM test pad (if your board has one) or directly
|
||||
at the amplifier:
|
||||
|
||||
.. image:: img/vcom_tp.jpg
|
||||
.. image:: img/vcom_opamp.jpg
|
||||
|
||||
.. note::
|
||||
|
||||
Although most boards do not have it yet, image quality for partial updates can be improved by adding a (at least) 4.7uF capacitor between VCOM and GND.
|
||||
When adding this capacitor, take care with the polarity as VCOM is negative!
|
||||
|
||||
Flashing the demo
|
||||
-----------------
|
||||
|
||||
First, connect you board with the computer. In the output of :code:`lsusb` you should find something like:
|
||||
::
|
||||
|
||||
Bus 001 Device 048: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
|
||||
|
||||
This means the serial adapter is working and there a serial like :code:`/dev/ttyUSB0` should appear.
|
||||
|
||||
Next, make sure you have the `Espressif IoT Development Framework <https://github.com/espressif/esp-idf>`_ installed.
|
||||
The current stable (and tested) version is 5.3.
|
||||
For instructions on how to get started with the IDF, please refer to their `documentation <https://docs.espressif.com/projects/esp-idf/en/stable/get-started/>`_.
|
||||
|
||||
Then, clone the :code:`epdiy` git repository (and its submodules):
|
||||
::
|
||||
|
||||
git clone --recursive https://github.com/vroland/epdiy
|
||||
|
||||
Now, (after activating the IDF environment) you should be able to build the demo:
|
||||
::
|
||||
|
||||
cd examples/demo/
|
||||
idf.py build
|
||||
|
||||
Hold down the :code:`BOOT` button on your board, while quickly pressing the :code:`RESET` button.
|
||||
The ESP module is now in boot mode.
|
||||
Upload the demo program to the board with
|
||||
::
|
||||
|
||||
idf.py flash -b 921600 && idf.py monitor
|
||||
|
||||
Pressing :code:`RESET` a second time should start the demo program, which will
|
||||
output some information on the serial monitor.
|
||||
|
||||
With the **board power turned off**, connect your display.
|
||||
Power on the board.
|
||||
You should now see the demo output on your display.
|
||||
|
||||
Use with esp-idf
|
||||
----------------
|
||||
|
||||
The neccessary functionality for driving an EPD display is encapsulated in the :code:`components/epdiy` IDF component.
|
||||
To use it in you own project, simply copy the :code:`epdiy` folder to your project-local :code:`components` directory.
|
||||
The component sould be automatically detected by the framework, you can now use
|
||||
::
|
||||
|
||||
#include "epdiy.h"
|
||||
|
||||
to use the EPD driver's :ref:`pub_api`.
|
||||
|
||||
Selecting a Board and Display Type
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
With epdiy 2.0.0, the display type and board are set via :code:`epd_init()`.
|
||||
|
||||
Enable SPI RAM
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
The ESP32-WROVER-B comes with an additional 8MB external PSRAM, where the :code:`epdiy` is going to store ~2MB for its internal frame buffers.
|
||||
Since it is dynamically allocated from the heap, and the built-in SRAM of ~160KB is insufficient, we need to enable external SPI RAM first.
|
||||
|
||||
Open the :code:`menuconfig` again (see above) and navigate to :code:`Component config -> ESP32-Specific -> Support for external, SPI-connected RAM` and enable it.
|
||||
|
||||
Use with Arduino
|
||||
----------------
|
||||
|
||||
Epdiy can be used as an Arduino library. Additionally, epdiy comes with board definitions for its supported boards, which must be installed separately.
|
||||
To install epdiy to work with the Arduino IDE (>= 1.8), place the downloaded repository into your Arduino libraries folder.
|
||||
|
||||
Alternatively, it is possible to use the `Arduino APIs as an IDF component <https://github.com/espressif/arduino-esp32/blob/master/docs/esp-idf_component.md>`_,
|
||||
which allows you to use the Arduino ecosystem (Except for a different build process).
|
||||
This gives you full access to ESP-IDF options.
|
||||
|
||||
BIN
lib/epdiy/doc/source/img/board_p1.jpg
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
BIN
lib/epdiy/doc/source/img/board_p2.jpg
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
lib/epdiy/doc/source/img/demo.jpg
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
BIN
lib/epdiy/doc/source/img/ed060sc4.jpg
Normal file
|
After Width: | Height: | Size: 2.7 MiB |
BIN
lib/epdiy/doc/source/img/ed097oc4.jpg
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
BIN
lib/epdiy/doc/source/img/ed097tc2.jpg
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
lib/epdiy/doc/source/img/hardware_page.png
Normal file
|
After Width: | Height: | Size: 344 KiB |
BIN
lib/epdiy/doc/source/img/v6.jpg
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
BIN
lib/epdiy/doc/source/img/vcom.jpg
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
lib/epdiy/doc/source/img/vcom_opamp.jpg
Normal file
|
After Width: | Height: | Size: 547 KiB |
BIN
lib/epdiy/doc/source/img/vcom_tp.jpg
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
35
lib/epdiy/doc/source/index.rst
Normal file
@@ -0,0 +1,35 @@
|
||||
.. EPDiy documentation master file, created by
|
||||
sphinx-quickstart on Sat Apr 18 23:41:08 2020.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
The EPDiy Driver Board
|
||||
======================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Quickstart:
|
||||
|
||||
about.rst
|
||||
getting_started.rst
|
||||
filegen.rst
|
||||
tips.rst
|
||||
api.rst
|
||||
|
||||
EPDiy is a driver board which talks to affordable E-Paper (or E-Ink) screens, which are usually sold as replacement screens for E-Book readers. Why are they interesting?
|
||||
|
||||
* Easy on the eyes and paper-like aesthetics
|
||||
* No power consumption when not updating
|
||||
* Sunlight-readable
|
||||
|
||||
Ready-made DIY modules for this size and with 4bpp (16 Grayscale) color support are currently quite expensive. This project uses Kindle replacement screens, which are available for 20$ (small) / 30$ (large) on ebay!
|
||||
|
||||
The EPDiy driver board targets multiple E-Paper displays. As the driving method for all matrix-based E-ink displays seems to be more or less the same, only the right connector and timings are needed. The EPDiy PCB features a 33pin and a 39pin connector, which allow to drive the following display types: ED097OC4, ED060SC4, ED097TC2
|
||||
|
||||
:ref:`getting_started`
|
||||
|
||||
.. image:: img/demo.jpg
|
||||
|
||||
.. image:: img/board_p1.jpg
|
||||
|
||||
.. image:: img/board_p2.jpg
|
||||
41
lib/epdiy/doc/source/tips.rst
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
Tips & Tricks
|
||||
=============
|
||||
|
||||
|
||||
Temperature Dependence
|
||||
----------------------
|
||||
|
||||
The display refresh speed depends on the environmental temperature.
|
||||
Thus, if your room temperature is significantly different from ~22°C, grayscale
|
||||
accuracy might be affected when using the builtin waveform.
|
||||
This can be mitigated by using a different timing curve, but this would require calibrating the display timings at that temperature.
|
||||
If you did this for some temperature other than room temperature, please submit a pull request!
|
||||
|
||||
Deep Sleep Current
|
||||
------------------
|
||||
|
||||
Board Revision V5 is optimized for running from a battery thanks to its low deep sleep current consumption.
|
||||
In order to achieve the lowest possible deep sleep current, call
|
||||
::
|
||||
|
||||
epd_deinit()
|
||||
|
||||
before going to deep sleep. This will de-initialize the I2S peripheral used to drive the diplay and bring the pins used by epdiy to a low-power state.
|
||||
You should be able to achieve a deep-sleep current of less than 13µA.
|
||||
If your deep-sleep current is much higher, please check your attached peripherals.
|
||||
With some modules, you have to isolate GPIO 12 before going to deep sleep:
|
||||
::
|
||||
|
||||
rtc_gpio_isolate(GPIO_NUM_12)
|
||||
|
||||
Adding a New Display
|
||||
--------------------
|
||||
|
||||
This section is work-in-progress.
|
||||
|
||||
- Add display definitions in :code:`displays.c` and :code:`epd_display.h`.
|
||||
- Include waveform in :code:`bulitin_waveforms.c`
|
||||
- Calibrate timing curve in :code:`scripts/generate_epdiy_waveforms.py`.
|
||||
- Add to the list of displays to build waveforms for in :code:`Makefile`
|
||||
- Document
|
||||
4
lib/epdiy/examples/calibration_helper/CMakeLists.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.16.0)
|
||||
set(EXTRA_COMPONENT_DIRS "../../")
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
project(vcom_calibration_helper)
|
||||
@@ -0,0 +1,3 @@
|
||||
set(app_sources "main.c")
|
||||
|
||||
idf_component_register(SRCS ${app_sources} REQUIRES epdiy)
|
||||
42
lib/epdiy/examples/calibration_helper/main/main.c
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Simple helper program enabling EPD power to allow for easier VCOM calibration.
|
||||
*
|
||||
* This is only needed for boards V5 or lower!
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "esp_heap_caps.h"
|
||||
#include "esp_log.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "sdkconfig.h"
|
||||
|
||||
#include "epdiy.h"
|
||||
|
||||
// choose the default demo board depending on the architecture
|
||||
#ifdef CONFIG_IDF_TARGET_ESP32
|
||||
#define DEMO_BOARD epd_board_v6
|
||||
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
|
||||
#define DEMO_BOARD epd_board_v7
|
||||
#endif
|
||||
|
||||
void enable_vcom() {
|
||||
epd_init(&DEMO_BOARD, &ED097TC2, EPD_LUT_64K);
|
||||
ESP_LOGI("main", "waiting for one second before poweron...");
|
||||
vTaskDelay(1000);
|
||||
ESP_LOGI("main", "enabling VCOMM...");
|
||||
epd_poweron();
|
||||
ESP_LOGI(
|
||||
"main",
|
||||
"VCOMM enabled. You can now adjust the on-board trimmer to the VCOM value specified on the "
|
||||
"display."
|
||||
);
|
||||
while (1) {
|
||||
vTaskDelay(1000);
|
||||
};
|
||||
}
|
||||
|
||||
void app_main() {
|
||||
enable_vcom();
|
||||
}
|
||||
1500
lib/epdiy/examples/calibration_helper/sdkconfig.defaults.esp32
Normal file
1455
lib/epdiy/examples/calibration_helper/sdkconfig.defaults.esp32s3
Normal file
4
lib/epdiy/examples/demo/CMakeLists.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.10.0)
|
||||
set(EXTRA_COMPONENT_DIRS "../../")
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
project(firmware)
|
||||
21
lib/epdiy/examples/demo/Makefile
Normal file
@@ -0,0 +1,21 @@
|
||||
FONT_DIR ?= /usr/share/fonts/TTF
|
||||
FONTCONVERT ?= ../../scripts/fontconvert.py
|
||||
IMGCONVERT ?= ../../scripts/imgconvert.py
|
||||
|
||||
.PHONY: fonts
|
||||
fonts: \
|
||||
main/firasans_20.h \
|
||||
main/firasans_12.h \
|
||||
main/img_zebra.h \
|
||||
main/img_board.h \
|
||||
main/img_giraffe.h \
|
||||
main/img_beach.h
|
||||
|
||||
main/firasans_%.h: $(FONTCONVERT)
|
||||
python3 $(FONTCONVERT) --compress FiraSans_$* $* $(FONT_DIR)/FiraSans-Regular.ttf $(FONT_DIR)/Symbola.ttf > $@
|
||||
|
||||
main/img_%.h: files/%.jpg
|
||||
python3 $(IMGCONVERT) -i $< -o $@ -n img_$*
|
||||
|
||||
clean:
|
||||
rm main/*.h
|
||||
BIN
lib/epdiy/examples/demo/files/beach.jpg
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
lib/epdiy/examples/demo/files/board.jpg
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
lib/epdiy/examples/demo/files/giraffe.jpg
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
lib/epdiy/examples/demo/files/zebra.jpg
Normal file
|
After Width: | Height: | Size: 142 KiB |
4
lib/epdiy/examples/demo/main/CMakeLists.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
set(app_sources "main.c")
|
||||
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
idf_component_register(SRCS ${app_sources} REQUIRES epdiy)
|
||||
8087
lib/epdiy/examples/demo/main/firasans_12.h
Normal file
13383
lib/epdiy/examples/demo/main/firasans_20.h
Normal file
11254
lib/epdiy/examples/demo/main/img_beach.h
Normal file
8667
lib/epdiy/examples/demo/main/img_board.h
Normal file
9214
lib/epdiy/examples/demo/main/img_zebra.h
Normal file
271
lib/epdiy/examples/demo/main/main.c
Normal file
@@ -0,0 +1,271 @@
|
||||
/* Simple firmware for a ESP32 displaying a static image on an EPaper Screen.
|
||||
*
|
||||
* Write an image into a header file using a 3...2...1...0 format per pixel,
|
||||
* for 4 bits color (16 colors - well, greys.) MSB first. At 80 MHz, screen
|
||||
* clears execute in 1.075 seconds and images are drawn in 1.531 seconds.
|
||||
*/
|
||||
|
||||
#include <esp_heap_caps.h>
|
||||
#include <esp_log.h>
|
||||
#include <esp_sleep.h>
|
||||
#include <esp_timer.h>
|
||||
#include <esp_types.h>
|
||||
#include <freertos/FreeRTOS.h>
|
||||
#include <freertos/task.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <epdiy.h>
|
||||
|
||||
#include "sdkconfig.h"
|
||||
|
||||
#include "firasans_12.h"
|
||||
#include "firasans_20.h"
|
||||
#include "img_beach.h"
|
||||
#include "img_board.h"
|
||||
#include "img_zebra.h"
|
||||
|
||||
#define WAVEFORM EPD_BUILTIN_WAVEFORM
|
||||
|
||||
// choose the default demo board depending on the architecture
|
||||
#ifdef CONFIG_IDF_TARGET_ESP32
|
||||
#define DEMO_BOARD epd_board_v6
|
||||
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
|
||||
#define DEMO_BOARD epd_board_v7
|
||||
#endif
|
||||
|
||||
EpdiyHighlevelState hl;
|
||||
|
||||
void idf_setup() {
|
||||
epd_init(&DEMO_BOARD, &ED097TC2, EPD_LUT_64K);
|
||||
// Set VCOM for boards that allow to set this in software (in mV).
|
||||
// This will print an error if unsupported. In this case,
|
||||
// set VCOM using the hardware potentiometer and delete this line.
|
||||
epd_set_vcom(1560);
|
||||
|
||||
hl = epd_hl_init(WAVEFORM);
|
||||
|
||||
// Default orientation is EPD_ROT_LANDSCAPE
|
||||
epd_set_rotation(EPD_ROT_LANDSCAPE);
|
||||
|
||||
printf(
|
||||
"Dimensions after rotation, width: %d height: %d\n\n",
|
||||
epd_rotated_display_width(),
|
||||
epd_rotated_display_height()
|
||||
);
|
||||
|
||||
// The display bus settings for V7 may be conservative, you can manually
|
||||
// override the bus speed to tune for speed, i.e., if you set the PSRAM speed
|
||||
// to 120MHz.
|
||||
// epd_set_lcd_pixel_clock_MHz(17);
|
||||
|
||||
heap_caps_print_heap_info(MALLOC_CAP_INTERNAL);
|
||||
heap_caps_print_heap_info(MALLOC_CAP_SPIRAM);
|
||||
}
|
||||
|
||||
#ifndef ARDUINO_ARCH_ESP32
|
||||
void delay(uint32_t millis) {
|
||||
vTaskDelay(millis / portTICK_PERIOD_MS);
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline void checkError(enum EpdDrawError err) {
|
||||
if (err != EPD_DRAW_SUCCESS) {
|
||||
ESP_LOGE("demo", "draw error: %X", err);
|
||||
}
|
||||
}
|
||||
|
||||
void draw_progress_bar(int x, int y, int width, int percent, uint8_t* fb) {
|
||||
const uint8_t white = 0xFF;
|
||||
const uint8_t black = 0x0;
|
||||
|
||||
EpdRect border = {
|
||||
.x = x,
|
||||
.y = y,
|
||||
.width = width,
|
||||
.height = 20,
|
||||
};
|
||||
epd_fill_rect(border, white, fb);
|
||||
epd_draw_rect(border, black, fb);
|
||||
|
||||
EpdRect bar = {
|
||||
.x = x + 5,
|
||||
.y = y + 5,
|
||||
.width = (width - 10) * percent / 100,
|
||||
.height = 10,
|
||||
};
|
||||
|
||||
epd_fill_rect(bar, black, fb);
|
||||
|
||||
checkError(epd_hl_update_area(&hl, MODE_DU, epd_ambient_temperature(), border));
|
||||
}
|
||||
|
||||
void idf_loop() {
|
||||
// select the font based on display width
|
||||
const EpdFont* font;
|
||||
if (epd_width() < 1000) {
|
||||
font = &FiraSans_12;
|
||||
} else {
|
||||
font = &FiraSans_20;
|
||||
}
|
||||
|
||||
uint8_t* fb = epd_hl_get_framebuffer(&hl);
|
||||
|
||||
epd_poweron();
|
||||
epd_clear();
|
||||
int temperature = epd_ambient_temperature();
|
||||
epd_poweroff();
|
||||
|
||||
printf("current temperature: %d\n", temperature);
|
||||
|
||||
epd_fill_circle(30, 30, 15, 0, fb);
|
||||
int cursor_x = epd_rotated_display_width() / 2;
|
||||
int cursor_y = epd_rotated_display_height() / 2 - 100;
|
||||
|
||||
EpdFontProperties font_props = epd_font_properties_default();
|
||||
font_props.flags = EPD_DRAW_ALIGN_CENTER;
|
||||
|
||||
char srotation[32];
|
||||
sprintf(srotation, "Loading demo...\nRotation: %d", epd_get_rotation());
|
||||
|
||||
epd_write_string(font, srotation, &cursor_x, &cursor_y, fb, &font_props);
|
||||
|
||||
int bar_x = epd_rotated_display_width() / 2 - 200;
|
||||
int bar_y = epd_rotated_display_height() / 2;
|
||||
|
||||
epd_poweron();
|
||||
checkError(epd_hl_update_screen(&hl, MODE_GL16, temperature));
|
||||
epd_poweroff();
|
||||
|
||||
for (int i = 0; i < 6; i++) {
|
||||
epd_poweron();
|
||||
draw_progress_bar(bar_x, bar_y, 400, i * 10, fb);
|
||||
epd_poweroff();
|
||||
}
|
||||
|
||||
cursor_x = epd_rotated_display_width() / 2;
|
||||
cursor_y = epd_rotated_display_height() / 2 + 100;
|
||||
|
||||
epd_write_string(
|
||||
font, "Just kidding,\n this is a demo animation 😉", &cursor_x, &cursor_y, fb, &font_props
|
||||
);
|
||||
epd_poweron();
|
||||
checkError(epd_hl_update_screen(&hl, MODE_GL16, temperature));
|
||||
epd_poweroff();
|
||||
|
||||
for (int i = 0; i < 6; i++) {
|
||||
epd_poweron();
|
||||
draw_progress_bar(bar_x, bar_y, 400, 50 - i * 10, fb);
|
||||
epd_poweroff();
|
||||
vTaskDelay(1);
|
||||
}
|
||||
|
||||
cursor_y = epd_rotated_display_height() / 2 + 200;
|
||||
cursor_x = epd_rotated_display_width() / 2;
|
||||
|
||||
EpdRect clear_area = {
|
||||
.x = 0,
|
||||
.y = epd_rotated_display_height() / 2 + 100,
|
||||
.width = epd_rotated_display_width(),
|
||||
.height = 300,
|
||||
};
|
||||
|
||||
epd_fill_rect(clear_area, 0xFF, fb);
|
||||
|
||||
epd_write_string(
|
||||
font, "Now let's look at some pictures.", &cursor_x, &cursor_y, fb, &font_props
|
||||
);
|
||||
epd_poweron();
|
||||
checkError(epd_hl_update_screen(&hl, MODE_GL16, temperature));
|
||||
epd_poweroff();
|
||||
|
||||
delay(1000);
|
||||
|
||||
epd_hl_set_all_white(&hl);
|
||||
|
||||
EpdRect zebra_area = {
|
||||
.x = epd_rotated_display_width() / 2 - img_zebra_width / 2,
|
||||
.y = epd_rotated_display_height() / 2 - img_zebra_height / 2,
|
||||
.width = img_zebra_width,
|
||||
.height = img_zebra_height,
|
||||
};
|
||||
|
||||
epd_draw_rotated_image(zebra_area, img_zebra_data, fb);
|
||||
epd_poweron();
|
||||
checkError(epd_hl_update_screen(&hl, MODE_GC16, temperature));
|
||||
epd_poweroff();
|
||||
|
||||
delay(5000);
|
||||
|
||||
EpdRect board_area = {
|
||||
.x = epd_rotated_display_width() / 2 - img_board_width / 2,
|
||||
.y = epd_rotated_display_height() / 2 - img_board_height / 2,
|
||||
.width = img_board_width,
|
||||
.height = img_board_height,
|
||||
};
|
||||
|
||||
epd_draw_rotated_image(board_area, img_board_data, fb);
|
||||
cursor_x = epd_rotated_display_width() / 2;
|
||||
cursor_y = board_area.y;
|
||||
font_props.flags |= EPD_DRAW_BACKGROUND;
|
||||
epd_write_string(font, "↓ Thats the V2 board. ↓", &cursor_x, &cursor_y, fb, &font_props);
|
||||
|
||||
epd_poweron();
|
||||
checkError(epd_hl_update_screen(&hl, MODE_GC16, temperature));
|
||||
epd_poweroff();
|
||||
|
||||
delay(5000);
|
||||
epd_hl_set_all_white(&hl);
|
||||
|
||||
EpdRect border_rect = {
|
||||
.x = 20,
|
||||
.y = 20,
|
||||
.width = epd_rotated_display_width() - 40,
|
||||
.height = epd_rotated_display_height() - 40,
|
||||
};
|
||||
epd_draw_rect(border_rect, 0, fb);
|
||||
|
||||
cursor_x = 50;
|
||||
cursor_y = 100;
|
||||
|
||||
epd_write_default(
|
||||
font,
|
||||
"➸ 16 color grayscale\n"
|
||||
"➸ ~250ms - 1700ms for full frame draw 🚀\n"
|
||||
"➸ Use with 6\" or 9.7\" EPDs\n"
|
||||
"➸ High-quality font rendering ✎🙋\n"
|
||||
"➸ Partial update\n"
|
||||
"➸ Arbitrary transitions with vendor waveforms",
|
||||
&cursor_x,
|
||||
&cursor_y,
|
||||
fb
|
||||
);
|
||||
|
||||
EpdRect img_beach_area = {
|
||||
.x = 0,
|
||||
.y = epd_rotated_display_height() - img_beach_height,
|
||||
.width = img_beach_width,
|
||||
.height = img_beach_height,
|
||||
};
|
||||
|
||||
epd_draw_rotated_image(img_beach_area, img_beach_data, fb);
|
||||
|
||||
epd_poweron();
|
||||
checkError(epd_hl_update_screen(&hl, MODE_GC16, temperature));
|
||||
epd_poweroff();
|
||||
|
||||
printf("going to sleep...\n");
|
||||
epd_deinit();
|
||||
esp_deep_sleep_start();
|
||||
}
|
||||
|
||||
#ifndef ARDUINO_ARCH_ESP32
|
||||
void app_main() {
|
||||
idf_setup();
|
||||
|
||||
while (1) {
|
||||
idf_loop();
|
||||
};
|
||||
}
|
||||
#endif
|
||||
30
lib/epdiy/examples/demo/main/main.ino
Normal file
@@ -0,0 +1,30 @@
|
||||
/**
|
||||
* This is the Arduino wrapper for the "Demo" example.
|
||||
* Please go to the main.c for the main example file.
|
||||
*
|
||||
* This example was developed for the ESP IoT Development Framework (IDF).
|
||||
* You can still use this code in the Arduino IDE, but it may not look
|
||||
* and feel like a classic Arduino sketch.
|
||||
* If you are looking for an example with Arduino look-and-feel,
|
||||
* please check the other examples.
|
||||
*/
|
||||
|
||||
// Important: These are C functions, so they must be declared with C linkage!
|
||||
extern "C" {
|
||||
void idf_setup();
|
||||
void idf_loop();
|
||||
}
|
||||
|
||||
void setup() {
|
||||
if (psramInit()) {
|
||||
Serial.println("\nThe PSRAM is correctly initialized");
|
||||
} else {
|
||||
Serial.println("\nPSRAM does not work");
|
||||
}
|
||||
|
||||
idf_setup();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
idf_loop();
|
||||
}
|
||||
0
lib/epdiy/examples/demo/sdkconfig.defaults
Normal file
1500
lib/epdiy/examples/demo/sdkconfig.defaults.esp32
Normal file
1455
lib/epdiy/examples/demo/sdkconfig.defaults.esp32s3
Normal file
4
lib/epdiy/examples/dragon/CMakeLists.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.16.0)
|
||||
set(EXTRA_COMPONENT_DIRS "../../")
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
project(dragon_example)
|
||||
7
lib/epdiy/examples/dragon/README.md
Normal file
@@ -0,0 +1,7 @@
|
||||
A demo showing a Full-Screen Image
|
||||
==================================
|
||||
|
||||
*The image size is chosen to fit a 1200 * 825 display!*
|
||||
|
||||
Image by David REVOY / CC BY (https://creativecommons.org/licenses/by/3.0)
|
||||
https://commons.wikimedia.org/wiki/File:Durian_-_Sintel-wallpaper-dragon.jpg
|
||||
BIN
lib/epdiy/examples/dragon/cc_dragon.jpg
Normal file
|
After Width: | Height: | Size: 212 KiB |
3
lib/epdiy/examples/dragon/main/CMakeLists.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
set(app_sources "main.c")
|
||||
|
||||
idf_component_register(SRCS ${app_sources} REQUIRES epdiy)
|
||||